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,588 @@
1
+ <!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
2
+ <!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
3
+
4
+ # Dialogs
5
+
6
+ Categoria: **Dialogs** | 11 componentes
7
+
8
+ ### ModulesDialog
9
+
10
+ Dialog para navegação entre módulos do sistema.
11
+
12
+ **Uso:**
13
+ ```tsx
14
+ import { useState } from 'react';
15
+ import { Button, ModulesDialog } from 'forlogic-core';
16
+ import { LayoutGrid } from 'lucide-react';
17
+
18
+ function App() {
19
+ const [open, setOpen] = useState(false);
20
+
21
+ return (
22
+ <>
23
+ <Button onClick={() => setOpen(true)}>
24
+ <LayoutGrid className="h-4 w-4 mr-2" />
25
+ Módulos
26
+ </Button>
27
+
28
+ <ModulesDialog
29
+ open={open}
30
+ onOpenChange={setOpen}
31
+ onModuleClick={(module) => console.log(module)}
32
+ />
33
+ </>
34
+ );
35
+ }
36
+ ```
37
+
38
+ **Props:**
39
+ | Prop | Tipo | Padrão | Descrição |
40
+ |------|------|--------|-----------|
41
+ | `open` | `boolean` | - | Controla se o dialog está aberto |
42
+ | `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado muda |
43
+ | `onModuleClick` | `(module: Module) => void` | - | Callback ao clicar em um módulo. Default: navega via URL do módulo |
44
+ | `educaUrl` | `string` | https://educa.forlogic.net/ | URL do link do Forlogic Educa |
45
+ | `saberGestaoUrl` | `string` | https://sabergestao.com.br/ | URL do link do Saber Gestão |
46
+
47
+ **Acessibilidade:**
48
+ - Dialog acessível com role=
49
+ - e aria-modal=
50
+ - ,
51
+
52
+ - ,
53
+
54
+ - ,
55
+
56
+
57
+ **Notas:**
58
+ - Para separação entre módulos contratados e disponíveis (contractedModules, onModuleInterest), consulte a documentação de Module Access.
59
+ - Internamente usa o componente ModulesContent, compartilhado com o AccessDeniedDialog.
60
+ - 2 Abas de Grupos: Qualiex e Clássicos
61
+ - Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base
62
+ - Cards no Rodapé: Forlogic Educa, Saber Gestão e Wiki
63
+
64
+ > Fonte: `src\design-system\docs\components\ModulesDialogDoc.tsx`
65
+
66
+ ---
67
+
68
+ ### Alert
69
+
70
+ Exibe uma mensagem de destaque para chamar a atenção do usuário. O componente inclui ícone automático baseado na variante.
71
+
72
+ **Uso:**
73
+ ```tsx
74
+ import { Alert, AlertDescription, AlertTitle } from "forlogic-core"
75
+
76
+ <Alert variant="info">
77
+ <AlertTitle>Informação</AlertTitle>
78
+ <AlertDescription>
79
+ Esta é uma mensagem informativa para o usuário.
80
+ </AlertDescription>
81
+ </Alert>
82
+ ```
83
+
84
+ **Props:**
85
+ | Prop | Tipo | Padrão | Descrição |
86
+ |------|------|--------|-----------|
87
+ | `showIcon` | `boolean` | true | Se deve exibir o ícone padrão da variante. |
88
+ | `className` | `string` | - | Classes CSS adicionais. |
89
+
90
+ **Exemplos:**
91
+ ```tsx
92
+ <Alert variant=
93
+ ```
94
+ ```tsx
95
+ <Alert variant=
96
+ ```
97
+ ```tsx
98
+ <Alert variant=
99
+ ```
100
+ ```tsx
101
+ <Alert variant=
102
+ ```
103
+ ```tsx
104
+ <Alert variant=
105
+ ```
106
+
107
+ **Acessibilidade:**
108
+ - Usa role=
109
+ - para anunciar automaticamente aos leitores de tela
110
+ - A cor não é o único meio de transmitir informações - ícones fornecem contexto adicional
111
+ - Estrutura HTML semântica com título e descrição claramente definidos
112
+ - Contraste de cores adequado para acessibilidade visual
113
+
114
+ > Fonte: `src\design-system\docs\components\AlertDoc.tsx`
115
+
116
+ ---
117
+
118
+ ### Card
119
+
120
+ Exibe um card com cabeçalho, conteúdo e rodapé.
121
+
122
+ **Uso:**
123
+ ```tsx
124
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "forlogic-core"
125
+
126
+ <Card>
127
+ <CardHeader>
128
+ <CardTitle>Card Title</CardTitle>
129
+ <CardDescription>Card Description</CardDescription>
130
+ </CardHeader>
131
+ <CardContent>
132
+ <p>Card Content</p>
133
+ </CardContent>
134
+ <CardFooter>
135
+ <p>Card Footer</p>
136
+ </CardFooter>
137
+ </Card>
138
+ ```
139
+
140
+ **Props:**
141
+ | Prop | Tipo | Padrão | Descrição |
142
+ |------|------|--------|-----------|
143
+ | `className` | `string` | - | Classes CSS adicionais para o card. |
144
+
145
+ **Acessibilidade:**
146
+ - Estrutura semântica com elementos apropriados
147
+ - Hierarquia de cabeçalhos adequada
148
+ - Contraste de cores acessível
149
+ - Funciona com leitores de tela
150
+
151
+ > Fonte: `src\design-system\docs\components\CardDoc.tsx`
152
+
153
+ ---
154
+
155
+ ### Popover
156
+
157
+ Exibe conteúdo rico em um portal, acionado por um botão.
158
+
159
+ **Uso:**
160
+ ```tsx
161
+ import {
162
+ Popover,
163
+ PopoverContent,
164
+ PopoverTrigger,
165
+ Button,
166
+ Input,
167
+ Label
168
+ } from 'forlogic-core';
169
+
170
+ function DimensionsPopover() {
171
+ return (
172
+ <Popover>
173
+ <PopoverTrigger asChild>
174
+ <Button variant="outline">Abrir popover</Button>
175
+ </PopoverTrigger>
176
+ <PopoverContent className="w-80">
177
+ <div className="grid gap-4">
178
+ <div className="space-y-2">
179
+ <h4 className="font-medium leading-none">Dimensões</h4>
180
+ <p className="text-sm text-muted-foreground">
181
+ Defina as dimensões para a camada.
182
+ </p>
183
+ </div>
184
+ <div className="grid gap-2">
185
+ <div className="grid grid-cols-3 items-center gap-4">
186
+ <Label htmlFor="width">Largura</Label>
187
+ <Input id="width" defaultValue="100%" className="col-span-2 h-8" />
188
+ </div>
189
+ <div className="grid grid-cols-3 items-center gap-4">
190
+ <Label htmlFor="maxWidth">Máx. largura</Label>
191
+ <Input id="maxWidth" defaultValue="300px" className="col-span-2 h-8" />
192
+ </div>
193
+ <div className="grid grid-cols-3 items-center gap-4">
194
+ <Label htmlFor="height">Altura</Label>
195
+ <Input id="height" defaultValue="25px" className="col-span-2 h-8" />
196
+ </div>
197
+ <div className="grid grid-cols-3 items-center gap-4">
198
+ <Label htmlFor="maxHeight">Máx. altura</Label>
199
+ <Input id="maxHeight" defaultValue="none" className="col-span-2 h-8" />
200
+ </div>
201
+ </div>
202
+ </div>
203
+ </PopoverContent>
204
+ </Popover>
205
+ );
206
+ }
207
+ ```
208
+
209
+ **Props:**
210
+ | Prop | Tipo | Padrão | Descrição |
211
+ |------|------|--------|-----------|
212
+ | `defaultOpen` | `boolean` | false | Estado aberto inicial (não controlado). |
213
+ | `open` | `boolean` | - | Estado aberto controlado. |
214
+ | `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado muda. |
215
+ | `modal` | `boolean` | false | Define comportamento modal (bloqueia interação externa). |
216
+ | `asChild (Trigger)` | `boolean` | false | Mescla props com o elemento filho. |
217
+ | `sideOffset` | `number` | 4 | Distância em pixels do trigger. |
218
+ | `alignOffset` | `number` | 0 | Deslocamento do alinhamento em pixels. |
219
+ | `avoidCollisions` | `boolean` | true | Evita colisões com bordas da viewport. |
220
+ | `collisionPadding` | `number | Padding` | 0 | Espaçamento da borda de colisão. |
221
+ | `hideWhenDetached` | `boolean` | false | Oculta quando desconectado do trigger. |
222
+ | `container` | `HTMLElement | null` | document.body | Container do portal. |
223
+
224
+ **Acessibilidade:**
225
+ - Segue o padrão WAI-ARIA Dialog (non-modal).
226
+ - Enter/Space: Abre/fecha o popover quando o trigger está focado.
227
+ - Escape: Fecha o popover e retorna o foco ao trigger.
228
+ - Tab: Navega entre elementos focáveis dentro do popover.
229
+ - Foco é automaticamente movido para o conteúdo ao abrir.
230
+ - Foco retorna ao trigger ao fechar.
231
+ - Atributos ARIA: aria-expanded, aria-haspopup.
232
+ - Data attributes: [data-state], [data-side], [data-align].
233
+
234
+ **Notas:**
235
+ - Use Popover para exibir conteúdo rico como formulários, detalhes ou ações secundárias.
236
+ - Prefira Dialog para conteúdo que requer atenção total do usuário.
237
+ - O prop asChild permite usar qualquer elemento como trigger.
238
+ - Combine com formulários para edição inline de campos.
239
+
240
+ > Fonte: `src\design-system\docs\components\PopoverDoc.tsx`
241
+
242
+ ---
243
+
244
+ ### Tooltip
245
+
246
+ Um popup que exibe informações relacionadas a um elemento quando o elemento recebe foco do teclado ou o mouse passa sobre ele.
247
+
248
+ **Uso:**
249
+ ```tsx
250
+ import {
251
+ Tooltip,
252
+ TooltipContent,
253
+ TooltipProvider,
254
+ TooltipTrigger,
255
+ } from 'forlogic-core';
256
+
257
+ <TooltipProvider>
258
+ <Tooltip>
259
+ <TooltipTrigger asChild>
260
+ <Button variant="outline">Hover</Button>
261
+ </TooltipTrigger>
262
+ <TooltipContent>
263
+ <p>Adicionar à biblioteca</p>
264
+ </TooltipContent>
265
+ </Tooltip>
266
+ </TooltipProvider>
267
+ ```
268
+
269
+ **Props:**
270
+ | Prop | Tipo | Padrão | Descrição |
271
+ |------|------|--------|-----------|
272
+ | `delayDuration` | `number` | 300 | TooltipProvider: Atraso em ms antes de exibir o tooltip |
273
+ | `skipDelayDuration` | `number` | 300 | TooltipProvider: Tempo para pular o delay ao mover entre tooltips |
274
+ | `disableHoverableContent` | `boolean` | false | TooltipProvider: Impede que o conteúdo permaneça aberto ao passar o mouse |
275
+ | `open` | `boolean` | - | Tooltip: Estado controlado de abertura |
276
+ | `defaultOpen` | `boolean` | false | Tooltip: Estado inicial (não controlado) |
277
+ | `onOpenChange` | `(open: boolean) => void` | - | Tooltip: Callback quando o estado muda |
278
+ | `sideOffset` | `number` | 4 | TooltipContent: Distância em pixels do trigger |
279
+ | `alignOffset` | `number` | 0 | TooltipContent: Offset do alinhamento em pixels |
280
+
281
+ **Exemplos:**
282
+ ```tsx
283
+ <TooltipProvider>
284
+ <Tooltip>
285
+ <TooltipTrigger asChild>
286
+ <Info className=
287
+ ```
288
+ ```tsx
289
+ <TooltipContent side=
290
+ ```
291
+ ```tsx
292
+ // Sem delay
293
+ <TooltipProvider delayDuration={0}>
294
+ <Tooltip>...</Tooltip>
295
+ </TooltipProvider>
296
+
297
+ // Delay de 1 segundo
298
+ <TooltipProvider delayDuration={1000}>
299
+ <Tooltip>...</Tooltip>
300
+ </TooltipProvider>
301
+ ```
302
+ ```tsx
303
+ // Provider compartilhado - mover entre tooltips é instantâneo
304
+ <TooltipProvider delayDuration={100} skipDelayDuration={0}>
305
+ <Tooltip>
306
+ <TooltipTrigger asChild>
307
+ <Button variant=
308
+ ```
309
+ ```tsx
310
+ <TooltipContent className=
311
+ ```
312
+
313
+ **Acessibilidade:**
314
+ - Exibido ao focar no elemento trigger via teclado
315
+ - Fechado automaticamente ao pressionar Escape
316
+ - role=
317
+ - aplicado automaticamente
318
+ - Associação via aria-describedby
319
+ - Não depende apenas de hover (acessível via focus)
320
+
321
+ **Notas:**
322
+ - Use TooltipProvider como wrapper para compartilhar delays entre tooltips
323
+ - Prefira Tooltip para dicas curtas, use Popover para conteúdo interativo
324
+ - Evite tooltips em elementos que requerem ação rápida (botões principais)
325
+ - Combine com ícones de informação para ajuda contextual
326
+ - Use delayDuration={0} para exibição instantânea quando necessário
327
+
328
+ > Fonte: `src\design-system\docs\components\TooltipDoc.tsx`
329
+
330
+ ---
331
+
332
+ ### Media
333
+
334
+ Módulo completo para upload, edição e renderização de imagens e vídeos. Inclui editores interativos, renderizadores otimizados e hook genérico de upload.
335
+
336
+ **Uso:**
337
+ ```tsx
338
+ // Exemplo básico de upload de imagem
339
+ const { upload, uploading, progress } = useMediaUpload({
340
+ uploadFunction: async (file, options) => {
341
+ // Implementação do upload para seu storage
342
+ const url = await uploadToStorage(file, options);
343
+ return { url, path: file.name };
344
+ }
345
+ });
346
+
347
+ // Renderizar uma imagem
348
+ <ImageRenderer
349
+ content={{
350
+ imageUrl: 'https://example.com/image.jpg',
351
+ caption: 'Legenda da imagem',
352
+ alignment: 'center'
353
+ }}
354
+ />
355
+
356
+ // Renderizar um vídeo
357
+ <VideoRenderer
358
+ content={{
359
+ videoUrl: 'https://youtube.com/watch?v=...',
360
+ controls: true
361
+ }}
362
+ />
363
+ ```
364
+
365
+ **Props:**
366
+ | Prop | Tipo | Padrão | Descrição |
367
+ |------|------|--------|-----------|
368
+ | `uploadFunction` | `UploadFunction` | - | Função de upload customizada (obrigatória para uploads) |
369
+ | `deleteFunction` | `DeleteFunction` | - | Função de delete customizada |
370
+ | `defaultOptions` | `UploadOptions` | - | Opções padrão: bucket, maxSize, allowedTypes |
371
+ | `onSuccess` | `(result: UploadResult) => void` | - | Callback executado após upload bem-sucedido |
372
+ | `onError` | `(error: Error) => void` | - | Callback executado em caso de erro |
373
+ | `value` | `ImageBlockContent | VideoBlockContent` | - | Valor atual do conteúdo |
374
+ | `onChange` | `(value) => void` | - | Callback para mudanças no conteúdo |
375
+ | `onSubmit` | `(value) => void` | - | Callback ao salvar o conteúdo |
376
+ | `onCancel` | `() => void` | - | Callback ao cancelar edição |
377
+ | `uploadOptions` | `UploadOptions` | - | Opções de upload específicas para o editor |
378
+ | `content` | `ImageBlockContent | VideoBlockContent` | - | Conteúdo a ser renderizado |
379
+ | `className` | `string` | - | Classes CSS adicionais |
380
+ | `style` | `CSSProperties` | - | Estilos inline adicionais |
381
+
382
+ **Exemplos:**
383
+ ```tsx
384
+ import { useMediaUpload, getSupabaseClient } from
385
+ ```
386
+
387
+ **Acessibilidade:**
388
+ - ImageRenderer inclui atributo alt obrigatório para acessibilidade
389
+ - VideoRenderer usa atributo title no iframe para identificação
390
+ - Controles de vídeo habilitados por padrão para navegação por teclado
391
+ - Autoplay sempre acompanhado de muted para conformidade com navegadores
392
+ - Links de download possuem texto descritivo
393
+ - Todos os inputs dos editores possuem labels associados
394
+
395
+ **Notas:**
396
+ - O hook useMediaUpload requer que o projeto forneça as funções de upload/delete
397
+ - A função uploadFunction deve retornar { url: string, path?: string }
398
+ - VideoRenderer detecta automaticamente YouTube e Vimeo pela URL
399
+ - Para vídeos locais, use o player HTML5 nativo com controles
400
+ - Dimensões são opcionais; imagens usam max-width: 100% por padrão
401
+ - O módulo não inclui implementação de storage - use Supabase, S3, etc.
402
+ - Helpers de imagem usam Canvas API para compressão e resize
403
+
404
+ > Fonte: `src\design-system\docs\components\MediaDoc.tsx`
405
+
406
+ ---
407
+
408
+ ### ModulesDialog
409
+
410
+ Dialog para navegação entre módulos do sistema.
411
+
412
+ **Uso:**
413
+ ```tsx
414
+ import { useState } from 'react';
415
+ import { Button, ModulesDialog } from 'forlogic-core';
416
+ import { LayoutGrid } from 'lucide-react';
417
+
418
+ function App() {
419
+ const [open, setOpen] = useState(false);
420
+
421
+ return (
422
+ <>
423
+ <Button onClick={() => setOpen(true)}>
424
+ <LayoutGrid className="h-4 w-4 mr-2" />
425
+ Módulos
426
+ </Button>
427
+
428
+ <ModulesDialog
429
+ open={open}
430
+ onOpenChange={setOpen}
431
+ onModuleClick={(module) => console.log(module)}
432
+ />
433
+ </>
434
+ );
435
+ }
436
+ ```
437
+
438
+ **Props:**
439
+ | Prop | Tipo | Padrão | Descrição |
440
+ |------|------|--------|-----------|
441
+ | `open` | `boolean` | - | Controla se o dialog está aberto |
442
+ | `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado muda |
443
+ | `onModuleClick` | `(module: Module) => void` | - | Callback ao clicar em um módulo. Default: navega via URL do módulo |
444
+ | `educaUrl` | `string` | https://educa.forlogic.net/ | URL do link do Forlogic Educa |
445
+ | `saberGestaoUrl` | `string` | https://sabergestao.com.br/ | URL do link do Saber Gestão |
446
+
447
+ **Acessibilidade:**
448
+ - Dialog acessível com role=
449
+ - e aria-modal=
450
+ - ,
451
+
452
+ - ,
453
+
454
+ - ,
455
+
456
+
457
+ **Notas:**
458
+ - Para separação entre módulos contratados e disponíveis (contractedModules, onModuleInterest), consulte a documentação de Module Access.
459
+ - Internamente usa o componente ModulesContent, compartilhado com o AccessDeniedDialog.
460
+ - 2 Abas de Grupos: Qualiex e Clássicos
461
+ - Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base
462
+ - Cards no Rodapé: Forlogic Educa, Saber Gestão e Wiki
463
+
464
+ > Fonte: `src\design-system\docs\components\ModulesDialogDoc.tsx`
465
+
466
+ ---
467
+
468
+ ### Onboarding Dialog
469
+
470
+ Componente para fluxos de onboarding em múltiplos passos. Suporta imagens estáticas, GIFs, navegação entre steps e indicador de progresso com dropdown.
471
+
472
+ **Uso:**
473
+ ```tsx
474
+ import { useState } from "react";
475
+ import { OnboardingDialog, OnboardingStep, Button } from "forlogic-core";
476
+
477
+ function App() {
478
+ const [open, setOpen] = useState(false);
479
+
480
+ const steps: OnboardingStep[] = [
481
+ {
482
+ id: "welcome",
483
+ title: "Bem-vindo ao Sistema",
484
+ description: "Neste espaço, você irá adicionar o texto que explica o processo de onboarding.",
485
+ },
486
+ {
487
+ id: "features",
488
+ title: "Conheça as Funcionalidades",
489
+ description: "Descubra todas as ferramentas disponíveis para você.",
490
+ },
491
+ {
492
+ id: "start",
493
+ title: "Comece Agora",
494
+ description: "Você está pronto para começar a usar o sistema!",
495
+ },
496
+ ];
497
+
498
+ return (
499
+ <>
500
+ <Button onClick={() => setOpen(true)}>Iniciar Onboarding</Button>
501
+ <OnboardingDialog
502
+ open={open}
503
+ onOpenChange={setOpen}
504
+ steps={steps}
505
+ onComplete={() => console.log("Onboarding concluído!")}
506
+ />
507
+ </>
508
+ );
509
+ }
510
+ ```
511
+
512
+ **Props:**
513
+ | Prop | Tipo | Padrão | Descrição |
514
+ |------|------|--------|-----------|
515
+ | `open` | `boolean` | - | Controla se o dialog está aberto. (obrigatório) |
516
+ | `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado de aberto muda. (obrigatório) |
517
+
518
+ **Acessibilidade:**
519
+ - O dialog usa os padrões de acessibilidade do Radix UI Dialog.
520
+ - O botão de fechar possui sr-only label.
521
+ - Navegação por teclado suportada (Tab, Escape).
522
+ - Focus trap ativo quando o dialog está aberto.
523
+
524
+ **Notas:**
525
+ - O componente suporta tanto imagens estáticas quanto GIFs animados.
526
+ - Use o modo controlado (currentStepIndex + onCurrentStepChange) quando precisar sincronizar o estado com outros componentes.
527
+ - Os textos dos botões são customizáveis para suporte a i18n.
528
+ - Para anúncios de features, use com um único step e showProgressIndicator={false}.
529
+ - O botão
530
+ - só aparece a partir do segundo step.
531
+
532
+ > Fonte: `src\design-system\docs\components\OnboardingDialogDoc.tsx`
533
+
534
+ ---
535
+
536
+ ### Online Editor Dialog
537
+
538
+ *Documentação não extraída automaticamente. Consulte o Design System interativo em `/ds`.*
539
+
540
+ ---
541
+
542
+ ### Terms of Use
543
+
544
+ Componentes para exibir e gerenciar termos de uso. Inclui TermsOfUseDialog (notificação de termos atualizados) e TermsOfUseViewer (visualização full-screen do documento com opção de assinatura).
545
+
546
+ **Uso:**
547
+ ```tsx
548
+ import { TermsOfUseDialog, TermsOfUseViewer } from 'forlogic-core';
549
+
550
+ // Dialog de notificação
551
+ <TermsOfUseDialog
552
+ term={term}
553
+ open={open}
554
+ onClose={() => setOpen(false)}
555
+ onAgree={(termId) => handleAgree(termId)}
556
+ />
557
+
558
+ // Viewer full-screen
559
+ <TermsOfUseViewer
560
+ term={term}
561
+ open={open}
562
+ onClose={() => setOpen(false)}
563
+ onSign={(termId) => handleSign(termId)}
564
+ />
565
+ ```
566
+
567
+ **Props:**
568
+ | Prop | Tipo | Padrão | Descrição |
569
+ |------|------|--------|-----------|
570
+ | `term` | `TermOfUse` | - | Termo a exibir (id, description, file, type, hasUserSignature) |
571
+ | `open` | `boolean` | - | Controla visibilidade |
572
+ | `onClose` | `() => void` | - | Callback ao fechar |
573
+ | `onAgree` | `(termId) => void` | - | Callback ao concordar (TermsOfUseDialog) |
574
+ | `onSign` | `(termId) => void` | - | Callback ao assinar (TermsOfUseViewer) |
575
+ | `viewOnly` | `boolean` | false | Oculta botão de assinatura (TermsOfUseViewer) |
576
+
577
+ **Notas:**
578
+ - TermsOfUseViewer oculta botão automaticamente quando hasUserSignature=true
579
+
580
+ > Fonte: `src\design-system\docs\components\TermsOfUseDoc.tsx`
581
+
582
+ ---
583
+
584
+ ### Viewer Dialog
585
+
586
+ *Documentação não extraída automaticamente. Consulte o Design System interativo em `/ds`.*
587
+
588
+ ---