Headless-Komponentensystem · Neue Ressource

Designsystem von Ariakit.

Ariakit stellt ungestaltete React-Komponenten mit gemeinsamem, explizitem Zustand und kombinierbaren, barrierefreien Bausteinen bereit. Bei der Combobox sind die eingegebene Suchanfrage und die bestätigte Auswahl voneinander getrennt. Dadurch eignet sie sich für suchbasierte Auswahlelemente. Die Referenzsuche unten veranschaulicht diese Unterscheidung mit gruppierten und nicht verfügbaren Ergebnissen.

OpenDesign-Leitfaden9 Kapitel29 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Interface-Vorschau des Ariakit-Designsystems

Gruppierte Referenzen filtern, mit Pfeil nach unten/Eingabetaste auswählen, Ergebnis prüfen und zur lokalen Leseliste hinzufügen.

Barrierefreie ReferenzsucheVollständiges Beispiel öffnen
Natives @ariakit/react 0.4.40 und React 19. Alle visuellen Designwerte und Beispielreferenzen sind eigens erstellt. · Implementierungsreferenz
02

Designsystem-Designreferenz für Ariakit

Ariakit React 0.4.40 ist ein ungestaltetes Barrierefreiheits-Toolkit. Es stellt weder die unten gezeigte Farbpalette noch Schriftgrößen oder Abstände als natives Designthema bereit. Alle --app-* Werte sind eine explizit festgelegte, eigens erstellte Konfiguration für dieses ausführbare Beispiel. Komponentennamen und Zustandsattribute sind Ariakit-APIs.

Eigene semantische Farbkonfiguration

Quelle
Name / RegelWert / KonfigurationVerwendung
--app-canvas#f5f3ee Seitenhintergrund.
--app-surface#fffPopover der Combobox und Referenzkarte.
--app-text#292e29 Primärer, gut lesbarer Text.
--app-muted#657064 Sekundäre Labels und Hinweise.
--app-border#d8ddd4 Begrenzungen von Eingabefeld und Karte.
--app-action#285f48 Primäre Aktion und Fokusring.
--app-on-action#fffText auf der primären Aktion.
--app-active#e3eee4 Oberfläche der aktiven Option und ausgewählten Aktion.

Eigene Geometrie und Abstände

Quelle
Name / RegelWert / KonfigurationVerwendung
--app-radius10pxEckenradius von Eingabe, Popover und Referenzkarte.
--app-space-18pxDefinierte, eigene Abstandsskala.
--app-space-216pxDefinierte, eigene Abstandsskala.
--app-space-324pxDefinierte, eigene Abstandsskala.
--app-space-432pxDefinierte, eigene Abstandsskala.
Combobox padding13px 48px 13px 14pxLässt Platz für das Steuerelement zum Öffnen.
Popover maximum height340pxLokales Scrollen für eine längere Ergebnisliste.
Popover gutter8pxTatsächlicher gutter-Prop, der Eingabe und Vorschläge voneinander trennt.

Eigene Typografie

Quelle
Name / RegelWert / KonfigurationVerwendung
Font familysystem-ui, sans-serifEs ist weder ein Schrift-Download noch eine für Ariakit spezifische Schrift erforderlich.
Page heading36px / 1.1; 30px mobileEigene Seitenhierarchie.
Input text15pxEigene Schriftgröße für die Combobox.
Option text14pxEigene Schriftgröße für Ergebnislabels.
Group label11px, uppercase, 700Eigener sichtbarer Gruppierungsstil.
Supporting hint12px / 1.7Rhythmus der Tastaturhinweise.

Native Komposition und Zustand

