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,547 @@
1
+ <!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
2
+ <!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
3
+
4
+ # Gráficos & Dashboards
5
+
6
+ Categoria: **Gráficos & Dashboards** | 11 componentes
7
+
8
+ ### Chart
9
+
10
+ Sistema de gráficos baseado em Recharts com suporte a temas e tooltips customizados. Inclui barras, linhas, áreas, pizza, radar e mais.
11
+
12
+ **Uso:**
13
+ ```tsx
14
+ import { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent } from "forlogic-core"
15
+ import { Bar, BarChart, XAxis, YAxis, CartesianGrid } from "recharts"
16
+
17
+ const chartConfig = {
18
+ desktop: { label: "Desktop", color: "hsl(var(--primary))" },
19
+ mobile: { label: "Mobile", color: "hsl(var(--secondary))" },
20
+ }
21
+
22
+ <ChartContainer config={chartConfig} className="h-[300px]">
23
+ <BarChart data={data}>
24
+ <CartesianGrid strokeDasharray="3 3" vertical={false} />
25
+ <XAxis dataKey="month" tickLine={false} axisLine={false} />
26
+ <YAxis tickLine={false} axisLine={false} />
27
+ <ChartTooltip content={<ChartTooltipContent />} />
28
+ <ChartLegend content={<ChartLegendContent />} />
29
+ <Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
30
+ <Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />
31
+ </BarChart>
32
+ </ChartContainer>
33
+ ```
34
+
35
+ **Props:**
36
+ | Prop | Tipo | Padrão | Descrição |
37
+ |------|------|--------|-----------|
38
+ | `config` | `ChartConfig` | - | Configuração de cores e labels para cada série de dados. |
39
+ | `className` | `string` | - | Classes CSS para dimensionamento do container. |
40
+ | `ChartTooltip` | `Component` | - | Componente de tooltip customizado para exibir valores. |
41
+ | `ChartTooltipContent` | `Component` | - | Conteúdo do tooltip com formatação automática. |
42
+ | `ChartLegend` | `Component` | - | Componente de legenda customizado. |
43
+ | `ChartLegendContent` | `Component` | - | Conteúdo da legenda com cores e labels. |
44
+
45
+ **Exemplos:**
46
+ ```tsx
47
+ <BarChart data={data}>
48
+ <Bar dataKey=
49
+ ```
50
+
51
+ **Acessibilidade:**
52
+ - Cores configuráveis via design tokens para consistência visual
53
+ - Tooltips acessíveis com informações detalhadas
54
+ - Suporte a temas claro/escuro automático
55
+ - Responsivo via ResponsiveContainer interno
56
+ - Legendas clicáveis para filtrar séries
57
+
58
+ **Notas:**
59
+ - Utiliza a biblioteca **Recharts** internamente
60
+ - As cores são definidas via CSS variables (
61
+ - )
62
+ - Suporte automático a temas light/dark
63
+ - Configure
64
+ - para definir cores e labels de cada série
65
+ - Use
66
+ - com
67
+ - para grids mais limpos
68
+ - Remova
69
+ - e
70
+ - para visual mais moderno
71
+
72
+ > Fonte: `src\design-system\docs\components\ChartDoc.tsx`
73
+
74
+ ---
75
+
76
+ ### Dashboards — Visão Geral
77
+
78
+ Módulo completo de dashboards portado do qex-dashboards Angular. Inclui 14 tipos de painéis com Recharts, grid responsivo com drag-and-drop via @dnd-kit, lista com filtros, formulário multilíngue e visualizador com toolbar.
79
+
80
+ **Uso:**
81
+ ```tsx
82
+ import {
83
+ // Orquestrador principal
84
+ DashboardGeneralView,
85
+
86
+ // Componentes de página
87
+ DashboardView,
88
+ DashboardList,
89
+ DashboardForm,
90
+ DashboardGrid,
91
+ DashboardPanelRenderer,
92
+
93
+ // Painéis individuais
94
+ NumericPanel, TextPanel, ListPanel,
95
+ CartesianPanel, PiePanel, ParetoPanel,
96
+ BurndownPanel, PerformancePanel, MatrixRiskPanel,
97
+
98
+ // Shared de painel
99
+ PanelHeader, PanelError, PanelLoader, PanelNoData, PanelUnavailable,
100
+
101
+ // Types & Helpers
102
+ DashboardPanelType, PanelState, AggregationType,
103
+ type PanelConfig, type Dashboard, type DashboardPanel,
104
+ getDefaultPanelSize, getMinPanelSize,
105
+ currencyFormatter, processUrl, getLinkFromRow,
106
+ } from 'forlogic-core';
107
+ ```
108
+
109
+ **Props:**
110
+ | Prop | Tipo | Padrão | Descrição |
111
+ |------|------|--------|-----------|
112
+ | `DashboardGeneralView` | `Component` | - | Página orquestradora — integra List → View → Form com máquina de estados, carousel auto-advance e suporte a General View. |
113
+ | `DashboardView` | `Component` | - | Viewer com toolbar (refresh, fullscreen, favorito, share), tabs de páginas e grid de painéis. |
114
+ | `DashboardList` | `Component` | - | Lista/tabela com busca, filtros rápidos, favoritos e menu de contexto. |
115
+ | `DashboardForm` | `Component` | - | Formulário com títulos multilíngue, configurações e aba de compartilhamento. |
116
+ | `DashboardGrid` | `Component` | - | Grid de 8 colunas com @dnd-kit para posicionamento via drag-and-drop. |
117
+ | `DashboardPanelRenderer` | `Component` | - | Mapeia DashboardPanelType → componente React (14 tipos). |
118
+ | `PanelConfig` | `Interface` | - | Configuração base compartilhada por todos os painéis (título, tipo, query, cores, etc.). |
119
+ | `PanelState` | `Enum` | - | Loading (0), Loaded (1), Error (3), NoData (4), Unavailable (5). |
120
+
121
+ **Exemplos:**
122
+ ```tsx
123
+ // O renderer mapeia typeId → componente automaticamente
124
+ <DashboardPanelRenderer
125
+ config={{ ...panelConfig, typeId: DashboardPanelType.Column }}
126
+ state={PanelState.Loaded}
127
+ cartesianData={chartData}
128
+ cartesianSeries={[{ dataKey:
129
+ ```
130
+
131
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardOverviewDoc.tsx`
132
+
133
+ ---
134
+
135
+ ### DashboardGeneralView
136
+
137
+ Componente orquestrador que gerencia todo o ciclo de vida do módulo de Dashboards. Integra DashboardList, DashboardView e DashboardForm através de uma máquina de estados, com suporte a carousel auto-advance e General View.
138
+
139
+ **Uso:**
140
+ ```tsx
141
+ import { DashboardGeneralView } from 'forlogic-core';
142
+
143
+ // Uso básico (uncontrolled — gerencia estado internamente)
144
+ <DashboardGeneralView
145
+ dashboards={dashboards}
146
+ limit={{ maxDashboards: 50, countDashboards: 12 }}
147
+ canAdd canEdit canRemove
148
+ activePanels={panels}
149
+ activePages={pages}
150
+ getPanelData={(panelId) => ({
151
+ state: PanelState.Loaded,
152
+ data: panelData[panelId],
153
+ })}
154
+ onOpen={(d) => loadPanels(d.id)}
155
+ onSave={(values) => createDashboard(values)}
156
+ onUpdate={(id, values) => updateDashboard(id, values)}
157
+ onRemove={(d) => removeDashboard(d.id)}
158
+ onToggleFavorite={(d) => toggleFav(d.id)}
159
+ />
160
+
161
+ // Uso controlado (com react-router)
162
+ const [viewState, setViewState] = useState({ mode: 'list' });
163
+
164
+ <DashboardGeneralView
165
+ dashboards={dashboards}
166
+ viewState={viewState}
167
+ onViewStateChange={(state) => {
168
+ setViewState(state);
169
+ if (state.mode === 'view') navigate(\`/dashboards/\${state.dashboardId}\`);
170
+ if (state.mode === 'list') navigate('/dashboards');
171
+ }}
172
+ // ... demais props
173
+ />
174
+ ```
175
+
176
+ **Exemplos:**
177
+ ```tsx
178
+ // DashboardViewState
179
+ type DashboardViewState =
180
+ | { mode:
181
+ ```
182
+
183
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardGeneralViewDoc.tsx`
184
+
185
+ ---
186
+
187
+ ### DashboardList
188
+
189
+ Lista/tabela de dashboards com busca integrada, filtros rápidos (Todos / Meus / Favoritos), toggle de favorito, status ativo/inativo, ícone de compartilhamento e menu de contexto por linha.
190
+
191
+ **Uso:**
192
+ ```tsx
193
+ import { DashboardList, QuickFilterDashboard } from 'forlogic-core';
194
+
195
+ <DashboardList
196
+ dashboards={dashboards}
197
+ limit={{ maxDashboards: 50, countDashboards: 12 }}
198
+ language={DashboardLanguage.PtBr}
199
+ canAdd canEdit canRemove
200
+ onOpen={(d) => navigate(\`/dashboards/\${d.id}\`)}
201
+ onEdit={(d) => navigate(\`/dashboards/\${d.id}/edit\`)}
202
+ onShare={(d) => openShareDialog(d)}
203
+ onDuplicate={(d) => duplicateDashboard(d.id)}
204
+ onRemove={(d) => removeDashboard(d.id)}
205
+ onAdd={() => navigate('/dashboards/new')}
206
+ onToggleFavorite={(d) => toggleFavorite(d.id)}
207
+ onSearch={(q) => setSearch(q)}
208
+ onQuickFilterChange={(f) => setFilter(f)}
209
+ />
210
+ ```
211
+
212
+ **Exemplos:**
213
+ ```tsx
214
+ <DashboardList
215
+ dashboards={dashboards}
216
+ limit={{ maxDashboards: 50, countDashboards: 12 }}
217
+ canAdd canEdit canRemove
218
+ onOpen={(d) => openDashboard(d)}
219
+ onToggleFavorite={(d) => toggleFav(d.id)}
220
+ onSearch={(q) => fetchFiltered(q)}
221
+ onQuickFilterChange={(filter) => {
222
+ // QuickFilterDashboard.All | OnlyMine | Favorites
223
+ refetch(filter);
224
+ }}
225
+ />
226
+ ```
227
+ ```tsx
228
+ // As ações são controladas por callbacks
229
+ <DashboardList
230
+ canEdit={true}
231
+ canRemove={true}
232
+ onOpen={(d) => navigate(\
233
+ ```
234
+
235
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardListDoc.tsx`
236
+
237
+ ---
238
+
239
+ ### DashboardForm
240
+
241
+ Formulário de criação/edição de dashboards com títulos multilíngue (PT-BR, EN-US, ES-ES), intervalo de atualização, tipo de visualização (Normal/Carousel), switch de situação e aba de compartilhamento com três modos.
242
+
243
+ **Uso:**
244
+ ```tsx
245
+ import { DashboardForm, type DashboardFormValues } from 'forlogic-core';
246
+
247
+ // Criação
248
+ <DashboardForm
249
+ onSave={(values: DashboardFormValues) => {
250
+ // values: { titlePtBr, titleEnUs, titleEsEs, isActive,
251
+ // idUpdateTime, idViewType, idPageTime,
252
+ // idShare, groups?, places?, collaborators? }
253
+ createDashboard(values);
254
+ }}
255
+ onCancel={() => navigate('/dashboards')}
256
+ />
257
+
258
+ // Edição
259
+ <DashboardForm
260
+ dashboard={existingDashboard}
261
+ users={usersList}
262
+ groups={groupsList}
263
+ places={placesList}
264
+ collaborators={collaboratorsList}
265
+ isSaving={mutation.isPending}
266
+ onSave={(values) => updateDashboard(dashboard.id, values)}
267
+ onCancel={() => goBack()}
268
+ />
269
+ ```
270
+
271
+ **Props:**
272
+ | Prop | Tipo | Padrão | Descrição |
273
+ |------|------|--------|-----------|
274
+ | `dashboard` | `Dashboard | null` | - | Dashboard existente para edição. null para criação. |
275
+ | `initialTab` | `DashboardFormTab` | - | Aba inicial (General ou Share). Default: General. |
276
+ | `isSaving` | `boolean` | - | Desabilita o botão salvar e mostra spinner. |
277
+ | `isQualitfy` | `boolean` | - | Dashboard padrão Qualitfy — bloqueia campos de configuração. |
278
+ | `users` | `Array<{ id, name }>` | - | Lista para seletor de responsável. |
279
+ | `groups / places / collaborators` | `Array<{ id, name }>` | - | Listas para aba de compartilhamento. |
280
+ | `onSave` | `(values: DashboardFormValues) => void` | - | Chamado ao clicar Salvar com valores válidos. |
281
+ | `onCancel` | `() => void` | - | Chamado ao clicar Cancelar. |
282
+
283
+ **Exemplos:**
284
+ ```tsx
285
+ <DashboardForm
286
+ dashboard={null} // null = criação
287
+ users={[
288
+ { id:
289
+ ```
290
+
291
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardFormDoc.tsx`
292
+
293
+ ---
294
+
295
+ ### DashboardView
296
+
297
+ *Documentação não extraída automaticamente. Consulte o Design System interativo em `/ds`.*
298
+
299
+ ---
300
+
301
+ ### DashboardGrid
302
+
303
+ Grid de 8 colunas com posicionamento por col/row e dimensão por sizeX/sizeY. Suporta drag-and-drop via @dnd-kit quando allowDragging é true. Cada painel é renderizado como um card com header arrastável.
304
+
305
+ **Uso:**
306
+ ```tsx
307
+ import { DashboardGrid, getDefaultPanelSize, getMinPanelSize } from 'forlogic-core';
308
+
309
+ <DashboardGrid
310
+ panels={[
311
+ { id: 'p1', col: 0, row: 0, sizeX: 4, sizeY: 2 },
312
+ { id: 'p2', col: 4, row: 0, sizeX: 4, sizeY: 2 },
313
+ { id: 'p3', col: 0, row: 2, sizeX: 8, sizeY: 2 },
314
+ ]}
315
+ columns={8} // padrão: 8
316
+ cellHeight={160} // padrão: 160px
317
+ cellGap={10} // padrão: 10px
318
+ allowDragging={canEdit}
319
+ showGridLines={canEdit}
320
+ renderPanel={(panelId) => <MyPanelComponent id={panelId} />}
321
+ onLayoutChange={(updatedPanels) => saveLayout(updatedPanels)}
322
+ />
323
+ ```
324
+
325
+ **Exemplos:**
326
+ ```tsx
327
+ <DashboardGrid
328
+ panels={[
329
+ { id:
330
+ ```
331
+
332
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardGridDoc.tsx`
333
+
334
+ ---
335
+
336
+ ### DashboardPanelRenderer
337
+
338
+ Componente de roteamento que mapeia DashboardPanelType para o componente React correto. Recebe config + state e props de dados especializadas, delegando a renderização ao painel apropriado.
339
+
340
+ **Uso:**
341
+ ```tsx
342
+ import { DashboardPanelRenderer, PanelState, DashboardPanelType } from 'forlogic-core';
343
+
344
+ // O renderer resolve automaticamente qual componente usar
345
+ <DashboardPanelRenderer
346
+ config={{
347
+ id: 'p1',
348
+ title: 'Ocorrências por Mês',
349
+ typeId: DashboardPanelType.Column,
350
+ // ... demais campos de PanelConfig
351
+ }}
352
+ state={PanelState.Loaded}
353
+ cartesianData={[
354
+ { key: 'Jan', value: 42 },
355
+ { key: 'Fev', value: 58 },
356
+ ]}
357
+ cartesianSeries={[{ dataKey: 'value', name: 'Total' }]}
358
+ />
359
+
360
+ // Para NumericPanel, use numericValue:
361
+ <DashboardPanelRenderer
362
+ config={{ ...config, typeId: DashboardPanelType.Numeric }}
363
+ state={PanelState.Loaded}
364
+ numericValue={1247}
365
+ />
366
+
367
+ // Para MatrixRisk, use matrixRule + matrixRisks:
368
+ <DashboardPanelRenderer
369
+ config={{ ...config, typeId: DashboardPanelType.RiskMatrix }}
370
+ state={PanelState.Loaded}
371
+ matrixRule={rule}
372
+ matrixRisks={risks}
373
+ />
374
+ ```
375
+
376
+ **Props:**
377
+ | Prop | Tipo | Padrão | Descrição |
378
+ |------|------|--------|-----------|
379
+ | `config` | `PanelConfig` | - | Configuração do painel — inclui typeId que determina qual componente renderizar. |
380
+ | `state` | `PanelState` | - | Estado atual do painel (Loading, Loaded, Error, NoData, Unavailable). |
381
+
382
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardPanelRendererDoc.tsx`
383
+
384
+ ---
385
+
386
+ ### Painéis Básicos
387
+
388
+ Os três painéis não-gráficos do módulo de dashboards: NumericPanel (valor numérico agregado com formatação de moeda), TextPanel (HTML rico via dangerouslySetInnerHTML) e ListPanel (tabela de dados com colunas dinâmicas e links de navegação).
389
+
390
+ **Uso:**
391
+ ```tsx
392
+ import { NumericPanel, TextPanel, ListPanel, PanelState } from 'forlogic-core';
393
+
394
+ // Painel Numérico
395
+ <NumericPanel
396
+ config={panelConfig}
397
+ state={PanelState.Loaded}
398
+ value={1247}
399
+ label="Contagem" // override do label automático
400
+ onClick={() => openPopover()}
401
+ />
402
+
403
+ // Painel de Texto
404
+ <TextPanel
405
+ config={{ ...panelConfig, textTypeString: '<h3>Título</h3><p>Conteúdo</p>' }}
406
+ state={PanelState.Loaded}
407
+ />
408
+
409
+ // Painel de Lista
410
+ <ListPanel
411
+ config={panelConfig}
412
+ state={PanelState.Loaded}
413
+ data={rows}
414
+ columns={columnDefinitions}
415
+ enableRowLinks={true}
416
+ onRowClick={(row) => openDetail(row)}
417
+ />
418
+ ```
419
+
420
+ **Props:**
421
+ | Prop | Tipo | Padrão | Descrição |
422
+ |------|------|--------|-----------|
423
+ | `NumericPanel.value` | `number | string | null` | - | Valor numérico a exibir. Formatado automaticamente como moeda quando o campo é de custo. |
424
+ | `NumericPanel.label` | `string` | - | Override do label de agregação. Sem ele, usa o mapa interno (Count→Contagem, Sum→Soma, etc.). |
425
+ | `NumericPanel.onClick` | `() => void` | - | Torna o valor clicável (cursor pointer + hover). |
426
+ | `TextPanel.htmlContent` | `string` | - | HTML alternativo. Sem ele, usa config.textTypeString. |
427
+
428
+ **Exemplos:**
429
+ ```tsx
430
+ // Contagem simples
431
+ <NumericPanel config={config} state={PanelState.Loaded} value={1247} />
432
+
433
+ // Com formatação de moeda (detectado pelo campo
434
+ ```
435
+ ```tsx
436
+ <TextPanel
437
+ config={{
438
+ ...config,
439
+ textTypeString:
440
+ ```
441
+ ```tsx
442
+ <ListPanel
443
+ config={config}
444
+ state={PanelState.Loaded}
445
+ data={[
446
+ { code:
447
+ ```
448
+ ```tsx
449
+ OC-002
450
+ ```
451
+
452
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardPanelsBasicDoc.tsx`
453
+
454
+ ---
455
+
456
+ ### Painéis Cartesianos
457
+
458
+ CartesianPanel é um componente unificado que renderiza 6 variantes de gráfico (Bar, Column, StackedColumn, Area, Line, EvolutionLine) via a prop variant. Todos usam Recharts internamente e compartilham a mesma API de dados.
459
+
460
+ **Uso:**
461
+ ```tsx
462
+ import { CartesianPanel, PanelState, type CartesianSeries } from 'forlogic-core';
463
+
464
+ // Uso básico — série única
465
+ <CartesianPanel
466
+ config={panelConfig}
467
+ variant="column" // 'bar' | 'column' | 'stacked-column' | 'area' | 'line' | 'evolution-line'
468
+ state={PanelState.Loaded}
469
+ data={[
470
+ { key: 'Jan', value: 42 },
471
+ { key: 'Fev', value: 58 },
472
+ ]}
473
+ />
474
+
475
+ // Múltiplas séries
476
+ <CartesianPanel
477
+ config={panelConfig}
478
+ variant="column"
479
+ state={PanelState.Loaded}
480
+ data={data}
481
+ series={[
482
+ { dataKey: 'opened', name: 'Abertas', color: '#4e79a7' },
483
+ { dataKey: 'closed', name: 'Fechadas', color: '#59a14f' },
484
+ ]}
485
+ categoryKey="month" // chave do eixo X (default: 'key')
486
+ yAxisFormat="R$ {value}" // formato do eixo Y
487
+ onPointClick={(data, index) => openDetail(data)}
488
+ />
489
+ ```
490
+
491
+ **Exemplos:**
492
+ ```tsx
493
+ <CartesianPanel
494
+ config={config}
495
+ variant=
496
+ ```
497
+
498
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardPanelsCartesianDoc.tsx`
499
+
500
+ ---
501
+
502
+ ### Painéis Especiais
503
+
504
+ Cinco painéis especializados: PiePanel (pizza com percentuais), ParetoPanel (barras + linha cumulativa), BurndownPanel (execução vs planejamento), PerformancePanel (barras comparativas) e MatrixRiskPanel (grid de criticidade com tooltips).
505
+
506
+ **Uso:**
507
+ ```tsx
508
+ import {
509
+ PiePanel, ParetoPanel, BurndownPanel,
510
+ PerformancePanel, MatrixRiskPanel,
511
+ PanelState, MatrixViewType,
512
+ } from 'forlogic-core';
513
+
514
+ // Pie
515
+ <PiePanel config={config} state={PanelState.Loaded} data={pieData} />
516
+
517
+ // Pareto
518
+ <ParetoPanel config={config} state={PanelState.Loaded} data={paretoData} />
519
+
520
+ // Burndown
521
+ <BurndownPanel config={config} state={PanelState.Loaded} data={burndownData} />
522
+
523
+ // Performance
524
+ <PerformancePanel config={config} state={PanelState.Loaded} data={performanceData} />
525
+
526
+ // Matrix Risk
527
+ <MatrixRiskPanel
528
+ config={config}
529
+ state={PanelState.Loaded}
530
+ rule={matrixRule}
531
+ risks={risks}
532
+ matrixViewType={MatrixViewType.Quantity}
533
+ />
534
+ ```
535
+
536
+ **Exemplos:**
537
+ ```tsx
538
+ <PiePanel
539
+ config={config}
540
+ state={PanelState.Loaded}
541
+ data={[
542
+ { key:
543
+ ```
544
+
545
+ > Fonte: `src\design-system\docs\components\dashboards\DashboardPanelsSpecialDoc.tsx`
546
+
547
+ ---