Système de composants thématisé · Nouvelle ressource

Système de design Chakra UI.

Une référence Chakra UI v3 sur les jetons, les rôles de couleurs sémantiques, les recettes et les composants de formulaire composés. Examinez les échelles réelles d’espacement et de typographie, puis testez un formulaire natif de profil d’espace de travail avec validation, simulation d’échec de l’enregistrement et apparence claire ou sombre.

Guide OpenDesign9 chapitres47 entrées de référenceGuide de l’application d’origine
01

Aperçu de l’interface du système de design Chakra UI

Essayez la validation d’un champ vide, l’échec simulé de l’enregistrement, la conservation de la saisie, la confirmation locale de réussite et le changement d’apparence.

Profil natif de l’espace de travail ChakraOuvrir l’exemple complet
Chakra UI natif 3.37.0 avec React 19 ; bundle autonome. Les jetons sémantiques et les recettes personnalisés de l’application sont présentés dans leur intégralité. · Référence de mise en œuvre
02

Référence de conception du système de design Chakra UI

Références au thème par défaut de Chakra UI 3.37.0, ainsi qu’aux jetons d’application OpenDesign explicitement identifiés. Les valeurs en rem suivent la taille de police racine ; les équivalents en pixels supposent 16px. Il s’agit d’une sélection de référence pratique, et non du thème exporté complet.

Couleurs sémantiques par défaut

Source
Nom / règleValeur / configurationUtilisation
bgwhite / blackFond de page clair / sombre.
bg.panelwhite / gray.950Surface de carte claire / sombre.
bg.subtlegray.50 / gray.950Surface discrète.
fgblack / gray.50Texte principal.
fg.mutedgray.600 / gray.400Texte d’accompagnement.
bordergray.200 / gray.800Limite du panneau et des contrôles.
fg.errorred.500 / red.400Texte d’erreur.
bg.errorred.50 / red.950Surface d’erreur.
teal.fgteal.700 / teal.300Texte sur une surface subtile turquoise.
teal.subtleteal.100 / teal.900Style de l’étape en cours.

Valeurs primitives utilisées dans cet exemple

Source
Nom / règleValeur / configurationUtilisation
gray.50#fafafa Fond clair.
gray.200#e4e4e7 Bordure claire.
gray.800#27272a Bordure sombre.
gray.950#111111 Fond sombre.
teal.700#0c5d56 L’action claire personnalisée fait référence à cette valeur.
teal.300#5eead4 L’action sombre personnalisée fait référence à cette valeur.

Sous-ensemble des espacements par défaut

Source
Nom / règleValeur / configurationUtilisation
spacing.10.25rem / 4pxMarge intérieure verticale du statut.
spacing.20.5rem / 8pxEspacement entre les contrôles en ligne.
spacing.30.75rem / 12pxEspacement entre les actions.
spacing.41rem / 16pxMarge intérieure pour les petits écrans.
spacing.61.5rem / 24pxEspacement entre les champs du formulaire.
spacing.82rem / 32pxGrand espacement de mise en page.
spacing.102.5rem / 40pxEspacement plus important disponible.
spacing.123rem / 48pxEspacement de section disponible.

Sous-ensemble typographique par défaut

Source
Nom / règleValeur / configurationUtilisation
fonts.body / fonts.headingInter, system fallbacksLe jeton de police ne télécharge pas Inter à lui seul.
fontSizes.xs0.75remAnnotation du spécimen.
fontSizes.sm0.875remTexte d’aide.
fontSizes.md1remSaisie et lecture courante.
fontSizes.lg1.125remFormat de texte courant plus grand disponible.
fontSizes.xl1.25remTitre de la carte.
fontSizes.2xl1.5remTitre du spécimen.
fontWeights.medium / semibold500 / 600Hiérarchie des libellés.
lineHeights.shorter / moderate1.25 / 1.5Rythme titre / paragraphe.
letterSpacings.wide0.025emPetit surtitre.

Rayons par défaut

