Sistema de componentes com tema · Novo recurso

Sistema de design Chakra UI.

Uma referência do Chakra UI v3 para tokens, funções de cores semânticas, receitas e componentes compostos de formulário. Examine as escalas reais de espaçamento e tipografia e experimente um formulário nativo de perfil de espaço de trabalho, com validação, simulação de falha ao salvar e aparência clara/escura.

Guia OpenDesign9 capítulos47 itens de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design Chakra UI

Experimente a validação de campos vazios, uma falha simulada ao salvar, a retenção dos dados inseridos, a confirmação local de sucesso e a alternância de aparência.

Perfil nativo de espaço de trabalho do ChakraAbrir exemplo completo
Chakra UI nativo 3.37.0 com React 19; pacote autocontido. Os tokens semânticos e as receitas personalizados do aplicativo são apresentados na íntegra. · Referência de implementação
02

Referência de design do sistema de design Chakra UI

Referências do tema padrão do Chakra UI 3.37.0, além dos tokens do aplicativo OpenDesign, identificados explicitamente. Os valores em rem seguem o tamanho da fonte raiz; os equivalentes em pixels consideram 16px. Esta é uma referência de trabalho selecionada, não o tema exportado completo.

Cores semânticas padrão

Fonte
Nome / RegraValor / ConfiguraçãoUso
bgwhite / blackPlano de fundo da página nos temas claro e escuro.
bg.panelwhite / gray.950Superfície do cartão nos temas claro e escuro.
bg.subtlegray.50 / gray.950Superfície discreta.
fgblack / gray.50Texto principal.
fg.mutedgray.600 / gray.400Texto de apoio.
bordergray.200 / gray.800Limite de painéis e controles.
fg.errorred.500 / red.400Texto de erro.
bg.errorred.50 / red.950Superfície de erro.
teal.fgteal.700 / teal.300Texto sobre uma superfície teal sutil.
teal.subtleteal.100 / teal.900Estilo da etapa atual.

Valores primitivos usados neste exemplo

Fonte
Nome / RegraValor / ConfiguraçãoUso
gray.50#fafafa Plano de fundo claro.
gray.200#e4e4e7 Borda clara.
gray.800#27272a Borda escura.
gray.950#111111 Plano de fundo escuro.
teal.700#0c5d56 A ação personalizada no tema claro faz referência a este valor.
teal.300#5eead4 A ação personalizada no tema escuro faz referência a este valor.

Subconjunto padrão de espaçamentos

Fonte
Nome / RegraValor / ConfiguraçãoUso
spacing.10.25rem / 4pxPreenchimento vertical de status.
spacing.20.5rem / 8pxEspaço entre controles em linha.
spacing.30.75rem / 12pxEspaço entre ações do grupo.
spacing.41rem / 16pxPreenchimento para telas pequenas.
spacing.61.5rem / 24pxEspaçamento entre campos do formulário.
spacing.82rem / 32pxEspaço principal do layout.
spacing.102.5rem / 40pxEspaçamento maior disponível.
spacing.123rem / 48pxEspaçamento disponível entre seções.

Subconjunto padrão de tipografia

Fonte
Nome / RegraValor / ConfiguraçãoUso
fonts.body / fonts.headingInter, system fallbacksO token de fonte não baixa o Inter por conta própria.
fontSizes.xs0.75remAnotação do exemplo.
fontSizes.sm0.875remTexto de ajuda.
fontSizes.md1remCampos e texto corrido.
fontSizes.lg1.125remTamanho maior disponível para o texto corrido.
fontSizes.xl1.25remTítulo do cartão.
fontSizes.2xl1.5remTítulo do exemplo.
fontWeights.medium / semibold500 / 600Hierarquia de rótulos.
lineHeights.shorter / moderate1.25 / 1.5Ritmo entre título e parágrafo.
letterSpacings.wide0.025emAntetítulo pequeno.

Raios padrão

Fonte
Nome / RegraValor / ConfiguraçãoUso
radii.sm0.25rem / 4pxCanto pouco arredondado.
radii.md0.375rem / 6pxEtiqueta de status neste exemplo.
radii.lg0.5rem / 8pxArredondamento moderado.
radii.xl0.75rem / 12pxCartão de perfil neste exemplo.
radii.full9999pxFormato de cápsula, não usado no formulário.

Limites responsivos padrão

Fonte
Nome / RegraValor / ConfiguraçãoUso
sm480pxA linha de ações pode ficar na horizontal.
md768pxA coluna de progresso fica ao lado do formulário.
lg1024pxLimite disponível para layouts largos.
xl1280pxLimite disponível para desktop.
2xl1536pxLimite disponível para telas extra largas.

