@seedgrid/ai-toolkit 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -9
- package/dist/adapters/shared.js +12 -7
- package/dist/cli.js +8 -2
- package/dist/commands/review.js +2 -2
- package/dist/commands/selfinstall.js +63 -0
- package/dist/core/plan.js +5 -0
- package/docs/arquitetura.md +2 -2
- package/docs/compatibilidade.md +1 -1
- package/docs/formato.md +4 -4
- package/docs/instalacao.md +1 -1
- package/package.json +1 -1
- package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -971
- package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -93
- package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -186
- package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -112
- package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -323
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +103 -103
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -86
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -629
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -123
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +59 -59
- package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +3 -3
- package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/rules/documentos.md +26 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-bump → sg-bump}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{revisar-codigo → sg-code-review}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-backend-crud → sg-crud-back}/SKILL.md +3 -3
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/SKILL.md +2 -2
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/agents/openai.yaml +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/routing.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/sg-new-screen/agents/openai.yaml +4 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/sg-new-skill/SKILL.md +35 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/{planejar-mudanca → sg-plan-change}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-review → sg-review}/SKILL.md +1 -1
- package/seedgridKB/SeedGrid/Toolkit/skills/{validar-mudanca → sg-validate-change}/SKILL.md +1 -1
- package/seedgridKB/manifest.json +26 -17
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +0 -4
- /package/seedgridKB/SeedGrid/Toolkit/skills/{revisar-codigo → sg-code-review}/references/checklist.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/checklist.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/patterns.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/references/checklist.md +0 -0
- /package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-new-screen → sg-new-screen}/references/steps.md +0 -0
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
---
|
|
2
|
-
tags: [seedgrid, component, frontend, react, inputs-texto]
|
|
3
|
-
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src/inputs
|
|
4
|
-
branch: main
|
|
5
|
-
commit: ad30fc11de
|
|
6
|
-
analisado-em: 2026-10-14
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Inputs de texto (SgInput*)
|
|
10
|
-
|
|
11
|
-
Este grupo reúne os 15 campos de digitação do pacote `@seedgrid/fe-components` (v`2026.7.1`). Todos estão em `src/inputs/` e todos são exportados pela raiz do pacote. Detalhe de props, eventos e ref: [[SeedGrid/SeedGrid-components/inputs-texto/API|API dos inputs de texto]]. Código: [[SeedGrid/SeedGrid-components/inputs-texto/Exemplos|Exemplos dos inputs de texto]]. Grupos vizinhos: [[SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral|inputs de seleção]], [[SeedGrid/SeedGrid-components/datatable/Visao-geral|SgDatatable]], [[SeedGrid/SeedGrid-components/editor/Visao-geral|SgTextEditor]].
|
|
12
|
-
|
|
13
|
-
## Objetivo
|
|
14
|
-
|
|
15
|
-
Os componentes oferecem campos de formulário prontos, com as seguintes características comuns:
|
|
16
|
-
- rótulo flutuante, no topo ou à esquerda;
|
|
17
|
-
- validação embutida, com mensagens traduzidas;
|
|
18
|
-
- máscaras brasileiras (CPF, CNPJ alfanumérico, telefone, CEP);
|
|
19
|
-
- integração opcional com react-hook-form, por `register` ou por `control`.
|
|
20
|
-
|
|
21
|
-
O padrão de nomes de eventos vem da casa: `onEnter` no foco, `onExit` no blur, `onChange(value)` com o valor já tratado e `onValidation(msg | null)`. **Confirmado**: comentários "padrao seedgrid" nos tipos.
|
|
22
|
-
|
|
23
|
-
## Quando usar cada um
|
|
24
|
-
|
|
25
|
-
| Componente | Use para | Base |
|
|
26
|
-
|---|---|---|
|
|
27
|
-
| `SgInputText` | Texto curto livre (nome, título, código). É a base dos demais. | própria |
|
|
28
|
-
| `SgInputTextArea` | Texto longo multilinha, com mínimo de linhas e palavras. | própria (`<textarea>`) |
|
|
29
|
-
| `SgInputTextSearch` | Caixa de busca com debounce (`onSearchChange`). | `SgInputText` |
|
|
30
|
-
| `SgInputEmail` | E-mail com validação de formato e bloqueio de domínios temporários. | `SgInputText` |
|
|
31
|
-
| `SgInputPassword` | Senha com política configurável, barra de força, olho e gerador. | `SgInputText` |
|
|
32
|
-
| `SgInputPhone` | Telefone BR com máscara (10 ou 11 dígitos). | `SgInputText` |
|
|
33
|
-
| `SgInputCPF` | CPF com máscara e dígito verificador. | `SgInputText` |
|
|
34
|
-
| `SgInputCNPJ` | CNPJ numérico ou alfanumérico, com consulta pública opcional. | `SgInputText` |
|
|
35
|
-
| `SgInputCPFCNPJ` | Campo único que aceita CPF ou CNPJ e detecta qual é. | `SgInputText` |
|
|
36
|
-
| `SgInputPostalCode` | CEP/código postal de BR, PT, US, ES, UY, AR e PY, com ViaCEP opcional. | `SgInputText` |
|
|
37
|
-
| `SgInputDate` | Data com o widget nativo (`type="date"`) e limites min/max. | `SgInputText` |
|
|
38
|
-
| `SgInputBirthDate` | Data de nascimento com idade mínima/máxima. | `SgInputDate` |
|
|
39
|
-
| `SgInputNumber` | Número decimal formatado pelo locale, com min/max. | própria |
|
|
40
|
-
| `SgInputCurrency` | Valor monetário com símbolo via `Intl` (padrão BRL). | própria (derivada do código do `SgInputNumber`) |
|
|
41
|
-
| `SgInputOTP` | Código de uso único segmentado, com máscara (`999999`, `###-###`). | própria |
|
|
42
|
-
|
|
43
|
-
Para escolhas fechadas, como combos e listas, use o grupo [[SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral|inputs de seleção]]. Para texto rico, use o [[SeedGrid/SeedGrid-components/editor/Visao-geral|SgTextEditor]]. Esses mesmos encaminhamentos aparecem nos `aiHints.avoidUseCases` de `SgInputText.meta.ts`. **Confirmado**.
|
|
44
|
-
|
|
45
|
-
## Composição
|
|
46
|
-
|
|
47
|
-
```mermaid
|
|
48
|
-
graph TD
|
|
49
|
-
T[SgInputText] --> S[SgInputTextSearch]
|
|
50
|
-
T --> E[SgInputEmail]
|
|
51
|
-
T --> P[SgInputPassword]
|
|
52
|
-
T --> Ph[SgInputPhone]
|
|
53
|
-
T --> CPF[SgInputCPF]
|
|
54
|
-
T --> CNPJ[SgInputCNPJ]
|
|
55
|
-
T --> CC[SgInputCPFCNPJ]
|
|
56
|
-
T --> CEP[SgInputPostalCode]
|
|
57
|
-
T --> D[SgInputDate] --> B[SgInputBirthDate]
|
|
58
|
-
T -.também usado por.-> SEL[SgAutocomplete / SgCombobox / SgMultiSelect]
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
- Os wrappers usam `Omit<SgInputTextProps, …>`, acrescentam as próprias props e repassam o resto ao `SgInputText`. A integração com o RHF fica no `SgInputText`.
|
|
62
|
-
- Cada wrapper mantém **o próprio erro interno** e o passa como `error` ao `SgInputText`, junto com o erro de `fieldState` via `resolveFieldError`. Como o `SgInputText` também valida (required/maxLength…), uma mensagem do wrapper tem precedência sobre a dele. **Confirmado**.
|
|
63
|
-
- `SgInputTextArea`, `SgInputNumber`, `SgInputCurrency` e `SgInputOTP` repetem o padrão visual do `SgInputText`, mas têm implementação própria.
|
|
64
|
-
|
|
65
|
-
## Dependências
|
|
66
|
-
|
|
67
|
-
- **Peers obrigatórios do pacote:**
|
|
68
|
-
- `react` `^18.2.0 || ^19.0.0`;
|
|
69
|
-
- `react-hook-form` `^7.0.0`, importado estaticamente (`Controller`) pelos inputs, mesmo sem uso de formulário;
|
|
70
|
-
- `lucide-react` `^0.468.0 || ^1.0.0` (ícone `X` do botão limpar).
|
|
71
|
-
|
|
72
|
-
**Confirmado** em `package.json` e nos imports.
|
|
73
|
-
- **Peers TipTap:** não são usados por este grupo, mas são carregados pela raiz do pacote. Ver [[SeedGrid/SeedGrid-components/editor/Visao-geral|SgTextEditor]].
|
|
74
|
-
- **Rede:** `SgInputCNPJ` (`validateWithPublicaCnpj`) e `SgInputPostalCode` (`validateWithViaCep`) chamam `fetch` para `publica.cnpj.ws` e `viacep.com.br` por padrão. Ambos aceitam uma função de consulta própria (`publicaCnpjFetch`, `viaCepFetch`).
|
|
75
|
-
- **APIs do navegador:** `SgInputPassword` usa `crypto.getRandomValues` para gerar senha.
|
|
76
|
-
- **"use client":** todos os arquivos começam com `"use client"`, o que serve ao Next.js App Router.
|
|
77
|
-
|
|
78
|
-
## Tema e estilos
|
|
79
|
-
|
|
80
|
-
- O CSS compilado (Tailwind) é **injetado automaticamente** no `<head>` quando o pacote é importado (`ensureSeedgridStylesInjected()` em `src/injectStyles.ts`, chamado no topo de `src/index.ts`). A injeção tem proteção para SSR e para dupla injeção (id `seedgrid-fe-components-styles`). Também existe `@seedgrid/fe-components/style.css` para quem prefere importar o arquivo. **Confirmado**.
|
|
81
|
-
- **Tokens:**
|
|
82
|
-
- Cores via variáveis CSS do tema: `hsl(var(--primary))`, `--destructive`, `--foreground`, `--muted`, `--border`.
|
|
83
|
-
- Variáveis específicas de input, com fallback: `--sg-input-bg`, `--sg-input-fg`, `--sg-input-placeholder`, `--sg-input-disabled-bg`, `--sg-input-disabled-fg`.
|
|
84
|
-
|
|
85
|
-
O pacote `@seedgrid/fe-theme` aparece só como devDependency. A relação exata entre ele e essas variáveis é **Inferência**.
|
|
86
|
-
- **Customização:**
|
|
87
|
-
- Props: `className` (no `SgInputText` **substitui** as classes do input), `labelClassName`, `width`, `borderRadius`, `elevation`, `withBorder`, `filled`.
|
|
88
|
-
- Dark mode do `SgInputDate`: `color-scheme` via `useDarkFlag()`.
|
|
89
|
-
|
|
90
|
-
## Internacionalização
|
|
91
|
-
|
|
92
|
-
- **Provider:** textos padrão vêm de `useComponentsI18n()` (`src/i18n/index.ts`). Locales embutidos: `pt-BR`, `pt-PT`, `en-US` (alias `en`), `es`, `fr`.
|
|
93
|
-
- **Sem provider:** vale o i18n global, que por padrão é **`en-US`**. Para trocar, use `<SgComponentsI18nProvider locale="pt-BR" messages={…}>` ou `setComponentsI18n(...)`. As mensagens passadas sobrescrevem as embutidas, chave por chave.
|
|
94
|
-
- **Chaves deste grupo:** `components.inputs.*`, `components.password.*`, `components.validators.*` e `components.actions.clear`.
|
|
95
|
-
- **Props `*Message`:** sempre têm precedência sobre a tradução.
|
|
96
|
-
|
|
97
|
-
**Confirmado**.
|
|
98
|
-
|
|
99
|
-
## Testes existentes (lidos, **não executados**)
|
|
100
|
-
|
|
101
|
-
- `tests/inputs-dom.test.mjs` (jsdom) cobre:
|
|
102
|
-
- `SgInputText` controlado via `inputProps.value` e via RHF;
|
|
103
|
-
- `onChange` do `SgInputPassword` e o tamanho da senha gerada;
|
|
104
|
-
- asterisco do `SgInputPhone`;
|
|
105
|
-
- debounce, `minChars` e "distinct" do `SgInputTextSearch`.
|
|
106
|
-
- `tests/inputs-i18n.test.mjs`: rótulos de acessibilidade do `SgInputOTP`.
|
|
107
|
-
- `tests/rhf.test.mjs` e `tests/rhf-components-contract.test.mjs`: `resolveFieldError`, `mergeRequiredRule` e presença dos caminhos `register`/`control` no `SgInputTextArea`.
|
|
108
|
-
- `tests/i18n-components-contract.test.mjs`: garante que os componentes usam `t(...)` em vez de texto fixo.
|
|
109
|
-
|
|
110
|
-
O script `test` do pacote roda `pnpm run build` antes.
|
|
111
|
-
|
|
112
|
-
## Limitações e pontos de atenção
|
|
113
|
-
|
|
114
|
-
- `SgInputBirthDate` sem `minAge` nem `maxAge` acusa erro de configuração para qualquer data preenchida. **Confirmado**.
|
|
115
|
-
- `SgInputPassword` tem `maxLength` padrão **15**. `SgInputCPF`, `SgInputCNPJ` e `SgInputCPFCNPJ` têm `maxLength` padrão 18. **Confirmado**.
|
|
116
|
-
- `SgInputCPF`, `SgInputCNPJ`, `SgInputCPFCNPJ`, `SgInputPostalCode`, `SgInputDate` e `SgInputBirthDate` não repassam `required` ao `SgInputText`. Consequências:
|
|
117
|
-
- o rótulo fica sem `*`;
|
|
118
|
-
- as rules do RHF ficam sem `required` automático (a validação interna continua funcionando).
|
|
119
|
-
|
|
120
|
-
`SgInputPhone`, `SgInputEmail` e `SgInputPassword` repassam. **Confirmado** (`required={required}` só aparece nesses três).
|
|
121
|
-
- O erro não é anunciado a leitores de tela no `SgInputText` (sem `aria-invalid`/`aria-describedby`). O `SgToggleSwitch` e o `SgInputOTP` fazem isso. **Confirmado**.
|
|
122
|
-
- Para reagir ao foco, use `onEnter`: o `inputProps.onFocus` não é chamado pelo `SgInputText`. **Confirmado**; ver [[SeedGrid/SeedGrid-components/inputs-texto/API#Contrato base SgInputText|contrato base]].
|
|
123
|
-
- Os tipos de props de `SgInputEmail`, `SgInputPassword`, `SgInputDate` e `SgInputBirthDate` não são reexportados. **Confirmado**.
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, component, frontend, react, inputs-texto]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src/inputs
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Inputs de texto (SgInput*)
|
|
10
|
+
|
|
11
|
+
Este grupo reúne os 15 campos de digitação do pacote `@seedgrid/fe-components` (v`2026.7.1`). Todos estão em `src/inputs/` e todos são exportados pela raiz do pacote. Detalhe de props, eventos e ref: [[SeedGrid/SeedGrid-components/inputs-texto/API|API dos inputs de texto]]. Código: [[SeedGrid/SeedGrid-components/inputs-texto/Exemplos|Exemplos dos inputs de texto]]. Grupos vizinhos: [[SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral|inputs de seleção]], [[SeedGrid/SeedGrid-components/datatable/Visao-geral|SgDatatable]], [[SeedGrid/SeedGrid-components/editor/Visao-geral|SgTextEditor]].
|
|
12
|
+
|
|
13
|
+
## Objetivo
|
|
14
|
+
|
|
15
|
+
Os componentes oferecem campos de formulário prontos, com as seguintes características comuns:
|
|
16
|
+
- rótulo flutuante, no topo ou à esquerda;
|
|
17
|
+
- validação embutida, com mensagens traduzidas;
|
|
18
|
+
- máscaras brasileiras (CPF, CNPJ alfanumérico, telefone, CEP);
|
|
19
|
+
- integração opcional com react-hook-form, por `register` ou por `control`.
|
|
20
|
+
|
|
21
|
+
O padrão de nomes de eventos vem da casa: `onEnter` no foco, `onExit` no blur, `onChange(value)` com o valor já tratado e `onValidation(msg | null)`. **Confirmado**: comentários "padrao seedgrid" nos tipos.
|
|
22
|
+
|
|
23
|
+
## Quando usar cada um
|
|
24
|
+
|
|
25
|
+
| Componente | Use para | Base |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| `SgInputText` | Texto curto livre (nome, título, código). É a base dos demais. | própria |
|
|
28
|
+
| `SgInputTextArea` | Texto longo multilinha, com mínimo de linhas e palavras. | própria (`<textarea>`) |
|
|
29
|
+
| `SgInputTextSearch` | Caixa de busca com debounce (`onSearchChange`). | `SgInputText` |
|
|
30
|
+
| `SgInputEmail` | E-mail com validação de formato e bloqueio de domínios temporários. | `SgInputText` |
|
|
31
|
+
| `SgInputPassword` | Senha com política configurável, barra de força, olho e gerador. | `SgInputText` |
|
|
32
|
+
| `SgInputPhone` | Telefone BR com máscara (10 ou 11 dígitos). | `SgInputText` |
|
|
33
|
+
| `SgInputCPF` | CPF com máscara e dígito verificador. | `SgInputText` |
|
|
34
|
+
| `SgInputCNPJ` | CNPJ numérico ou alfanumérico, com consulta pública opcional. | `SgInputText` |
|
|
35
|
+
| `SgInputCPFCNPJ` | Campo único que aceita CPF ou CNPJ e detecta qual é. | `SgInputText` |
|
|
36
|
+
| `SgInputPostalCode` | CEP/código postal de BR, PT, US, ES, UY, AR e PY, com ViaCEP opcional. | `SgInputText` |
|
|
37
|
+
| `SgInputDate` | Data com o widget nativo (`type="date"`) e limites min/max. | `SgInputText` |
|
|
38
|
+
| `SgInputBirthDate` | Data de nascimento com idade mínima/máxima. | `SgInputDate` |
|
|
39
|
+
| `SgInputNumber` | Número decimal formatado pelo locale, com min/max. | própria |
|
|
40
|
+
| `SgInputCurrency` | Valor monetário com símbolo via `Intl` (padrão BRL). | própria (derivada do código do `SgInputNumber`) |
|
|
41
|
+
| `SgInputOTP` | Código de uso único segmentado, com máscara (`999999`, `###-###`). | própria |
|
|
42
|
+
|
|
43
|
+
Para escolhas fechadas, como combos e listas, use o grupo [[SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral|inputs de seleção]]. Para texto rico, use o [[SeedGrid/SeedGrid-components/editor/Visao-geral|SgTextEditor]]. Esses mesmos encaminhamentos aparecem nos `aiHints.avoidUseCases` de `SgInputText.meta.ts`. **Confirmado**.
|
|
44
|
+
|
|
45
|
+
## Composição
|
|
46
|
+
|
|
47
|
+
```mermaid
|
|
48
|
+
graph TD
|
|
49
|
+
T[SgInputText] --> S[SgInputTextSearch]
|
|
50
|
+
T --> E[SgInputEmail]
|
|
51
|
+
T --> P[SgInputPassword]
|
|
52
|
+
T --> Ph[SgInputPhone]
|
|
53
|
+
T --> CPF[SgInputCPF]
|
|
54
|
+
T --> CNPJ[SgInputCNPJ]
|
|
55
|
+
T --> CC[SgInputCPFCNPJ]
|
|
56
|
+
T --> CEP[SgInputPostalCode]
|
|
57
|
+
T --> D[SgInputDate] --> B[SgInputBirthDate]
|
|
58
|
+
T -.também usado por.-> SEL[SgAutocomplete / SgCombobox / SgMultiSelect]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- Os wrappers usam `Omit<SgInputTextProps, …>`, acrescentam as próprias props e repassam o resto ao `SgInputText`. A integração com o RHF fica no `SgInputText`.
|
|
62
|
+
- Cada wrapper mantém **o próprio erro interno** e o passa como `error` ao `SgInputText`, junto com o erro de `fieldState` via `resolveFieldError`. Como o `SgInputText` também valida (required/maxLength…), uma mensagem do wrapper tem precedência sobre a dele. **Confirmado**.
|
|
63
|
+
- `SgInputTextArea`, `SgInputNumber`, `SgInputCurrency` e `SgInputOTP` repetem o padrão visual do `SgInputText`, mas têm implementação própria.
|
|
64
|
+
|
|
65
|
+
## Dependências
|
|
66
|
+
|
|
67
|
+
- **Peers obrigatórios do pacote:**
|
|
68
|
+
- `react` `^18.2.0 || ^19.0.0`;
|
|
69
|
+
- `react-hook-form` `^7.0.0`, importado estaticamente (`Controller`) pelos inputs, mesmo sem uso de formulário;
|
|
70
|
+
- `lucide-react` `^0.468.0 || ^1.0.0` (ícone `X` do botão limpar).
|
|
71
|
+
|
|
72
|
+
**Confirmado** em `package.json` e nos imports.
|
|
73
|
+
- **Peers TipTap:** não são usados por este grupo, mas são carregados pela raiz do pacote. Ver [[SeedGrid/SeedGrid-components/editor/Visao-geral|SgTextEditor]].
|
|
74
|
+
- **Rede:** `SgInputCNPJ` (`validateWithPublicaCnpj`) e `SgInputPostalCode` (`validateWithViaCep`) chamam `fetch` para `publica.cnpj.ws` e `viacep.com.br` por padrão. Ambos aceitam uma função de consulta própria (`publicaCnpjFetch`, `viaCepFetch`).
|
|
75
|
+
- **APIs do navegador:** `SgInputPassword` usa `crypto.getRandomValues` para gerar senha.
|
|
76
|
+
- **"use client":** todos os arquivos começam com `"use client"`, o que serve ao Next.js App Router.
|
|
77
|
+
|
|
78
|
+
## Tema e estilos
|
|
79
|
+
|
|
80
|
+
- O CSS compilado (Tailwind) é **injetado automaticamente** no `<head>` quando o pacote é importado (`ensureSeedgridStylesInjected()` em `src/injectStyles.ts`, chamado no topo de `src/index.ts`). A injeção tem proteção para SSR e para dupla injeção (id `seedgrid-fe-components-styles`). Também existe `@seedgrid/fe-components/style.css` para quem prefere importar o arquivo. **Confirmado**.
|
|
81
|
+
- **Tokens:**
|
|
82
|
+
- Cores via variáveis CSS do tema: `hsl(var(--primary))`, `--destructive`, `--foreground`, `--muted`, `--border`.
|
|
83
|
+
- Variáveis específicas de input, com fallback: `--sg-input-bg`, `--sg-input-fg`, `--sg-input-placeholder`, `--sg-input-disabled-bg`, `--sg-input-disabled-fg`.
|
|
84
|
+
|
|
85
|
+
O pacote `@seedgrid/fe-theme` aparece só como devDependency. A relação exata entre ele e essas variáveis é **Inferência**.
|
|
86
|
+
- **Customização:**
|
|
87
|
+
- Props: `className` (no `SgInputText` **substitui** as classes do input), `labelClassName`, `width`, `borderRadius`, `elevation`, `withBorder`, `filled`.
|
|
88
|
+
- Dark mode do `SgInputDate`: `color-scheme` via `useDarkFlag()`.
|
|
89
|
+
|
|
90
|
+
## Internacionalização
|
|
91
|
+
|
|
92
|
+
- **Provider:** textos padrão vêm de `useComponentsI18n()` (`src/i18n/index.ts`). Locales embutidos: `pt-BR`, `pt-PT`, `en-US` (alias `en`), `es`, `fr`.
|
|
93
|
+
- **Sem provider:** vale o i18n global, que por padrão é **`en-US`**. Para trocar, use `<SgComponentsI18nProvider locale="pt-BR" messages={…}>` ou `setComponentsI18n(...)`. As mensagens passadas sobrescrevem as embutidas, chave por chave.
|
|
94
|
+
- **Chaves deste grupo:** `components.inputs.*`, `components.password.*`, `components.validators.*` e `components.actions.clear`.
|
|
95
|
+
- **Props `*Message`:** sempre têm precedência sobre a tradução.
|
|
96
|
+
|
|
97
|
+
**Confirmado**.
|
|
98
|
+
|
|
99
|
+
## Testes existentes (lidos, **não executados**)
|
|
100
|
+
|
|
101
|
+
- `tests/inputs-dom.test.mjs` (jsdom) cobre:
|
|
102
|
+
- `SgInputText` controlado via `inputProps.value` e via RHF;
|
|
103
|
+
- `onChange` do `SgInputPassword` e o tamanho da senha gerada;
|
|
104
|
+
- asterisco do `SgInputPhone`;
|
|
105
|
+
- debounce, `minChars` e "distinct" do `SgInputTextSearch`.
|
|
106
|
+
- `tests/inputs-i18n.test.mjs`: rótulos de acessibilidade do `SgInputOTP`.
|
|
107
|
+
- `tests/rhf.test.mjs` e `tests/rhf-components-contract.test.mjs`: `resolveFieldError`, `mergeRequiredRule` e presença dos caminhos `register`/`control` no `SgInputTextArea`.
|
|
108
|
+
- `tests/i18n-components-contract.test.mjs`: garante que os componentes usam `t(...)` em vez de texto fixo.
|
|
109
|
+
|
|
110
|
+
O script `test` do pacote roda `pnpm run build` antes.
|
|
111
|
+
|
|
112
|
+
## Limitações e pontos de atenção
|
|
113
|
+
|
|
114
|
+
- `SgInputBirthDate` sem `minAge` nem `maxAge` acusa erro de configuração para qualquer data preenchida. **Confirmado**.
|
|
115
|
+
- `SgInputPassword` tem `maxLength` padrão **15**. `SgInputCPF`, `SgInputCNPJ` e `SgInputCPFCNPJ` têm `maxLength` padrão 18. **Confirmado**.
|
|
116
|
+
- `SgInputCPF`, `SgInputCNPJ`, `SgInputCPFCNPJ`, `SgInputPostalCode`, `SgInputDate` e `SgInputBirthDate` não repassam `required` ao `SgInputText`. Consequências:
|
|
117
|
+
- o rótulo fica sem `*`;
|
|
118
|
+
- as rules do RHF ficam sem `required` automático (a validação interna continua funcionando).
|
|
119
|
+
|
|
120
|
+
`SgInputPhone`, `SgInputEmail` e `SgInputPassword` repassam. **Confirmado** (`required={required}` só aparece nesses três).
|
|
121
|
+
- O erro não é anunciado a leitores de tela no `SgInputText` (sem `aria-invalid`/`aria-describedby`). O `SgToggleSwitch` e o `SgInputOTP` fazem isso. **Confirmado**.
|
|
122
|
+
- Para reagir ao foco, use `onEnter`: o `inputProps.onFocus` não é chamado pelo `SgInputText`. **Confirmado**; ver [[SeedGrid/SeedGrid-components/inputs-texto/API#Contrato base SgInputText|contrato base]].
|
|
123
|
+
- Os tipos de props de `SgInputEmail`, `SgInputPassword`, `SgInputDate` e `SgInputBirthDate` não são reexportados. **Confirmado**.
|
|
@@ -480,65 +480,65 @@ export default function Example() {
|
|
|
480
480
|
`apps/showcase/src/app/components/sg-wizard/samples/nextdisabled.tsx.sample`
|
|
481
481
|
|
|
482
482
|
```tsx
|
|
483
|
-
import React from "react";
|
|
484
|
-
import { SgInputText, SgWizard, SgWizardPage } from "@seedgrid/fe-components";
|
|
485
|
-
|
|
486
|
-
/**
|
|
487
|
-
* `nextDisabled` — bloqueio JA conhecido.
|
|
488
|
-
*
|
|
489
|
-
* `onBeforeNext` e `validateStep` so agem no clique: o botao continua com aparencia de habilitado
|
|
490
|
-
* e, quando eles recusam, nada acontece na tela. Quando o consumidor JA sabe que a etapa nao pode
|
|
491
|
-
* avancar — tipicamente o resultado de uma checagem assincrona que ja terminou —, `nextDisabled`
|
|
492
|
-
* deixa isso visivel: botao opaco, cursor de bloqueio e stepper sem oferecer as proximas etapas.
|
|
493
|
-
*/
|
|
494
|
-
export default function Example() {
|
|
495
|
-
const [codigo, setCodigo] = React.useState("");
|
|
496
|
-
const [checando, setChecando] = React.useState(false);
|
|
497
|
-
const [jaUsado, setJaUsado] = React.useState(false);
|
|
498
|
-
|
|
499
|
-
// Simula a consulta ao servidor ao sair do campo.
|
|
500
|
-
async function verificarCodigo() {
|
|
501
|
-
if (!codigo.trim()) return;
|
|
502
|
-
setChecando(true);
|
|
503
|
-
await new Promise((resolve) => setTimeout(resolve, 600));
|
|
504
|
-
setJaUsado(codigo.trim().toUpperCase() === "SG-123");
|
|
505
|
-
setChecando(false);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
return (
|
|
509
|
-
<SgWizard
|
|
510
|
-
// Durante a consulta o wizard ja desabilita sozinho enquanto aguarda onBeforeNext; aqui o
|
|
511
|
-
// bloqueio PERMANECE depois que a resposta chegou.
|
|
512
|
-
nextDisabled={jaUsado}
|
|
513
|
-
onFinish={() => undefined}
|
|
514
|
-
>
|
|
515
|
-
<SgWizardPage title="Convite">
|
|
516
|
-
<SgInputText
|
|
517
|
-
id="wizard-codigo-convite"
|
|
518
|
-
label="Codigo do convite"
|
|
519
|
-
error={jaUsado ? "Este codigo ja foi utilizado." : undefined}
|
|
520
|
-
onChange={(value) => {
|
|
521
|
-
setCodigo(value);
|
|
522
|
-
setJaUsado(false); // digitou de novo: reabre o avanco ate a proxima checagem
|
|
523
|
-
}}
|
|
524
|
-
onExit={() => void verificarCodigo()}
|
|
525
|
-
/>
|
|
526
|
-
<p className="mt-2 text-sm text-muted-foreground">
|
|
527
|
-
{checando
|
|
528
|
-
? "Verificando o codigo..."
|
|
529
|
-
: 'Digite "SG-123" e saia do campo: o botao Proximo fica desabilitado.'}
|
|
530
|
-
</p>
|
|
531
|
-
</SgWizardPage>
|
|
532
|
-
<SgWizardPage title="Conclusao">
|
|
533
|
-
<div className="rounded border border-border bg-foreground/5 p-4">
|
|
534
|
-
<div className="text-sm font-semibold">Codigo aceito</div>
|
|
535
|
-
<p className="mt-1 text-sm text-muted-foreground">
|
|
536
|
-
So se chega aqui com um codigo que a checagem liberou.
|
|
537
|
-
</p>
|
|
538
|
-
</div>
|
|
539
|
-
</SgWizardPage>
|
|
540
|
-
</SgWizard>
|
|
541
|
-
);
|
|
483
|
+
import React from "react";
|
|
484
|
+
import { SgInputText, SgWizard, SgWizardPage } from "@seedgrid/fe-components";
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* `nextDisabled` — bloqueio JA conhecido.
|
|
488
|
+
*
|
|
489
|
+
* `onBeforeNext` e `validateStep` so agem no clique: o botao continua com aparencia de habilitado
|
|
490
|
+
* e, quando eles recusam, nada acontece na tela. Quando o consumidor JA sabe que a etapa nao pode
|
|
491
|
+
* avancar — tipicamente o resultado de uma checagem assincrona que ja terminou —, `nextDisabled`
|
|
492
|
+
* deixa isso visivel: botao opaco, cursor de bloqueio e stepper sem oferecer as proximas etapas.
|
|
493
|
+
*/
|
|
494
|
+
export default function Example() {
|
|
495
|
+
const [codigo, setCodigo] = React.useState("");
|
|
496
|
+
const [checando, setChecando] = React.useState(false);
|
|
497
|
+
const [jaUsado, setJaUsado] = React.useState(false);
|
|
498
|
+
|
|
499
|
+
// Simula a consulta ao servidor ao sair do campo.
|
|
500
|
+
async function verificarCodigo() {
|
|
501
|
+
if (!codigo.trim()) return;
|
|
502
|
+
setChecando(true);
|
|
503
|
+
await new Promise((resolve) => setTimeout(resolve, 600));
|
|
504
|
+
setJaUsado(codigo.trim().toUpperCase() === "SG-123");
|
|
505
|
+
setChecando(false);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
return (
|
|
509
|
+
<SgWizard
|
|
510
|
+
// Durante a consulta o wizard ja desabilita sozinho enquanto aguarda onBeforeNext; aqui o
|
|
511
|
+
// bloqueio PERMANECE depois que a resposta chegou.
|
|
512
|
+
nextDisabled={jaUsado}
|
|
513
|
+
onFinish={() => undefined}
|
|
514
|
+
>
|
|
515
|
+
<SgWizardPage title="Convite">
|
|
516
|
+
<SgInputText
|
|
517
|
+
id="wizard-codigo-convite"
|
|
518
|
+
label="Codigo do convite"
|
|
519
|
+
error={jaUsado ? "Este codigo ja foi utilizado." : undefined}
|
|
520
|
+
onChange={(value) => {
|
|
521
|
+
setCodigo(value);
|
|
522
|
+
setJaUsado(false); // digitou de novo: reabre o avanco ate a proxima checagem
|
|
523
|
+
}}
|
|
524
|
+
onExit={() => void verificarCodigo()}
|
|
525
|
+
/>
|
|
526
|
+
<p className="mt-2 text-sm text-muted-foreground">
|
|
527
|
+
{checando
|
|
528
|
+
? "Verificando o codigo..."
|
|
529
|
+
: 'Digite "SG-123" e saia do campo: o botao Proximo fica desabilitado.'}
|
|
530
|
+
</p>
|
|
531
|
+
</SgWizardPage>
|
|
532
|
+
<SgWizardPage title="Conclusao">
|
|
533
|
+
<div className="rounded border border-border bg-foreground/5 p-4">
|
|
534
|
+
<div className="text-sm font-semibold">Codigo aceito</div>
|
|
535
|
+
<p className="mt-1 text-sm text-muted-foreground">
|
|
536
|
+
So se chega aqui com um codigo que a checagem liberou.
|
|
537
|
+
</p>
|
|
538
|
+
</div>
|
|
539
|
+
</SgWizardPage>
|
|
540
|
+
</SgWizard>
|
|
541
|
+
);
|
|
542
542
|
}
|
|
543
543
|
```
|
|
544
544
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: arquiteto
|
|
3
3
|
description: Porta de entrada de toda tarefa não trivial - classifica (feature, bug, hotfix, refactor), faz as perguntas que tirem as dúvidas e entrega o plano com tarefas, paralelismo e critérios de aceite.
|
|
4
4
|
capabilities: [read-files]
|
|
5
|
-
preferred_skills: [
|
|
5
|
+
preferred_skills: [sg-plan-change]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Arquiteto
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: backend-java
|
|
3
3
|
description: Implementa APIs Java, regras de negócio e persistência quando a tarefa altera o backend.
|
|
4
4
|
capabilities: [read-files, edit-files, run-checks]
|
|
5
|
-
preferred_skills: [
|
|
5
|
+
preferred_skills: [sg-crud-back, sg-validate-change]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Backend Java
|
|
@@ -26,7 +26,7 @@ Implementar mudanças no backend Java com código coerente com o projeto, testes
|
|
|
26
26
|
|
|
27
27
|
- Seguir `.ai/rules/backend-java-seedgrid.md` (estrutura, injeção por construtor, `BaseEntity`/`publicId`, Flyway, testes).
|
|
28
28
|
- **Usar as extensions SeedGrid para acelerar**: antes de escrever autenticação, permissões, auditoria, notificação, billing, cache, storage ou criptografia, consulte o índice da KB (`.ai/brain/SeedGrid/Extensions/Indice.md`) e use a extension que já cobre a necessidade, configurada pelas propriedades documentadas. Só escreva código próprio quando nenhuma cobrir, e diga isso na entrega.
|
|
29
|
-
- **LGPD**: dado pessoal (CPF, CNPJ de pessoa física, telefone, e-mail, endereço, data de nascimento) segue o `seedgrid-privacy`: `@EncryptedField` (com `searchField` quando precisar buscar) e mascaramento nas saídas de auditoria, log e API (`@PersonalData`/`@MaskRule`). Cadastro novo usa a skill `
|
|
29
|
+
- **LGPD**: dado pessoal (CPF, CNPJ de pessoa física, telefone, e-mail, endereço, data de nascimento) segue o `seedgrid-privacy`: `@EncryptedField` (com `searchField` quando precisar buscar) e mascaramento nas saídas de auditoria, log e API (`@PersonalData`/`@MaskRule`). Cadastro novo usa a skill `sg-crud-back`.
|
|
30
30
|
- **Auditoria**: operações de criação, alteração e exclusão de entidades de negócio usam `@Audit` (extension `audit`).
|
|
31
31
|
- Seguir o framework, a estrutura de pacotes e as convenções já usadas no projeto; descobri-las lendo o código.
|
|
32
32
|
- Manter compatibilidade de contratos públicos, salvo decisão explícita em contrário.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: backend-rust
|
|
3
3
|
description: Implementa APIs, regras de negócio e persistência em Rust com os crates SeedGrid (portes das extensions Java) quando a tarefa altera um backend Rust.
|
|
4
4
|
capabilities: [read-files, edit-files, run-checks]
|
|
5
|
-
preferred_skills: [
|
|
5
|
+
preferred_skills: [sg-validate-change]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Backend Rust
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: frontend-react
|
|
3
3
|
description: Implementa telas, componentes e integração com APIs em React quando a tarefa altera o frontend.
|
|
4
4
|
capabilities: [read-files, edit-files, run-checks]
|
|
5
|
-
preferred_skills: [
|
|
5
|
+
preferred_skills: [sg-crud-front, sg-new-screen, sg-validate-change]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Frontend React
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: qa
|
|
3
3
|
description: Garante a qualidade da entrega - cria e executa testes (unitários, integração, regressão) a partir dos critérios de aceite e valida cada critério com evidência executada.
|
|
4
4
|
capabilities: [read-files, edit-files, run-checks]
|
|
5
|
-
preferred_skills: [
|
|
5
|
+
preferred_skills: [sg-validate-change]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# QA
|
|
@@ -31,7 +31,7 @@ Provar, com testes escritos e executados, que a mudança atende aos critérios d
|
|
|
31
31
|
- Executar build, lint, testes afetados e a suíte relevante; exercitar o comportamento alterado quando possível.
|
|
32
32
|
- Registrar comandos, resultados e evidências no formato do relatório de validação (`.ai/templates/relatorio-validacao.md`).
|
|
33
33
|
- Diferenciar "passou", "falhou" e "não executado (motivo)". Teste instável é repetido uma vez e relatado, nunca ocultado.
|
|
34
|
-
- Conferir que o código segue o padrão SeedGrid quando a tarefa pedir (skill `
|
|
34
|
+
- Conferir que o código segue o padrão SeedGrid quando a tarefa pedir (skill `sg-review`).
|
|
35
35
|
|
|
36
36
|
## Limites
|
|
37
37
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: revisor
|
|
3
3
|
description: Revisa mudanças de código procurando defeitos, riscos de segurança e desvios das convenções antes da entrega.
|
|
4
4
|
capabilities: [read-files, run-checks]
|
|
5
|
-
preferred_skills: [
|
|
5
|
+
preferred_skills: [sg-code-review, sg-review]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Revisor
|
|
@@ -28,7 +28,7 @@ Encontrar problemas reais na mudança antes que ela seja entregue, com achados v
|
|
|
28
28
|
- Procurar defeitos de lógica, casos de borda, tratamento de erro, segurança, concorrência, compatibilidade e testes ausentes.
|
|
29
29
|
- Classificar cada achado (bloqueante, importante, sugestão) com arquivo, linha e cenário concreto de falha.
|
|
30
30
|
- Descartar achados que não consegue sustentar com um cenário concreto.
|
|
31
|
-
- Conferir o padrão SeedGrid do que foi alterado (skill `
|
|
31
|
+
- Conferir o padrão SeedGrid do que foi alterado (skill `sg-review`): componentes e regras `FE-nn`, `BE-nn`.
|
|
32
32
|
|
|
33
33
|
## Limites
|
|
34
34
|
|
|
@@ -69,10 +69,10 @@ flowchart TD
|
|
|
69
69
|
|
|
70
70
|
## Manutenção (chore)
|
|
71
71
|
|
|
72
|
-
Bump de versão do projeto, atualização de configuração e tarefas parecidas vão direto para a skill adequada (por exemplo `
|
|
72
|
+
Bump de versão do projeto, atualização de configuração e tarefas parecidas vão direto para a skill adequada (por exemplo `sg-bump`), sem plano; o `qa` confere build e testes ao final.
|
|
73
73
|
|
|
74
74
|
## Skills que os papéis usam
|
|
75
75
|
|
|
76
|
-
- `
|
|
77
|
-
- `
|
|
76
|
+
- `sg-plan-change` (arquiteto), `sg-validate-change` (qa), `sg-code-review` e `sg-review` (revisor).
|
|
77
|
+
- `sg-crud-back` (backend-java), `sg-crud-front` e `sg-new-screen` (frontend-react), `sg-bump` (versão do projeto).
|
|
78
78
|
- A lista completa, com o que cada skill faz, está em `.ai/skills/index.md`.
|
|
@@ -3,7 +3,7 @@ description: "Padrões obrigatórios do back-end Java SeedGrid: estrutura de pas
|
|
|
3
3
|
---
|
|
4
4
|
# Padrões do back-end Java SeedGrid
|
|
5
5
|
|
|
6
|
-
Regras **obrigatórias** para novos projetos e bibliotecas SeedGrid. Cada regra tem um id (`BE-nn`) para citar em revisões (`
|
|
6
|
+
Regras **obrigatórias** para novos projetos e bibliotecas SeedGrid. Cada regra tem um id (`BE-nn`) para citar em revisões (`sg-review`). Para as extensions existentes (propriedades, enums, exemplos), consulte a KB: comece por `.ai/brain/SeedGrid/Extensions/Indice.md`.
|
|
7
7
|
|
|
8
8
|
## Estrutura e nomes
|
|
9
9
|
|
|
@@ -47,7 +47,7 @@ Regras **obrigatórias** para novos projetos e bibliotecas SeedGrid. Cada regra
|
|
|
47
47
|
- **BE-63.** Dado pessoal **não** vai em claro para auditoria, log, exportação ou resposta de erro: use `@PersonalData`/`@MaskRule` (e `remove = true` para senha e segredos).
|
|
48
48
|
- **BE-64.** Criação, alteração e exclusão de entidades de negócio são auditadas com `@Audit` (`entityFqcn`, `operation`, `description`) no método de serviço, dentro de `@Transactional`.
|
|
49
49
|
- **BE-65.** Endpoints protegidos com as anotações de segurança do Quarkus (`@Authenticated`, `@RolesAllowed`, `@PermissionsAllowed`) e permissões registradas conforme a extension `security`; a UI esconder um botão não substitui a checagem no back.
|
|
50
|
-
- **BE-66.** Cadastros novos seguem a skill `
|
|
50
|
+
- **BE-66.** Cadastros novos seguem a skill `sg-crud-back`.
|
|
51
51
|
|
|
52
52
|
## Ao terminar
|
|
53
53
|
|
|
@@ -36,4 +36,4 @@ Se o projeto exigir um fluxo obrigatório (por exemplo, revisão antes de todo c
|
|
|
36
36
|
|
|
37
37
|
## Artefatos
|
|
38
38
|
|
|
39
|
-
Os templates em `.ai/templates/` são modelos distribuídos pelo toolkit.
|
|
39
|
+
Os templates em `.ai/templates/` são modelos distribuídos pelo toolkit. Planos, handoffs, decisões, especificações e relatórios produzidos em tarefas reais são salvos em `.ai/docs/<tipo>/`, conforme [documentos](documentos.md), nunca dentro de `.ai/templates/`, `.ai/agents/` ou `.ai/rules/`, que são gerenciados e podem ser atualizados.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Onde salvar os documentos que a IA gera (planos, handoff, decisões, relatórios, especificações): sempre em .ai/docs/<tipo>/. Leia antes de criar qualquer arquivo .md de trabalho."
|
|
3
|
+
---
|
|
4
|
+
# Documentos gerados pela IA
|
|
5
|
+
|
|
6
|
+
Todo documento de trabalho que a IA produzir (plano, handoff, decisão, especificação, relatório, análise, anotações de sessão) é salvo em **`.ai/docs/<tipo>/`**, nunca na raiz do projeto, em `docs/` do projeto ou dentro de `.ai/rules/`, `.ai/agents/`, `.ai/templates/` e `.ai/skills/`, que o toolkit gerencia e reescreve no `update`.
|
|
7
|
+
|
|
8
|
+
## Pastas por tipo
|
|
9
|
+
|
|
10
|
+
| Tipo | Pasta | Quando |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| Plano | `.ai/docs/plans/` | Plano de uma mudança, aprovado ou não, antes de implementar |
|
|
13
|
+
| Handoff | `.ai/docs/handoff/` | Estado e próximos passos para outra sessão, papel ou pessoa continuar |
|
|
14
|
+
| Decisão | `.ai/docs/decisions/` | Decisão de arquitetura e o porquê (modelo: `decisao-arquitetura.md`) |
|
|
15
|
+
| Especificação | `.ai/docs/specs/` | Especificação de tarefa (modelo: `especificacao-tarefa.md`) |
|
|
16
|
+
| Validação | `.ai/docs/reports/` | Relatórios de validação, revisão e testes (modelo: `relatorio-validacao.md`) |
|
|
17
|
+
| Outros | `.ai/docs/<assunto>/` | Qualquer outro documento; crie a pasta com um nome curto no plural |
|
|
18
|
+
|
|
19
|
+
## Convenções
|
|
20
|
+
|
|
21
|
+
- Crie a pasta quando precisar. O toolkit não a cria nem a altera: o conteúdo é do projeto e sobrevive ao `update` e ao `remove`.
|
|
22
|
+
- Nome do arquivo: `AAAA-MM-DD-assunto-curto.md` (minúsculas, hífens, sem acentos), por exemplo `2026-10-15-crud-clientes.md`.
|
|
23
|
+
- Comece com um título e uma linha de contexto (tarefa, autor/papel, data). Não grave segredos, tokens nem dados pessoais.
|
|
24
|
+
- Antes de criar, veja se já existe documento do mesmo assunto na pasta e atualize-o em vez de duplicar.
|
|
25
|
+
- Ao citar um documento em outro, use caminho relativo.
|
|
26
|
+
- Versionar ou não é decisão do projeto: se o time não quiser versionar, ele ignora `.ai/docs/` no Git.
|
|
@@ -3,7 +3,7 @@ description: "Padrões obrigatórios do front-end SeedGrid: usar sempre os compo
|
|
|
3
3
|
---
|
|
4
4
|
# Padrões do front-end SeedGrid
|
|
5
5
|
|
|
6
|
-
Regras **obrigatórias** para telas React que usam `@seedgrid/fe-components`. Cada regra tem um id (`FE-nn`) para citar em revisões (`
|
|
6
|
+
Regras **obrigatórias** para telas React que usam `@seedgrid/fe-components`. Cada regra tem um id (`FE-nn`) para citar em revisões (`sg-review`). Para detalhes de props e exemplos, consulte a KB: comece por `.ai/brain/SeedGrid/SeedGrid-components/Indice.md` e abra só a nota do grupo necessário.
|
|
7
7
|
|
|
8
8
|
## Componentes SeedGrid primeiro
|
|
9
9
|
|
|
@@ -44,4 +44,4 @@ Nunca use `SgInputText` (nem `<input>` com máscara própria) para um dado que t
|
|
|
44
44
|
|
|
45
45
|
## CRUDs
|
|
46
46
|
|
|
47
|
-
Telas de cadastro seguem a skill `
|
|
47
|
+
Telas de cadastro seguem a skill `sg-crud-front` (páginas `*_list` e `*_edit`, `publicId` nas URLs, proxy em `app/api/...`). Nunca exponha o `id` numérico ao navegador quando houver `publicId`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: sg-bump
|
|
3
3
|
description: Sobe a versão do projeto inteiro de uma vez, mantendo a mesma versão no back (pom.xml) e em todos os apps de front (package.json), e no que mais a exibir. Use quando pedirem bump, nova versão ou release do projeto (patch, minor, major ou uma versão informada). Não altera dependências.
|
|
4
4
|
metadata:
|
|
5
5
|
toolkit: seedgrid-ai
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: sg-code-review
|
|
3
3
|
description: Revisa um diff ou conjunto de arquivos alterados procurando defeitos de lógica, segurança, tratamento de erros, compatibilidade e testes ausentes, com achados priorizados e cenário concreto de falha. Use após implementar uma mudança substancial ou quando pedirem revisão de código.
|
|
4
4
|
metadata:
|
|
5
5
|
toolkit: seedgrid-ai
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: sg-crud-back
|
|
3
3
|
description: Cria ou padroniza um CRUD de back-end Java com as extensions SeedGrid - entidade com BaseEntity e publicId, migration Flyway, campos pessoais cifrados com seedgrid-privacy (LGPD), auditoria com @Audit, permissões, controller com RestControllerPath, DTOs e testes. Use ao criar uma entidade nova com API, ou ao adicionar campo pessoal, auditoria ou permissão a um cadastro existente.
|
|
4
4
|
metadata:
|
|
5
5
|
toolkit: seedgrid-ai
|
|
@@ -25,5 +25,5 @@ Monta um cadastro completo no padrão `.ai/rules/backend-java-seedgrid.md` (regr
|
|
|
25
25
|
## Cuidados
|
|
26
26
|
|
|
27
27
|
- Cifra de campo é opt-in: exige `seedgrid.privacy.encryption.enabled=true`, `seedgrid.privacy.crypto.key` e `seedgrid.privacy.search.key` fornecidos por variável de ambiente ou segredo, nunca versionados (BE-62). Sem a chave configurada, a leitura de valor já cifrado falha.
|
|
28
|
-
- A tela correspondente segue a skill `
|
|
29
|
-
- Para conferir o resultado contra o padrão, use `
|
|
28
|
+
- A tela correspondente segue a skill `sg-crud-front`; menu e permissão da tela, a `sg-new-screen`.
|
|
29
|
+
- Para conferir o resultado contra o padrão, use `sg-review back`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: sg-crud-front
|
|
3
3
|
description: Create or refactor SeedGrid CRUD flows in a Next.js app built on the SeedGrid boilerplate, using the project standard of separate `*_list` and `*_edit` pages, `publicId` routing, Next API proxy routes, and SeedGrid components. Use when you need to build or standardize an entity CRUD (users, roles, plans, API keys, audit screens, etc.) with `SgDatatable`, `SgInputTextSearch`, permissions, user-facing copy, and menu/breadcrumb integration.
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -13,7 +13,7 @@ Read the existing screens of the project before writing a new one and copy their
|
|
|
13
13
|
hooks, helpers). The names below (`Shell`, `useSavedToast`, `ListLoadError`, `adminProxyClient`, ...)
|
|
14
14
|
are the boilerplate's own; if the project names them differently, use the project's equivalents.
|
|
15
15
|
|
|
16
|
-
To register the menu item, icon and permission of a new screen, use the `
|
|
16
|
+
To register the menu item, icon and permission of a new screen, use the `sg-new-screen` skill.
|
|
17
17
|
|
|
18
18
|
## Workflow
|
|
19
19
|
|
package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/agents/openai.yaml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "SeedGrid CRUD"
|
|
3
3
|
short_description: "Padrao CRUD SeedGrid"
|
|
4
|
-
default_prompt: "Use $
|
|
4
|
+
default_prompt: "Use $sg-crud-front to create a SeedGrid CRUD with list/edit pages, publicId routing, and SgInputTextSearch."
|
package/seedgridKB/SeedGrid/Toolkit/skills/{seedgrid-crud → sg-crud-front}/references/routing.md
RENAMED
|
@@ -63,4 +63,4 @@ Resources behind a CRUD should:
|
|
|
63
63
|
- Menu item should point to the real list route
|
|
64
64
|
- Breadcrumb items must use valid `href` values
|
|
65
65
|
- Parent sections like `/security` must resolve to a real child route if there is no standalone page
|
|
66
|
-
- Registering the menu item, icon and permission is covered by the `
|
|
66
|
+
- Registering the menu item, icon and permission is covered by the `sg-new-screen` skill
|