# G4OS-DS (@g4ai/ds 0.14.0) · referência completa para agentes Fonte: https://gestao-quatro-ponto-zero.github.io/G4OS-DS/ · regenerado a cada build. Detalhes de cada componente em https://gestao-quatro-ponto-zero.github.io/G4OS-DS/ai/components/.md e de cada bloco em https://gestao-quatro-ponto-zero.github.io/G4OS-DS/ai/blocks/.md. # G4OS-DS · guia essencial para agentes (v0.14.0) Leia isto inteiro antes de escrever ou mudar UI num projeto com `@g4ai/ds`. Detalhes ao lado (mesma pasta): `components/.md` (props + exemplos), `blocks/.md`, `tokens.md`, `manifest.json`. Com o MCP `g4os-ds` ligado, use `plan_screen` (pedido → anatomia, bloco e componentes), `get_component`, `get_block` e `audit`. Requisitos: React 18.2+ ou 19, Tailwind v4, `@base-ui/react`, `lucide-react` (`npx g4os-ds doctor` confere). No React 18: `{...inertProps(flag)}` em vez de `inert={flag}`, e `forwardRef` nos seus componentes usados como gatilho de Tooltip/Menu; não use `use`, `useActionState`, `useOptimistic` nem `
` se o app estiver no 18. ## Fluxo de trabalho (sempre nesta ordem) 1. **Anatomia**: decida qual das 9 anatomias a tela é (tabela abaixo). Ela define o que fica fixo e onde vai cada coisa. 2. **Bloco**: procure um bloco parecido (`blocks/.md`, MCP `plan_screen`/`search`). Achou? Copie `src/blocks/.tsx` inteiro e troque dados e textos. Só comece do zero se nenhum servir. 3. **Componentes**: para cada necessidade, use a tabela "Qual componente". Confira as props em `components/.md` antes de usar: não invente props. 4. **Estados**: carregando (`Skeleton`/`loading`), vazio (`Empty` com ação), vazio por filtro (com "Limpar"), erro (com "Tentar de novo"), ideal. 5. **Verifique e corrija até limpar**: `npx g4os-ds audit src --fix` → `npx g4os-ds audit src` (0 erros, 0 avisos) → `npx tsc --noEmit` → se houver ESLint com `@g4ai/ds/eslint`, `npx eslint src`. Depois confira a tela em 1440 e 390 px, claro e escuro. ## Anatomia → esqueleto | Tela | Esqueleto | Bloco de referência | | --- | --- | --- | | A · Lista | `Page` › `PageHeading` (1 primário em `actions`) › `PageToolbar` (`TableToolbar`/`FilterBar`) › `DataTable`/`DataGrid` › `Pagination` · `BulkBar` na seleção | `erp-invoices`, `crm-contacts`, `ats-jobs` | | B · Painel | `Page` › `PageHeading` (período em `actions`) › `KpiGrid` de `KpiCard` › `ChartCard` + gráfico › filas de ação | `fin-dashboard`, `saas-dashboard` | | C · Registro | `Page` › `PageHeading crumbs` (ações do estado) › `Tabs` › `SplitLayout main aside={}` · editar em `Drawer` | `crm-deal`, `crm-company`, `erp-order` | | D · Configurações | `SettingsLayout` (subnavegação) › `SettingsSection` por assunto; coluna estreita com `Page width="narrow"` | `settings-*`, `crm-settings` | | E · Quadro | `KanbanBoard` + `RecordCard` | `crm-pipeline` | | F · Mestre-detalhe | lista + painel; no celular `Sheet` | `erp-purchase-requests` | | G · App de altura total | `AppShell` sem `Page` (chat, arquivos) | `ai-chat` | | H · Fluxo focado | coluna única, sem casca (login, assistente) | `auth-login`, `onboarding-wizard` | | I · Público | sem `AppShell` (landing, preços) | `marketing-landing` | ```tsx // A · Lista (o esqueleto mais pedido) Criar vaga} /> v.id, (v) => v.titulo), ...colunas]} rowKey={(v) => v.id} loading={carregando} error={erro} empty={Limpar filtros} />} /> {/* filhos do BulkBar são