Tokens semânticos do aplicativo: definidos abaixo

Fonte
Nome / RegraValor / ConfiguraçãoUso
workspace.canvasgray.50 / gray.950Mapeamento personalizado do plano de fundo nos temas claro e escuro.
workspace.actionbrand.700 / brand.300Plano de fundo personalizado das ações; os valores primitivos da marca são declarados em theme.js.
workspace.onActionwhite / gray.950Texto personalizado das ações, combinado com seu plano de fundo.
03

Guia completo do sistema de design Chakra UI

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-chakra-ui.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Sistema de design Chakra UI: o sistema v3 — configuração, tokens e componentes

Crie um sistema em vez de repassar um objeto de tema antigo

A implementação tem três camadas: theme.js define as decisões de design, main.jsx fornece o sistema resultante e App.jsx compõe o formulário. createSystem(defaultConfig, config) mantém as receitas de componentes padrão ao mesclar a configuração da aplicação. Um sistema personalizado sem esses padrões exigiria mais definições; estender os padrões é uma escolha deliberada.

Com base neste guia de OpenDesign

A prévia usa componentes do Chakra, não elementos substitutos desenhados. A barra lateral é uma lista ordenada de etapas, específica da aplicação; ela não afirma que o componente Steps do Chakra esteja montado. O cartão de perfil, os campos, o seletor, os alertas e os botões são composições nativas do Chakra.

Consulte a especificação de apoio

O que pertence a cada camada

  • tokens: valores primitivos reutilizáveis, incluindo as duas cores de marca do exemplo.
  • semanticTokens: funções condicionais, como workspace.action, independentes de telas específicas.
  • recipes: variantes reutilizáveis de componentes; o estado de React da aplicação controla se o formulário está inválido, pendente, com falha ou confirmado.

Sistema de design Chakra UI: cores primitivas e funções semânticas do tema

Use funções semânticas quando a aparência mudar

bg.panel e fg.muted expressam funções de superfície e texto; gray.950 e gray.400 são os valores subjacentes. A tabela de referência mostra como eles são resolvidos nos modos claro e escuro. Na demonstração, alternar o elemento raiz do documento entre os modos claro e escuro ativa esses valores condicionais sem reescrever cada Field ou Card. Essa alternância local não inclui persistência nem integração com as preferências do sistema.

As funções workspace.* são acréscimos específicos da aplicação. Elas definem uma ação em verde-azulado escuro sobre uma superfície clara e uma ação em verde-azulado pálido sobre uma superfície escura, além de uma cor de texto correspondente. Não são nomes oficiais de tokens do Chakra. Manter o par no tema evita um botão de modo escuro cujo fundo muda, mas cujo rótulo continua branco.

Consulte a especificação de apoio

A sintaxe de referência é diferente da forma abreviada dos componentes

Nas definições de tokens, use a referência completa {colors.gray.950}. Em uma propriedade de estilo, bg="workspace.canvas" é resolvido na categoria de cores. Em um valor composto de CSS, o caminho completo do token é necessário novamente. Essa distinção evita que uma string literal seja confundida com uma referência ao tema.

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

Referência de código

Sistema de design Chakra UI: uma escala tipográfica legível com tokens explícitos

Associe a escala a esta composição

O título usa fontSize="2xl" e lineHeight="shorter"; o cabeçalho do cartão usa xl; o texto de apoio usa sm; e a anotação da amostra usa xs. Essas escolhas criam hierarquia sem alterar os níveis semânticos dos títulos: o título da tela é h1 e o título do formulário é h2. O conteúdo normal do formulário permanece na escala padrão do texto corrido.

As pilhas padrão de texto corrido e títulos do Chakra começam com Inter e recorrem às fontes da plataforma como alternativa. A demonstração autocontida não faz solicitações externas de fontes, então a fonte alternativa renderizada pode variar conforme o sistema operacional. Se a tipografia exata for necessária, disponibilize localmente uma fonte com a licença adequada; definir um token de fonte não fornece os arquivos da fonte.

Consulte a especificação de apoio

Mantenha a tipografia e o significado independentes

O indicador da etapa atual é um metadado compacto, não a instrução principal. As mensagens de campo obrigatório e de erro permanecem ao lado do campo, em uma escala legível. Alterar o espaçamento entre letras do antetítulo não afeta os rótulos do formulário, e um nome de espaço de trabalho longo permanece dentro do campo de entrada, sem alterar a largura do cartão ao redor.

Sistema de design Chakra UI: componha Field, NativeSelect, Card e Alert