Source
Nom / règleValeur / configurationUtilisation
radii.sm0.25rem / 4pxAngle serré.
radii.md0.375rem / 6pxPastille d’état dans cet exemple.
radii.lg0.5rem / 8pxArrondi modéré.
radii.xl0.75rem / 12pxCarte de profil dans cet exemple.
radii.full9999pxForme de pilule, non utilisée pour le formulaire.

Seuils adaptatifs par défaut

Source
Nom / règleValeur / configurationUtilisation
sm480pxLa rangée d’actions peut passer à l’horizontale.
md768pxLa colonne de progression se place à côté du formulaire.
lg1024pxSeuil de largeur disponible pour les grandes mises en page.
xl1280pxSeuil de largeur disponible pour les ordinateurs de bureau.
2xl1536pxSeuil de largeur disponible pour les très grands écrans.

Jetons sémantiques de l’application : définis ci-dessous

Source
Nom / règleValeur / configurationUtilisation
workspace.canvasgray.50 / gray.950Correspondance personnalisée des arrière-plans clair / sombre.
workspace.actionbrand.700 / brand.300Arrière-plan d’action personnalisé ; les primitives de marque sont déclarées dans theme.js.
workspace.onActionwhite / gray.950Couleur de texte d’action personnalisée, associée à son arrière-plan.
03

Chakra UI Guide complet du système de design

Un guide pratique pour choisir, appliquer et évaluer ce système dans une interface réelle.

DESIGN-chakra-ui.md

Des conseils complets, un point de départ pour la mise en œuvre et des liens vers les sources.

Télécharger le guide

Système de design Chakra UI : le système v3 — configuration, jetons et composants

Créez un système au lieu de transmettre un ancien objet de thème

L’implémentation comporte trois couches : theme.js définit les choix de conception, main.jsx fournit le système qui en résulte et App.jsx compose le formulaire. createSystem(defaultConfig, config) conserve les recettes de composants par défaut tout en fusionnant la configuration de l’application. Un système personnalisé sans base demanderait davantage de définitions ; le choix est délibérément d’étendre les valeurs par défaut.

Extrait de ce guide OpenDesign

L’aperçu utilise des composants Chakra, et non des éléments de remplacement dessinés. Sa barre latérale est une liste ordonnée de progression propre à l’application ; elle ne prétend pas que le composant Chakra Steps est monté. La carte de profil, les champs, la liste de sélection, les alertes et les boutons sont des compositions Chakra natives.

Consultez la spécification associée

Contenu de chaque couche

  • tokens : valeurs primitives réutilisables, notamment les deux couleurs de marque de l’exemple.
  • semanticTokens : rôles conditionnels, tels que workspace.action, indépendants des écrans individuels.
  • recipes : variantes de composants réutilisables ; l’état de l’application React détermine si le formulaire est invalide, en attente, en échec ou confirmé.

Système de design Chakra UI : couleurs primitives et rôles sémantiques du thème

Utilisez des rôles lorsque l’apparence varie

bg.panel et fg.muted décrivent les rôles de surface et de texte ; gray.950 et gray.400 sont les valeurs sous-jacentes. Le tableau de référence indique leur résolution en mode clair et sombre. Dans la démonstration, le passage de la racine du document du mode clair au mode sombre active ces valeurs conditionnelles sans modifier chaque Field ou Card. Ce changement local n’inclut volontairement ni persistance ni intégration des préférences système.

Les rôles workspace.* sont des ajouts propres à l’application. Ils définissent une action bleu sarcelle foncé sur une surface claire et une action bleu sarcelle pâle sur une surface sombre, avec une couleur de texte assortie. Ce ne sont pas des noms de jetons Chakra officiels. Le fait de conserver ces deux valeurs associées dans le thème évite qu’en mode sombre l’arrière-plan du bouton change alors que son libellé reste blanc.

Consultez la spécification associée

La syntaxe des références diffère de celle des raccourcis de composants

Dans les définitions de jetons, utilisez la référence complète {colors.gray.950}. Dans une propriété de style, bg="workspace.canvas" est résolu dans la catégorie des couleurs. Dans une valeur composée CSS, le chemin complet du jeton est de nouveau nécessaire. Cette distinction évite de confondre une chaîne littérale avec une référence au thème.

