Themensystem für Komponenten · Neue Ressource

Mantine-Designsystem.

Eine Referenz für Mantine 9 mit nativer Teilnehmertabelle und Terminierungs-Drawer. Untersuche die tatsächlichen Themenskalen, verbinde useForm mit TextInput, Select, Checkbox und DatePickerInput und teste die Validierung, bevor du einen lokalen Eintrag hinzufügst.

OpenDesign-Leitfaden9 Kapitel32 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Vorschau der Mantine-Designsystem-Oberfläche

Öffnen Sie die Sidebar, lösen Sie eine Feldvalidierung aus, wählen Sie eine Studie und ein Datum aus, fügen Sie lokal eine teilnehmende Person hinzu und widerrufen Sie eine Beispiel-Einwilligung.

Teilnehmendentabelle und Terminierungs-SidebarVollständiges Beispiel öffnen
Nativer Kern, Formular- und Datums-Pakete von Mantine 9.6.3 mit React 19. Helles Erscheinungsbild erzwungen und Cyan-Theme; nur lokaler Zustand. · Implementierungsreferenz
02

Mantine-Designsystem – Designreferenz

Ausgewählte DEFAULT_THEME-Werte, überprüft anhand von @mantine/core 9.6.3. Die numerischen Pixel-Entsprechungen setzen einen 16-px-Root-Wert und theme.scale=1 voraus; skalierte Tokens werden über --mantine-scale aufgelöst. Die primäre Cyan-Farbe, Farbton 8, und der Radius md sind explizite Anwendungsüberschreibungen.

Im Beispiel verwendete Cyan-Palette

Quelle
Name / RegelWert / KonfigurationVerwendung
colors.cyan[0]#e3fafc Zurückhaltende Theme-Zusammenfassungsfläche.
colors.cyan[1]#c5f6fa Heller Farbton.
colors.cyan[2]#99e9f2 Heller Farbton.
colors.cyan[3]#66d9e8 Heller Farbton.
colors.cyan[4]#3bc9db Mittlerer heller Farbton.
colors.cyan[5]#22b8cf Mittlerer dunkler Farbton.
colors.cyan[6]#15aabf Standard-Farbton der Palette.
colors.cyan[7]#1098ad Dunklerer Farbton.
colors.cyan[8]#0c8599 Ausgewählter Farbton für die primäre Aktion.
colors.cyan[9]#0b7285 Kräftiger Textakzent.

Schriftgrößenskala bei scale 1

Quelle
Name / RegelWert / KonfigurationVerwendung
fontSizes.xs / sm12px / 14pxDatensatz-IDs / unterstützender Text.
fontSizes.md / lg / xl16px / 18px / 20pxStandard-Fließtext und größere Schrift.
lineHeights.xs / sm / md1.4 / 1.45 / 1.55Aufeinander abgestimmte Fließtextgrößen.
lineHeights.lg / xl1.6 / 1.65Größere Schriftgrößen für längere Texte.
headings.h134px / 1.3Titel der Teilnehmersitzungen.
headings.h2 / h326px / 1.35; 22px / 1.4Verfügbare Überschriftenstufen.
fontFamilyPlatform sans-serif stackKeine heruntergeladene Schrift erforderlich.

Abstände und Radius bei scale 1

Quelle
Name / RegelWert / KonfigurationVerwendung
spacing.xs / sm10px / 12pxKleine Abstände.
spacing.md / lg / xl16px / 20px / 32pxMobiler Innenabstand / Feldabstand / Abschnittsabstand.
radius.xs / sm2px / 4pxKleine Formelemente.
radius.md / lg / xl8px / 16px / 32pxBeispiel für standardmäßige / größere Eckenradien.
defaultRadiusmd (application override)Zentral über createTheme angewendet.

Breakpoints

Quelle
Name / RegelWert / KonfigurationVerwendung
breakpoints.xs36em576 px bei einem Standardwert von 16 px.
breakpoints.sm48emZusammenfassungskarten werden in drei Spalten angeordnet.
breakpoints.md62em992 px bei einem Standardwert von 16 px.
breakpoints.lg / xl75em / 88em1200 px / 1408 px bei einem Standardwert von 16 px.