Quelle
Name / RegelWert / KonfigurationVerwendung
ComboboxProvider.inputValueControlled query stringAktueller Eingabestatus von 0.4.40 API; setInputValue aktualisiert die Filterung.
ComboboxProvider.selectedValueControlled reference nameDie bestätigte Auswahl ist unabhängig von der Suchanfrage.
ComboboxGroup / ComboboxGroupLabelFoundations / ComponentsNativ beschriftete Optionsgruppen.
ComboboxPopover.sameWidthtruePasst sich an die Breite des Ankers an.
ComboboxItem.disabledtrue for Experimental gridDer nicht verfügbare Eintrag kann nicht ausgewählt werden.
[data-active-item]CSS state selectorGestaltet die per Tastatur aktive Option unabhängig von der Auswahl.
Combobox autoSelectNot enabled in this specimenMit der Pfeiltaste nach unten zur Liste wechseln, dann mit der Eingabetaste eine Option auswählen.
03

Vollständiger Designsystem-Leitfaden für Ariakit

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

DESIGN-ariakit.md

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

Leitfaden herunterladen

Designsystem von Ariakit: Beginnen Sie mit dem Zustandsmodell der Combobox

Beginnen Sie mit dem Zustandsmodell der Combobox

ComboboxProvider von Ariakit verbindet Label, bearbeitbares Eingabefeld, Steuerelement zum Öffnen, Pop-up und Optionen. Der Provider verwaltet den gemeinsamen Interaktionszustand, während jede Komponente ihren Teil der Struktur bereitstellt. So lassen sich Suchfeld und Detailbereich für die Auswahl unabhängig voneinander anordnen, ohne jeden Tastendruck als neue Auswahl zu behandeln.

Aus diesem OpenDesign-Leitfaden

Die Referenzsuche zeigt sechs Einträge in zwei benannten Gruppen. Die Filterung gehört zur Anwendungssammlung; Navigation und Optionsauswahl gehören zur nativen Combobox. Diese klare Abgrenzung ist hilfreich, wenn statische Einträge durch eine andere Datenquelle ersetzt werden: Die gefilterte Ergebnismenge und das aktuell bestätigte Element sind nicht zwangsläufig identisch.

Unterstützende Spezifikation lesen

Designsystem von Ariakit: Suchtext und bestätigte Auswahl sind unterschiedliche Zustände

Suchtext und bestätigte Auswahl sind unterschiedliche Zustände

Das Beispiel verwaltet mit inputValue und setInputValue den eingegebenen Text sowie mit selectedValue und setSelectedValue die ausgewählte Referenz. In der überprüften Version 0.4.40 von API ist inputValue die aktuelle Bezeichnung für den Eingabestatus; ältere Beispiele verwenden möglicherweise die veralteten Aliase value/setValue. Der vollständige Code verwendet die aktuellen Bezeichnungen.

Die Eingabe von „color“ schränkt die Vorschläge ein, ersetzt aber nicht sofort die angezeigte Detailkarte. Mit der Auswahl von „Color roles“ wird dieser Eintrag bestätigt und das Panel aktualisiert. Auch beim Leeren der Suche bleibt die zuletzt ausgewählte Referenz erhalten. Würde jede unvollständige Suchanfrage als bestätigter Wert behandelt, würde die Detailansicht zu ungültigen oder nicht vorhandenen Einträgen springen.

Unterstützende Spezifikation lesen

Designsystem von Ariakit: Label, Eingabe, Offenlegung und Popover verbinden

Label, Eingabe, Offenlegung und Popover miteinander verbinden

ComboboxProvider stellt ComboboxLabel, Combobox, ComboboxDisclosure und ComboboxPopover einen gemeinsamen Zustand bereit. Das sichtbare Label kennzeichnet das Eingabefeld. Das Steuerelement zum Öffnen ist eine separate Schaltfläche mit einem expliziten barrierefreien Namen. Das Popover bleibt mithilfe von sameWidth und einem Abstand von acht Pixeln am Anker ausgerichtet.

Jedes Ergebnis ist ein ComboboxItem mit einem stabilen Wert. Foundations und Components sind native ComboboxGroup-Abschnitte mit ComboboxGroupLabel-Überschriften. Eine visuell hervorgehobene Überschrift in einer unstrukturierten Liste würde nicht dieselbe Gruppierungsbeziehung ausdrücken; die native Struktur vermittelt diese Beziehung zusammen mit ihrem Tastaturverhalten.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Filterdaten vor dem Rendern nativer Elemente

