# UI Kit (Core*) > Os componentes de interface do OonCore — status com vocabulário único, KPIs, tabela de dados responsiva, drawer de detalhe, confirmação, seções de formulário, estados e mais. Os componentes ficam em `@oondemand/oon-core-front` e `@oondemand/oon-core-front/ui`. Use-os em páginas próprias para manter a experiência padrão da Plataforma. Veja-os ao vivo na [vitrine de componentes](/componentes). ```tsx import { CorePageHeader, CoreKpiGrid, CoreDataTable, CoreStatusBadge, CoreDetailDrawer, CoreConfirmDialog, CoreEmpty, CoreFormSection, CoreTechnicalDetails, } from "@oondemand/oon-core-front/ui"; ``` ## Status ```tsx {/* "Ativo" · success */} {/* "Vencida" · danger */} ``` `coreStatus(kind, status)` traduz um estado interno para `{ label, tone }`. Estados internos **nunca** aparecem como rótulo; desconhecidos ficam neutros. | `kind` | Estados reconhecidos → rótulo | |---|---| | `contract` | vigente/ativa → Ativo · pendente → Pendente de ativação · suspensa/bloqueado → Bloqueado · encerrada/expirada/cancelada/revogada → Encerrado | | `charge` | aberta → Em aberto · vencida → Vencida · paga → Paga · cancelada → Cancelada | | `publication` | publicada → Publicada · cancelada → Cancelada · recovery_required → Em recuperação | | `environment` | active → Ativo · provisioning → Em andamento · never_published → Não utilizado · deleted → Excluído | | `entity` | ativo → Ativo · pendente/rascunho → Pendente · inativo/arquivado → Inativo | Tons: `success`, `warning`, `danger`, `info`, `neutral`. ## KPIs ```tsx ``` ## Tabela de dados ```tsx label="Pedidos" rows={rows} rowKey={(row) => row._id} columns={[ { key: "numero", header: "Número" }, { key: "fornecedor", header: "Fornecedor", hideOnMobile: true }, { key: "status", header: "Status", render: (row) => }, ]} search={{ value: busca, onChange: setBusca, placeholder: "Buscar pedido" }} paging={{ page, pageSize: 20, total, onPage: setPage }} onRowClick={(row) => setSelecionado(row)} selectedKey={selecionado?._id} loading={isLoading} error={error ? "Não foi possível carregar." : undefined} empty={} /> ``` Busca, filtros, paginação, linha clicável por mouse e teclado, **cartões no celular** e estados vazio/carregando/erro. ## Drawer de detalhe ```tsx setSelecionado(null)} title={selecionado?.numero} status={} tabs={[ { id: "resumo", label: "Resumo", content: }, { id: "historico", label: "Histórico", content: }, ]} actions={Aprovar} /> ``` ## Confirmação ```tsx setConfirmando(false)} /> ``` Escreva em `effect` o efeito real da ação. ## Formulário em seções ```tsx setCnpj(e.target.value)} /> ``` ## Abas ```tsx // Não controlado: o componente guarda a aba selecionada }, { id: "parcelas", label: "Parcelas", content: }, ]} /> // Controlado: a aba exibida segue `value` ``` Desde a 0.7.36, a aba ativa é marcada por sublinhado `brand.solid` (só tokens semânticos, legível no tema escuro), o componente funciona sem `value`/`onChange` e expõe `tablist`/`tab`/`tabpanel` com navegação por setas, Home e End. ## Detalhes técnicos ```tsx ``` Recolhido por padrão, com botão de copiar — ideal para erros com `requestId`. ## Catálogo completo | Componente | Uso | |---|---| | `CorePageHeader` | Título, descrição e ações da página | | `CoreToolbar`, `CoreActions` | Barras de ação | | `CoreKpiGrid` | Grade de indicadores | | `CoreSummaryCards` | Cards de resumo com tom | | `CoreStatusPanel` | Painel de status com título e ações | | `CoreStatusBadge`, `coreStatus` | Vocabulário único de status | | `CoreDataTable` | Tabela responsiva para dados próprios | | `CoreDataGrid`, `CoreCards` | Grid/cards de uma model (via `CoreCollection`) | | `CoreDetailDrawer` | Painel lateral com abas e ações | | `CoreConfirmDialog`, `CoreConfirmAction` | Confirmação de ação | | `CoreTabs`, `CoreStepper`, `CoreTimeline`, `CoreActivityLog` | Navegação e histórico | | `CoreForm`, `CoreField`, `CoreRelationField`, `CoreFormSection` | Formulários próprios | | `CoreEmpty`, `CoreEmptyState`, `CoreLoadingState`, `CoreErrorState` | Estados | | `CoreTechnicalDetails` | Detalhes técnicos recolhidos | | `CoreOrganizationSwitcher`, `coreInitials` | Cabeçalho | | `OonButton`, `OonInput`, `OonSelect`, `OonCard`, `OonBadge`, `OonGrid`, `OonStack`, `OonModal`, `OonDrawer` | Primitives (Chakra UI v3) | Fonte: https://sdk.oonapps.com/docs/frontend/ui-kit