CSS und Zuordnung zu Komponenten

Quelle
Name / RegelWert / KonfigurationVerwendung
--mantine-primary-color-filledResolved from primaryColor and primaryShadeIm Beispiel wird Cyan, Farbton 8, verwendet.
--mantine-spacing-lgcalc(1.25rem * var(--mantine-scale))Stack-Abstand lg und Panel-Innenabstand lg.
--mantine-radius-mdcalc(0.5rem * var(--mantine-scale))Abgerundetes Standard-Panel.
--mantine-font-size-smcalc(0.875rem * var(--mantine-scale))Datensatz-Labels in der Tabelle.
Button.extend defaultPropssize: smExpliziter Standardwert der Anwendung.
TextInput.extend defaultPropssize: mdExpliziter Standardwert der Anwendung.
03

Mantine-Designsystem – vollständiger Leitfaden

Ein praktischer Leitfaden zur Auswahl, Anwendung und Überprüfung dieses Systems für ein echtes Interface.

DESIGN-mantine.md

Umfassende Anleitung, Einstieg in die Implementierung und Links zu den Quellen.

Leitfaden herunterladen

Mantine-Designsystem: Theme- und Paketgrenzen von Mantine

Ein Provider, drei Funktionspakete

Das Beispiel verwendet core für die Oberfläche, form für Validierung und Bindings sowie dates für die Kalendereingabe. MantineProvider erhält Überschreibungen über createTheme. Core CSS und dates CSS werden beide importiert; das Laden allein der React-Komponente reicht nicht aus, um den formatierten Kalender nachzubilden.

Aus diesem OpenDesign-Leitfaden

Im Theme werden Cyan mit primaryShade 8 und defaultRadius md ausgewählt. Button.extend legt kleine Buttons als Anwendungsstandard fest, während TextInput.extend Steuerelemente mittlerer Größe auswählt. Dies sind bewusst gewählte, im Quellcode gezeigte Einstellungen – keine Behauptung, dass jedes Mantine-Produkt sie verwenden sollte.

Unterstützende Spezifikation lesen

Mantine-Designsystem: Palettenindizes und aufgelöste Farbrollen verwenden

Eine geordnete Palette ist keine Sammlung unzusammenhängender Farbfelder

Mantine-Farben sind als Arrays mit indizierten Farbtönen angeordnet. Dieses Beispiel verwendet cyan.0 für ein zurückhaltendes Zusammenfassungspanel, cyan.9 für Akzenttext und den konfigurierten primären Farbton für gefüllte Aktionen. Die Referenz führt die gesamte Cyan-Abstufung dieses Themes auf.

Das bestätigte Badge in der Tabelle verwendet eine helle Cyan-Variante; für „Widerrufen“ wird Orange verwendet. Beide Statusangaben bleiben zusätzlich als Text sichtbar. Durch einen Widerruf ändert sich der Einwilligungsstatus, die vorherige Sitzung bleibt jedoch sichtbar. So wird verhindert, dass eine Farbänderung den Verlauf unbemerkt löscht.

Unterstützende Spezifikation lesen

Theme-Farben und beliebige CSS-Werte

Die color-Prop einer Komponente kann auf eine benannte Palette verweisen; ein separat gestalteter Hintergrund mit einem rohen Hexadezimalwert würde einige Variantenentscheidungen umgehen. Wenn Sie einfaches CSS verwenden, bevorzugen Sie für wiederkehrende Theme-Entscheidungen die generierten Variablen. Die Zuordnung zwischen CSS und Variablen im Beispiel erläutert, welche Werte weiterhin mit der Skalierung und der Primärfarbe verknüpft sind.

Unterstützende Spezifikation lesen

Mantine-Designsystem: Exportierte Schriftart und Überschriften-Skalierung anwenden

Die Hierarchie nachbilden