Daten vor dem Rendern nativer Elemente filtern

Die Beispiel-Sammlung enthält fünf verfügbare Referenzen und ein absichtlich nicht verfügbares Experimental-Raster. Gefiltert wird auf Anwendungsebene mit einer Groß-/Kleinschreibung ignorierenden Teilzeichenfolgensuche im Namen jeder Referenz. Die beiden Gruppen werden nur gerendert, wenn sie passende Einträge enthalten. So werden leere Überschriften zwischen den Ergebnissen vermieden.

Bei einer Suche ohne Treffer erscheint eine eigene Meldung, die dazu auffordert, die Suche zu löschen oder „color“ auszuprobieren. Die Meldung wird nicht zu einer auswählbaren Option. Der deaktivierte Eintrag bleibt sichtbar, wenn er relevant ist, und trägt die Kennzeichnung „Nicht verfügbar“. Die native disabled-Prop verhindert, dass er als Auswahl übernommen wird.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Den tatsächlichen Ablauf mit Pfeil nach unten und Enter überprüfen

Den tatsächlichen Ablauf mit Pfeil nach unten und Eingabetaste überprüfen

Im Beispiel bleibt autoSelect deaktiviert. Nach Eingabe einer Suchanfrage wechselt die Taste „Pfeil nach unten“ zur Vorschlagsliste, und Enter wählt das aktive Element aus. Escape schließt das Popover. Das entspricht den sichtbaren Hinweisen und wurde anhand des Titels der ausgewählten Detailansicht überprüft, nicht nur daran, ob ein Dropdown angezeigt wurde.

In einem anderen Produkt kann eine automatische Hervorhebung sinnvoll sein, sie verändert jedoch den Ausgangspunkt der Pfeilnavigation. Ist ein einzelnes Ergebnis bereits aktiv, kann ein weiterer Druck auf „Pfeil nach unten“ den Fokus zurück zum Eingabefeld bewegen. Das Beispiel vermeidet diese Abweichung und gestaltet das aktive Element über data-active-item. So bleibt die Tastaturposition klar vom gespeicherten Status in der Leseliste getrennt.

  1. Gib „color“ ein und warte auf das passende Ergebnis.
  2. Drücke „Pfeil nach unten“ und dann Enter. Prüfe anschließend das Detailfeld „Color roles“.
  3. Suche nach einer nicht verfügbaren oder nicht vorhandenen Referenz und vergewissere dich, dass keine unbeabsichtigte Auswahl übernommen wird.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Aktive Option, Fokusring und gespeicherter Status haben unterschiedliche Kennzeichnungen

Aktive Option, Fokusring und gespeicherter Zustand haben unterschiedliche visuelle Kennzeichnungen

Eingabefeld und Schaltfläche zum Öffnen haben sichtbare Fokuskonturen. Das aktive Element erhält einen blassgrünen Hintergrund und eine ein Pixel breite Innenkontur über das native Attribut data-active-item. Deaktivierte Optionen werden weniger stark hervorgehoben und behalten ihre ausdrückliche Textkennzeichnung. Diese Gestaltung ist nicht allein vom Hover-Zustand abhängig.

Die Schaltfläche „Hinzufügen“ wird deaktiviert und ihr Text ändert sich, wenn sich die ausgewählte Referenz bereits in der Leseliste befindet. Dieser gespeicherte Status gehört zur Anwendung und ist vom aktuell aktiven Ergebnis im Combobox getrennt. Eine blassgrüne Oberfläche für die gespeicherte Aktion verhindert, dass eine deaktivierte Aktion wie eine weitere aktivierte primäre Schaltfläche wirkt.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Die Leseliste ersetzt nicht die aktuelle Referenz

Eine Leseliste ersetzt nicht die aktuelle Referenz