jsx
<Box bg="workspace.canvas" color="fg" border="1px solid {colors.gray.200}" p="4" />

Référence du code

Système de design Chakra UI : une échelle typographique lisible avec des jetons explicites

Adapter l’échelle à cette composition

Le titre utilise fontSize="2xl" et lineHeight="shorter" ; le titre de la carte utilise xl, le texte d’aide sm et l’annotation du spécimen xs. Ces choix créent une hiérarchie sans modifier les niveaux de titre sémantiques : le titre de l’écran est un h1 et celui du formulaire, un h2. Le contenu normal du formulaire conserve l’échelle par défaut du corps de texte.

Les piles de polices par défaut de Chakra pour le corps et les titres commencent par Inter, puis utilisent les polices de la plateforme en remplacement. La démonstration autonome ne fait aucune requête de police externe ; la police de remplacement affichée peut donc varier selon le système d’exploitation. Si une typographie précise est nécessaire, hébergez localement une police sous licence appropriée ; définir un jeton de police ne fournit pas les fichiers de police.

Consultez la spécification associée

Distinguer la typographie du sens

La pastille de l’étape en cours est une métadonnée compacte, et non l’instruction principale. Les messages indiquant qu’un champ est requis ou invalide restent à côté de celui-ci, dans un format lisible. Modifier l’espacement des lettres du surtitre ne change pas les libellés du formulaire, et le nom d’espace de travail, même long, reste contenu dans le champ sans modifier la largeur de la carte qui l’entoure.

Système de design Chakra UI : composer Field, NativeSelect, Card et Alert

Field décrit une relation, et non un champ mis en forme

Field.Root regroupe le libellé, le contrôle, l’aide et l’erreur. L’indicateur obligatoire et RequiredIndicator signalent que le champ est requis ; invalid contrôle l’état d’erreur. L’exemple garde l’input contrôlé par React et place l’erreur de nom d’espace de travail dans Field.ErrorText. Il n’applique pas de styles d’erreur séparément à un paragraphe indépendant.

La taille de l’équipe utilise NativeSelect.Root, NativeSelect.Field et NativeSelect.Indicator. Cela préserve le comportement natif d’une liste de sélection pour un ensemble restreint d’options fixes. Le composant ne prétend pas proposer des résultats distants avec recherche : il s’agirait d’un autre contrôle et d’une autre interaction avec les données.

Consultez la spécification associée

Les retours sont organisés dans une composition distincte

Consultez la spécification associée

Système de design Chakra UI : appliquer les jetons d’espacement et les propriétés de style adaptatives

Une politique d’espacement concrète

Utilisez gap="6" entre les groupes de champs, gap="3" entre les actions et gap="8" entre la colonne de progression et le formulaire. La marge intérieure de la page passe de p="4" à p="8" au breakpoint md. Avec une racine de 16px, ces valeurs correspondent à 24px, 12px, 32px, 16px et 32px. Les valeurs en rem s’adaptent à la taille de police de la racine définie par l’utilisateur.

La carte utilise rounded="xl" et la pastille d’état, rounded="md". Ces rayons différents sont intentionnels : le grand conteneur et le libellé compact ont des formes distinctes. Ne prenez pas ces choix d’utilisation pour des règles par défaut qui s’imposeraient à toutes les applications Chakra.

Consultez la spécification associée

La composition change à partir de md

Sous md, la grille comporte une seule colonne. À partir de md, une colonne de progression de 220px côtoie un formulaire flexible. minmax(0, 1fr) permet au formulaire de rétrécir dans la grille. La pile d’actions change à partir de sm. Ces valeurs d’objet sont des surcharges mobile-first, et non une détection de l’appareil.

jsx
<Grid templateColumns={{ base: "1fr", md: "220px minmax(0, 1fr)" }} gap="8">
  <Box as="nav" aria-label="Setup progress">…</Box>
  <Card.Root rounded="xl">…</Card.Root>
</Grid>

Référence du code

Chakra UI Connecter le système de design : validation, chargement et reprise

La machine à états de l’aperçu

