@seedgrid/ai-toolkit 0.0.0-stage → 0.3.0
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 +151 -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 +203 -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/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,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, front, component, digits]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src/digits
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Dígitos animados (`src/digits`)
|
|
10
|
+
|
|
11
|
+
Oito componentes que exibem **um caractere (ou um texto curto)** com um efeito visual próprio — placar flip, painel LED, display de 7 segmentos, neon, folha de papel descartada etc. São blocos de construção: o relógio [[SeedGrid/SeedGrid-components/gadgets/API|SgClock]] (`digitalStyle`) e o [[SeedGrid/SeedGrid-components/gadgets/API|SgStringAnimator]] compõem vários deles. Não têm eventos nem estado controlado além de `value`.
|
|
12
|
+
|
|
13
|
+
- API completa (props, ref, acessibilidade): [[SeedGrid/SeedGrid-components/digits/API|API dos dígitos]]
|
|
14
|
+
- Exemplos TSX: [[SeedGrid/SeedGrid-components/digits/Exemplos|Exemplos dos dígitos]]
|
|
15
|
+
- Gadgets que os usam: [[SeedGrid/SeedGrid-components/gadgets/Visao-geral|Gadgets]]
|
|
16
|
+
- Instalação, CSS e i18n do pacote: [[SeedGrid/SeedGrid-components/fundamentos/Visao-geral|Fundamentos]]
|
|
17
|
+
|
|
18
|
+
## Componentes
|
|
19
|
+
|
|
20
|
+
| Componente | Exportado | Para que serve | Showcase |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| `SgDiscardDigit` | sim (+ `SgDiscardDigitHandle`) | Pilha de folhas; a do topo é descartada/chega ao trocar o valor; paginação imperativa via `ref`. | `/components/digits/sg-discard-digit` |
|
|
23
|
+
| `SgFadeDigit` | sim | Card com fade-out/fade-in (200 ms fixos). | `/components/digits/sg-fade-digit` |
|
|
24
|
+
| `SgFlipDigit` | sim | Card flip via `@pqina/flip` (import dinâmico, SSR-safe). | `/components/digits/sg-flip-digit` |
|
|
25
|
+
| `SgMatrixDigit` | sim | Texto em matriz de pontos 5×7 (LED). Aceita vários caracteres. | `/components/digits/sg-matrix-digit` |
|
|
26
|
+
| `SgNeonDigit` | sim | Texto com brilho neon e troca animada. | `/components/digits/sg-neon-digit` |
|
|
27
|
+
| `SgRoller3DDigit` | sim | Tambor vertical que rola até `value` dentro de `items`. | `/components/digits/sg-roller3d-digit` |
|
|
28
|
+
| `SgSegmentDigit` | sim | Segmentos SVG compactos com `currentColor`; suporta `:`. | `/components/digits/sg-segment-digit` |
|
|
29
|
+
| `SgSevenSegmentDigit` | sim (+ `SgSevenSegmentDigitPalette`) | Display LED de 7 segmentos com paletas, glow e skew; hexadecimal 0-F. | `/components/digits/sg-seven-segment-digit` |
|
|
30
|
+
|
|
31
|
+
Todos exportados pelo barrel `src/index.ts` (Confirmado). Os `index.ts` de cada subpasta (`src/digits/<x>/index.ts`) só reexportam e não são entradas do `exports` do `package.json` (apenas `"."` e `"./style.css"`).
|
|
32
|
+
|
|
33
|
+
## Quando usar qual
|
|
34
|
+
|
|
35
|
+
| Necessidade | Componente |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Contador/placar estilo aeroporto | `SgFlipDigit` |
|
|
38
|
+
| Painel LED de texto livre | `SgMatrixDigit` |
|
|
39
|
+
| Relógio/visor numérico clássico | `SgSevenSegmentDigit` (grande, com paleta) ou `SgSegmentDigit` (pequeno, herda cor) |
|
|
40
|
+
| Rolagem tipo odômetro com conjunto de valores próprio | `SgRoller3DDigit` (`items`) |
|
|
41
|
+
| Paginação "folheando" | `SgDiscardDigit` + `ref` (`increasePage`/`decreasePage`) |
|
|
42
|
+
| Efeito decorativo/temático | `SgNeonDigit`, `SgFadeDigit` |
|
|
43
|
+
|
|
44
|
+
## Dependências
|
|
45
|
+
|
|
46
|
+
- `@pqina/flip` `^1.8.4` — dependência (não peer) do pacote, usada só por `SgFlipDigit`; tipagem local em `src/digits/flip-digit/pqina-flip.d.ts`. Confirmado (`package.json`).
|
|
47
|
+
- React (peer). Estilo via classes Tailwind compiladas no CSS do pacote e estilos inline; tokens `--sg-*` do tema em alguns componentes (ex.: `SgRoller3DDigit`, `SgSegmentDigit`).
|
|
48
|
+
|
|
49
|
+
## Testes
|
|
50
|
+
|
|
51
|
+
Não há teste dedicado aos dígitos em `packages/seedgrid-fe-components/tests/` (busca por `Digit` só encontra `i18n-components-contract.test.mjs`). Os dígitos são exercitados indiretamente por `tests/gadgets.test.mjs` (SgClock) — não executados nesta análise.
|
|
52
|
+
|
|
53
|
+
## Limitações e lacunas
|
|
54
|
+
|
|
55
|
+
- `SgFlipDigit` e `SgRoller3DDigit` não expõem o valor a tecnologias assistivas (sem `aria-label`/`role`). Confirmado.
|
|
56
|
+
- Nenhum dígito trata `prefers-reduced-motion` (não encontrado no código).
|
|
57
|
+
- Apenas `SgDiscardDigit`, `SgMatrixDigit`, `SgNeonDigit`, `SgSevenSegmentDigit` e `SgSegmentDigit` aceitam `style`; `SgFadeDigit`, `SgFlipDigit` e `SgRoller3DDigit` só `className`.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, component, frontend, react, editor, tiptap, api]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src/inputs/SgTextEditor.tsx
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# SgTextEditor: API
|
|
10
|
+
|
|
11
|
+
Import: `import { SgTextEditor, type SgTextEditorProps, type SgTextEditorSaveMeta } from "@seedgrid/fe-components";` (pacote v`2026.7.1`). Contexto: [[SeedGrid/SeedGrid-components/editor/Visao-geral|Visão geral do SgTextEditor]]. Exemplos: [[SeedGrid/SeedGrid-components/editor/Exemplos|Exemplos do SgTextEditor]]. A metodologia da tabela está em [[SeedGrid/SeedGrid-components/inputs-texto/API#Como as tabelas foram montadas|Como as tabelas foram montadas]]. As props RHF seguem o [[SeedGrid/SeedGrid-components/inputs-texto/API#Contrato RhfFieldProps (react-hook-form)|contrato RhfFieldProps]], com o desvio indicado na própria tabela.
|
|
12
|
+
|
|
13
|
+
## Props (21)
|
|
14
|
+
|
|
15
|
+
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| `error` | `string` | — | Não | Erro abaixo do editor. |
|
|
18
|
+
| `id` | `string` | — | Sim | `id` do elemento editável; nome padrão do arquivo salvo (`<id>.html`). |
|
|
19
|
+
| `valueHtml` | `string` | — | Não | HTML do corpo (controlado quando string). |
|
|
20
|
+
| `defaultValueHtml` | `string` | `""` | Não | HTML inicial não controlado. |
|
|
21
|
+
| `onChangeHtml` | `((htmlBody: string) => void)` | — | Não | Recebe `editor.getHTML()` a cada atualização. Com `control`, é substituída pelo `field.onChange`. |
|
|
22
|
+
| `cssText` | `string` | `""` | Não | CSS embutido no documento salvo. |
|
|
23
|
+
| `onCssTextChange` | `((cssText: string) => void)` | — | Não | CSS alterado (textarea ou ao carregar HTML com `<style>`). |
|
|
24
|
+
| `fileName` | `string` | `<id>.html` | Não | Nome do arquivo gerado no salvar. |
|
|
25
|
+
| `onSave` | `((file: File, meta: SgTextEditorSaveMeta) => void)` | — | Não | Botão Salvar: `(file: File, meta: SgTextEditorSaveMeta)`; `meta = {htmlDocument, contentHtml, cssText}`. |
|
|
26
|
+
| `onLoad` | `((meta: SgTextEditorSaveMeta) => void)` | — | Não | Após carregar um `.html` pelo botão: recebe `SgTextEditorSaveMeta`. |
|
|
27
|
+
| `height` | `number` | `320` | Não | Altura da área de edição (px). |
|
|
28
|
+
| `placeholder` | `string` | i18n `components.textEditor.placeholder` | Não | Vai para `data-placeholder` do editor. |
|
|
29
|
+
| `disabled` | `boolean` | — | Não | Editor não editável e toolbar desabilitada. |
|
|
30
|
+
| `borderRadius` | `string \| number` | — | Não | Raio das bordas. |
|
|
31
|
+
| `showCssEditor` | `boolean` | `false` | Não | Mostra textarea de CSS. |
|
|
32
|
+
| `cssEditorLabel` | `string` | i18n `components.textEditor.cssEditorLabel` | Não | Rótulo do editor de CSS. |
|
|
33
|
+
| `className` | `string` | — | Não | Classes do wrapper. |
|
|
34
|
+
| `style` | `CSSProperties` | — | Não | Estilo do wrapper. |
|
|
35
|
+
| `name` | `string` | — | Não | Nome do campo no react-hook-form. Só tem efeito junto com `control` ou `register` (ver contrato RHF). |
|
|
36
|
+
| `control` | `any` | — | Não | `Control` do `useForm()`; com `name`, envolve o componente em `<Controller>`. |
|
|
37
|
+
| `rules` | `RegisterOptions<any>` | — | Não | Regras de validação do RHF (`RegisterOptions`). |
|
|
38
|
+
|
|
39
|
+
## Tipos exportados
|
|
40
|
+
|
|
41
|
+
| Tipo | Forma |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `SgTextEditorProps` | Tabela acima. |
|
|
44
|
+
| `SgTextEditorSaveMeta` | `{ htmlDocument: string; contentHtml: string; cssText: string }` |
|
|
45
|
+
|
|
46
|
+
## Eventos e formatos de retorno
|
|
47
|
+
|
|
48
|
+
- **`onChangeHtml(htmlBody)`:**
|
|
49
|
+
- Disparado no `onUpdate` do TipTap com `editor.getHTML()`.
|
|
50
|
+
- Entrega **só o HTML do corpo**, por exemplo `"<p><strong>SeedGrid</strong> editor</p>"`, sem `<html>`/`<style>`.
|
|
51
|
+
- **`onSave(file, meta)`:** acionado pelo botão "Salvar" da toolbar (i18n `components.actions.save`).
|
|
52
|
+
- `file` é um `File` `text/html;charset=utf-8`, com nome `fileName ?? "<id>.html"`.
|
|
53
|
+
- O conteúdo é um documento completo: `<!doctype html>`, `<html lang="<locale do i18n>">`, `<meta charset>`, `<meta viewport>`, `<style>` com o `cssText` (se houver) e `<body>` com o HTML.
|
|
54
|
+
- `meta` traz o mesmo documento como string (`htmlDocument`), além de `contentHtml` e `cssText`.
|
|
55
|
+
- **`onLoad(meta)`:** o botão "Carregar HTML" (i18n `components.actions.loadHtml`) abre um `<input type="file" accept="text/html,.html">`. O componente então:
|
|
56
|
+
1. lê o arquivo;
|
|
57
|
+
2. extrai o CSS de `head style` e o `body`;
|
|
58
|
+
3. troca o conteúdo do editor;
|
|
59
|
+
4. chama `onCssTextChange` se o CSS mudou;
|
|
60
|
+
5. chama `onLoad`.
|
|
61
|
+
- **`onCssTextChange(css)`:** chamado pela textarea de CSS (`showCssEditor`) e no carregamento de arquivo.
|
|
62
|
+
|
|
63
|
+
**Confirmado** (`buildFullHtmlDocument`, `parseHtmlDocument`, `doSave`, `loadFromHtmlString`).
|
|
64
|
+
|
|
65
|
+
## Controlado e não controlado
|
|
66
|
+
|
|
67
|
+
- **Controlado:** quando `valueHtml` é `string`. Se o HTML do editor divergir de `valueHtml`, o componente chama `setContent(valueHtml)`.
|
|
68
|
+
- **Não controlado:** o conteúdo inicial vem de `defaultValueHtml`.
|
|
69
|
+
- **`cssText`:** é sempre lido da prop. Sem `onCssTextChange`, a textarea de CSS não altera nada.
|
|
70
|
+
|
|
71
|
+
**Confirmado**.
|
|
72
|
+
|
|
73
|
+
## Integração react-hook-form
|
|
74
|
+
|
|
75
|
+
- **Integração:** via `control` + `name` (`<Controller>`). O valor do campo é o HTML do corpo (`field.value` string → `valueHtml`; `onChangeHtml` → `field.onChange`).
|
|
76
|
+
- Nesse caminho, o `onChangeHtml` do usuário é substituído por `field.onChange`.
|
|
77
|
+
- `rules` são repassadas sem `mergeRequiredRule` (o tipo não tem `required`).
|
|
78
|
+
|
|
79
|
+
Teste de contrato: `tests/rhf-components-contract.test.mjs` ("SgTextEditor preserves control integration path"). **Confirmado**.
|
|
80
|
+
|
|
81
|
+
## Ref
|
|
82
|
+
|
|
83
|
+
O componente não usa `forwardRef` e não expõe a instância do TipTap (`Editor`). **Confirmado**.
|
|
84
|
+
|
|
85
|
+
## Toolbar e extensões TipTap
|
|
86
|
+
|
|
87
|
+
| Recurso | Implementação (`useEditor`) |
|
|
88
|
+
|---|---|
|
|
89
|
+
| Parágrafo/títulos H1, H2, H3 | `StarterKit` (`codeBlock` habilitado) + `<select>` |
|
|
90
|
+
| Fonte (Arial, Georgia, Times, Courier) | `@tiptap/extension-font-family` |
|
|
91
|
+
| Tamanho da fonte | `TextStyle` estendido com o atributo `fontSize` (`TextStyleWithSize`) |
|
|
92
|
+
| Negrito, itálico, sublinhado, tachado | `StarterKit` + `@tiptap/extension-underline` |
|
|
93
|
+
| Cor do texto e realce multicolor | `@tiptap/extension-color`, `@tiptap/extension-highlight` (`multicolor: true`) |
|
|
94
|
+
| Sub/sobrescrito | `@tiptap/extension-subscript`, `@tiptap/extension-superscript` |
|
|
95
|
+
| Listas, recuo e avanço | `StarterKit` |
|
|
96
|
+
| Alinhamento (esquerda, centro, direita, justificado) | `@tiptap/extension-text-align` (`types: ["heading", "paragraph"]`) |
|
|
97
|
+
| Link | `@tiptap/extension-link` (`openOnClick: false`, `autolink`, `linkOnPaste`) via `window.prompt` |
|
|
98
|
+
| Imagem por URL | `@tiptap/extension-image` (`inline: false`) via `window.prompt` |
|
|
99
|
+
| Limpar formatação | `unsetAllMarks().clearNodes()` |
|
|
100
|
+
|
|
101
|
+
O editor é criado com `immediatelyRender: false` (seguro para SSR) e `editable: !disabled`. **Confirmado**.
|
|
102
|
+
|
|
103
|
+
## Internacionalização
|
|
104
|
+
|
|
105
|
+
As chaves usadas são:
|
|
106
|
+
- `components.textEditor.placeholder`, `cssEditorLabel`, `editorAriaLabel`, `help.cssEmbedded`;
|
|
107
|
+
- `components.textEditor.prompt.url` e `prompt.imageUrl`;
|
|
108
|
+
- `components.textEditor.toolbar.*`: `heading`, `subheading`, `normal`, `heading3`, `defaultFont`, `bold`, `italic`, `underline`, `strike`, `textColor`, `highlightColor`, `bullets`, `numbered`, `indent`, `outdent`, `alignLeft`, `alignCenter`, `alignRight`, `justify`, `link`, `image`, `clear`, `subscript`, `superscript`;
|
|
109
|
+
- `components.actions.save` e `components.actions.loadHtml`.
|
|
110
|
+
|
|
111
|
+
O `lang` do documento salvo é o `locale` do i18n. **Confirmado**.
|
|
112
|
+
|
|
113
|
+
## Acessibilidade comprovável
|
|
114
|
+
|
|
115
|
+
- A área editável tem `id` e `aria-label` (i18n `components.textEditor.editorAriaLabel`).
|
|
116
|
+
- Os botões da toolbar (`ToolbarButton`) têm `aria-label`, e os ícones são `aria-hidden`.
|
|
117
|
+
- Os `<select>` de estilo, fonte e tamanho **não** têm rótulo associado.
|
|
118
|
+
- O rótulo do editor de CSS é um `<label>` sem `htmlFor`.
|
|
119
|
+
|
|
120
|
+
**Confirmado**.
|
|
121
|
+
|
|
122
|
+
## Fontes
|
|
123
|
+
|
|
124
|
+
- `front/seedgrid-fe-components/packages/seedgrid-fe-components/src/inputs/SgTextEditor.tsx` (`SgTextEditorBase`, `SgTextEditor`, `ToolbarButton`, `TextStyleWithSize`)
|
|
125
|
+
- `front/seedgrid-fe-components/packages/seedgrid-fe-components/package.json` (`peerDependencies`)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, component, frontend, react, editor, tiptap, exemplos]
|
|
3
|
+
fonte: front/seedgrid-fe-components/apps/showcase/src/app/components/sg-text-editor
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# SgTextEditor: exemplos
|
|
10
|
+
|
|
11
|
+
Os exemplos foram conferidos contra [[SeedGrid/SeedGrid-components/editor/API|API do SgTextEditor]]. As fontes são relativas a `front/seedgrid-fe-components/apps/showcase/src/app/components/sg-text-editor/samples/`. Não foram compilados nem executados.
|
|
12
|
+
|
|
13
|
+
## Instalação dos peers
|
|
14
|
+
|
|
15
|
+
Versões conforme `peerDependencies` (`^2.9.1`).
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm add @seedgrid/fe-components react-hook-form lucide-react \
|
|
19
|
+
@tiptap/core @tiptap/pm @tiptap/react @tiptap/starter-kit \
|
|
20
|
+
@tiptap/extension-color @tiptap/extension-font-family @tiptap/extension-highlight \
|
|
21
|
+
@tiptap/extension-image @tiptap/extension-link @tiptap/extension-subscript \
|
|
22
|
+
@tiptap/extension-superscript @tiptap/extension-text-align \
|
|
23
|
+
@tiptap/extension-text-style @tiptap/extension-underline
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Controlado, com CSS e salvar
|
|
27
|
+
|
|
28
|
+
Fonte: `basico.tsx.sample`.
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import React from "react";
|
|
32
|
+
import { SgTextEditor } from "@seedgrid/fe-components";
|
|
33
|
+
|
|
34
|
+
export default function Example() {
|
|
35
|
+
const [htmlBody, setHtmlBody] = React.useState("<p><strong>SeedGrid</strong> editor</p>");
|
|
36
|
+
const [cssText, setCssText] = React.useState("body { font-family: Arial; }");
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<SgTextEditor
|
|
40
|
+
id="sg-text-editor"
|
|
41
|
+
valueHtml={htmlBody}
|
|
42
|
+
onChangeHtml={setHtmlBody}
|
|
43
|
+
cssText={cssText}
|
|
44
|
+
onCssTextChange={setCssText}
|
|
45
|
+
showCssEditor
|
|
46
|
+
style={{ border: "1px solid rgba(59, 130, 246, 0.2)", borderRadius: 14, padding: 8 }}
|
|
47
|
+
onSave={(file) => console.log(file.name)}
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Enviando o arquivo gerado
|
|
54
|
+
|
|
55
|
+
`onSave` entrega um `File` pronto para upload, junto com o documento como string. O endpoint `/api/templates` abaixo é ilustrativo.
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import React from "react";
|
|
59
|
+
import { SgTextEditor, type SgTextEditorSaveMeta } from "@seedgrid/fe-components";
|
|
60
|
+
|
|
61
|
+
export default function TemplateEditor() {
|
|
62
|
+
const [body, setBody] = React.useState("");
|
|
63
|
+
|
|
64
|
+
async function handleSave(file: File, meta: SgTextEditorSaveMeta) {
|
|
65
|
+
const form = new FormData();
|
|
66
|
+
form.append("file", file);
|
|
67
|
+
form.append("css", meta.cssText);
|
|
68
|
+
await fetch("/api/templates", { method: "POST", body: form });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<SgTextEditor
|
|
73
|
+
id="modelo-email"
|
|
74
|
+
fileName="modelo-email.html"
|
|
75
|
+
valueHtml={body}
|
|
76
|
+
onChangeHtml={setBody}
|
|
77
|
+
onSave={handleSave}
|
|
78
|
+
onLoad={(meta) => console.log("carregado", meta.contentHtml.length)}
|
|
79
|
+
height={400}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Com react-hook-form (`control`)
|
|
86
|
+
|
|
87
|
+
Só o caminho `control` é suportado. Nesse modo o `onChangeHtml` próprio é ignorado.
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
import React from "react";
|
|
91
|
+
import { useForm } from "react-hook-form";
|
|
92
|
+
import { SgButton, SgTextEditor } from "@seedgrid/fe-components";
|
|
93
|
+
|
|
94
|
+
export default function Form() {
|
|
95
|
+
const { control, handleSubmit } = useForm({ defaultValues: { corpo: "<p>Olá</p>" } });
|
|
96
|
+
return (
|
|
97
|
+
<form onSubmit={handleSubmit((data) => console.log(data.corpo))}>
|
|
98
|
+
<SgTextEditor id="corpo" name="corpo" control={control} rules={{ required: "Informe o conteúdo" }} />
|
|
99
|
+
<SgButton type="submit">Salvar</SgButton>
|
|
100
|
+
</form>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Desabilitado
|
|
106
|
+
|
|
107
|
+
Fonte: `desabilitado.tsx.sample`. Usa a prop `disabled` (confirmada no tipo).
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
import React from "react";
|
|
111
|
+
import { SgTextEditor } from "@seedgrid/fe-components";
|
|
112
|
+
|
|
113
|
+
export default function ReadOnlyPreview({ html }: { html: string }) {
|
|
114
|
+
return <SgTextEditor id="preview" valueHtml={html} disabled />;
|
|
115
|
+
}
|
|
116
|
+
```
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, component, frontend, react, editor, tiptap]
|
|
3
|
+
fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src/inputs/SgTextEditor.tsx
|
|
4
|
+
branch: main
|
|
5
|
+
commit: ad30fc11de
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# SgTextEditor
|
|
10
|
+
|
|
11
|
+
O `SgTextEditor` é o editor de texto rico (HTML) do pacote `@seedgrid/fe-components` (v`2026.7.1`), construído sobre o **TipTap 2**. Referência: [[SeedGrid/SeedGrid-components/editor/API|API do SgTextEditor]]. Código: [[SeedGrid/SeedGrid-components/editor/Exemplos|Exemplos do SgTextEditor]].
|
|
12
|
+
|
|
13
|
+
## Objetivo
|
|
14
|
+
|
|
15
|
+
O editor produz e edita **documentos HTML com CSS embutido**. As funções principais, todas **Confirmado**:
|
|
16
|
+
- toolbar de formatação (títulos, fontes, tamanhos, cores, listas, alinhamento, link, imagem por URL);
|
|
17
|
+
- editor opcional de CSS;
|
|
18
|
+
- botões para **salvar** o documento como `File` `.html` e **carregar** um `.html` do disco.
|
|
19
|
+
|
|
20
|
+
Usos indicados: modelos de e-mail, termos e contratos, conteúdo de páginas e notas ricas. Para texto simples, use [[SeedGrid/SeedGrid-components/inputs-texto/Visao-geral|SgInputTextArea]]. Essa recomendação está em `aiHints.avoidUseCases` de `SgInputText.meta.ts`. **Confirmado**.
|
|
21
|
+
|
|
22
|
+
## Dependências (peers TipTap)
|
|
23
|
+
|
|
24
|
+
`peerDependencies` do pacote (também em `devDependencies`), todas na faixa `^2.9.1`:
|
|
25
|
+
|
|
26
|
+
| Pacote | Uso |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `@tiptap/react` | `useEditor`, `EditorContent` |
|
|
29
|
+
| `@tiptap/core` | Tipos/base |
|
|
30
|
+
| `@tiptap/pm` | ProseMirror |
|
|
31
|
+
| `@tiptap/starter-kit` | Parágrafos, títulos, listas, negrito/itálico/tachado, bloco de código |
|
|
32
|
+
| `@tiptap/extension-underline` | Sublinhado |
|
|
33
|
+
| `@tiptap/extension-link` | Links |
|
|
34
|
+
| `@tiptap/extension-image` | Imagens |
|
|
35
|
+
| `@tiptap/extension-text-align` | Alinhamento |
|
|
36
|
+
| `@tiptap/extension-text-style` | Base de estilo (estendida com `fontSize`) |
|
|
37
|
+
| `@tiptap/extension-color` | Cor do texto |
|
|
38
|
+
| `@tiptap/extension-highlight` | Realce |
|
|
39
|
+
| `@tiptap/extension-subscript` / `@tiptap/extension-superscript` | Sub/sobrescrito |
|
|
40
|
+
| `@tiptap/extension-font-family` | Família da fonte |
|
|
41
|
+
|
|
42
|
+
Além disso: `react`, `react-hook-form` (`Controller`) e `lucide-react` (ícones da toolbar). **Confirmado** pelos imports de `SgTextEditor.tsx` e pelo `package.json`.
|
|
43
|
+
|
|
44
|
+
**Importante:** o `src/index.ts` reexporta o `SgTextEditor` estaticamente, e o arquivo importa o TipTap no topo. Por isso, **qualquer** importação de `@seedgrid/fe-components` faz o bundler resolver os pacotes `@tiptap/*`, mesmo em aplicações que não usam o editor. Na prática, os peers TipTap são necessários para todo consumidor do pacote. Isso é **Inferência**, pela estrutura dos imports ESM e pelo campo `sideEffects: true`; não foi testado em uma aplicação consumidora.
|
|
45
|
+
|
|
46
|
+
## Composição
|
|
47
|
+
|
|
48
|
+
```mermaid
|
|
49
|
+
graph LR
|
|
50
|
+
TB[Toolbar: selects + ToolbarButton] --> ED[EditorContent TipTap]
|
|
51
|
+
ED -->|onUpdate| CH[onChangeHtml body HTML]
|
|
52
|
+
SAVE[Botão Salvar] --> DOC[buildFullHtmlDocument body + cssText] --> F[File .html via onSave]
|
|
53
|
+
LOAD[Botão Carregar HTML] --> PARSE[parseHtmlDocument] --> ED
|
|
54
|
+
PARSE --> CSS[onCssTextChange]
|
|
55
|
+
CSSED[Textarea CSS opcional] --> CSS
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- O corpo editado (`valueHtml`) e o CSS (`cssText`) ficam **separados**. Eles só se juntam no documento salvo.
|
|
59
|
+
- O CSS **não** é aplicado ao conteúdo dentro do editor. Ele vai apenas para o `<style>` do arquivo gerado.
|
|
60
|
+
|
|
61
|
+
**Confirmado**: o `cssText` só é usado em `buildFullHtmlDocument` e na textarea.
|
|
62
|
+
|
|
63
|
+
## Tema e estilos
|
|
64
|
+
|
|
65
|
+
- **Área de edição:** classes `prose max-w-none`. As classes `prose` vêm do plugin de tipografia do Tailwind. Se esse plugin está incluído no CSS compilado do pacote **não foi verificado**.
|
|
66
|
+
- **Moldura:** a toolbar e a área usam bordas e `bg-background`.
|
|
67
|
+
- **Customização:** `className`, `style`, `borderRadius`, `height` (padrão 320 px).
|
|
68
|
+
- **Desabilitado:** `disabled` deixa o conteúdo não editável, com opacidade 60%.
|
|
69
|
+
|
|
70
|
+
**Confirmado**, salvo o ponto do `prose`.
|
|
71
|
+
|
|
72
|
+
## Internacionalização
|
|
73
|
+
|
|
74
|
+
Todos os rótulos da toolbar, os prompts e o placeholder vêm de `components.textEditor.*`. Ver [[SeedGrid/SeedGrid-components/editor/API#Internacionalização|API]].
|
|
75
|
+
|
|
76
|
+
## Testes
|
|
77
|
+
|
|
78
|
+
Só há o teste de contrato por regex (`tests/rhf-components-contract.test.mjs`), que confere o caminho `control`. Não há teste DOM do editor. **Confirmado**.
|
|
79
|
+
|
|
80
|
+
## Limitações e pontos de atenção
|
|
81
|
+
|
|
82
|
+
- **Prompts nativos:** link e imagem usam `window.prompt`, sem diálogo próprio e sem upload de arquivo de imagem. **Confirmado**.
|
|
83
|
+
- **Instância TipTap:** não há ref nem acesso a ela, então não dá para registrar extensões adicionais. **Confirmado**.
|
|
84
|
+
- **RHF:** integração só via `control`. Nesse modo, o `onChangeHtml` do usuário é substituído e deixa de ser chamado. **Confirmado**.
|
|
85
|
+
- **Segurança:** o HTML carregado de arquivo vai para o editor sem sanitização explícita. O TipTap descarta o que não corresponde ao schema das extensões, mas o `cssText` extraído é repassado como veio. **Inferência**.
|
|
86
|
+
- **Seletor de tamanho de fonte:** é um `<select>` com `defaultValue="16px"`, não controlado, e não reflete o tamanho da seleção atual. **Confirmado**.
|