Beim Hinzufügen wird der Name einer Referenz höchstens einmal an ein lokales Array angehängt. Die aktuelle Referenz bleibt sichtbar, damit Nutzer ihre Hinweise ansehen können. Jede Zeile in der Leseliste hat eine Schaltfläche „Entfernen“ mit eindeutigem Namen. Wird ein Eintrag entfernt, ist „Hinzufügen“ wieder verfügbar, sofern diese Referenz noch ausgewählt ist. Die Anzahl wird aus der Länge des Arrays abgeleitet.

Die Beispieldetails enthalten Hinweise zu Typografie, Abständen und Komponenten, damit sich der Finder sinnvoll erkunden lässt. Die Werte sind eindeutig als ursprüngliche Beispielinhalte gekennzeichnet. Nutzer dürfen „Display 36px“ im Eintrag „Type scale“ nicht für ein Ariakit-Typografie-Token halten; Ariakit stellt diese Design-Sprache nicht bereit.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Ein Popover braucht Platz, ohne die ganze Seite zu vergrößern

Ein Popover braucht Platz, ohne die ganze Seite zu vergrößern

Das Popover richtet sich nach der Breite des Eingabefelds und begrenzt seine eigene Höhe auf 340px. Eine größere Ergebnismenge lässt sich innerhalb dieser Begrenzung scrollen, während die Karte mit den ausgewählten Details normaler Dokumentinhalt bleibt. Eingabefeld, Schaltfläche zum Öffnen und Options-Popup müssen miteinander verbunden bleiben, auch wenn die Detailkarte in eine andere Spalte verschoben wird. Die Übernahme eines Eintrags sollte weiterhin denselben ausgewählten Datensatz aktualisieren.

Am ursprünglichen Breakpoint von 700px werden Finder und Detailkarte untereinander angeordnet. Suchsteuerelemente, Tastaturhinweis und Leseliste bleiben in der Dokumentreihenfolge vor der ausgewählten Karte. Dekorative Referenzgrafiken werden vor Hilfstechnologien verborgen, da Titel und Hinweise die eigentliche Bedeutung vermitteln.

  • Begrenze lange Optionslisten direkt im jeweiligen Bereich und achte auf gut lesbare Abstände zwischen den Einträgen.
  • Lass das übernommene Detailfeld außerhalb des vorübergehend eingeblendeten Popovers.
  • Sichtbare Beschriftungen der Eingabefelder und Tastaturhinweise auch auf Mobilgeräten beibehalten.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Provider, Collection und Stylesheet verbinden

Provider, Collection und Stylesheet verbinden

Installiere @ariakit/react 0.4.40 im React-Projekt und übernimm die vollständige Provider-/Komponentenkomposition aus App.jsx. Das aktuelle Beispiel verwendet inputValue/setInputValue und selectedValue/setSelectedValue als getrennte kontrollierte Paare. Halte den ausgewählten Datensatz verfügbar, auch wenn die aktuelle Eingabeabfrage ihn aus dem Popup herausfiltert.

Importiere die bereitgestellte style.css zusammen mit der Komponente. Die data-active-item-Regel richtet sich nach der Tastaturposition im Combobox, während die Stile der gespeicherten Liste den Zustand der Anwendung abbilden. Wenn du asynchron geladene Ergebnisse einsetzt, müssen diese beiden Zustandskanäle sowie die Beziehungen zwischen Gruppen und Optionen erhalten bleiben. Ersetze das übernommene Detailfeld nicht durch eine vorübergehende Suchzeichenfolge.

Unterstützende Spezifikation lesen

Ariakit-Designsystem: Komponentenbeispiele

Vollständiger, kontrollierter Referenz-Finder

Provider, Beschriftung, Eingabefeld, Schaltfläche zum Öffnen, gruppierte Popover-Elemente und Aktionen für die lokale Leseliste.