Die Tabelle verwendet sm für Namen und Studienbezeichnungen sowie xs für Kennungen und Datumsangaben. Title order={1} verwendet die h1-Skalierung; der Drawer hat eine semantische h2-Überschrift, die mit size="h3" dargestellt wird, damit sie visuell kompakter wirkt. Diese Entscheidungen sind unabhängig von den Beschriftungen und Hilfetexten, die von Eingabekomponenten bereitgestellt werden.

Der Schriftarten-Stack der Plattform von Mantine erfordert keinen Download von Schriftarten aus dem Internet. Skalierte Schriftwerte enthalten --mantine-scale; die Pixelwerte der Referenz setzen einen Skalierungsfaktor von 1 voraus. Behandle diese Pixel-Entsprechungen nicht als unveränderlich, wenn die Anwendung einen anderen Skalierungsfaktor verwendet.

Unterstützende Spezifikation lesen

Mantine-Designsystem: useForm an echte Eingabekomponenten binden

Die Validierung gehört zum Formularmodell

initialValues enthält einen Namen, eine Studie, ein Datumsfeld mit null als möglichem Wert und eine boolesche Einwilligungsangabe. validate gibt für die Felder Name, Datum und Einwilligung eine Fehlermeldung oder null zurück. form.onSubmit führt diese Validierung aus, bevor der lokale Datensatz angehängt wird. Eine separate Sammlung manuell dargestellter Fehlermeldungen ist nicht erforderlich.

TextInput und DatePickerInput erhalten getInputProps für ihren Feldpfad. Checkbox gibt zusätzlich type:"checkbox" an, damit der Wert korrekt an das Kontrollkästchen gebunden wird. Select verwendet eine feste Studienliste und allowDeselect={false}; der Ablauf akzeptiert keine leere Studienauswahl.

Unterstützende Spezifikation lesen

Datumswert und Anzeigeformat

Unterstützende Spezifikation lesen

Mantine-Designsystem: Dichte und Überlauf von Steuerelementen an der Komponentengrenze steuern

Die Tabelle in einem eigenen Scrollbereich halten

Table.ScrollContainer verwendet minWidth={580} und erhält so auf schmalen Bildschirmen vier gut lesbare Spalten. Das Dokument bleibt innerhalb des Viewports; bei Bedarf wird nur der Datenbereich horizontal scrollbar. horizontalSpacing="lg" und verticalSpacing="md" verwenden den Abstand des Themes statt individueller Zellinnenabstände.

Die drei Zusammenfassungskarten verwenden SimpleGrid mit einer Spalte als Basis und drei Spalten ab sm. Auch der Seitenabstand wechselt von md zu xl. Dies sind responsive Stilobjekte, während die Mindestbreite der Tabelle eine explizite Inhaltsentscheidung ist.

Unterstützende Spezifikation lesen

Mantine-Designsystem: Ungültige Anmeldung und Widerruf der Einwilligung unterscheiden

Das Beispiel umfasst zwei verschiedene Änderungen

Das Planungsformular kann erst dann einen Datensatz hinzufügen, wenn Name, Sitzungstermin und die beispielhafte Einwilligung die Validierung bestehen. Nach erfolgreichem Hinzufügen im Arbeitsspeicher wird der Drawer geschlossen, ein Datensatz angehängt und die Zusammenfassungszahlen werden aktualisiert. Der Hinweis besagt, dass kein Forschungsdatensatz gespeichert wurde.

Mit Widerruf wird nur der Status des ausgewählten Datensatzes geändert und die Aktion für diesen Datensatz deaktiviert. Das Datum bleibt als Verlauf sichtbar, während widerrufene Datensätze nicht in der Anzahl der geplanten Sitzungen berücksichtigt werden. Dies ist eine ausdrücklich angegebene Richtlinie für die Vorschau, keine echte Regel zur Aufbewahrung von Forschungsdaten.

  • Ungültiges Formular: Fehler direkt an den Eingabefeldern anzeigen und Drawer geöffnet lassen.
  • Akzeptierter lokaler Eintrag: Datensatz einmalig anhängen und den nächsten Entwurf zurücksetzen.
  • Widerrufene beispielhafte Einwilligung: Datensatz beibehalten und einen weiteren Widerruf deaktivieren.

