forlogic-core 1.20.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/.note/memory/patterns/single-scroll-pattern.md +30 -12
  2. package/README.md +0 -46
  3. package/dist/action-plans/components/ActionPlanAttachmentsTab.d.ts +18 -0
  4. package/dist/action-plans/components/ActionPlanCommentsTab.d.ts +18 -0
  5. package/dist/action-plans/components/ActionPlanCostTab.d.ts +10 -0
  6. package/dist/action-plans/components/ActionPlanGeneralTab.d.ts +18 -0
  7. package/dist/action-plans/components/ActionPlanHistoryTab.d.ts +13 -0
  8. package/dist/action-plans/components/ActionPlanPage.d.ts +25 -0
  9. package/dist/action-plans/components/ActionPlanPredecessorsTab.d.ts +10 -0
  10. package/dist/action-plans/components/ActionPlanProgressDialog.d.ts +13 -0
  11. package/dist/action-plans/components/ActionPlanProgressTab.d.ts +5 -0
  12. package/dist/action-plans/components/ActionPlanStatusBadge.d.ts +11 -0
  13. package/dist/action-plans/constants.d.ts +42 -0
  14. package/dist/action-plans/hooks/useActionPlan.d.ts +14 -0
  15. package/dist/action-plans/hooks/useActionPlanProgress.d.ts +15 -0
  16. package/dist/action-plans/index.d.ts +15 -0
  17. package/dist/action-plans/types.d.ts +353 -0
  18. package/dist/action-plans/utils/formatTime.d.ts +15 -0
  19. package/dist/approval-flow/components/ApprovalSidenav.d.ts +16 -0
  20. package/dist/approval-flow/components/ApproveDialog.d.ts +13 -0
  21. package/dist/approval-flow/components/SelectApproverDialog.d.ts +11 -0
  22. package/dist/approval-flow/index.d.ts +4 -0
  23. package/dist/approval-flow/types.d.ts +76 -0
  24. package/dist/assets/AccordionDoc-CGNlubG3.js +31 -0
  25. package/dist/assets/{ActionButtonDoc-DLJ_K9ib.js → ActionButtonDoc-CYtkXR0k.js} +2 -2
  26. package/dist/assets/ActionPlanDoc-BSuPRftQ.js +65 -0
  27. package/dist/assets/{AlertDoc-CY1ybZeG.js → AlertDoc-Cpvxneqg.js} +7 -7
  28. package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +189 -0
  29. package/dist/assets/AppHeaderDoc-DNQErj_t.js +74 -0
  30. package/dist/assets/AppSidebarDoc-DkeQarDu.js +221 -0
  31. package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +31 -0
  32. package/dist/assets/AuditLogDoc-BBvNcHIo.js +67 -0
  33. package/dist/assets/AuditTrailDoc-DgFHO-uo.js +17 -0
  34. package/dist/assets/AuthDoc-WIA_Aetl.js +200 -0
  35. package/dist/assets/{AvatarDoc-BLdMoyJd.js → AvatarDoc-B6go1C1T.js} +2 -2
  36. package/dist/assets/{BadgeDoc-CSNM1b6b.js → BadgeDoc-BONhfqB_.js} +2 -2
  37. package/dist/assets/BaseFormDoc-CuyUArcj.js +169 -0
  38. package/dist/assets/{BodyContentDoc-Bp6YmUWX.js → BodyContentDoc-CterHC1E.js} +2 -2
  39. package/dist/assets/{BreadcrumbDoc-D7tqqTvo.js → BreadcrumbDoc-Dwn9nLeO.js} +2 -2
  40. package/dist/assets/{ButtonDoc-C4JwIvU3.js → ButtonDoc-BOjRseZT.js} +2 -2
  41. package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +7 -0
  42. package/dist/assets/{CalendarDoc-COlEKqmv.js → CalendarDoc-CMwIEqgT.js} +3 -3
  43. package/dist/assets/{CardDoc-BVhMoC2w.js → CardDoc-BZz1CVg2.js} +2 -2
  44. package/dist/assets/ChartDoc-B5vZVtqD.js +76 -0
  45. package/dist/assets/{CheckboxDoc-Bcqpln9_.js → CheckboxDoc-lAbYO9I5.js} +2 -2
  46. package/dist/assets/ColorPickerDoc-Dpsprp4N.js +10 -0
  47. package/dist/assets/{ColorsFoundationDoc-uO6IiJbS.js → ColorsFoundationDoc-CCHeSL3p.js} +1 -1
  48. package/dist/assets/ComboTreeDoc-D4dTkIt-.js +46 -0
  49. package/dist/assets/ComboboxDoc-CqqZPvZq.js +134 -0
  50. package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +1 -0
  51. package/dist/assets/{ContextMenuDoc-C4-_0NLp.js → ContextMenuDoc-D3jC-MVA.js} +2 -2
  52. package/dist/assets/{ContextsDoc-Cj9Aaoyo.js → ContextsDoc-XFH0-JdS.js} +30 -3
  53. package/dist/assets/{CreateCrudPageDoc-D_SnMRJ2.js → CreateCrudPageDoc-CpuiWI-g.js} +2 -2
  54. package/dist/assets/{CrudActionBarDoc-BYqtIabp.js → CrudActionBarDoc-wuBGXD9Y.js} +4 -4
  55. package/dist/assets/CrudGridDoc-BYWqSXBH.js +85 -0
  56. package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +14 -0
  57. package/dist/assets/{CrudPrimitivesDoc-BRS86nWg.js → CrudPrimitivesDoc-CxaTB94A.js} +4 -4
  58. package/dist/assets/{CrudTableDoc-Daw8u2G_.js → CrudTableDoc-Dga1VgCu.js} +5 -5
  59. package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +33 -0
  60. package/dist/assets/DashboardFormDoc-BUDCmrMl.js +49 -0
  61. package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +71 -0
  62. package/dist/assets/DashboardGridDoc-BavePiRF.js +49 -0
  63. package/dist/assets/DashboardListDoc-CLyMA6UK.js +37 -0
  64. package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +35 -0
  65. package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +60 -0
  66. package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +62 -0
  67. package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +75 -0
  68. package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +83 -0
  69. package/dist/assets/DashboardViewDoc-CtlCNlEF.js +45 -0
  70. package/dist/assets/DataListDoc-DUy88lCQ.js +13 -0
  71. package/dist/assets/DesignSystemHome-DHl9YtbH.js +1 -0
  72. package/dist/assets/{DialogDoc-DCpRy4rg.js → DialogDoc-CMQqnTV-.js} +2 -2
  73. package/dist/assets/{DropdownMenuDoc-DT6LBa8Z.js → DropdownMenuDoc-S7X9csGt.js} +5 -5
  74. package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +57 -0
  75. package/dist/assets/{EmptyStateDoc-wydc09gG.js → EmptyStateDoc-CHGCiGIk.js} +2 -2
  76. package/dist/assets/{EnvironmentsDoc-amIriwDD.js → EnvironmentsDoc-DZHJZ2nm.js} +4 -4
  77. package/dist/assets/{ErrorBoundaryDoc-BEixy_Gl.js → ErrorBoundaryDoc-DoaAg68p.js} +2 -2
  78. package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +1 -0
  79. package/dist/assets/ExampleAppDoc-DzIU81Fn.js +1 -0
  80. package/dist/assets/ExampleCard-DuLrb3t-.js +1 -0
  81. package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +1 -0
  82. package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +1 -0
  83. package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +1 -0
  84. package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +1 -0
  85. package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +1 -0
  86. package/dist/assets/FileUploadDoc-9-UujFNX.js +34 -0
  87. package/dist/assets/FilterBar-DDTqqUfZ.js +1 -0
  88. package/dist/assets/{FormDoc-DxoRt6p7.js → FormDoc-CVES6n3d.js} +2 -2
  89. package/dist/assets/{FoundationOverview-CxSbumIt.js → FoundationOverview-DT0u11Gz.js} +1 -1
  90. package/dist/assets/{GridDoc-BpQqCMUE.js → GridDoc-CbHFSILF.js} +2 -2
  91. package/dist/assets/{HooksDoc-JNODhbaF.js → HooksDoc-Ctxdk6Wq.js} +5 -5
  92. package/dist/assets/{HoverCardDoc-CdqiYrIb.js → HoverCardDoc-8Wkaafdj.js} +2 -2
  93. package/dist/assets/I18nDoc-D3Q2m7ik.js +167 -0
  94. package/dist/assets/IconPickerDoc-DZ26Gdpg.js +10 -0
  95. package/dist/assets/{IconsFoundationDoc-CrymfxTI.js → IconsFoundationDoc-xOxtC7CW.js} +5 -5
  96. package/dist/assets/{InputDoc-BK-SdpJ7.js → InputDoc-BhztAiuJ.js} +4 -4
  97. package/dist/assets/{LabelDoc-DHvgzhaJ.js → LabelDoc-A4hmTRRV.js} +2 -2
  98. package/dist/assets/LeadershipDoc-CqOSfWsP.js +452 -0
  99. package/dist/assets/{MediaDoc-B_vqnf72.js → MediaDoc-C78gvC8p.js} +2 -2
  100. package/dist/assets/MenubarDoc-DCnmd2tO.js +165 -0
  101. package/dist/assets/{ModuleAccessDoc-Nuxb4S27.js → ModuleAccessDoc-CmD5nHDp.js} +2 -2
  102. package/dist/assets/{ModulesDialogDoc-iJWLkOZo.js → ModulesDialogDoc-DVit1CA-.js} +2 -2
  103. package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +34 -0
  104. package/dist/assets/NavigationMenuDoc-q1fbc89j.js +116 -0
  105. package/dist/assets/{OnboardingDialogDoc-xBL-rXeZ.js → OnboardingDialogDoc-3A3eBYrq.js} +2 -2
  106. package/dist/assets/{PaginationDoc-DqtRgXnF.js → PaginationDoc-B8-bMz5J.js} +2 -2
  107. package/dist/assets/{PaginationDoc-CfvwxCMe.js → PaginationDoc-BkGdxHL3.js} +5 -5
  108. package/dist/assets/{PlacesDoc-nckioEzg.js → PlacesDoc-CKPO6ATs.js} +2 -2
  109. package/dist/assets/{PopoverDoc-C3o2CZCT.js → PopoverDoc-CJPU4Ags.js} +3 -3
  110. package/dist/assets/{ProgressDoc-BmWBNMPA.js → ProgressDoc-CpjbTL4o.js} +2 -2
  111. package/dist/assets/{QualiexUserFieldDoc-CE1e4mx6.js → QualiexUserFieldDoc-DDwumlRw.js} +2 -2
  112. package/dist/assets/{RadioGroupDoc-DMZH6NmR.js → RadioGroupDoc-D6tSZz8G.js} +2 -2
  113. package/dist/assets/{RadiusDoc-BOZD3gPV.js → RadiusDoc-B4xSnajw.js} +1 -1
  114. package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +15 -0
  115. package/dist/assets/{RequiredFieldsCounterDoc-CG-lmSSy.js → RequiredFieldsCounterDoc-COesoSdx.js} +2 -2
  116. package/dist/assets/ResizableDoc-CW0-XQuB.js +104 -0
  117. package/dist/assets/{RichTextEditorDoc-m50ll-Od.js → RichTextEditorDoc-C8c_XA9P.js} +2 -2
  118. package/dist/assets/{ScrollAreaDoc-BzJ-APXo.js → ScrollAreaDoc-BxtoAPaZ.js} +2 -2
  119. package/dist/assets/{SecurityDoc-B34gVeiV.js → SecurityDoc-wOVqpg2F.js} +2 -2
  120. package/dist/assets/{SelectDoc-DXRv7QHK.js → SelectDoc-C75gtY9D.js} +2 -2
  121. package/dist/assets/{SeparatorDoc-DcNh8k0P.js → SeparatorDoc-BjQBPB1P.js} +2 -2
  122. package/dist/assets/{ServicesDoc-8aXBd6yg.js → ServicesDoc-CXTctwBl.js} +3 -3
  123. package/dist/assets/ShadowsDoc-C6Lw8_x2.js +9 -0
  124. package/dist/assets/SignDoc-Bh5ZUg5x.js +66 -0
  125. package/dist/assets/{SkeletonDoc-BWgqgbDY.js → SkeletonDoc-rTLGK5VE.js} +8 -8
  126. package/dist/assets/SliderDoc-JMAMDub7.js +41 -0
  127. package/dist/assets/{SpacingDoc-BzburM-r.js → SpacingDoc-RljOrpwA.js} +1 -1
  128. package/dist/assets/{SplitButtonDoc-BYUysmJp.js → SplitButtonDoc-CvShUW3w.js} +3 -3
  129. package/dist/assets/{StepSelectorDoc-PB1k4v7F.js → StepSelectorDoc-C-nAap9H.js} +2 -2
  130. package/dist/assets/{SwitchDoc-BLOG6kfj.js → SwitchDoc-DLnqmkPr.js} +2 -2
  131. package/dist/assets/{TableDoc-Dwcs-lop.js → TableDoc-B8EpWLVg.js} +2 -2
  132. package/dist/assets/{TabsDoc-Ovkh8ArV.js → TabsDoc-DIBtl_uC.js} +2 -2
  133. package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +10 -0
  134. package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +16 -0
  135. package/dist/assets/{TextareaDoc-DsBYxmbr.js → TextareaDoc-DGnqMqEC.js} +4 -4
  136. package/dist/assets/{ToastDoc-BbZaFE_A.js → ToastDoc-DjYyc7ae.js} +4 -4
  137. package/dist/assets/{ToggleDoc-C28vbvhp.js → ToggleDoc-C9ZOVjkY.js} +2 -2
  138. package/dist/assets/{TooltipDoc-DL5cnLak.js → TooltipDoc-BEx4l9-i.js} +7 -7
  139. package/dist/assets/{TruncatedCellDoc-BuDA8QcY.js → TruncatedCellDoc-BbV1bRSY.js} +2 -2
  140. package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +7 -0
  141. package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +29 -0
  142. package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +18 -0
  143. package/dist/assets/{UtilitiesDoc-CrQhyEfz.js → UtilitiesDoc-DGxaHVV1.js} +2 -2
  144. package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +1 -0
  145. package/dist/assets/{blocks-DO93nPjs.js → blocks-B6LrJeAM.js} +1 -1
  146. package/dist/assets/building-DeVappnD.js +1 -0
  147. package/dist/assets/{calendar-days-cMfwBSZx.js → calendar-days-BQ0na5kM.js} +1 -1
  148. package/dist/assets/check-check-C_-PJCJa.js +1 -0
  149. package/dist/assets/circle-plus-CpIcep-O.js +1 -0
  150. package/dist/assets/{circle-x-BVAVJ_oz.js → circle-x-jPpBPew0.js} +1 -1
  151. package/dist/assets/clipboard-list-CXNPdciZ.js +1 -0
  152. package/dist/assets/cloud-upload-BEjzumjl.js +1 -0
  153. package/dist/assets/{crown-B2MTZDnM.js → crown-CqNsQIsm.js} +1 -1
  154. package/dist/assets/date-picker-BW3eGOe_.js +1 -0
  155. package/dist/assets/disabled-menu-item-C2YaMvSt.js +1 -0
  156. package/dist/assets/{drawer-oTqCOtsC.js → drawer-D5rflIcD.js} +2 -2
  157. package/dist/assets/file-braces-DFb5X9so.js +1 -0
  158. package/dist/assets/{file-pen-line-CXv-Eye-.js → file-pen-line-CyUGKkEN.js} +1 -1
  159. package/dist/assets/{git-branch-V6-h6P9K.js → git-branch-BcXv9mpp.js} +1 -1
  160. package/dist/assets/{globe-CaUBIJU8.js → globe-CpMIWAcv.js} +1 -1
  161. package/dist/assets/{hash-B4MTXppl.js → hash-cQWdKjya.js} +1 -1
  162. package/dist/assets/hourglass-BahQ3eDv.js +1 -0
  163. package/dist/assets/hover-card-R66N85sZ.js +1 -0
  164. package/dist/assets/iframe-dialog-V0mW5aBb.js +1 -0
  165. package/dist/assets/index-DkiftrvI.js +352 -0
  166. package/dist/assets/index-nmBjO9Th.css +1 -0
  167. package/dist/assets/index.d.ts +1 -0
  168. package/dist/assets/{life-buoy-BRndExxh.js → life-buoy-ByXiPddz.js} +1 -1
  169. package/dist/assets/loading-state-Cb5_t5uE.js +1 -0
  170. package/dist/assets/lucide-react-Cp3Yw3Zm.js +1 -0
  171. package/dist/assets/{package-3G45ARQh.js → package-B3-pVvPM.js} +1 -1
  172. package/dist/assets/{pen-BYSSwjK4.js → pen-Bi_lmmKT.js} +1 -1
  173. package/dist/assets/pin-DVsSl8QA.js +1 -0
  174. package/dist/assets/printer-BnJ8B6m-.js +1 -0
  175. package/dist/assets/radio-group-BHAaNGsm.js +1 -0
  176. package/dist/assets/{server-p0Sb0mKI.js → server-CtzFTfKR.js} +1 -1
  177. package/dist/assets/{share-2-D-ZhCCq2.js → share-2-Dv8Do445.js} +1 -1
  178. package/dist/assets/shield-check-CFXjOV_w.js +1 -0
  179. package/dist/assets/{shield-x-Q7hAXWsG.js → shield-x-DJTRfVux.js} +1 -1
  180. package/dist/assets/slider-v9tXBSnB.js +1 -0
  181. package/dist/assets/smartphone-BSNR60L7.js +1 -0
  182. package/dist/assets/step-selector-ATTh_9Wa.js +1 -0
  183. package/dist/assets/{text-align-start-6aYQqbX4.js → text-align-start-qE-MbYYw.js} +1 -1
  184. package/dist/assets/thumbs-up-D_XIW_uX.js +1 -0
  185. package/dist/assets/{trash-DveAOiLF.js → trash-DTWQwpwA.js} +1 -1
  186. package/dist/assets/trending-up-jip5-leJ.js +1 -0
  187. package/dist/assets/{useMockCrud-GY0KxHXr.js → useMockCrud-CN4vjyOZ.js} +1 -1
  188. package/dist/assets/{user-check-CoGNBfIk.js → user-check-BlH3EDWK.js} +1 -1
  189. package/dist/assets/{user-plus-Bad2xWIT.js → user-plus-BqwXwD-c.js} +1 -1
  190. package/dist/audit-trail/components/AuditTrailDetails.d.ts +17 -0
  191. package/dist/audit-trail/components/AuditTrailFilter.d.ts +19 -0
  192. package/dist/audit-trail/components/AuditTrailPage.d.ts +30 -0
  193. package/dist/audit-trail/index.d.ts +9 -0
  194. package/dist/audit-trail/types.d.ts +151 -0
  195. package/dist/audit-trail/utils.d.ts +38 -0
  196. package/dist/components/dashboards/dashboard-form.d.ts +50 -0
  197. package/dist/components/dashboards/dashboard-general-view.d.ts +109 -0
  198. package/dist/components/dashboards/dashboard-grid.d.ts +41 -0
  199. package/dist/components/dashboards/dashboard-list.d.ts +31 -0
  200. package/dist/components/dashboards/dashboard-panel-renderer.d.ts +21 -0
  201. package/dist/components/dashboards/dashboard-view.d.ts +38 -0
  202. package/dist/components/dashboards/helpers.d.ts +47 -0
  203. package/dist/components/dashboards/index.d.ts +9 -0
  204. package/dist/components/dashboards/panels/burndown-panel.d.ts +26 -0
  205. package/dist/components/dashboards/panels/cartesian-panel.d.ts +46 -0
  206. package/dist/components/dashboards/panels/index.d.ts +14 -0
  207. package/dist/components/dashboards/panels/list-panel.d.ts +30 -0
  208. package/dist/components/dashboards/panels/matrix-risk-panel.d.ts +49 -0
  209. package/dist/components/dashboards/panels/numeric-panel.d.ts +22 -0
  210. package/dist/components/dashboards/panels/panel-error.d.ts +8 -0
  211. package/dist/components/dashboards/panels/panel-header.d.ts +17 -0
  212. package/dist/components/dashboards/panels/panel-loader.d.ts +7 -0
  213. package/dist/components/dashboards/panels/panel-no-data.d.ts +6 -0
  214. package/dist/components/dashboards/panels/panel-unavailable.d.ts +6 -0
  215. package/dist/components/dashboards/panels/pareto-panel.d.ts +20 -0
  216. package/dist/components/dashboards/panels/performance-panel.d.ts +24 -0
  217. package/dist/components/dashboards/panels/pie-panel.d.ts +19 -0
  218. package/dist/components/dashboards/panels/text-panel.d.ts +18 -0
  219. package/dist/components/dashboards/types.d.ts +525 -0
  220. package/dist/components/ui/button.d.ts +1 -1
  221. package/dist/components/ui/electronic-signature-dialog.d.ts +21 -0
  222. package/dist/components/ui/export-dialog.d.ts +28 -0
  223. package/dist/components/ui/iframe-dialog.d.ts +14 -0
  224. package/dist/components/ui/multiselect-permissions.d.ts +59 -0
  225. package/dist/components/ui/online-editor-dialog.d.ts +18 -0
  226. package/dist/components/ui/report-request-list.d.ts +44 -0
  227. package/dist/components/ui/resizable.d.ts +1 -1
  228. package/dist/components/ui/stimulsoft-viewer.d.ts +20 -0
  229. package/dist/components/ui/terms-of-use-dialog.d.ts +56 -0
  230. package/dist/components/ui/timepicker.d.ts +11 -0
  231. package/dist/components/ui/users-groups-selector.d.ts +44 -0
  232. package/dist/components/ui/viewer-dialog.d.ts +77 -0
  233. package/dist/custom-form-fields/components/CustomFormFields.d.ts +8 -0
  234. package/dist/custom-form-fields/fields/FormDateField.d.ts +6 -0
  235. package/dist/custom-form-fields/fields/FormMultiSelectionField.d.ts +6 -0
  236. package/dist/custom-form-fields/fields/FormNumericField.d.ts +6 -0
  237. package/dist/custom-form-fields/fields/FormQuestionsField.d.ts +6 -0
  238. package/dist/custom-form-fields/fields/FormSingleSelectionField.d.ts +6 -0
  239. package/dist/custom-form-fields/fields/FormTextField.d.ts +6 -0
  240. package/dist/custom-form-fields/fields/FormTimeField.d.ts +6 -0
  241. package/dist/custom-form-fields/fields/FormUrlField.d.ts +6 -0
  242. package/dist/custom-form-fields/fields/ReadOnlyTextField.d.ts +6 -0
  243. package/dist/custom-form-fields/index.d.ts +13 -0
  244. package/dist/custom-form-fields/types.d.ts +143 -0
  245. package/dist/exports/action-plans.d.ts +16 -0
  246. package/dist/exports/audit-trail.d.ts +1 -0
  247. package/dist/exports/custom-form-fields.d.ts +1 -0
  248. package/dist/exports/file-upload.d.ts +1 -0
  249. package/dist/exports/ui.d.ts +12 -0
  250. package/dist/file-upload/components/SingleFileUpload.d.ts +43 -0
  251. package/dist/file-upload/index.d.ts +6 -0
  252. package/dist/file-upload/types.d.ts +11 -0
  253. package/dist/file-upload/utils/formatBytes.d.ts +1 -0
  254. package/dist/file-upload/utils/getFileExtension.d.ts +1 -0
  255. package/dist/hooks/useSidebarResize.d.ts +1 -1
  256. package/dist/index.css +1 -1
  257. package/dist/index.css.map +1 -1
  258. package/dist/index.d.ts +7 -0
  259. package/dist/index.esm.js +1 -1
  260. package/dist/index.html +9 -11
  261. package/dist/index.js +1 -1
  262. package/dist/setup/favicon.d.ts +1 -0
  263. package/dist/team-selector/components/TeamSelector.d.ts +24 -0
  264. package/dist/team-selector/index.d.ts +2 -0
  265. package/dist/team-selector/types.d.ts +10 -0
  266. package/docs/ICON_MIGRATION_GUIDE.md +177 -0
  267. package/docs/PUBLISH.md +3 -3
  268. package/package.json +1 -5
  269. package/dist/README.md +0 -1079
  270. package/dist/assets/AccordionDoc-BVPUJk8G.js +0 -31
  271. package/dist/assets/AppHeaderDoc-Crkw4dA9.js +0 -67
  272. package/dist/assets/AppSidebarDoc-ET-4j6wV.js +0 -204
  273. package/dist/assets/AuthDoc-B4v4Nci5.js +0 -192
  274. package/dist/assets/BaseFormDoc-DXiYuN6-.js +0 -169
  275. package/dist/assets/ButtonGroupDoc-QFfjC7Pm.js +0 -7
  276. package/dist/assets/ChartDoc-BJ14EjI2.js +0 -111
  277. package/dist/assets/ColorPickerDoc-CcfmSwyC.js +0 -10
  278. package/dist/assets/ComboTreeDoc-R4qE6XwB.js +0 -46
  279. package/dist/assets/ComboboxDoc-JIo_-gSN.js +0 -134
  280. package/dist/assets/ComponentDocTemplate-CRbRY-v5.js +0 -1
  281. package/dist/assets/CrudGridDoc-DspxQrq5.js +0 -85
  282. package/dist/assets/CrudOverviewDoc-DLcOL_HZ.js +0 -14
  283. package/dist/assets/DataListDoc-BrgVNhhR.js +0 -13
  284. package/dist/assets/DesignSystemHome-BFBNqq1J.js +0 -1
  285. package/dist/assets/I18nDoc-B6LMXnE3.js +0 -232
  286. package/dist/assets/IconPickerDoc-BRdy58IC.js +0 -10
  287. package/dist/assets/LeadershipDoc-DRiB0spL.js +0 -416
  288. package/dist/assets/MenubarDoc-Zvgczxe2.js +0 -165
  289. package/dist/assets/NavigationMenuDoc-CeWun1VF.js +0 -116
  290. package/dist/assets/ResizableDoc-CqGkv6Cd.js +0 -104
  291. package/dist/assets/ShadowsDoc-Brl4hIDI.js +0 -9
  292. package/dist/assets/SignDoc-BdwerR-2.js +0 -66
  293. package/dist/assets/SliderDoc-E-NjbYVk.js +0 -41
  294. package/dist/assets/TypographyFoundationDoc-CPdH4PHa.js +0 -7
  295. package/dist/assets/circle-plus-D3NftMzS.js +0 -1
  296. package/dist/assets/date-picker-zhJU-_kM.js +0 -1
  297. package/dist/assets/disabled-menu-item-C16xsaVs.js +0 -1
  298. package/dist/assets/hover-card-DEuucfxP.js +0 -1
  299. package/dist/assets/index-CE0k7Rdh.js +0 -312
  300. package/dist/assets/index-Cx3adT_u.css +0 -1
  301. package/dist/assets/lucide-react-t7dCa4lv.js +0 -1
  302. package/dist/assets/monitor-Dg3HKTSE.js +0 -1
  303. package/dist/assets/pin-CMYagNhs.js +0 -1
  304. package/dist/assets/radio-group-BVun_Tmt.js +0 -1
  305. package/dist/assets/step-selector-DHxgT2FL.js +0 -1
  306. package/dist/bin/bootstrap.js +0 -40
  307. package/dist/bin/pull-docs.js +0 -186
  308. package/dist/docs/KNOWLEDGE.md +0 -109
  309. package/dist/leadership/components/LeaderRow.d.ts +0 -9