jsx
import React,{useState} from 'react';
import * as Ariakit from '@ariakit/react';
const resources=[{name:'Type scale',group:'Foundations',code:'Aa',description:'A compact editorial hierarchy for headings, supporting text and labels.',notes:['Display · 36px / 1.1','Section · 24px / 1.25','Body · 16px / 1.6'],color:'#f0dbc3'},{name:'Color roles',group:'Foundations',code:'◐',description:'Separate surface, text, boundary and action roles before naming brand colors.',notes:['Canvas and raised surface','Primary and muted text','Action and on-action pair'],color:'#d6e5d8'},{name:'Spacing rhythm',group:'Foundations',code:'▥',description:'Use a small set of intervals to show relationships between content groups.',notes:['8px within a compact group','16px between related controls','32px between sections'],color:'#d6dfee'},{name:'Form field',group:'Components',code:'⌑',description:'Keep the label, hint, input and error message in one understandable group.',notes:['Persistent visible label','Hint before an error exists','Error connected to the input'],color:'#e9d8de'},{name:'Navigation menu',group:'Components',code:'☷',description:'A small set of destinations with a visible current location and keyboard access.',notes:['Destination labels describe content','Current item has a text/state cue','Collapsed layout keeps names'],color:'#e7e0c5'},{name:'Experimental grid',group:'Components',code:'▦',description:'Unavailable in this sample collection.',notes:[],color:'#e3e3e3',disabled:true}];
export default function App(){const[query,setQuery]=useState(''),[chosen,setChosen]=useState('Type scale'),[saved,setSaved]=useState([]);const selected=resources.find(x=>x.name===chosen)||resources[0],matches=resources.filter(x=>x.name.toLowerCase().includes(query.toLowerCase()));return <main className="resource-finder"><header><p className="eyebrow">ARIAKIT · ACCESSIBLE PRIMITIVES</p><h1>A reference, within reach.</h1><p>Search a small collection with the keyboard, inspect the result and keep a local reading list.</p></header><div className="finder-grid"><section className="search-area"><Ariakit.ComboboxProvider inputValue={query} setInputValue={setQuery} selectedValue={chosen} setSelectedValue={setChosen}><Ariakit.ComboboxLabel className="label">Find a reference</Ariakit.ComboboxLabel><div className="input-row"><Ariakit.Combobox className="combobox" placeholder="Try type, color or form" /><Ariakit.ComboboxDisclosure className="disclosure" aria-label="Show reference suggestions">⌄</Ariakit.ComboboxDisclosure></div><Ariakit.ComboboxPopover gutter={8} sameWidth className="popover">{['Foundations','Components'].map(group=>{const items=matches.filter(x=>x.group===group);return items.length?<Ariakit.ComboboxGroup key={group}><Ariakit.ComboboxGroupLabel className="group-label">{group}</Ariakit.ComboboxGroupLabel>{items.map(x=><Ariakit.ComboboxItem key={x.name} value={x.name} disabled={x.disabled} className="combo-item"><span>{x.name}</span><small>{x.disabled?'Unavailable':x.group==='Foundations'?'Guide':'Pattern'}</small></Ariakit.ComboboxItem>)}</Ariakit.ComboboxGroup>:null})}{!matches.length&&<p className="empty" role="status">No matching reference. Try “color” or clear the search.</p>}</Ariakit.ComboboxPopover></Ariakit.ComboboxProvider><p className="hint">Type to filter. Use ↓ and ↑ to browse, Enter to choose, Escape to close.</p><div className="collection-note"><span>06</span><div><strong>Sample references</strong><p>Five available, one deliberately disabled to show an unavailable item.</p></div></div><section className="reading-list"><h2>Your reading list <small>{saved.length}</small></h2>{saved.length?<ul>{saved.map(name=><li key={name}><span>{name}</span><Ariakit.Button className="remove" onClick={()=>setSaved(saved.filter(x=>x!==name))} aria-label={`Remove ${name}`}>Remove</Ariakit.Button></li>)}</ul>:<p className="muted">Choose a reference, then add it here.</p>}<p className="local-note">This list stays in memory and clears on reload.</p></section></section><section className="reference-card" aria-label="Selected reference"><div className="reference-art" style={{background:selected.color}} aria-hidden="true"><span>{selected.code}</span><i></i></div><div className="reference-body"><p className="eyebrow">{selected.group} · SAMPLE CONTENT</p><h2>{selected.name}</h2><p>{selected.description}</p><ul className="note-list">{selected.notes.map(note=><li key={note}>{note}</li>)}</ul><Ariakit.Button className="primary" disabled={saved.includes(selected.name)} onClick={()=>setSaved([...saved,selected.name])}>{saved.includes(selected.name)?'Added to reading list':'Add to reading list'}</Ariakit.Button><p className="scope-note">These sample reference values are original content, not Ariakit design tokens.</p></div></section></div><p className="selection-status" role="status">Selected reference: {selected.name}</p></main>}

