@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,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, pacote]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages; front/seedgrid-fe-components/package.json; front/seedgrid-fe-components/pnpm-workspace.yaml; front/seedgrid-fe-components/turbo.json
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Pacotes do monorepo `seedgrid-fe-components`
|
|
10
|
+
|
|
11
|
+
Monorepo pnpm (`packageManager: pnpm@9.12.0`) + Turborepo. Workspaces (`pnpm-workspace.yaml`): `apps/*`, `packages/*`, `packages/modules/*`. Repositório declarado nos `package.json`: `github.com/SeedGrid/seedgrid-fe-components`.
|
|
12
|
+
|
|
13
|
+
## Pacotes de base (`packages/*`)
|
|
14
|
+
|
|
15
|
+
| Pacote | Versão | Papel | Nota |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
| `@seedgrid/fe-components` | 2026.7.1 | Biblioteca de componentes `Sg*` + utilitários (máscaras, validadores, i18n) | [[SeedGrid/SeedGrid-components/fundamentos/Visao-geral\|Fundamentos]] |
|
|
18
|
+
| `@seedgrid/fe-theme` | 0.3.0 | Tema por cor *seed*, tokens `--sg-*`, `SeedThemeProvider` | [[SeedGrid/SeedGrid-components/pacotes/fe-theme\|fe-theme]] |
|
|
19
|
+
| `@seedgrid/fe-core` | 2026.7.1 | Manifesto de módulo da CLI, registry, persistência, `createApiClient`, erros | [[SeedGrid/SeedGrid-components/pacotes/fe-core\|fe-core]] |
|
|
20
|
+
| `@seedgrid/fe-commons` | 0.2.0 | `createHttpClient`, `buscarCep`, `buscarCnpj` | [[SeedGrid/SeedGrid-components/pacotes/fe-commons\|fe-commons]] |
|
|
21
|
+
| `@seedgrid/fe-playground` | 0.1.0 | `SgPlayground` (Sandpack) | [[SeedGrid/SeedGrid-components/pacotes/fe-playground\|fe-playground]] |
|
|
22
|
+
|
|
23
|
+
Módulos de domínio (`packages/modules/*`, todos `@seedgrid/fe-<nome>`): ver [[SeedGrid/SeedGrid-components/modulos/Visao-geral|Módulos front]]. App de demonstração: [[SeedGrid/SeedGrid-components/showcase|Showcase]].
|
|
24
|
+
|
|
25
|
+
## Dependências entre pacotes (Confirmado nos `package.json`)
|
|
26
|
+
|
|
27
|
+
```mermaid
|
|
28
|
+
graph LR
|
|
29
|
+
theme["fe-theme"] -->|dependency| core["fe-core"]
|
|
30
|
+
commons["fe-commons"] -->|dependency (sem uso no src)| core
|
|
31
|
+
components["fe-components"] -.->|devDependency (build-style)| theme
|
|
32
|
+
playground["fe-playground"] -->|peer ^0.2.10| components
|
|
33
|
+
modules["fe-<módulo>"] -->|peer| core
|
|
34
|
+
modules -->|peer| security["fe-security"]
|
|
35
|
+
security -->|peer| components
|
|
36
|
+
security -->|peer| core
|
|
37
|
+
showcase["apps/showcase"] --> components
|
|
38
|
+
showcase --> theme
|
|
39
|
+
showcase --> playground
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `fe-components` **não** depende de `fe-core`.
|
|
43
|
+
- `fe-components` usa `fe-theme` só no build (`scripts/build-style.mjs` importa `generateThemeVars`/`generateComponentTokens` do `dist` do tema) para embutir o tema padrão no CSS.
|
|
44
|
+
|
|
45
|
+
## Padrões comuns
|
|
46
|
+
- Todos ESM (`"type": "module"`), compilados com `tsc` para `dist/` (fe-components também gera `dist/sandbox.cjs` com `tsup`).
|
|
47
|
+
- Cada pacote de base tem `scripts/build-ai-manifest.mjs` que gera `dist/ai/<pacote>.manifest.json` a partir dos `*.meta.ts` (metadados `SgMetaV0`/`SgAiHintsV0`).
|
|
48
|
+
- Versões: componentes e core seguem calendário (`2026.7.x`); theme/commons/playground ainda em `0.x`.
|
|
49
|
+
- `peerDependencies` de React: `^18.2.0 || ^19.0.0` em todos.
|
|
50
|
+
|
|
51
|
+
## Scripts da raiz (`package.json`, Confirmado; não executados)
|
|
52
|
+
|
|
53
|
+
| Script | Comando |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `dev` | `turbo dev` |
|
|
56
|
+
| `dev:components` | `pnpm -C packages/seedgrid-fe-components dev` |
|
|
57
|
+
| `dev:showcase` | `pnpm -C apps/showcase dev` |
|
|
58
|
+
| `dev:showcase:with-components` | `pnpm -r --parallel dev:components dev:showcase` |
|
|
59
|
+
| `build` / `typecheck` | `turbo build` / `turbo typecheck` |
|
|
60
|
+
|
|
61
|
+
`turbo.json`: `build` depende de `^build` (saídas `dist/**`, `.next/**`); `dev` sem cache, persistente, depende de `^build`.
|
|
62
|
+
|
|
63
|
+
## Publicação
|
|
64
|
+
Scripts na raiz: `publish-package.sh <dir> [patch|minor|major|prerelease|none]` (aceita `PUBLISH_VERSION`, voltado a npm Trusted Publishing/OIDC no GitHub Actions — texto de ajuda do script) e atalhos `publish-<pacote>.sh` para components, core, theme, commons, playground e cada módulo. Não executados.
|
|
65
|
+
|
|
66
|
+
## Compatibilidade
|
|
67
|
+
|
|
68
|
+
- O peer de `fe-playground` (`@seedgrid/fe-components ^0.2.10`) não aceita a versão atual 2026.7.1.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, pacote, fe-commons]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-commons
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# `@seedgrid/fe-commons`
|
|
10
|
+
|
|
11
|
+
Utilitários leves: cliente HTTP mínimo (`createHttpClient`), consulta de CEP (ViaCEP) e de CNPJ (Publica CNPJ).
|
|
12
|
+
|
|
13
|
+
Relacionados: [[SeedGrid/SeedGrid-components/pacotes/Visao-geral|Pacotes]] · cliente HTTP mais completo em [[SeedGrid/SeedGrid-components/pacotes/fe-core|@seedgrid/fe-core]] (`createApiClient`).
|
|
14
|
+
|
|
15
|
+
## Pacote
|
|
16
|
+
|
|
17
|
+
| Campo | Valor (Confirmado em `package.json`) |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Nome / versão | `@seedgrid/fe-commons` `0.2.0` |
|
|
20
|
+
| `exports` | só `.` |
|
|
21
|
+
| `dependencies` | `@seedgrid/fe-core` (`workspace:*`) — **nenhum import de `@seedgrid/fe-core` em `src/`** (grep) |
|
|
22
|
+
| `peerDependencies` | `react ^18.2.0 \|\| ^19.0.0` (o código não importa React) |
|
|
23
|
+
| Build | `tsc -p tsconfig.json && node scripts/build-ai-manifest.mjs` |
|
|
24
|
+
| Testes | nenhum |
|
|
25
|
+
|
|
26
|
+
## API (`src/index.ts`)
|
|
27
|
+
|
|
28
|
+
| Export | Tipo | Fonte | Comportamento |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| `createHttpClient(opts)` | função | `src/http/httpClient.ts` | retorna `{ request<T>(path, init?) }`; URL = `baseUrl + path` (concatenação simples); define `Content-Type: application/json` se ausente; `Authorization: Bearer` se `getAccessToken()` (síncrono) retornar valor; status não-OK → `Error("HTTP <status> <statusText>: <corpo>")`; 204 → `undefined` |
|
|
31
|
+
| `HttpClientOptions` | tipo | idem | `{ baseUrl: string; getAccessToken?: () => string \| null }` |
|
|
32
|
+
| `buscarCep(cep, options?)` | função async | `src/cep/viacep.ts` | normaliza para dígitos; ≠ 8 → `Error("CEP deve ter 8 dígitos.")`; `GET https://viacep.com.br/ws/<cep>/json/`; não-OK → `Error("Falha ao consultar CEP (<status>).")`; `erro: true` → `Error("CEP não encontrado.")` |
|
|
33
|
+
| `ViaCepResponse` | tipo | idem | `cep, logradouro, complemento, bairro, localidade, uf, ibge, gia, ddd, siafi, erro?` |
|
|
34
|
+
| `CepLookupOptions` | tipo | idem | `{ signal?: AbortSignal }` |
|
|
35
|
+
| `buscarCnpj(cnpj, options?)` | função async | `src/cnpj/publica.ts` | normaliza para dígitos; ≠ 14 → **lança** `Error("CNPJ deve ter 14 dígitos.")`; `GET https://publica.cnpj.ws/cnpj/<cnpj>`; não-OK **ou** erro de rede → `null` |
|
|
36
|
+
| `PublicaCnpjResponse` | tipo | idem | estrutura da API Publica (razão social, porte, natureza jurídica, sócios, simples, estabelecimento com endereço/atividades/inscrições estaduais) |
|
|
37
|
+
| `CnpjLookupOptions` | tipo | idem | `{ signal?: AbortSignal }` |
|
|
38
|
+
|
|
39
|
+
Metadados de IA: `src/cep/viacep.meta.ts`, `src/cnpj/publica.meta.ts`, `src/http/httpClient.meta.ts` (componentIds `hook.cep-lookup`, `hook.cnpj-lookup`, …).
|
|
40
|
+
|
|
41
|
+
## Pontos de atenção (Confirmado)
|
|
42
|
+
- `buscarCnpj` remove letras (`\D`), portanto **não suporta CNPJ alfanumérico**, ao contrário de `isValidCnpj`/`maskCnpj` do `@seedgrid/fe-components`.
|
|
43
|
+
- Serviços externos fixos (ViaCEP e publica.cnpj.ws) — não há configuração de URL nem variável de ambiente.
|
|
44
|
+
- O `aiHints` de `publica.meta.ts` diz "Returns null on network error or non-2xx" — coerente com o código; mas a entrada com tamanho inválido **lança** erro.
|
|
45
|
+
|
|
46
|
+
## Exemplo
|
|
47
|
+
Fonte: `packages/seedgrid-fe-commons/README.md`.
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { createHttpClient, buscarCep, buscarCnpj } from "@seedgrid/fe-commons";
|
|
51
|
+
|
|
52
|
+
const apiClient = createHttpClient({
|
|
53
|
+
baseUrl: "https://api.exemplo.com",
|
|
54
|
+
getAccessToken: () => localStorage.getItem("sg:session-token")
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const cep = await buscarCep("01001-000"); // cep.localidade, cep.uf
|
|
58
|
+
const empresa = await buscarCnpj("10404812000100"); // empresa?.razao_social
|
|
59
|
+
const dados = await apiClient.request("/v1/dashboard");
|
|
60
|
+
```
|
|
61
|
+
(Base URL substituída por placeholder.)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, pacote, fe-core]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-core
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# `@seedgrid/fe-core`
|
|
10
|
+
|
|
11
|
+
Infraestrutura comum dos pacotes front: contrato de manifesto de módulo para a CLI SeedGrid, registry de runtime, merge de i18n, estratégias de persistência, cliente HTTP (`createApiClient`) com refresh de token/retry, tratamento e extração de mensagens de erro (RFC 7807) e `useDebouncedValue`.
|
|
12
|
+
|
|
13
|
+
Relacionados: [[SeedGrid/SeedGrid-components/pacotes/Visao-geral|Pacotes]] · [[SeedGrid/SeedGrid-components/modulos/Visao-geral|Módulos front]] (usam `SeedGridCliModuleManifest`) · [[SeedGrid/SeedGrid-components/pacotes/fe-theme|@seedgrid/fe-theme]] (usa a persistência).
|
|
14
|
+
|
|
15
|
+
## Pacote
|
|
16
|
+
|
|
17
|
+
| Campo | Valor (Confirmado em `package.json`) |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Nome / versão | `@seedgrid/fe-core` `2026.7.1` |
|
|
20
|
+
| `exports` | só `.` (não há subpath `./server`; `src/server.ts` é reexportado pelo barrel) |
|
|
21
|
+
| `peerDependencies` | `react ^18.2.0 \|\| ^19.0.0` |
|
|
22
|
+
| `dependencies` | nenhuma |
|
|
23
|
+
| Build | `tsc -p tsconfig.json && node scripts/build-ai-manifest.mjs` |
|
|
24
|
+
| Testes | `pnpm run build && node --test tests/api-errors.test.mjs` (não executados) — cobre `extractApiErrorMessage`, `readApiErrorMessage`, `isApiClientErrorLike`, `messageForHttpStatus` |
|
|
25
|
+
|
|
26
|
+
## API (barrel `src/index.ts`)
|
|
27
|
+
|
|
28
|
+
### Módulos e registry
|
|
29
|
+
|
|
30
|
+
| Export | Tipo | Fonte | Descrição |
|
|
31
|
+
|---|---|---|---|
|
|
32
|
+
| `SeedGridCliModuleManifest` | interface | `src/cli-module-manifest.ts` | Contrato lido pela **CLI SeedGrid (Rust)** para plugar um pacote `@seedgrid/fe-*` em um app gerado. Campos: `id`, `requires?: string[]`, `variantGroup?`, `configKey`, `env?: string[]`, `provider?: ImportRef[]`, `navigation?: ImportRef`, `messages?: ImportRef`, `postAuthResolver?: ImportRef` |
|
|
33
|
+
| `SeedGridCliModuleImportRef` | interface | idem | `{ import: string; from: string }` |
|
|
34
|
+
| `SeedGridProvider`, `SeedGridNavItem`, `SeedGridRoute` | tipos | `src/module.ts` | elementos aceitos pelo `SeedGridRegistry` (`SeedGridNavItem`: `id, labelKey, href, icon?, requiresAuth?, order?`; `SeedGridRoute`: `id, path, requiresAuth?`) |
|
|
35
|
+
| `SeedGridRegistry` | **classe** | `src/registry.ts` | `addProvider`, `addNavItem`, `addRoute`, `getProviders()`, `getNavItems()` (ordenado por `order`, padrão 999), `getRoutes()` |
|
|
36
|
+
|
|
37
|
+
Segundo o comentário de `cli-module-manifest.ts` (Confirmado): cada pacote exporta um `module` em `src/module.ts`, e um *postbuild* serializa para `dist/module.json`, único artefato lido pela CLI (ADR `seedgrid-cli/docs/adr/0004-module-manifest-contract.md`, **não analisado**). `postAuthResolver` = função `(permissions: Iterable<string>) => Promise<string|null> | string | null` registrada no `navigation.ts` do fe-security.
|
|
38
|
+
|
|
39
|
+
### i18n
|
|
40
|
+
|
|
41
|
+
| Export | Descrição |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `SeedGridLocale` | `"pt-BR"` |
|
|
44
|
+
| `SeedGridMessages` | `Record<namespace, Record<chave, texto>>` |
|
|
45
|
+
| `mergeMessages(target, add)` | merge raso por namespace (o `add` vence) |
|
|
46
|
+
|
|
47
|
+
### Persistência — `src/persistence.ts`
|
|
48
|
+
|
|
49
|
+
| Export | Descrição |
|
|
50
|
+
|---|---|
|
|
51
|
+
| `PersistenceStrategy` | `{ load(key), save(key, state), clear(key) }` — síncrono ou `Promise` |
|
|
52
|
+
| `NamespaceProvider` | `{ getNamespace(): string \| null }` |
|
|
53
|
+
| `SgPersistenceRecordDTO` | `{ protocolVersion: 1, key, scope, stateVersion, updatedAt, state }` |
|
|
54
|
+
| `SgPersistenceMode` | `"strict" \| "fallback" \| "mirror"` |
|
|
55
|
+
| `SgPersistenceConfig` | `{ scope, mode, stateVersion }` |
|
|
56
|
+
| `SgEnvironmentValue` / `SgEnvironment` | `{ namespaceProvider, persistenceStrategy, persistence }` |
|
|
57
|
+
| `buildSgPersistenceKey(baseKey, namespace?, scope?)` | `null` se sem namespace; senão `sg:<ns>:<baseKey>` ou `sg:<ns>:<scope>:<baseKey>` |
|
|
58
|
+
| `createLocalStorageStrategy({prefix?})` | JSON em `localStorage`; erros silenciados (load → `null`) |
|
|
59
|
+
| `createApiPersistenceStrategy({baseUrl, fetcher?, scope, stateVersion})` | `GET {base}/sg/persistence?key=` (espera `{found, record}`), `POST {base}/sg/persistence` com `{record}`, `DELETE {base}/sg/persistence?key=`; lança `Error` em status não-OK |
|
|
60
|
+
| `createCompositePersistenceStrategy({mode, primary, secondary})` | `strict`: só primary; `fallback`: primary e, se lançar, secondary; `mirror`: load do primary (se `null`/erro → secondary), save/clear em ambos com `allSettled` |
|
|
61
|
+
|
|
62
|
+
**Lacuna**: o endpoint backend `/sg/persistence` não foi localizado nesta análise (lado Java/Rust fora do escopo F3).
|
|
63
|
+
|
|
64
|
+
### HTTP — `src/http/api-client.ts` (reexportado também por `src/server.ts`)
|
|
65
|
+
|
|
66
|
+
`createApiClient(config: ApiClientConfig)` → `{ request, get, post, put, patch, delete }` (todos `(path, options?) => Promise<T>`).
|
|
67
|
+
|
|
68
|
+
| `ApiClientConfig` | Tipo | Descrição |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `baseUrl` | `string` | absoluta, ou relativa (prefixada com `window.location.origin`; no servidor usa `http://localhost:3000` — Confirmado em `resolveAbsoluteBase`) |
|
|
71
|
+
| `defaultHeaders` | `HeadersInit` | — |
|
|
72
|
+
| `defaultCache` | `RequestCache` | — |
|
|
73
|
+
| `defaultNext` | `{ revalidate?, tags? }` | opções `next` do fetch do Next.js |
|
|
74
|
+
| `getAccessToken` | `() => Promise<string\|null>` | Bearer quando `requireAuth` (padrão `true`) |
|
|
75
|
+
| `refreshAccessToken` | `() => Promise<string\|null>` | chamado **uma vez** em 401; `null` → `onAuthFailure` + erro |
|
|
76
|
+
| `onAuthFailure` | `(ctx) => void` | em 401 sem refresh possível |
|
|
77
|
+
| `onException` | `(error, ctx) => void` | antes do `captureException` global |
|
|
78
|
+
|
|
79
|
+
| `ApiRequestOptions` (além de `RequestInit`) | Padrão | Descrição |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| `body` | — | `BodyInit` passa direto; objeto → `JSON.stringify` + `Content-Type: application/json` |
|
|
82
|
+
| `query` | — | `Record<string, primitivo\|null\|undefined>`; nulos ignorados |
|
|
83
|
+
| `parseAs` | `"json"` | `"json"` (204 → `null`), `"text"`, `"response"` |
|
|
84
|
+
| `requireAuth` | `true` | — |
|
|
85
|
+
| `retry` | sem retry | `true` → 2 tentativas extras, 250 ms × (n+1), em `[429, 502, 503, 504]` e em `TypeError` (rede); objeto `{attempts?, baseDelayMs?, retryOn?}` |
|
|
86
|
+
| `captureExceptions` | `true` | `false` → `suppressException` |
|
|
87
|
+
| `next` | `config.defaultNext` | — |
|
|
88
|
+
|
|
89
|
+
`ApiClientError` (`name`, `status`, `responseBody`) é lançado para status não-OK.
|
|
90
|
+
|
|
91
|
+
**Pontos de atenção (Confirmado na leitura)**:
|
|
92
|
+
- `request` faz `console.log` do comando **curl completo, URL, método, body e headers** (inclui `Authorization: Bearer …`) a cada chamada, e de `response`/erros (`console.log('aqui ', response)`, `'chegou no catch '`); `readResponseBody` também loga o corpo. Isso expõe tokens e dados em logs do navegador/servidor.
|
|
93
|
+
- **Inferência**: para erros HTTP, `config.onException` pode ser chamado duas vezes — uma no bloco `try` e outra no `catch` que recaptura o próprio `ApiClientError` lançado (o `captureException` global é idempotente via `Symbol.for("seedgrid.captured_exception")`, mas `onException` não).
|
|
94
|
+
|
|
95
|
+
### Tratamento de exceções — `src/http/api-exception-handler.ts`
|
|
96
|
+
|
|
97
|
+
`ExceptionArea` (`api|client|server`), `ExceptionContext` (`area, source, status, retryable, metadata`), `ExceptionReporter`, `registerExceptionReporter(fn) => unregister`, `captureException(error, ctx)` (dedup por símbolo, `console.error("[seedgrid]", …)`, chama reporters), `runGuarded(action, ctx)`, `suppressException(error)`, `normalizeError(unknown)`.
|
|
98
|
+
|
|
99
|
+
### Mensagens de erro — `src/http/api-errors.ts`
|
|
100
|
+
|
|
101
|
+
| Export | Descrição |
|
|
102
|
+
|---|---|
|
|
103
|
+
| `extractApiErrorMessage(error)` | busca em largura na cadeia `responseBody/cause/error/data/body`; prioridade `violations[].message → errors[].message → userMessage → detail → message → error → title`; nunca devolve JSON cru |
|
|
104
|
+
| `readApiErrorMessage(body)` | mesma lógica para um corpo já em mãos (objeto ou string JSON) |
|
|
105
|
+
| `messageForHttpStatus(status)` | mensagens pt-BR para 400, 401, 403, 404, 408/504, 409, 422, 429, 503, ≥500 e genérica |
|
|
106
|
+
| `isApiClientErrorLike(error)` | *type guard* (qualquer objeto) |
|
|
107
|
+
|
|
108
|
+
### Hook
|
|
109
|
+
`useDebouncedValue<T>(value, delayMs, normalize?)` — `"use client"`; `src/useDebouncedValue.ts`.
|
|
110
|
+
|
|
111
|
+
## Exemplo
|
|
112
|
+
Fonte: `packages/seedgrid-fe-core/README.md` (registry/persistência) + API confirmada (cliente HTTP, montado a partir da API).
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
import {
|
|
116
|
+
SeedGridRegistry, mergeMessages,
|
|
117
|
+
createLocalStorageStrategy, createCompositePersistenceStrategy,
|
|
118
|
+
createApiClient, extractApiErrorMessage
|
|
119
|
+
} from "@seedgrid/fe-core";
|
|
120
|
+
|
|
121
|
+
const registry = new SeedGridRegistry();
|
|
122
|
+
registry.addNavItem({ id: "marketing", labelKey: "menu.marketing", href: "/marketing", order: 10 });
|
|
123
|
+
|
|
124
|
+
const messages = mergeMessages({ app: { welcome: "Bem-vindo" } }, { app: { logout: "Sair" } });
|
|
125
|
+
|
|
126
|
+
const persistence = createCompositePersistenceStrategy({
|
|
127
|
+
mode: "mirror",
|
|
128
|
+
primary: createLocalStorageStrategy({ prefix: "sg:" }),
|
|
129
|
+
secondary: createLocalStorageStrategy(),
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const api = createApiClient({ baseUrl: "", getAccessToken: async () => null });
|
|
133
|
+
try {
|
|
134
|
+
await api.get("/api/recurso", { retry: true, requireAuth: false });
|
|
135
|
+
} catch (e) {
|
|
136
|
+
const msg = extractApiErrorMessage(e);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Marcadores `// seedgrid:managed` no topo de `api-client.ts`, `api-errors.ts`, `api-exception-handler.ts`, `server.ts` e `useDebouncedValue.ts`. **Inferência**: arquivos sincronizados/gerenciados pela CLI SeedGrid (não confirmado).
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, pacote, fe-playground]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-playground
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# `@seedgrid/fe-playground`
|
|
10
|
+
|
|
11
|
+
Exporta o componente `SgPlayground`: bloco de código somente leitura **ou** editor + preview interativo baseado em **Sandpack** (`@codesandbox/sandpack-react`), com runtime do `@seedgrid/fe-components`, shims para dependências pesadas e herança do tema da página hospedeira. É o `SgPlayground` exigido em toda página do [[SeedGrid/SeedGrid-components/showcase|Showcase]].
|
|
12
|
+
|
|
13
|
+
Relacionados: [[SeedGrid/SeedGrid-components/pacotes/Visao-geral|Pacotes]] · [[SeedGrid/SeedGrid-components/fundamentos/Visao-geral|Fundamentos do fe-components]] (`dist/sandbox.cjs`).
|
|
14
|
+
|
|
15
|
+
## Pacote
|
|
16
|
+
|
|
17
|
+
| Campo | Valor (Confirmado em `package.json`) |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Nome / versão | `@seedgrid/fe-playground` `0.1.0`, MIT, `sideEffects: false` |
|
|
20
|
+
| `exports` | só `.` |
|
|
21
|
+
| `dependencies` | `@codesandbox/sandpack-react ^2.20.0` |
|
|
22
|
+
| `peerDependencies` | `@seedgrid/fe-components ^0.2.10`, `react`/`react-dom ^18.2.0 \|\| ^19.0.0` |
|
|
23
|
+
| Build | `clean` + `tsc` + `scripts/build-ai-manifest.mjs`; `dev` = `tsc --watch` |
|
|
24
|
+
| Testes | nenhum no pacote (o showcase tem `tests/playground-app-file-imports.test.mjs`) |
|
|
25
|
+
|
|
26
|
+
**Atenção**: o peer `@seedgrid/fe-components ^0.2.10` não é satisfeito pela versão atual `2026.7.1` (semver `^0.2.x` só aceita `0.2.*`); espere aviso de peer ao instalar.
|
|
27
|
+
|
|
28
|
+
## Exports (`src/index.ts`)
|
|
29
|
+
`SgPlayground` (default de `src/SgPlayground.tsx`, `"use client"`), tipos `SgPlaygroundProps`, `SgPlaygroundPreset` (`"auto" | "basic" | "seedgrid" | "editor" | "full"`), `SgPlaygroundNpmRegistry`.
|
|
30
|
+
|
|
31
|
+
## Props de `SgPlayground` (Confirmado na desestruturação)
|
|
32
|
+
|
|
33
|
+
`SgPlaygroundProps` é uma união: **exatamente um** de `code` ou `playgroundFile`.
|
|
34
|
+
|
|
35
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| `code` | `string` | — | código inline |
|
|
38
|
+
| `playgroundFile` | `string` | — | caminho do arquivo; carregado via `fetch("/api/showcase-code?path=…")` — **exige essa rota no app hospedeiro** (existe no showcase) |
|
|
39
|
+
| `interactive` | `boolean` | `false` | `false` = bloco somente leitura (`ReadonlyBlock`); `true` = Sandpack com editor + preview |
|
|
40
|
+
| `codeContract` | `"renderBody" \| "appFile"` | `"renderBody"` | `renderBody`: o código é o corpo JSX, embrulhado num `App.tsx` gerado com `defaultImports`; `appFile`: o código é o `App.tsx` completo |
|
|
41
|
+
| `preset` | `SgPlaygroundPreset` | `"auto"` | `auto` → `editor` se usar `SgTextEditor`, `seedgrid` se importar `@seedgrid/fe-components`, senão `basic` |
|
|
42
|
+
| `title` | `string` | — (card: `"Codigo"`) | título |
|
|
43
|
+
| `description` | `string` | — | descrição do card |
|
|
44
|
+
| `height` | `number \| string` | `360` | altura |
|
|
45
|
+
| `expandedHeight` | `number \| string` | `"70vh"` | altura expandida |
|
|
46
|
+
| `expandable` | `boolean` | `true` | botão expandir |
|
|
47
|
+
| `resizable` | `boolean` | `true` | redimensionável |
|
|
48
|
+
| `resizeAxis` | `"vertical" \| "horizontal" \| "both"` | `"vertical"` | eixo |
|
|
49
|
+
| `previewPadding` | `number \| string` | `12` se `appFile`, senão `0` | padding do preview |
|
|
50
|
+
| `className`, `style` | — | — | no card (ou no container sem card) |
|
|
51
|
+
| `dependencies` | `Record<string,string>` | `{}` | dependências npm extras do sandbox |
|
|
52
|
+
| `defaultImports` | `string` | import de `SgScreen, SgPanel, SgGrid, SgStack, SgButton, SgAutocomplete` | cabeçalho usado no modo `renderBody` |
|
|
53
|
+
| `previewWrapperClassName` | `string` | `"h-[420px] rounded-xl border border-border bg-muted/30 p-3"` | wrapper do preview em `renderBody` |
|
|
54
|
+
| `seedgridDependency` | `string` | env `NEXT_PUBLIC_SANDPACK_SEEDGRID_DEPENDENCY` ou `"latest"` | versão do `@seedgrid/fe-components` no sandbox |
|
|
55
|
+
| `bundlerURL` | `string` | env `NEXT_PUBLIC_SANDPACK_BUNDLER_URL` ou `https://sandpack.seedgrid.com.br` | bundler Sandpack self-hosted |
|
|
56
|
+
| `bundlerTimeoutMs` | `number` | env `NEXT_PUBLIC_SANDPACK_BUNDLER_TIMEOUT_MS` ou `60000` | timeout |
|
|
57
|
+
| `npmRegistries` | `SgPlaygroundNpmRegistry[]` | derivado das envs `NEXT_PUBLIC_SANDPACK_NPM_REGISTRY_*` (se `…_URL` definida) | registries privados |
|
|
58
|
+
| `withCard` | `boolean` | `true` | envolve em `SgCard` |
|
|
59
|
+
| `collapsible` | `boolean` | `true` | card recolhível |
|
|
60
|
+
| `defaultOpen` | `boolean` | `true` | card inicia aberto |
|
|
61
|
+
| `cardId` | `string` | — | `id` do `SgCard` (âncoras do showcase) |
|
|
62
|
+
|
|
63
|
+
`SgPlaygroundNpmRegistry`: `{ enabledScopes: string[]; limitToScopes: boolean; registryUrl: string; proxyEnabled: boolean; registryAuthToken?: string }`.
|
|
64
|
+
|
|
65
|
+
### Comportamentos relevantes (Confirmado)
|
|
66
|
+
- Com SeedGrid incluído, injeta arquivos virtuais: `/node_modules/@seedgrid/fe-components/dist/index.js` → `module.exports = require("./sandbox.cjs")` (exige `build:sandbox` no pacote publicado), shim de `qrcode`, `public/index.html` com Tailwind, shims de i18n JSON/JS.
|
|
67
|
+
- `lucide-react` é substituído por um SVG genérico em todos os presets exceto `full` (evita OOM); TipTap e Sandpack-React também podem ser *shimados*; polyfills Node só no preset `editor`/`full`.
|
|
68
|
+
- Lê variáveis CSS e CSS do Next da página hospedeira (`MutationObserver` em `style`/`class`/`data-theme` do `<html>`) e repassa ao preview; tema claro/escuro do editor segue a página.
|
|
69
|
+
- Dependências padrão do sandbox: `react`/`react-dom` `18.2.0`, `react-hook-form ^7.0.0`; editor: `@tiptap/* ^2.9.1`.
|
|
70
|
+
|
|
71
|
+
## Configuração (variáveis de ambiente)
|
|
72
|
+
|
|
73
|
+
Lidas via `process.env` em `src/SgPlayground.tsx`. Por serem `NEXT_PUBLIC_*`, o Next.js as **embute no bundle do cliente em build** (Inferência baseada na convenção do Next; o pacote em si só lê `process.env`). Props explícitas têm precedência.
|
|
74
|
+
|
|
75
|
+
| Propriedade | Tipo | Valores aceitos | Padrão | Obrigatória | Comportamento | Uso | Relações | Fase | Origem |
|
|
76
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
77
|
+
| `NEXT_PUBLIC_SANDPACK_SEEDGRID_DEPENDENCY` | string | versão/range npm | `latest` | Não | versão do `@seedgrid/fe-components` no sandbox | `resolvedSeedgridDependency` | prop `seedgridDependency` vence | build (NEXT_PUBLIC inline) | `SgPlayground` |
|
|
78
|
+
| `NEXT_PUBLIC_SANDPACK_BUNDLER_URL` | string | URL válida (`new URL`) | `https://sandpack.seedgrid.com.br` | Não | URL do bundler; inválida → padrão; barra final removida | `normalizeUrl` | prop `bundlerURL` vence | build (NEXT_PUBLIC inline) | `SgPlayground` |
|
|
79
|
+
| `NEXT_PUBLIC_SANDPACK_BUNDLER_TIMEOUT_MS` | número | > 0 | `60000` | Não | timeout do bundler; inválido/≤0 → padrão | `normalizeTimeoutMs` | prop `bundlerTimeoutMs` vence | build (NEXT_PUBLIC inline) | `SgPlayground` |
|
|
80
|
+
| `NEXT_PUBLIC_SANDPACK_DEBUG` | boolean | `1/true/yes/on`, `0/false/no/off` | `false` | Não | loga a config do Sandpack (`console.info`) quando `interactive` | `useEffect` | — | build (NEXT_PUBLIC inline) | `SgPlayground` |
|
|
81
|
+
| `NEXT_PUBLIC_SANDPACK_NPM_REGISTRY_URL` | string | URL | — | Condicional (sem ela nenhum registry é criado) | registry npm privado; barras finais removidas | `resolveDefaultNpmRegistriesFromEnv` | habilita as 4 abaixo; prop `npmRegistries` vence | build (NEXT_PUBLIC inline) | `resolveDefaultNpmRegistriesFromEnv` |
|
|
82
|
+
| `NEXT_PUBLIC_SANDPACK_NPM_REGISTRY_SCOPES` | string CSV | ex. `@seedgrid,@outro` | `@seedgrid` | Não | `enabledScopes` | idem | requer `…_URL` | build (NEXT_PUBLIC inline) | idem |
|
|
83
|
+
| `NEXT_PUBLIC_SANDPACK_NPM_REGISTRY_LIMIT_TO_SCOPES` | boolean | idem DEBUG | `true` | Não | `limitToScopes` | idem | requer `…_URL` | build (NEXT_PUBLIC inline) | idem |
|
|
84
|
+
| `NEXT_PUBLIC_SANDPACK_NPM_REGISTRY_PROXY_ENABLED` | boolean | idem DEBUG | `false` | Não | `proxyEnabled` | idem | requer `…_URL` | build (NEXT_PUBLIC inline) | idem |
|
|
85
|
+
| 🔒 `NEXT_PUBLIC_SANDPACK_NPM_REGISTRY_AUTH_TOKEN` | string | token | — | Não | `registryAuthToken` do registry | idem | requer `…_URL` | build (NEXT_PUBLIC inline) | idem |
|
|
86
|
+
|
|
87
|
+
**Risco (Inferência)**: um token em variável `NEXT_PUBLIC_*` fica visível no JavaScript entregue ao navegador. Usar somente com token de leitura restrito.
|
|
88
|
+
|
|
89
|
+
Nenhum arquivo `.env*` com essas variáveis foi encontrado no showcase (lacuna: não houve busca em ambientes de deploy).
|
|
90
|
+
|
|
91
|
+
## Exemplo
|
|
92
|
+
Fonte: `packages/seedgrid-fe-playground/README.md`.
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
import { SgPlayground } from "@seedgrid/fe-playground";
|
|
96
|
+
|
|
97
|
+
export function PlaygroundExample() {
|
|
98
|
+
return (
|
|
99
|
+
<SgPlayground
|
|
100
|
+
code={`<>Olá SeedGrid!</>`}
|
|
101
|
+
preset="seedgrid"
|
|
102
|
+
interactive
|
|
103
|
+
title="Experimentando componentes"
|
|
104
|
+
description="Duplo clique para editar o código do componente."
|
|
105
|
+
expandedHeight="500px"
|
|
106
|
+
resizable
|
|
107
|
+
previewPadding={24}
|
|
108
|
+
/>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, pacote, fe-theme]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-theme
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# `@seedgrid/fe-theme`
|
|
10
|
+
|
|
11
|
+
Sistema de temas: gera paletas 50–900 a partir de uma cor *seed*, modos `light`/`dark`/`auto`, tokens CSS `--sg-*` (base + componentes), persistência da preferência e provider React. Inclui o provider/hook **legado** (`ThemeProvider`/`useTheme`) e um `AppShell` simples.
|
|
12
|
+
|
|
13
|
+
Relacionados: [[SeedGrid/SeedGrid-components/pacotes/Visao-geral|Pacotes]] · [[SeedGrid/SeedGrid-components/pacotes/fe-core|@seedgrid/fe-core]] (persistência) · [[SeedGrid/SeedGrid-components/fundamentos/Visao-geral|Fundamentos do fe-components]] (o CSS compilado embute o tema padrão).
|
|
14
|
+
|
|
15
|
+
## Pacote
|
|
16
|
+
|
|
17
|
+
| Campo | Valor (Confirmado em `package.json`) |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Nome / versão | `@seedgrid/fe-theme` `0.3.0` |
|
|
20
|
+
| `exports` | só `.` → `./dist/index.js` / `./dist/index.d.ts` |
|
|
21
|
+
| `dependencies` | `@seedgrid/fe-core` (`workspace:*`) — usa `createLocalStorageStrategy` e o tipo `PersistenceStrategy` |
|
|
22
|
+
| `peerDependencies` | `react ^18.2.0 \|\| ^19.0.0` |
|
|
23
|
+
| Build | `tsc -p tsconfig.json && node ./scripts/copy-i18n.mjs && node ./scripts/build-ai-manifest.mjs` → `dist/`, `dist/i18n/pt-BR.json`, `dist/ai/seedgrid-theme.manifest.json` |
|
|
24
|
+
| Testes | nenhum diretório `tests/` |
|
|
25
|
+
|
|
26
|
+
## API exportada (`src/index.ts`)
|
|
27
|
+
|
|
28
|
+
| Export | Tipo | Fonte | Descrição |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| `SeedThemeProvider` | componente | `src/theme/ThemeProvider.tsx` | provider principal (ver abaixo) |
|
|
31
|
+
| `useSgTheme` | hook | idem | retorna `ThemeContextValue`; lança erro fora do provider |
|
|
32
|
+
| `ThemeProvider` | componente **@deprecated** | idem | provider legado baseado em HSL (`SeedGridThemeConfig`) |
|
|
33
|
+
| `useTheme` | hook **@deprecated** | idem | retorna `SeedGridThemeConfig` do provider legado |
|
|
34
|
+
| `Mode` | tipo | `src/theme/ThemeConfig.ts` | `"light" \| "dark" \| "auto"` |
|
|
35
|
+
| `SeedThemeInput` | tipo | idem | entrada do tema (tabela abaixo) |
|
|
36
|
+
| `ThemeVars` | tipo | idem | `Record<string,string>` |
|
|
37
|
+
| `ThemeContextValue` | tipo | idem | `{ vars, setTheme, setMode, currentMode, currentTheme }` |
|
|
38
|
+
| `SeedGridThemeConfig` | tipo (legado) | idem | `brand{name,logoUrl?}`, `colors{primary,onPrimary,…,foreground}`, `layout{sidebarWidth,radius}` |
|
|
39
|
+
| `defaultTheme` | const (legado) | idem | marca "SeedGrid", cores HSL, `sidebarWidth 260`, `radius 12` |
|
|
40
|
+
| `defaultSeedTheme` | const | idem | `{ seed: "#16803D", mode: "light", radius: 12, persistMode: true }` |
|
|
41
|
+
| `clamp`, `hexToRgb`, `rgbToHex`, `rgbToHsl`, `hslToRgb`, `hslToHex`, `relativeLuminance`, `pickOnColor`, `toRgbVarValue`, `shiftHue`, `buildScaleFromHex` | funções | `src/theme/colorUtils.ts` | utilitários de cor; `buildScaleFromHex(baseHex, mode, {boostS?, biasL?})` gera stops 50–900 |
|
|
42
|
+
| `getSystemMode` | função | `src/theme/themeGenerator.ts` | `prefers-color-scheme`; `"light"` em SSR |
|
|
43
|
+
| `generateThemeVars` | função | idem | `(input, resolvedMode) => ThemeVars` |
|
|
44
|
+
| `generateComponentTokens` | função | `src/theme/componentTokens.ts` | `(baseVars) => ThemeVars` aliases `--sg-btn-*`, `--sg-input-*`, `--sg-card-*`, `--sg-alert-*`, `--sg-table-*`, `--sg-menu-*`, `--sg-modal-*`… |
|
|
45
|
+
| `AppShell` | componente | `src/ui/AppShell.tsx` | layout sidebar + header + main; usa `useTheme()` **legado** |
|
|
46
|
+
|
|
47
|
+
### `SeedThemeInput`
|
|
48
|
+
|
|
49
|
+
| Campo | Tipo | Padrão | Comportamento |
|
|
50
|
+
|---|---|---|---|
|
|
51
|
+
| `seed` | `string` (`#RRGGBB`) | obrigatório | base da paleta primária; secundária = `shiftHue(seed,+35)`, terciária = `shiftHue(seed,+210)`; neutros "puxados" para o matiz da seed |
|
|
52
|
+
| `mode` | `Mode` | `"light"` (em `generateThemeVars`/provider) | `auto` segue o sistema e escuta `matchMedia` |
|
|
53
|
+
| `radius` | `number` (px) | `12` | gera `--radius` e `--sg-radius` |
|
|
54
|
+
| `warning`, `error`, `info`, `success` | `string` hex | gerado com matiz fixo (45°, 5°, 210°, 145°) | sobrescreve a base semântica |
|
|
55
|
+
| `customVars` | `Record<string,string>` | — | aplicado por último em `generateThemeVars` (sobrescreve variáveis) |
|
|
56
|
+
| `persistMode` | `boolean` | `undefined` (`true` no `defaultSeedTheme`) | se `true`, salva modo e `{seed,mode,radius}` |
|
|
57
|
+
| `persistenceStrategy` | `PersistenceStrategy` (fe-core) | `createLocalStorageStrategy()` | permite persistir via API (estratégia assíncrona) |
|
|
58
|
+
|
|
59
|
+
### `SeedThemeProvider` — props e comportamento (Confirmado)
|
|
60
|
+
|
|
61
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
62
|
+
|---|---|---|---|
|
|
63
|
+
| `initialTheme` | `SeedThemeInput` | `defaultSeedTheme` | tema inicial |
|
|
64
|
+
| `applyTo` | `"html" \| "wrapper"` | `"html"` | `html`: `style.setProperty` em `document.documentElement`; `wrapper`: variáveis inline em um `<div>` |
|
|
65
|
+
| `children` | `ReactNode` | — | — |
|
|
66
|
+
|
|
67
|
+
- Chaves de persistência: `sg:theme:mode` e `sg:theme:config` (na estratégia; o localStorage padrão não usa prefixo).
|
|
68
|
+
- Tema persistido **tem precedência** sobre `initialTheme` (exceto `persistMode` e `persistenceStrategy`, que vêm do inicial).
|
|
69
|
+
- Estratégias assíncronas: hidratação em `useEffect` após o primeiro render.
|
|
70
|
+
- `setTheme(partial)` mescla; `mode: "auto"` resolve via `getSystemMode()`. `setMode("light"|"dark")` salva se `persistMode`.
|
|
71
|
+
|
|
72
|
+
### Tokens CSS gerados
|
|
73
|
+
`generateThemeVars` produz, entre outros: `--sg-mode`, `--sg-bg`, `--sg-surface`, `--sg-muted-surface`, `--sg-border`, `--sg-ring`, `--sg-text`, `--sg-muted`, `--sg-disabled`, `--sg-on-disabled`, `--sg-link`, `--sg-link-hover`, `--sg-badge`, `--sg-on-badge`, `--sg-tooltip`, `--sg-on-tooltip`, escalas `--sg-{primary,secondary,tertiary,warning,error,info,success}-{50..900}`, `-hover` (= stop 600, todas as escalas) e `-active` (= stop 700, só primary/secondary/tertiary), `--sg-on-{primary,…}`, `--radius`, `--sg-radius`. Valores RGB "r g b" (para `rgb(var(--sg-x) / alpha)`). `generateComponentTokens` adiciona ~147 ocorrências de chaves `--sg-*` de componentes (contagem `grep`).
|
|
74
|
+
|
|
75
|
+
## Contrato real
|
|
76
|
+
|
|
77
|
+
- `useSgTheme()` retorna `{ vars, setTheme, setMode, currentMode, currentTheme }` (não há `seed` direto nem `reset`).
|
|
78
|
+
- `SeedThemeProvider` aceita `initialTheme`, `applyTo` e `children`; `seed`, `radius`, `customVars` etc. vão dentro de `initialTheme`.
|
|
79
|
+
- `AppShell` depende do `ThemeProvider` legado (`useTheme()` lança erro se ausente).
|
|
80
|
+
|
|
81
|
+
## Exemplo
|
|
82
|
+
Fonte: `packages/seedgrid-fe-theme/README.md` (uso básico) e `apps/showcase/src/app/layout.tsx`:
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
import { SeedThemeProvider, useSgTheme } from "@seedgrid/fe-theme";
|
|
86
|
+
|
|
87
|
+
<SeedThemeProvider initialTheme={{ seed: "#16803D", mode: "auto", radius: 12, persistMode: true }}>
|
|
88
|
+
{children}
|
|
89
|
+
</SeedThemeProvider>
|
|
90
|
+
|
|
91
|
+
function ThemeToggle() {
|
|
92
|
+
const { currentMode, setMode } = useSgTheme();
|
|
93
|
+
return <button onClick={() => setMode(currentMode === "light" ? "dark" : "light")}>Tema</button>;
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Outros: `examples/ThemeDemo.tsx`, `tailwind.config.example.js` no pacote (não detalhados).
|