forlogic-core 2.0.3 → 2.0.5

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 (207) hide show
  1. package/.note/memory/features/crud-defaults-batteries-included.md +1 -1
  2. package/README.md +187 -917
  3. package/dist/components/ui/dialog-wizard.d.ts +82 -0
  4. package/dist/components/ui/input-group.d.ts +1 -1
  5. package/dist/components/ui/input.d.ts +5 -23
  6. package/dist/components/ui/resizable.d.ts +1 -1
  7. package/dist/components/ui/sidebar.d.ts +1 -1
  8. package/dist/components/ui/step-selector.d.ts +11 -9
  9. package/dist/components/ui/textarea.d.ts +1 -0
  10. package/dist/crud/components/CrudTable.d.ts +3 -1
  11. package/dist/crud/createCrudPage.d.ts +2 -0
  12. package/dist/crud/hooks/useColumnManager.d.ts +3 -1
  13. package/dist/exports/ui.d.ts +1 -0
  14. package/dist/index.css +1 -1
  15. package/dist/index.css.map +1 -1
  16. package/dist/index.esm.js +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/types/sidebar.d.ts +2 -1
  19. package/dist/types.d.ts +3 -0
  20. package/docs/AUDIT_PROMPT.md +74 -0
  21. package/docs/PROJECT_KNOWLEDGE_TEMPLATE.md +117 -0
  22. package/docs/PROMPT_TEMPLATE.md +77 -0
  23. package/docs/STARTER_TEMPLATE.md +114 -0
  24. package/docs/design-system/README.md +45 -0
  25. package/docs/design-system/buttons-actions.md +433 -0
  26. package/docs/design-system/charts-dashboards.md +547 -0
  27. package/docs/design-system/crud.md +243 -0
  28. package/docs/design-system/data-display.md +360 -0
  29. package/docs/design-system/dialogs.md +588 -0
  30. package/docs/design-system/domain.md +661 -0
  31. package/docs/design-system/examples.md +275 -0
  32. package/docs/design-system/foundation.md +82 -0
  33. package/docs/design-system/infra-utils.md +36 -0
  34. package/docs/design-system/inputs.md +556 -0
  35. package/docs/design-system/layout.md +351 -0
  36. package/docs/design-system/navigation.md +604 -0
  37. package/docs/design-system/notifications-feedback.md +139 -0
  38. package/docs/design-system/platform.md +95 -0
  39. package/docs/design-system/selectors.md +424 -0
  40. package/docs/design-system/tables-grids.md +114 -0
  41. package/package.json +2 -2
  42. package/dist/assets/AccordionDoc-CGNlubG3.js +0 -31
  43. package/dist/assets/ActionButtonDoc-CYtkXR0k.js +0 -47
  44. package/dist/assets/ActionPlanDoc-BSuPRftQ.js +0 -65
  45. package/dist/assets/AlertDoc-Cpvxneqg.js +0 -37
  46. package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +0 -189
  47. package/dist/assets/AppHeaderDoc-DNQErj_t.js +0 -74
  48. package/dist/assets/AppSidebarDoc-DkeQarDu.js +0 -221
  49. package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +0 -31
  50. package/dist/assets/AuditLogDoc-BBvNcHIo.js +0 -67
  51. package/dist/assets/AuditTrailDoc-DgFHO-uo.js +0 -17
  52. package/dist/assets/AuthDoc-WIA_Aetl.js +0 -200
  53. package/dist/assets/AvatarDoc-B6go1C1T.js +0 -11
  54. package/dist/assets/BadgeDoc-BONhfqB_.js +0 -36
  55. package/dist/assets/BaseFormDoc-CuyUArcj.js +0 -169
  56. package/dist/assets/BodyContentDoc-CterHC1E.js +0 -83
  57. package/dist/assets/BreadcrumbDoc-Dwn9nLeO.js +0 -75
  58. package/dist/assets/ButtonDoc-BOjRseZT.js +0 -41
  59. package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +0 -7
  60. package/dist/assets/CalendarDoc-CMwIEqgT.js +0 -81
  61. package/dist/assets/CardDoc-BZz1CVg2.js +0 -49
  62. package/dist/assets/ChartDoc-B5vZVtqD.js +0 -76
  63. package/dist/assets/CheckboxDoc-lAbYO9I5.js +0 -55
  64. package/dist/assets/ColorPickerDoc-Dpsprp4N.js +0 -10
  65. package/dist/assets/ColorsFoundationDoc-CCHeSL3p.js +0 -13
  66. package/dist/assets/ComboTreeDoc-D4dTkIt-.js +0 -46
  67. package/dist/assets/ComboboxDoc-CqqZPvZq.js +0 -134
  68. package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +0 -1
  69. package/dist/assets/ContextMenuDoc-D3jC-MVA.js +0 -182
  70. package/dist/assets/ContextsDoc-XFH0-JdS.js +0 -211
  71. package/dist/assets/CreateCrudPageDoc-CpuiWI-g.js +0 -106
  72. package/dist/assets/CrudActionBarDoc-wuBGXD9Y.js +0 -112
  73. package/dist/assets/CrudGridDoc-BYWqSXBH.js +0 -85
  74. package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +0 -14
  75. package/dist/assets/CrudPrimitivesDoc-CxaTB94A.js +0 -164
  76. package/dist/assets/CrudTableDoc-Dga1VgCu.js +0 -113
  77. package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +0 -33
  78. package/dist/assets/DashboardFormDoc-BUDCmrMl.js +0 -49
  79. package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +0 -71
  80. package/dist/assets/DashboardGridDoc-BavePiRF.js +0 -49
  81. package/dist/assets/DashboardListDoc-CLyMA6UK.js +0 -37
  82. package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +0 -35
  83. package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +0 -60
  84. package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +0 -62
  85. package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +0 -75
  86. package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +0 -83
  87. package/dist/assets/DashboardViewDoc-CtlCNlEF.js +0 -45
  88. package/dist/assets/DataListDoc-DUy88lCQ.js +0 -13
  89. package/dist/assets/DesignSystemHome-DHl9YtbH.js +0 -1
  90. package/dist/assets/DialogDoc-CMQqnTV-.js +0 -981
  91. package/dist/assets/DropdownMenuDoc-S7X9csGt.js +0 -175
  92. package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +0 -57
  93. package/dist/assets/EmptyStateDoc-CHGCiGIk.js +0 -35
  94. package/dist/assets/EnvironmentsDoc-DZHJZ2nm.js +0 -96
  95. package/dist/assets/ErrorBoundaryDoc-DoaAg68p.js +0 -111
  96. package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +0 -1
  97. package/dist/assets/ExampleAppDoc-DzIU81Fn.js +0 -1
  98. package/dist/assets/ExampleCard-DuLrb3t-.js +0 -1
  99. package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +0 -1
  100. package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +0 -1
  101. package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +0 -1
  102. package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +0 -1
  103. package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +0 -1
  104. package/dist/assets/FileUploadDoc-9-UujFNX.js +0 -34
  105. package/dist/assets/FilterBar-DDTqqUfZ.js +0 -1
  106. package/dist/assets/FormDoc-CVES6n3d.js +0 -81
  107. package/dist/assets/FoundationOverview-DT0u11Gz.js +0 -1
  108. package/dist/assets/GridDoc-CbHFSILF.js +0 -28
  109. package/dist/assets/HooksDoc-Ctxdk6Wq.js +0 -665
  110. package/dist/assets/HoverCardDoc-8Wkaafdj.js +0 -31
  111. package/dist/assets/I18nDoc-D3Q2m7ik.js +0 -167
  112. package/dist/assets/IconPickerDoc-DZ26Gdpg.js +0 -10
  113. package/dist/assets/IconsFoundationDoc-xOxtC7CW.js +0 -33
  114. package/dist/assets/InputDoc-BhztAiuJ.js +0 -211
  115. package/dist/assets/LabelDoc-A4hmTRRV.js +0 -42
  116. package/dist/assets/LeadershipDoc-CqOSfWsP.js +0 -452
  117. package/dist/assets/MediaDoc-C78gvC8p.js +0 -459
  118. package/dist/assets/MenubarDoc-DCnmd2tO.js +0 -165
  119. package/dist/assets/ModuleAccessDoc-CmD5nHDp.js +0 -153
  120. package/dist/assets/ModulesDialogDoc-DVit1CA-.js +0 -46
  121. package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +0 -34
  122. package/dist/assets/NavigationMenuDoc-q1fbc89j.js +0 -116
  123. package/dist/assets/OnboardingDialogDoc-3A3eBYrq.js +0 -55
  124. package/dist/assets/PaginationDoc-B8-bMz5J.js +0 -27
  125. package/dist/assets/PaginationDoc-BkGdxHL3.js +0 -98
  126. package/dist/assets/PlacesDoc-CKPO6ATs.js +0 -226
  127. package/dist/assets/PopoverDoc-CJPU4Ags.js +0 -64
  128. package/dist/assets/ProgressDoc-CpjbTL4o.js +0 -29
  129. package/dist/assets/QualiexUserFieldDoc-DDwumlRw.js +0 -149
  130. package/dist/assets/RadioGroupDoc-D6tSZz8G.js +0 -57
  131. package/dist/assets/RadiusDoc-B4xSnajw.js +0 -7
  132. package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +0 -15
  133. package/dist/assets/RequiredFieldsCounterDoc-COesoSdx.js +0 -58
  134. package/dist/assets/ResizableDoc-CW0-XQuB.js +0 -104
  135. package/dist/assets/RichTextEditorDoc-C8c_XA9P.js +0 -24
  136. package/dist/assets/ScrollAreaDoc-BxtoAPaZ.js +0 -28
  137. package/dist/assets/SecurityDoc-wOVqpg2F.js +0 -204
  138. package/dist/assets/SelectDoc-C75gtY9D.js +0 -80
  139. package/dist/assets/SeparatorDoc-BjQBPB1P.js +0 -4
  140. package/dist/assets/ServicesDoc-CXTctwBl.js +0 -308
  141. package/dist/assets/ShadowsDoc-C6Lw8_x2.js +0 -9
  142. package/dist/assets/SignDoc-Bh5ZUg5x.js +0 -66
  143. package/dist/assets/SkeletonDoc-rTLGK5VE.js +0 -54
  144. package/dist/assets/SliderDoc-JMAMDub7.js +0 -41
  145. package/dist/assets/SpacingDoc-RljOrpwA.js +0 -12
  146. package/dist/assets/SplitButtonDoc-CvShUW3w.js +0 -53
  147. package/dist/assets/StepSelectorDoc-C-nAap9H.js +0 -41
  148. package/dist/assets/SwitchDoc-DLnqmkPr.js +0 -56
  149. package/dist/assets/TableDoc-B8EpWLVg.js +0 -128
  150. package/dist/assets/TabsDoc-DIBtl_uC.js +0 -42
  151. package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +0 -10
  152. package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +0 -16
  153. package/dist/assets/TextareaDoc-DGnqMqEC.js +0 -46
  154. package/dist/assets/ToastDoc-DjYyc7ae.js +0 -157
  155. package/dist/assets/ToggleDoc-C9ZOVjkY.js +0 -51
  156. package/dist/assets/TooltipDoc-BEx4l9-i.js +0 -58
  157. package/dist/assets/TruncatedCellDoc-BbV1bRSY.js +0 -12
  158. package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +0 -7
  159. package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +0 -29
  160. package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +0 -18
  161. package/dist/assets/UtilitiesDoc-DGxaHVV1.js +0 -145
  162. package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +0 -1
  163. package/dist/assets/blocks-B6LrJeAM.js +0 -1
  164. package/dist/assets/building-DeVappnD.js +0 -1
  165. package/dist/assets/calendar-days-BQ0na5kM.js +0 -1
  166. package/dist/assets/check-check-C_-PJCJa.js +0 -1
  167. package/dist/assets/circle-plus-CpIcep-O.js +0 -1
  168. package/dist/assets/circle-x-jPpBPew0.js +0 -1
  169. package/dist/assets/clipboard-list-CXNPdciZ.js +0 -1
  170. package/dist/assets/cloud-upload-BEjzumjl.js +0 -1
  171. package/dist/assets/crown-CqNsQIsm.js +0 -1
  172. package/dist/assets/date-picker-BW3eGOe_.js +0 -1
  173. package/dist/assets/disabled-menu-item-C2YaMvSt.js +0 -1
  174. package/dist/assets/drawer-D5rflIcD.js +0 -3
  175. package/dist/assets/file-braces-DFb5X9so.js +0 -1
  176. package/dist/assets/file-pen-line-CyUGKkEN.js +0 -1
  177. package/dist/assets/git-branch-BcXv9mpp.js +0 -1
  178. package/dist/assets/globe-CpMIWAcv.js +0 -1
  179. package/dist/assets/hash-cQWdKjya.js +0 -1
  180. package/dist/assets/hourglass-BahQ3eDv.js +0 -1
  181. package/dist/assets/hover-card-R66N85sZ.js +0 -1
  182. package/dist/assets/iframe-dialog-V0mW5aBb.js +0 -1
  183. package/dist/assets/index-DkiftrvI.js +0 -352
  184. package/dist/assets/index-nmBjO9Th.css +0 -1
  185. package/dist/assets/life-buoy-ByXiPddz.js +0 -1
  186. package/dist/assets/loading-state-Cb5_t5uE.js +0 -1
  187. package/dist/assets/lucide-react-Cp3Yw3Zm.js +0 -1
  188. package/dist/assets/package-B3-pVvPM.js +0 -1
  189. package/dist/assets/pen-Bi_lmmKT.js +0 -1
  190. package/dist/assets/pin-DVsSl8QA.js +0 -1
  191. package/dist/assets/printer-BnJ8B6m-.js +0 -1
  192. package/dist/assets/radio-group-BHAaNGsm.js +0 -1
  193. package/dist/assets/server-CtzFTfKR.js +0 -1
  194. package/dist/assets/share-2-Dv8Do445.js +0 -1
  195. package/dist/assets/shield-check-CFXjOV_w.js +0 -1
  196. package/dist/assets/shield-x-DJTRfVux.js +0 -1
  197. package/dist/assets/slider-v9tXBSnB.js +0 -1
  198. package/dist/assets/smartphone-BSNR60L7.js +0 -1
  199. package/dist/assets/step-selector-ATTh_9Wa.js +0 -1
  200. package/dist/assets/text-align-start-qE-MbYYw.js +0 -1
  201. package/dist/assets/thumbs-up-D_XIW_uX.js +0 -1
  202. package/dist/assets/trash-DTWQwpwA.js +0 -1
  203. package/dist/assets/trending-up-jip5-leJ.js +0 -1
  204. package/dist/assets/useMockCrud-CN4vjyOZ.js +0 -1
  205. package/dist/assets/user-check-BlH3EDWK.js +0 -1
  206. package/dist/assets/user-plus-BqwXwD-c.js +0 -1
  207. package/dist/index.html +0 -33