@@ -0,0 +1,71 @@
1
+ import{j as e,gy as d,gz as t,gA as n}from"./index-DkiftrvI.js";import{C as l}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";n.SharedWithAllCollaborators,t.FiveMinutes,d.NormalPage,t.NotUpdate,d.NormalPage;function i(){const o=[{name:"list",desc:"Lista de dashboards",active:!0},{name:"view",desc:"Visualização do dashboard"},{name:"create",desc:"Criação de novo dashboard"},{name:"edit",desc:"Edição do dashboard"},{name:"share",desc:"Configuração de compartilhamento"}],s=[{from:"list",to:"view",label:"onOpen"},{from:"list",to:"create",label:"onAdd"},{from:"view",to:"edit",label:"onEdit"},{from:"view",to:"share",label:"onShare"},{from:"view",to:"list",label:"onBackToList"},{from:"edit",to:"view",label:"onCancel/onSave"},{from:"share",to:"view",label:"onCancel/onSave"},{from:"create",to:"list",label:"onCancel/onSave"}];return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:o.map(a=>e.jsxs("div",{className:`px-3 py-2 rounded-lg border text-center ${a.active?"border-primary bg-primary/10 text-primary":"border-border bg-card text-foreground"}`,children:[e.jsx("span",{className:"text-sm font-semibold",children:a.name}),e.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:a.desc})]},a.name))}),e.jsx("div",{className:"grid grid-cols-2 gap-1.5",children:s.map((a,r)=>e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx("span",{className:"font-mono bg-muted px-1.5 py-0.5 rounded",children:a.from}),e.jsx("span",{children:"→"}),e.jsx("span",{className:"font-mono bg-muted px-1.5 py-0.5 rounded",children:a.to}),e.jsx("span",{className:"text-primary",children:a.label})]},r))})]})}function h(){return e.jsx(l,{title:"DashboardGeneralView",description:"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.",component:e.jsx(i,{}),usage:`import { DashboardGeneralView } from 'forlogic-core';
2
+
3
+ // Uso básico (uncontrolled — gerencia estado internamente)
4
+ <DashboardGeneralView
5
+ dashboards={dashboards}
6
+ limit={{ maxDashboards: 50, countDashboards: 12 }}
7
+ canAdd canEdit canRemove
8
+ activePanels={panels}
9
+ activePages={pages}
10
+ getPanelData={(panelId) => ({
11
+ state: PanelState.Loaded,
12
+ data: panelData[panelId],
13
+ })}
14
+ onOpen={(d) => loadPanels(d.id)}
15
+ onSave={(values) => createDashboard(values)}
16
+ onUpdate={(id, values) => updateDashboard(id, values)}
17
+ onRemove={(d) => removeDashboard(d.id)}
18
+ onToggleFavorite={(d) => toggleFav(d.id)}
19
+ />
20
+
21
+ // Uso controlado (com react-router)
22
+ const [viewState, setViewState] = useState({ mode: 'list' });
23
+
24
+ <DashboardGeneralView
25
+ dashboards={dashboards}
26
+ viewState={viewState}
27
+ onViewStateChange={(state) => {
28
+ setViewState(state);
29
+ if (state.mode === 'view') navigate(\`/dashboards/\${state.dashboardId}\`);
30
+ if (state.mode === 'list') navigate('/dashboards');
31
+ }}
32
+ // ... demais props
33
+ />`,examples:[{title:"Máquina de Estados",description:"O componente gerencia 5 modos: list, view, create, edit e share. Transições são feitas automaticamente via callbacks ou controladas externamente via viewState/onViewStateChange.",preview:e.jsx(i,{}),code:`// DashboardViewState
34
+ type DashboardViewState =
35
+ | { mode: 'list' }
36
+ | { mode: 'view'; dashboardId: string }
37
+ | { mode: 'create' }
38
+ | { mode: 'edit'; dashboardId: string }
39
+ | { mode: 'share'; dashboardId: string };
40
+
41
+ // Transições automáticas:
42
+ // list → view: quando onOpen é chamado
43
+ // list → create: quando onAdd é chamado
44
+ // view → edit: quando onEdit é chamado no viewer
45
+ // view → share: quando onShare é chamado no viewer
46
+ // edit → view: quando form salva/cancela
47
+ // create → list: quando form salva/cancela`},{title:"Carousel Auto-Advance",description:"Quando o dashboard usa DashboardViewType.Carousel, as páginas avançam automaticamente com base no DashboardPageTime configurado.",preview:e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold text-foreground",children:"Modo:"}),e.jsx("span",{className:"px-2 py-0.5 bg-primary/10 text-primary rounded text-xs",children:"Carousel"})]}),e.jsx("div",{className:"grid grid-cols-4 gap-1",children:["5s","10s","15s","30s","1min","3min","5min","10min"].map((o,s)=>e.jsx("span",{className:`px-2 py-1 rounded text-xs text-center ${s===2?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground"}`,children:o},o))})]}),code:`// O carousel avança automaticamente
48
+ <DashboardGeneralView
49
+ dashboards={[{
50
+ ...dashboard,
51
+ idViewType: DashboardViewType.Carousel,
52
+ idPageTime: DashboardPageTime.FifteenSeconds,
53
+ }]}
54
+ activePages={[
55
+ { id: 'p1', position: 1, name: 'Página 1' },
56
+ { id: 'p2', position: 2, name: 'Página 2' },
57
+ { id: 'p3', position: 3, name: 'Página 3' },
58
+ ]}
59
+ />`},{title:"General View",description:'Um dashboard pode ser definido como "Visão Geral" — o dashboard padrão exibido ao entrar no módulo. O ícone de casa indica o dashboard ativo como General View.',preview:e.jsxs("div",{className:"flex items-center gap-2 p-3 rounded-lg border border-border bg-card",children:[e.jsx("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary",children:"🏠 Visão geral"}),e.jsx("span",{className:"text-sm text-foreground",children:"Indicadores de Qualidade"}),e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:"DASH-001"})]}),code:`<DashboardGeneralView
60
+ dashboards={dashboards}
61
+ generalView={{
62
+ id: 'gv1',
63
+ dashboardId: 'dash-1',
64
+ titlePtBr: 'Indicadores de Qualidade',
65
+ titleEnUs: 'Quality Indicators',
66
+ titleEsEs: 'Indicadores de Calidad',
67
+ idViewType: 1,
68
+ softwareId: 2,
69
+ }}
70
+ onSetGeneralView={(dashboardId) => setGeneralView(dashboardId)}
71
+ />`}],props:[{name:"dashboards",type:"Dashboard[]",description:"Lista completa de dashboards para exibir na lista."},{name:"limit",type:"DashboardLimit",description:"Limites de uso ({ maxDashboards, countDashboards })."},{name:"generalView",type:"GeneralViewDashboard | null",description:"Dashboard definido como visão geral padrão."},{name:"language",type:"DashboardLanguage",description:"Idioma para resolução de títulos (default: pt-br)."},{name:"activePanels",type:"DashboardPanel[]",description:"Painéis do dashboard atualmente aberto."},{name:"activePages",type:"DashboardPage[]",description:"Páginas do dashboard (modo carousel)."},{name:"getPanelData",type:"(panelId) => PanelRendererProps",description:"Provedor de dados por painel (state, data, series, etc.)."},{name:"viewState",type:"DashboardViewState",description:"Estado controlado (opcional). Sem ele, o componente gerencia internamente."},{name:"onViewStateChange",type:"(state) => void",description:"Callback para modo controlado — útil para sincronizar com react-router."},{name:"canAdd / canEdit / canRemove",type:"boolean",description:"Permissões que controlam botões e ações disponíveis."},{name:"onSave / onUpdate / onRemove",type:"callbacks",description:"CRUD de dashboards."},{name:"onSetGeneralView",type:"(dashboardId) => void",description:"Define um dashboard como visão geral."}]})}export{h as DashboardGeneralViewDoc};
@@ -0,0 +1,49 @@
1
+ import{j as e}from"./index-DkiftrvI.js";import{C as i}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function r(){const o=[{id:"num-1",col:0,row:0,sizeX:1,sizeY:1},{id:"num-2",col:1,row:0,sizeX:1,sizeY:1},{id:"num-3",col:2,row:0,sizeX:1,sizeY:1},{id:"num-4",col:3,row:0,sizeX:1,sizeY:1},{id:"chart-1",col:4,row:0,sizeX:4,sizeY:2},{id:"chart-2",col:0,row:1,sizeX:4,sizeY:2},{id:"wide",col:0,row:3,sizeX:8,sizeY:2}];return e.jsx("div",{className:"w-full border border-border rounded-lg bg-muted/30 p-2",style:{display:"grid",gridTemplateColumns:"repeat(8, 1fr)",gridTemplateRows:"repeat(5, 50px)",gap:"6px"},children:o.map(a=>e.jsxs("div",{className:"rounded-md border border-border bg-card flex flex-col items-center justify-center text-center",style:{gridColumn:`${a.col+1} / span ${a.sizeX}`,gridRow:`${a.row+1} / span ${a.sizeY}`},children:[e.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:a.id}),e.jsxs("span",{className:"text-[9px] text-muted-foreground",children:[a.sizeX,"×",a.sizeY]})]},a.id))})}function n(){const o=[{type:"Numeric",x:1,y:1},{type:"Text / Bar / Column / Pie / Line / Area / StackedColumn",x:4,y:2},{type:"Pareto / RiskMatrix / Burndown / Performance",x:8,y:2}];return e.jsx("div",{className:"space-y-2",children:o.map(a=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded border border-border bg-card",children:[e.jsxs("span",{className:"px-2 py-0.5 bg-primary/10 text-primary rounded text-xs font-mono",children:[a.x,"×",a.y]}),e.jsx("span",{className:"text-xs text-foreground",children:a.type})]},a.type))})}function l(){return e.jsx(i,{title:"DashboardGrid",description:"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.",component:e.jsx(r,{}),usage:`import { DashboardGrid, getDefaultPanelSize, getMinPanelSize } from 'forlogic-core';
2
+
3
+ <DashboardGrid
4
+ panels={[
5
+ { id: 'p1', col: 0, row: 0, sizeX: 4, sizeY: 2 },
6
+ { id: 'p2', col: 4, row: 0, sizeX: 4, sizeY: 2 },
7
+ { id: 'p3', col: 0, row: 2, sizeX: 8, sizeY: 2 },
8
+ ]}
9
+ columns={8} // padrão: 8
10
+ cellHeight={160} // padrão: 160px
11
+ cellGap={10} // padrão: 10px
12
+ allowDragging={canEdit}
13
+ showGridLines={canEdit}
14
+ renderPanel={(panelId) => <MyPanelComponent id={panelId} />}
15
+ onLayoutChange={(updatedPanels) => saveLayout(updatedPanels)}
16
+ />`,examples:[{title:"Layout com 8 Colunas",description:"O grid suporta layouts flexíveis: painéis numéricos de 1×1, gráficos de 4×2, e painéis panorâmicos de 8×2. O posicionamento é feito por col/row absolutos.",preview:e.jsx(r,{}),code:`<DashboardGrid
17
+ panels={[
18
+ { id: 'num-1', col: 0, row: 0, sizeX: 1, sizeY: 1 },
19
+ { id: 'num-2', col: 1, row: 0, sizeX: 1, sizeY: 1 },
20
+ { id: 'chart-1', col: 4, row: 0, sizeX: 4, sizeY: 2 },
21
+ { id: 'chart-2', col: 0, row: 1, sizeX: 4, sizeY: 2 },
22
+ { id: 'wide', col: 0, row: 3, sizeX: 8, sizeY: 2 },
23
+ ]}
24
+ renderPanel={(id) => <MyPanel id={id} />}
25
+ />`},{title:"Tamanhos Padrão por Tipo",description:"As funções getDefaultPanelSize e getMinPanelSize retornam dimensões ideais baseadas no tipo de painel.",preview:e.jsx(n,{}),code:`import { getDefaultPanelSize, getMinPanelSize, DashboardPanelType } from 'forlogic-core';
26
+
27
+ const defaultSize = getDefaultPanelSize(DashboardPanelType.Column);
28
+ // → { x: 4, y: 2 }
29
+
30
+ const minSize = getMinPanelSize(DashboardPanelType.Numeric);
31
+ // → { x: 1, y: 1 }
32
+
33
+ // Usar ao criar um novo painel:
34
+ const newPanel = {
35
+ id: generateId(),
36
+ col: nextAvailableCol,
37
+ row: nextAvailableRow,
38
+ sizeX: defaultSize.x,
39
+ sizeY: defaultSize.y,
40
+ };`},{title:"Drag-and-Drop",description:"Com allowDragging=true, os painéis podem ser reordenados via drag. O handler de header serve como drag handle. Após o drop, as posições são trocadas e onLayoutChange é chamado.",preview:e.jsxs("div",{className:"flex items-center gap-3 p-3 rounded-lg border border-border bg-card",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:"⠿"}),e.jsx("span",{className:"text-sm font-medium text-foreground",children:"Título do Painel"}),e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:"Arraste para reordenar"})]}),code:`<DashboardGrid
41
+ panels={panels}
42
+ allowDragging={true}
43
+ showGridLines={true}
44
+ renderPanel={(id) => <PanelRenderer panelId={id} />}
45
+ onLayoutChange={(updatedPanels) => {
46
+ // updatedPanels contém as posições trocadas
47
+ savePanelPositions(updatedPanels);
48
+ }}
49
+ />`}],props:[{name:"panels",type:"GridPanelLayout[]",description:"Definições de layout: id, col, row, sizeX, sizeY."},{name:"columns",type:"number",description:"Número de colunas do grid. Default: 8."},{name:"cellHeight",type:"number",description:"Altura de cada célula em pixels. Default: 160."},{name:"cellGap",type:"number",description:"Gap entre células em pixels. Default: 10."},{name:"allowDragging",type:"boolean",description:"Habilita drag-and-drop via @dnd-kit."},{name:"showGridLines",type:"boolean",description:"Mostra background do grid para orientação visual."},{name:"renderPanel",type:"(panelId: string) => ReactNode",description:"Função que renderiza o conteúdo de cada painel."},{name:"onLayoutChange",type:"(panels: GridPanelLayout[]) => void",description:"Chamado após drag com posições atualizadas."}]})}export{l as DashboardGridDoc};
@@ -0,0 +1,37 @@
1
+ import{j as e,gy as t,gz as r,gA as d}from"./index-DkiftrvI.js";import{C as i}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const n=[{id:"1",code:"DASH-001",title:"Indicadores de Qualidade",titlePtBr:"Indicadores de Qualidade",titleEnUs:"Quality Indicators",titleEsEs:"Indicadores de Calidad",responsibleId:"u1",responsibleName:"João Silva",creationDate:"2025-01-15",lastModified:"2025-03-20",isActive:!0,isFavorite:!0,isGeneralViewUse:!1,isSystemChart:!1,hasSharedIcon:!0,idShare:d.SharedWithAllCollaborators,idUpdateTime:r.FiveMinutes,idViewType:t.NormalPage},{id:"2",code:"DASH-002",title:"Ocorrências por Mês",titlePtBr:"Ocorrências por Mês",titleEnUs:"Occurrences by Month",titleEsEs:"Ocurrencias por Mes",responsibleId:"u2",responsibleName:"Maria Santos",creationDate:"2025-02-10",lastModified:"2025-03-28",isActive:!0,isFavorite:!1,isGeneralViewUse:!1,isSystemChart:!1,idUpdateTime:r.NotUpdate,idViewType:t.NormalPage},{id:"3",code:"DASH-003",title:"Plano de Ação — Burndown",titlePtBr:"Plano de Ação — Burndown",titleEnUs:"Action Plan — Burndown",titleEsEs:"Plan de Acción — Burndown",responsibleId:"u1",responsibleName:"João Silva",creationDate:"2024-11-01",lastModified:"2025-01-10",isActive:!1,isFavorite:!1,isGeneralViewUse:!1,isSystemChart:!1,idUpdateTime:r.ThirtyMinutes,idViewType:t.Carousel}];function o(){return e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden bg-card",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-2",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Dashboards"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"(3/50)"})]}),e.jsxs("div",{className:"flex gap-2 items-center",children:[e.jsxs("div",{className:"relative",children:[e.jsx("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground",children:"🔍"}),e.jsx("div",{className:"h-8 w-40 rounded-md border border-input bg-background pl-8 pr-3 text-xs flex items-center text-muted-foreground",children:"Buscar..."})]}),e.jsx("span",{className:"px-3 py-1.5 text-xs bg-primary text-primary-foreground rounded-md font-medium",children:"+ Novo"})]})]}),e.jsx("div",{className:"flex items-center gap-1 px-4 py-1.5 border-b border-border",children:["Todos","Meus dashboards","Favoritos"].map((a,s)=>e.jsx("span",{className:`px-2.5 py-1 text-xs rounded-md ${s===0?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-accent"}`,children:a},a))}),e.jsxs("table",{className:"w-full text-xs",children:[e.jsx("thead",{className:"bg-muted/50",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-3 py-2 text-left text-muted-foreground font-medium w-10",children:"★"}),e.jsx("th",{className:"px-3 py-2 text-left text-muted-foreground font-medium",children:"Código"}),e.jsx("th",{className:"px-3 py-2 text-left text-muted-foreground font-medium",children:"Título"}),e.jsx("th",{className:"px-3 py-2 text-left text-muted-foreground font-medium",children:"Responsável"}),e.jsx("th",{className:"px-3 py-2 text-left text-muted-foreground font-medium",children:"Situação"}),e.jsx("th",{className:"px-3 py-2 w-8"})]})}),e.jsx("tbody",{children:n.map(a=>e.jsxs("tr",{className:"border-t border-border hover:bg-accent/50 cursor-pointer",children:[e.jsx("td",{className:"px-3 py-2",children:a.isFavorite?"★":"☆"}),e.jsx("td",{className:"px-3 py-2 font-mono",children:a.code}),e.jsx("td",{className:"px-3 py-2 font-medium text-foreground",children:a.titlePtBr}),e.jsx("td",{className:"px-3 py-2 text-muted-foreground",children:a.responsibleName}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("span",{className:`px-1.5 py-0.5 rounded-full text-[10px] font-medium ${a.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"}`,children:a.isActive?"Ativo":"Inativo"})}),e.jsx("td",{className:"px-3 py-2 text-muted-foreground",children:"⋮"})]},a.id))})]})]})}function p(){return e.jsx(i,{title:"DashboardList",description:"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.",component:e.jsx(o,{}),usage:`import { DashboardList, QuickFilterDashboard } from 'forlogic-core';
2
+
3
+ <DashboardList
4
+ dashboards={dashboards}
5
+ limit={{ maxDashboards: 50, countDashboards: 12 }}
6
+ language={DashboardLanguage.PtBr}
7
+ canAdd canEdit canRemove
8
+ onOpen={(d) => navigate(\`/dashboards/\${d.id}\`)}
9
+ onEdit={(d) => navigate(\`/dashboards/\${d.id}/edit\`)}
10
+ onShare={(d) => openShareDialog(d)}
11
+ onDuplicate={(d) => duplicateDashboard(d.id)}
12
+ onRemove={(d) => removeDashboard(d.id)}
13
+ onAdd={() => navigate('/dashboards/new')}
14
+ onToggleFavorite={(d) => toggleFavorite(d.id)}
15
+ onSearch={(q) => setSearch(q)}
16
+ onQuickFilterChange={(f) => setFilter(f)}
17
+ />`,examples:[{title:"Lista Completa com Filtros",description:'A lista inclui header com contagem de limites, barra de busca, botão "Novo", filtros rápidos e tabela com colunas de favorito, código, título, responsável, compartilhamento, data e situação.',preview:e.jsx(o,{}),code:`<DashboardList
18
+ dashboards={dashboards}
19
+ limit={{ maxDashboards: 50, countDashboards: 12 }}
20
+ canAdd canEdit canRemove
21
+ onOpen={(d) => openDashboard(d)}
22
+ onToggleFavorite={(d) => toggleFav(d.id)}
23
+ onSearch={(q) => fetchFiltered(q)}
24
+ onQuickFilterChange={(filter) => {
25
+ // QuickFilterDashboard.All | OnlyMine | Favorites
26
+ refetch(filter);
27
+ }}
28
+ />`},{title:"Menu de Contexto",description:"Cada linha tem um menu de contexto (⋮) com ações: Abrir, Editar, Compartilhar, Duplicar e Remover. As opções respeitam as permissões canEdit e canRemove.",preview:e.jsxs("div",{className:"border border-border rounded-md bg-popover shadow-md py-1 w-40",children:[e.jsx("div",{className:"px-3 py-1.5 text-sm hover:bg-accent cursor-pointer",children:"Abrir"}),e.jsx("div",{className:"px-3 py-1.5 text-sm hover:bg-accent cursor-pointer",children:"Editar"}),e.jsx("div",{className:"px-3 py-1.5 text-sm hover:bg-accent cursor-pointer",children:"Compartilhar"}),e.jsx("div",{className:"px-3 py-1.5 text-sm hover:bg-accent cursor-pointer",children:"Duplicar"}),e.jsx("div",{className:"my-1 border-t border-border"}),e.jsx("div",{className:"px-3 py-1.5 text-sm text-destructive hover:bg-destructive/10 cursor-pointer",children:"Remover"})]}),code:`// As ações são controladas por callbacks
29
+ <DashboardList
30
+ canEdit={true}
31
+ canRemove={true}
32
+ onOpen={(d) => navigate(\`/view/\${d.id}\`)}
33
+ onEdit={(d) => navigate(\`/edit/\${d.id}\`)}
34
+ onShare={(d) => openShareDialog(d)}
35
+ onDuplicate={(d) => duplicateDashboard(d.id)}
36
+ onRemove={(d) => confirmAndRemove(d.id)}
37
+ />`}],props:[{name:"dashboards",type:"Dashboard[]",description:"Lista de dashboards a exibir."},{name:"limit",type:"DashboardLimit",description:"Limites de uso (maxDashboards, countDashboards)."},{name:"language",type:"DashboardLanguage",description:"Idioma para resolução de títulos. Default: pt-br."},{name:"isLoading",type:"boolean",description:"Mostra spinner central quando true."},{name:"canAdd / canEdit / canRemove",type:"boolean",description:'Permissões que controlam o botão "Novo" e opções do menu de contexto.'},{name:"onOpen",type:"(d: Dashboard) => void",description:'Chamado ao clicar na linha ou "Abrir" no menu.'},{name:"onToggleFavorite",type:"(d: Dashboard) => void",description:"Toggle de favorito por dashboard."},{name:"onSearch",type:"(search: string) => void",description:"Chamado a cada digitação na busca."},{name:"onQuickFilterChange",type:"(filter: QuickFilterDashboard) => void",description:"Chamado ao trocar de filtro rápido."},{name:"toolbarExtra",type:"ReactNode",description:"Slot para ações extras no header (ex: botão de exportar)."}]})}export{p as DashboardListDoc};
@@ -0,0 +1,35 @@
1
+ import{j as e,gw as r,gx as t}from"./index-DkiftrvI.js";import{C as s}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function i(){const o=[{type:r.Numeric,label:"Numeric",desc:"Valor numérico agregado"},{type:r.Text,label:"Text",desc:"HTML rico"},{type:r.Bar,label:"Bar",desc:"Barras horizontais"},{type:r.Column,label:"Column",desc:"Colunas verticais"},{type:r.Line,label:"Line",desc:"Gráfico de linha"},{type:r.Area,label:"Area",desc:"Gráfico de área"},{type:r.Pie,label:"Pie",desc:"Gráfico de pizza"},{type:r.Pareto,label:"Pareto",desc:"Barras + linha cumulativa"},{type:r.StackedColumn,label:"Stacked Column",desc:"Colunas empilhadas"},{type:r.EvolutionLine,label:"Evolution Line",desc:"Linha com evolução temporal"},{type:r.List,label:"List",desc:"Tabela de dados"},{type:r.Burndown,label:"Burndown",desc:"Execução vs Planejamento"},{type:r.PerformanceColumns,label:"Performance",desc:"Barras de desempenho"},{type:r.RiskMatrix,label:"Risk Matrix",desc:"Matriz de criticidade"}];return e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-3",children:o.map(a=>e.jsxs("div",{className:"flex flex-col items-center gap-1 p-3 rounded-lg border border-border bg-card text-center",children:[e.jsx("span",{className:"text-2xl font-bold text-primary",children:a.type}),e.jsx("span",{className:"text-sm font-medium text-foreground",children:a.label}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:a.desc})]},a.type))})}function d(){const o=[{state:t.Loading,label:"Loading",color:"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},{state:t.Loaded,label:"Loaded",color:"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"},{state:t.NoData,label:"No Data",color:"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"},{state:t.Error,label:"Error",color:"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"},{state:t.Unavailable,label:"Unavailable",color:"bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400"}];return e.jsx("div",{className:"flex flex-wrap gap-2",children:o.map(a=>e.jsxs("span",{className:`px-3 py-1.5 rounded-full text-xs font-medium ${a.color}`,children:[a.label," (",a.state,")"]},a.state))})}function l(){const o=[{name:"DashboardGeneralView",desc:"Orquestrador — máquina de estados (list/view/create/edit/share)",color:"bg-primary/10 border-primary/30"},{name:"DashboardList",desc:"Lista com busca, filtros e menu de contexto",color:"bg-chart-2/10 border-chart-2/30"},{name:"DashboardView",desc:"Visualizador com toolbar, pages e grid",color:"bg-chart-3/10 border-chart-3/30"},{name:"DashboardForm",desc:"Formulário de criação/edição multilíngue",color:"bg-chart-4/10 border-chart-4/30"},{name:"DashboardGrid",desc:"Grid de 8 colunas com @dnd-kit",color:"bg-chart-5/10 border-chart-5/30"},{name:"DashboardPanelRenderer",desc:"Mapeia DashboardPanelType → componente",color:"bg-accent border-accent/30"},{name:"14 Panel Components",desc:"Numeric, Text, List, Cartesian (6 variantes), Pie, Pareto, Burndown, Performance, MatrixRisk",color:"bg-muted border-border"}];return e.jsx("div",{className:"space-y-2",children:o.map((a,n)=>e.jsxs("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${a.color}`,style:{marginLeft:`${n*16}px`},children:[e.jsx("span",{className:"text-sm font-semibold text-foreground whitespace-nowrap",children:a.name}),e.jsx("span",{className:"text-xs text-muted-foreground",children:a.desc})]},a.name))})}function b(){return e.jsx(s,{title:"Dashboards — Visão Geral",description:"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.",component:e.jsx(l,{}),usage:`import {
2
+ // Orquestrador principal
3
+ DashboardGeneralView,
4
+
5
+ // Componentes de página
6
+ DashboardView,
7
+ DashboardList,
8
+ DashboardForm,
9
+ DashboardGrid,
10
+ DashboardPanelRenderer,
11
+
12
+ // Painéis individuais
13
+ NumericPanel, TextPanel, ListPanel,
14
+ CartesianPanel, PiePanel, ParetoPanel,
15
+ BurndownPanel, PerformancePanel, MatrixRiskPanel,
16
+
17
+ // Shared de painel
18
+ PanelHeader, PanelError, PanelLoader, PanelNoData, PanelUnavailable,
19
+
20
+ // Types & Helpers
21
+ DashboardPanelType, PanelState, AggregationType,
22
+ type PanelConfig, type Dashboard, type DashboardPanel,
23
+ getDefaultPanelSize, getMinPanelSize,
24
+ currencyFormatter, processUrl, getLinkFromRow,
25
+ } from 'forlogic-core';`,examples:[{title:"14 Tipos de Painel",description:"Cada tipo é representado pelo enum DashboardPanelType. O DashboardPanelRenderer resolve automaticamente qual componente renderizar.",preview:e.jsx(i,{}),code:`// O renderer mapeia typeId → componente automaticamente
26
+ <DashboardPanelRenderer
27
+ config={{ ...panelConfig, typeId: DashboardPanelType.Column }}
28
+ state={PanelState.Loaded}
29
+ cartesianData={chartData}
30
+ cartesianSeries={[{ dataKey: 'value', name: 'Total' }]}
31
+ />`},{title:"5 Estados de Painel",description:"Todos os painéis suportam os mesmos 5 estados. Componentes shared (PanelLoader, PanelError, etc.) são renderizados automaticamente dentro de cada painel.",preview:e.jsx(d,{}),code:`// Os painéis verificam o estado antes de renderizar
32
+ <NumericPanel config={config} state={PanelState.Loading} /> // → PanelLoader
33
+ <NumericPanel config={config} state={PanelState.NoData} /> // → PanelNoData
34
+ <NumericPanel config={config} state={PanelState.Error} /> // → PanelError
35
+ <NumericPanel config={config} state={PanelState.Loaded} value={42} />`}],props:[{name:"DashboardGeneralView",type:"Component",description:"Página orquestradora — integra List → View → Form com máquina de estados, carousel auto-advance e suporte a General View."},{name:"DashboardView",type:"Component",description:"Viewer com toolbar (refresh, fullscreen, favorito, share), tabs de páginas e grid de painéis."},{name:"DashboardList",type:"Component",description:"Lista/tabela com busca, filtros rápidos, favoritos e menu de contexto."},{name:"DashboardForm",type:"Component",description:"Formulário com títulos multilíngue, configurações e aba de compartilhamento."},{name:"DashboardGrid",type:"Component",description:"Grid de 8 colunas com @dnd-kit para posicionamento via drag-and-drop."},{name:"DashboardPanelRenderer",type:"Component",description:"Mapeia DashboardPanelType → componente React (14 tipos)."},{name:"PanelConfig",type:"Interface",description:"Configuração base compartilhada por todos os painéis (título, tipo, query, cores, etc.)."},{name:"PanelState",type:"Enum",description:"Loading (0), Loaded (1), Error (3), NoData (4), Unavailable (5)."}]})}export{b as DashboardOverviewDoc};
@@ -0,0 +1,60 @@
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};
@@ -0,0 +1,62 @@
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};
@@ -0,0 +1,75 @@
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};
@@ -0,0 +1,83 @@
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};
@@ -0,0 +1,45 @@
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};