Field representa uma relação, não apenas um campo de entrada estilizado

Field.Root agrupa o rótulo, o controle, o texto de apoio e o erro. O sinalizador de campo obrigatório e RequiredIndicator comunicam a obrigatoriedade; invalid controla o estado de erro. O exemplo mantém o campo de entrada controlado por meio de React e posiciona o erro do nome do espaço de trabalho em Field.ErrorText. Os estilos de erro não são aplicados de forma independente a um parágrafo separado.

O tamanho da equipe usa NativeSelect.Root, NativeSelect.Field e NativeSelect.Indicator. Isso mantém o comportamento nativo de seleção para um conjunto curto e fixo de opções. Não finge oferecer resultados remotos com busca; isso exigiria outro controle e outra interação com os dados.

Consulte a especificação de apoio

O feedback tem uma composição própria

Consulte a especificação de apoio

Sistema de design Chakra UI: aplique tokens de espaçamento e propriedades de estilo responsivas

Uma política de espaçamento concreta

Use gap="6" entre grupos de campos, gap="3" entre ações e gap="8" entre a coluna de progresso e o formulário. O preenchimento da página muda de p="4" para p="8" em md. Com uma raiz de 16px, esses valores correspondem a 24px, 12px, 32px, 16px e 32px. Valores baseados em rem acompanham o tamanho da fonte raiz definido pelo usuário.

O cartão usa rounded="xl" e o indicador de status, rounded="md". Os diferentes raios são intencionais: o contêiner grande e o rótulo compacto têm geometrias distintas. Não interprete essas escolhas de uso como regras padrão que todas as aplicações Chakra devam seguir.

Consulte a especificação de apoio

Altere a composição em md

A grade usa uma coluna abaixo de md e, a partir de md, uma coluna de progresso de 220px ao lado de um formulário flexível. minmax(0, 1fr) permite que o formulário encolha dentro da grade. A pilha de ações muda em sm. Esses valores de objeto são substituições com prioridade para dispositivos móveis, não detecção de dispositivos.

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>

Referência de código

Sistema de design Chakra UI: conecte validação, carregamento e recuperação

A máquina de estados da prévia

Enviar um nome vazio após remover os espaços em branco define invalid e dá foco ao campo de entrada. Um envio válido passa ao estado pending, desativa a edição e exibe Button loadingText. Após o temporizador local, a caixa de seleção de falha determina se a demonstração mostra failed ou complete. Nenhum dos caminhos faz uma solicitação de rede ou armazena dados.

Um resultado de falha mantém o nome controlado e o tamanho selecionado. Desativar a simulação de falha permite tentar novamente. A conclusão desativa os campos do perfil e altera o primeiro indicador de progresso; Redefinir retorna ao modo de edição. Isso demonstra a composição visual dos estados, não um contrato de persistência no backend.

Consulte a especificação de apoio

Teste os estados na ordem

  1. Redefina o formulário e envie sem informar um nome; confira a mensagem do campo e o foco no campo de entrada.
  2. Informe um nome, ative a simulação de falha ao salvar e envie; verifique se os valores permanecem após o erro.
  3. Desative a simulação de falha e envie novamente; confira o resumo de confirmação e, em seguida, altere a aparência.

Sistema de design Chakra UI: preserve a semântica nativa na composição

Validação e progresso fáceis de entender

O formulário usa noValidate para que este exemplo demonstre o caminho personalizado de erro do Field, em vez de interromper o fluxo com a interface de validação do navegador. O rótulo continua associado por meio do Field, e o primeiro campo inválido recebe o foco. O trabalho pendente é descrito por uma região de status dinâmica; não é indicado apenas por um ícone de carregamento.

A lista de progresso usa a semântica de lista ordenada e aria-current="step" no item ativo. Ela não inclui links fictícios para telas indisponíveis. A segunda e a terceira etapas da visualização contextualizam o processo, mas não são clicáveis. Assim, os limites da demonstração ficam visíveis.

Consulte a especificação de apoio

O foco faz parte da receita de ação personalizada

A variante de integração define explicitamente um contorno para :focus-visible com espaçamento externo. A aparência escura altera a função semântica do contorno junto com a da ação. A caixa de seleção e o menu de seleção nativos continuam operáveis pelo teclado. Revise também o foco, os anúncios dos campos, a ampliação e a saída do leitor de tela no aplicativo que consome o componente; um exemplo isolado de componente não comprova a acessibilidade de todo um produto de integração.

Sistema de design Chakra UI: receitas, configuração do provider e limites de versão

Amplie Button; defina Status localmente