Mantine-Designsystem: Drawer und Eingabesemantik zusammenwirken lassen

Fokus und Beschriftungen

Der Drawer erhält einen Titel und verwendet seine native Fokusverwaltung. Für das Namensfeld ist data-autofocus gesetzt. Jedes Formularelement hat eine sichtbare Beschriftung; Validierungsmeldungen stammen aus der gebundenen error-Prop. Der zugängliche Name der Widerruf-Schaltfläche enthält den Namen der teilnehmenden Person, sodass mehrere identisch aussehende Beschriftungen unterscheidbar bleiben.

Wird der Drawer geschlossen, wird der Entwurf in diesem Beispiel verworfen: Beim Öffnen von „Teilnehmende Person hinzufügen“ wird das Formular zurückgesetzt. Der Kalender ist ein natives Mantine-Popup im Drawer. Teste die Tastaturbedienung gemeinsam mit der umgebenden Fokusfalle, statt anzunehmen, dass sich zwei einzeln barrierefreie Komponenten immer problemlos zusammenfügen.

Unterstützende Spezifikation lesen

Mantine-Designsystem: Versionskompatible Pakete und beide Stylesheets installieren

Die vollständige Einrichtung ist enthalten

Führe die folgenden Terminalbefehle aus, ersetze App.jsx durch die vollständige Komposition und binde sie mit der bereitgestellten main.jsx ein. Die vier Paketversionen von Mantine sind bewusst aufeinander abgestimmt. App.jsx enthält Provider und Theme, daher ist keine versteckte Provider-Datei erforderlich.

Übernimm kein Datumsbeispiel aus einer anderen Hauptversion, ohne den Typ des Werts zu prüfen. Achte darauf, dass das Anfangsdatum und die Validierung des Formulars mit der tatsächlich verwendeten DatePickerInput-Version von API übereinstimmen. Dieses Beispiel wurde mit den angegebenen Paketversionen erstellt und nicht aus einem älteren Tutorial abgeleitet.

  1. Installiere core, hooks, form, dates und die Abhängigkeit dayjs von dates.
  2. Importiere core/styles.css und dates/styles.css einmalig an der Anwendungsgrenze.
  3. Führe das Formular aus, füge einen datierten Datensatz hinzu und prüfe anschließend die Tabelle und das Ergebnis des Widerrufs.

Mantine-Designsystem: Kalender, Formular und Tabelle als Einheit überprüfen

Was du ausprobieren kannst

Sende den leeren Drawer ab, um Fehler für Name, Datum und Einwilligung anzuzeigen. Gib einen Namen ein, wähle einen Tag im Kalender aus und bestätige die beispielhafte Einwilligung, bevor du das Formular erneut absendest. Die neue teilnehmende Person sollte mit dem ausgewählten Datum und einer stabilen Vorschau-ID erscheinen. Widerrufe anschließend die Einwilligung dieser Person und beobachte die Änderung sowohl im Datensatz als auch in der Zusammenfassung.

Das Datenmodell ist bewusst klein und speichert Daten nur im Arbeitsspeicher. Es gibt keine Rekrutierung für Studien, Erfassung von Einwilligungen, dauerhafte Speicherung auf einem Server oder Zeitzonenumrechnung. Der konkrete Mehrwert dieses Beispiels liegt in der Integration nativer Pakete und dem sichtbaren Verhalten der Steuerelemente, nicht in einem impliziten Backend für die Studienverwaltung.

Mantine-Designsystem: Komponentenbeispiele

App.jsx — Provider, Theme, Tabelle und Planungs-Drawer

Vollständiges natives Mantine-Beispiel. Enthält Theme-Überschreibungen, useForm-Validierung, DatePickerInput, Tabellenaktualisierungen und die Änderung des Einwilligungsstatus.

