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.
- package/.note/memory/patterns/single-scroll-pattern.md +30 -12
- package/README.md +0 -46
- package/dist/action-plans/components/ActionPlanAttachmentsTab.d.ts +18 -0
- package/dist/action-plans/components/ActionPlanCommentsTab.d.ts +18 -0
- package/dist/action-plans/components/ActionPlanCostTab.d.ts +10 -0
- package/dist/action-plans/components/ActionPlanGeneralTab.d.ts +18 -0
- package/dist/action-plans/components/ActionPlanHistoryTab.d.ts +13 -0
- package/dist/action-plans/components/ActionPlanPage.d.ts +25 -0
- package/dist/action-plans/components/ActionPlanPredecessorsTab.d.ts +10 -0
- package/dist/action-plans/components/ActionPlanProgressDialog.d.ts +13 -0
- package/dist/action-plans/components/ActionPlanProgressTab.d.ts +5 -0
- package/dist/action-plans/components/ActionPlanStatusBadge.d.ts +11 -0
- package/dist/action-plans/constants.d.ts +42 -0
- package/dist/action-plans/hooks/useActionPlan.d.ts +14 -0
- package/dist/action-plans/hooks/useActionPlanProgress.d.ts +15 -0
- package/dist/action-plans/index.d.ts +15 -0
- package/dist/action-plans/types.d.ts +353 -0
- package/dist/action-plans/utils/formatTime.d.ts +15 -0
- package/dist/approval-flow/components/ApprovalSidenav.d.ts +16 -0
- package/dist/approval-flow/components/ApproveDialog.d.ts +13 -0
- package/dist/approval-flow/components/SelectApproverDialog.d.ts +11 -0
- package/dist/approval-flow/index.d.ts +4 -0
- package/dist/approval-flow/types.d.ts +76 -0
- package/dist/assets/AccordionDoc-CGNlubG3.js +31 -0
- package/dist/assets/{ActionButtonDoc-DLJ_K9ib.js → ActionButtonDoc-CYtkXR0k.js} +2 -2
- package/dist/assets/ActionPlanDoc-BSuPRftQ.js +65 -0
- package/dist/assets/{AlertDoc-CY1ybZeG.js → AlertDoc-Cpvxneqg.js} +7 -7
- package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +189 -0
- package/dist/assets/AppHeaderDoc-DNQErj_t.js +74 -0
- package/dist/assets/AppSidebarDoc-DkeQarDu.js +221 -0
- package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +31 -0
- package/dist/assets/AuditLogDoc-BBvNcHIo.js +67 -0
- package/dist/assets/AuditTrailDoc-DgFHO-uo.js +17 -0
- package/dist/assets/AuthDoc-WIA_Aetl.js +200 -0
- package/dist/assets/{AvatarDoc-BLdMoyJd.js → AvatarDoc-B6go1C1T.js} +2 -2
- package/dist/assets/{BadgeDoc-CSNM1b6b.js → BadgeDoc-BONhfqB_.js} +2 -2
- package/dist/assets/BaseFormDoc-CuyUArcj.js +169 -0
- package/dist/assets/{BodyContentDoc-Bp6YmUWX.js → BodyContentDoc-CterHC1E.js} +2 -2
- package/dist/assets/{BreadcrumbDoc-D7tqqTvo.js → BreadcrumbDoc-Dwn9nLeO.js} +2 -2
- package/dist/assets/{ButtonDoc-C4JwIvU3.js → ButtonDoc-BOjRseZT.js} +2 -2
- package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +7 -0
- package/dist/assets/{CalendarDoc-COlEKqmv.js → CalendarDoc-CMwIEqgT.js} +3 -3
- package/dist/assets/{CardDoc-BVhMoC2w.js → CardDoc-BZz1CVg2.js} +2 -2
- package/dist/assets/ChartDoc-B5vZVtqD.js +76 -0
- package/dist/assets/{CheckboxDoc-Bcqpln9_.js → CheckboxDoc-lAbYO9I5.js} +2 -2
- package/dist/assets/ColorPickerDoc-Dpsprp4N.js +10 -0
- package/dist/assets/{ColorsFoundationDoc-uO6IiJbS.js → ColorsFoundationDoc-CCHeSL3p.js} +1 -1
- package/dist/assets/ComboTreeDoc-D4dTkIt-.js +46 -0
- package/dist/assets/ComboboxDoc-CqqZPvZq.js +134 -0
- package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +1 -0
- package/dist/assets/{ContextMenuDoc-C4-_0NLp.js → ContextMenuDoc-D3jC-MVA.js} +2 -2
- package/dist/assets/{ContextsDoc-Cj9Aaoyo.js → ContextsDoc-XFH0-JdS.js} +30 -3
- package/dist/assets/{CreateCrudPageDoc-D_SnMRJ2.js → CreateCrudPageDoc-CpuiWI-g.js} +2 -2
- package/dist/assets/{CrudActionBarDoc-BYqtIabp.js → CrudActionBarDoc-wuBGXD9Y.js} +4 -4
- package/dist/assets/CrudGridDoc-BYWqSXBH.js +85 -0
- package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +14 -0
- package/dist/assets/{CrudPrimitivesDoc-BRS86nWg.js → CrudPrimitivesDoc-CxaTB94A.js} +4 -4
- package/dist/assets/{CrudTableDoc-Daw8u2G_.js → CrudTableDoc-Dga1VgCu.js} +5 -5
- package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +33 -0
- package/dist/assets/DashboardFormDoc-BUDCmrMl.js +49 -0
- package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +71 -0
- package/dist/assets/DashboardGridDoc-BavePiRF.js +49 -0
- package/dist/assets/DashboardListDoc-CLyMA6UK.js +37 -0
- package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +35 -0
- package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +60 -0
- package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +62 -0
- package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +75 -0
- package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +83 -0
- package/dist/assets/DashboardViewDoc-CtlCNlEF.js +45 -0
- package/dist/assets/DataListDoc-DUy88lCQ.js +13 -0
- package/dist/assets/DesignSystemHome-DHl9YtbH.js +1 -0
- package/dist/assets/{DialogDoc-DCpRy4rg.js → DialogDoc-CMQqnTV-.js} +2 -2
- package/dist/assets/{DropdownMenuDoc-DT6LBa8Z.js → DropdownMenuDoc-S7X9csGt.js} +5 -5
- package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +57 -0
- package/dist/assets/{EmptyStateDoc-wydc09gG.js → EmptyStateDoc-CHGCiGIk.js} +2 -2
- package/dist/assets/{EnvironmentsDoc-amIriwDD.js → EnvironmentsDoc-DZHJZ2nm.js} +4 -4
- package/dist/assets/{ErrorBoundaryDoc-BEixy_Gl.js → ErrorBoundaryDoc-DoaAg68p.js} +2 -2
- package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +1 -0
- package/dist/assets/ExampleAppDoc-DzIU81Fn.js +1 -0
- package/dist/assets/ExampleCard-DuLrb3t-.js +1 -0
- package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +1 -0
- package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +1 -0
- package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +1 -0
- package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +1 -0
- package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +1 -0
- package/dist/assets/FileUploadDoc-9-UujFNX.js +34 -0
- package/dist/assets/FilterBar-DDTqqUfZ.js +1 -0
- package/dist/assets/{FormDoc-DxoRt6p7.js → FormDoc-CVES6n3d.js} +2 -2
- package/dist/assets/{FoundationOverview-CxSbumIt.js → FoundationOverview-DT0u11Gz.js} +1 -1
- package/dist/assets/{GridDoc-BpQqCMUE.js → GridDoc-CbHFSILF.js} +2 -2
- package/dist/assets/{HooksDoc-JNODhbaF.js → HooksDoc-Ctxdk6Wq.js} +5 -5
- package/dist/assets/{HoverCardDoc-CdqiYrIb.js → HoverCardDoc-8Wkaafdj.js} +2 -2
- package/dist/assets/I18nDoc-D3Q2m7ik.js +167 -0
- package/dist/assets/IconPickerDoc-DZ26Gdpg.js +10 -0
- package/dist/assets/{IconsFoundationDoc-CrymfxTI.js → IconsFoundationDoc-xOxtC7CW.js} +5 -5
- package/dist/assets/{InputDoc-BK-SdpJ7.js → InputDoc-BhztAiuJ.js} +4 -4
- package/dist/assets/{LabelDoc-DHvgzhaJ.js → LabelDoc-A4hmTRRV.js} +2 -2
- package/dist/assets/LeadershipDoc-CqOSfWsP.js +452 -0
- package/dist/assets/{MediaDoc-B_vqnf72.js → MediaDoc-C78gvC8p.js} +2 -2
- package/dist/assets/MenubarDoc-DCnmd2tO.js +165 -0
- package/dist/assets/{ModuleAccessDoc-Nuxb4S27.js → ModuleAccessDoc-CmD5nHDp.js} +2 -2
- package/dist/assets/{ModulesDialogDoc-iJWLkOZo.js → ModulesDialogDoc-DVit1CA-.js} +2 -2
- package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +34 -0
- package/dist/assets/NavigationMenuDoc-q1fbc89j.js +116 -0
- package/dist/assets/{OnboardingDialogDoc-xBL-rXeZ.js → OnboardingDialogDoc-3A3eBYrq.js} +2 -2
- package/dist/assets/{PaginationDoc-DqtRgXnF.js → PaginationDoc-B8-bMz5J.js} +2 -2
- package/dist/assets/{PaginationDoc-CfvwxCMe.js → PaginationDoc-BkGdxHL3.js} +5 -5
- package/dist/assets/{PlacesDoc-nckioEzg.js → PlacesDoc-CKPO6ATs.js} +2 -2
- package/dist/assets/{PopoverDoc-C3o2CZCT.js → PopoverDoc-CJPU4Ags.js} +3 -3
- package/dist/assets/{ProgressDoc-BmWBNMPA.js → ProgressDoc-CpjbTL4o.js} +2 -2
- package/dist/assets/{QualiexUserFieldDoc-CE1e4mx6.js → QualiexUserFieldDoc-DDwumlRw.js} +2 -2
- package/dist/assets/{RadioGroupDoc-DMZH6NmR.js → RadioGroupDoc-D6tSZz8G.js} +2 -2
- package/dist/assets/{RadiusDoc-BOZD3gPV.js → RadiusDoc-B4xSnajw.js} +1 -1
- package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +15 -0
- package/dist/assets/{RequiredFieldsCounterDoc-CG-lmSSy.js → RequiredFieldsCounterDoc-COesoSdx.js} +2 -2
- package/dist/assets/ResizableDoc-CW0-XQuB.js +104 -0
- package/dist/assets/{RichTextEditorDoc-m50ll-Od.js → RichTextEditorDoc-C8c_XA9P.js} +2 -2
- package/dist/assets/{ScrollAreaDoc-BzJ-APXo.js → ScrollAreaDoc-BxtoAPaZ.js} +2 -2
- package/dist/assets/{SecurityDoc-B34gVeiV.js → SecurityDoc-wOVqpg2F.js} +2 -2
- package/dist/assets/{SelectDoc-DXRv7QHK.js → SelectDoc-C75gtY9D.js} +2 -2
- package/dist/assets/{SeparatorDoc-DcNh8k0P.js → SeparatorDoc-BjQBPB1P.js} +2 -2
- package/dist/assets/{ServicesDoc-8aXBd6yg.js → ServicesDoc-CXTctwBl.js} +3 -3
- package/dist/assets/ShadowsDoc-C6Lw8_x2.js +9 -0
- package/dist/assets/SignDoc-Bh5ZUg5x.js +66 -0
- package/dist/assets/{SkeletonDoc-BWgqgbDY.js → SkeletonDoc-rTLGK5VE.js} +8 -8
- package/dist/assets/SliderDoc-JMAMDub7.js +41 -0
- package/dist/assets/{SpacingDoc-BzburM-r.js → SpacingDoc-RljOrpwA.js} +1 -1
- package/dist/assets/{SplitButtonDoc-BYUysmJp.js → SplitButtonDoc-CvShUW3w.js} +3 -3
- package/dist/assets/{StepSelectorDoc-PB1k4v7F.js → StepSelectorDoc-C-nAap9H.js} +2 -2
- package/dist/assets/{SwitchDoc-BLOG6kfj.js → SwitchDoc-DLnqmkPr.js} +2 -2
- package/dist/assets/{TableDoc-Dwcs-lop.js → TableDoc-B8EpWLVg.js} +2 -2
- package/dist/assets/{TabsDoc-Ovkh8ArV.js → TabsDoc-DIBtl_uC.js} +2 -2
- package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +10 -0
- package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +16 -0
- package/dist/assets/{TextareaDoc-DsBYxmbr.js → TextareaDoc-DGnqMqEC.js} +4 -4
- package/dist/assets/{ToastDoc-BbZaFE_A.js → ToastDoc-DjYyc7ae.js} +4 -4
- package/dist/assets/{ToggleDoc-C28vbvhp.js → ToggleDoc-C9ZOVjkY.js} +2 -2
- package/dist/assets/{TooltipDoc-DL5cnLak.js → TooltipDoc-BEx4l9-i.js} +7 -7
- package/dist/assets/{TruncatedCellDoc-BuDA8QcY.js → TruncatedCellDoc-BbV1bRSY.js} +2 -2
- package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +7 -0
- package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +29 -0
- package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +18 -0
- package/dist/assets/{UtilitiesDoc-CrQhyEfz.js → UtilitiesDoc-DGxaHVV1.js} +2 -2
- package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +1 -0
- package/dist/assets/{blocks-DO93nPjs.js → blocks-B6LrJeAM.js} +1 -1
- package/dist/assets/building-DeVappnD.js +1 -0
- package/dist/assets/{calendar-days-cMfwBSZx.js → calendar-days-BQ0na5kM.js} +1 -1
- package/dist/assets/check-check-C_-PJCJa.js +1 -0
- package/dist/assets/circle-plus-CpIcep-O.js +1 -0
- package/dist/assets/{circle-x-BVAVJ_oz.js → circle-x-jPpBPew0.js} +1 -1
- package/dist/assets/clipboard-list-CXNPdciZ.js +1 -0
- package/dist/assets/cloud-upload-BEjzumjl.js +1 -0
- package/dist/assets/{crown-B2MTZDnM.js → crown-CqNsQIsm.js} +1 -1
- package/dist/assets/date-picker-BW3eGOe_.js +1 -0
- package/dist/assets/disabled-menu-item-C2YaMvSt.js +1 -0
- package/dist/assets/{drawer-oTqCOtsC.js → drawer-D5rflIcD.js} +2 -2
- package/dist/assets/file-braces-DFb5X9so.js +1 -0
- package/dist/assets/{file-pen-line-CXv-Eye-.js → file-pen-line-CyUGKkEN.js} +1 -1
- package/dist/assets/{git-branch-V6-h6P9K.js → git-branch-BcXv9mpp.js} +1 -1
- package/dist/assets/{globe-CaUBIJU8.js → globe-CpMIWAcv.js} +1 -1
- package/dist/assets/{hash-B4MTXppl.js → hash-cQWdKjya.js} +1 -1
- package/dist/assets/hourglass-BahQ3eDv.js +1 -0
- package/dist/assets/hover-card-R66N85sZ.js +1 -0
- package/dist/assets/iframe-dialog-V0mW5aBb.js +1 -0
- package/dist/assets/index-DkiftrvI.js +352 -0
- package/dist/assets/index-nmBjO9Th.css +1 -0
- package/dist/assets/index.d.ts +1 -0
- package/dist/assets/{life-buoy-BRndExxh.js → life-buoy-ByXiPddz.js} +1 -1
- package/dist/assets/loading-state-Cb5_t5uE.js +1 -0
- package/dist/assets/lucide-react-Cp3Yw3Zm.js +1 -0
- package/dist/assets/{package-3G45ARQh.js → package-B3-pVvPM.js} +1 -1
- package/dist/assets/{pen-BYSSwjK4.js → pen-Bi_lmmKT.js} +1 -1
- package/dist/assets/pin-DVsSl8QA.js +1 -0
- package/dist/assets/printer-BnJ8B6m-.js +1 -0
- package/dist/assets/radio-group-BHAaNGsm.js +1 -0
- package/dist/assets/{server-p0Sb0mKI.js → server-CtzFTfKR.js} +1 -1
- package/dist/assets/{share-2-D-ZhCCq2.js → share-2-Dv8Do445.js} +1 -1
- package/dist/assets/shield-check-CFXjOV_w.js +1 -0
- package/dist/assets/{shield-x-Q7hAXWsG.js → shield-x-DJTRfVux.js} +1 -1
- package/dist/assets/slider-v9tXBSnB.js +1 -0
- package/dist/assets/smartphone-BSNR60L7.js +1 -0
- package/dist/assets/step-selector-ATTh_9Wa.js +1 -0
- package/dist/assets/{text-align-start-6aYQqbX4.js → text-align-start-qE-MbYYw.js} +1 -1
- package/dist/assets/thumbs-up-D_XIW_uX.js +1 -0
- package/dist/assets/{trash-DveAOiLF.js → trash-DTWQwpwA.js} +1 -1
- package/dist/assets/trending-up-jip5-leJ.js +1 -0
- package/dist/assets/{useMockCrud-GY0KxHXr.js → useMockCrud-CN4vjyOZ.js} +1 -1
- package/dist/assets/{user-check-CoGNBfIk.js → user-check-BlH3EDWK.js} +1 -1
- package/dist/assets/{user-plus-Bad2xWIT.js → user-plus-BqwXwD-c.js} +1 -1
- package/dist/audit-trail/components/AuditTrailDetails.d.ts +17 -0
- package/dist/audit-trail/components/AuditTrailFilter.d.ts +19 -0
- package/dist/audit-trail/components/AuditTrailPage.d.ts +30 -0
- package/dist/audit-trail/index.d.ts +9 -0
- package/dist/audit-trail/types.d.ts +151 -0
- package/dist/audit-trail/utils.d.ts +38 -0
- package/dist/components/dashboards/dashboard-form.d.ts +50 -0
- package/dist/components/dashboards/dashboard-general-view.d.ts +109 -0
- package/dist/components/dashboards/dashboard-grid.d.ts +41 -0
- package/dist/components/dashboards/dashboard-list.d.ts +31 -0
- package/dist/components/dashboards/dashboard-panel-renderer.d.ts +21 -0
- package/dist/components/dashboards/dashboard-view.d.ts +38 -0
- package/dist/components/dashboards/helpers.d.ts +47 -0
- package/dist/components/dashboards/index.d.ts +9 -0
- package/dist/components/dashboards/panels/burndown-panel.d.ts +26 -0
- package/dist/components/dashboards/panels/cartesian-panel.d.ts +46 -0
- package/dist/components/dashboards/panels/index.d.ts +14 -0
- package/dist/components/dashboards/panels/list-panel.d.ts +30 -0
- package/dist/components/dashboards/panels/matrix-risk-panel.d.ts +49 -0
- package/dist/components/dashboards/panels/numeric-panel.d.ts +22 -0
- package/dist/components/dashboards/panels/panel-error.d.ts +8 -0
- package/dist/components/dashboards/panels/panel-header.d.ts +17 -0
- package/dist/components/dashboards/panels/panel-loader.d.ts +7 -0
- package/dist/components/dashboards/panels/panel-no-data.d.ts +6 -0
- package/dist/components/dashboards/panels/panel-unavailable.d.ts +6 -0
- package/dist/components/dashboards/panels/pareto-panel.d.ts +20 -0
- package/dist/components/dashboards/panels/performance-panel.d.ts +24 -0
- package/dist/components/dashboards/panels/pie-panel.d.ts +19 -0
- package/dist/components/dashboards/panels/text-panel.d.ts +18 -0
- package/dist/components/dashboards/types.d.ts +525 -0
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/electronic-signature-dialog.d.ts +21 -0
- package/dist/components/ui/export-dialog.d.ts +28 -0
- package/dist/components/ui/iframe-dialog.d.ts +14 -0
- package/dist/components/ui/multiselect-permissions.d.ts +59 -0
- package/dist/components/ui/online-editor-dialog.d.ts +18 -0
- package/dist/components/ui/report-request-list.d.ts +44 -0
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/stimulsoft-viewer.d.ts +20 -0
- package/dist/components/ui/terms-of-use-dialog.d.ts +56 -0
- package/dist/components/ui/timepicker.d.ts +11 -0
- package/dist/components/ui/users-groups-selector.d.ts +44 -0
- package/dist/components/ui/viewer-dialog.d.ts +77 -0
- package/dist/custom-form-fields/components/CustomFormFields.d.ts +8 -0
- package/dist/custom-form-fields/fields/FormDateField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormMultiSelectionField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormNumericField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormQuestionsField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormSingleSelectionField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormTextField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormTimeField.d.ts +6 -0
- package/dist/custom-form-fields/fields/FormUrlField.d.ts +6 -0
- package/dist/custom-form-fields/fields/ReadOnlyTextField.d.ts +6 -0
- package/dist/custom-form-fields/index.d.ts +13 -0
- package/dist/custom-form-fields/types.d.ts +143 -0
- package/dist/exports/action-plans.d.ts +16 -0
- package/dist/exports/audit-trail.d.ts +1 -0
- package/dist/exports/custom-form-fields.d.ts +1 -0
- package/dist/exports/file-upload.d.ts +1 -0
- package/dist/exports/ui.d.ts +12 -0
- package/dist/file-upload/components/SingleFileUpload.d.ts +43 -0
- package/dist/file-upload/index.d.ts +6 -0
- package/dist/file-upload/types.d.ts +11 -0
- package/dist/file-upload/utils/formatBytes.d.ts +1 -0
- package/dist/file-upload/utils/getFileExtension.d.ts +1 -0
- package/dist/hooks/useSidebarResize.d.ts +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.html +9 -11
- package/dist/index.js +1 -1
- package/dist/setup/favicon.d.ts +1 -0
- package/dist/team-selector/components/TeamSelector.d.ts +24 -0
- package/dist/team-selector/index.d.ts +2 -0
- package/dist/team-selector/types.d.ts +10 -0
- package/docs/ICON_MIGRATION_GUIDE.md +177 -0
- package/docs/PUBLISH.md +3 -3
- package/package.json +1 -5
- package/dist/README.md +0 -1079
- package/dist/assets/AccordionDoc-BVPUJk8G.js +0 -31
- package/dist/assets/AppHeaderDoc-Crkw4dA9.js +0 -67
- package/dist/assets/AppSidebarDoc-ET-4j6wV.js +0 -204
- package/dist/assets/AuthDoc-B4v4Nci5.js +0 -192
- package/dist/assets/BaseFormDoc-DXiYuN6-.js +0 -169
- package/dist/assets/ButtonGroupDoc-QFfjC7Pm.js +0 -7
- package/dist/assets/ChartDoc-BJ14EjI2.js +0 -111
- package/dist/assets/ColorPickerDoc-CcfmSwyC.js +0 -10
- package/dist/assets/ComboTreeDoc-R4qE6XwB.js +0 -46
- package/dist/assets/ComboboxDoc-JIo_-gSN.js +0 -134
- package/dist/assets/ComponentDocTemplate-CRbRY-v5.js +0 -1
- package/dist/assets/CrudGridDoc-DspxQrq5.js +0 -85
- package/dist/assets/CrudOverviewDoc-DLcOL_HZ.js +0 -14
- package/dist/assets/DataListDoc-BrgVNhhR.js +0 -13
- package/dist/assets/DesignSystemHome-BFBNqq1J.js +0 -1
- package/dist/assets/I18nDoc-B6LMXnE3.js +0 -232
- package/dist/assets/IconPickerDoc-BRdy58IC.js +0 -10
- package/dist/assets/LeadershipDoc-DRiB0spL.js +0 -416
- package/dist/assets/MenubarDoc-Zvgczxe2.js +0 -165
- package/dist/assets/NavigationMenuDoc-CeWun1VF.js +0 -116
- package/dist/assets/ResizableDoc-CqGkv6Cd.js +0 -104
- package/dist/assets/ShadowsDoc-Brl4hIDI.js +0 -9
- package/dist/assets/SignDoc-BdwerR-2.js +0 -66
- package/dist/assets/SliderDoc-E-NjbYVk.js +0 -41
- package/dist/assets/TypographyFoundationDoc-CPdH4PHa.js +0 -7
- package/dist/assets/circle-plus-D3NftMzS.js +0 -1
- package/dist/assets/date-picker-zhJU-_kM.js +0 -1
- package/dist/assets/disabled-menu-item-C16xsaVs.js +0 -1
- package/dist/assets/hover-card-DEuucfxP.js +0 -1
- package/dist/assets/index-CE0k7Rdh.js +0 -312
- package/dist/assets/index-Cx3adT_u.css +0 -1
- package/dist/assets/lucide-react-t7dCa4lv.js +0 -1
- package/dist/assets/monitor-Dg3HKTSE.js +0 -1
- package/dist/assets/pin-CMYagNhs.js +0 -1
- package/dist/assets/radio-group-BVun_Tmt.js +0 -1
- package/dist/assets/step-selector-DHxgT2FL.js +0 -1
- package/dist/bin/bootstrap.js +0 -40
- package/dist/bin/pull-docs.js +0 -186
- package/dist/docs/KNOWLEDGE.md +0 -109
- 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};
|