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
@@ -1,60 +0,0 @@
1
- import{j as e}from"./index-DkiftrvI.js";import{C as t}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function r(){const o=[{types:["Numeric (8)"],component:"NumericPanel",props:"numericValue"},{types:["Text (1)"],component:"TextPanel",props:"—"},{types:["List (7)"],component:"ListPanel",props:"data, listColumns"},{types:["Bar (3)","Column (4)","StackedColumn (5)","Area (2)","Line (6)","EvolutionLine (14)"],component:"CartesianPanel",props:"cartesianData, cartesianSeries"},{types:["Pie (10)"],component:"PiePanel",props:"data"},{types:["Pareto (9)"],component:"ParetoPanel",props:"data"},{types:["Burndown (12)"],component:"BurndownPanel",props:"burndownData"},{types:["PerformanceColumns (13)"],component:"PerformancePanel",props:"performanceData"},{types:["RiskMatrix (11)"],component:"MatrixRiskPanel",props:"matrixRule, matrixRisks"}];return e.jsx("div",{className:"space-y-1.5",children:o.map(a=>e.jsxs("div",{className:"flex items-start gap-3 p-2 rounded border border-border bg-card text-xs",children:[e.jsx("div",{className:"flex flex-wrap gap-1 min-w-[180px]",children:a.types.map(n=>e.jsx("span",{className:"px-1.5 py-0.5 bg-primary/10 text-primary rounded font-mono",children:n},n))}),e.jsxs("span",{className:"text-foreground font-semibold",children:["→ ",a.component]}),e.jsx("span",{className:"text-muted-foreground ml-auto",children:a.props})]},a.component))})}function p(){return e.jsx(t,{title:"DashboardPanelRenderer",description:"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.",component:e.jsx(r,{}),usage:`import { DashboardPanelRenderer, PanelState, DashboardPanelType } from 'forlogic-core';
2
-
3
- // O renderer resolve automaticamente qual componente usar
4
- <DashboardPanelRenderer
5
- config={{
6
- id: 'p1',
7
- title: 'Ocorrências por Mês',
8
- typeId: DashboardPanelType.Column,
9
- // ... demais campos de PanelConfig
10
- }}
11
- state={PanelState.Loaded}
12
- cartesianData={[
13
- { key: 'Jan', value: 42 },
14
- { key: 'Fev', value: 58 },
15
- ]}
16
- cartesianSeries={[{ dataKey: 'value', name: 'Total' }]}
17
- />
18
-
19
- // Para NumericPanel, use numericValue:
20
- <DashboardPanelRenderer
21
- config={{ ...config, typeId: DashboardPanelType.Numeric }}
22
- state={PanelState.Loaded}
23
- numericValue={1247}
24
- />
25
-
26
- // Para MatrixRisk, use matrixRule + matrixRisks:
27
- <DashboardPanelRenderer
28
- config={{ ...config, typeId: DashboardPanelType.RiskMatrix }}
29
- state={PanelState.Loaded}
30
- matrixRule={rule}
31
- matrixRisks={risks}
32
- />`,examples:[{title:"Mapa de Tipos → Componentes",description:"O renderer usa um mapa interno CARTESIAN_VARIANT_MAP para os 6 tipos cartesianos e um switch para os demais. Props de dados são injetadas conforme o tipo.",preview:e.jsx(r,{}),code:`// Internamente:
33
- const CARTESIAN_VARIANT_MAP = {
34
- [DashboardPanelType.Bar]: 'bar',
35
- [DashboardPanelType.Column]: 'column',
36
- [DashboardPanelType.StackedColumn]: 'stacked-column',
37
- [DashboardPanelType.Area]: 'area',
38
- [DashboardPanelType.Line]: 'line',
39
- [DashboardPanelType.EvolutionLine]: 'evolution-line',
40
- };
41
-
42
- // Se o typeId está no mapa → CartesianPanel com a variant
43
- // Senão → switch específico (Numeric, Text, List, Pie, etc.)`},{title:"Uso com DashboardView",description:"No DashboardView, cada painel é renderizado internamente pelo DashboardPanelRenderer. Os dados são fornecidos via getPanelData callback.",preview:e.jsxs("div",{className:"p-3 rounded-lg border border-border bg-card text-xs space-y-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold text-foreground",children:"DashboardView"}),e.jsx("span",{className:"text-muted-foreground",children:"→"}),e.jsx("span",{className:"font-semibold text-foreground",children:"DashboardGrid"}),e.jsx("span",{className:"text-muted-foreground",children:"→"}),e.jsx("span",{className:"font-semibold text-primary",children:"DashboardPanelRenderer"})]}),e.jsx("p",{className:"text-muted-foreground",children:"Cada panelId é resolvido via getPanelData(panelId) → { state, data, numericValue, ... }"})]}),code:`<DashboardView
44
- dashboard={dashboard}
45
- panels={panels}
46
- getPanelData={(panelId) => {
47
- const panel = panels.find(p => p.id === panelId);
48
- return {
49
- state: panelStates[panelId] ?? PanelState.Loading,
50
- data: panelResults[panelId],
51
- numericValue: panel?.typeId === DashboardPanelType.Numeric ? numericValues[panelId] : undefined,
52
- cartesianData: chartData[panelId],
53
- cartesianSeries: chartSeries[panelId],
54
- burndownData: burndownData[panelId],
55
- performanceData: performanceData[panelId],
56
- matrixRule: matrixRules[panelId],
57
- matrixRisks: matrixRisks[panelId],
58
- };
59
- }}
60
- />`}],props:[{name:"config",type:"PanelConfig",description:"Configuração do painel — inclui typeId que determina qual componente renderizar."},{name:"state",type:"PanelState",description:"Estado atual do painel (Loading, Loaded, Error, NoData, Unavailable)."},{name:"data",type:"PanelResult[]",description:"Dados genéricos para Pie, Pareto, List."},{name:"numericValue",type:"number | string | null",description:"Valor para NumericPanel."},{name:"cartesianData",type:"Record<string, unknown>[]",description:"Dados para os 6 tipos cartesianos."},{name:"cartesianSeries",type:"CartesianSeries[]",description:"Definições de série para cartesianos."},{name:"listColumns",type:"ListPanelColumn[]",description:"Colunas para ListPanel."},{name:"burndownData",type:"BurndownDataPoint[]",description:"Dados para BurndownPanel."},{name:"performanceData",type:"PerformanceDataPoint[]",description:"Dados para PerformancePanel."},{name:"matrixRule",type:"MatrixRule",description:"Regra da matriz para MatrixRiskPanel."},{name:"matrixRisks",type:"MatrixRisk[]",description:"Riscos para MatrixRiskPanel."},{name:"onPanelClick",type:"(data) => void",description:"Callback genérico de clique."}]})}export{p as DashboardPanelRendererDoc};
@@ -1,62 +0,0 @@
1
- import{j as e,gB as n,gx as o,gw as a,gC as i,gD as c,gE as m,gF as u}from"./index-DkiftrvI.js";import{C as g}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const t=(r,s,d)=>({id:r,title:s,typeId:d,queryId:"q1",queryContextId:"",queryTitle:"",querySelectedColumns:"",field:"status",fieldType:"string",aggregationType:i.Count,paletteId:u.Default,hexColors:[]});function l(){return e.jsxs("div",{className:"grid grid-cols-3 gap-3 w-full",children:[e.jsx("div",{className:"border border-border rounded-lg bg-card h-32",children:e.jsx(n,{config:t("n1","Total de Ocorrências",a.Numeric),state:o.Loaded,value:1247})}),e.jsx("div",{className:"border border-border rounded-lg bg-card h-32",children:e.jsx(n,{config:{...t("n2","Custo Total",a.Numeric),aggregationType:i.Sum,field:"totalcost"},state:o.Loaded,value:89450.75})}),e.jsx("div",{className:"border border-border rounded-lg bg-card h-32",children:e.jsx(n,{config:t("n3","Carregando...",a.Numeric),state:o.Loading})})]})}function p(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-40 w-full",children:e.jsx(c,{config:{...t("t1","Informações",a.Text),textTypeString:"<h3>Nota Importante</h3><p>Este painel suporta <strong>HTML rico</strong> com formatação, links e listas.</p><ul><li>Item 1</li><li>Item 2</li></ul>"},state:o.Loaded})})}function f(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-48 w-full",children:e.jsx(m,{config:t("l1","Últimas Ocorrências",a.List),state:o.Loaded,data:[{code:"OC-001",title:"Não conformidade produção",status:"Aberto",date:"15/03/2025"},{code:"OC-002",title:"Reclamação do cliente",status:"Em andamento",date:"18/03/2025"},{code:"OC-003",title:"Desvio de processo",status:"Concluído",date:"20/03/2025"}],columns:[{columnName:"code",columnLabel:"Código",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Código"},{columnName:"title",columnLabel:"Título",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Título"},{columnName:"status",columnLabel:"Status",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Status"},{columnName:"date",columnLabel:"Data",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Data"}]})})}function T(){return e.jsx(g,{title:"Painéis Básicos",description:"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).",component:e.jsx(l,{}),usage:`import { NumericPanel, TextPanel, ListPanel, PanelState } from 'forlogic-core';
2
-
3
- // Painel Numérico
4
- <NumericPanel
5
- config={panelConfig}
6
- state={PanelState.Loaded}
7
- value={1247}
8
- label="Contagem" // override do label automático
9
- onClick={() => openPopover()}
10
- />
11
-
12
- // Painel de Texto
13
- <TextPanel
14
- config={{ ...panelConfig, textTypeString: '<h3>Título</h3><p>Conteúdo</p>' }}
15
- state={PanelState.Loaded}
16
- />
17
-
18
- // Painel de Lista
19
- <ListPanel
20
- config={panelConfig}
21
- state={PanelState.Loaded}
22
- data={rows}
23
- columns={columnDefinitions}
24
- enableRowLinks={true}
25
- onRowClick={(row) => openDetail(row)}
26
- />`,examples:[{title:"NumericPanel",description:"Exibe um valor numérico centralizado com label de agregação automático (Contagem, Soma, Média, etc.). Detecta automaticamente campos de moeda e formata com R$. Suporta clique para popover.",preview:e.jsx(l,{}),code:`// Contagem simples
27
- <NumericPanel config={config} state={PanelState.Loaded} value={1247} />
28
-
29
- // Com formatação de moeda (detectado pelo campo 'totalcost')
30
- <NumericPanel
31
- config={{ ...config, field: 'totalcost', aggregationType: AggregationType.Sum }}
32
- state={PanelState.Loaded}
33
- value={89450.75}
34
- />
35
- // Exibe: R$ 89.450,75
36
-
37
- // Com clique
38
- <NumericPanel config={config} state={PanelState.Loaded} value={42} onClick={() => showDetails()} />`},{title:"TextPanel",description:"Renderiza HTML rico configurado no campo textTypeString do painel. Usa classes prose do Tailwind Typography para estilização automática.",preview:e.jsx(p,{}),code:`<TextPanel
39
- config={{
40
- ...config,
41
- textTypeString: '<h3>Informações</h3><p>Texto <strong>formatado</strong></p>'
42
- }}
43
- state={PanelState.Loaded}
44
- // Ou via prop direta:
45
- htmlContent="<p>Conteúdo alternativo</p>"
46
- />`},{title:"ListPanel",description:"Tabela de dados com colunas dinâmicas baseadas em SelectedColumn. Suporta links automáticos por linha (getLinkFromRow), colunas com render customizado e formatação automática de números e datas.",preview:e.jsx(f,{}),code:`<ListPanel
47
- config={config}
48
- state={PanelState.Loaded}
49
- data={[
50
- { code: 'OC-001', title: 'Não conformidade', status: 'Aberto' },
51
- { code: 'OC-002', title: 'Reclamação', status: 'Em andamento' },
52
- ]}
53
- columns={[
54
- { columnName: 'code', columnLabel: 'Código', columnType: 'string', ... },
55
- { columnName: 'title', columnLabel: 'Título', columnType: 'string', ... },
56
- { columnName: 'status', columnLabel: 'Status', columnType: 'string',
57
- render: (value) => <Badge>{value}</Badge> // render customizado
58
- },
59
- ]}
60
- enableRowLinks={true}
61
- onRowClick={(row) => openDetail(row)}
62
- />`}],props:[{name:"NumericPanel.value",type:"number | string | null",description:"Valor numérico a exibir. Formatado automaticamente como moeda quando o campo é de custo."},{name:"NumericPanel.label",type:"string",description:"Override do label de agregação. Sem ele, usa o mapa interno (Count→Contagem, Sum→Soma, etc.)."},{name:"NumericPanel.onClick",type:"() => void",description:"Torna o valor clicável (cursor pointer + hover)."},{name:"TextPanel.htmlContent",type:"string",description:"HTML alternativo. Sem ele, usa config.textTypeString."},{name:"ListPanel.data",type:"Record<string, unknown>[]",description:"Array de objetos — cada objeto é uma linha da tabela."},{name:"ListPanel.columns",type:"ListPanelColumn[]",description:"Definições de coluna (extends SelectedColumn + render opcional)."},{name:"ListPanel.enableRowLinks",type:"boolean",description:"Auto-navega para link da linha via getLinkFromRow. Default: true."},{name:"ListPanel.onRowClick",type:"(row) => void",description:"Override do comportamento de clique na linha."}]})}export{T as DashboardPanelsBasicDoc};
@@ -1,75 +0,0 @@
1
- import{j as e,gG as a,gx as r,gw as t,gF as l,gC as c}from"./index-DkiftrvI.js";import{C as u}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const o=(d,n)=>({id:`cp-${n}`,title:d,typeId:n,queryId:"q1",queryContextId:"",queryTitle:"",querySelectedColumns:"",field:"status",fieldType:"string",aggregationType:c.Count,paletteId:l.Default,hexColors:["#4e79a7","#f28e2b","#e15759","#76b7b2","#59a14f"]}),i=[{key:"Jan",value:42,series2:28},{key:"Fev",value:58,series2:35},{key:"Mar",value:35,series2:42},{key:"Abr",value:71,series2:50},{key:"Mai",value:49,series2:38},{key:"Jun",value:63,series2:55}];function s(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Ocorrências por Mês",t.Column),variant:"column",state:r.Loaded,data:i,series:[{dataKey:"value",name:"Ocorrências"}]})})}function m(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Top Causas",t.Bar),variant:"bar",state:r.Loaded,data:[{key:"Falha no processo",value:45},{key:"Erro humano",value:32},{key:"Material defeituoso",value:28},{key:"Equipamento",value:15}],series:[{dataKey:"value",name:"Quantidade"}]})})}function p(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Comparativo Mensal",t.Column),variant:"column",state:r.Loaded,data:i,series:[{dataKey:"value",name:"2024",color:"#4e79a7"},{dataKey:"series2",name:"2025",color:"#f28e2b"}]})})}function v(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Ocorrências Empilhadas",t.StackedColumn),variant:"stacked-column",state:r.Loaded,data:i,series:[{dataKey:"value",name:"Abertas",stackId:"stack"},{dataKey:"series2",name:"Fechadas",stackId:"stack"}]})})}function g(){return e.jsxs("div",{className:"grid grid-cols-2 gap-3 w-full",children:[e.jsx("div",{className:"border border-border rounded-lg bg-card h-52",children:e.jsx(a,{config:o("Tendência (Área)",t.Area),variant:"area",state:r.Loaded,data:i,series:[{dataKey:"value",name:"Valor"}]})}),e.jsx("div",{className:"border border-border rounded-lg bg-card h-52",children:e.jsx(a,{config:o("Evolução (Linha)",t.Line),variant:"line",state:r.Loaded,data:i,series:[{dataKey:"value",name:"2024"},{dataKey:"series2",name:"2025"}]})})]})}function b(){return e.jsx(u,{title:"Painéis Cartesianos",description:"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.",component:e.jsx(s,{}),usage:`import { CartesianPanel, PanelState, type CartesianSeries } from 'forlogic-core';
2
-
3
- // Uso básico — série única
4
- <CartesianPanel
5
- config={panelConfig}
6
- variant="column" // 'bar' | 'column' | 'stacked-column' | 'area' | 'line' | 'evolution-line'
7
- state={PanelState.Loaded}
8
- data={[
9
- { key: 'Jan', value: 42 },
10
- { key: 'Fev', value: 58 },
11
- ]}
12
- />
13
-
14
- // Múltiplas séries
15
- <CartesianPanel
16
- config={panelConfig}
17
- variant="column"
18
- state={PanelState.Loaded}
19
- data={data}
20
- series={[
21
- { dataKey: 'opened', name: 'Abertas', color: '#4e79a7' },
22
- { dataKey: 'closed', name: 'Fechadas', color: '#59a14f' },
23
- ]}
24
- categoryKey="month" // chave do eixo X (default: 'key')
25
- yAxisFormat="R$ {value}" // formato do eixo Y
26
- onPointClick={(data, index) => openDetail(data)}
27
- />`,examples:[{title:"Column (Colunas Verticais)",description:"Variante padrão para visualizar dados categóricos. Barras verticais com tooltip e labels rotacionados.",preview:e.jsx(s,{}),code:`<CartesianPanel
28
- config={config}
29
- variant="column"
30
- state={PanelState.Loaded}
31
- data={[
32
- { key: 'Jan', value: 42 },
33
- { key: 'Fev', value: 58 },
34
- { key: 'Mar', value: 35 },
35
- ]}
36
- />`},{title:"Bar (Barras Horizontais)",description:"Variante horizontal — ideal para labels longos (ex: nomes de causas). O eixo Y vira category e o X vira value.",preview:e.jsx(m,{}),code:`<CartesianPanel
37
- config={config}
38
- variant="bar"
39
- state={PanelState.Loaded}
40
- data={[
41
- { key: 'Falha no processo', value: 45 },
42
- { key: 'Erro humano', value: 32 },
43
- ]}
44
- />`},{title:"Múltiplas Séries",description:"Defina múltiplas séries via prop series. Cada série tem dataKey, name e color opcional. A legenda aparece automaticamente.",preview:e.jsx(p,{}),code:`<CartesianPanel
45
- config={config}
46
- variant="column"
47
- state={PanelState.Loaded}
48
- data={data}
49
- series={[
50
- { dataKey: 'value', name: '2024', color: '#4e79a7' },
51
- { dataKey: 'series2', name: '2025', color: '#f28e2b' },
52
- ]}
53
- />`},{title:"Stacked Column (Colunas Empilhadas)",description:"Barras empilhadas usando stackId. Útil para comparar composições entre categorias.",preview:e.jsx(v,{}),code:`<CartesianPanel
54
- config={config}
55
- variant="stacked-column"
56
- state={PanelState.Loaded}
57
- data={data}
58
- series={[
59
- { dataKey: 'value', name: 'Abertas', stackId: 'stack' },
60
- { dataKey: 'series2', name: 'Fechadas', stackId: 'stack' },
61
- ]}
62
- />`},{title:"Area & Line",description:"Variantes Area e Line para séries temporais. Area tem preenchimento com opacidade; Line tem dots nos pontos.",preview:e.jsx(g,{}),code:`// Área
63
- <CartesianPanel config={config} variant="area" state={PanelState.Loaded} data={data} />
64
-
65
- // Linha com múltiplas séries
66
- <CartesianPanel
67
- config={config}
68
- variant="line"
69
- state={PanelState.Loaded}
70
- data={data}
71
- series={[
72
- { dataKey: 'value', name: '2024' },
73
- { dataKey: 'series2', name: '2025' },
74
- ]}
75
- />`}],props:[{name:"variant",type:"CartesianVariant",description:"'bar' | 'column' | 'stacked-column' | 'area' | 'line' | 'evolution-line'"},{name:"data",type:"Record<string, unknown>[]",description:'Array de data points. Cada objeto precisa ter a chave do categoryKey (default: "key") e as chaves das séries.'},{name:"series",type:"CartesianSeries[]",description:'Definições de série: { dataKey, name?, color?, stackId? }. Se omitido, usa { dataKey: "value" }.'},{name:"categoryKey",type:"string",description:'Chave do eixo de categorias nos dados. Default: "key".'},{name:"colors",type:"string[]",description:"Override de paleta de cores. Sem ela, usa config.hexColors ou DEFAULT_COLORS."},{name:"yAxisFormat",type:"string",description:'Template do eixo Y (ex: "R$ {value}"). Substitui {value} pelo número formatado.'},{name:"onPointClick",type:"(data, index) => void",description:"Chamado ao clicar em uma barra/ponto."},{name:"onExport",type:"() => void",description:"Callback para exportação — aparece no menu do PanelHeader."}]})}export{b as DashboardPanelsCartesianDoc};
@@ -1,83 +0,0 @@
1
- import{j as e,gH as d,gx as a,gw as o,gI as c,gJ as l,gK as s,gL as p,gM as P,gF as m,gC as u}from"./index-DkiftrvI.js";import{C as f}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const n=(i,r)=>({id:`sp-${r}`,title:i,typeId:r,queryId:"q1",queryContextId:"",queryTitle:"",querySelectedColumns:"",field:"status",fieldType:"string",aggregationType:u.Count,paletteId:m.Default,hexColors:["#4e79a7","#f28e2b","#e15759","#76b7b2","#59a14f","#edc948"]}),x=[{key:"Conforme",value:120},{key:"Não Conforme",value:45},{key:"Em Análise",value:30},{key:"Pendente",value:15}],g=[{key:"Falha no processo",value:45},{key:"Erro humano",value:32},{key:"Material",value:28},{key:"Equipamento",value:15},{key:"Ambiente",value:8},{key:"Outros",value:5}];function t(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(d,{config:n("Status das Ocorrências",o.Pie),state:a.Loaded,data:x})})}function k(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(c,{config:n("Causas Raiz — Pareto",o.Pareto),state:a.Loaded,data:g})})}function y(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(l,{config:n("Burndown — Plano de Ação",o.Burndown),state:a.Loaded,data:[{date:"01/Jan",executedPercentage:0,plannedPercentage:0},{date:"15/Jan",executedPercentage:12,plannedPercentage:20},{date:"01/Fev",executedPercentage:28,plannedPercentage:40},{date:"15/Fev",executedPercentage:45,plannedPercentage:60},{date:"01/Mar",executedPercentage:65,plannedPercentage:80},{date:"15/Mar",executedPercentage:82,plannedPercentage:100}]})})}function b(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(s,{config:n("Performance — Projetos",o.PerformanceColumns),state:a.Loaded,data:[{name:"Projeto A",executedWork:85,plannedWork:90},{name:"Projeto B",executedWork:72,plannedWork:80},{name:"Projeto C",executedWork:95,plannedWork:70},{name:"Projeto D",executedWork:45,plannedWork:60}]})})}function v(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(p,{config:n("Matriz de Risco",o.RiskMatrix),state:a.Loaded,matrixViewType:P.Quantity,rule:{name_x:"Probabilidade",name_y:"Impacto",parametersX:[{name:"Baixa",position:1},{name:"Média",position:2},{name:"Alta",position:3}],parametersY:[{name:"Baixo",position:1},{name:"Médio",position:2},{name:"Alto",position:3}],colorMatrix:[["#4caf50","#ffeb3b","#ff9800"],["#ffeb3b","#ff9800","#f44336"],["#ff9800","#f44336","#b71c1c"]]},risks:[{code:"R-001",name:"Risco A",parameterXPosition:2,parameterYPosition:3},{code:"R-002",name:"Risco B",parameterXPosition:3,parameterYPosition:3},{code:"R-003",name:"Risco C",parameterXPosition:1,parameterYPosition:1},{code:"R-004",name:"Risco D",parameterXPosition:2,parameterYPosition:2}]})})}function j(){return e.jsx(f,{title:"Painéis Especiais",description:"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).",component:e.jsx(t,{}),usage:`import {
2
- PiePanel, ParetoPanel, BurndownPanel,
3
- PerformancePanel, MatrixRiskPanel,
4
- PanelState, MatrixViewType,
5
- } from 'forlogic-core';
6
-
7
- // Pie
8
- <PiePanel config={config} state={PanelState.Loaded} data={pieData} />
9
-
10
- // Pareto
11
- <ParetoPanel config={config} state={PanelState.Loaded} data={paretoData} />
12
-
13
- // Burndown
14
- <BurndownPanel config={config} state={PanelState.Loaded} data={burndownData} />
15
-
16
- // Performance
17
- <PerformancePanel config={config} state={PanelState.Loaded} data={performanceData} />
18
-
19
- // Matrix Risk
20
- <MatrixRiskPanel
21
- config={config}
22
- state={PanelState.Loaded}
23
- rule={matrixRule}
24
- risks={risks}
25
- matrixViewType={MatrixViewType.Quantity}
26
- />`,examples:[{title:"PiePanel",description:"Gráfico de pizza com labels de percentual, tooltips com valor absoluto e percentual, e legenda. As cores vêm da paleta do config ou da prop colors.",preview:e.jsx(t,{}),code:`<PiePanel
27
- config={config}
28
- state={PanelState.Loaded}
29
- data={[
30
- { key: 'Conforme', value: 120 },
31
- { key: 'Não Conforme', value: 45 },
32
- { key: 'Em Análise', value: 30 },
33
- ]}
34
- onSliceClick={(entry, index) => filterByStatus(entry.key)}
35
- />`},{title:"ParetoPanel",description:"Gráfico de Pareto com barras decrescentes (eixo esquerdo) e linha cumulativa de percentual (eixo direito, 0–100%). Os dados são automaticamente ordenados por valor decrescente.",preview:e.jsx(k,{}),code:`<ParetoPanel
36
- config={config}
37
- state={PanelState.Loaded}
38
- data={[
39
- { key: 'Falha no processo', value: 45 },
40
- { key: 'Erro humano', value: 32 },
41
- { key: 'Material', value: 28 },
42
- ]}
43
- barColor="#4e79a7"
44
- lineColor="#e31a1c"
45
- />`},{title:"BurndownPanel",description:"Gráfico de área com duas séries: Trabalho executado e Trabalho planejado. Eixo Y em percentual (0–100%). Ideal para acompanhar planos de ação.",preview:e.jsx(y,{}),code:`<BurndownPanel
46
- config={config}
47
- state={PanelState.Loaded}
48
- data={[
49
- { date: '01/Jan', executedPercentage: 0, plannedPercentage: 0 },
50
- { date: '15/Jan', executedPercentage: 12, plannedPercentage: 20 },
51
- { date: '01/Fev', executedPercentage: 28, plannedPercentage: 40 },
52
- ]}
53
- executedLabel="Trabalho executado"
54
- plannedLabel="Trabalho planejado"
55
- />`},{title:"PerformancePanel",description:"Barras lado a lado comparando Execução vs Planejamento. Eixo Y em percentual. Clique em barras para detalhar.",preview:e.jsx(b,{}),code:`<PerformancePanel
56
- config={config}
57
- state={PanelState.Loaded}
58
- data={[
59
- { name: 'Projeto A', executedWork: 85, plannedWork: 90 },
60
- { name: 'Projeto B', executedWork: 72, plannedWork: 80 },
61
- ]}
62
- onPointClick={(entry, index) => openProject(entry.name)}
63
- />`},{title:"MatrixRiskPanel",description:"Grid de criticidade com dois modos: Quantity (conta riscos por célula) e AllRisksList (mostra código de cada risco com tooltip detalhado). A cor de cada célula vem de colorMatrix.",preview:e.jsx(v,{}),code:`<MatrixRiskPanel
64
- config={config}
65
- state={PanelState.Loaded}
66
- matrixViewType={MatrixViewType.Quantity}
67
- rule={{
68
- name_x: 'Probabilidade',
69
- name_y: 'Impacto',
70
- parametersX: [{ name: 'Baixa', position: 1 }, { name: 'Média', position: 2 }, { name: 'Alta', position: 3 }],
71
- parametersY: [{ name: 'Baixo', position: 1 }, { name: 'Médio', position: 2 }, { name: 'Alto', position: 3 }],
72
- colorMatrix: [
73
- ['#4caf50', '#ffeb3b', '#ff9800'],
74
- ['#ffeb3b', '#ff9800', '#f44336'],
75
- ['#ff9800', '#f44336', '#b71c1c'],
76
- ],
77
- }}
78
- risks={[
79
- { code: 'R-001', name: 'Risco A', parameterXPosition: 2, parameterYPosition: 3 },
80
- ]}
81
- onCellClick={(x, y, risks) => showRisks(risks)}
82
- onRiskClick={(risk) => openRisk(risk.code)}
83
- />`}],props:[{name:"PiePanel.data",type:"PanelResult[]",description:"Cada item precisa de key (label) e value (número). O percentual é calculado automaticamente."},{name:"PiePanel.onSliceClick",type:"(entry, index) => void",description:"Chamado ao clicar em uma fatia."},{name:"ParetoPanel.barColor / lineColor",type:"string",description:"Override de cores. Default: primeira cor da paleta / #e31a1c."},{name:"BurndownPanel.data",type:"BurndownDataPoint[]",description:"{ date, executedPercentage, plannedPercentage }."},{name:"PerformancePanel.data",type:"PerformanceDataPoint[]",description:"{ name, executedWork, plannedWork }."},{name:"MatrixRiskPanel.rule",type:"MatrixRule",description:"Define eixos (name_x, name_y), parâmetros e colorMatrix."},{name:"MatrixRiskPanel.risks",type:"MatrixRisk[]",description:"Riscos posicionados na matriz por parameterXPosition/parameterYPosition."},{name:"MatrixRiskPanel.matrixViewType",type:"MatrixViewType",description:"Quantity (conta riscos) ou AllRisksList (mostra códigos)."}]})}export{j as DashboardPanelsSpecialDoc};
@@ -1,45 +0,0 @@
1
- import{j as e}from"./index-DkiftrvI.js";import{C as d}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function o(){return e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden bg-card w-full",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5 border-b border-border",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Indicadores de Qualidade"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"João Silva"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-muted-foreground",title:"Atualizar",children:"🔄"}),e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-muted-foreground",title:"Fullscreen",children:"⛶"}),e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-muted-foreground",title:"Compartilhar",children:"👥"}),e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-yellow-400",title:"Favorito",children:"★"})]})]}),e.jsx("div",{className:"p-3 bg-muted/30",style:{display:"grid",gridTemplateColumns:"repeat(8, 1fr)",gridTemplateRows:"repeat(2, 60px)",gap:"6px"},children:[{id:"p1",col:0,sizeX:2,sizeY:1,row:0},{id:"p2",col:2,sizeX:2,sizeY:1,row:0},{id:"p3",col:4,sizeX:4,sizeY:1,row:0},{id:"p4",col:0,sizeX:4,sizeY:1,row:1},{id:"p5",col:4,sizeX:4,sizeY:1,row:1}].map(a=>e.jsxs("div",{className:"rounded border border-border bg-card flex items-center justify-center text-[10px] font-mono text-muted-foreground",style:{gridColumn:`${a.col+1} / span ${a.sizeX}`,gridRow:`${a.row+1} / span ${a.sizeY}`},children:["Painel ",a.id]},a.id))})]})}function s(){return e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden bg-card w-full",children:[e.jsx("div",{className:"flex items-center justify-between px-4 py-2 border-b border-border",children:e.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Dashboard Carousel"})}),e.jsx("div",{className:"flex items-center gap-1 px-4 py-1.5 border-b border-border",children:["Dashboard 1","Dashboard 2","Dashboard 3"].map((a,r)=>e.jsx("span",{className:`px-3 py-1 text-xs rounded-md ${r===0?"bg-primary text-primary-foreground":"text-muted-foreground"}`,children:a},a))}),e.jsx("div",{className:"p-3 bg-muted/30 flex items-center justify-center h-20 text-xs text-muted-foreground",children:"Painéis da página ativa"})]})}function l(){return e.jsx(d,{title:"DashboardView",description:"Visualizador completo de dashboard com toolbar (refresh com cooldown, fullscreen, compartilhar, favoritar), tabs de páginas para modo carousel e grid de painéis com drag-and-drop via DashboardGrid.",component:e.jsx(o,{}),usage:`import { DashboardView, PanelState } from 'forlogic-core';
2
-
3
- <DashboardView
4
- dashboard={dashboard}
5
- panels={panels}
6
- pages={pages} // opcional — modo carousel
7
- activePageId="p1" // página ativa
8
- canEdit={true}
9
- isFullscreen={false}
10
- getPanelData={(panelId) => ({
11
- state: PanelState.Loaded,
12
- data: panelResults[panelId],
13
- numericValue: numericValues[panelId],
14
- cartesianData: chartData[panelId],
15
- cartesianSeries: chartSeries[panelId],
16
- })}
17
- onRefresh={() => refetch()}
18
- onToggleFullscreen={() => setFullscreen(f => !f)}
19
- onToggleFavorite={() => toggleFav(dashboard.id)}
20
- onEdit={() => navigate(\`/edit/\${dashboard.id}\`)}
21
- onShare={() => openShareDialog()}
22
- onAddPanel={() => openPanelForm()}
23
- onEditPanel={(id) => openPanelForm(id)}
24
- onRemovePanel={(id) => removePanel(id)}
25
- onLayoutChange={(panels) => saveLayout(panels)}
26
- onPageChange={(pageId) => setActivePage(pageId)}
27
- />`,examples:[{title:"Toolbar com Grid",description:"A toolbar inclui título, nome do responsável, botões de refresh (com cooldown de 30s), fullscreen, compartilhar e favoritar. Abaixo, o grid de 8 colunas renderiza os painéis.",preview:e.jsx(o,{}),code:`<DashboardView
28
- dashboard={{ title: 'Indicadores', responsibleName: 'João', isFavorite: true, ... }}
29
- panels={panels}
30
- canEdit={true}
31
- onRefresh={() => refetch()}
32
- onToggleFullscreen={() => toggleFullscreen()}
33
- onToggleFavorite={() => toggleFav()}
34
- onAddPanel={() => openNewPanelDialog()}
35
- onLayoutChange={(updated) => saveLayout(updated)}
36
- />`},{title:"Modo Carousel",description:"Quando o dashboard usa DashboardViewType.Carousel, tabs de páginas aparecem abaixo da toolbar. A troca de página é feita via onPageChange.",preview:e.jsx(s,{}),code:`<DashboardView
37
- dashboard={{ ...dashboard, idViewType: DashboardViewType.Carousel }}
38
- panels={panels}
39
- pages={[
40
- { id: 'p1', position: 1, name: 'Dashboard 1' },
41
- { id: 'p2', position: 2, name: 'Dashboard 2' },
42
- ]}
43
- activePageId="p1"
44
- onPageChange={(pageId) => setActivePageId(pageId)}
45
- />`}],props:[{name:"dashboard",type:"Dashboard",description:"Metadados do dashboard (título, responsável, favorito, tipo de visualização)."},{name:"panels",type:"DashboardPanel[]",description:"Painéis a renderizar no grid."},{name:"pages",type:"DashboardPage[]",description:"Páginas do carousel (opcional)."},{name:"activePageId",type:"string",description:"ID da página ativa no modo carousel."},{name:"canEdit",type:"boolean",description:"Habilita drag-and-drop, botão de adicionar painel e ações de edição."},{name:"isFullscreen",type:"boolean",description:"Renderiza em tela cheia com position fixed."},{name:"getPanelData",type:"(panelId) => PanelRendererProps",description:"Função que retorna dados específicos para cada painel (state, data, series, etc.)."},{name:"onRefresh",type:"() => void",description:"Refresh com cooldown de 30s integrado."},{name:"onLayoutChange",type:"(panels: GridPanelLayout[]) => void",description:"Chamado após drag-and-drop com o layout atualizado."},{name:"toolbarActions",type:"ReactNode",description:"Slot para ações extras na toolbar."}]})}export{l as DashboardViewDoc};
@@ -1,13 +0,0 @@
1
- import{j as e,o as s,a as d,d as r,B as l}from"./index-DkiftrvI.js";import{C as n}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function m({children:i,className:t}){return e.jsx("div",{className:s("space-y-4",t),children:i})}function c({children:i,onClick:t,className:o}){return e.jsx(d,{className:s("transition-colors",t&&"cursor-pointer hover:bg-muted/50",o),onClick:t,children:e.jsx(r,{className:"p-4",children:i})})}function u({label:i,value:t,className:o}){return e.jsxs("div",{className:s("flex justify-between items-center text-sm",o),children:[e.jsxs("span",{className:"text-muted-foreground font-medium",children:[i,":"]}),e.jsx("span",{className:"text-foreground",children:t})]})}const a={Root:m,Item:c,Field:u};function D(){return e.jsx(n,{title:"DataList",description:"Sistema de lista de dados com composição de componentes. Ideal para exibir informações estruturadas em formato de cards.",component:e.jsx("div",{className:"w-full max-w-md",children:e.jsxs(a.Root,{children:[e.jsxs(a.Item,{onClick:()=>alert("Clicou!"),children:[e.jsx(a.Field,{label:"Nome",value:"João Silva"}),e.jsx(a.Field,{label:"Email",value:"joao@exemplo.com"}),e.jsx(a.Field,{label:"Status",value:e.jsx(l,{variant:"success",children:"Ativo"})})]}),e.jsxs(a.Item,{children:[e.jsx(a.Field,{label:"Nome",value:"Maria Santos"}),e.jsx(a.Field,{label:"Email",value:"maria@exemplo.com"}),e.jsx(a.Field,{label:"Status",value:e.jsx(l,{variant:"secondary",children:"Pendente"})})]})]})}),usage:`import { DataList, Badge } from "forlogic-core"
2
-
3
- <DataList.Root>
4
- <DataList.Item onClick={() => console.log('clicked')}>
5
- <DataList.Field label="Nome" value="João Silva" />
6
- <DataList.Field label="Email" value="joao@exemplo.com" />
7
- <DataList.Field label="Status" value={<Badge>Ativo</Badge>} />
8
- </DataList.Item>
9
- <DataList.Item>
10
- <DataList.Field label="Nome" value="Maria Santos" />
11
- <DataList.Field label="Email" value="maria@exemplo.com" />
12
- </DataList.Item>
13
- </DataList.Root>`,props:[{name:"DataList.Root",type:"ReactNode",default:"-",description:"Container principal com espaçamento vertical."},{name:"DataList.Item",type:"ReactNode",default:"-",description:"Item individual renderizado como Card."},{name:"DataList.Item.onClick",type:"() => void",default:"-",description:"Handler de clique (adiciona hover state)."},{name:"DataList.Field",type:"{ label, value }",default:"-",description:"Par label/value formatado horizontalmente."},{name:"DataList.Field.value",type:"ReactNode",default:"-",description:"Valor pode ser texto ou componentes (Badge, etc.)."}],accessibility:["Items clicáveis tem cursor pointer","Hover state visual para feedback","Estrutura semântica com Cards"],notes:["💡 Use para listas de dados estruturados","💡 Field.value aceita ReactNode - use Badge, Button, etc.","💡 onClick em Item adiciona hover state automaticamente"]})}export{D as DataListDoc};
@@ -1 +0,0 @@
1
- import{D as a,j as e,B as r}from"./index-DkiftrvI.js";function d({onNavigate:i}){const l=a.reduce((s,t)=>s+t.items.length,0);return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-4xl font-bold tracking-tight",children:"Design System"}),e.jsxs("p",{className:"text-xl text-muted-foreground mt-2",children:["Explore todos os ",l," componentes organizados em ",a.length," categorias"]})]}),e.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-3",children:a.map(s=>{const t=s.icon;return e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-foreground",children:[e.jsx(t,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"font-semibold text-base",children:s.title})]}),e.jsx(r,{variant:"secondary",className:"text-xs",children:s.items.length})]}),e.jsx("div",{className:"space-y-0.5",children:s.items.map(n=>e.jsx("button",{onClick:()=>i(n.id),className:"block w-full text-left px-2 py-1.5 text-sm text-primary hover:text-primary/80 hover:bg-accent rounded-md transition-colors",children:n.label},n.id))})]},s.id)})})]})}export{d as DesignSystemHome};