jsx
import React, {useState} from 'react';
import {MantineProvider, createTheme, Box, Group, Stack, Title, Text, Button, Paper, Badge, Table, Drawer, TextInput, Select, Checkbox, Alert, SimpleGrid} from '@mantine/core';
import {useForm} from '@mantine/form';
import {DatePickerInput} from '@mantine/dates';
import '@mantine/core/styles.css';
import '@mantine/dates/styles.css';
const theme=createTheme({primaryColor:'cyan',primaryShade:8,defaultRadius:'md',components:{Button:Button.extend({defaultProps:{size:'sm'}}),TextInput:TextInput.extend({defaultProps:{size:'md'}})}});
function Tracker(){
 const[opened,setOpened]=useState(false),[notice,setNotice]=useState(''),[rows,setRows]=useState([{name:'Alex Morgan',study:'Navigation study',date:'2026-10-14',status:'Confirmed'},{name:'Sam Rivera',study:'Editor study',date:'2026-10-16',status:'Confirmed'}]);
 const form=useForm({initialValues:{name:'',study:'Navigation study',date:null,consent:false},validate:{name:v=>v.trim().length<2?'Enter a name with at least two characters.':null,date:v=>!v?'Choose a session date.':null,consent:v=>!v?'Confirm consent before scheduling this example.':null}});
 const submit=values=>{setRows([...rows,{name:values.name.trim(),study:values.study,date:values.date,status:'Confirmed'}]);setOpened(false);setNotice('Participant added in this browser only. No research record was stored.');form.reset();};
 return <Box p={{base:'md',sm:'xl'}} bg='gray.0'><Box maw={1040} mx='auto'>
 <Group justify='space-between' align='flex-start' mb='xl'><Box><Text c='cyan.9' fw={700} size='xs' tt='uppercase' mb='xs'>Mantine · Research operations</Text><Title order={1}>Participant sessions</Title><Text c='dimmed' mt='xs'>Consent and scheduling stay visible in the same working view.</Text></Box><Button onClick={()=>{form.reset();setOpened(true)}}>Add participant</Button></Group>
 <SimpleGrid cols={{base:1,sm:3}} mb='xl'><Paper withBorder p='lg'><Text size='sm' c='dimmed'>In this preview</Text><Text fz={32} fw={700}>{rows.length}</Text><Text size='sm'>Participant records</Text></Paper><Paper withBorder p='lg'><Text size='sm' c='dimmed'>Scheduled</Text><Text fz={32} fw={700}>{rows.filter(r=>r.status==='Confirmed').length}</Text><Text size='sm'>With confirmed example consent</Text></Paper><Paper withBorder p='lg' bg='cyan.0'><Text size='sm' c='cyan.9' fw={600}>Working theme</Text><Text mt='xs' size='sm'>cyan.8 action · radius md<br/>spacing lg · body md</Text></Paper></SimpleGrid>
 {notice&&<Alert title='Local change' color='cyan' mb='md' withCloseButton onClose={()=>setNotice('')}>{notice}</Alert>}
 <Paper withBorder radius='md'><Table.ScrollContainer minWidth={580}><Table verticalSpacing='md' horizontalSpacing='lg' highlightOnHover><Table.Thead><Table.Tr><Table.Th>Participant</Table.Th><Table.Th>Study / session</Table.Th><Table.Th>Consent</Table.Th><Table.Th>Action</Table.Th></Table.Tr></Table.Thead><Table.Tbody>{rows.map((r,i)=><Table.Tr key={i}><Table.Td><Text fw={600} size='sm'>{r.name}</Text><Text size='xs' c='dimmed'>P-{String(i+1).padStart(3,'0')}</Text></Table.Td><Table.Td><Text size='sm'>{r.study}</Text><Text size='xs' c='dimmed'>{r.date}</Text></Table.Td><Table.Td><Badge variant='light' color={r.status==='Confirmed'?'cyan':'orange'}>{r.status}</Badge></Table.Td><Table.Td><Button variant='subtle' color='gray' disabled={r.status==='Withdrawn'} aria-label={'Withdraw consent for '+r.name} onClick={()=>{setRows(rows.map((x,j)=>j===i?{...x,status:'Withdrawn'}:x));setNotice('Consent withdrawn in the preview. The prior session remains visible as history.')}}>Withdraw</Button></Table.Td></Table.Tr>)}</Table.Tbody></Table></Table.ScrollContainer></Paper>
 <Text size='xs' c='dimmed' mt='lg'>Native Mantine 9.6.3: Table, Drawer, useForm, DatePickerInput, and input error styles. All records are memory-only examples.</Text>
 <Drawer opened={opened} onClose={()=>setOpened(false)} position='right' size='md' title={<Title order={2} size='h3'>Schedule a participant</Title>}><form onSubmit={form.onSubmit(submit)} noValidate><Stack gap='lg'><Text size='sm' c='dimmed'>All fields below belong to this one study enrollment. Closing discards the draft.</Text><TextInput label='Participant name' placeholder='Jules Davis' data-autofocus {...form.getInputProps('name')}/><Select label='Study' data={['Navigation study','Editor study']} allowDeselect={false} {...form.getInputProps('study')}/><DatePickerInput label='Session date' placeholder='Choose a date' valueFormat='DD MMM YYYY' defaultDate='2026-10-01' {...form.getInputProps('date')}/><Checkbox label='Consent is confirmed for this example study' {...form.getInputProps('consent',{type:'checkbox'})}/><Button type='submit'>Add to preview</Button><Text size='xs' c='dimmed'>This checkbox demonstrates validation; it is not a research consent collection process.</Text></Stack></form></Drawer>
 </Box></Box>;
}
export default function App(){return <MantineProvider theme={theme} forceColorScheme='light'><Tracker/></MantineProvider>}