Code-Referenz

  • inputValue enthält die Suchzeichenfolge; selectedValue enthält die übernommene Referenz.
  • Deaktivierte Einträge bleiben sichtbar, wenn sie zur Suchanfrage passen.
  • Die ursprünglichen Beispielwerte für Typografie und Abstände sind keine Ariakit-Standardwerte.

Vollständige ursprüngliche visuelle Konfiguration

Semantische Anwendungsvariablen, Fokusringe, Gestaltung aktiver Optionen und responsives Layout.

css
:root{--app-canvas:#f5f3ee;--app-surface:#fff;--app-text:#292e29;--app-muted:#657064;--app-border:#d8ddd4;--app-action:#285f48;--app-on-action:#fff;--app-active:#e3eee4;--app-radius:10px;--app-space-1:8px;--app-space-2:16px;--app-space-3:24px;--app-space-4:32px;font-family:system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--app-canvas);color:var(--app-text)}button,input{font:inherit}.resource-finder{max-width:1080px;padding:32px;margin:auto}.eyebrow{font-size:11px;font-weight:700;letter-spacing:.13em;color:var(--app-muted)}h1{font-size:36px;line-height:1.1;margin:16px 0}header>p:last-child{font-size:15px;line-height:1.7;max-width:620px;color:var(--app-muted)}.finder-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:40px;margin-top:32px}.label{display:block;font-size:14px;font-weight:650;margin-bottom:10px}.input-row{position:relative;display:flex}.combobox{width:100%;padding:13px 48px 13px 14px;border:1px solid var(--app-border);border-radius:var(--app-radius);background:var(--app-surface);color:var(--app-text);font-size:15px}.disclosure{position:absolute;right:4px;top:4px;bottom:4px;width:36px;border:0;background:transparent;border-radius:6px;cursor:pointer}.combobox:focus,.disclosure:focus-visible,button:focus-visible{outline:3px solid var(--app-action);outline-offset:3px}.popover{z-index:50;max-height:340px;overflow:auto;background:var(--app-surface);border:1px solid var(--app-border);border-radius:var(--app-radius);box-shadow:0 8px 28px #243c2420;padding:8px}.group-label{font-size:11px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--app-muted);padding:10px}.combo-item{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:12px 10px;border-radius:6px;cursor:default;font-size:14px;scroll-margin:8px}.combo-item small{font-size:11px;color:var(--app-muted)}.combo-item[data-active-item]{background:var(--app-active);outline:1px solid var(--app-action);outline-offset:-1px}.combo-item[aria-disabled=true]{opacity:.45}.empty{padding:12px;font-size:14px;line-height:1.6}.hint{font-size:12px;line-height:1.7;color:var(--app-muted);margin-top:12px}.collection-note{display:flex;gap:16px;align-items:flex-start;border-block:1px solid var(--app-border);padding:24px 0;margin:28px 0}.collection-note>span{font-size:40px;line-height:1;color:var(--app-action)}.collection-note strong{font-size:14px}.collection-note p{font-size:13px;line-height:1.6;color:var(--app-muted);margin:8px 0 0}.reading-list h2{font-size:17px;display:flex;justify-content:space-between}.reading-list h2 small{background:var(--app-active);border-radius:30px;padding:3px 8px}.reading-list ul{padding:0;list-style:none}.reading-list li{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--app-border);font-size:14px}.remove{background:none;border:0;text-decoration:underline;color:var(--app-action);font-size:12px;cursor:pointer}.muted,.local-note,.scope-note{color:var(--app-muted);font-size:12px;line-height:1.7}.reference-card{border:1px solid var(--app-border);border-radius:var(--app-radius);overflow:hidden;background:var(--app-surface)}.reference-art{height:160px;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.reference-art span{font-size:96px;font-family:Georgia,serif;line-height:1;position:relative;z-index:1}.reference-art i{position:absolute;width:190px;height:190px;border:1px solid currentColor;opacity:.2;border-radius:50%;left:50%;top:35%}.reference-body{padding:24px}.reference-body h2{font-size:28px;margin:12px 0}.reference-body>p{line-height:1.65;font-size:14px}.note-list{list-style:none;padding:0;margin:24px 0}.note-list li{padding:10px 0;border-bottom:1px solid var(--app-border);font-size:13px}.primary{padding:12px 18px;border:1px solid var(--app-action);background:var(--app-action);color:var(--app-on-action);border-radius:6px;cursor:pointer;font-weight:600;font-size:14px}.primary:disabled{background:var(--app-active);color:var(--app-action);cursor:default}.scope-note{margin-top:16px}.selection-status{font-size:12px;color:var(--app-muted);margin-top:24px}@media(max-width:700px){.resource-finder{padding:24px 16px}h1{font-size:30px}.finder-grid{grid-template-columns:1fr;gap:28px}.reference-art{height:135px}}

Code-Referenz

  • Ariakit stellt Verhalten und Semantik bereit, nicht dieses Farb- oder Abstandssystem.
  • Das aktive Ergebnis wird über data-active-item gestaltet.
  • Das Popover hat eine eigene maximale Höhe und einen eigenen Scrollbereich.
04

Ariakit-Designsystem: Einrichtung des AI-Agenten

Ausgangspunkt für die Implementierung

Verifiziert mit @ariakit/react 0.4.40 und React 19. Verwendet die aktuellen Bezeichnungen inputValue/setInputValue und einen kontrollierten selectedValue.

jsx
// Create the project first:
// npm create vite@latest ariakit-specimen -- --template react
// cd ariakit-specimen && npm install
// In a Vite React project:
// npm install @ariakit/[email protected] react@19 react-dom@19
// Save the complete component as App.jsx and the visual configuration as style.css.
import React from 'react';
import {createRoot} from 'react-dom/client';
import App from './App.jsx';
import './style.css';
createRoot(document.getElementById('root')).render(<App />);
// index.html contains <div id="root"></div>.
// No Ariakit theme stylesheet is required; style.css is this example's original theme.
// Keep the template index.html and replace its entry with the code above.
// npm run dev

Ein Prompt für dein Projekt

Agenten-Prompt
Verwende den bereitgestellten Referenzfinder für Ariakit 0.4.40 in React. Halte ComboboxProvider inputValue/setInputValue unabhängig von selectedValue/setSelectedValue, behalte native beschriftete Gruppen und die deaktivierte Option „Experimental grid“ bei und filtere die Daten, bevor Elemente gerendert werden. Bewahre den verifizierten Ablauf mit Abwärtstaste und anschließendem Enter bei deaktiviertem autoSelect und style data-active-item getrennt von der gespeicherten Zugehörigkeit. Füge die bestätigte Referenz einer duplikatfreien lokalen Leseliste hinzu und ermögliche das Entfernen, ohne die aktuelle Detailansicht zu verwerfen. Füge das vollständige Original-Stylesheet bei.
05

Quellen und Geltungsbereich des Ariakit-Designsystems

Ariakit React 0.4.40. Alle visuellen Tokens, Illustrationen und Beispielwerte für Referenzen sind eigens konfigurierte Angaben; es wird weder eine offizielle Ariakit-Palette noch eine offizielle Typografieskala beansprucht. Der Zustand der Leseliste wird lokal gespeichert.