@seedgrid/ai-toolkit 0.0.0-stage → 0.3.1
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/LICENSE +21 -0
- package/README.md +162 -2
- package/dist/adapters/claude.js +114 -0
- package/dist/adapters/codex.js +108 -0
- package/dist/adapters/index.js +17 -0
- package/dist/adapters/shared.js +142 -0
- package/dist/adapters/types.js +1 -0
- package/dist/cli.js +209 -0
- package/dist/commands/common.js +98 -0
- package/dist/commands/doctor.js +290 -0
- package/dist/commands/init.js +9 -0
- package/dist/commands/install.js +107 -0
- package/dist/commands/remove.js +54 -0
- package/dist/commands/review.js +127 -0
- package/dist/commands/selfinstall.js +63 -0
- package/dist/commands/status.js +73 -0
- package/dist/commands/update.js +8 -0
- package/dist/commands/validate.js +27 -0
- package/dist/core/apply.js +181 -0
- package/dist/core/blocks.js +64 -0
- package/dist/core/content.js +528 -0
- package/dist/core/env.js +40 -0
- package/dist/core/frontmatter.js +29 -0
- package/dist/core/hash.js +14 -0
- package/dist/core/inspect.js +51 -0
- package/dist/core/lock.js +124 -0
- package/dist/core/paths.js +65 -0
- package/dist/core/plan.js +242 -0
- package/dist/core/tools.js +62 -0
- package/dist/core/types.js +11 -0
- package/dist/core/updates.js +121 -0
- package/docs/arquitetura.md +80 -0
- package/docs/compatibilidade.md +50 -0
- package/docs/formato.md +155 -0
- package/docs/instalacao.md +105 -0
- package/docs/manutencao.md +115 -0
- package/package.json +43 -4
- package/seedgridKB/SeedGrid/Extensions/Catalogo-de-enums.md +161 -0
- package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -0
- package/seedgridKB/SeedGrid/Extensions/Indice.md +63 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Configuracao.md +124 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Enums.md +40 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Exemplos.md +97 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao-Rust.md +69 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao.md +88 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Enums.md +33 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Exemplos.md +121 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Rust.md +126 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Visao-geral.md +111 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Configuracao.md +127 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Enums.md +66 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Exemplos.md +151 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Rust.md +120 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Configuracao-Rust.md +136 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Configuracao.md +319 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Enums.md +131 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Exemplos.md +210 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Rust.md +135 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Visao-geral.md +150 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Configuracao-Rust.md +86 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Configuracao.md +243 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Enums.md +165 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Exemplos.md +205 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Rust.md +109 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Visao-geral.md +181 -0
- package/seedgridKB/SeedGrid/Extensions/broker/Configuracao-Rust.md +40 -0
- package/seedgridKB/SeedGrid/Extensions/broker/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Configuracao-Rust.md +73 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Configuracao.md +112 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Enums.md +36 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Exemplos.md +149 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Rust.md +81 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Visao-geral.md +90 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Configuracao.md +107 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Enums.md +105 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Exemplos.md +141 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Visao-geral.md +99 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Configuracao.md +122 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Enums.md +29 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Exemplos.md +82 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Visao-geral.md +118 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao-Rust.md +110 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao.md +157 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Exemplos.md +157 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Rust.md +70 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Visao-geral.md +88 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao-Rust.md +124 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao.md +195 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Enums.md +71 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Exemplos.md +149 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Rust.md +139 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Visao-geral.md +130 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Configuracao.md +141 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Enums.md +52 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Exemplos.md +141 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Visao-geral.md +113 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao-Rust.md +67 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao.md +94 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Enums.md +79 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Exemplos.md +172 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Rust.md +107 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Visao-geral.md +90 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao-Rust.md +72 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao.md +104 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Exemplos.md +104 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Rust.md +69 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Visao-geral.md +105 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao-Rust.md +68 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Enums.md +96 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Exemplos.md +229 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Rust.md +80 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -0
- package/seedgridKB/SeedGrid/Extensions/runtime/Configuracao-Rust.md +90 -0
- package/seedgridKB/SeedGrid/Extensions/runtime/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/security/Configuracao-Rust.md +327 -0
- package/seedgridKB/SeedGrid/Extensions/security/Configuracao.md +510 -0
- package/seedgridKB/SeedGrid/Extensions/security/Enums.md +95 -0
- package/seedgridKB/SeedGrid/Extensions/security/Exemplos.md +218 -0
- package/seedgridKB/SeedGrid/Extensions/security/Rust.md +203 -0
- package/seedgridKB/SeedGrid/Extensions/security/Visao-geral.md +131 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao-Rust.md +188 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao.md +345 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Enums.md +117 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Exemplos.md +205 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Rust.md +161 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Visao-geral.md +142 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao-Rust.md +75 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao.md +152 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Enums.md +198 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Exemplos.md +173 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Rust.md +83 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Visao-geral.md +99 -0
- package/seedgridKB/SeedGrid/Mapa-dos-repositorios.md +112 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/buttons/API.md +257 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Exemplos.md +307 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Visao-geral.md +51 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/datatable/API.md +174 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Exemplos.md +236 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Visao-geral.md +76 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/digits/API.md +339 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/digits/Exemplos.md +311 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/digits/Visao-geral.md +57 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +125 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/Exemplos.md +116 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/API.md +490 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Exemplos.md +544 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Visao-geral.md +69 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/API.md +113 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Exemplos.md +159 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Visao-geral.md +92 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/API.md +516 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Visao-geral.md +80 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/API.md +615 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Exemplos.md +384 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral.md +111 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/API.md +661 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Exemplos.md +312 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/layout/API.md +1090 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/layout/Exemplos.md +1172 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/layout/Visao-geral.md +98 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/Visao-geral.md +98 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-apikeys.md +118 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-audit.md +88 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-backup.md +131 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-platform.md +132 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-user.md +120 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-login-tenancy.md +119 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-security.md +427 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-self-enter.md +104 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-subdomain-tenancy.md +110 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/API.md +490 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +561 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Visao-geral.md +82 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/Visao-geral.md +68 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-commons.md +61 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-core.md +140 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-playground.md +112 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-theme.md +97 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/providers/API.md +177 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/providers/Exemplos.md +332 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/providers/Visao-geral.md +106 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/showcase.md +70 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +53 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +45 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +43 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +41 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +44 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +40 -0
- package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +78 -0
- package/seedgridKB/SeedGrid/Toolkit/references/glossario.md +15 -0
- package/seedgridKB/SeedGrid/Toolkit/references/modos-shared-native.md +27 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +54 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +39 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/formato-entrega.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +47 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/personalizacao-local.md +22 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/planejar-mudanca/SKILL.md +38 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/SKILL.md +33 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/references/checklist.md +25 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-backend-crud/SKILL.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-bump/SKILL.md +26 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/SKILL.md +221 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/agents/openai.yaml +4 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/checklist.md +31 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/patterns.md +185 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/routing.md +66 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/SKILL.md +56 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +4 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/checklist.md +32 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/steps.md +114 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-review/SKILL.md +61 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/validar-mudanca/SKILL.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/templates/decisao-arquitetura.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/templates/especificacao-tarefa.md +32 -0
- package/seedgridKB/SeedGrid/Toolkit/templates/relatorio-validacao.md +30 -0
- package/seedgridKB/SeedGrid/Versoes.md +64 -0
- package/seedgridKB/SeedGrid/Visao-geral.md +35 -0
- package/seedgridKB/manifest.json +142 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, component, fundamentos, api]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# API dos utilitários do `@seedgrid/fe-components`
|
|
10
|
+
|
|
11
|
+
Visão geral e instalação: [[SeedGrid/SeedGrid-components/fundamentos/Visao-geral|Fundamentos — visão geral]]. Exemplos: [[SeedGrid/SeedGrid-components/fundamentos/Exemplos|Exemplos]].
|
|
12
|
+
|
|
13
|
+
Todas as assinaturas abaixo foram lidas no código (**Confirmado**), salvo indicação. Caminhos relativos a `front/seedgrid-fe-components/packages/seedgrid-fe-components/`.
|
|
14
|
+
|
|
15
|
+
## Máscaras — `src/masks.ts`
|
|
16
|
+
|
|
17
|
+
Todas recebem `value: string` e retornam `string`. Exportadas no barrel (`src/index.ts`).
|
|
18
|
+
|
|
19
|
+
| Função | Comportamento |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `onlyDigits(value)` | remove tudo que não é dígito. **Também** existe uma `onlyDigits` em `validators.ts`; a exportada no barrel é a de `masks.ts`. |
|
|
22
|
+
| `maskCpf(value)` | até 11 dígitos → `000.000.000-00` progressivo. |
|
|
23
|
+
| `maskCnpj(value)` | até 14 caracteres **alfanuméricos** (maiúsculos) → `AA.AAA.AAA/AAAA-00` progressivo (suporta CNPJ alfanumérico). |
|
|
24
|
+
| `maskCpfCnpj(value)` | se houver letra → `maskCnpj`; senão ≤ 11 dígitos → `maskCpf`, acima → `maskCnpj`. |
|
|
25
|
+
| `maskCep(value)` | alias de `maskPostalCodeBR`. |
|
|
26
|
+
| `maskPostalCodeBR(value)` | 8 dígitos → `00000-000`. |
|
|
27
|
+
| `maskPostalCodePT(value)` | 7 dígitos → `0000-000`. |
|
|
28
|
+
| `maskPostalCodeUS(value)` | até 9 dígitos → `00000` ou `00000-0000`. |
|
|
29
|
+
| `maskPostalCodeES(value)` / `maskPostalCodeUY(value)` | 5 dígitos, sem separador. |
|
|
30
|
+
| `maskPostalCodeAR(value)` | até 8 alfanuméricos maiúsculos, sem separador (comentário: `A0000AAA` ou legado `0000`). |
|
|
31
|
+
| `maskPostalCodePY(value)` | 6 dígitos. |
|
|
32
|
+
| `maskPhone(value)` | até 11 dígitos → `(DD) 0000-0000` ou `(DD) 00000-0000` progressivo. |
|
|
33
|
+
|
|
34
|
+
## Validadores — `src/validators.ts`
|
|
35
|
+
|
|
36
|
+
| Export | Assinatura | Comportamento |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `isValidCpf` | `(value: string) => boolean` | 11 dígitos, rejeita todos iguais, valida os 2 DV (módulo 11). |
|
|
39
|
+
| `isValidCnpj` | `(value: string) => boolean` | 14 alfanuméricos; valor do caractere = ASCII − 48 (regra do CNPJ alfanumérico); DV devem ser numéricos; rejeita explicitamente `00000000000000`. |
|
|
40
|
+
| `isValidEmail` | `(value: string) => boolean` | regex simples `/.+@.+\..+/` após `trim`. |
|
|
41
|
+
| `isBlockedEmailDomain` | `(email: string, extra?: string[]) => boolean` | extrai o domínio após o último `@` e compara (minúsculas) com `getBlockedEmailDomains(extra)`. |
|
|
42
|
+
| `getBlockedEmailDomains` | `(extra?: string[]) => string[]` | união deduplicada e normalizada (trim + lowercase) de: `DEFAULT_BLOCKED_EMAIL_DOMAINS` + `globalThis.__seedgridBlockedEmailDomains` (se for array) + `extra`. |
|
|
43
|
+
| `DEFAULT_BLOCKED_EMAIL_DOMAINS` | `string[]` | 37 domínios de `src/blocked-email-domains.ts` (yopmail, guerrillamail, mailinator, 10minutemail, temp-mail etc.). |
|
|
44
|
+
| `validatePassword` | `(value, policy: PasswordPolicy = {}, i18n?) => string \| null` | `null` = válida; senão mensagem i18n `components.validators.password.invalid` com `{reasons}` concatenadas por `; `. Vazio → `components.validators.password.empty`. |
|
|
45
|
+
| `validateBirthDate` | `(value, policy: BirthDatePolicy, i18n?) => string \| null` | exige `minAge` ou `maxAge` (senão retorna mensagem `configMissing`); `minAge > maxAge` → `configRange`; data inválida → `invalidDate`; fora da faixa → `ageBetween`/`ageMin`/`ageMax`. Valor vazio → `null`. |
|
|
46
|
+
| `isDateAfter` | `(value: string, minDate?: string) => boolean` | `true` se algum argumento vazio; compara `getTime()` com `>=`. |
|
|
47
|
+
| `isDateBefore` | `(value: string, maxDate?: string) => boolean` | idem com `<=`. |
|
|
48
|
+
|
|
49
|
+
### `PasswordPolicy` (tipo exportado)
|
|
50
|
+
|
|
51
|
+
| Campo | Tipo | Padrão efetivo em `validatePassword` | Efeito |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| `minSize` | `number` | `8` (mínimo forçado `1`) | tamanho mínimo |
|
|
54
|
+
| `upper` | `boolean` | `true` | exige `[A-Z]` |
|
|
55
|
+
| `lower` | `boolean` | `true` | exige `[a-z]` |
|
|
56
|
+
| `number` | `boolean` | `true` | exige dígito |
|
|
57
|
+
| `special` | `boolean` | `true` | exige `[^A-Za-z0-9]` |
|
|
58
|
+
| `noRepeat` | `boolean` | `true` | proíbe sequência asc/desc de 3 (`abc`, `321`) e repetição (`aaa`, padrões tipo `a-a-a-a`) |
|
|
59
|
+
|
|
60
|
+
### `BirthDatePolicy`
|
|
61
|
+
`{ minAge?: number; maxAge?: number }` — ver `validateBirthDate`.
|
|
62
|
+
|
|
63
|
+
### Configuração em runtime de domínios bloqueados
|
|
64
|
+
Global `globalThis.__seedgridBlockedEmailDomains: string[]` (lido em `getRuntimeBlockedEmailDomains()`). Não há setter exportado — o app atribui diretamente (**Confirmado** pela leitura; nenhum setter encontrado). `SgInputEmail` usa `isBlockedEmailDomain(value, blockedEmailDomains)` quando `blockFakeMail` (padrão `true`) — `src/inputs/SgInputEmail.tsx`.
|
|
65
|
+
|
|
66
|
+
## React Hook Form — `src/rhf.ts` (interno, **não exportado** no barrel)
|
|
67
|
+
|
|
68
|
+
| Símbolo | Descrição |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `type RhfFieldProps` | `{ name?: string; control?: any; register?: UseFormRegister<any>; rules?: RegisterOptions<any>; error?: string }`. `any` proposital (comentário): permite passar `register`/`control` de `useForm<T>()` tipado sem conflito de contravariância. |
|
|
71
|
+
| `resolveFieldError(...errors)` | retorna a primeira string não vazia (após `trim`) ou `undefined`. |
|
|
72
|
+
| `mergeRequiredRule(rules, required, message)` | se `required` verdadeiro, injeta `required: message` em `rules` quando ausente/`false`; preserva um `required` já definido. |
|
|
73
|
+
|
|
74
|
+
Importado por 26 arquivos de `src/` (contagem `grep "../rhf"`), ex.: `SgAutocomplete`, `SgCheckboxGroup`, `SgCombobox`, `SgInputBirthDate`, `SgInputCNPJ`, `SgInputCPF`, `SgInputCurrency`, `SgInputDate`, `SgInputNumber`. Testes: `tests/rhf.test.mjs`, `tests/rhf-components-contract.test.mjs` (não executados).
|
|
75
|
+
|
|
76
|
+
## i18n — `src/i18n/index.ts` (`"use client"`)
|
|
77
|
+
|
|
78
|
+
Locais embutidos: `pt-BR`, `pt-PT`, `en-US` (alias `en`), `es`, `fr` — arquivos `.ts` com 214 chaves `components.*` cada (contagem por `grep`). Padrão global: `en-US`.
|
|
79
|
+
|
|
80
|
+
| Export no barrel | Nome interno | Assinatura / comportamento |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `SgComponentsI18nProvider` | idem | `({ locale?, messages?, children })` — contexto React; mescla mensagens embutidas do locale + `messages`. |
|
|
83
|
+
| `useComponentsI18n` | idem | `() => SgComponentsI18n` — contexto ou, sem provider, `getComponentsI18n()`. |
|
|
84
|
+
| `setComponentsI18n` | idem | `(input: SgComponentsI18nInput) => void` — grava em `globalThis.__seedgridComponentsI18n`; preserva mensagens customizadas anteriores se o locale não mudar. |
|
|
85
|
+
| `getComponentsI18n` | idem | `() => SgComponentsI18n` — global ou `DEFAULT_I18N` (`en-US`). |
|
|
86
|
+
| `resolveComponentsI18n` | idem | `(input?) => SgComponentsI18n` — mescla global + input. |
|
|
87
|
+
| `tComponents` | `t` | `(i18n, key, params?) => string` — busca em `i18n.messages` → embutido do locale → `en-US` → a própria chave; aplica `formatMessage`. |
|
|
88
|
+
| `formatComponentsMessage` | `formatMessage` | `(template, params?)` — substitui `{nome}`; placeholders sem valor permanecem. |
|
|
89
|
+
| `normalizeComponentsLocale` | idem | `undefined` → `en-US`; `en` → `en-US`; demais inalterados. |
|
|
90
|
+
| `getBuiltInComponentsMessages` | idem | catálogo embutido do locale (desconhecido → `en-US`). |
|
|
91
|
+
| `componentsMessagesPtBr`, `componentsMessagesPtPt`, `componentsMessagesEnUs`, `componentsMessagesEn`, `componentsMessagesEs`, `componentsMessagesFr` | — | catálogos brutos. |
|
|
92
|
+
|
|
93
|
+
Tipos: `SgComponentsLocale` (`"pt-BR" | "pt-PT" | "en-US" | "en" | "es" | "fr" | (string & {})`), `SgComponentsMessages` (`Record<string,string>`), `SgComponentsMessagesByNamespace`, `SgComponentsI18n` (`{locale, messages}`), `SgComponentsI18nInput` (`{locale?, messages?}`).
|
|
94
|
+
|
|
95
|
+
`messages` aceita forma plana **ou** por namespace: se o objeto tiver a chave `components`, só ela é usada (`resolveMessages`).
|
|
96
|
+
|
|
97
|
+
Metadados de IA: `src/i18n/SgComponentsI18nProvider.meta.ts` e `useComponentsI18n.meta.ts` entram no manifesto (`build-ai-manifest.mjs`).
|
|
98
|
+
|
|
99
|
+
## Estilos — `src/injectStyles.ts` e `src/generated/compiledStyles.ts`
|
|
100
|
+
|
|
101
|
+
| Símbolo | Exportado? | Descrição |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| `ensureSeedgridStylesInjected()` | não (chamado no topo de `src/index.ts`) | Injeta `<style id="seedgrid-fe-components-styles">` uma vez; no-op em SSR. |
|
|
104
|
+
| `SEEDGRID_COMPILED_CSS` | não | String gerada por `scripts/build-style.mjs` ("AUTO-GENERATED … Do not edit by hand"). Começa com `:root{--sg-mode:light;--sg-bg:…}` (tema padrão). |
|
|
105
|
+
|
|
106
|
+
## Metadados de IA — `src/ai-meta/`
|
|
107
|
+
|
|
108
|
+
| Arquivo | Conteúdo |
|
|
109
|
+
|---|---|
|
|
110
|
+
| `types.ts` | `SgMetaPropV0`, `SgMetaExampleV0`, `SgMetaV0` (`version "0.1"`, `componentId`, `package "@seedgrid/fe-components"`, `exportName`, `slug`, `category` ∈ input/action/layout/feedback/navigation/data/provider/hook/gadget, `props`, `examples`, `showcase{route,hasPlayground,hasPropsTable}`, `sdui{rendererType,…}`) e `SgAiHintsV0` (`preferredUseCases`, `avoidUseCases`, `synonyms`, `rankingSignals`…). |
|
|
111
|
+
| `generated-props.json` | `{ [exportName]: [{name,type,required,description}] }` gerado por `scripts/extract-props.mjs` (~186 KB). |
|
|
112
|
+
|
|
113
|
+
O manifesto final `dist/ai/seedgrid-components.manifest.json` é servido pelo showcase em `GET /api/ai-manifest` e consumido pelo `seedgrid-components-mcp`.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, component, fundamentos, exemplos]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components; front/seedgrid-fe-components/apps/showcase/src/app/samples
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Exemplos — fundamentos do `@seedgrid/fe-components`
|
|
10
|
+
|
|
11
|
+
Referência: [[SeedGrid/SeedGrid-components/fundamentos/API|API dos utilitários]] · [[SeedGrid/SeedGrid-components/fundamentos/Visao-geral|Visão geral]].
|
|
12
|
+
|
|
13
|
+
Cada exemplo indica a fonte. Os marcados "montado a partir da API" usam apenas assinaturas confirmadas no código, mas não existem literalmente no repositório.
|
|
14
|
+
|
|
15
|
+
## 1. Instalação e estilos
|
|
16
|
+
|
|
17
|
+
Fonte: `packages/seedgrid-fe-components/README.md`.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add @seedgrid/fe-components @seedgrid/fe-theme react-hook-form lucide-react
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
// Opcional: CSS estático em vez da injeção automática via JS
|
|
25
|
+
import "@seedgrid/fe-components/style.css";
|
|
26
|
+
import { SgInputText } from "@seedgrid/fe-components";
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 2. Tema no layout raiz (Next.js App Router)
|
|
30
|
+
|
|
31
|
+
Fonte: `apps/showcase/src/app/layout.tsx` (trecho).
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { SeedThemeProvider } from "@seedgrid/fe-theme";
|
|
35
|
+
|
|
36
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
37
|
+
return (
|
|
38
|
+
<html lang="pt-BR" suppressHydrationWarning>
|
|
39
|
+
<body className="bg-[rgb(var(--sg-bg))] text-[rgb(var(--sg-text))]">
|
|
40
|
+
<SeedThemeProvider
|
|
41
|
+
initialTheme={{ seed: "#16803D", mode: "auto", radius: 8, persistMode: true }}
|
|
42
|
+
applyTo="html"
|
|
43
|
+
>
|
|
44
|
+
{children}
|
|
45
|
+
</SeedThemeProvider>
|
|
46
|
+
</body>
|
|
47
|
+
</html>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`suppressHydrationWarning` é usado porque o tema `auto`/persistido é resolvido no client (comentário no arquivo).
|
|
53
|
+
|
|
54
|
+
## 3. i18n global (fora do React)
|
|
55
|
+
|
|
56
|
+
Fonte: `apps/showcase/src/app/samples/set-components-i18n.tsx.sample`.
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
import { setComponentsI18n } from "@seedgrid/fe-components";
|
|
60
|
+
|
|
61
|
+
setComponentsI18n({
|
|
62
|
+
locale: "en-US",
|
|
63
|
+
messages: {
|
|
64
|
+
"components.inputs.required": "Required field.",
|
|
65
|
+
"components.password.common": "Password is too common."
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 4. i18n por provider
|
|
71
|
+
|
|
72
|
+
Fonte: `apps/showcase/src/app/samples/i18n-provider-root-layout.tsx.sample`.
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
import { SgComponentsI18nProvider } from "@seedgrid/fe-components";
|
|
76
|
+
|
|
77
|
+
const messagesEn = {
|
|
78
|
+
"components.inputs.required": "Required field.",
|
|
79
|
+
"components.inputs.email.invalid": "Invalid email."
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export default function RootLayout({ children }) {
|
|
83
|
+
return (
|
|
84
|
+
<html lang="en-US">
|
|
85
|
+
<body>
|
|
86
|
+
<SgComponentsI18nProvider locale="en-US" messages={messagesEn}>
|
|
87
|
+
{children}
|
|
88
|
+
</SgComponentsI18nProvider>
|
|
89
|
+
</body>
|
|
90
|
+
</html>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Para português: `locale="pt-BR"` já carrega o catálogo embutido; `messages` só sobrescreve chaves.
|
|
96
|
+
|
|
97
|
+
## 5. Formulário com React Hook Form
|
|
98
|
+
|
|
99
|
+
Fonte: `packages/seedgrid-fe-components/README.md` ("Formulario com React Hook Form").
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
"use client";
|
|
103
|
+
import { useForm } from "react-hook-form";
|
|
104
|
+
import { SgButton, SgInputEmail, SgInputText, SgStack } from "@seedgrid/fe-components";
|
|
105
|
+
|
|
106
|
+
type FormValues = { nome: string; email: string };
|
|
107
|
+
|
|
108
|
+
export default function ExampleForm() {
|
|
109
|
+
const { register, handleSubmit } = useForm<FormValues>({ defaultValues: { nome: "", email: "" } });
|
|
110
|
+
return (
|
|
111
|
+
<form onSubmit={handleSubmit((data) => console.log(data))}>
|
|
112
|
+
<SgStack gap={12}>
|
|
113
|
+
<SgInputText id="nome" name="nome" register={register} label="Nome" required requiredMessage="Informe o nome." />
|
|
114
|
+
<SgInputEmail id="email" name="email" register={register} label="Email" required />
|
|
115
|
+
<SgButton label="Salvar" type="submit" />
|
|
116
|
+
</SgStack>
|
|
117
|
+
</form>
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 6. Máscaras e validadores em código próprio
|
|
123
|
+
|
|
124
|
+
Montado a partir da API (`src/masks.ts`, `src/validators.ts`).
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import {
|
|
128
|
+
maskCpfCnpj, maskPhone, maskPostalCodeBR,
|
|
129
|
+
isValidCpf, isValidCnpj, validatePassword, validateBirthDate, isBlockedEmailDomain
|
|
130
|
+
} from "@seedgrid/fe-components";
|
|
131
|
+
|
|
132
|
+
maskCpfCnpj("12345678901"); // "123.456.789-01"
|
|
133
|
+
maskPhone("11987654321"); // "(11) 98765-4321"
|
|
134
|
+
maskPostalCodeBR("01001000"); // "01001-000"
|
|
135
|
+
|
|
136
|
+
isValidCpf("123.456.789-09"); // boolean (checa DV)
|
|
137
|
+
isValidCnpj(valorDigitado); // aceita CNPJ numérico ou alfanumérico; os 2 DV devem ser numéricos
|
|
138
|
+
|
|
139
|
+
// null = ok; string = mensagem i18n com os motivos
|
|
140
|
+
const erroSenha = validatePassword("abc", { minSize: 10, special: false });
|
|
141
|
+
const erroNascimento = validateBirthDate("2010-05-01", { minAge: 18 });
|
|
142
|
+
|
|
143
|
+
isBlockedEmailDomain("x@yopmail.com"); // true (lista padrão)
|
|
144
|
+
isBlockedEmailDomain("x@empresa.com", ["empresa.com"]); // true (lista extra)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 7. Domínios bloqueados em runtime (global)
|
|
148
|
+
|
|
149
|
+
Montado a partir de `getRuntimeBlockedEmailDomains()` em `src/validators.ts` — não há setter exportado; o app atribui a global.
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
(globalThis as { __seedgridBlockedEmailDomains?: string[] }).__seedgridBlockedEmailDomains = [
|
|
153
|
+
"dominio-descartavel.example"
|
|
154
|
+
];
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 8. Consumo do manifesto de IA
|
|
158
|
+
|
|
159
|
+
Fonte: `apps/showcase/src/app/api/ai-manifest/route.ts` — lê `packages/seedgrid-fe-components/dist/ai/seedgrid-components.manifest.json` e devolve em `GET /api/ai-manifest` (`cache-control: no-store`; 404 `{"error":"AI manifest not available"}` se ausente).
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, component, fundamentos]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Fundamentos do `@seedgrid/fe-components`
|
|
10
|
+
|
|
11
|
+
Esta nota cobre **o que não é componente `Sg*`** dentro do pacote `@seedgrid/fe-components`: instalação, montagem (peers, CSS, tema), `exports` do `package.json`, build, e os utilitários transversais (`masks`, `validators`, `rhf`, `i18n`, `injectStyles`, `blocked-email-domains`, `ai-meta`, `generated`).
|
|
12
|
+
|
|
13
|
+
- API detalhada: [[SeedGrid/SeedGrid-components/fundamentos/API|API dos utilitários]]
|
|
14
|
+
- Exemplos: [[SeedGrid/SeedGrid-components/fundamentos/Exemplos|Exemplos dos utilitários]]
|
|
15
|
+
- Pacotes irmãos: [[SeedGrid/SeedGrid-components/pacotes/Visao-geral|Pacotes do monorepo front]] · tema em [[SeedGrid/SeedGrid-components/pacotes/fe-theme|@seedgrid/fe-theme]]
|
|
16
|
+
- App de demonstração: [[SeedGrid/SeedGrid-components/showcase|Showcase]]
|
|
17
|
+
|
|
18
|
+
## Identificação do pacote
|
|
19
|
+
|
|
20
|
+
| Campo | Valor | Certeza |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| Nome | `@seedgrid/fe-components` | Confirmado (`package.json`) |
|
|
23
|
+
| Versão | `2026.7.1` | Confirmado |
|
|
24
|
+
| Licença | MIT | Confirmado |
|
|
25
|
+
| Módulo | ESM (`"type": "module"`), `main: dist/index.js`, `types: dist/index.d.ts` | Confirmado |
|
|
26
|
+
| `sideEffects` | `true` (o import do barrel injeta CSS) | Confirmado |
|
|
27
|
+
| `files` | `dist` | Confirmado |
|
|
28
|
+
|
|
29
|
+
### `exports` do `package.json`
|
|
30
|
+
|
|
31
|
+
| Subpath | Destino | Observação |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `.` | `./dist/index.js` (+ `./dist/index.d.ts`) | Barrel único com todos os componentes e utilitários. |
|
|
34
|
+
| `./style.css` | `./dist/style.css` | CSS estático pré-compilado (alternativa à injeção automática). |
|
|
35
|
+
|
|
36
|
+
**Confirmado**: não há subpaths por grupo (`/inputs`, `/i18n` etc.). `dist/sandbox.cjs` (gerado pelo `build:sandbox`) **não** está no mapa de `exports`; ele é usado pelo `SgPlayground` via arquivo virtual `/node_modules/@seedgrid/fe-components/dist/index.js` → `require("./sandbox.cjs")` (ver [[SeedGrid/SeedGrid-components/pacotes/fe-playground|@seedgrid/fe-playground]]).
|
|
37
|
+
|
|
38
|
+
## Dependências
|
|
39
|
+
|
|
40
|
+
| Tipo | Pacotes | Observação |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `dependencies` | `@pqina/flip ^1.8.4`, `qrcode.react ^4.2.0`, `@seedgrid/pulse-subscriber-react ^3.0.0` | flip → `SgFlipDigit`; QR → `SgQRCode`; Pulse → `SgRealtimeProvider` (Confirmado pelos comentários do `tsup.sandbox.config.ts`). |
|
|
43
|
+
| `peerDependencies` obrigatórios na prática | `react ^18.2.0 \|\| ^19.0.0`, `react-hook-form ^7.0.0`, `lucide-react ^0.468.0 \|\| ^1.0.0` | Todos declarados como peer (sem `peerDependenciesMeta`, portanto nenhum marcado como opcional). |
|
|
44
|
+
| `peerDependencies` TipTap | `@tiptap/core`, `@tiptap/pm`, `@tiptap/react`, `@tiptap/starter-kit`, `@tiptap/extension-*` (underline, link, image, text-align, text-style, color, highlight, subscript, superscript, font-family), todos `^2.9.1` | O README diz que só são necessários para `SgTextEditor`; o `package.json` não os marca como opcionais (**Inferência**: o gerenciador avisará peer ausente se não instalados). |
|
|
45
|
+
| `devDependencies` relevantes | `@seedgrid/fe-theme` (workspace), `tailwindcss ^3.4.10`, `tailwindcss-animate`, `postcss`, `autoprefixer`, `tsup ^8.4.0`, `jsdom` | Tailwind só é usado no build; consumidor não precisa de Tailwind. |
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Instalação e montagem
|
|
49
|
+
|
|
50
|
+
Fonte: `packages/seedgrid-fe-components/README.md` (seções "Instalacao" e "Uso rapido") e código citado.
|
|
51
|
+
|
|
52
|
+
1. Instalação recomendada (README): `pnpm add @seedgrid/fe-components @seedgrid/fe-theme react-hook-form lucide-react`. Para `SgTextEditor`, adicionar os peers TipTap. Para playground, `@seedgrid/fe-playground`.
|
|
53
|
+
2. **Estilos — três camadas** (Confirmado):
|
|
54
|
+
- **Injeção automática**: `src/index.ts` chama `ensureSeedgridStylesInjected()` no topo do barrel. A função cria `<style id="seedgrid-fe-components-styles">` em `document.head` com `SEEDGRID_COMPILED_CSS` (string gerada). É protegida contra SSR (`typeof document === "undefined"`) e contra dupla injeção (verifica o `id`). O comentário explica que é uma **chamada real** (não `import "./x"`) para não ser eliminada por bundlers.
|
|
55
|
+
- **CSS estático**: `import "@seedgrid/fe-components/style.css"` — mesmo CSS, útil para evitar *flash* antes da hidratação (README).
|
|
56
|
+
- **Tema em runtime (opcional)**: `SeedThemeProvider` de `@seedgrid/fe-theme` regrava as variáveis `--sg-*`. O CSS compilado já contém um bloco `:root{...}` com as variáveis do `defaultSeedTheme` (modo light), então os componentes ficam estilizados **sem provider** (Confirmado em `scripts/build-style.mjs` e no início de `src/generated/compiledStyles.ts`).
|
|
57
|
+
3. **i18n**: por padrão as mensagens dos componentes estão em `en-US` (`DEFAULT_I18N`). Para trocar: `SgComponentsI18nProvider` (contexto React) ou `setComponentsI18n` (global em `globalThis.__seedgridComponentsI18n`). Ver [[SeedGrid/SeedGrid-components/fundamentos/API|API › i18n]].
|
|
58
|
+
4. **React Hook Form**: inputs aceitam `register`/`control`/`rules`/`error` (tipo interno `RhfFieldProps`, em `src/rhf.ts`).
|
|
59
|
+
5. Next.js: o showcase usa `transpilePackages: ["@seedgrid/fe-components", "@seedgrid/fe-theme"]` em `apps/showcase/next.config.ts` (Confirmado). **Inferência**: não é obrigatório para consumidores do pacote publicado (o `dist` já é JS compilado), mas é o padrão usado no monorepo.
|
|
60
|
+
|
|
61
|
+
## Build (`scripts.build`)
|
|
62
|
+
|
|
63
|
+
Ordem exata (Confirmado em `package.json`):
|
|
64
|
+
|
|
65
|
+
| Passo | Comando | Saída |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| 1 | `pnpm run clean` | remove `dist/` |
|
|
68
|
+
| 2 | `node scripts/build-style.mjs` | roda Tailwind sobre `styles/tailwind.css` (content `./src/**/*.{ts,tsx}`) + bloco `:root` gerado com `generateThemeVars`/`generateComponentTokens` do `@seedgrid/fe-theme` (importa os `.js` do `dist` do tema por *deep import*); escreve `dist/style.css` **e** `src/generated/compiledStyles.ts` |
|
|
69
|
+
| 3 | `tsc -p tsconfig.json` | `dist/**` (JS + `.d.ts` + `declarationMap`) |
|
|
70
|
+
| 4 | `node scripts/extract-props.mjs` | `src/ai-meta/generated-props.json` — props extraídas dos tipos `<Export>Props` via TypeScript compiler API (ignora `control`, `register`, `rules`, `inputProps`, `className`, `labelClassName`, `style`, `ref`, `key`, `elevation`, `borderRadius`, `aria-*`, `data-*`) |
|
|
71
|
+
| 5 | `node scripts/build-ai-manifest.mjs` | `dist/ai/seedgrid-components.manifest.json` — une os `*.meta.ts` (curadoria) com `generated-props.json` |
|
|
72
|
+
| 6 | `node scripts/validate-example-refs.mjs` | falha o build se algum `examples[].file` do manifesto não existir (baseline em `scripts/example-refs-baseline.json`, declarado vazio no comentário) |
|
|
73
|
+
| 7 | `pnpm run build:sandbox` | `tsup` → `dist/sandbox.cjs` (CJS minificado, para Sandpack) |
|
|
74
|
+
|
|
75
|
+
**Atenção**: o passo 2 depende de `@seedgrid/fe-theme` já ter `dist/` (deep import de `node_modules/@seedgrid/fe-theme/dist/theme/*.js`). **Inferência**: no `turbo build` isso é garantido pelo `dependsOn: ["^build"]`.
|
|
76
|
+
|
|
77
|
+
Outros scripts: `dev` (build-style + `tsc --watch`), `typecheck`, `test` (faz `build` e roda 27 arquivos `node --test tests/*.test.mjs`, incluindo `i18n.test.mjs`, `rhf.test.mjs`, `rhf-components-contract.test.mjs`, `i18n-components-contract.test.mjs`, `utils.test.mjs`, `ai-manifest-props-contract.test.mjs`). Testes **não executados** nesta análise.
|
|
78
|
+
|
|
79
|
+
`tsup.sandbox.config.ts` (Confirmado): entry `src/index.ts`; externos `react`, `react-dom`, `lucide-react`, `qrcode`, todos os `@tiptap/*`, `@codesandbox/sandpack-react`; embutidos (`noExternal`) `react-hook-form`, `qrcode.react`, `@pqina/flip`, `@seedgrid/pulse-subscriber-react`; define `process.env.NODE_ENV="production"`.
|
|
80
|
+
|
|
81
|
+
## Mapa dos utilitários
|
|
82
|
+
|
|
83
|
+
| Arquivo | Exportado no barrel? | Papel |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| `src/masks.ts` | sim | Máscaras de CPF, CNPJ (inclusive alfanumérico), CPF/CNPJ, CEP e códigos postais BR/PT/US/ES/UY/AR/PY, telefone BR. |
|
|
86
|
+
| `src/validators.ts` | sim | Validação CPF, CNPJ (alfanumérico), e-mail, domínios de e-mail descartáveis, senha (política), datas e data de nascimento (idade). |
|
|
87
|
+
| `src/blocked-email-domains.ts` | indireto (via `DEFAULT_BLOCKED_EMAIL_DOMAINS`) | Lista padrão de 37 domínios descartáveis. |
|
|
88
|
+
| `src/rhf.ts` | **não** | Tipo `RhfFieldProps` e helpers `resolveFieldError`, `mergeRequiredRule`, usados internamente pelos inputs. |
|
|
89
|
+
| `src/i18n/` | sim | Provider, hooks, `t`, catálogos `pt-BR`, `pt-PT`, `en-US`, `es`, `fr` (214 chaves `components.*` cada). |
|
|
90
|
+
| `src/injectStyles.ts` | **não** (executado no import) | Injeção do CSS compilado no `<head>`. |
|
|
91
|
+
| `src/generated/compiledStyles.ts` | **não** | Constante `SEEDGRID_COMPILED_CSS` (auto-gerada, ~67 KB). |
|
|
92
|
+
| `src/ai-meta/` | **não** | Tipos `SgMetaV0`/`SgAiHintsV0` dos `*.meta.ts` e `generated-props.json`; alimentam o manifesto de IA. |
|