La soumission d’un nom vide après suppression des espaces superflus définit l’état comme invalide et place le focus sur le champ. Une soumission valide passe à l’état pending, désactive la modification et affiche Button loadingText. À la fin du délai local, la case à cocher de simulation d’échec détermine si la démonstration affiche un échec ou une confirmation. Aucune des deux branches n’effectue de requête réseau ni ne stocke de données.

En cas d’échec, le nom contrôlé et la taille sélectionnée sont conservés. Désactiver la simulation d’échec permet de réessayer. Une fois la soumission terminée, les champs du profil sont désactivés et la première pastille de progression change. Reset permet de revenir à la modification. Cela démontre la composition des états visibles, et non un contrat d’enregistrement côté serveur.

Consultez la spécification associée

Essayez les états dans l’ordre

  1. Réinitialisez le formulaire et soumettez-le sans nom ; observez le message affiché pour le champ et vérifiez qu’il reçoit le focus.
  2. Saisissez un nom, activez la simulation d’échec de l’enregistrement et soumettez le formulaire ; vérifiez que les valeurs sont conservées après l’erreur.
  3. Désactivez la simulation d’échec et soumettez de nouveau le formulaire ; examinez le récapitulatif de confirmation, puis changez l’apparence.

Chakra UI Préserver la sémantique native dans le système de design par composition

La validation et la progression restent compréhensibles

Le formulaire utilise noValidate afin que cet exemple puisse montrer le parcours d’erreur personnalisé de Field au lieu de s’arrêter à l’interface de validation du navigateur. Le libellé reste associé au champ via Field, et le premier champ invalide reçoit le focus. Le travail en attente est signalé par une région d’état dynamique ; il ne repose pas uniquement sur un indicateur de chargement.

La liste de progression utilise la sémantique d’une liste ordonnée et l’attribut aria-current="step" sur l’élément actif. Elle ne contient pas de faux liens vers des écrans indisponibles. Les deuxième et troisième étapes de l’aperçu donnent du contexte, mais ne sont pas cliquables. Les limites de la démonstration sont ainsi clairement visibles.

Consultez la spécification associée

Le focus fait partie de la configuration d’action personnalisée

La variante d’intégration définit explicitement un contour visible au focus, avec un décalage. En mode sombre, le rôle du contour change en même temps que celui de l’action. La case à cocher native et le menu de sélection restent utilisables au clavier. Vérifiez également le focus, les annonces des champs, le zoom et le rendu par les lecteurs d’écran dans l’application qui intègre cet exemple ; un exemple au niveau d’un composant ne suffit pas à prouver l’accessibilité d’un produit d’intégration complet.

Chakra UI Recettes, configuration du fournisseur et limites de version du système de design

Étendre Button ; définir Status localement

La variante Button pour l’intégration est ajoutée sous theme.recipes.button. Les variantes existantes, comme outline, restent disponibles, car la configuration étend defaultConfig. La pastille d’état utilise defineRecipe et useRecipe localement : ses variantes d’état associent current, complete et waiting à différents rôles sémantiques. Il s’agit d’un composant de l’application, et non d’un export de Chakra.

Une recette à un seul élément renvoie un objet de styles. Les composants multipièces comme Field comportent plusieurs slots et nécessitent des recettes à slots lorsque leurs parties sont thématisées ensemble. Appliquer à l’ensemble de Field une recette conçue pour un bouton ne permettrait pas de contrôler individuellement son libellé, son contrôle et son message d’erreur.

Consultez la spécification associée

Utilisez les fichiers fournis ensemble

N’importez pas une configuration v2 fondée sur extendTheme et ne transmettez pas theme={...} à ce fournisseur v3. La racine utilise ChakraProvider value={system}. L’exemple n’ajoute volontairement pas de second fournisseur de mode de couleur : son commutateur local de classe clair/sombre suffit pour cet aperçu isolé, tandis qu’une application réelle peut nécessiter la persistance des préférences et la prise en charge du rendu côté serveur.

Consultez la spécification associée

Chakra UI Vérifier ensemble le thème et le formulaire dans le système de design

Ce que cet exemple permet de vérifier