A variante de Button da integração é adicionada em theme.recipes.button. Variantes existentes, como outline, continuam disponíveis porque a configuração amplia defaultConfig. O indicador de status usa defineRecipe e useRecipe localmente: as variantes de estado associam current, complete e waiting a diferentes funções semânticas. É um componente do aplicativo, não uma exportação do Chakra.

Uma receita de elemento único retorna um objeto de estilos. Componentes com várias partes, como Field, têm diversos slots e precisam de receitas de slots quando suas partes são tematizadas em conjunto. Aplicar uma receita semelhante à de um botão a um Field inteiro não permitiria controlar individualmente o rótulo, o controle e o erro.

Consulte a especificação de apoio

Use os arquivos fornecidos em conjunto

Não importe uma configuração v2 de extendTheme nem passe theme={...} para este provider v3. A raiz real usa ChakraProvider value={system}. O exemplo intencionalmente não adiciona um segundo provider de modo de cor: a alternância local entre as classes light e dark é suficiente para esta visualização isolada, enquanto um aplicativo real pode precisar de preferência persistida e suporte à renderização no servidor.

Consulte a especificação de apoio

Sistema de design Chakra UI: verifique o tema e o formulário em conjunto

O que este exemplo demonstra

A unidade relevante para revisão é o cartão de perfil completo nas duas aparências: rótulo, campo de entrada, texto de ajuda, feedback de erro, botão durante o processamento, alerta de falha e resumo de sucesso. Um botão isolado não revela a ausência de um fundo semântico nem um controle cujo estado de erro não esteja associado ao rótulo.

Compare a tabela de referência com a interface renderizada. A ação personalizada em tons de verde-azulado deve ser diferente da ação padrão com contorno; o espaçamento 6 deve separar os campos; a grade deve passar a uma coluna abaixo de md. Essas verificações relacionam as regras descritas ao resultado renderizado.

O que não está incluído no exemplo

A visualização não inclui criação de conta, envio de convite, persistência, autenticação nem integração com outra tela de integração. O temporizador é explicitamente uma simulação. Ao conectar um endpoint real, mantenha a distinção demonstrada entre o estado do campo e o estado da solicitação, substitua o temporizador pela solicitação e defina se a conclusão significa aceitação local, salvamento remoto ou ativação completa.

Chakra UI Exemplos de componentes do sistema de design

theme.js — tokens primitivos, funções semânticas e receitas

Tema completo do aplicativo para o exemplo. As funções semânticas do workspace e a variante de integração são adições originais; defaultConfig fornece o tema padrão do 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);

Referência de código

  • Os valores da marca correspondem intencionalmente aos primitivos verde-azulados referenciados.
  • A receita de status é local; a variante de Button é registrada no sistema.

App.jsx — exemplo completo de formulário nativo e estados

A composição React real usada pela visualização. Inclui alternância de tema, validação com Field, menu de seleção nativo, feedback de processamento, falha simulada, confirmação e redefinição.

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>;
}

Referência de código

  • Nenhuma solicitação é enviada; o atraso de 600ms demonstra a interface durante o processamento.
  • As próximas etapas são rótulos contextuais, não uma navegação funcional.
04

Chakra UI Configuração do agente de IA para o sistema de design

Ponto de partida para implementação

Use uma versão do Node.js compatível com a versão instalada do Vite e com o Chakra (a documentação do Chakra recomenda Node 20 ou posterior). Este bloco separa os comandos de terminal de src/main.jsx. Os arquivos completos de tema e App estão acima; não é necessário nenhum trecho oculto de configuração do provider nem nenhum CSS externo.

texto
# 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

Um prompt para seu projeto

Prompt para agente de IA
Use Chakra UI 3.37.0 e os arquivos theme.js e App.jsx fornecidos como ponto de partida. Preserve as funções semânticas do workspace, a composição do Field, o menu de seleção nativo e a distinção entre entrada inválida e falha no envio. Substitua apenas o temporizador simulado pela nossa API de persistência real; não indique que o perfil foi concluído antes da confirmação do resultado. Preserve o foco pelo teclado, o layout responsivo base/md e os valores para os modos claro e escuro. Explique quaisquer novos tokens ou variantes de receita.
05

Chakra UI Fontes e escopo do sistema de design

Guia de implementação original de OpenDesign, baseado nos fundamentos documentados do Chakra UI v3. As referências padrão dos tokens são separadas das funções específicas do espaço de trabalho do aplicativo. A prévia nativa demonstra o estado local; ela não salva dados do espaço de trabalho nem implementa toda a jornada de integração.