Code-Referenz

  • Core und dates von CSS werden beide importiert.
  • Das Kontrollkästchen für die Einwilligung ist eine Validierungsbedingung im Beispiel, kein echter Ablauf zur Einwilligungserfassung.
04

Mantine-Designsystem: Einrichtung für den KI-Agenten

Ausgangspunkt für die Implementierung

Verwende eine Node-Version, die von der ausgewählten Vite-Vorlage unterstützt wird. Der Quellcode enthält Provider, Theme und Stylesheet-Importe; für den gezeigten Ablauf sind weder Backend noch benutzerdefinierter CSS erforderlich.

text
# Terminal
npm create vite@latest participant-demo -- --template react
cd participant-demo
npm install
npm install @mantine/[email protected] @mantine/[email protected] @mantine/[email protected] @mantine/[email protected] dayjs

# Save the complete example as src/App.jsx.
# Replace src/main.jsx with:
import React from 'react';
import {createRoot} from 'react-dom/client';
import App from './App';
createRoot(document.getElementById('root')).render(<App/>);

# Terminal
npm run dev

Ein Prompt für dein Projekt

Agenten-Prompt
Verwende die bereitgestellte Komposition Mantine 9.6.3 und halte die Versionen von core/form/dates aufeinander abgestimmt. Bewahre den Provider, beide CSS-Imports, die getInputProps-Bindings, den Datumstyp des Werts und die Scrollgrenze der Tabelle. Ersetze lokale Änderungen an der Anmeldung erst dann durch den echten Dienst, wenn Richtlinien für Einwilligung und Speicherung festgelegt sind. Unterscheide den Widerruf von der Löschung und sorge dafür, dass Eingabefehler lesbar bleiben und der Fokus im Drawer erhalten bleibt.
05

Quellen und Umfang des Mantine-Designsystems

Originalbeispiel für OpenDesign mit Mantine 9.6.3. Standardwerte des Themes sind von den Anwendungsüberschreibungen für Cyan und Formen abgegrenzt. Die native Vorschau zeigt ausschließlich lokale Datensätze und Validierung. Einwilligungen werden nicht eingeholt und Forschungsdaten nicht gespeichert.