L’unité de référence pertinente est la carte de profil complète dans ses deux apparences : libellé, champ de saisie, texte d’aide, indication d’invalidité, bouton en attente, alerte d’échec et récapitulatif de réussite. Un bouton seul ne permet pas de repérer un arrière-plan sémantique manquant ni un état d’erreur déconnecté de son libellé.

Comparez le tableau de référence à l’interface calculée. L’action personnalisée de couleur sarcelle doit se distinguer de l’action outline par défaut ; l’espacement 6 doit séparer les champs ; la grille doit passer à une colonne sous md. Ces vérifications relient les règles écrites au rendu.

Ce que l’exemple ne couvre pas

L’aperçu ne comprend ni création de compte, ni envoi d’invitation, ni persistance, ni authentification, ni intégration à un autre écran d’intégration. Le délai est explicitement une simulation. Lors de la connexion à un véritable point de terminaison, conservez la distinction illustrée entre l’état du champ et celui de la requête, remplacez le délai par la requête et précisez si la confirmation signifie que l’opération a été acceptée localement, enregistrée à distance ou entièrement activée.

Chakra UI Exemples de composants du système de design

theme.js — jetons primitifs, rôles sémantiques et recettes

Thème complet de l’application pour cet exemple. Les rôles de l’espace de travail et la variante d’intégration sont des ajouts originaux ; defaultConfig fournit le thème standard de Chakra.

javascript
import { createSystem, defaultConfig, defineConfig, defineRecipe } from '@chakra-ui/react';

export const statusRecipe = defineRecipe({
  base: { display: 'inline-flex', px: '2', py: '1', rounded: 'md', fontSize: 'xs', fontWeight: 'semibold' },
  variants: {
    state: {
      current: { bg: 'teal.subtle', color: 'teal.fg' },
      complete: { bg: 'bg.success', color: 'fg.success' },
      waiting: { bg: 'bg.muted', color: 'fg.muted' },
    },
  },
  defaultVariants: { state: 'waiting' },
});

const config = defineConfig({
  theme: {
    tokens: { colors: { brand: { 700: { value: '#0c5d56' }, 300: { value: '#5eead4' } } } },
    semanticTokens: { colors: {
      'workspace.canvas': { value: { base: '{colors.gray.50}', _dark: '{colors.gray.950}' } },
      'workspace.action': { value: { base: '{colors.brand.700}', _dark: '{colors.brand.300}' } },
      'workspace.onAction': { value: { base: '{colors.white}', _dark: '{colors.gray.950}' } },
    } },
    recipes: {
      button: defineRecipe({ variants: { variant: {
        onboarding: {
          bg: 'workspace.action', color: 'workspace.onAction',
          _hover: { opacity: 0.9 },
          _focusVisible: { outline: '2px solid', outlineColor: 'workspace.action', outlineOffset: '2px' },
        },
      } } }),
    },
  },
});
export const system = createSystem(defaultConfig, config);

Référence du code

  • Les valeurs de marque correspondent volontairement aux couleurs sarcelle primitives de référence.
  • La recette d’état est locale ; la variante Button est enregistrée dans le système.

App.jsx — exemple complet de formulaire natif et de gestion des états

La composition React utilisée par l’aperçu. Elle comprend le changement de thème, la validation Field, un menu de sélection natif, le retour d’état d’attente, la simulation d’échec, la confirmation et la réinitialisation.

jsx
import React, { useEffect, useRef, useState } from 'react';
import { Box, Button, Card, Field, Grid, Heading, Input, NativeSelect, Stack, Text, Alert, chakra, useRecipe } from '@chakra-ui/react';
import { statusRecipe } from './theme';

function Status({ state, children }) {
  const recipe = useRecipe({ recipe: statusRecipe });
  return <chakra.span css={recipe({ state })}>{children}</chakra.span>;
}

