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