@@ -0,0 +1,556 @@
1
+ <!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
2
+ <!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
3
+
4
+ # Inputs
5
+
6
+ Categoria: **Inputs** | 10 componentes
7
+
8
+ ### Input
9
+
10
+ Campo de entrada de texto com suporte a todos os tipos HTML. Inclui Label para rótulos acessíveis e InputGroup para agrupar inputs com addons de prefixo, sufixo, ícones e botões.
11
+
12
+ **Uso:**
13
+ ```tsx
14
+ import { Input, Label } from "forlogic-core"
15
+
16
+ // Input básico
17
+ <Input placeholder="Digite algo..." />
18
+
19
+ // Com Label
20
+ <div className="grid w-full items-center gap-1.5">
21
+ <Label htmlFor="email">Email</Label>
22
+ <Input type="email" id="email" placeholder="email@exemplo.com" />
23
+ </div>
24
+
25
+ // InputGroup com prefixo e sufixo
26
+ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "forlogic-core"
27
+
28
+ <InputGroup>
29
+ <InputGroupAddon align="inline-start">https://</InputGroupAddon>
30
+ <InputGroupInput placeholder="exemplo.com" />
31
+ <InputGroupAddon align="inline-end">.com.br</InputGroupAddon>
32
+ </InputGroup>
33
+ ```
34
+
35
+ **Props:**
36
+ | Prop | Tipo | Padrão | Descrição |
37
+ |------|------|--------|-----------|
38
+ | `placeholder` | `string` | - | Texto de placeholder exibido quando o campo está vazio. |
39
+ | `value` | `string | number` | - | Valor controlado do input. |
40
+ | `defaultValue` | `string | number` | - | Valor inicial para input não controlado. |
41
+ | `disabled` | `boolean` | false | Se o input está desabilitado (não editável e não envia no form). |
42
+ | `readOnly` | `boolean` | false | Se o input é somente leitura (não editável mas envia no form). |
43
+ | `required` | `boolean` | false | Se o campo é obrigatório para submissão do formulário. |
44
+ | `maxLength` | `number` | - | Número máximo de caracteres permitidos. |
45
+ | `showCharCount` | `boolean` | false | Exibe contador de caracteres abaixo do input (requer maxLength). |
46
+ | `minLength` | `number` | - | Número mínimo de caracteres necessários. |
47
+ | `pattern` | `string` | - | Regex para validação do valor (HTML5). |
48
+ | `autoComplete` | `string` | - | Dica de autocompletar: |
49
+ | `autoFocus` | `boolean` | false | Se o input deve receber foco automaticamente ao montar. |
50
+ | `className` | `string` | - | Classes CSS adicionais para customização. |
51
+ | `onChange` | `(e: ChangeEvent) => void` | - | Callback chamado quando o valor muda. |
52
+ | `onBlur` | `(e: FocusEvent) => void` | - | Callback chamado quando o input perde foco. |
53
+ | `onFocus` | `(e: FocusEvent) => void` | - | Callback chamado quando o input recebe foco. |
54
+
55
+ **Exemplos:**
56
+ ```tsx
57
+ <Input type=
58
+ ```
59
+ ```tsx
60
+ <div className=
61
+ ```
62
+ ```tsx
63
+ // Normal
64
+ <Input placeholder=
65
+ ```
66
+ ```tsx
67
+ // Ícone à esquerda
68
+ <div className=
69
+ ```
70
+ ```tsx
71
+ // Prefixo
72
+ <InputGroup>
73
+ <InputGroupAddon align=
74
+ ```
75
+ ```tsx
76
+ // Ícone de usuário
77
+ <InputGroup>
78
+ <InputGroupAddon align=
79
+ ```
80
+
81
+ **Acessibilidade:**
82
+ - Sempre associe Label ao Input usando htmlFor/id para melhor navegação com leitores de tela
83
+ - Use placeholder como dica adicional, nunca como substituto do Label
84
+ - O estado disabled é comunicado automaticamente para tecnologias assistivas
85
+ - O estado required é comunicado e valida automaticamente no submit
86
+ - InputGroup mantém foco visual unificado (ring) quando qualquer elemento interno está focado
87
+ - Indicadores de foco visíveis atendem WCAG 2.4.7 (Focus Visible)
88
+ - Inputs são totalmente navegáveis via teclado (Tab, Shift+Tab)
89
+ - Para campos de senha, forneça toggle de visibilidade com ícone descritivo
90
+ - Mensagens de erro devem ser associadas ao input via aria-describedby para leitores de tela
91
+
92
+ **Notas:**
93
+ - **Label**: Componente de rótulo acessível. Use
94
+ - para associar ao
95
+ - do input.
96
+ - **InputGroup**: Container que agrupa input com addons. Adiciona borda unificada e foco visual compartilhado.
97
+ - **InputGroupInput**: Input estilizado para uso dentro do InputGroup (remove bordas próprias).
98
+ - **InputGroupTextarea**: Textarea estilizado para uso com addons
99
+ - ou
100
+ - .
101
+ - **InputGroupAddon**: Elemento decorativo (texto, ícone). Props:
102
+ - :
103
+ - (prefixo),
104
+ - (sufixo),
105
+ - (topo),
106
+ - (base).
107
+ - **InputGroupButton**: Botão integrado ao InputGroup. Props:
108
+ - :
109
+ - ,
110
+ - ,
111
+ - ,
112
+ - . Aceita todas as
113
+ - do Button.
114
+ - Para validação de formulários, use react-hook-form com FormField, FormControl e FormMessage.
115
+ - Para estados de erro, adicione as classes
116
+ - ao Input.
117
+ - 🎨 **Padrão v2**: Input usa
118
+ - (8px) e
119
+ - com
120
+ - para feedback visual no hover.
121
+ - 🎨 **Padrão v2**: Bordas dos inputs têm contraste aumentado (luminosidade 82% light / 25% dark) para maior realce visual.
122
+
123
+ > Fonte: `src\design-system\docs\components\InputDoc.tsx`
124
+
125
+ ---
126
+
127
+ ### Textarea
128
+
129
+ Exibe um textarea de formulário ou um componente que se parece com um textarea.
130
+
131
+ **Uso:**
132
+ ```tsx
133
+ import { Textarea } from "forlogic-core"
134
+
135
+ <Textarea placeholder="Digite sua mensagem aqui." />
136
+ ```
137
+
138
+ **Props:**
139
+ | Prop | Tipo | Padrão | Descrição |
140
+ |------|------|--------|-----------|
141
+ | `placeholder` | `string` | - | Texto do placeholder. |
142
+ | `disabled` | `boolean` | false | Se o textarea está desabilitado. |
143
+ | `rows` | `number` | - | Número de linhas de texto visíveis. |
144
+
145
+ **Exemplos:**
146
+ ```tsx
147
+ <Textarea placeholder=
148
+ ```
149
+
150
+ **Acessibilidade:**
151
+ - Elemento HTML textarea padrão
152
+ - Funciona com labels e controles de formulário
153
+ - Acessível por teclado
154
+ - Amigável para leitores de tela
155
+
156
+ **Notas:**
157
+ - 🎨 **Padrão v2**: Textarea usa
158
+ - (8px) e
159
+ - com
160
+ - para feedback visual no hover.
161
+
162
+ > Fonte: `src\design-system\docs\components\TextareaDoc.tsx`
163
+
164
+ ---
165
+
166
+ ### Checkbox
167
+
168
+ Um controle que permite ao usuário alternar entre marcado e desmarcado.
169
+
170
+ **Uso:**
171
+ ```tsx
172
+ import { Checkbox } from "forlogic-core"
173
+
174
+ <div className="flex items-center space-x-2">
175
+ <Checkbox id="terms" />
176
+ <label htmlFor="terms">Accept terms and conditions</label>
177
+ </div>
178
+ ```
179
+
180
+ **Props:**
181
+ | Prop | Tipo | Padrão | Descrição |
182
+ |------|------|--------|-----------|
183
+ | `checked` | `boolean` | false | O estado marcado controlado. |
184
+ | `defaultChecked` | `boolean` | false | O estado marcado padrão. |
185
+ | `disabled` | `boolean` | false | Se o checkbox está desabilitado. |
186
+ | `onCheckedChange` | `(checked: boolean) => void` | - | Manipulador de evento chamado quando o estado marcado muda. |
187
+
188
+ **Exemplos:**
189
+ ```tsx
190
+ <Checkbox id=
191
+ ```
192
+ ```tsx
193
+ <div className=
194
+ ```
195
+
196
+ **Acessibilidade:**
197
+ - Suporte completo de teclado
198
+ - Segue o padrão de design WAI-ARIA
199
+ - Gerenciamento adequado de foco
200
+ - Funciona com labels de formulário
201
+
202
+ > Fonte: `src\design-system\docs\components\CheckboxDoc.tsx`
203
+
204
+ ---
205
+
206
+ ### Radio Group
207
+
208
+ Um conjunto de botões marcáveis—conhecidos como botões de rádio—onde apenas um pode ser marcado por vez.
209
+
210
+ **Uso:**
211
+ ```tsx
212
+ import { RadioGroup, RadioGroupItem } from "forlogic-core"
213
+
214
+ <RadioGroup defaultValue="option-one">
215
+ <div className="flex items-center space-x-2">
216
+ <RadioGroupItem value="option-one" id="r1" />
217
+ <Label htmlFor="r1">Option One</Label>
218
+ </div>
219
+ <div className="flex items-center space-x-2">
220
+ <RadioGroupItem value="option-two" id="r2" />
221
+ <Label htmlFor="r2">Option Two</Label>
222
+ </div>
223
+ </RadioGroup>
224
+ ```
225
+
226
+ **Props:**
227
+ | Prop | Tipo | Padrão | Descrição |
228
+ |------|------|--------|-----------|
229
+ | `defaultValue` | `string` | - | O valor selecionado padrão. |
230
+ | `value` | `string` | - | O valor selecionado controlado. |
231
+ | `onValueChange` | `(value: string) => void` | - | Manipulador de evento quando o valor muda. |
232
+ | `disabled` | `boolean` | false | Se o grupo de rádio está desabilitado. |
233
+
234
+ **Exemplos:**
235
+ ```tsx
236
+ <RadioGroup defaultValue=
237
+ ```
238
+ ```tsx
239
+ <RadioGroup defaultValue=
240
+ ```
241
+ ```tsx
242
+ <RadioGroup defaultValue=
243
+ ```
244
+ ```tsx
245
+ <RadioGroup defaultValue=
246
+ ```
247
+
248
+ **Acessibilidade:**
249
+ - Navegação completa por teclado
250
+ - Teclas de seta para selecionar opções
251
+ - Segue o padrão de grupo de rádio WAI-ARIA
252
+ - Gerenciamento adequado de foco
253
+
254
+ > Fonte: `src\design-system\docs\components\RadioGroupDoc.tsx`
255
+
256
+ ---
257
+
258
+ ### Label
259
+
260
+ Renderiza uma label acessível associada a controles de formulário.
261
+
262
+ **Uso:**
263
+ ```tsx
264
+ import { Label } from "forlogic-core"
265
+
266
+ <Label htmlFor="email">Email</Label>
267
+ <Input id="email" type="email" />
268
+ ```
269
+
270
+ **Props:**
271
+ | Prop | Tipo | Padrão | Descrição |
272
+ |------|------|--------|-----------|
273
+ | `htmlFor` | `string` | - | O id do controle de formulário para associar. |
274
+ | `className` | `string` | - | Classes CSS para estilização. |
275
+ | `children` | `ReactNode` | - | Conteúdo da label. |
276
+
277
+ **Exemplos:**
278
+ ```tsx
279
+ <div className=
280
+ ```
281
+ ```tsx
282
+ <Label htmlFor=
283
+ ```
284
+ ```tsx
285
+ <div className=
286
+ ```
287
+ ```tsx
288
+ <Label htmlFor=
289
+ ```
290
+ ```tsx
291
+ <Label htmlFor=
292
+ ```
293
+ ```tsx
294
+ <div className=
295
+ ```
296
+ ```tsx
297
+ <div className=
298
+ ```
299
+
300
+ **Acessibilidade:**
301
+ - Associa adequadamente com controles de formulário via htmlFor
302
+ - Clicar na label foca automaticamente o input associado
303
+ - Suporte completo para leitores de tela
304
+ - Compatível com WCAG - melhora a área de clique
305
+ - Use com Checkbox/Radio para melhor UX
306
+
307
+ **Notas:**
308
+ - Sempre associe Labels a seus campos via htmlFor/id
309
+ - Use o componente Label (não <label>) para formulários acessíveis
310
+ - Indique campos obrigatórios com asterisco ou texto descritivo
311
+ - Labels aumentam a área de clique para inputs (especialmente útil em mobile)
312
+ - Adicione cursor-pointer quando associada a checkboxes/radios
313
+ - Combine com texto de ajuda abaixo do input para instruções adicionais
314
+ - 🎨 **Padrão v2**: Label usa
315
+ - (12px) e
316
+ - para hierarquia visual clara sem competir com o conteúdo do campo.
317
+
318
+ > Fonte: `src\design-system\docs\components\LabelDoc.tsx`
319
+
320
+ ---
321
+
322
+ ### Slider
323
+
324
+ Um input onde o usuário seleciona um valor dentro de um intervalo determinado.
325
+
326
+ **Uso:**
327
+ ```tsx
328
+ import { Slider } from "forlogic-core"
329
+
330
+ <Slider defaultValue={[50]} max={100} step={1} />
331
+ ```
332
+
333
+ **Acessibilidade:**
334
+ - Suporte completo de teclado (teclas de seta para ajustar)
335
+ - Segue o padrão WAI-ARIA de slider
336
+ - Labels e valores ARIA adequados
337
+ - Indicadores de foco visíveis
338
+
339
+ > Fonte: `src\design-system\docs\components\SliderDoc.tsx`
340
+
341
+ ---
342
+
343
+ ### File Upload
344
+
345
+ Componente de upload de arquivo único com drag & drop, validação de tipo/tamanho e ações (download, visualizar, substituir, remover). Portado do flc-single-file-uploader Angular.
346
+
347
+ **Uso:**
348
+ ```tsx
349
+ import { SingleFileUpload } from 'forlogic-core';
350
+
351
+ <SingleFileUpload
352
+ storedFile={{ id: '1', name: 'doc.pdf', extension: 'pdf', size: 1024 }}
353
+ allowedExtensions={['pdf', 'docx']}
354
+ maxSizeInBytes={10 * 1024 * 1024}
355
+ onFileSelect={(file) => console.log(file)}
356
+ onFileRemove={() => console.log('removed')}
357
+ onDownload={async (f) => downloadFile(f.id)}
358
+ onView={(f) => openViewer(f.id)}
359
+ />
360
+ ```
361
+
362
+ **Props:**
363
+ | Prop | Tipo | Padrão | Descrição |
364
+ |------|------|--------|-----------|
365
+ | `storedFile` | `StoredFile | null` | - | Arquivo já armazenado no servidor (id, name, extension, size). |
366
+ | `disabled` | `boolean` | false | Desabilita interação com o componente. |
367
+ | `required` | `boolean` | false | Marca o campo como obrigatório. |
368
+ | `touched` | `boolean` | false | Marca o campo como tocado (exibe erro de required). |
369
+ | `error` | `string` | - | Mensagem de erro externa a ser exibida. |
370
+
371
+ **Exemplos:**
372
+ ```tsx
373
+ <SingleFileUpload
374
+ onFileSelect={(f) => handleSelect(f)}
375
+ onFileRemove={() => handleRemove()}
376
+ />
377
+ ```
378
+ ```tsx
379
+ <SingleFileUpload
380
+ storedFile={{ id:
381
+ ```
382
+ ```tsx
383
+ <SingleFileUpload
384
+ allowedExtensions={[
385
+ ```
386
+
387
+ **Notas:**
388
+ - Portado do flc-single-file-uploader Angular. Valida tipos proibidos (FORBIDDEN_FILE_TYPES: exe, bat, cmd, etc) automaticamente.
389
+ - Utilitários exportados: formatBytes(bytes) e getFileExtension(filename).
390
+ - O componente gerencia estados internos de arquivo local vs servidor (StoredFile).
391
+ - Tipos proibidos são bloqueados automaticamente independente da prop allowedExtensions.
392
+
393
+ > Fonte: `src\design-system\docs\components\FileUploadDoc.tsx`
394
+
395
+ ---
396
+
397
+ ### Select
398
+
399
+ Exibe uma lista de opções para o usuário escolher—acionada por um botão.
400
+
401
+ **Uso:**
402
+ ```tsx
403
+ import {
404
+ Select,
405
+ SelectContent,
406
+ SelectItem,
407
+ SelectTrigger,
408
+ SelectValue,
409
+ } from "forlogic-core"
410
+
411
+ <Select>
412
+ <SelectTrigger className="w-[180px]">
413
+ <SelectValue placeholder="Theme" />
414
+ </SelectTrigger>
415
+ <SelectContent>
416
+ <SelectItem value="light">Light</SelectItem>
417
+ <SelectItem value="dark">Dark</SelectItem>
418
+ </SelectContent>
419
+ </Select>
420
+ ```
421
+
422
+ **Props:**
423
+ | Prop | Tipo | Padrão | Descrição |
424
+ |------|------|--------|-----------|
425
+ | `defaultValue` | `string` | - | O valor selecionado padrão. |
426
+ | `value` | `string` | - | O valor selecionado controlado. |
427
+ | `onValueChange` | `(value: string) => void` | - | Manipulador de evento quando o valor muda. |
428
+ | `disabled` | `boolean` | false | Se o select está desabilitado. |
429
+ | `container (SelectContent)` | `HTMLElement` | - | Container HTML para portal (útil dentro de Dialog). |
430
+ | `collisionBoundary (SelectContent)` | `HTMLElement` | - | Elemento para detecção de colisão de posicionamento. |
431
+
432
+ **Acessibilidade:**
433
+ - Navegação completa por teclado
434
+ - Busca por digitação antecipada
435
+ - Segue o padrão de listbox WAI-ARIA
436
+ - Anúncios para leitores de tela
437
+
438
+ **Notas:**
439
+ - 💡 Use
440
+ - e
441
+ - quando o Select estiver dentro de um Dialog para evitar problemas de scroll
442
+ - 💡 Para seleção com busca, considere usar
443
+ - ao invés de
444
+ - ,
445
+
446
+ - rounded-lg
447
+ - hover:border-primary
448
+ - transition-colors
449
+
450
+ > Fonte: `src\design-system\docs\components\SelectDoc.tsx`
451
+
452
+ ---
453
+
454
+ ### Rich Text Editor
455
+
456
+ Editor de texto rico construído com Tiptap, suportando formatação visual, edição de código HTML e preview. Ideal para formulários que precisam de conteúdo formatado.
457
+
458
+ **Uso:**
459
+ ```tsx
460
+ import { RichTextEditor } from "forlogic-core"
461
+
462
+ const [content, setContent] = useState('')
463
+
464
+ <RichTextEditor
465
+ value={content}
466
+ onChange={setContent}
467
+ placeholder="Escreva algo aqui..."
468
+ />
469
+ ```
470
+
471
+ **Props:**
472
+ | Prop | Tipo | Padrão | Descrição |
473
+ |------|------|--------|-----------|
474
+ | `value` | `string` | - | Conteúdo HTML atual do editor. |
475
+ | `onChange` | `(value: string) => void` | - | Callback chamado quando o conteúdo muda. |
476
+ | `disabled` | `boolean` | false | Desabilita a edição. |
477
+ | `showModeToggle` | `boolean` | true | Mostra botões de alternância Visual/Código/Preview. |
478
+ | `showVariableHint` | `boolean` | true | Mostra dica sobre uso de variáveis {{variavel}}. |
479
+ | `className` | `string` | - | Classes CSS adicionais para o container. |
480
+
481
+ **Exemplos:**
482
+ ```tsx
483
+ <RichTextEditor
484
+ value={content}
485
+ onChange={setContent}
486
+ showVariableHint={false}
487
+ placeholder=
488
+ ```
489
+ ```tsx
490
+ <RichTextEditor
491
+ value={content}
492
+ onChange={setContent}
493
+ showModeToggle={false}
494
+ showVariableHint={false}
495
+ minHeight=
496
+ ```
497
+ ```tsx
498
+ <RichTextEditor
499
+ value={content}
500
+ onChange={setContent}
501
+ disabled
502
+ />
503
+ ```
504
+
505
+ **Acessibilidade:**
506
+ - Toolbar com botões acessíveis via teclado
507
+ - Títulos com atributos title para tooltips
508
+ - Suporte a atalhos de teclado (Ctrl+B, Ctrl+I, etc.)
509
+ - Contraste adequado nos estados ativo/inativo
510
+ - Focus visível em todos os elementos interativos
511
+
512
+ > Fonte: `src\design-system\docs\components\RichTextEditorDoc.tsx`
513
+
514
+ ---
515
+
516
+ ### Custom Form Fields
517
+
518
+ Componente container que renderiza campos de formulário dinâmicos baseados em configuração. Suporta 9 tipos de campo: Texto Somente Leitura, Texto, Data, Hora, URL, Numérico, Seleção Única, Seleção Múltipla e Questões. Portado de FlcCustomFormFieldsComponent (flc-custom-form-fields).
519
+
520
+ **Uso:**
521
+ ```tsx
522
+ import { CustomFormFields, ECustomFormFieldType, validateFields } from "forlogic-core"
523
+ import type { FieldAssociation } from "forlogic-core"
524
+
525
+ const fields: FieldAssociation[] = [
526
+ {
527
+ id: 'f1',
528
+ type: ECustomFormFieldType.text,
529
+ name: 'Nome',
530
+ required: true,
531
+ config: { multiline: false },
532
+ isActive: true,
533
+ },
534
+ // ...mais campos
535
+ ];
536
+
537
+ const [formFields, setFormFields] = useState(fields);
538
+
539
+ <CustomFormFields
540
+ fields={formFields}
541
+ onChange={setFormFields}
542
+ onFieldChange={(field) => console.log('Changed:', field)}
543
+ />
544
+ ```
545
+
546
+ **Notas:**
547
+ - Portado de FlcCustomFormFieldsComponent (flc-custom-form-fields) Angular.
548
+ - Tipos de campo: readOnlyText (1), text (2), date (3), time (4), url (5), number (6), singleSelection (7), multiSelection (8), questions (9).
549
+ - Use validateFields() para validar campos obrigatórios e restrições numéricas.
550
+ - Use getFormFieldValues() para extrair valores no formato de envio ao backend.
551
+ - Use setFormFieldValues() para aplicar valores salvos a uma lista de campos.
552
+ - Campos de seleção suportam dataSource custom (dados estáticos) e users (lista de usuários do sistema).
553
+
554
+ > Fonte: `src\design-system\docs\components\CustomFormFieldsDoc.tsx`
555
+
556
+ ---