export default function App() {
  const [dark, setDark] = useState(false);
  useEffect(() => { document.documentElement.className = dark ? 'dark' : 'light'; }, [dark]);
  const [name, setName] = useState('Northstar Studio');
  const [size, setSize] = useState('2–10');
  const [invalid, setInvalid] = useState(false);
  const [phase, setPhase] = useState('editing');
  const [simulateFailure, setSimulateFailure] = useState(false);
  const nameInput = useRef(null);
  const pending = phase === 'pending';
  const complete = phase === 'complete';
  const save = (event) => {
    event.preventDefault();
    if (!name.trim()) { setInvalid(true); nameInput.current?.focus(); return; }
    setInvalid(false); setPhase('pending');
    window.setTimeout(() => setPhase(simulateFailure ? 'failed' : 'complete'), 600);
  };
  return <Box className={dark ? 'dark' : 'light'} bg='workspace.canvas' color='fg' p={{ base: '4', md: '8' }}>
    <Box maxW='960px' mx='auto'>
      <Stack direction={{ base: 'column', sm: 'row' }} justify='space-between' align={{ base: 'stretch', sm: 'center' }} gap='4' mb='8'>
        <Box><Text fontSize='xs' fontWeight='semibold' color='teal.fg' letterSpacing='wide'>CHAKRA UI · NATIVE SPECIMEN</Text><Heading as='h1' fontSize='2xl' lineHeight='shorter' mt='2'>Set up your workspace</Heading></Box>
        <Button variant='outline' size='sm' onClick={() => setDark(!dark)} aria-pressed={dark}> {dark ? 'Light appearance' : 'Dark appearance'} </Button>
      </Stack>
      <Grid templateColumns={{ base: '1fr', md: '220px minmax(0, 1fr)' }} gap='8'>
        <Box as='nav' aria-label='Setup progress'>
          <Stack as='ol' gap='6' listStyleType='none' m='0' p='0'>
            <Box as='li' aria-current={complete ? undefined : 'step'}><Status state={complete ? 'complete' : 'current'}>{complete ? 'Complete' : 'Current'}</Status><Text fontWeight='semibold' mt='2'>1. Workspace profile</Text><Text fontSize='sm' color='fg.muted'>Name and team size</Text></Box>
            <Box as='li'><Status state='waiting'>Next</Status><Text fontWeight='medium' mt='2'>2. Invite your team</Text><Text fontSize='sm' color='fg.muted'>Available in the full product</Text></Box>
            <Box as='li'><Status state='waiting'>Optional</Status><Text fontWeight='medium' mt='2'>3. Connect tools</Text><Text fontSize='sm' color='fg.muted'>Complete this later</Text></Box>
          </Stack>
          <Box mt='8' borderTopWidth='1px' borderColor='border' pt='4'><Text fontSize='xs' color='fg.muted'>Scale in this specimen</Text><Text fontSize='sm' mt='2'>Field gap 6 · Card padding 6<br/>Page gap 8 · Radius xl</Text></Box>
        </Box>
        <Card.Root bg='bg.panel' borderColor='border' rounded='xl'>
          <Card.Header><Heading as='h2' fontSize='xl'>Workspace profile</Heading><Text color='fg.muted' fontSize='sm'>The name appears on your team's workspace.</Text></Card.Header>
          <Card.Body>
            <form onSubmit={save} noValidate>
              <Stack gap='6'>
                <Field.Root required invalid={invalid} disabled={pending || complete}>
                  <Field.Label>Workspace name <Field.RequiredIndicator /></Field.Label>
                  <Input ref={nameInput} value={name} onChange={e => {setName(e.target.value);setInvalid(false);}} autoComplete='organization' />
                  <Field.HelperText>Use a name your teammates will recognize.</Field.HelperText>
                  <Field.ErrorText>Enter a workspace name.</Field.ErrorText>
                </Field.Root>
                <Field.Root disabled={pending || complete}>
                  <Field.Label>Team size</Field.Label>
                  <NativeSelect.Root><NativeSelect.Field value={size} onChange={e => setSize(e.target.value)}><option>Just me</option><option>2–10</option><option>11–50</option><option>51+</option></NativeSelect.Field><NativeSelect.Indicator /></NativeSelect.Root>
                  <Field.HelperText>Used only for this local preview summary.</Field.HelperText>
                </Field.Root>
                <Box><label style={{display:'flex',gap:'8px',alignItems:'center',fontSize:'14px'}}><input type='checkbox' checked={simulateFailure} disabled={pending || complete} onChange={e=>setSimulateFailure(e.target.checked)} />Simulate a failed save</label></Box>
                {phase === 'failed' && <Alert.Root status='error'><Alert.Indicator /><Alert.Content><Alert.Title>Demo save failed</Alert.Title><Alert.Description>Your values are still here. Turn off failure simulation and retry.</Alert.Description></Alert.Content></Alert.Root>}
                {complete && <Alert.Root status='success'><Alert.Indicator /><Alert.Content><Alert.Title>Profile confirmed in this preview</Alert.Title><Alert.Description>{name.trim()} · {size} people. Nothing was sent or stored.</Alert.Description></Alert.Content></Alert.Root>}
                <Stack direction={{base:'column',sm:'row'}} gap='3'>
                  <Button type='submit' variant='onboarding' loading={pending} loadingText='Checking profile' disabled={complete}>Confirm profile</Button>
                  <Button type='button' variant='outline' disabled={pending} onClick={()=>{setPhase('editing');setInvalid(false);setName('');setSize('2–10');setSimulateFailure(false);nameInput.current?.focus();}}>Reset example</Button>
                </Stack>
                <Text role='status' aria-live='polite' fontSize='sm' color='fg.muted'>{pending ? 'Simulating a response. No network request is made.' : complete ? 'Profile step complete. Reset to try another state.' : 'Try an empty name, a failed save, or a different appearance.'}</Text>
              </Stack>
            </form>
          </Card.Body>
        </Card.Root>
      </Grid>
      <Text mt='6' fontSize='xs' color='fg.muted'>Actual Chakra UI 3.37.0 components. Custom workspace semantic tokens and button recipe. Memory-only demonstration.</Text>
    </Box>
  </Box>;
}

