@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.
Files changed (225) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -2
  3. package/dist/adapters/claude.js +114 -0
  4. package/dist/adapters/codex.js +108 -0
  5. package/dist/adapters/index.js +17 -0
  6. package/dist/adapters/shared.js +142 -0
  7. package/dist/adapters/types.js +1 -0
  8. package/dist/cli.js +203 -0
  9. package/dist/commands/common.js +98 -0
  10. package/dist/commands/doctor.js +290 -0
  11. package/dist/commands/init.js +9 -0
  12. package/dist/commands/install.js +107 -0
  13. package/dist/commands/remove.js +54 -0
  14. package/dist/commands/review.js +127 -0
  15. package/dist/commands/status.js +73 -0
  16. package/dist/commands/update.js +8 -0
  17. package/dist/commands/validate.js +27 -0
  18. package/dist/core/apply.js +181 -0
  19. package/dist/core/blocks.js +64 -0
  20. package/dist/core/content.js +528 -0
  21. package/dist/core/env.js +40 -0
  22. package/dist/core/frontmatter.js +29 -0
  23. package/dist/core/hash.js +14 -0
  24. package/dist/core/inspect.js +51 -0
  25. package/dist/core/lock.js +124 -0
  26. package/dist/core/paths.js +65 -0
  27. package/dist/core/plan.js +242 -0
  28. package/dist/core/tools.js +62 -0
  29. package/dist/core/types.js +11 -0
  30. package/dist/core/updates.js +121 -0
  31. package/docs/arquitetura.md +80 -0
  32. package/docs/compatibilidade.md +50 -0
  33. package/docs/formato.md +155 -0
  34. package/docs/instalacao.md +105 -0
  35. package/docs/manutencao.md +115 -0
  36. package/package.json +43 -4
  37. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-enums.md +161 -0
  38. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -0
  39. package/seedgridKB/SeedGrid/Extensions/Indice.md +63 -0
  40. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Configuracao.md +124 -0
  41. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Enums.md +40 -0
  42. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Exemplos.md +97 -0
  43. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Visao-geral.md +114 -0
  44. package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao-Rust.md +69 -0
  45. package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao.md +88 -0
  46. package/seedgridKB/SeedGrid/Extensions/apikeys/Enums.md +33 -0
  47. package/seedgridKB/SeedGrid/Extensions/apikeys/Exemplos.md +121 -0
  48. package/seedgridKB/SeedGrid/Extensions/apikeys/Rust.md +126 -0
  49. package/seedgridKB/SeedGrid/Extensions/apikeys/Visao-geral.md +111 -0
  50. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -0
  51. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao.md +127 -0
  52. package/seedgridKB/SeedGrid/Extensions/audit/Enums.md +66 -0
  53. package/seedgridKB/SeedGrid/Extensions/audit/Exemplos.md +151 -0
  54. package/seedgridKB/SeedGrid/Extensions/audit/Rust.md +120 -0
  55. package/seedgridKB/SeedGrid/Extensions/audit/Visao-geral.md +114 -0
  56. package/seedgridKB/SeedGrid/Extensions/backup/Configuracao-Rust.md +136 -0
  57. package/seedgridKB/SeedGrid/Extensions/backup/Configuracao.md +319 -0
  58. package/seedgridKB/SeedGrid/Extensions/backup/Enums.md +131 -0
  59. package/seedgridKB/SeedGrid/Extensions/backup/Exemplos.md +210 -0
  60. package/seedgridKB/SeedGrid/Extensions/backup/Rust.md +135 -0
  61. package/seedgridKB/SeedGrid/Extensions/backup/Visao-geral.md +150 -0
  62. package/seedgridKB/SeedGrid/Extensions/billing/Configuracao-Rust.md +86 -0
  63. package/seedgridKB/SeedGrid/Extensions/billing/Configuracao.md +243 -0
  64. package/seedgridKB/SeedGrid/Extensions/billing/Enums.md +165 -0
  65. package/seedgridKB/SeedGrid/Extensions/billing/Exemplos.md +205 -0
  66. package/seedgridKB/SeedGrid/Extensions/billing/Rust.md +109 -0
  67. package/seedgridKB/SeedGrid/Extensions/billing/Visao-geral.md +181 -0
  68. package/seedgridKB/SeedGrid/Extensions/broker/Configuracao-Rust.md +40 -0
  69. package/seedgridKB/SeedGrid/Extensions/broker/Visao-geral.md +114 -0
  70. package/seedgridKB/SeedGrid/Extensions/cache/Configuracao-Rust.md +73 -0
  71. package/seedgridKB/SeedGrid/Extensions/cache/Configuracao.md +112 -0
  72. package/seedgridKB/SeedGrid/Extensions/cache/Enums.md +36 -0
  73. package/seedgridKB/SeedGrid/Extensions/cache/Exemplos.md +149 -0
  74. package/seedgridKB/SeedGrid/Extensions/cache/Rust.md +81 -0
  75. package/seedgridKB/SeedGrid/Extensions/cache/Visao-geral.md +90 -0
  76. package/seedgridKB/SeedGrid/Extensions/commons/Configuracao.md +107 -0
  77. package/seedgridKB/SeedGrid/Extensions/commons/Enums.md +105 -0
  78. package/seedgridKB/SeedGrid/Extensions/commons/Exemplos.md +141 -0
  79. package/seedgridKB/SeedGrid/Extensions/commons/Visao-geral.md +99 -0
  80. package/seedgridKB/SeedGrid/Extensions/exchange/Configuracao.md +122 -0
  81. package/seedgridKB/SeedGrid/Extensions/exchange/Enums.md +29 -0
  82. package/seedgridKB/SeedGrid/Extensions/exchange/Exemplos.md +82 -0
  83. package/seedgridKB/SeedGrid/Extensions/exchange/Visao-geral.md +118 -0
  84. package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao-Rust.md +110 -0
  85. package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao.md +157 -0
  86. package/seedgridKB/SeedGrid/Extensions/filemanagement/Exemplos.md +157 -0
  87. package/seedgridKB/SeedGrid/Extensions/filemanagement/Rust.md +70 -0
  88. package/seedgridKB/SeedGrid/Extensions/filemanagement/Visao-geral.md +88 -0
  89. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao-Rust.md +124 -0
  90. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao.md +195 -0
  91. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Enums.md +71 -0
  92. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Exemplos.md +149 -0
  93. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Rust.md +139 -0
  94. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Visao-geral.md +130 -0
  95. package/seedgridKB/SeedGrid/Extensions/notification/Configuracao.md +141 -0
  96. package/seedgridKB/SeedGrid/Extensions/notification/Enums.md +52 -0
  97. package/seedgridKB/SeedGrid/Extensions/notification/Exemplos.md +141 -0
  98. package/seedgridKB/SeedGrid/Extensions/notification/Visao-geral.md +113 -0
  99. package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao-Rust.md +67 -0
  100. package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao.md +94 -0
  101. package/seedgridKB/SeedGrid/Extensions/privacy/Enums.md +79 -0
  102. package/seedgridKB/SeedGrid/Extensions/privacy/Exemplos.md +172 -0
  103. package/seedgridKB/SeedGrid/Extensions/privacy/Rust.md +107 -0
  104. package/seedgridKB/SeedGrid/Extensions/privacy/Visao-geral.md +90 -0
  105. package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao-Rust.md +72 -0
  106. package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao.md +104 -0
  107. package/seedgridKB/SeedGrid/Extensions/realtime/Exemplos.md +104 -0
  108. package/seedgridKB/SeedGrid/Extensions/realtime/Rust.md +69 -0
  109. package/seedgridKB/SeedGrid/Extensions/realtime/Visao-geral.md +105 -0
  110. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao-Rust.md +68 -0
  111. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -0
  112. package/seedgridKB/SeedGrid/Extensions/resilience/Enums.md +96 -0
  113. package/seedgridKB/SeedGrid/Extensions/resilience/Exemplos.md +229 -0
  114. package/seedgridKB/SeedGrid/Extensions/resilience/Rust.md +80 -0
  115. package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -0
  116. package/seedgridKB/SeedGrid/Extensions/runtime/Configuracao-Rust.md +90 -0
  117. package/seedgridKB/SeedGrid/Extensions/runtime/Visao-geral.md +114 -0
  118. package/seedgridKB/SeedGrid/Extensions/security/Configuracao-Rust.md +327 -0
  119. package/seedgridKB/SeedGrid/Extensions/security/Configuracao.md +510 -0
  120. package/seedgridKB/SeedGrid/Extensions/security/Enums.md +95 -0
  121. package/seedgridKB/SeedGrid/Extensions/security/Exemplos.md +218 -0
  122. package/seedgridKB/SeedGrid/Extensions/security/Rust.md +203 -0
  123. package/seedgridKB/SeedGrid/Extensions/security/Visao-geral.md +131 -0
  124. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao-Rust.md +188 -0
  125. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao.md +345 -0
  126. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Enums.md +117 -0
  127. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Exemplos.md +205 -0
  128. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Rust.md +161 -0
  129. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Visao-geral.md +142 -0
  130. package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao-Rust.md +75 -0
  131. package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao.md +152 -0
  132. package/seedgridKB/SeedGrid/Extensions/whatsapp/Enums.md +198 -0
  133. package/seedgridKB/SeedGrid/Extensions/whatsapp/Exemplos.md +173 -0
  134. package/seedgridKB/SeedGrid/Extensions/whatsapp/Rust.md +83 -0
  135. package/seedgridKB/SeedGrid/Extensions/whatsapp/Visao-geral.md +99 -0
  136. package/seedgridKB/SeedGrid/Mapa-dos-repositorios.md +112 -0
  137. package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -0
  138. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/API.md +257 -0
  139. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Exemplos.md +307 -0
  140. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Visao-geral.md +51 -0
  141. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/API.md +174 -0
  142. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Exemplos.md +236 -0
  143. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Visao-geral.md +76 -0
  144. package/seedgridKB/SeedGrid/SeedGrid-components/digits/API.md +339 -0
  145. package/seedgridKB/SeedGrid/SeedGrid-components/digits/Exemplos.md +311 -0
  146. package/seedgridKB/SeedGrid/SeedGrid-components/digits/Visao-geral.md +57 -0
  147. package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +125 -0
  148. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Exemplos.md +116 -0
  149. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -0
  150. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/API.md +490 -0
  151. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Exemplos.md +544 -0
  152. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Visao-geral.md +69 -0
  153. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/API.md +113 -0
  154. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Exemplos.md +159 -0
  155. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Visao-geral.md +92 -0
  156. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/API.md +516 -0
  157. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -0
  158. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Visao-geral.md +80 -0
  159. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/API.md +615 -0
  160. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Exemplos.md +384 -0
  161. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral.md +111 -0
  162. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/API.md +661 -0
  163. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Exemplos.md +312 -0
  164. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -0
  165. package/seedgridKB/SeedGrid/SeedGrid-components/layout/API.md +1090 -0
  166. package/seedgridKB/SeedGrid/SeedGrid-components/layout/Exemplos.md +1172 -0
  167. package/seedgridKB/SeedGrid/SeedGrid-components/layout/Visao-geral.md +98 -0
  168. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/Visao-geral.md +98 -0
  169. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-apikeys.md +118 -0
  170. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-audit.md +88 -0
  171. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-backup.md +131 -0
  172. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-platform.md +132 -0
  173. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-user.md +120 -0
  174. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-login-tenancy.md +119 -0
  175. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-security.md +427 -0
  176. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-self-enter.md +104 -0
  177. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-subdomain-tenancy.md +110 -0
  178. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/API.md +490 -0
  179. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +561 -0
  180. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Visao-geral.md +82 -0
  181. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/Visao-geral.md +68 -0
  182. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-commons.md +61 -0
  183. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-core.md +140 -0
  184. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-playground.md +112 -0
  185. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-theme.md +97 -0
  186. package/seedgridKB/SeedGrid/SeedGrid-components/providers/API.md +177 -0
  187. package/seedgridKB/SeedGrid/SeedGrid-components/providers/Exemplos.md +332 -0
  188. package/seedgridKB/SeedGrid/SeedGrid-components/providers/Visao-geral.md +106 -0
  189. package/seedgridKB/SeedGrid/SeedGrid-components/showcase.md +70 -0
  190. package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +53 -0
  191. package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +45 -0
  192. package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +43 -0
  193. package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +41 -0
  194. package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +44 -0
  195. package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +40 -0
  196. package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +78 -0
  197. package/seedgridKB/SeedGrid/Toolkit/references/glossario.md +15 -0
  198. package/seedgridKB/SeedGrid/Toolkit/references/modos-shared-native.md +27 -0
  199. package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +54 -0
  200. package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +39 -0
  201. package/seedgridKB/SeedGrid/Toolkit/rules/formato-entrega.md +29 -0
  202. package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +47 -0
  203. package/seedgridKB/SeedGrid/Toolkit/rules/personalizacao-local.md +22 -0
  204. package/seedgridKB/SeedGrid/Toolkit/skills/planejar-mudanca/SKILL.md +38 -0
  205. package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/SKILL.md +33 -0
  206. package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/references/checklist.md +25 -0
  207. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-backend-crud/SKILL.md +29 -0
  208. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-bump/SKILL.md +26 -0
  209. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/SKILL.md +221 -0
  210. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/agents/openai.yaml +4 -0
  211. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/checklist.md +31 -0
  212. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/patterns.md +185 -0
  213. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/routing.md +66 -0
  214. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/SKILL.md +56 -0
  215. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +4 -0
  216. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/checklist.md +32 -0
  217. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/steps.md +114 -0
  218. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-review/SKILL.md +61 -0
  219. package/seedgridKB/SeedGrid/Toolkit/skills/validar-mudanca/SKILL.md +29 -0
  220. package/seedgridKB/SeedGrid/Toolkit/templates/decisao-arquitetura.md +29 -0
  221. package/seedgridKB/SeedGrid/Toolkit/templates/especificacao-tarefa.md +32 -0
  222. package/seedgridKB/SeedGrid/Toolkit/templates/relatorio-validacao.md +30 -0
  223. package/seedgridKB/SeedGrid/Versoes.md +64 -0
  224. package/seedgridKB/SeedGrid/Visao-geral.md +35 -0
  225. 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**.