forlogic-core 2.0.4 → 2.0.6
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/features/crud-defaults-batteries-included.md +1 -1
- package/dist/auth/services/TokenManager.d.ts +0 -1
- package/dist/components/ui/dialog-wizard.d.ts +82 -0
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/input.d.ts +5 -23
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/step-selector.d.ts +11 -9
- package/dist/components/ui/textarea.d.ts +1 -0
- package/dist/crud/components/CrudTable.d.ts +3 -1
- package/dist/crud/createCrudPage.d.ts +2 -0
- package/dist/crud/hooks/useColumnManager.d.ts +3 -1
- package/dist/exports/ui.d.ts +1 -0
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/types.d.ts +3 -0
- package/docs/design-system/README.md +2 -2
- package/docs/design-system/buttons-actions.md +6 -0
- package/docs/design-system/domain.md +10 -0
- package/docs/design-system/inputs.md +20 -0
- package/docs/design-system/navigation.md +5 -0
- package/docs/design-system/notifications-feedback.md +2 -0
- package/package.json +1 -1
- package/dist/assets/AccordionDoc-CGNlubG3.js +0 -31
- package/dist/assets/ActionButtonDoc-CYtkXR0k.js +0 -47
- package/dist/assets/ActionPlanDoc-BSuPRftQ.js +0 -65
- package/dist/assets/AlertDoc-Cpvxneqg.js +0 -37
- package/dist/assets/AliasUrlDoc-DIpUWf4Y.js +0 -189
- package/dist/assets/AppHeaderDoc-DNQErj_t.js +0 -74
- package/dist/assets/AppSidebarDoc-DkeQarDu.js +0 -221
- package/dist/assets/ApprovalFlowDoc-8YgXbhKJ.js +0 -31
- package/dist/assets/AuditLogDoc-BBvNcHIo.js +0 -67
- package/dist/assets/AuditTrailDoc-DgFHO-uo.js +0 -17
- package/dist/assets/AuthDoc-WIA_Aetl.js +0 -200
- package/dist/assets/AvatarDoc-B6go1C1T.js +0 -11
- package/dist/assets/BadgeDoc-BONhfqB_.js +0 -36
- package/dist/assets/BaseFormDoc-CuyUArcj.js +0 -169
- package/dist/assets/BodyContentDoc-CterHC1E.js +0 -83
- package/dist/assets/BreadcrumbDoc-Dwn9nLeO.js +0 -75
- package/dist/assets/ButtonDoc-BOjRseZT.js +0 -41
- package/dist/assets/ButtonGroupDoc-8IS6PPh4.js +0 -7
- package/dist/assets/CalendarDoc-CMwIEqgT.js +0 -81
- package/dist/assets/CardDoc-BZz1CVg2.js +0 -49
- package/dist/assets/ChartDoc-B5vZVtqD.js +0 -76
- package/dist/assets/CheckboxDoc-lAbYO9I5.js +0 -55
- package/dist/assets/ColorPickerDoc-Dpsprp4N.js +0 -10
- package/dist/assets/ColorsFoundationDoc-CCHeSL3p.js +0 -13
- package/dist/assets/ComboTreeDoc-D4dTkIt-.js +0 -46
- package/dist/assets/ComboboxDoc-CqqZPvZq.js +0 -134
- package/dist/assets/ComponentDocTemplate-CQbBhfvZ.js +0 -1
- package/dist/assets/ContextMenuDoc-D3jC-MVA.js +0 -182
- package/dist/assets/ContextsDoc-XFH0-JdS.js +0 -211
- package/dist/assets/CreateCrudPageDoc-CpuiWI-g.js +0 -106
- package/dist/assets/CrudActionBarDoc-wuBGXD9Y.js +0 -112
- package/dist/assets/CrudGridDoc-BYWqSXBH.js +0 -85
- package/dist/assets/CrudOverviewDoc-B_bk2a2t.js +0 -14
- package/dist/assets/CrudPrimitivesDoc-CxaTB94A.js +0 -164
- package/dist/assets/CrudTableDoc-Dga1VgCu.js +0 -113
- package/dist/assets/CustomFormFieldsDoc-C1hwwSl3.js +0 -33
- package/dist/assets/DashboardFormDoc-BUDCmrMl.js +0 -49
- package/dist/assets/DashboardGeneralViewDoc-Cyg1SIiG.js +0 -71
- package/dist/assets/DashboardGridDoc-BavePiRF.js +0 -49
- package/dist/assets/DashboardListDoc-CLyMA6UK.js +0 -37
- package/dist/assets/DashboardOverviewDoc-DRVvNIF1.js +0 -35
- package/dist/assets/DashboardPanelRendererDoc--mfwb8Nc.js +0 -60
- package/dist/assets/DashboardPanelsBasicDoc-BQ2V_52D.js +0 -62
- package/dist/assets/DashboardPanelsCartesianDoc-sy-hcVQY.js +0 -75
- package/dist/assets/DashboardPanelsSpecialDoc-DsIUCRRP.js +0 -83
- package/dist/assets/DashboardViewDoc-CtlCNlEF.js +0 -45
- package/dist/assets/DataListDoc-DUy88lCQ.js +0 -13
- package/dist/assets/DesignSystemHome-DHl9YtbH.js +0 -1
- package/dist/assets/DialogDoc-CMQqnTV-.js +0 -981
- package/dist/assets/DropdownMenuDoc-S7X9csGt.js +0 -175
- package/dist/assets/ElectronicSignatureDialogDoc-BfithaL_.js +0 -57
- package/dist/assets/EmptyStateDoc-CHGCiGIk.js +0 -35
- package/dist/assets/EnvironmentsDoc-DZHJZ2nm.js +0 -96
- package/dist/assets/ErrorBoundaryDoc-DoaAg68p.js +0 -111
- package/dist/assets/ExampleActionPlanPage-C0fIMZCD.js +0 -1
- package/dist/assets/ExampleAppDoc-DzIU81Fn.js +0 -1
- package/dist/assets/ExampleCard-DuLrb3t-.js +0 -1
- package/dist/assets/ExampleCrudReportsPage-M0pz6tdM.js +0 -1
- package/dist/assets/ExampleDashboardPage-CRG5r3Vw.js +0 -1
- package/dist/assets/ExampleIdeasPage-I84ZMLY4.js +0 -1
- package/dist/assets/ExampleImportWizardPage-h4YqrrSe.js +0 -1
- package/dist/assets/ExampleSettingsPage-CwdWqoaP.js +0 -1
- package/dist/assets/FileUploadDoc-9-UujFNX.js +0 -34
- package/dist/assets/FilterBar-DDTqqUfZ.js +0 -1
- package/dist/assets/FormDoc-CVES6n3d.js +0 -81
- package/dist/assets/FoundationOverview-DT0u11Gz.js +0 -1
- package/dist/assets/GridDoc-CbHFSILF.js +0 -28
- package/dist/assets/HooksDoc-Ctxdk6Wq.js +0 -665
- package/dist/assets/HoverCardDoc-8Wkaafdj.js +0 -31
- package/dist/assets/I18nDoc-D3Q2m7ik.js +0 -167
- package/dist/assets/IconPickerDoc-DZ26Gdpg.js +0 -10
- package/dist/assets/IconsFoundationDoc-xOxtC7CW.js +0 -33
- package/dist/assets/InputDoc-BhztAiuJ.js +0 -211
- package/dist/assets/LabelDoc-A4hmTRRV.js +0 -42
- package/dist/assets/LeadershipDoc-CqOSfWsP.js +0 -452
- package/dist/assets/MediaDoc-C78gvC8p.js +0 -459
- package/dist/assets/MenubarDoc-DCnmd2tO.js +0 -165
- package/dist/assets/ModuleAccessDoc-CmD5nHDp.js +0 -153
- package/dist/assets/ModulesDialogDoc-DVit1CA-.js +0 -46
- package/dist/assets/MultiselectPermissionsDoc-tlJMs04L.js +0 -34
- package/dist/assets/NavigationMenuDoc-q1fbc89j.js +0 -116
- package/dist/assets/OnboardingDialogDoc-3A3eBYrq.js +0 -55
- package/dist/assets/PaginationDoc-B8-bMz5J.js +0 -27
- package/dist/assets/PaginationDoc-BkGdxHL3.js +0 -98
- package/dist/assets/PlacesDoc-CKPO6ATs.js +0 -226
- package/dist/assets/PopoverDoc-CJPU4Ags.js +0 -64
- package/dist/assets/ProgressDoc-CpjbTL4o.js +0 -29
- package/dist/assets/QualiexUserFieldDoc-DDwumlRw.js +0 -149
- package/dist/assets/RadioGroupDoc-D6tSZz8G.js +0 -57
- package/dist/assets/RadiusDoc-B4xSnajw.js +0 -7
- package/dist/assets/ReportRequestListDoc-C0LIaU8P.js +0 -15
- package/dist/assets/RequiredFieldsCounterDoc-COesoSdx.js +0 -58
- package/dist/assets/ResizableDoc-CW0-XQuB.js +0 -104
- package/dist/assets/RichTextEditorDoc-C8c_XA9P.js +0 -24
- package/dist/assets/ScrollAreaDoc-BxtoAPaZ.js +0 -28
- package/dist/assets/SecurityDoc-wOVqpg2F.js +0 -204
- package/dist/assets/SelectDoc-C75gtY9D.js +0 -80
- package/dist/assets/SeparatorDoc-BjQBPB1P.js +0 -4
- package/dist/assets/ServicesDoc-CXTctwBl.js +0 -308
- package/dist/assets/ShadowsDoc-C6Lw8_x2.js +0 -9
- package/dist/assets/SignDoc-Bh5ZUg5x.js +0 -66
- package/dist/assets/SkeletonDoc-rTLGK5VE.js +0 -54
- package/dist/assets/SliderDoc-JMAMDub7.js +0 -41
- package/dist/assets/SpacingDoc-RljOrpwA.js +0 -12
- package/dist/assets/SplitButtonDoc-CvShUW3w.js +0 -53
- package/dist/assets/StepSelectorDoc-C-nAap9H.js +0 -41
- package/dist/assets/SwitchDoc-DLnqmkPr.js +0 -56
- package/dist/assets/TableDoc-B8EpWLVg.js +0 -128
- package/dist/assets/TabsDoc-DIBtl_uC.js +0 -42
- package/dist/assets/TeamSelectorDoc-B7OnCbL7.js +0 -10
- package/dist/assets/TermsOfUseDoc-Bb-pw08s.js +0 -16
- package/dist/assets/TextareaDoc-DGnqMqEC.js +0 -46
- package/dist/assets/ToastDoc-DjYyc7ae.js +0 -157
- package/dist/assets/ToggleDoc-C9ZOVjkY.js +0 -51
- package/dist/assets/TooltipDoc-BEx4l9-i.js +0 -58
- package/dist/assets/TruncatedCellDoc-BbV1bRSY.js +0 -12
- package/dist/assets/TypographyFoundationDoc-CUDYjRo9.js +0 -7
- package/dist/assets/UpdatesNotificationDoc-7nyjzLMJ.js +0 -29
- package/dist/assets/UsersGroupsSelectorDoc-C0KlTAL5.js +0 -18
- package/dist/assets/UtilitiesDoc-DGxaHVV1.js +0 -145
- package/dist/assets/ViewerDialogsDoc-CnTPTEz0.js +0 -1
- package/dist/assets/blocks-B6LrJeAM.js +0 -1
- package/dist/assets/building-DeVappnD.js +0 -1
- package/dist/assets/calendar-days-BQ0na5kM.js +0 -1
- package/dist/assets/check-check-C_-PJCJa.js +0 -1
- package/dist/assets/circle-plus-CpIcep-O.js +0 -1
- package/dist/assets/circle-x-jPpBPew0.js +0 -1
- package/dist/assets/clipboard-list-CXNPdciZ.js +0 -1
- package/dist/assets/cloud-upload-BEjzumjl.js +0 -1
- package/dist/assets/crown-CqNsQIsm.js +0 -1
- package/dist/assets/date-picker-BW3eGOe_.js +0 -1
- package/dist/assets/disabled-menu-item-C2YaMvSt.js +0 -1
- package/dist/assets/drawer-D5rflIcD.js +0 -3
- package/dist/assets/file-braces-DFb5X9so.js +0 -1
- package/dist/assets/file-pen-line-CyUGKkEN.js +0 -1
- package/dist/assets/git-branch-BcXv9mpp.js +0 -1
- package/dist/assets/globe-CpMIWAcv.js +0 -1
- package/dist/assets/hash-cQWdKjya.js +0 -1
- package/dist/assets/hourglass-BahQ3eDv.js +0 -1
- package/dist/assets/hover-card-R66N85sZ.js +0 -1
- package/dist/assets/iframe-dialog-V0mW5aBb.js +0 -1
- package/dist/assets/index-DkiftrvI.js +0 -352
- package/dist/assets/index-nmBjO9Th.css +0 -1
- package/dist/assets/life-buoy-ByXiPddz.js +0 -1
- package/dist/assets/loading-state-Cb5_t5uE.js +0 -1
- package/dist/assets/lucide-react-Cp3Yw3Zm.js +0 -1
- package/dist/assets/package-B3-pVvPM.js +0 -1
- package/dist/assets/pen-Bi_lmmKT.js +0 -1
- package/dist/assets/pin-DVsSl8QA.js +0 -1
- package/dist/assets/printer-BnJ8B6m-.js +0 -1
- package/dist/assets/radio-group-BHAaNGsm.js +0 -1
- package/dist/assets/server-CtzFTfKR.js +0 -1
- package/dist/assets/share-2-Dv8Do445.js +0 -1
- package/dist/assets/shield-check-CFXjOV_w.js +0 -1
- package/dist/assets/shield-x-DJTRfVux.js +0 -1
- package/dist/assets/slider-v9tXBSnB.js +0 -1
- package/dist/assets/smartphone-BSNR60L7.js +0 -1
- package/dist/assets/step-selector-ATTh_9Wa.js +0 -1
- package/dist/assets/text-align-start-qE-MbYYw.js +0 -1
- package/dist/assets/thumbs-up-D_XIW_uX.js +0 -1
- package/dist/assets/trash-DTWQwpwA.js +0 -1
- package/dist/assets/trending-up-jip5-leJ.js +0 -1
- package/dist/assets/useMockCrud-CN4vjyOZ.js +0 -1
- package/dist/assets/user-check-BlH3EDWK.js +0 -1
- package/dist/assets/user-plus-BqwXwD-c.js +0 -1
- package/dist/index.html +0 -33
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DkiftrvI.js";import{C as t}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function r(){const o=[{types:["Numeric (8)"],component:"NumericPanel",props:"numericValue"},{types:["Text (1)"],component:"TextPanel",props:"—"},{types:["List (7)"],component:"ListPanel",props:"data, listColumns"},{types:["Bar (3)","Column (4)","StackedColumn (5)","Area (2)","Line (6)","EvolutionLine (14)"],component:"CartesianPanel",props:"cartesianData, cartesianSeries"},{types:["Pie (10)"],component:"PiePanel",props:"data"},{types:["Pareto (9)"],component:"ParetoPanel",props:"data"},{types:["Burndown (12)"],component:"BurndownPanel",props:"burndownData"},{types:["PerformanceColumns (13)"],component:"PerformancePanel",props:"performanceData"},{types:["RiskMatrix (11)"],component:"MatrixRiskPanel",props:"matrixRule, matrixRisks"}];return e.jsx("div",{className:"space-y-1.5",children:o.map(a=>e.jsxs("div",{className:"flex items-start gap-3 p-2 rounded border border-border bg-card text-xs",children:[e.jsx("div",{className:"flex flex-wrap gap-1 min-w-[180px]",children:a.types.map(n=>e.jsx("span",{className:"px-1.5 py-0.5 bg-primary/10 text-primary rounded font-mono",children:n},n))}),e.jsxs("span",{className:"text-foreground font-semibold",children:["→ ",a.component]}),e.jsx("span",{className:"text-muted-foreground ml-auto",children:a.props})]},a.component))})}function p(){return e.jsx(t,{title:"DashboardPanelRenderer",description:"Componente de roteamento que mapeia DashboardPanelType para o componente React correto. Recebe config + state e props de dados especializadas, delegando a renderização ao painel apropriado.",component:e.jsx(r,{}),usage:`import { DashboardPanelRenderer, PanelState, DashboardPanelType } from 'forlogic-core';
|
|
2
|
-
|
|
3
|
-
// O renderer resolve automaticamente qual componente usar
|
|
4
|
-
<DashboardPanelRenderer
|
|
5
|
-
config={{
|
|
6
|
-
id: 'p1',
|
|
7
|
-
title: 'Ocorrências por Mês',
|
|
8
|
-
typeId: DashboardPanelType.Column,
|
|
9
|
-
// ... demais campos de PanelConfig
|
|
10
|
-
}}
|
|
11
|
-
state={PanelState.Loaded}
|
|
12
|
-
cartesianData={[
|
|
13
|
-
{ key: 'Jan', value: 42 },
|
|
14
|
-
{ key: 'Fev', value: 58 },
|
|
15
|
-
]}
|
|
16
|
-
cartesianSeries={[{ dataKey: 'value', name: 'Total' }]}
|
|
17
|
-
/>
|
|
18
|
-
|
|
19
|
-
// Para NumericPanel, use numericValue:
|
|
20
|
-
<DashboardPanelRenderer
|
|
21
|
-
config={{ ...config, typeId: DashboardPanelType.Numeric }}
|
|
22
|
-
state={PanelState.Loaded}
|
|
23
|
-
numericValue={1247}
|
|
24
|
-
/>
|
|
25
|
-
|
|
26
|
-
// Para MatrixRisk, use matrixRule + matrixRisks:
|
|
27
|
-
<DashboardPanelRenderer
|
|
28
|
-
config={{ ...config, typeId: DashboardPanelType.RiskMatrix }}
|
|
29
|
-
state={PanelState.Loaded}
|
|
30
|
-
matrixRule={rule}
|
|
31
|
-
matrixRisks={risks}
|
|
32
|
-
/>`,examples:[{title:"Mapa de Tipos → Componentes",description:"O renderer usa um mapa interno CARTESIAN_VARIANT_MAP para os 6 tipos cartesianos e um switch para os demais. Props de dados são injetadas conforme o tipo.",preview:e.jsx(r,{}),code:`// Internamente:
|
|
33
|
-
const CARTESIAN_VARIANT_MAP = {
|
|
34
|
-
[DashboardPanelType.Bar]: 'bar',
|
|
35
|
-
[DashboardPanelType.Column]: 'column',
|
|
36
|
-
[DashboardPanelType.StackedColumn]: 'stacked-column',
|
|
37
|
-
[DashboardPanelType.Area]: 'area',
|
|
38
|
-
[DashboardPanelType.Line]: 'line',
|
|
39
|
-
[DashboardPanelType.EvolutionLine]: 'evolution-line',
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// Se o typeId está no mapa → CartesianPanel com a variant
|
|
43
|
-
// Senão → switch específico (Numeric, Text, List, Pie, etc.)`},{title:"Uso com DashboardView",description:"No DashboardView, cada painel é renderizado internamente pelo DashboardPanelRenderer. Os dados são fornecidos via getPanelData callback.",preview:e.jsxs("div",{className:"p-3 rounded-lg border border-border bg-card text-xs space-y-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold text-foreground",children:"DashboardView"}),e.jsx("span",{className:"text-muted-foreground",children:"→"}),e.jsx("span",{className:"font-semibold text-foreground",children:"DashboardGrid"}),e.jsx("span",{className:"text-muted-foreground",children:"→"}),e.jsx("span",{className:"font-semibold text-primary",children:"DashboardPanelRenderer"})]}),e.jsx("p",{className:"text-muted-foreground",children:"Cada panelId é resolvido via getPanelData(panelId) → { state, data, numericValue, ... }"})]}),code:`<DashboardView
|
|
44
|
-
dashboard={dashboard}
|
|
45
|
-
panels={panels}
|
|
46
|
-
getPanelData={(panelId) => {
|
|
47
|
-
const panel = panels.find(p => p.id === panelId);
|
|
48
|
-
return {
|
|
49
|
-
state: panelStates[panelId] ?? PanelState.Loading,
|
|
50
|
-
data: panelResults[panelId],
|
|
51
|
-
numericValue: panel?.typeId === DashboardPanelType.Numeric ? numericValues[panelId] : undefined,
|
|
52
|
-
cartesianData: chartData[panelId],
|
|
53
|
-
cartesianSeries: chartSeries[panelId],
|
|
54
|
-
burndownData: burndownData[panelId],
|
|
55
|
-
performanceData: performanceData[panelId],
|
|
56
|
-
matrixRule: matrixRules[panelId],
|
|
57
|
-
matrixRisks: matrixRisks[panelId],
|
|
58
|
-
};
|
|
59
|
-
}}
|
|
60
|
-
/>`}],props:[{name:"config",type:"PanelConfig",description:"Configuração do painel — inclui typeId que determina qual componente renderizar."},{name:"state",type:"PanelState",description:"Estado atual do painel (Loading, Loaded, Error, NoData, Unavailable)."},{name:"data",type:"PanelResult[]",description:"Dados genéricos para Pie, Pareto, List."},{name:"numericValue",type:"number | string | null",description:"Valor para NumericPanel."},{name:"cartesianData",type:"Record<string, unknown>[]",description:"Dados para os 6 tipos cartesianos."},{name:"cartesianSeries",type:"CartesianSeries[]",description:"Definições de série para cartesianos."},{name:"listColumns",type:"ListPanelColumn[]",description:"Colunas para ListPanel."},{name:"burndownData",type:"BurndownDataPoint[]",description:"Dados para BurndownPanel."},{name:"performanceData",type:"PerformanceDataPoint[]",description:"Dados para PerformancePanel."},{name:"matrixRule",type:"MatrixRule",description:"Regra da matriz para MatrixRiskPanel."},{name:"matrixRisks",type:"MatrixRisk[]",description:"Riscos para MatrixRiskPanel."},{name:"onPanelClick",type:"(data) => void",description:"Callback genérico de clique."}]})}export{p as DashboardPanelRendererDoc};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import{j as e,gB as n,gx as o,gw as a,gC as i,gD as c,gE as m,gF as u}from"./index-DkiftrvI.js";import{C as g}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const t=(r,s,d)=>({id:r,title:s,typeId:d,queryId:"q1",queryContextId:"",queryTitle:"",querySelectedColumns:"",field:"status",fieldType:"string",aggregationType:i.Count,paletteId:u.Default,hexColors:[]});function l(){return e.jsxs("div",{className:"grid grid-cols-3 gap-3 w-full",children:[e.jsx("div",{className:"border border-border rounded-lg bg-card h-32",children:e.jsx(n,{config:t("n1","Total de Ocorrências",a.Numeric),state:o.Loaded,value:1247})}),e.jsx("div",{className:"border border-border rounded-lg bg-card h-32",children:e.jsx(n,{config:{...t("n2","Custo Total",a.Numeric),aggregationType:i.Sum,field:"totalcost"},state:o.Loaded,value:89450.75})}),e.jsx("div",{className:"border border-border rounded-lg bg-card h-32",children:e.jsx(n,{config:t("n3","Carregando...",a.Numeric),state:o.Loading})})]})}function p(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-40 w-full",children:e.jsx(c,{config:{...t("t1","Informações",a.Text),textTypeString:"<h3>Nota Importante</h3><p>Este painel suporta <strong>HTML rico</strong> com formatação, links e listas.</p><ul><li>Item 1</li><li>Item 2</li></ul>"},state:o.Loaded})})}function f(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-48 w-full",children:e.jsx(m,{config:t("l1","Últimas Ocorrências",a.List),state:o.Loaded,data:[{code:"OC-001",title:"Não conformidade produção",status:"Aberto",date:"15/03/2025"},{code:"OC-002",title:"Reclamação do cliente",status:"Em andamento",date:"18/03/2025"},{code:"OC-003",title:"Desvio de processo",status:"Concluído",date:"20/03/2025"}],columns:[{columnName:"code",columnLabel:"Código",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Código"},{columnName:"title",columnLabel:"Título",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Título"},{columnName:"status",columnLabel:"Status",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Status"},{columnName:"date",columnLabel:"Data",columnType:"string",columnFormat:null,isCustomColumn:!1,header:"Data"}]})})}function T(){return e.jsx(g,{title:"Painéis Básicos",description:"Os três painéis não-gráficos do módulo de dashboards: NumericPanel (valor numérico agregado com formatação de moeda), TextPanel (HTML rico via dangerouslySetInnerHTML) e ListPanel (tabela de dados com colunas dinâmicas e links de navegação).",component:e.jsx(l,{}),usage:`import { NumericPanel, TextPanel, ListPanel, PanelState } from 'forlogic-core';
|
|
2
|
-
|
|
3
|
-
// Painel Numérico
|
|
4
|
-
<NumericPanel
|
|
5
|
-
config={panelConfig}
|
|
6
|
-
state={PanelState.Loaded}
|
|
7
|
-
value={1247}
|
|
8
|
-
label="Contagem" // override do label automático
|
|
9
|
-
onClick={() => openPopover()}
|
|
10
|
-
/>
|
|
11
|
-
|
|
12
|
-
// Painel de Texto
|
|
13
|
-
<TextPanel
|
|
14
|
-
config={{ ...panelConfig, textTypeString: '<h3>Título</h3><p>Conteúdo</p>' }}
|
|
15
|
-
state={PanelState.Loaded}
|
|
16
|
-
/>
|
|
17
|
-
|
|
18
|
-
// Painel de Lista
|
|
19
|
-
<ListPanel
|
|
20
|
-
config={panelConfig}
|
|
21
|
-
state={PanelState.Loaded}
|
|
22
|
-
data={rows}
|
|
23
|
-
columns={columnDefinitions}
|
|
24
|
-
enableRowLinks={true}
|
|
25
|
-
onRowClick={(row) => openDetail(row)}
|
|
26
|
-
/>`,examples:[{title:"NumericPanel",description:"Exibe um valor numérico centralizado com label de agregação automático (Contagem, Soma, Média, etc.). Detecta automaticamente campos de moeda e formata com R$. Suporta clique para popover.",preview:e.jsx(l,{}),code:`// Contagem simples
|
|
27
|
-
<NumericPanel config={config} state={PanelState.Loaded} value={1247} />
|
|
28
|
-
|
|
29
|
-
// Com formatação de moeda (detectado pelo campo 'totalcost')
|
|
30
|
-
<NumericPanel
|
|
31
|
-
config={{ ...config, field: 'totalcost', aggregationType: AggregationType.Sum }}
|
|
32
|
-
state={PanelState.Loaded}
|
|
33
|
-
value={89450.75}
|
|
34
|
-
/>
|
|
35
|
-
// Exibe: R$ 89.450,75
|
|
36
|
-
|
|
37
|
-
// Com clique
|
|
38
|
-
<NumericPanel config={config} state={PanelState.Loaded} value={42} onClick={() => showDetails()} />`},{title:"TextPanel",description:"Renderiza HTML rico configurado no campo textTypeString do painel. Usa classes prose do Tailwind Typography para estilização automática.",preview:e.jsx(p,{}),code:`<TextPanel
|
|
39
|
-
config={{
|
|
40
|
-
...config,
|
|
41
|
-
textTypeString: '<h3>Informações</h3><p>Texto <strong>formatado</strong></p>'
|
|
42
|
-
}}
|
|
43
|
-
state={PanelState.Loaded}
|
|
44
|
-
// Ou via prop direta:
|
|
45
|
-
htmlContent="<p>Conteúdo alternativo</p>"
|
|
46
|
-
/>`},{title:"ListPanel",description:"Tabela de dados com colunas dinâmicas baseadas em SelectedColumn. Suporta links automáticos por linha (getLinkFromRow), colunas com render customizado e formatação automática de números e datas.",preview:e.jsx(f,{}),code:`<ListPanel
|
|
47
|
-
config={config}
|
|
48
|
-
state={PanelState.Loaded}
|
|
49
|
-
data={[
|
|
50
|
-
{ code: 'OC-001', title: 'Não conformidade', status: 'Aberto' },
|
|
51
|
-
{ code: 'OC-002', title: 'Reclamação', status: 'Em andamento' },
|
|
52
|
-
]}
|
|
53
|
-
columns={[
|
|
54
|
-
{ columnName: 'code', columnLabel: 'Código', columnType: 'string', ... },
|
|
55
|
-
{ columnName: 'title', columnLabel: 'Título', columnType: 'string', ... },
|
|
56
|
-
{ columnName: 'status', columnLabel: 'Status', columnType: 'string',
|
|
57
|
-
render: (value) => <Badge>{value}</Badge> // render customizado
|
|
58
|
-
},
|
|
59
|
-
]}
|
|
60
|
-
enableRowLinks={true}
|
|
61
|
-
onRowClick={(row) => openDetail(row)}
|
|
62
|
-
/>`}],props:[{name:"NumericPanel.value",type:"number | string | null",description:"Valor numérico a exibir. Formatado automaticamente como moeda quando o campo é de custo."},{name:"NumericPanel.label",type:"string",description:"Override do label de agregação. Sem ele, usa o mapa interno (Count→Contagem, Sum→Soma, etc.)."},{name:"NumericPanel.onClick",type:"() => void",description:"Torna o valor clicável (cursor pointer + hover)."},{name:"TextPanel.htmlContent",type:"string",description:"HTML alternativo. Sem ele, usa config.textTypeString."},{name:"ListPanel.data",type:"Record<string, unknown>[]",description:"Array de objetos — cada objeto é uma linha da tabela."},{name:"ListPanel.columns",type:"ListPanelColumn[]",description:"Definições de coluna (extends SelectedColumn + render opcional)."},{name:"ListPanel.enableRowLinks",type:"boolean",description:"Auto-navega para link da linha via getLinkFromRow. Default: true."},{name:"ListPanel.onRowClick",type:"(row) => void",description:"Override do comportamento de clique na linha."}]})}export{T as DashboardPanelsBasicDoc};
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import{j as e,gG as a,gx as r,gw as t,gF as l,gC as c}from"./index-DkiftrvI.js";import{C as u}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const o=(d,n)=>({id:`cp-${n}`,title:d,typeId:n,queryId:"q1",queryContextId:"",queryTitle:"",querySelectedColumns:"",field:"status",fieldType:"string",aggregationType:c.Count,paletteId:l.Default,hexColors:["#4e79a7","#f28e2b","#e15759","#76b7b2","#59a14f"]}),i=[{key:"Jan",value:42,series2:28},{key:"Fev",value:58,series2:35},{key:"Mar",value:35,series2:42},{key:"Abr",value:71,series2:50},{key:"Mai",value:49,series2:38},{key:"Jun",value:63,series2:55}];function s(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Ocorrências por Mês",t.Column),variant:"column",state:r.Loaded,data:i,series:[{dataKey:"value",name:"Ocorrências"}]})})}function m(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Top Causas",t.Bar),variant:"bar",state:r.Loaded,data:[{key:"Falha no processo",value:45},{key:"Erro humano",value:32},{key:"Material defeituoso",value:28},{key:"Equipamento",value:15}],series:[{dataKey:"value",name:"Quantidade"}]})})}function p(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Comparativo Mensal",t.Column),variant:"column",state:r.Loaded,data:i,series:[{dataKey:"value",name:"2024",color:"#4e79a7"},{dataKey:"series2",name:"2025",color:"#f28e2b"}]})})}function v(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(a,{config:o("Ocorrências Empilhadas",t.StackedColumn),variant:"stacked-column",state:r.Loaded,data:i,series:[{dataKey:"value",name:"Abertas",stackId:"stack"},{dataKey:"series2",name:"Fechadas",stackId:"stack"}]})})}function g(){return e.jsxs("div",{className:"grid grid-cols-2 gap-3 w-full",children:[e.jsx("div",{className:"border border-border rounded-lg bg-card h-52",children:e.jsx(a,{config:o("Tendência (Área)",t.Area),variant:"area",state:r.Loaded,data:i,series:[{dataKey:"value",name:"Valor"}]})}),e.jsx("div",{className:"border border-border rounded-lg bg-card h-52",children:e.jsx(a,{config:o("Evolução (Linha)",t.Line),variant:"line",state:r.Loaded,data:i,series:[{dataKey:"value",name:"2024"},{dataKey:"series2",name:"2025"}]})})]})}function b(){return e.jsx(u,{title:"Painéis Cartesianos",description:"CartesianPanel é um componente unificado que renderiza 6 variantes de gráfico (Bar, Column, StackedColumn, Area, Line, EvolutionLine) via a prop variant. Todos usam Recharts internamente e compartilham a mesma API de dados.",component:e.jsx(s,{}),usage:`import { CartesianPanel, PanelState, type CartesianSeries } from 'forlogic-core';
|
|
2
|
-
|
|
3
|
-
// Uso básico — série única
|
|
4
|
-
<CartesianPanel
|
|
5
|
-
config={panelConfig}
|
|
6
|
-
variant="column" // 'bar' | 'column' | 'stacked-column' | 'area' | 'line' | 'evolution-line'
|
|
7
|
-
state={PanelState.Loaded}
|
|
8
|
-
data={[
|
|
9
|
-
{ key: 'Jan', value: 42 },
|
|
10
|
-
{ key: 'Fev', value: 58 },
|
|
11
|
-
]}
|
|
12
|
-
/>
|
|
13
|
-
|
|
14
|
-
// Múltiplas séries
|
|
15
|
-
<CartesianPanel
|
|
16
|
-
config={panelConfig}
|
|
17
|
-
variant="column"
|
|
18
|
-
state={PanelState.Loaded}
|
|
19
|
-
data={data}
|
|
20
|
-
series={[
|
|
21
|
-
{ dataKey: 'opened', name: 'Abertas', color: '#4e79a7' },
|
|
22
|
-
{ dataKey: 'closed', name: 'Fechadas', color: '#59a14f' },
|
|
23
|
-
]}
|
|
24
|
-
categoryKey="month" // chave do eixo X (default: 'key')
|
|
25
|
-
yAxisFormat="R$ {value}" // formato do eixo Y
|
|
26
|
-
onPointClick={(data, index) => openDetail(data)}
|
|
27
|
-
/>`,examples:[{title:"Column (Colunas Verticais)",description:"Variante padrão para visualizar dados categóricos. Barras verticais com tooltip e labels rotacionados.",preview:e.jsx(s,{}),code:`<CartesianPanel
|
|
28
|
-
config={config}
|
|
29
|
-
variant="column"
|
|
30
|
-
state={PanelState.Loaded}
|
|
31
|
-
data={[
|
|
32
|
-
{ key: 'Jan', value: 42 },
|
|
33
|
-
{ key: 'Fev', value: 58 },
|
|
34
|
-
{ key: 'Mar', value: 35 },
|
|
35
|
-
]}
|
|
36
|
-
/>`},{title:"Bar (Barras Horizontais)",description:"Variante horizontal — ideal para labels longos (ex: nomes de causas). O eixo Y vira category e o X vira value.",preview:e.jsx(m,{}),code:`<CartesianPanel
|
|
37
|
-
config={config}
|
|
38
|
-
variant="bar"
|
|
39
|
-
state={PanelState.Loaded}
|
|
40
|
-
data={[
|
|
41
|
-
{ key: 'Falha no processo', value: 45 },
|
|
42
|
-
{ key: 'Erro humano', value: 32 },
|
|
43
|
-
]}
|
|
44
|
-
/>`},{title:"Múltiplas Séries",description:"Defina múltiplas séries via prop series. Cada série tem dataKey, name e color opcional. A legenda aparece automaticamente.",preview:e.jsx(p,{}),code:`<CartesianPanel
|
|
45
|
-
config={config}
|
|
46
|
-
variant="column"
|
|
47
|
-
state={PanelState.Loaded}
|
|
48
|
-
data={data}
|
|
49
|
-
series={[
|
|
50
|
-
{ dataKey: 'value', name: '2024', color: '#4e79a7' },
|
|
51
|
-
{ dataKey: 'series2', name: '2025', color: '#f28e2b' },
|
|
52
|
-
]}
|
|
53
|
-
/>`},{title:"Stacked Column (Colunas Empilhadas)",description:"Barras empilhadas usando stackId. Útil para comparar composições entre categorias.",preview:e.jsx(v,{}),code:`<CartesianPanel
|
|
54
|
-
config={config}
|
|
55
|
-
variant="stacked-column"
|
|
56
|
-
state={PanelState.Loaded}
|
|
57
|
-
data={data}
|
|
58
|
-
series={[
|
|
59
|
-
{ dataKey: 'value', name: 'Abertas', stackId: 'stack' },
|
|
60
|
-
{ dataKey: 'series2', name: 'Fechadas', stackId: 'stack' },
|
|
61
|
-
]}
|
|
62
|
-
/>`},{title:"Area & Line",description:"Variantes Area e Line para séries temporais. Area tem preenchimento com opacidade; Line tem dots nos pontos.",preview:e.jsx(g,{}),code:`// Área
|
|
63
|
-
<CartesianPanel config={config} variant="area" state={PanelState.Loaded} data={data} />
|
|
64
|
-
|
|
65
|
-
// Linha com múltiplas séries
|
|
66
|
-
<CartesianPanel
|
|
67
|
-
config={config}
|
|
68
|
-
variant="line"
|
|
69
|
-
state={PanelState.Loaded}
|
|
70
|
-
data={data}
|
|
71
|
-
series={[
|
|
72
|
-
{ dataKey: 'value', name: '2024' },
|
|
73
|
-
{ dataKey: 'series2', name: '2025' },
|
|
74
|
-
]}
|
|
75
|
-
/>`}],props:[{name:"variant",type:"CartesianVariant",description:"'bar' | 'column' | 'stacked-column' | 'area' | 'line' | 'evolution-line'"},{name:"data",type:"Record<string, unknown>[]",description:'Array de data points. Cada objeto precisa ter a chave do categoryKey (default: "key") e as chaves das séries.'},{name:"series",type:"CartesianSeries[]",description:'Definições de série: { dataKey, name?, color?, stackId? }. Se omitido, usa { dataKey: "value" }.'},{name:"categoryKey",type:"string",description:'Chave do eixo de categorias nos dados. Default: "key".'},{name:"colors",type:"string[]",description:"Override de paleta de cores. Sem ela, usa config.hexColors ou DEFAULT_COLORS."},{name:"yAxisFormat",type:"string",description:'Template do eixo Y (ex: "R$ {value}"). Substitui {value} pelo número formatado.'},{name:"onPointClick",type:"(data, index) => void",description:"Chamado ao clicar em uma barra/ponto."},{name:"onExport",type:"() => void",description:"Callback para exportação — aparece no menu do PanelHeader."}]})}export{b as DashboardPanelsCartesianDoc};
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import{j as e,gH as d,gx as a,gw as o,gI as c,gJ as l,gK as s,gL as p,gM as P,gF as m,gC as u}from"./index-DkiftrvI.js";import{C as f}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const n=(i,r)=>({id:`sp-${r}`,title:i,typeId:r,queryId:"q1",queryContextId:"",queryTitle:"",querySelectedColumns:"",field:"status",fieldType:"string",aggregationType:u.Count,paletteId:m.Default,hexColors:["#4e79a7","#f28e2b","#e15759","#76b7b2","#59a14f","#edc948"]}),x=[{key:"Conforme",value:120},{key:"Não Conforme",value:45},{key:"Em Análise",value:30},{key:"Pendente",value:15}],g=[{key:"Falha no processo",value:45},{key:"Erro humano",value:32},{key:"Material",value:28},{key:"Equipamento",value:15},{key:"Ambiente",value:8},{key:"Outros",value:5}];function t(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(d,{config:n("Status das Ocorrências",o.Pie),state:a.Loaded,data:x})})}function k(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(c,{config:n("Causas Raiz — Pareto",o.Pareto),state:a.Loaded,data:g})})}function y(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(l,{config:n("Burndown — Plano de Ação",o.Burndown),state:a.Loaded,data:[{date:"01/Jan",executedPercentage:0,plannedPercentage:0},{date:"15/Jan",executedPercentage:12,plannedPercentage:20},{date:"01/Fev",executedPercentage:28,plannedPercentage:40},{date:"15/Fev",executedPercentage:45,plannedPercentage:60},{date:"01/Mar",executedPercentage:65,plannedPercentage:80},{date:"15/Mar",executedPercentage:82,plannedPercentage:100}]})})}function b(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-72 w-full",children:e.jsx(s,{config:n("Performance — Projetos",o.PerformanceColumns),state:a.Loaded,data:[{name:"Projeto A",executedWork:85,plannedWork:90},{name:"Projeto B",executedWork:72,plannedWork:80},{name:"Projeto C",executedWork:95,plannedWork:70},{name:"Projeto D",executedWork:45,plannedWork:60}]})})}function v(){return e.jsx("div",{className:"border border-border rounded-lg bg-card h-64 w-full",children:e.jsx(p,{config:n("Matriz de Risco",o.RiskMatrix),state:a.Loaded,matrixViewType:P.Quantity,rule:{name_x:"Probabilidade",name_y:"Impacto",parametersX:[{name:"Baixa",position:1},{name:"Média",position:2},{name:"Alta",position:3}],parametersY:[{name:"Baixo",position:1},{name:"Médio",position:2},{name:"Alto",position:3}],colorMatrix:[["#4caf50","#ffeb3b","#ff9800"],["#ffeb3b","#ff9800","#f44336"],["#ff9800","#f44336","#b71c1c"]]},risks:[{code:"R-001",name:"Risco A",parameterXPosition:2,parameterYPosition:3},{code:"R-002",name:"Risco B",parameterXPosition:3,parameterYPosition:3},{code:"R-003",name:"Risco C",parameterXPosition:1,parameterYPosition:1},{code:"R-004",name:"Risco D",parameterXPosition:2,parameterYPosition:2}]})})}function j(){return e.jsx(f,{title:"Painéis Especiais",description:"Cinco painéis especializados: PiePanel (pizza com percentuais), ParetoPanel (barras + linha cumulativa), BurndownPanel (execução vs planejamento), PerformancePanel (barras comparativas) e MatrixRiskPanel (grid de criticidade com tooltips).",component:e.jsx(t,{}),usage:`import {
|
|
2
|
-
PiePanel, ParetoPanel, BurndownPanel,
|
|
3
|
-
PerformancePanel, MatrixRiskPanel,
|
|
4
|
-
PanelState, MatrixViewType,
|
|
5
|
-
} from 'forlogic-core';
|
|
6
|
-
|
|
7
|
-
// Pie
|
|
8
|
-
<PiePanel config={config} state={PanelState.Loaded} data={pieData} />
|
|
9
|
-
|
|
10
|
-
// Pareto
|
|
11
|
-
<ParetoPanel config={config} state={PanelState.Loaded} data={paretoData} />
|
|
12
|
-
|
|
13
|
-
// Burndown
|
|
14
|
-
<BurndownPanel config={config} state={PanelState.Loaded} data={burndownData} />
|
|
15
|
-
|
|
16
|
-
// Performance
|
|
17
|
-
<PerformancePanel config={config} state={PanelState.Loaded} data={performanceData} />
|
|
18
|
-
|
|
19
|
-
// Matrix Risk
|
|
20
|
-
<MatrixRiskPanel
|
|
21
|
-
config={config}
|
|
22
|
-
state={PanelState.Loaded}
|
|
23
|
-
rule={matrixRule}
|
|
24
|
-
risks={risks}
|
|
25
|
-
matrixViewType={MatrixViewType.Quantity}
|
|
26
|
-
/>`,examples:[{title:"PiePanel",description:"Gráfico de pizza com labels de percentual, tooltips com valor absoluto e percentual, e legenda. As cores vêm da paleta do config ou da prop colors.",preview:e.jsx(t,{}),code:`<PiePanel
|
|
27
|
-
config={config}
|
|
28
|
-
state={PanelState.Loaded}
|
|
29
|
-
data={[
|
|
30
|
-
{ key: 'Conforme', value: 120 },
|
|
31
|
-
{ key: 'Não Conforme', value: 45 },
|
|
32
|
-
{ key: 'Em Análise', value: 30 },
|
|
33
|
-
]}
|
|
34
|
-
onSliceClick={(entry, index) => filterByStatus(entry.key)}
|
|
35
|
-
/>`},{title:"ParetoPanel",description:"Gráfico de Pareto com barras decrescentes (eixo esquerdo) e linha cumulativa de percentual (eixo direito, 0–100%). Os dados são automaticamente ordenados por valor decrescente.",preview:e.jsx(k,{}),code:`<ParetoPanel
|
|
36
|
-
config={config}
|
|
37
|
-
state={PanelState.Loaded}
|
|
38
|
-
data={[
|
|
39
|
-
{ key: 'Falha no processo', value: 45 },
|
|
40
|
-
{ key: 'Erro humano', value: 32 },
|
|
41
|
-
{ key: 'Material', value: 28 },
|
|
42
|
-
]}
|
|
43
|
-
barColor="#4e79a7"
|
|
44
|
-
lineColor="#e31a1c"
|
|
45
|
-
/>`},{title:"BurndownPanel",description:"Gráfico de área com duas séries: Trabalho executado e Trabalho planejado. Eixo Y em percentual (0–100%). Ideal para acompanhar planos de ação.",preview:e.jsx(y,{}),code:`<BurndownPanel
|
|
46
|
-
config={config}
|
|
47
|
-
state={PanelState.Loaded}
|
|
48
|
-
data={[
|
|
49
|
-
{ date: '01/Jan', executedPercentage: 0, plannedPercentage: 0 },
|
|
50
|
-
{ date: '15/Jan', executedPercentage: 12, plannedPercentage: 20 },
|
|
51
|
-
{ date: '01/Fev', executedPercentage: 28, plannedPercentage: 40 },
|
|
52
|
-
]}
|
|
53
|
-
executedLabel="Trabalho executado"
|
|
54
|
-
plannedLabel="Trabalho planejado"
|
|
55
|
-
/>`},{title:"PerformancePanel",description:"Barras lado a lado comparando Execução vs Planejamento. Eixo Y em percentual. Clique em barras para detalhar.",preview:e.jsx(b,{}),code:`<PerformancePanel
|
|
56
|
-
config={config}
|
|
57
|
-
state={PanelState.Loaded}
|
|
58
|
-
data={[
|
|
59
|
-
{ name: 'Projeto A', executedWork: 85, plannedWork: 90 },
|
|
60
|
-
{ name: 'Projeto B', executedWork: 72, plannedWork: 80 },
|
|
61
|
-
]}
|
|
62
|
-
onPointClick={(entry, index) => openProject(entry.name)}
|
|
63
|
-
/>`},{title:"MatrixRiskPanel",description:"Grid de criticidade com dois modos: Quantity (conta riscos por célula) e AllRisksList (mostra código de cada risco com tooltip detalhado). A cor de cada célula vem de colorMatrix.",preview:e.jsx(v,{}),code:`<MatrixRiskPanel
|
|
64
|
-
config={config}
|
|
65
|
-
state={PanelState.Loaded}
|
|
66
|
-
matrixViewType={MatrixViewType.Quantity}
|
|
67
|
-
rule={{
|
|
68
|
-
name_x: 'Probabilidade',
|
|
69
|
-
name_y: 'Impacto',
|
|
70
|
-
parametersX: [{ name: 'Baixa', position: 1 }, { name: 'Média', position: 2 }, { name: 'Alta', position: 3 }],
|
|
71
|
-
parametersY: [{ name: 'Baixo', position: 1 }, { name: 'Médio', position: 2 }, { name: 'Alto', position: 3 }],
|
|
72
|
-
colorMatrix: [
|
|
73
|
-
['#4caf50', '#ffeb3b', '#ff9800'],
|
|
74
|
-
['#ffeb3b', '#ff9800', '#f44336'],
|
|
75
|
-
['#ff9800', '#f44336', '#b71c1c'],
|
|
76
|
-
],
|
|
77
|
-
}}
|
|
78
|
-
risks={[
|
|
79
|
-
{ code: 'R-001', name: 'Risco A', parameterXPosition: 2, parameterYPosition: 3 },
|
|
80
|
-
]}
|
|
81
|
-
onCellClick={(x, y, risks) => showRisks(risks)}
|
|
82
|
-
onRiskClick={(risk) => openRisk(risk.code)}
|
|
83
|
-
/>`}],props:[{name:"PiePanel.data",type:"PanelResult[]",description:"Cada item precisa de key (label) e value (número). O percentual é calculado automaticamente."},{name:"PiePanel.onSliceClick",type:"(entry, index) => void",description:"Chamado ao clicar em uma fatia."},{name:"ParetoPanel.barColor / lineColor",type:"string",description:"Override de cores. Default: primeira cor da paleta / #e31a1c."},{name:"BurndownPanel.data",type:"BurndownDataPoint[]",description:"{ date, executedPercentage, plannedPercentage }."},{name:"PerformancePanel.data",type:"PerformanceDataPoint[]",description:"{ name, executedWork, plannedWork }."},{name:"MatrixRiskPanel.rule",type:"MatrixRule",description:"Define eixos (name_x, name_y), parâmetros e colorMatrix."},{name:"MatrixRiskPanel.risks",type:"MatrixRisk[]",description:"Riscos posicionados na matriz por parameterXPosition/parameterYPosition."},{name:"MatrixRiskPanel.matrixViewType",type:"MatrixViewType",description:"Quantity (conta riscos) ou AllRisksList (mostra códigos)."}]})}export{j as DashboardPanelsSpecialDoc};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DkiftrvI.js";import{C as d}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function o(){return e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden bg-card w-full",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5 border-b border-border",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Indicadores de Qualidade"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"João Silva"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-muted-foreground",title:"Atualizar",children:"🔄"}),e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-muted-foreground",title:"Fullscreen",children:"⛶"}),e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-muted-foreground",title:"Compartilhar",children:"👥"}),e.jsx("span",{className:"p-1.5 rounded hover:bg-accent cursor-pointer text-yellow-400",title:"Favorito",children:"★"})]})]}),e.jsx("div",{className:"p-3 bg-muted/30",style:{display:"grid",gridTemplateColumns:"repeat(8, 1fr)",gridTemplateRows:"repeat(2, 60px)",gap:"6px"},children:[{id:"p1",col:0,sizeX:2,sizeY:1,row:0},{id:"p2",col:2,sizeX:2,sizeY:1,row:0},{id:"p3",col:4,sizeX:4,sizeY:1,row:0},{id:"p4",col:0,sizeX:4,sizeY:1,row:1},{id:"p5",col:4,sizeX:4,sizeY:1,row:1}].map(a=>e.jsxs("div",{className:"rounded border border-border bg-card flex items-center justify-center text-[10px] font-mono text-muted-foreground",style:{gridColumn:`${a.col+1} / span ${a.sizeX}`,gridRow:`${a.row+1} / span ${a.sizeY}`},children:["Painel ",a.id]},a.id))})]})}function s(){return e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden bg-card w-full",children:[e.jsx("div",{className:"flex items-center justify-between px-4 py-2 border-b border-border",children:e.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Dashboard Carousel"})}),e.jsx("div",{className:"flex items-center gap-1 px-4 py-1.5 border-b border-border",children:["Dashboard 1","Dashboard 2","Dashboard 3"].map((a,r)=>e.jsx("span",{className:`px-3 py-1 text-xs rounded-md ${r===0?"bg-primary text-primary-foreground":"text-muted-foreground"}`,children:a},a))}),e.jsx("div",{className:"p-3 bg-muted/30 flex items-center justify-center h-20 text-xs text-muted-foreground",children:"Painéis da página ativa"})]})}function l(){return e.jsx(d,{title:"DashboardView",description:"Visualizador completo de dashboard com toolbar (refresh com cooldown, fullscreen, compartilhar, favoritar), tabs de páginas para modo carousel e grid de painéis com drag-and-drop via DashboardGrid.",component:e.jsx(o,{}),usage:`import { DashboardView, PanelState } from 'forlogic-core';
|
|
2
|
-
|
|
3
|
-
<DashboardView
|
|
4
|
-
dashboard={dashboard}
|
|
5
|
-
panels={panels}
|
|
6
|
-
pages={pages} // opcional — modo carousel
|
|
7
|
-
activePageId="p1" // página ativa
|
|
8
|
-
canEdit={true}
|
|
9
|
-
isFullscreen={false}
|
|
10
|
-
getPanelData={(panelId) => ({
|
|
11
|
-
state: PanelState.Loaded,
|
|
12
|
-
data: panelResults[panelId],
|
|
13
|
-
numericValue: numericValues[panelId],
|
|
14
|
-
cartesianData: chartData[panelId],
|
|
15
|
-
cartesianSeries: chartSeries[panelId],
|
|
16
|
-
})}
|
|
17
|
-
onRefresh={() => refetch()}
|
|
18
|
-
onToggleFullscreen={() => setFullscreen(f => !f)}
|
|
19
|
-
onToggleFavorite={() => toggleFav(dashboard.id)}
|
|
20
|
-
onEdit={() => navigate(\`/edit/\${dashboard.id}\`)}
|
|
21
|
-
onShare={() => openShareDialog()}
|
|
22
|
-
onAddPanel={() => openPanelForm()}
|
|
23
|
-
onEditPanel={(id) => openPanelForm(id)}
|
|
24
|
-
onRemovePanel={(id) => removePanel(id)}
|
|
25
|
-
onLayoutChange={(panels) => saveLayout(panels)}
|
|
26
|
-
onPageChange={(pageId) => setActivePage(pageId)}
|
|
27
|
-
/>`,examples:[{title:"Toolbar com Grid",description:"A toolbar inclui título, nome do responsável, botões de refresh (com cooldown de 30s), fullscreen, compartilhar e favoritar. Abaixo, o grid de 8 colunas renderiza os painéis.",preview:e.jsx(o,{}),code:`<DashboardView
|
|
28
|
-
dashboard={{ title: 'Indicadores', responsibleName: 'João', isFavorite: true, ... }}
|
|
29
|
-
panels={panels}
|
|
30
|
-
canEdit={true}
|
|
31
|
-
onRefresh={() => refetch()}
|
|
32
|
-
onToggleFullscreen={() => toggleFullscreen()}
|
|
33
|
-
onToggleFavorite={() => toggleFav()}
|
|
34
|
-
onAddPanel={() => openNewPanelDialog()}
|
|
35
|
-
onLayoutChange={(updated) => saveLayout(updated)}
|
|
36
|
-
/>`},{title:"Modo Carousel",description:"Quando o dashboard usa DashboardViewType.Carousel, tabs de páginas aparecem abaixo da toolbar. A troca de página é feita via onPageChange.",preview:e.jsx(s,{}),code:`<DashboardView
|
|
37
|
-
dashboard={{ ...dashboard, idViewType: DashboardViewType.Carousel }}
|
|
38
|
-
panels={panels}
|
|
39
|
-
pages={[
|
|
40
|
-
{ id: 'p1', position: 1, name: 'Dashboard 1' },
|
|
41
|
-
{ id: 'p2', position: 2, name: 'Dashboard 2' },
|
|
42
|
-
]}
|
|
43
|
-
activePageId="p1"
|
|
44
|
-
onPageChange={(pageId) => setActivePageId(pageId)}
|
|
45
|
-
/>`}],props:[{name:"dashboard",type:"Dashboard",description:"Metadados do dashboard (título, responsável, favorito, tipo de visualização)."},{name:"panels",type:"DashboardPanel[]",description:"Painéis a renderizar no grid."},{name:"pages",type:"DashboardPage[]",description:"Páginas do carousel (opcional)."},{name:"activePageId",type:"string",description:"ID da página ativa no modo carousel."},{name:"canEdit",type:"boolean",description:"Habilita drag-and-drop, botão de adicionar painel e ações de edição."},{name:"isFullscreen",type:"boolean",description:"Renderiza em tela cheia com position fixed."},{name:"getPanelData",type:"(panelId) => PanelRendererProps",description:"Função que retorna dados específicos para cada painel (state, data, series, etc.)."},{name:"onRefresh",type:"() => void",description:"Refresh com cooldown de 30s integrado."},{name:"onLayoutChange",type:"(panels: GridPanelLayout[]) => void",description:"Chamado após drag-and-drop com o layout atualizado."},{name:"toolbarActions",type:"ReactNode",description:"Slot para ações extras na toolbar."}]})}export{l as DashboardViewDoc};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import{j as e,o as s,a as d,d as r,B as l}from"./index-DkiftrvI.js";import{C as n}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";function m({children:i,className:t}){return e.jsx("div",{className:s("space-y-4",t),children:i})}function c({children:i,onClick:t,className:o}){return e.jsx(d,{className:s("transition-colors",t&&"cursor-pointer hover:bg-muted/50",o),onClick:t,children:e.jsx(r,{className:"p-4",children:i})})}function u({label:i,value:t,className:o}){return e.jsxs("div",{className:s("flex justify-between items-center text-sm",o),children:[e.jsxs("span",{className:"text-muted-foreground font-medium",children:[i,":"]}),e.jsx("span",{className:"text-foreground",children:t})]})}const a={Root:m,Item:c,Field:u};function D(){return e.jsx(n,{title:"DataList",description:"Sistema de lista de dados com composição de componentes. Ideal para exibir informações estruturadas em formato de cards.",component:e.jsx("div",{className:"w-full max-w-md",children:e.jsxs(a.Root,{children:[e.jsxs(a.Item,{onClick:()=>alert("Clicou!"),children:[e.jsx(a.Field,{label:"Nome",value:"João Silva"}),e.jsx(a.Field,{label:"Email",value:"joao@exemplo.com"}),e.jsx(a.Field,{label:"Status",value:e.jsx(l,{variant:"success",children:"Ativo"})})]}),e.jsxs(a.Item,{children:[e.jsx(a.Field,{label:"Nome",value:"Maria Santos"}),e.jsx(a.Field,{label:"Email",value:"maria@exemplo.com"}),e.jsx(a.Field,{label:"Status",value:e.jsx(l,{variant:"secondary",children:"Pendente"})})]})]})}),usage:`import { DataList, Badge } from "forlogic-core"
|
|
2
|
-
|
|
3
|
-
<DataList.Root>
|
|
4
|
-
<DataList.Item onClick={() => console.log('clicked')}>
|
|
5
|
-
<DataList.Field label="Nome" value="João Silva" />
|
|
6
|
-
<DataList.Field label="Email" value="joao@exemplo.com" />
|
|
7
|
-
<DataList.Field label="Status" value={<Badge>Ativo</Badge>} />
|
|
8
|
-
</DataList.Item>
|
|
9
|
-
<DataList.Item>
|
|
10
|
-
<DataList.Field label="Nome" value="Maria Santos" />
|
|
11
|
-
<DataList.Field label="Email" value="maria@exemplo.com" />
|
|
12
|
-
</DataList.Item>
|
|
13
|
-
</DataList.Root>`,props:[{name:"DataList.Root",type:"ReactNode",default:"-",description:"Container principal com espaçamento vertical."},{name:"DataList.Item",type:"ReactNode",default:"-",description:"Item individual renderizado como Card."},{name:"DataList.Item.onClick",type:"() => void",default:"-",description:"Handler de clique (adiciona hover state)."},{name:"DataList.Field",type:"{ label, value }",default:"-",description:"Par label/value formatado horizontalmente."},{name:"DataList.Field.value",type:"ReactNode",default:"-",description:"Valor pode ser texto ou componentes (Badge, etc.)."}],accessibility:["Items clicáveis tem cursor pointer","Hover state visual para feedback","Estrutura semântica com Cards"],notes:["💡 Use para listas de dados estruturados","💡 Field.value aceita ReactNode - use Badge, Button, etc.","💡 onClick em Item adiciona hover state automaticamente"]})}export{D as DataListDoc};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as a,j as e,B as r}from"./index-DkiftrvI.js";function d({onNavigate:i}){const l=a.reduce((s,t)=>s+t.items.length,0);return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-4xl font-bold tracking-tight",children:"Design System"}),e.jsxs("p",{className:"text-xl text-muted-foreground mt-2",children:["Explore todos os ",l," componentes organizados em ",a.length," categorias"]})]}),e.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-3",children:a.map(s=>{const t=s.icon;return e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-foreground",children:[e.jsx(t,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"font-semibold text-base",children:s.title})]}),e.jsx(r,{variant:"secondary",className:"text-xs",children:s.items.length})]}),e.jsx("div",{className:"space-y-0.5",children:s.items.map(n=>e.jsx("button",{onClick:()=>i(n.id),className:"block w-full text-left px-2 py-1.5 text-sm text-primary hover:text-primary/80 hover:bg-accent rounded-md transition-colors",children:n.label},n.id))})]},s.id)})})]})}export{d as DesignSystemHome};
|