Référence du code

  • Aucune requête n’est envoyée ; le délai de 600ms illustre l’interface d’attente.
  • Les étapes suivantes sont des libellés contextuels, et non des éléments de navigation fonctionnels.
04

Chakra UI Configuration de l’agent IA du système de design

Point de départ de l’implémentation

Utilisez une version de Node.js prise en charge par la version de Vite et Chakra installée (Chakra indique prendre en charge Node 20 ou version ultérieure). Ce bloc distingue les commandes de terminal de src/main.jsx. Les fichiers theme et App complets sont fournis plus haut ; aucun extrait de fournisseur caché ni CSS externe n’est nécessaire.

texte
# Terminal: create a JavaScript React application
npm create vite@latest chakra-profile -- --template react
cd chakra-profile
npm install
npm install @chakra-ui/[email protected] @emotion/react

# Save the two complete examples as src/theme.js and src/App.jsx.
# Replace src/main.jsx with:
import React from 'react';
import { createRoot } from 'react-dom/client';
import { ChakraProvider } from '@chakra-ui/react';
import { system } from './theme';
import App from './App';
createRoot(document.getElementById('root')).render(<ChakraProvider value={system}><App /></ChakraProvider>);

# Start from the project directory:
npm run dev

Un prompt pour votre projet

Prompt pour l’agent IA
Utilisez Chakra UI 3.37.0, ainsi que les fichiers theme.js et App.jsx fournis, comme point de départ. Préservez les rôles sémantiques de l’espace de travail, la composition de Field, le menu déroulant natif et la distinction entre une saisie invalide et un échec de l’envoi. Remplacez uniquement le minuteur simulé par notre persistance réelle API ; ne confirmez pas la fin du profil avant d’avoir obtenu un résultat confirmé. Préservez le focus clavier, la mise en page adaptative base/md et les valeurs pour les thèmes clair et sombre. Expliquez tout nouveau jeton ou toute nouvelle variante de recette.
05

Sources et périmètre du système de design Chakra UI

Guide d’implémentation d’origine de OpenDesign, fondé sur les bases documentées de Chakra UI v3. Les références aux jetons par défaut sont distinctes des rôles propres à l’espace de travail de l’application. L’aperçu natif montre un état local ; il n’enregistre pas les données de l’espace de travail et ne met pas en œuvre l’intégralité du parcours d’intégration.