@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,516 @@
1
+ ---
2
+ tags: [seedgrid, front, component, gadgets]
3
+ fonte: front/seedgrid-fe-components/packages/seedgrid-fe-components/src/gadgets
4
+ branch: main
5
+ commit: ad30fc11de
6
+ analisado-em: 2026-10-14
7
+ ---
8
+
9
+ # API — gadgets (`gadgets`)
10
+
11
+ Visão geral: [[SeedGrid/SeedGrid-components/gadgets/Visao-geral|Gadgets — visão geral]] · Exemplos: [[SeedGrid/SeedGrid-components/gadgets/Exemplos|Gadgets — exemplos]] · Dígitos usados pelo relógio: [[SeedGrid/SeedGrid-components/digits/API|API dos dígitos]]
12
+
13
+ > **Como ler as tabelas.** Geradas a partir do tipo TypeScript real do 1º parâmetro de cada componente (TS checker, commit `ad30fc11de`) — lista completa das props próprias. **Padrão**: valor sem marca = inicializador na desestruturação do componente (Confirmado); `ᶠ` = fallback interno `??` no corpo do componente (Confirmado, expressão pode estar abreviada); `ᵇ` = padrão aplicado pelo componente base para o qual a prop é repassada; `ᵐ` = declarado só no `*.meta.ts`; `ˢ` = declarado só na tabela de props do showcase (`ᵐ`/`ˢ` = Não confirmado no código); `—` = sem padrão. **Descrição**: JSDoc > `*.meta.ts` > tabela do showcase (textos originais, sem acento quando assim na fonte); *(Inferência)* = escrita a partir da leitura do código. **Obrigatória** = prop não opcional no tipo.
14
+
15
+ Textos padrão (títulos, `aria-label`, placeholders) vêm do i18n do pacote (`useComponentsI18n` + chaves `components.gadgets.*`) — ver [[SeedGrid/SeedGrid-components/fundamentos/API|API › i18n]].
16
+
17
+ ## SgCalendar
18
+
19
+ Calendário mensal (1–12 meses lado a lado) dentro de um `SgCard` recolhível e arrastável, com seleção controlada/não controlada, limites e regra de desabilitação. Fonte: `src/gadgets/calendar/SgCalendar.tsx` → `SgCalendar`.
20
+
21
+ ### Import
22
+ ```tsx
23
+ import { SgCalendar, type SgCalendarProps, type SgCalendarWeekdayFormat } from "@seedgrid/fe-components";
24
+ ```
25
+
26
+ ### Props
27
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
28
+ |---|---|---|---|---|
29
+ | `defaultValue` | `Date \| string` | — (sem valor: hoje) | Não | Data selecionada inicial no modo não controlado; aceita `Date` ou string parseável. |
30
+ | `value` | `Date \| string` | — | Não | Data selecionada de forma controlada (ativa o modo controlado quando `!== undefined`; valor não parseável cai para hoje). |
31
+ | `onValueChange` | `(date: Date) => void` | — | Não | Callback disparado ao selecionar uma data. |
32
+ | `viewDate` | `Date \| string` | — | Não | Mes visivel de forma controlada. |
33
+ | `defaultViewDate` | `Date \| string` | — (mês de `defaultValue` ou de hoje) | Não | Mes visivel (controlado ou inicial) e callback de navegacao. |
34
+ | `onViewDateChange` | `(viewDate: Date) => void` | — | Não | Disparado ao navegar entre meses (anterior/próximo, atalho Hoje, ou ao selecionar dia de outro mês) com o 1º dia do mês. |
35
+ | `locale` | `string` | `"pt-BR"` | Não | Locale usado para formatacao de mes e dias. |
36
+ | `weekStartsOn` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6` | `0` | Não | Primeiro dia da semana (0 = domingo … 6 = sábado). |
37
+ | `weekdayFormat` | `SgCalendarWeekdayFormat` = `"narrow" \| "short" \| "long"` | `"narrow"` | Não | Formato textual dos dias da semana (narrow, short, long). |
38
+ | `numberOfMonths` | `number` | `1` | Não | Quantidade de meses visiveis ao mesmo tempo (limitado a 1–12). |
39
+ | `monthsPerLine` | `number` | `3` | Não | Quantidade de meses por linha antes de quebrar (limitado a 1–12 e a `numberOfMonths`). |
40
+ | `monthMinWidth` | `number \| string` | — (`20.75rem` com 1 coluna; `16rem` com várias) | Não | Largura minima de cada mes (numero em px ou string CSS, ex.: 280 ou 18rem). |
41
+ | `showAdjacentMonths` | `boolean` | `true` | Não | Exibe/oculta dias de meses adjacentes na grade. |
42
+ | `minDate` | `Date \| string` | — | Não | Limite minimo de selecao. |
43
+ | `maxDate` | `Date \| string` | — | Não | Limite maximo de selecao. |
44
+ | `isDateDisabled` | `(date: Date) => boolean` | — | Não | Regra adicional para desabilitar datas especificas. |
45
+ | `showTodayShortcut` | `boolean` | `true` | Não | Mostra/oculta o botao de atalho para voltar para hoje. |
46
+ | `cardTitle` | `React.ReactNode` | `?? t(i18n, "components.gadgets.calendar.title")` ᶠ | Não | Configura titulo e props do SgCard do gadget. |
47
+ | `cardProps` | `Omit<SgCardProps, "children" \| "title">` | — | Não | Props repassadas ao `SgCard` que envolve o calendário (o componente já define `collapsible`, `defaultOpen`, `draggable`, `cardStyle="outlined"` etc., sobrescrevíveis aqui). |
48
+
49
+ - **Atributos DOM herdados**: o tipo é `Omit<React.HTMLAttributes<HTMLDivElement>, "children" \| "onChange"> & { ... }`; acrescenta 275 props de `@types/react` (`HTMLAttributes` 54, `AriaAttributes` 53, `DOMAttributes` 168). Não listadas individualmente — ver contrato base `React.HTMLAttributes` em `@types/react`.
50
+
51
+ Os atributos DOM herdados (`...rest`) e `className`/`style` vão para o `div` interno do calendário (dentro do card), não para o card. `className`/`style` do card devem ir em `cardProps`. Confirmado.
52
+
53
+ ### Eventos e callbacks
54
+ | Callback | Assinatura | Quando dispara |
55
+ |---|---|---|
56
+ | `onValueChange` | `(date: Date) => void` | Clique em dia habilitado, ou botão "Hoje" quando hoje não está desabilitado. Recebe cópia da data (meia-noite local). |
57
+ | `onViewDateChange` | `(viewDate: Date) => void` | Navegação anterior/próximo, botão "Hoje", ou seleção de dia de outro mês. Recebe o 1º dia do mês. |
58
+ | `isDateDisabled` | `(date: Date) => boolean` | Avaliado por célula, além de `minDate`/`maxDate`. |
59
+
60
+ Modos: `value`/`viewDate` definidos ⇒ controlado; caso contrário estado interno inicializado por `defaultValue`/`defaultViewDate`. Confirmado.
61
+
62
+ ### Ref
63
+ Não aceita ref (componente de função sem `forwardRef`).
64
+
65
+ ### Children, slots e composição
66
+ Sem `children` (omitido do tipo). Composição: renderiza `SgCard` (ver [[SeedGrid/SeedGrid-components/layout/API|API de layout › SgCard]]) com `title={cardTitle}` e as props de `cardProps`.
67
+
68
+ ### Contexto, providers e hooks
69
+ Consome `useComponentsI18n()` (rótulos). Nenhum provider obrigatório.
70
+
71
+ ### Acessibilidade
72
+ Botões de navegação com `aria-label` traduzidos (mês anterior/próximo, ir para hoje) e ícones `aria-hidden`; células de dia são `<button>` com `disabled` e `aria-pressed` no selecionado. Não há navegação por setas na grade nem `role="grid"`. Confirmado.
73
+
74
+ ### Tipos auxiliares exportados
75
+ `SgCalendarWeekdayFormat = "narrow" | "short" | "long"`.
76
+
77
+ ## SgClock
78
+
79
+ Relógio digital (9 estilos, reaproveitando os [[SeedGrid/SeedGrid-components/digits/Visao-geral|dígitos animados]]) ou analógico com temas SVG, dentro de um `SgCard`. Fonte: `src/gadgets/clock/SgClock.tsx` → `SgClock`.
80
+
81
+ ### Import
82
+ ```tsx
83
+ import { SgClock, type SgClockProps, type SgClockDigitalStyle } from "@seedgrid/fe-components";
84
+ ```
85
+
86
+ ### Props
87
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
88
+ |---|---|---|---|---|
89
+ | `clockStyle` | `"digital" \| "analog"` | `"digital"` | Não | Modo principal de exibicao do relogio. |
90
+ | `size` | `"sm" \| "md" \| "lg" \| number` | `"md"` | Não | Escala visual do relogio. No analógico: `sm`=140, `md`=240, `lg`=320 px ou número em px. |
91
+ | `initialServerTime` | `string` | — | Não | Seed opcional de hora ISO para sincronizar o ponto inicial com o servidor. Ignorado quando há `SgTimeProvider` acima (o contexto tem precedência). |
92
+ | `timezone` | `string` | — (fuso do navegador) | Não | Timezone IANA usada no calculo da hora exibida (via `Intl.DateTimeFormat`). |
93
+ | `locale` | `string` | `"pt-BR"` | Não | Locale usado para formatacao da hora. |
94
+ | `format` | `"12h" \| "24h"` | `"24h"` | Não | Formato horario do relogio digital (`12h` exibe AM/PM localizado). |
95
+ | `showSeconds` | `boolean` | `true` | Não | Exibe ou oculta os segundos. |
96
+ | `digitalStyle` | `SgClockDigitalStyle` = `"default" \| "fade" \| "discard" \| "segment" \| "sevenSegment" \| "roller3d" \| "flip" \| "matrix" \| "neon"` | `"default"` | Não | Estilo visual do relogio digital. |
97
+ | `secondHandMode` | `"step" \| "smooth"` | `"step"` | Não | Comportamento do ponteiro de segundos no analogico (`step` salta; `smooth` usa milissegundos). |
98
+ | `themeId` | `string` | `"classic"` | Não | ID do tema do relógio analógico, resolvido pelo `SgClockThemeProvider` (se houver) ou pelo registro global; fallback `"classic"`. |
99
+ | `theme` | `SgClockTheme` | — | Não | Tema inline (`SgClockTheme`) para o relógio analógico; tem precedência sobre `themeId`. |
100
+ | `className` | `string` | — | Não | Classe extra no container do relogio. |
101
+ | `style` | `React.CSSProperties` | — | Não | Inline style extra no container do relogio. |
102
+ | `centerOverlay` | `React.ReactNode` | — | Não | Conteudo opcional sobreposto ao centro do relogio analogico (ignorado no digital). |
103
+ | `cardTitle` | `React.ReactNode` | `?? t(i18n, "components.gadgets.clock.title")` ᶠ | Não | Titulo do SgCard usado pelo gadget. |
104
+ | `cardProps` | `Omit<SgCardProps, "children" \| "title">` | — | Não | Sobrescreve configuracoes padrao do SgCard do gadget. `dragPersistKey` padrão: `cardProps.dragPersistKey` → `sg-clock:<cardProps.id>` → `"sg-clock"`. |
105
+
106
+ Mapeamento `digitalStyle` → componente (Confirmado): `flip`→`SgFlipDigit`, `roller3d`→`SgRoller3DDigit`, `fade`→`SgFadeDigit`, `discard`→`SgDiscardDigit`, `matrix`→`SgMatrixDigit`, `neon`→`SgNeonDigit`, `sevenSegment`→`SgSevenSegmentDigit`, `segment`→`SgSegmentDigit`, `default`→texto simples.
107
+
108
+ ### Eventos e callbacks
109
+ Nenhum. Atualiza a cada segundo (intervalo interno) ou pelo `tick` do `SgTimeProvider`.
110
+
111
+ ### Ref
112
+ Não aceita ref.
113
+
114
+ ### Children, slots e composição
115
+ Sem `children`. Slot `centerOverlay` (analógico). Renderiza `SgCard` com `cardProps`.
116
+
117
+ ### Contexto, providers e hooks
118
+ - **`SgTimeProvider`** (opcional): se presente, a hora vem de `ctx.nowMs()` e `initialServerTime` da prop é ignorado; senão usa `initialServerTime` (ou `Date.now()`) + `performance.now()`. Confirmado (`useClockNowMs`).
119
+ - **`SgClockThemeProvider`** (opcional): o tema analógico é `theme ?? resolveTheme(resolver, themeId, "classic")`; sem provider usa `getTheme(themeId) ?? getTheme("classic")` do registro global. **Os temas embutidos não são registrados automaticamente** — sem `registerThemes(sgClockThemesBuiltIn)` (ou `theme` inline / `themes` no provider) o mostrador fica sem tema. Confirmado.
120
+ - `useComponentsI18n()` para rótulos.
121
+
122
+ ### Acessibilidade
123
+ Analógico: SVG com `aria-label` traduzido (`components.gadgets.clock.analogAria`). Digital: contêiner com `aria-label` traduzido (`components.gadgets.clock.digitalAria`). O rótulo não inclui a hora; não há `aria-live`. Confirmado.
124
+
125
+ ### Tipos auxiliares exportados
126
+ `SgClockDigitalStyle = "default" | "segment" | "sevenSegment" | "roller3d" | "flip" | "fade" | "matrix" | "neon" | "discard"`.
127
+
128
+ ## SgTimeProvider e `useSgTime`
129
+
130
+ Provider de relógio sincronizado com o servidor: parte de `initialServerTime` e avança com `performance.now()`; emite `tick` alinhado à virada de cada segundo. Fonte: `src/gadgets/clock/SgTimeProvider.tsx` → `SgTimeProvider`, `useSgTime`.
131
+
132
+ ### Import
133
+ ```tsx
134
+ import { SgTimeProvider, useSgTime, type SgTimeContextValue } from "@seedgrid/fe-components";
135
+ ```
136
+
137
+ ### Props
138
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
139
+ |---|---|---|---|---|
140
+ | `initialServerTime` | `string` | — | Sim | Timestamp inicial do servidor em formato ISO 8601. |
141
+ | `children` | `React.ReactNode` | — | Sim | Arvore que vai consumir tempo sincronizado via useSgTime. |
142
+
143
+ - Tipo de props declarado inline na assinatura de `SgTimeProvider` (não há tipo `SgTimeProviderProps` exportado).
144
+
145
+ ### Hook `useSgTime(): SgTimeContextValue`
146
+ Retorna o contexto do provider; **fora de um provider** retorna um fallback local memoizado `{ serverStartMs: Date.now(), perfStartMs: 0, tick: 0, nowMs: () => Date.now() }` (sem `tick`, portanto não re-renderiza sozinho). Confirmado.
147
+
148
+ | Campo de `SgTimeContextValue` | Tipo | Significado |
149
+ |---|---|---|
150
+ | `serverStartMs` | `number` | `Date.parse(initialServerTime)` |
151
+ | `perfStartMs` | `number` | `performance.now()` na hidratação |
152
+ | `tick` | `number` | Incrementa a cada segundo (1º disparo alinhado a `1000 - Date.now() % 1000`) — usar como dependência para re-render. |
153
+ | `nowMs` | `() => number` | Antes da hidratação: `serverStartMs`; depois: `serverStartMs + (performance.now() - perfStartMs)`. |
154
+
155
+ Interno (não exportado no barrel): `useSgTimeContext()` (retorna `null` sem provider), usado pelo `SgClock`.
156
+
157
+ ### Eventos, ref, slots
158
+ Sem eventos; sem ref; `children` obrigatório.
159
+
160
+ ### Acessibilidade
161
+ Não renderiza DOM próprio.
162
+
163
+ ## SgClockThemeProvider, resolvedor e registro de temas
164
+
165
+ Temas do relógio analógico: registro **global** (módulo `registry.ts`, `Map` em memória) + resolvedor por contexto com temas locais. Fontes: `src/gadgets/clock/themes/{provider.tsx,registry.ts,renderTheme.tsx,useDarkFlag.ts,builtins.tsx,types.ts}`.
166
+
167
+ ### Import
168
+ ```tsx
169
+ import {
170
+ SgClockThemeProvider, useSgClockThemeResolver, createThemeResolver,
171
+ registerTheme, registerThemes, getTheme, hasTheme, listThemes, unregisterTheme, clearThemes,
172
+ resolveTheme, ThemeLayer, useDarkFlag, sgClockThemesBuiltIn,
173
+ type SgClockTheme, type SgClockThemeRenderArgs, type SgClockThemeResolveMode, type SgClockThemeResolver
174
+ } from "@seedgrid/fe-components";
175
+ ```
176
+
177
+ ### Props de `SgClockThemeProvider`
178
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
179
+ |---|---|---|---|---|
180
+ | `value` | `SgClockThemeProviderValue` | — | Não | Configuração do resolvedor: `{ mode?: SgClockThemeResolveMode; fallbackThemeId?: string; themes?: SgClockTheme[] }`. Padrões internos: `mode` `"fallback"`, `fallbackThemeId` `"classic"`, `themes` `[]` (temas locais, que sobrepõem os globais de mesmo `id`). |
181
+ | `children` | `React.ReactNode` | — | Sim | Arvore que vai consumir o resolver de temas. |
182
+
183
+ - Tipo de props declarado inline na assinatura de `SgClockThemeProvider` (não há tipo `SgClockThemeProviderProps` exportado).
184
+
185
+ O tipo do `value` (`SgClockThemeProviderValue`) é interno (não exportado). O resolvedor é recriado quando `value.mode`, `value.fallbackThemeId` ou a referência de `value.themes` mudam — memoize o array.
186
+
187
+ ### Funções e hooks exportados
188
+
189
+ | Símbolo | Assinatura | Comportamento (Confirmado) |
190
+ |---|---|---|
191
+ | `useSgClockThemeResolver` | `() => SgClockThemeResolver \| null` | Resolvedor do provider mais próximo; `null` fora de provider. |
192
+ | `createThemeResolver` | `(params?: { mode?: SgClockThemeResolveMode; fallbackThemeId?: string; localThemes?: SgClockTheme[] }) => SgClockThemeResolver` | Padrões `mode="fallback"`, `fallbackThemeId="classic"`. `resolve(id)`: local → global; se não achar e `mode="fallback"`, tenta `fallbackThemeId`; em `"strict"` retorna `null`. `list()`: globais + locais (locais sobrepõem), ordenados por `order ?? 999`. `registerLocal(theme)` lança `Error` sem `theme.id`. |
193
+ | `registerTheme` | `(theme: SgClockTheme) => void` | Registra/substitui no mapa global; lança `Error("registerTheme: theme.id is required")` sem `id`. |
194
+ | `registerThemes` | `(themes: SgClockTheme[]) => void` | `registerTheme` em lote. |
195
+ | `getTheme` | `(id: string) => SgClockTheme \| null` | Busca global. |
196
+ | `hasTheme` | `(id: string) => boolean` | Existe no global. |
197
+ | `listThemes` | `() => SgClockTheme[]` | Globais ordenados por `order ?? 999`. |
198
+ | `unregisterTheme` | `(id: string) => void` | Remove do global. |
199
+ | `clearThemes` | `() => void` | Esvazia o global. |
200
+ | `resolveTheme` | `(resolver: SgClockThemeResolver \| null, themeId: string, fallbackThemeId: string) => SgClockTheme \| null` | `resolver.resolve(themeId)`, depois `fallbackThemeId`. |
201
+ | `ThemeLayer` | componente `({ theme: SgClockTheme; args: SgClockThemeRenderArgs })` | Renderiza `theme.render(args)` e/ou o conteúdo interno do SVG em `theme.url` (baixado com `fetch(..., { cache: "force-cache" })`, cache por URL, injetado com `dangerouslySetInnerHTML`). Deve ficar dentro de um `<svg>` (viewBox 0 0 100 100). |
202
+ | `useDarkFlag` | `() => boolean` | `true` se `--sg-mode` = `dark`, ou classe `dark` no `<html>`, ou `prefers-color-scheme: dark`; observa mudanças (MutationObserver + matchMedia). |
203
+ | `sgClockThemesBuiltIn` | `SgClockTheme[]` | 10 temas: `classic`, `minimal`, `dark`, `seedgrid`, `music`, `music-notes`, `music-staff`, `roman-classic`, `roman-ornate`, `segment`. **Não são registrados automaticamente.** |
204
+
205
+ ### Tipos
206
+
207
+ | Tipo | Definição |
208
+ |---|---|
209
+ | `SgClockTheme` | `{ id: string; label?: string; tags?: string[]; render?: (args: SgClockThemeRenderArgs) => React.ReactNode; url?: string; order?: number }` |
210
+ | `SgClockThemeRenderArgs` | `{ size: number; dark: boolean }` |
211
+ | `SgClockThemeResolveMode` | `"strict" \| "fallback"` |
212
+ | `SgClockThemeResolver` | `{ resolve(id): SgClockTheme \| null; list(): SgClockTheme[]; registerLocal(theme): void; registerManyLocal(themes): void }` |
213
+
214
+ Segurança (Inferência): `url` é buscado e injetado como HTML sem sanitização — use apenas SVGs de origem confiável.
215
+
216
+ ## SgClockThemePicker
217
+
218
+ Seletor de tema com preview, lista (`role="listbox"`) e busca opcional (via `SgAutocomplete`). Fonte: `src/gadgets/clock/themes/SgClockThemePicker.tsx` → `SgClockThemePicker`.
219
+
220
+ ### Import
221
+ ```tsx
222
+ import { SgClockThemePicker } from "@seedgrid/fe-components";
223
+ ```
224
+ `SgClockThemePickerProps` **não** é exportado pelo barrel (só existe no arquivo). Confirmado.
225
+
226
+ ### Props
227
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
228
+ |---|---|---|---|---|
229
+ | `value` | `string` | — | Sim | ID do tema atualmente selecionado. |
230
+ | `onChange` | `(id: string) => void` | — | Sim | Callback disparado quando um novo tema e escolhido. |
231
+ | `label` | `string` | `?? t(i18n, "components.gadgets.clock.theme")` ᶠ | Não | Rotulo opcional exibido acima do seletor. |
232
+ | `placeholder` | `string` | `?? t(i18n, "components.gadgets.clock.selectTheme")` ᶠ | Não | Texto exibido quando nenhum tema valido esta resolvido. |
233
+ | `className` | `string` | — | Não | Classes adicionais no `div` raiz (que já tem `relative`). *(Inferência)* |
234
+ | `filter` | `(theme: SgClockTheme) => boolean` | — | Não | Filtro adicional sobre a lista de temas disponiveis. |
235
+ | `previewSize` | `number` | `56` | Não | Tamanho do preview visual de cada tema. |
236
+ | `searchable` | `boolean` | `true` | Não | Ativa busca textual na lista de temas. |
237
+ | `fallbackThemeId` | `string` | `"classic"` | Não | Tema usado quando o valor atual nao pode ser resolvido. |
238
+ | `defaultOpen` | `boolean` | `false` | Não | Abre a lista inicialmente no primeiro render. |
239
+
240
+ ### Eventos e callbacks
241
+ `onChange(id)` ao clicar numa opção ou selecionar um item na busca; fecha a lista em seguida. A lista também fecha com clique fora (`mousedown` no `document`). Confirmado.
242
+
243
+ ### Ref
244
+ Não aceita ref.
245
+
246
+ ### Children, slots e composição
247
+ Sem `children`. Usa `SgClockThemePreview` e `SgAutocomplete` (busca, quando `searchable`).
248
+
249
+ ### Contexto, providers e hooks
250
+ **Requer `SgClockThemeProvider`**: a lista vem de `resolver?.list() ?? []` — sem provider fica vazia. `useComponentsI18n()` para textos.
251
+
252
+ ### Acessibilidade
253
+ Botão gatilho com `aria-haspopup="listbox"`, `aria-expanded`, `aria-controls`; lista `role="listbox"` com opções `aria-selected`. Sem tratamento de `Escape` nem navegação por setas na lista (não encontrado). Coberto por `tests/gadgets.test.mjs` ("accessible listbox semantics"). Confirmado.
254
+
255
+ ## SgClockThemePreview
256
+
257
+ Miniatura SVG de um tema com ponteiros fixos (10:10:30 aprox.). Fonte: `src/gadgets/clock/themes/SgClockThemePreview.tsx` → `SgClockThemePreview`.
258
+
259
+ ### Import
260
+ ```tsx
261
+ import { SgClockThemePreview, type SgClockTheme } from "@seedgrid/fe-components";
262
+ ```
263
+ Não há tipo `SgClockThemePreviewProps` exportado.
264
+
265
+ ### Props
266
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
267
+ |---|---|---|---|---|
268
+ | `theme` | `SgClockTheme` | — | Sim | Tema visual usado na renderizacao do preview. |
269
+ | `size` | `number` | `64` | Não | Dimensao do preview quadrado em pixels. |
270
+ | `className` | `string` | `?? "block"` ᶠ | Não | Classes adicionais aplicadas ao SVG raiz. |
271
+
272
+ - Tipo de props declarado inline na assinatura de `SgClockThemePreview` (não há tipo `SgClockThemePreviewProps` exportado).
273
+
274
+ ### Eventos, ref, slots
275
+ Nenhum. Usa `useDarkFlag()` para `args.dark`.
276
+
277
+ ### Acessibilidade
278
+ SVG com `aria-hidden="true"` (decorativo). Confirmado.
279
+
280
+ ## SgLinearGauge
281
+
282
+ Medidor linear SVG (horizontal/vertical) com faixas, ticks, barra, ponteiro principal e ponteiros extras arrastáveis. Fonte: `src/gadgets/gauge/SgLinearGauge.tsx` → `SgLinearGauge`; matemática em `src/gadgets/gauge/math.ts` (interna).
283
+
284
+ ### Import
285
+ ```tsx
286
+ import {
287
+ SgLinearGauge, type SgLinearGaugeProps, type SgLinearGaugeRange,
288
+ type SgLinearGaugePointer, type SgLinearGaugePointerShape
289
+ } from "@seedgrid/fe-components";
290
+ ```
291
+
292
+ ### Props
293
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
294
+ |---|---|---|---|---|
295
+ | `min` | `number` | `0` | Não | Valor minimo da escala. |
296
+ | `max` | `number` | `100` | Não | Valor maximo da escala. |
297
+ | `value` | `number` | — | Não | Valor do ponteiro principal. |
298
+ | `defaultValue` | `number` | `min` | Não | Valor inicial do ponteiro principal no modo não controlado (usado quando `value` é `undefined`). |
299
+ | `onValueChange` | `(value: number) => void` | — | Não | Callback do ponteiro principal. |
300
+ | `pointers` | `SgLinearGaugePointer[]` | `[]` | Não | Ponteiros adicionais renderizados sobre o eixo. |
301
+ | `onPointerValueChange` | `(pointerId: string, value: number, pointer: SgLinearGaugePointer) => void` | — | Não | Disparado ao arrastar um ponteiro adicional (`draggable`), com `(pointerId, valor, ponteiro)`; o `id` padrão é `sg-linear-pointer-<índice>`. O ponteiro também chama seu próprio `onValueChange`. |
302
+ | `ranges` | `SgLinearGaugeRange[]` | `[]` | Não | Faixas coloridas aplicadas sobre a escala. |
303
+ | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | Não | Orientacao do gauge. |
304
+ | `isAxisInversed` | `boolean` | `false` | Não | Orientacao e direcao do eixo. |
305
+ | `showPrimaryPointer` | `boolean` | `true` | Não | Configuracoes do ponteiro primario (forma, cor, tamanho, arrastavel). |
306
+ | `primaryPointerShape` | `SgLinearGaugePointerShape` = `"circle" \| "triangle" \| "inverted-triangle" \| "diamond" \| "rect"` | `"triangle"` | Não | Forma do marcador do ponteiro principal. *(Inferência)* |
307
+ | `primaryPointerColor` | `string` | `"hsl(var(--primary))"` | Não | Cor do ponteiro principal. *(Inferência)* |
308
+ | `primaryPointerSize` | `number` | `11` | Não | Tamanho (px) do marcador do ponteiro principal. *(Inferência)* |
309
+ | `primaryPointerDraggable` | `boolean` | `false` | Não | Permite arrastar o ponteiro principal. |
310
+ | `barPointer` | `boolean` | `true` | Não | Barra preenchida ate o valor atual. |
311
+ | `barColor` | `string` | `"hsl(var(--primary))"` | Não | Barra preenchida ate o valor atual. |
312
+ | `barThickness` | `number` | `8` | Não | Barra preenchida ate o valor atual. |
313
+ | `showTicks` | `boolean` | `true` | Não | Exibe ticks da escala. |
314
+ | `showLabels` | `boolean` | `true` | Não | Exibe rotulos da escala. |
315
+ | `majorTickCount` | `number` | `5` | Não | Configuracao de marcacoes e rotulos. |
316
+ | `minorTicksPerInterval` | `number` | `1` | Não | Configuracao de marcacoes e rotulos. |
317
+ | `labelFormatter` | `(value: number) => React.ReactNode` | — | Não | Configuracao de marcacoes e rotulos. |
318
+ | `axisColor` | `string` | `"hsl(var(--border))"` | Não | Estilo do eixo principal. |
319
+ | `axisThickness` | `number` | `10` | Não | Estilo do eixo principal. |
320
+ | `width` | `number` | `orientation === "horizontal" ? 360 : 140` | Não | Dimensoes do SVG. |
321
+ | `height` | `number` | `orientation === "horizontal" ? 120 : 360` | Não | Dimensoes do SVG. |
322
+ | `animate` | `boolean` | `true` | Não | Configuracoes de animacao de transicao. |
323
+ | `animationDuration` | `number` | `350` | Não | Configuracoes de animacao de transicao. |
324
+ | `className` | `string` | — | Não | Estilizacao e acessibilidade. |
325
+ | `style` | `React.CSSProperties` | — | Não | Estilizacao e acessibilidade. |
326
+ | `ariaLabel` | `string` | `?? t(i18n, "components.gadgets.gauge.linearAria")` ᶠ | Não | Estilizacao e acessibilidade. |
327
+
328
+ ### Eventos e callbacks
329
+ | Callback | Assinatura | Quando dispara |
330
+ |---|---|---|
331
+ | `onValueChange` | `(value: number) => void` | Arraste do ponteiro principal (`primaryPointerDraggable`); valor limitado a `[min, max]`. |
332
+ | `onPointerValueChange` | `(pointerId: string, value: number, pointer: SgLinearGaugePointer) => void` | Arraste de ponteiro extra com `draggable: true`. |
333
+ | `SgLinearGaugePointer.onValueChange` | `(value: number) => void` | Mesmo momento, no próprio ponteiro. |
334
+ | `labelFormatter` | `(value: number) => React.ReactNode` | Formatação dos rótulos da escala. |
335
+
336
+ Ponteiros extras mantêm o valor arrastado em estado interno e ressincronizam quando `pointers[i].value` muda. Arraste por Pointer Events (`onPointerDown` + listeners de movimento). Confirmado.
337
+
338
+ ### Ref
339
+ Não aceita ref.
340
+
341
+ ### Acessibilidade
342
+ Raiz `role="meter"` com `aria-valuemin/max/now` e `aria-label` (`ariaLabel` ou texto i18n). **Sem suporte a teclado** para arrastar (sem `tabIndex`/`onKeyDown`). Confirmado.
343
+
344
+ ### Tipos auxiliares exportados
345
+ | Tipo | Campos |
346
+ |---|---|
347
+ | `SgLinearGaugeRange` | `start: number; end: number; color?: string; thickness?: number; opacity?: number; label?: React.ReactNode` |
348
+ | `SgLinearGaugePointer` | `id?: string; value: number; color?: string; size?: number; shape?: SgLinearGaugePointerShape; draggable?: boolean; onValueChange?: (value: number) => void; label?: React.ReactNode` |
349
+ | `SgLinearGaugePointerShape` | `"triangle" \| "inverted-triangle" \| "circle" \| "diamond" \| "rect"` |
350
+
351
+ ## SgRadialGauge
352
+
353
+ Medidor radial SVG (arco configurável) com faixas, ticks, ponteiro principal (needle/marker/range), ponteiros extras, anotações e conteúdo central. Fonte: `src/gadgets/gauge/SgRadialGauge.tsx` → `SgRadialGauge`.
354
+
355
+ ### Import
356
+ ```tsx
357
+ import {
358
+ SgRadialGauge, type SgRadialGaugeProps, type SgRadialGaugeRange, type SgRadialGaugePointer,
359
+ type SgRadialGaugePointerType, type SgRadialGaugeMarkerShape, type SgRadialGaugeAnnotation
360
+ } from "@seedgrid/fe-components";
361
+ ```
362
+
363
+ ### Props
364
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
365
+ |---|---|---|---|---|
366
+ | `min` | `number` | `0` | Não | Valor minimo da escala. |
367
+ | `max` | `number` | `100` | Não | Valor maximo da escala. |
368
+ | `value` | `number` | — | Não | Valor do ponteiro principal. |
369
+ | `defaultValue` | `number` | `min` | Não | Valor inicial do ponteiro principal no modo não controlado (usado quando `value` é `undefined`). |
370
+ | `onValueChange` | `(value: number) => void` | — | Não | Callback do ponteiro principal. |
371
+ | `pointers` | `SgRadialGaugePointer[]` | `[]` | Não | Ponteiros adicionais do tipo needle, marker ou range. |
372
+ | `onPointerValueChange` | `(pointerId: string, value: number, pointer: SgRadialGaugePointer) => void` | — | Não | Disparado ao arrastar um ponteiro adicional (`draggable`), com `(pointerId, valor, ponteiro)`; o `id` padrão é `sg-radial-pointer-<índice>`. |
373
+ | `ranges` | `SgRadialGaugeRange[]` | `[]` | Não | Faixas coloridas sobre o arco principal. |
374
+ | `annotations` | `SgRadialGaugeAnnotation[]` | `[]` | Não | Anotacoes posicionadas por valor ou angulo. |
375
+ | `startAngle` | `number` | `135` | Não | Angulo inicial do arco. |
376
+ | `endAngle` | `number` | `45` | Não | Angulo final do arco. |
377
+ | `isAxisInversed` | `boolean` | `false` | Não | Configuracao do arco e direcao da escala. |
378
+ | `showPrimaryPointer` | `boolean` | `true` | Não | Configuracoes do ponteiro primario (needle/marker/range). |
379
+ | `primaryPointerType` | `SgRadialGaugePointerType` = `"needle" \| "marker" \| "range"` | `"needle"` | Não | Tipo visual do ponteiro principal. |
380
+ | `primaryPointerColor` | `string` | `"hsl(var(--primary))"` | Não | Cor do ponteiro principal. *(Inferência)* |
381
+ | `primaryPointerWidth` | `number` | `3` | Não | Espessura (px) do ponteiro principal tipo needle/range. *(Inferência)* |
382
+ | `primaryPointerSize` | `number` | `12` | Não | Tamanho (px) do ponteiro principal (cabeça do needle ou marcador). *(Inferência)* |
383
+ | `primaryPointerShape` | `SgRadialGaugeMarkerShape` = `"square" \| "circle" \| "triangle" \| "diamond"` | `"circle"` | Não | Forma do marcador quando `primaryPointerType="marker"`. *(Inferência)* |
384
+ | `primaryPointerDraggable` | `boolean` | `false` | Não | Permite arrastar o ponteiro principal (atualiza o valor e dispara `onValueChange`). *(Inferência)* |
385
+ | `primaryPointerLabel` | `React.ReactNode` | — | Não | Rótulo do ponteiro principal; se omitido, o needle principal mostra o valor arredondado. *(Inferência)* |
386
+ | `showTicks` | `boolean` | `true` | Não | Marcacoes e rotulos da escala. |
387
+ | `showLabels` | `boolean` | `true` | Não | Marcacoes e rotulos da escala. |
388
+ | `majorTickCount` | `number` | `5` | Não | Marcacoes e rotulos da escala. |
389
+ | `minorTicksPerInterval` | `number` | `1` | Não | Marcacoes e rotulos da escala. |
390
+ | `labelFormatter` | `(value: number) => React.ReactNode` | — | Não | Marcacoes e rotulos da escala. |
391
+ | `axisColor` | `string` | `"hsl(var(--border))"` | Não | Estilo do anel principal, espessura e conteudo central. |
392
+ | `ringThickness` | `number` | `?? axisWidth` ᶠ | Não | Estilo do anel principal, espessura e conteudo central. |
393
+ | `axisWidth` | `number` | `14` | Não | Estilo do anel principal, espessura e conteudo central. |
394
+ | `radiusFactor` | `number` | `0.9` | Não | Estilo do anel principal, espessura e conteudo central. |
395
+ | `centerContent` | `React.ReactNode` | — (rótulo i18n `components.gadgets.gauge.value` + valor arredondado) | Não | Conteúdo central do gauge; substitui o bloco padrão. |
396
+ | `width` | `number` | `300` | Não | Dimensoes do SVG. |
397
+ | `height` | `number` | `300` | Não | Dimensoes do SVG. |
398
+ | `animate` | `boolean` | `true` | Não | Configuracoes da animacao de transicao. |
399
+ | `animationDuration` | `number` | `350` | Não | Configuracoes da animacao de transicao. |
400
+ | `className` | `string` | — | Não | Estilizacao e acessibilidade. |
401
+ | `style` | `React.CSSProperties` | — | Não | Estilizacao e acessibilidade. |
402
+ | `ariaLabel` | `string` | `?? t(i18n, "components.gadgets.gauge.radialAria")` ᶠ | Não | Estilizacao e acessibilidade. |
403
+
404
+ Ângulos em graus no sistema SVG (0° = direita, sentido horário); o arco vai de `startAngle` a `endAngle` no sentido horário (sweep 0 ⇒ 360°). Confirmado (`toSweep`).
405
+
406
+ ### Eventos e callbacks
407
+ Mesma semântica do linear: `onValueChange` (ponteiro principal arrastável), `onPointerValueChange(pointerId, value, pointer)` e `SgRadialGaugePointer.onValueChange` (ponteiros extras `draggable`), `labelFormatter`. IDs padrão `sg-radial-pointer-<índice>`. Confirmado.
408
+
409
+ ### Ref
410
+ Não aceita ref.
411
+
412
+ ### Acessibilidade
413
+ `role="meter"` + `aria-valuemin/max/now` + `aria-label` (`ariaLabel` ou i18n). Sem teclado. Confirmado.
414
+
415
+ ### Tipos auxiliares exportados
416
+ | Tipo | Campos |
417
+ |---|---|
418
+ | `SgRadialGaugeRange` | `start: number; end: number; color?: string; width?: number; opacity?: number` |
419
+ | `SgRadialGaugePointer` | `id?: string; type?: SgRadialGaugePointerType; value: number; color?: string; width?: number; size?: number; shape?: SgRadialGaugeMarkerShape; draggable?: boolean; onValueChange?: (value: number) => void; label?: React.ReactNode` (padrões internos: `type` `"needle"`; `size` 10 needle / 12 demais; cor `hsl(var(--secondary))` para extras) |
420
+ | `SgRadialGaugePointerType` | `"needle" \| "marker" \| "range"` |
421
+ | `SgRadialGaugeMarkerShape` | `"circle" \| "diamond" \| "triangle" \| "square"` |
422
+ | `SgRadialGaugeAnnotation` | `id?: string; value?: number; angle?: number; radiusFactor?: number; content: React.ReactNode` |
423
+
424
+ ## SgQRCode
425
+
426
+ QR Code SVG (via `qrcode.react` → `QRCodeSVG`) com logo central opcional e fallback para valor vazio/erro. Fonte: `src/gadgets/qr-code/SgQRCode.tsx` → `SgQRCode`.
427
+
428
+ ### Import
429
+ ```tsx
430
+ import { SgQRCode, type SgQRCodeProps, type SgQRCodeErrorCorrectionLevel } from "@seedgrid/fe-components";
431
+ ```
432
+
433
+ ### Props
434
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
435
+ |---|---|---|---|---|
436
+ | `value` | `string` | — | Não | Valor textual codificado no QR Code (aplicado `trim()`; vazio → `emptyFallback` ou nada). |
437
+ | `size` | `number` | `220` | Não | Tamanho do QR em pixels (mínimo efetivo 64). |
438
+ | `margin` | `number` | `2` | Não | Margem interna do QR Code. |
439
+ | `fgColor` | `string` | `"#000000"` | Não | Cor principal do QR Code. |
440
+ | `bgColor` | `string` | `"#FFFFFF"` | Não | Cor de fundo do QR Code. |
441
+ | `errorCorrectionLevel` | `SgQRCodeErrorCorrectionLevel` = `"L" \| "M" \| "Q" \| "H"` | `"H"` | Não | Nível de correção de erro (L/M/Q/H) repassado como `level` ao gerador. |
442
+ | `logoSrc` | `string` | — | Não | URL da logo exibida no centro do QR. |
443
+ | `logoAlt` | `string` | `"Logo"` | Não | Texto alternativo da imagem do logo. |
444
+ | `logoSize` | `number` | `?? safeSize * 0.22` ᶠ | Não | Tamanho do logo em px (limitado entre 18 e `size`). *(Inferência)* |
445
+ | `logoPadding` | `number` | `6` | Não | Espaçamento interno (px) do contêiner do logo. *(Inferência)* |
446
+ | `logoBackgroundColor` | `string` | `"#FFFFFF"` | Não | Cor de fundo do contêiner do logo. *(Inferência)* |
447
+ | `logoBorderRadius` | `number` | `12` | Não | Raio da borda (px) do contêiner do logo. *(Inferência)* |
448
+ | `imageClassName` | `string` | — | Não | Classes adicionais no SVG do QR Code. *(Inferência)* |
449
+ | `logoClassName` | `string` | — | Não | Classes adicionais no contêiner (`span`) do logo. *(Inferência)* |
450
+ | `emptyFallback` | `React.ReactNode` | — | Não | Conteúdo exibido quando `value` está vazio; sem ele o componente retorna `null`. |
451
+ | `onGenerateError` | `(error: Error) => void` | — | Não | Chamado quando a geração do QR lança erro (capturado por error boundary interno, que mostra um placeholder). *(Inferência)* |
452
+
453
+ - **Atributos DOM herdados**: o tipo é `Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & { ... }`; acrescenta 277 props de `@types/react` (`HTMLAttributes` 55, `AriaAttributes` 53, `DOMAttributes` 169). Não listadas individualmente — ver contrato base `React.HTMLAttributes` em `@types/react`.
454
+
455
+ Atributos DOM herdados vão para o `div` raiz via `{...rest}`. Confirmado.
456
+
457
+ ### Eventos e callbacks
458
+ `onGenerateError(error)` — chamado por um error boundary interno (`QrErrorBoundary.componentDidCatch`) se a geração falhar; o boundary mostra um placeholder `animate-pulse` e se reseta quando valor/tamanho/margem/cores/nível mudam. Confirmado.
459
+
460
+ ### Ref
461
+ Não aceita ref.
462
+
463
+ ### Acessibilidade
464
+ O SVG recebe `title` traduzido (`components.gadgets.qrcode.title`); logo é `<img alt={logoAlt}>`; placeholder de erro `aria-hidden`. Confirmado.
465
+
466
+ ### Tipos auxiliares exportados
467
+ `SgQRCodeErrorCorrectionLevel = "L" | "M" | "Q" | "H"`.
468
+
469
+ ## SgStringAnimator
470
+
471
+ Anima uma string até outra, caractere por caractere, usando um dos dígitos animados por posição. Fonte: `src/gadgets/string-animator/SgStringAnimator.tsx` → `SgStringAnimator`, `SG_STRING_ANIMATOR_DEFAULT_CHARSET`.
472
+
473
+ ### Import
474
+ ```tsx
475
+ import {
476
+ SgStringAnimator, SG_STRING_ANIMATOR_DEFAULT_CHARSET,
477
+ type SgStringAnimatorProps, type SgStringAnimatorRef, type SgStringAnimatorStyle, type SgStringAnimatorAlign
478
+ } from "@seedgrid/fe-components";
479
+ ```
480
+
481
+ ### Props
482
+ | Prop | Tipo | Padrão | Obrigatória | Descrição |
483
+ |---|---|---|---|---|
484
+ | `sourceString` | `string` | — | Sim | String exibida antes da animacao |
485
+ | `targetString` | `string` | — | Sim | String de destino — o componente anima ate ela |
486
+ | `stringAnimatorStyle` | `SgStringAnimatorStyle` = `"fade" \| "discard" \| "roller3d" \| "flip" \| "matrix" \| "neon"` | `"roller3d"` | Não | Estilo de animacao por caractere. - "roller3d": tambor vertical (SgRoller3DDigit) - "flip": vira o card (SgFlipDigit) - "neon": brilho neon com fade (SgNeonDigit) - "fade": apaga e acende (SgFadeDigit) - "discard": folha descartada voando (SgDiscardDigit) - "matrix": pontos em matriz LED (SgMatrixDigit) |
487
+ | `velocity` | `number` | `50` | Não | Velocidade de 1 (muito lento) a 100 (muito rapido). Controla o intervalo de tempo entre a troca de cada caractere. |
488
+ | `emptyChar` | `string` | `" "` | Não | Caractere utilizado para preencher as posicoes extras quando sourceString e targetString possuem comprimentos diferentes. |
489
+ | `alignTo` | `SgStringAnimatorAlign` = `"right" \| "left"` | `"left"` | Não | Alinhamento das strings: - "left" — preenche a direita com emptyChar (ideal para texto/nomes) - "right" — preenche a esquerda com emptyChar (ideal para numeros) |
490
+ | `autoStart` | `boolean` | `false` | Não | Se true, inicia a animacao automaticamente quando o componente monta e sempre que targetString mudar. |
491
+ | `fontSize` | `number` | `32` | Não | Tamanho da fonte em pixels — controla a escala de cada digito. |
492
+ | `charset` | `string[]` | `SG_STRING_ANIMATOR_DEFAULT_CHARSET` | Não | Conjunto de caracteres validos para o SgRoller3DDigit. Deve conter todos os caracteres que podem aparecer em sourceString, targetString e emptyChar. Ignorado quando style != "roller3d". |
493
+ | `color` | `string` | — | Não | Cor principal do texto/ponto — aplicada nos estilos "neon", "fade", "discard" e "matrix". |
494
+ | `backgroundColor` | `string` | — | Não | Cor de fundo — aplicada nos estilos "neon", "fade", "discard" e "matrix". |
495
+ | `className` | `string` | — | Não | Classes CSS adicionais no container externo |
496
+
497
+ - Aceita `ref` (via `React.forwardRef`) e `key`.
498
+
499
+ Detalhes (Confirmado): as duas strings são preenchidas até o maior comprimento com `emptyChar` (1º caractere) conforme `alignTo`; intervalo por caractere = `round(600 − (clamp(velocity,1,100) − 1) × 5.65)` ms (≈600 ms a ≈41 ms); com `alignTo="right"` a animação começa pela posição mais à direita. Mudar `sourceString` cancela a animação e reinicia a exibição. `color`/`backgroundColor` só se aplicam a neon/fade/discard/matrix; `charset` só a `roller3d` (é passado como `items`).
500
+
501
+ ### Eventos e callbacks
502
+ Nenhum callback (não há evento de fim de animação).
503
+
504
+ ### Ref
505
+ `React.forwardRef<SgStringAnimatorRef, SgStringAnimatorProps>`; `SgStringAnimatorRef = { startAnimation: () => void }` — inicia (ou reinicia) a animação de `sourceString` até `targetString`. Com `autoStart`, dispara ao montar e quando `targetString` (preenchida) muda. Confirmado.
506
+
507
+ ### Children, slots e composição
508
+ Sem `children`. Compõe `SgRoller3DDigit`, `SgFlipDigit`, `SgNeonDigit`, `SgFadeDigit`, `SgDiscardDigit`, `SgMatrixDigit`.
509
+
510
+ ### Acessibilidade
511
+ Nenhum `role`/`aria-*` próprio; depende dos dígitos internos. Confirmado.
512
+
513
+ ### Constante exportada
514
+ `SG_STRING_ANIMATOR_DEFAULT_CHARSET: string[]` — espaço, `0-9`, `A-Z`, `a-z` e `. ! ? - + # @ $ % & / * ( )`. Se `emptyChar` não estiver no `charset`, é inserido no início.
515
+
516
+ Lacuna: o JSDoc de `SgStringAnimator` mostra `style="neon"`/`style="fade"` nos `@example`, mas a prop real é `stringAnimatorStyle` (não existe prop `style` no tipo).