forlogic-core 2.0.4 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.note/memory/features/crud-defaults-batteries-included.md +1 -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,175 +0,0 @@
|
|
|
1
|
-
import{j as e,r as a,ak as s,al as t,x as i,an as d,eW as u,aq as n,fu as l,e_ as r,fv as S,fw as m,f8 as g,bk as M,ao as o,aJ as h,U as v,y as I,fx as w,ew as f,S as N,ab as k,eX as B,eY as T,eZ as A,b0 as P,a3 as y,P as R,e2 as L}from"./index-DkiftrvI.js";import{C as E}from"./ComponentDocTemplate-CQbBhfvZ.js";import{D}from"./disabled-menu-item-C2YaMvSt.js";import{a as G,K as q,G as U,L as W,C as O}from"./life-buoy-ByXiPddz.js";import{U as V}from"./user-plus-BqwXwD-c.js";import{C as z}from"./circle-plus-CpIcep-O.js";import"./ExampleCard-DuLrb3t-.js";function J(){return e.jsxs(s,{children:[e.jsx(t,{asChild:!0,children:e.jsxs(i,{variant:"outline",children:["Abrir Menu",e.jsx(M,{className:"ml-2 h-4 w-4"})]})}),e.jsxs(d,{className:"w-56",children:[e.jsx(u,{children:"Minha Conta"}),e.jsx(n,{}),e.jsxs(w,{children:[e.jsxs(o,{children:[e.jsx(f,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Perfil"}),e.jsx(r,{children:"⇧⌘P"})]}),e.jsxs(o,{children:[e.jsx(G,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Cobrança"}),e.jsx(r,{children:"⌘B"})]}),e.jsxs(o,{children:[e.jsx(N,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Configurações"}),e.jsx(r,{children:"⌘S"})]}),e.jsxs(o,{children:[e.jsx(q,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Atalhos de Teclado"}),e.jsx(r,{children:"⌘K"})]})]}),e.jsx(n,{}),e.jsxs(w,{children:[e.jsxs(o,{children:[e.jsx(k,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Equipe"})]}),e.jsxs(B,{children:[e.jsxs(T,{children:[e.jsx(V,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Convidar Usuários"})]}),e.jsxs(A,{className:"w-48",children:[e.jsxs(o,{children:[e.jsx(P,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Email"})]}),e.jsxs(o,{children:[e.jsx(y,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Mensagem"})]}),e.jsx(n,{}),e.jsxs(o,{children:[e.jsx(z,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Mais..."})]})]})]}),e.jsxs(o,{children:[e.jsx(R,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Nova Equipe"}),e.jsx(r,{children:"⌘+T"})]})]}),e.jsx(n,{}),e.jsxs(o,{children:[e.jsx(U,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"GitHub"})]}),e.jsxs(o,{children:[e.jsx(W,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Suporte"})]}),e.jsxs(o,{disabled:!0,children:[e.jsx(O,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"API"})]}),e.jsx(n,{}),e.jsxs(o,{children:[e.jsx(L,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Sair"}),e.jsx(r,{children:"⇧⌘Q"})]})]})]})}function K(){const[p,c]=a.useState(!0),[x,j]=a.useState(!1),[C,b]=a.useState(!1);return e.jsxs(s,{children:[e.jsx(t,{asChild:!0,children:e.jsx(i,{variant:"outline",children:"Opções de Visualização"})}),e.jsxs(d,{className:"w-56",children:[e.jsx(u,{children:"Aparência"}),e.jsx(n,{}),e.jsxs(l,{checked:p,onCheckedChange:c,children:["Barra de Status",e.jsx(r,{children:"⌘⇧S"})]}),e.jsx(l,{checked:x,onCheckedChange:j,children:"Barra de Atividades"}),e.jsxs(l,{checked:C,onCheckedChange:b,children:["Painel",e.jsx(r,{children:"⌘J"})]})]})]})}function H(){const[p,c]=a.useState("bottom");return e.jsxs(s,{children:[e.jsx(t,{asChild:!0,children:e.jsx(i,{variant:"outline",children:"Posição do Painel"})}),e.jsxs(d,{className:"w-48",children:[e.jsx(u,{children:"Posição"}),e.jsx(n,{}),e.jsxs(S,{value:p,onValueChange:c,children:[e.jsx(m,{value:"top",children:"Superior"}),e.jsx(m,{value:"bottom",children:"Inferior"}),e.jsx(m,{value:"right",children:"Direita"})]})]})]})}function Q(){return e.jsx(g,{delayDuration:200,children:e.jsxs(s,{children:[e.jsx(t,{asChild:!0,children:e.jsxs(i,{variant:"outline",children:["Ações",e.jsx(M,{className:"ml-2 h-4 w-4"})]})}),e.jsxs(d,{className:"w-56",children:[e.jsx(u,{children:"Ações em Massa"}),e.jsx(n,{}),e.jsxs(o,{children:[e.jsx(h,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Exportar Todos"})]}),e.jsxs(D,{disabledReason:"Selecione ao menos um item para exportar",children:[e.jsx(h,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Exportar Selecionados"})]}),e.jsxs(o,{children:[e.jsx(v,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Importar"})]}),e.jsx(n,{}),e.jsxs(D,{disabledReason:"Você não possui permissão para exclusão em massa",children:[e.jsx(I,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Excluir em Massa"})]})]})]})})}const X=`import {
|
|
2
|
-
DropdownMenu,
|
|
3
|
-
DropdownMenuContent,
|
|
4
|
-
DropdownMenuItem,
|
|
5
|
-
DropdownMenuLabel,
|
|
6
|
-
DropdownMenuSeparator,
|
|
7
|
-
DropdownMenuTrigger,
|
|
8
|
-
DropdownMenuShortcut,
|
|
9
|
-
DropdownMenuGroup,
|
|
10
|
-
DropdownMenuSub,
|
|
11
|
-
DropdownMenuSubContent,
|
|
12
|
-
DropdownMenuSubTrigger,
|
|
13
|
-
Button
|
|
14
|
-
} from "forlogic-core"
|
|
15
|
-
import { User, Settings, LogOut, ChevronDown } from "lucide-react"
|
|
16
|
-
|
|
17
|
-
<DropdownMenu>
|
|
18
|
-
<DropdownMenuTrigger asChild>
|
|
19
|
-
<Button variant="outline">
|
|
20
|
-
Abrir Menu
|
|
21
|
-
<ChevronDown className="ml-2 h-4 w-4" />
|
|
22
|
-
</Button>
|
|
23
|
-
</DropdownMenuTrigger>
|
|
24
|
-
<DropdownMenuContent className="w-56">
|
|
25
|
-
<DropdownMenuLabel>Minha Conta</DropdownMenuLabel>
|
|
26
|
-
<DropdownMenuSeparator />
|
|
27
|
-
<DropdownMenuGroup>
|
|
28
|
-
<DropdownMenuItem>
|
|
29
|
-
<User className="mr-2 h-4 w-4" />
|
|
30
|
-
<span>Perfil</span>
|
|
31
|
-
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
|
|
32
|
-
</DropdownMenuItem>
|
|
33
|
-
<DropdownMenuItem>
|
|
34
|
-
<Settings className="mr-2 h-4 w-4" />
|
|
35
|
-
<span>Configurações</span>
|
|
36
|
-
</DropdownMenuItem>
|
|
37
|
-
</DropdownMenuGroup>
|
|
38
|
-
<DropdownMenuSeparator />
|
|
39
|
-
<DropdownMenuItem>
|
|
40
|
-
<LogOut className="mr-2 h-4 w-4" />
|
|
41
|
-
<span>Sair</span>
|
|
42
|
-
</DropdownMenuItem>
|
|
43
|
-
</DropdownMenuContent>
|
|
44
|
-
</DropdownMenu>`,Y=`import { useState } from "react"
|
|
45
|
-
import {
|
|
46
|
-
DropdownMenu,
|
|
47
|
-
DropdownMenuCheckboxItem,
|
|
48
|
-
DropdownMenuContent,
|
|
49
|
-
DropdownMenuLabel,
|
|
50
|
-
DropdownMenuSeparator,
|
|
51
|
-
DropdownMenuShortcut,
|
|
52
|
-
DropdownMenuTrigger,
|
|
53
|
-
Button
|
|
54
|
-
} from "forlogic-core"
|
|
55
|
-
|
|
56
|
-
function DropdownMenuWithCheckbox() {
|
|
57
|
-
const [showStatusBar, setShowStatusBar] = useState(true)
|
|
58
|
-
const [showActivityBar, setShowActivityBar] = useState(false)
|
|
59
|
-
const [showPanel, setShowPanel] = useState(false)
|
|
60
|
-
|
|
61
|
-
return (
|
|
62
|
-
<DropdownMenu>
|
|
63
|
-
<DropdownMenuTrigger asChild>
|
|
64
|
-
<Button variant="outline">Opções de Visualização</Button>
|
|
65
|
-
</DropdownMenuTrigger>
|
|
66
|
-
<DropdownMenuContent className="w-56">
|
|
67
|
-
<DropdownMenuLabel>Aparência</DropdownMenuLabel>
|
|
68
|
-
<DropdownMenuSeparator />
|
|
69
|
-
<DropdownMenuCheckboxItem
|
|
70
|
-
checked={showStatusBar}
|
|
71
|
-
onCheckedChange={setShowStatusBar}
|
|
72
|
-
>
|
|
73
|
-
Barra de Status
|
|
74
|
-
<DropdownMenuShortcut>⌘⇧S</DropdownMenuShortcut>
|
|
75
|
-
</DropdownMenuCheckboxItem>
|
|
76
|
-
<DropdownMenuCheckboxItem
|
|
77
|
-
checked={showActivityBar}
|
|
78
|
-
onCheckedChange={setShowActivityBar}
|
|
79
|
-
>
|
|
80
|
-
Barra de Atividades
|
|
81
|
-
</DropdownMenuCheckboxItem>
|
|
82
|
-
<DropdownMenuCheckboxItem
|
|
83
|
-
checked={showPanel}
|
|
84
|
-
onCheckedChange={setShowPanel}
|
|
85
|
-
>
|
|
86
|
-
Painel
|
|
87
|
-
<DropdownMenuShortcut>⌘J</DropdownMenuShortcut>
|
|
88
|
-
</DropdownMenuCheckboxItem>
|
|
89
|
-
</DropdownMenuContent>
|
|
90
|
-
</DropdownMenu>
|
|
91
|
-
)
|
|
92
|
-
}`,Z=`import { useState } from "react"
|
|
93
|
-
import {
|
|
94
|
-
DropdownMenu,
|
|
95
|
-
DropdownMenuContent,
|
|
96
|
-
DropdownMenuLabel,
|
|
97
|
-
DropdownMenuRadioGroup,
|
|
98
|
-
DropdownMenuRadioItem,
|
|
99
|
-
DropdownMenuSeparator,
|
|
100
|
-
DropdownMenuTrigger,
|
|
101
|
-
Button
|
|
102
|
-
} from "forlogic-core"
|
|
103
|
-
|
|
104
|
-
function DropdownMenuWithRadio() {
|
|
105
|
-
const [position, setPosition] = useState("bottom")
|
|
106
|
-
|
|
107
|
-
return (
|
|
108
|
-
<DropdownMenu>
|
|
109
|
-
<DropdownMenuTrigger asChild>
|
|
110
|
-
<Button variant="outline">Posição do Painel</Button>
|
|
111
|
-
</DropdownMenuTrigger>
|
|
112
|
-
<DropdownMenuContent className="w-48">
|
|
113
|
-
<DropdownMenuLabel>Posição</DropdownMenuLabel>
|
|
114
|
-
<DropdownMenuSeparator />
|
|
115
|
-
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
|
|
116
|
-
<DropdownMenuRadioItem value="top">Superior</DropdownMenuRadioItem>
|
|
117
|
-
<DropdownMenuRadioItem value="bottom">Inferior</DropdownMenuRadioItem>
|
|
118
|
-
<DropdownMenuRadioItem value="right">Direita</DropdownMenuRadioItem>
|
|
119
|
-
</DropdownMenuRadioGroup>
|
|
120
|
-
</DropdownMenuContent>
|
|
121
|
-
</DropdownMenu>
|
|
122
|
-
)
|
|
123
|
-
}`,_=`import {
|
|
124
|
-
DropdownMenu,
|
|
125
|
-
DropdownMenuContent,
|
|
126
|
-
DropdownMenuItem,
|
|
127
|
-
DropdownMenuLabel,
|
|
128
|
-
DropdownMenuSeparator,
|
|
129
|
-
DropdownMenuTrigger,
|
|
130
|
-
DisabledMenuItem,
|
|
131
|
-
TooltipProvider,
|
|
132
|
-
Button
|
|
133
|
-
} from "forlogic-core"
|
|
134
|
-
import { Download, Trash2, Upload, ChevronDown } from "lucide-react"
|
|
135
|
-
|
|
136
|
-
function DropdownMenuWithDisabled() {
|
|
137
|
-
return (
|
|
138
|
-
<TooltipProvider delayDuration={200}>
|
|
139
|
-
<DropdownMenu>
|
|
140
|
-
<DropdownMenuTrigger asChild>
|
|
141
|
-
<Button variant="outline">
|
|
142
|
-
Ações
|
|
143
|
-
<ChevronDown className="ml-2 h-4 w-4" />
|
|
144
|
-
</Button>
|
|
145
|
-
</DropdownMenuTrigger>
|
|
146
|
-
<DropdownMenuContent className="w-56">
|
|
147
|
-
<DropdownMenuLabel>Ações em Massa</DropdownMenuLabel>
|
|
148
|
-
<DropdownMenuSeparator />
|
|
149
|
-
<DropdownMenuItem>
|
|
150
|
-
<Download className="mr-2 h-4 w-4" />
|
|
151
|
-
<span>Exportar Todos</span>
|
|
152
|
-
</DropdownMenuItem>
|
|
153
|
-
|
|
154
|
-
{/* Item desabilitado com tooltip explicativo */}
|
|
155
|
-
<DisabledMenuItem disabledReason="Selecione ao menos um item para exportar">
|
|
156
|
-
<Download className="mr-2 h-4 w-4" />
|
|
157
|
-
<span>Exportar Selecionados</span>
|
|
158
|
-
</DisabledMenuItem>
|
|
159
|
-
|
|
160
|
-
<DropdownMenuItem>
|
|
161
|
-
<Upload className="mr-2 h-4 w-4" />
|
|
162
|
-
<span>Importar</span>
|
|
163
|
-
</DropdownMenuItem>
|
|
164
|
-
<DropdownMenuSeparator />
|
|
165
|
-
|
|
166
|
-
{/* Item sem permissão */}
|
|
167
|
-
<DisabledMenuItem disabledReason="Você não possui permissão para exclusão em massa">
|
|
168
|
-
<Trash2 className="mr-2 h-4 w-4" />
|
|
169
|
-
<span>Excluir em Massa</span>
|
|
170
|
-
</DisabledMenuItem>
|
|
171
|
-
</DropdownMenuContent>
|
|
172
|
-
</DropdownMenu>
|
|
173
|
-
</TooltipProvider>
|
|
174
|
-
)
|
|
175
|
-
}`;function se(){return e.jsx(E,{title:"Dropdown Menu",description:"Exibe um menu ao usuário — como um conjunto de ações ou funções — acionado por um botão ou elemento interativo.",component:e.jsx(J,{}),usage:X,examples:[{title:"Com Checkbox Items",description:"Menu dropdown com itens de seleção múltipla usando checkbox.",preview:e.jsx(K,{}),code:Y},{title:"Com Radio Items",description:"Menu dropdown com seleção única usando radio buttons.",preview:e.jsx(H,{}),code:Z},{title:"Com Itens Desabilitados",description:"Itens desabilitados exibem tooltip explicando o motivo do bloqueio. O cursor muda para not-allowed e cliques são ignorados.",preview:e.jsx(Q,{}),code:_}],props:[{name:"DropdownMenu",type:"Component",description:"Componente raiz que envolve o trigger e o conteúdo do menu."},{name:"DropdownMenuTrigger",type:"Component",description:"Elemento que dispara a abertura do menu. Use asChild para renderizar um elemento personalizado."},{name:"DropdownMenuContent",type:"Component",description:"Container para os itens do menu. Aceita align, sideOffset e className."},{name:"DropdownMenuItem",type:"Component",description:"Item básico do menu. Aceita inset, disabled e onSelect."},{name:"DropdownMenuCheckboxItem",type:"Component",description:"Item com checkbox. Aceita checked e onCheckedChange."},{name:"DropdownMenuRadioGroup",type:"Component",description:"Agrupa radio items. Aceita value e onValueChange."},{name:"DropdownMenuRadioItem",type:"Component",description:"Item de seleção única dentro de um RadioGroup. Requer value."},{name:"DropdownMenuLabel",type:"Component",description:"Rótulo não interativo para agrupar itens. Aceita inset."},{name:"DropdownMenuSeparator",type:"Component",description:"Linha divisória visual entre grupos de itens."},{name:"DropdownMenuShortcut",type:"Component",description:"Exibe atalho de teclado alinhado à direita do item."},{name:"DropdownMenuGroup",type:"Component",description:"Agrupa itens relacionados para organização semântica."},{name:"DropdownMenuSub",type:"Component",description:"Container para submenu aninhado."},{name:"DropdownMenuSubTrigger",type:"Component",description:"Item que abre um submenu ao hover ou foco."},{name:"DropdownMenuSubContent",type:"Component",description:"Conteúdo do submenu aninhado."},{name:"DisabledMenuItem",type:"Component",description:"Item desabilitado com tooltip explicativo. Aceita disabledReason para exibir motivo do bloqueio."}],accessibility:["Abre com clique, Enter ou Espaço no trigger","Navegação completa por teclado usando setas direcionais","Enter ou Espaço para selecionar item focado","Escape fecha o menu e retorna foco ao trigger","Tab navega para fora do menu (fechando-o)","Suporte completo a WAI-ARIA com roles menu, menuitem, menuitemcheckbox e menuitemradio","Submenus acessíveis via seta direita (abrir) e seta esquerda (fechar)","Type-ahead: digitar caracteres foca no item correspondente","Itens desabilitados exibem tooltip explicativo no hover"]})}export{se as DropdownMenuDoc};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import{r as n,j as e,E as V,G as q,H as G,I as K,e0 as U,b0 as H,J as B,K as J,o as j,x as l,ei as X,X as Y,Y as m}from"./index-DkiftrvI.js";import{C as Q}from"./ComponentDocTemplate-CQbBhfvZ.js";import{S as W}from"./shield-check-CFXjOV_w.js";import"./ExampleCard-DuLrb3t-.js";function v({open:s,onOpenChange:a,onConfirm:i,onGenerateCode:t,mode:S="code",email:h,maxLength:O=8,title:L="Assinatura Eletrônica",description:N,confirmLabel:k="Confirmar",cancelLabel:P="Cancelar",resendLabel:T="Reenviar código",errorMessage:p}){const o=S==="password",M=N??(o?"Digite sua senha para confirmar a operação.":"Um código de verificação foi enviado para o seu e-mail. Insira o código abaixo para confirmar a operação."),[d,u]=n.useState(""),[g,x]=n.useState(!1),[C,b]=n.useState(!1),[f,c]=n.useState(null),w=n.useCallback(async()=>{if(d.trim()){x(!0),c(null);try{await i(d)?(u(""),a(!1)):c(p??(o?"Senha incorreta. Tente novamente.":"Código inválido. Tente novamente."))}catch{c(p??(o?"Erro ao validar a senha. Tente novamente.":"Erro ao validar o código. Tente novamente."))}finally{x(!1)}}},[d,i,a,p,o]),z=n.useCallback(async()=>{if(t){b(!0),c(null);try{await t()}catch{c("Erro ao reenviar o código.")}finally{b(!1)}}},[t]),y=r=>{r||(u(""),c(null)),a(r)},A=r=>{r.key==="Enter"&&d.trim()&&(r.preventDefault(),w())},R=o?U:W,F=o?"Senha":"Código de verificação",I=o?"Digite sua senha":"Digite o código";return e.jsx(V,{open:s,onOpenChange:y,children:e.jsxs(q,{className:"sm:max-w-md",children:[e.jsx(G,{children:e.jsxs(K,{className:"flex items-center gap-2",children:[e.jsx(R,{className:"h-5 w-5 text-primary"}),L]})}),e.jsxs("div",{className:"py-4 space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:M}),!o&&h&&e.jsxs("div",{className:"flex items-center gap-2 text-sm bg-muted/50 rounded-md px-3 py-2",children:[e.jsx(H,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"text-muted-foreground",children:"Enviado para:"}),e.jsx("span",{className:"font-medium",children:h})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(B,{htmlFor:"signature-input",children:F}),e.jsx(J,{id:"signature-input",type:o?"password":"text",value:d,onChange:r=>u(r.target.value),onKeyDown:A,maxLength:o?void 0:O,placeholder:I,autoFocus:!0,className:j(f&&"border-destructive focus-visible:ring-destructive")}),f&&e.jsx("p",{className:"text-sm text-destructive",children:f})]}),!o&&e.jsxs(l,{variant:"ghost",size:"sm",onClick:z,disabled:C,className:"text-primary",children:[e.jsx(X,{className:j("h-4 w-4 mr-1",C&&"animate-spin")}),T]})]}),e.jsxs(Y,{children:[e.jsx(l,{variant:"outline",onClick:()=>y(!1),disabled:g,children:P}),e.jsx(l,{onClick:w,disabled:!d.trim()||g,children:g?"Validando...":k})]})]})})}function D(){const[s,a]=n.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsx(l,{onClick:()=>a(!0),children:"Abrir (Modo Código)"}),e.jsx(v,{open:s,onOpenChange:a,mode:"code",email:"usuario@empresa.com",onConfirm:async i=>(await new Promise(t=>setTimeout(t,1e3)),i==="123456"?(m.success("Código validado com sucesso!"),!0):!1),onGenerateCode:async()=>{await new Promise(i=>setTimeout(i,500)),m.info("Código reenviado para o e-mail.")}})]})}function E(){const[s,a]=n.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsx(l,{variant:"destructive",onClick:()=>a(!0),children:"Excluir registro (Modo Senha)"}),e.jsx(v,{open:s,onOpenChange:a,mode:"password",title:"Confirmar exclusão",description:"Esta ação é irreversível. Digite sua senha para confirmar.",onConfirm:async i=>(await new Promise(t=>setTimeout(t,1e3)),i==="senha123"?(m.success("Operação confirmada!"),!0):!1)})]})}function Z(){const[s,a]=n.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsx(l,{variant:"outline",onClick:()=>a(!0),children:"Custom Labels"}),e.jsx(v,{open:s,onOpenChange:a,mode:"password",title:"Autorização Necessária",description:"Para aprovar este documento, confirme sua identidade.",confirmLabel:"Autorizar",cancelLabel:"Voltar",errorMessage:"Credenciais inválidas.",onConfirm:async()=>(await new Promise(i=>setTimeout(i,800)),m.success("Documento autorizado!"),!0)})]})}function ie(){return e.jsx(Q,{title:"ElectronicSignatureDialog",description:"Dialog de assinatura eletrônica para operações críticas. Suporta dois modos: verificação por código enviado ao e-mail ou confirmação por senha.",installation:'import { ElectronicSignatureDialog } from "forlogic-core"',component:e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx(D,{}),e.jsx(E,{})]}),usage:`// Modo código (verificação por e-mail)
|
|
2
|
-
<ElectronicSignatureDialog
|
|
3
|
-
open={open}
|
|
4
|
-
onOpenChange={setOpen}
|
|
5
|
-
mode="code"
|
|
6
|
-
email="usuario@empresa.com"
|
|
7
|
-
onConfirm={async (code) => {
|
|
8
|
-
const valid = await validateCode(code);
|
|
9
|
-
return valid;
|
|
10
|
-
}}
|
|
11
|
-
onGenerateCode={async () => {
|
|
12
|
-
await sendVerificationCode();
|
|
13
|
-
}}
|
|
14
|
-
/>
|
|
15
|
-
|
|
16
|
-
// Modo senha (confirmação por senha)
|
|
17
|
-
<ElectronicSignatureDialog
|
|
18
|
-
open={open}
|
|
19
|
-
onOpenChange={setOpen}
|
|
20
|
-
mode="password"
|
|
21
|
-
onConfirm={async (password) => {
|
|
22
|
-
const valid = await validatePassword(password);
|
|
23
|
-
return valid;
|
|
24
|
-
}}
|
|
25
|
-
/>`,examples:[{title:"Modo Código (e-mail)",description:'Envia um código de verificação para o e-mail do usuário. Inclui banner com o e-mail e botão para reenviar. Use "123456" para testar sucesso.',preview:e.jsx(D,{}),code:`<ElectronicSignatureDialog
|
|
26
|
-
open={open}
|
|
27
|
-
onOpenChange={setOpen}
|
|
28
|
-
mode="code"
|
|
29
|
-
email="usuario@empresa.com"
|
|
30
|
-
onConfirm={async (code) => {
|
|
31
|
-
const valid = await api.validateCode(code);
|
|
32
|
-
return valid;
|
|
33
|
-
}}
|
|
34
|
-
onGenerateCode={async () => {
|
|
35
|
-
await api.sendCode();
|
|
36
|
-
}}
|
|
37
|
-
/>`},{title:"Modo Senha",description:'Pede a senha do usuário para confirmar a operação. Ideal para ações destrutivas ou críticas. Use "senha123" para testar sucesso.',preview:e.jsx(E,{}),code:`<ElectronicSignatureDialog
|
|
38
|
-
open={open}
|
|
39
|
-
onOpenChange={setOpen}
|
|
40
|
-
mode="password"
|
|
41
|
-
title="Confirmar exclusão"
|
|
42
|
-
description="Esta ação é irreversível. Digite sua senha para confirmar."
|
|
43
|
-
onConfirm={async (password) => {
|
|
44
|
-
const valid = await api.validatePassword(password);
|
|
45
|
-
return valid;
|
|
46
|
-
}}
|
|
47
|
-
/>`},{title:"Labels Customizados",description:"Todos os textos do dialog podem ser personalizados via props.",preview:e.jsx(Z,{}),code:`<ElectronicSignatureDialog
|
|
48
|
-
open={open}
|
|
49
|
-
onOpenChange={setOpen}
|
|
50
|
-
mode="password"
|
|
51
|
-
title="Autorização Necessária"
|
|
52
|
-
description="Para aprovar este documento, confirme sua identidade."
|
|
53
|
-
confirmLabel="Autorizar"
|
|
54
|
-
cancelLabel="Voltar"
|
|
55
|
-
errorMessage="Credenciais inválidas."
|
|
56
|
-
onConfirm={async (password) => { ... }}
|
|
57
|
-
/>`}],props:[{name:"open",type:"boolean",description:"Controla a visibilidade do dialog."},{name:"onOpenChange",type:"(open: boolean) => void",description:"Callback quando o estado de abertura muda."},{name:"onConfirm",type:"(value: string) => Promise<boolean> | boolean",description:"Chamado com código ou senha. Retorne true para fechar o dialog."},{name:"mode",type:"'code' | 'password'",default:"'code'",description:"Modo de verificação: código por e-mail ou senha."},{name:"onGenerateCode",type:"() => Promise<void> | void",description:'Callback para gerar/reenviar código. Obrigatório quando mode="code".'},{name:"email",type:"string",description:'E-mail exibido no banner (apenas mode="code").'},{name:"maxLength",type:"number",default:"8",description:'Tamanho máximo do input (apenas mode="code").'},{name:"title",type:"string",default:"'Assinatura Eletrônica'",description:"Título do dialog."},{name:"description",type:"string",description:"Descrição customizada. Default varia conforme o mode."},{name:"confirmLabel",type:"string",default:"'Confirmar'",description:"Label do botão de confirmação."},{name:"cancelLabel",type:"string",default:"'Cancelar'",description:"Label do botão de cancelamento."},{name:"resendLabel",type:"string",default:"'Reenviar código'",description:'Label do botão de reenvio (apenas mode="code").'},{name:"errorMessage",type:"string",description:"Mensagem de erro customizada quando onConfirm retorna false."}],notes:['O modo "code" requer onGenerateCode para enviar/reenviar o código de verificação.','O modo "password" oculta automaticamente o banner de e-mail e o botão de reenvio.',"onConfirm deve retornar true para fechar o dialog automaticamente, ou false para exibir erro.","O dialog limpa o input e erros automaticamente ao fechar.","Pressionar Enter no input dispara a confirmação.","O ícone do título muda: ShieldCheck para modo código, Lock para modo senha."]})}export{ie as ElectronicSignatureDialogDoc};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import{j as e,a2 as a}from"./index-DkiftrvI.js";import{C as o}from"./ComponentDocTemplate-CQbBhfvZ.js";import{P as t}from"./package-B3-pVvPM.js";import"./ExampleCard-DuLrb3t-.js";function c(){return e.jsx(o,{title:"Empty State",description:"Componente para exibir estados vazios com ícone, mensagem e ação opcional.",component:e.jsxs("div",{className:"w-full space-y-8 border rounded-lg p-4",children:[e.jsx(a,{title:"Nenhum item encontrado",description:"Adicione seu primeiro item para começar",action:{label:"Adicionar Item",onClick:()=>alert("Adicionar item!")}}),e.jsx("div",{className:"border-t pt-4",children:e.jsx(a,{variant:"search",title:"Nenhum resultado encontrado",description:"Tente ajustar sua busca"})}),e.jsx("div",{className:"border-t pt-4",children:e.jsx(a,{variant:"error",title:"Erro ao carregar dados",description:"Não foi possível carregar as informações",action:{label:"Tentar Novamente",onClick:()=>alert("Tentando novamente...")}})}),e.jsx("div",{className:"border-t pt-4",children:e.jsx(a,{icon:e.jsx(t,{className:"h-8 w-8"}),title:"Sem produtos",description:"Nenhum produto cadastrado no sistema"})})]}),usage:`import { EmptyState } from "forlogic-core"
|
|
2
|
-
|
|
3
|
-
// Estado vazio padrão
|
|
4
|
-
<EmptyState
|
|
5
|
-
title="Nenhum item encontrado"
|
|
6
|
-
description="Adicione seu primeiro item para começar"
|
|
7
|
-
action={{
|
|
8
|
-
label: "Adicionar Item",
|
|
9
|
-
onClick: () => handleAddItem()
|
|
10
|
-
}}
|
|
11
|
-
/>
|
|
12
|
-
|
|
13
|
-
// Sem resultados de busca
|
|
14
|
-
<EmptyState
|
|
15
|
-
variant="search"
|
|
16
|
-
title="Nenhum resultado encontrado"
|
|
17
|
-
description="Tente ajustar sua busca"
|
|
18
|
-
/>
|
|
19
|
-
|
|
20
|
-
// Estado de erro
|
|
21
|
-
<EmptyState
|
|
22
|
-
variant="error"
|
|
23
|
-
title="Erro ao carregar dados"
|
|
24
|
-
description="Não foi possível carregar as informações"
|
|
25
|
-
action={{
|
|
26
|
-
label: "Tentar Novamente",
|
|
27
|
-
onClick: () => refetch()
|
|
28
|
-
}}
|
|
29
|
-
/>
|
|
30
|
-
|
|
31
|
-
// Ícone customizado
|
|
32
|
-
<EmptyState
|
|
33
|
-
icon={<Package className="h-8 w-8" />}
|
|
34
|
-
title="Sem produtos"
|
|
35
|
-
/>`,props:[{name:"icon",type:"ReactNode",default:"-",description:"Ícone customizado (sobrescreve o variant)."},{name:"title",type:"string",default:"-",description:"Título principal."},{name:"description",type:"string",default:"-",description:"Descrição opcional."},{name:"action",type:"{ label: string, onClick: () => void }",default:"-",description:"Botão de ação opcional."},{name:"variant",type:'"default" | "search" | "error"',default:"default",description:"Tipo de estado vazio."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais."}],accessibility:["Ícones pré-configurados por variant","Botão de ação opcional","Centralizado e responsivo","Suporte a ícone customizado"]})}export{c as EmptyStateDoc};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DkiftrvI.js";import{C as t}from"./ComponentDocTemplate-CQbBhfvZ.js";import{C as o}from"./ExampleCard-DuLrb3t-.js";const a=`import { getEnvironmentConfig } from 'forlogic-core';
|
|
2
|
-
import type { EnvironmentConfig } from 'forlogic-core';
|
|
3
|
-
|
|
4
|
-
// Retorna configuração baseada no VITE_SUPABASE_PROJECT_ID
|
|
5
|
-
const config = getEnvironmentConfig();
|
|
6
|
-
|
|
7
|
-
// Acessar OAuth
|
|
8
|
-
console.log(config.oauth.authUrl); // URL de login OAuth
|
|
9
|
-
console.log(config.oauth.clientId); // Client ID OAuth
|
|
10
|
-
|
|
11
|
-
// Acessar API URL
|
|
12
|
-
console.log(config.qualiexApiUrl); // URL base da API Qualiex
|
|
13
|
-
|
|
14
|
-
// Acessar Storage Project ID
|
|
15
|
-
console.log(config.storageProjectId); // ID do projeto para assets/storage`,i=`// lib/config/environments.ts
|
|
16
|
-
|
|
17
|
-
const PROD_PROJECT_ID = 'ccjfvpnndclajkleyqkc';
|
|
18
|
-
|
|
19
|
-
interface EnvironmentConfig {
|
|
20
|
-
storageProjectId: string;
|
|
21
|
-
oauth: { authUrl: string; clientId: string };
|
|
22
|
-
qualiexApiUrl: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Produção: login.qualiex.com, common-v4-api.qualiex.com
|
|
26
|
-
// Dev/Preview: login-dev.qualiex.com, common-v4-api-dev.qualiex.com
|
|
27
|
-
|
|
28
|
-
export function getEnvironmentConfig(): EnvironmentConfig {
|
|
29
|
-
const projectId = import.meta.env.VITE_SUPABASE_PROJECT_ID;
|
|
30
|
-
return projectId === PROD_PROJECT_ID ? PROD : DEV;
|
|
31
|
-
}`,n=`# ⚠️ Variáveis Supabase NÃO ficam no .env!
|
|
32
|
-
# Elas são extraídas automaticamente de src/integrations/supabase/client.ts
|
|
33
|
-
# pelo vite.config.ts e injetadas via "define" no build.
|
|
34
|
-
#
|
|
35
|
-
# O arquivo client.ts é auto-gerado pelo Lovable ao conectar o Supabase.
|
|
36
|
-
# Veja a seção "Arquitetura" abaixo para entender o fluxo.
|
|
37
|
-
|
|
38
|
-
# Variáveis manuais (configurar no .env):
|
|
39
|
-
VITE_IS_QUALIEX=true
|
|
40
|
-
VITE_SHOW_ADMIN_REPORTS=false
|
|
41
|
-
# VITE_WIKI_URL=https://...
|
|
42
|
-
|
|
43
|
-
# ❌ NÃO usar mais (derivadas automaticamente do Project ID):
|
|
44
|
-
# VITE_OAUTH_AUTH_URL
|
|
45
|
-
# VITE_OAUTH_CLIENT_ID
|
|
46
|
-
# VITE_QUALIEX_API_URL
|
|
47
|
-
# VITE_SUPABASE_PROJECT_ID_STORAGE
|
|
48
|
-
# VITE_SUPABASE_URL ← extraído do client.ts
|
|
49
|
-
# VITE_SUPABASE_PUBLISHABLE_KEY ← extraído do client.ts
|
|
50
|
-
# VITE_SUPABASE_PROJECT_ID ← derivado da URL no client.ts`,r=`// vite.config.ts — extrai URL e key do arquivo auto-gerado
|
|
51
|
-
|
|
52
|
-
function extractSupabaseConfig() {
|
|
53
|
-
const clientPath = path.resolve(__dirname, "src/integrations/supabase/client.ts");
|
|
54
|
-
const content = fs.readFileSync(clientPath, "utf-8");
|
|
55
|
-
const urlMatch = content.match(/SUPABASE_URL\\s*=\\s*["']([^"']+)["']/);
|
|
56
|
-
const keyMatch = content.match(/SUPABASE_PUBLISHABLE_KEY\\s*=\\s*["']([^"']+)["']/);
|
|
57
|
-
const url = urlMatch?.[1] ?? "";
|
|
58
|
-
const key = keyMatch?.[1] ?? "";
|
|
59
|
-
const projectId = url ? new URL(url).hostname.split(".")[0] : "";
|
|
60
|
-
return { url, key, projectId };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Injetados em import.meta.env via "define":
|
|
64
|
-
define: {
|
|
65
|
-
'import.meta.env.VITE_SUPABASE_URL': JSON.stringify(supabaseUrl),
|
|
66
|
-
'import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY': JSON.stringify(supabaseKey),
|
|
67
|
-
'import.meta.env.VITE_SUPABASE_PROJECT_ID': JSON.stringify(supabaseProjectId),
|
|
68
|
-
}`,s=`// eslint.config.js — bloqueia import direto do client auto-gerado
|
|
69
|
-
|
|
70
|
-
"no-restricted-imports": ["error", {
|
|
71
|
-
patterns: [{
|
|
72
|
-
group: ["@/integrations/supabase/client"],
|
|
73
|
-
message: "Use getSupabaseClient() from forlogic-core instead. "
|
|
74
|
-
+ "This file is auto-generated and exists only as data source "
|
|
75
|
-
+ "for vite.config.ts."
|
|
76
|
-
}]
|
|
77
|
-
}]
|
|
78
|
-
|
|
79
|
-
// ✅ CORRETO — usar clients da lib:
|
|
80
|
-
import { getSupabaseClient } from 'forlogic-core';
|
|
81
|
-
const supabase = getSupabaseClient();
|
|
82
|
-
|
|
83
|
-
// ❌ ERRADO — import direto (ESLint vai barrar):
|
|
84
|
-
import { supabase } from '@/integrations/supabase/client';`,c=`import { isDevSupabaseProject } from 'forlogic-core';
|
|
85
|
-
|
|
86
|
-
// Retorna true se o Supabase conectado NÃO é produção
|
|
87
|
-
const isDev = isDevSupabaseProject();
|
|
88
|
-
|
|
89
|
-
// Uso automático no NavigationProvider:
|
|
90
|
-
// Se isDev === true, o appName "Meu App" vira "Meu App (Dev)"
|
|
91
|
-
// Nenhuma mudança necessária nos módulos consumidores.
|
|
92
|
-
|
|
93
|
-
// Uso manual (ex: mostrar badge, desabilitar feature):
|
|
94
|
-
if (isDevSupabaseProject()) {
|
|
95
|
-
console.warn('Ambiente de desenvolvimento detectado');
|
|
96
|
-
}`;function m(){return e.jsx(t,{title:"Environments (Configuração por Project ID)",description:"Configurações de ambiente são extraídas automaticamente do arquivo auto-gerado pelo Lovable (src/integrations/supabase/client.ts) e injetadas pelo vite.config.ts. Não é necessário configurar variáveis Supabase no .env.",installation:a,usage:i,notes:["As variáveis Supabase (URL, Key, Project ID) NÃO ficam no .env — são extraídas do client.ts auto-gerado.",'O vite.config.ts lê o arquivo como texto (regex) e injeta via "define" no build.',"O import direto de @/integrations/supabase/client é bloqueado por ESLint (no-restricted-imports).","Use getSupabaseClient() de forlogic-core para obter o client Supabase correto.",'Produção é detectada pelo ID "ccjfvpnndclajkleyqkc". Qualquer outro ID usa configurações de dev.',"OAuth URL, Client ID, API URL e Storage Project ID são derivados automaticamente do Project ID.","VITE_IS_QUALIEX, VITE_WIKI_URL e VITE_SHOW_ADMIN_REPORTS continuam no .env manual.","Para trocar de ambiente, basta reconectar a outro projeto Supabase — tudo se ajusta."],children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"variaveis-env",className:"text-xl font-semibold mb-3",children:"Variáveis .env"}),e.jsx(o,{code:n,language:"bash"})]}),e.jsxs("div",{children:[e.jsx("h2",{id:"arquitetura",className:"text-xl font-semibold mb-3",children:"Arquitetura: Extração automática do client.ts"}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-3",children:["O ",e.jsx("code",{children:"vite.config.ts"})," lê o arquivo ",e.jsx("code",{children:"src/integrations/supabase/client.ts"})," (auto-gerado pelo Lovable) via regex para extrair URL e Key. Esses valores são injetados em ",e.jsx("code",{children:"import.meta.env"})," via a propriedade ",e.jsx("code",{children:"define"})," do Vite."]}),e.jsx(o,{code:r,language:"typescript"})]}),e.jsxs("div",{children:[e.jsx("h2",{id:"is-dev-project",className:"text-xl font-semibold mb-3",children:"isDevSupabaseProject()"}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-3",children:["Função utilitária que retorna ",e.jsx("code",{children:"true"})," quando o Supabase conectado ",e.jsx("strong",{children:"não"})," é o de produção. Usada internamente pelo ",e.jsx("code",{children:"NavigationProvider"})," para concatenar automaticamente ",e.jsx("code",{children:'" (Dev)"'})," ao ",e.jsx("code",{children:"appName"})," da sidebar."]}),e.jsx(o,{code:c,language:"typescript"})]}),e.jsxs("div",{children:[e.jsx("h2",{id:"eslint-protection",className:"text-xl font-semibold mb-3",children:"Proteção ESLint: Bloqueio de import direto"}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-3",children:["O arquivo ",e.jsx("code",{children:"client.ts"})," auto-gerado exporta um Supabase client com ",e.jsx("code",{children:"persistSession: true"})," e ",e.jsx("code",{children:"localStorage"}),", incompatível com a arquitetura do projeto (que usa token externo via ",e.jsx("code",{children:"SupabaseSingleton"}),"). Uma regra ESLint impede o import acidental desse client:"]}),e.jsx(o,{code:s,language:"typescript"})]})]})})}export{m as EnvironmentsDoc};
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import{j as r,a as e,a4 as a}from"./index-DkiftrvI.js";import{C as t}from"./ComponentDocTemplate-CQbBhfvZ.js";import"./ExampleCard-DuLrb3t-.js";const s=`import { ErrorBoundary } from 'forlogic-core';
|
|
2
|
-
|
|
3
|
-
// Envolver componentes que podem falhar
|
|
4
|
-
function App() {
|
|
5
|
-
return (
|
|
6
|
-
<ErrorBoundary>
|
|
7
|
-
<MyComponent />
|
|
8
|
-
</ErrorBoundary>
|
|
9
|
-
);
|
|
10
|
-
}`,n=`import { ErrorBoundary } from 'forlogic-core';
|
|
11
|
-
|
|
12
|
-
// ✅ Uso básico - UI de erro padrão
|
|
13
|
-
function App() {
|
|
14
|
-
return (
|
|
15
|
-
<ErrorBoundary>
|
|
16
|
-
<Header />
|
|
17
|
-
<MainContent />
|
|
18
|
-
<Footer />
|
|
19
|
-
</ErrorBoundary>
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// O ErrorBoundary captura erros de renderização e exibe:
|
|
24
|
-
// - Mensagem amigável "Algo deu errado"
|
|
25
|
-
// - Botão para ver detalhes técnicos (stack trace)
|
|
26
|
-
// - Histórico dos últimos erros
|
|
27
|
-
// - Botão para copiar detalhes
|
|
28
|
-
// - Botão para recarregar a página`,d=`import { ErrorBoundary } from 'forlogic-core';
|
|
29
|
-
|
|
30
|
-
// ✅ Fallback customizado
|
|
31
|
-
function App() {
|
|
32
|
-
return (
|
|
33
|
-
<ErrorBoundary
|
|
34
|
-
fallback={
|
|
35
|
-
<div className="flex flex-col items-center justify-center min-h-screen">
|
|
36
|
-
<h1 className="text-2xl font-bold text-destructive">
|
|
37
|
-
Ops! Algo deu errado
|
|
38
|
-
</h1>
|
|
39
|
-
<p className="text-muted-foreground mt-2">
|
|
40
|
-
Por favor, tente novamente mais tarde.
|
|
41
|
-
</p>
|
|
42
|
-
<Button
|
|
43
|
-
onClick={() => window.location.reload()}
|
|
44
|
-
className="mt-4"
|
|
45
|
-
>
|
|
46
|
-
Tentar Novamente
|
|
47
|
-
</Button>
|
|
48
|
-
</div>
|
|
49
|
-
}
|
|
50
|
-
>
|
|
51
|
-
<MyApp />
|
|
52
|
-
</ErrorBoundary>
|
|
53
|
-
);
|
|
54
|
-
}`,i=`import { ErrorBoundary } from 'forlogic-core';
|
|
55
|
-
|
|
56
|
-
// ✅ Boundaries granulares - isolar falhas
|
|
57
|
-
function Dashboard() {
|
|
58
|
-
return (
|
|
59
|
-
<div className="grid grid-cols-3 gap-4">
|
|
60
|
-
{/* Se um widget falhar, os outros continuam funcionando */}
|
|
61
|
-
<ErrorBoundary fallback={<WidgetError />}>
|
|
62
|
-
<SalesWidget />
|
|
63
|
-
</ErrorBoundary>
|
|
64
|
-
|
|
65
|
-
<ErrorBoundary fallback={<WidgetError />}>
|
|
66
|
-
<UsersWidget />
|
|
67
|
-
</ErrorBoundary>
|
|
68
|
-
|
|
69
|
-
<ErrorBoundary fallback={<WidgetError />}>
|
|
70
|
-
<RevenueWidget />
|
|
71
|
-
</ErrorBoundary>
|
|
72
|
-
</div>
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function WidgetError() {
|
|
77
|
-
return (
|
|
78
|
-
<Card className="h-full">
|
|
79
|
-
<CardContent className="flex items-center justify-center h-full">
|
|
80
|
-
<p className="text-muted-foreground text-sm">
|
|
81
|
-
Falha ao carregar widget
|
|
82
|
-
</p>
|
|
83
|
-
</CardContent>
|
|
84
|
-
</Card>
|
|
85
|
-
);
|
|
86
|
-
}`,c=`import { CoreProviders } from 'forlogic-core';
|
|
87
|
-
|
|
88
|
-
// ✅ CoreProviders já inclui ErrorBoundary
|
|
89
|
-
// Não precisa adicionar manualmente na raiz
|
|
90
|
-
function App() {
|
|
91
|
-
return (
|
|
92
|
-
<CoreProviders>
|
|
93
|
-
{/* ErrorBoundary já está ativo aqui */}
|
|
94
|
-
<Router>
|
|
95
|
-
<Routes />
|
|
96
|
-
</Router>
|
|
97
|
-
</CoreProviders>
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// Use ErrorBoundary adicional apenas para isolamento granular
|
|
102
|
-
function FeaturePage() {
|
|
103
|
-
return (
|
|
104
|
-
<div>
|
|
105
|
-
<Header />
|
|
106
|
-
<ErrorBoundary fallback={<FeatureError />}>
|
|
107
|
-
<ComplexFeature />
|
|
108
|
-
</ErrorBoundary>
|
|
109
|
-
</div>
|
|
110
|
-
);
|
|
111
|
-
}`,l=[{name:"children",type:"ReactNode",default:"-",description:"Componentes filhos a serem protegidos pelo boundary."},{name:"fallback",type:"ReactNode",default:"UI padrão",description:"UI customizada a exibir quando ocorrer erro. Se não fornecido, usa a UI padrão com detalhes do erro."}];function o(){return r.jsx(e,{className:"w-full max-w-md mx-auto",children:r.jsxs("div",{className:"p-6 text-center space-y-4",children:[r.jsx("div",{className:"flex justify-center",children:r.jsx(a,{className:"h-12 w-12 text-destructive"})}),r.jsx("h3",{className:"text-lg font-semibold",children:"Algo deu errado"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Ocorreu um erro inesperado. Tente recarregar a página."}),r.jsxs("div",{className:"space-y-2",children:[r.jsx("button",{className:"w-full px-4 py-2 text-sm border rounded-md hover:bg-muted",children:"Ver Detalhes Técnicos"}),r.jsx("button",{className:"w-full px-4 py-2 text-sm bg-primary text-primary-foreground rounded-md",children:"Recarregar Página"})]})]})})}function x(){return r.jsx(t,{title:"ErrorBoundary",description:"Componente de classe React que captura erros de renderização em componentes filhos, evitando que a aplicação inteira quebre.",usage:s,component:r.jsx(o,{}),examples:[{title:"Uso Básico",description:"Envolve componentes para capturar erros e exibir UI amigável.",preview:r.jsx(o,{}),code:n},{title:"Fallback Customizado",description:"Forneça sua própria UI de erro para casos específicos.",preview:r.jsxs("div",{className:"flex flex-col items-center justify-center p-8 bg-muted/50 rounded-lg",children:[r.jsx("h3",{className:"text-lg font-bold text-destructive",children:"Ops! Algo deu errado"}),r.jsx("p",{className:"text-muted-foreground mt-2 text-sm",children:"Por favor, tente novamente."})]}),code:d},{title:"Boundaries Granulares",description:"Isole falhas em componentes específicos para que o resto da UI continue funcionando.",preview:r.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[r.jsx(e,{className:"p-4 text-center text-xs",children:"Widget OK"}),r.jsx(e,{className:"p-4 text-center text-xs text-muted-foreground bg-muted/50",children:"Falha ao carregar"}),r.jsx(e,{className:"p-4 text-center text-xs",children:"Widget OK"})]}),code:i},{title:"Com CoreProviders",description:"CoreProviders já inclui ErrorBoundary na raiz. Use boundaries adicionais para isolamento.",preview:r.jsxs("div",{className:"p-4 border rounded-lg text-sm space-y-2",children:[r.jsxs("div",{className:"font-mono text-xs bg-muted p-2 rounded",children:["<CoreProviders>"," ← ErrorBoundary incluído"]}),r.jsxs("div",{className:"pl-4 font-mono text-xs bg-muted/50 p-2 rounded",children:["<ErrorBoundary>"," ← Adicional para isolamento"]})]}),code:c}],props:l,notes:["Em modo DEV (import.meta.env.DEV), erros são re-lançados para facilitar debugging.","Apenas erros de renderização são capturados. Erros em event handlers precisam de try/catch.","O ErrorBoundary integra com errorService para logging automático de erros.","A UI padrão inclui histórico dos últimos erros via errorService.getErrors().","CoreProviders já inclui ErrorBoundary - use boundaries adicionais apenas para isolamento granular.","Erros assíncronos (async/await, promises) não são capturados - use try/catch."]})}export{x as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as s,j as e,B as c,w as Z,ae as $,af as ee,ag as h,ah as B,ai as E,aj as ae,x as m,ad as se,Y as i,ak as ne,al as te,am as le,an as re,ao as u,ap as ie,aq as de,a as I,d as k,a5 as ce,a6 as oe,a7 as j,aa as v,J as n,K as d,M as L,N as p,O as g,Q as N,R as b,V as l,b as xe,c as he}from"./index-DkiftrvI.js";import{P as me}from"./printer-BnJ8B6m-.js";import{S as ue}from"./slider-v9tXBSnB.js";function r({name:o}){return e.jsx(c,{variant:"outline",className:"text-[10px] font-mono bg-muted/50 absolute -top-2.5 right-2 z-10",children:o})}const je=["Maria Silva","João Santos","Ana Costa","Carlos Lima","Fernanda Oliveira"],f=[{value:"pendente",label:"Pendente",variant:"secondary"},{value:"em_andamento",label:"Em Andamento",variant:"default"},{value:"concluida",label:"Concluída",variant:"success"},{value:"atrasada",label:"Atrasada",variant:"danger"}];function Ne(){const[o,V]=s.useState("dados"),[w,R]=s.useState("Implementar controle de documentos digitais"),[F,O]=s.useState("Migrar o processo de controle de documentos para formato digital, eliminando papéis e melhorando a rastreabilidade."),[S,q]=s.useState("Maria Silva"),[C,z]=s.useState("em_andamento"),[A,J]=s.useState([3]),[Q,_]=s.useState("2026-03-01"),[y,G]=s.useState("2026-06-30"),[H,K]=s.useState("Processo manual de controle de documentos gera atrasos e erros na rastreabilidade das revisões."),[t,U]=s.useState([{id:"1",what:"Mapear todos os documentos existentes",who:"Ana Costa",when:"2026-03-15",status:"concluida"},{id:"2",what:"Configurar sistema de controle digital",who:"João Santos",when:"2026-04-01",status:"em_andamento"},{id:"3",what:"Treinar colaboradores no novo sistema",who:"Maria Silva",when:"2026-05-15",status:"pendente"},{id:"4",what:"Migrar documentos para formato digital",who:"Carlos Lima",when:"2026-06-01",status:"pendente"}]),[x,P]=s.useState(""),D=f.find(a=>a.value===C),T=t.filter(a=>a.status==="concluida").length,Y=Math.round(T/t.length*100);return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Plano de Ação"}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"Formulário complexo multi-tab com campos variados, breadcrumb e ações contextuais — inspirado no módulo de Plano de Ação."}),e.jsx("div",{className:"flex flex-wrap gap-1 mt-3",children:["Breadcrumb","Tabs","Input","Textarea","Select","Label","Slider","DropdownMenu","Badge","Card","Separator"].map(a=>e.jsx(c,{variant:"outline",className:"text-xs font-mono",children:a},a))})]}),e.jsx(Z,{}),e.jsxs("div",{className:"relative",children:[e.jsx(r,{name:"Breadcrumb"}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx($,{children:e.jsxs(ee,{children:[e.jsx(h,{children:e.jsx(B,{href:"#",children:"Planos de Ação"})}),e.jsx(E,{}),e.jsx(h,{children:e.jsx(B,{href:"#",children:"2026"})}),e.jsx(E,{}),e.jsx(h,{children:e.jsx(ae,{children:"PA-2026-003"})})]})}),e.jsxs("div",{className:"relative",children:[e.jsx(r,{name:"DropdownMenu"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(m,{onClick:()=>i.success("Plano salvo"),children:[e.jsx(se,{className:"h-4 w-4 mr-2"})," Salvar"]}),e.jsxs(ne,{children:[e.jsx(te,{asChild:!0,children:e.jsx(m,{variant:"outline",size:"icon",children:e.jsx(le,{className:"h-4 w-4"})})}),e.jsxs(re,{align:"end",children:[e.jsxs(u,{onClick:()=>i.info("Enviando para aprovação..."),children:[e.jsx(ie,{className:"h-4 w-4 mr-2"})," Enviar para Aprovação"]}),e.jsxs(u,{onClick:()=>i.info("Gerando PDF..."),children:[e.jsx(me,{className:"h-4 w-4 mr-2"})," Imprimir"]}),e.jsx(de,{}),e.jsx(u,{className:"text-destructive",children:"Cancelar Plano"})]})]})]})]})]})]}),e.jsx(I,{children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:"text-sm font-mono text-muted-foreground",children:"PA-2026-003"}),e.jsx(c,{variant:D?.variant,children:D?.label})]}),e.jsx("h2",{className:"text-xl font-semibold",children:w})]}),e.jsxs("div",{className:"text-right text-sm text-muted-foreground",children:[e.jsxs("div",{children:["Progresso: ",e.jsxs("strong",{children:[Y,"%"]})]}),e.jsxs("div",{children:[T,"/",t.length," ações concluídas"]})]})]})})}),e.jsxs("div",{className:"relative",children:[e.jsx(r,{name:"Tabs"}),e.jsxs(ce,{value:o,onValueChange:V,children:[e.jsxs(oe,{children:[e.jsx(j,{value:"dados",children:"Dados Gerais"}),e.jsx(j,{value:"causa",children:"Análise de Causa"}),e.jsxs(j,{value:"acoes",children:["Ações (",t.length,")"]})]}),e.jsx(v,{value:"dados",className:"space-y-4 mt-4",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Título do Plano *"}),e.jsx(d,{value:w,onChange:a=>R(a.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Descrição"}),e.jsx(L,{value:F,onChange:a=>O(a.target.value),rows:4})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(r,{name:"Select"}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Responsável"}),e.jsxs(p,{value:S,onValueChange:q,children:[e.jsx(g,{children:e.jsx(N,{})}),e.jsx(b,{children:je.map(a=>e.jsx(l,{value:a,children:a},a))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Status"}),e.jsxs(p,{value:C,onValueChange:z,children:[e.jsx(g,{children:e.jsx(N,{})}),e.jsx(b,{children:f.map(a=>e.jsx(l,{value:a.value,children:a.label},a.value))})]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Data Início"}),e.jsx(d,{type:"date",value:Q,onChange:a=>_(a.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Data Fim"}),e.jsx(d,{type:"date",value:y,onChange:a=>G(a.target.value)})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(r,{name:"Slider"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(n,{children:["Prioridade: ",A[0],"/5"]}),e.jsx(ue,{value:A,onValueChange:J,min:1,max:5,step:1})]})]})]})]})}),e.jsx(v,{value:"causa",className:"mt-4",children:e.jsxs(I,{children:[e.jsx(xe,{children:e.jsx(he,{children:"Análise de Causa Raiz"})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Descrição da Causa"}),e.jsx(L,{value:H,onChange:a=>K(a.target.value),rows:5})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Método de Análise"}),e.jsxs(p,{defaultValue:"5w",children:[e.jsx(g,{className:"w-64",children:e.jsx(N,{})}),e.jsxs(b,{children:[e.jsx(l,{value:"5w",children:"5 Porquês"}),e.jsx(l,{value:"ishikawa",children:"Diagrama de Ishikawa"}),e.jsx(l,{value:"pareto",children:"Análise de Pareto"})]})]})]})]})]})}),e.jsxs(v,{value:"acoes",className:"mt-4 space-y-4",children:[e.jsx("div",{className:"border rounded-md",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b bg-muted/50",children:[e.jsx("th",{className:"text-left p-3 font-medium w-8",children:"#"}),e.jsx("th",{className:"text-left p-3 font-medium",children:"O quê"}),e.jsx("th",{className:"text-left p-3 font-medium",children:"Quem"}),e.jsx("th",{className:"text-left p-3 font-medium",children:"Quando"}),e.jsx("th",{className:"text-left p-3 font-medium",children:"Status"})]})}),e.jsx("tbody",{children:t.map((a,W)=>{const M=f.find(X=>X.value===a.status);return e.jsxs("tr",{className:"border-b last:border-0 hover:bg-muted/30",children:[e.jsx("td",{className:"p-3 text-muted-foreground",children:W+1}),e.jsx("td",{className:"p-3",children:a.what}),e.jsx("td",{className:"p-3",children:a.who}),e.jsx("td",{className:"p-3 whitespace-nowrap",children:a.when}),e.jsx("td",{className:"p-3",children:e.jsx(c,{variant:M?.variant,children:M?.label})})]},a.id)})})]})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(d,{placeholder:"Adicionar nova ação...",value:x,onChange:a=>P(a.target.value),className:"flex-1"}),e.jsx(m,{onClick:()=>{x&&(U(a=>[...a,{id:String(Date.now()),what:x,who:S,when:y,status:"pendente"}]),P(""),i.success("Ação adicionada"))},children:"Adicionar"})]})]})]})]})]})}export{Ne as ExampleActionPlanPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,F as l,L as n,S as d,C as c,U as p,a as m,b as x,c as u,B as t,d as g,e as h,A as b}from"./index-DkiftrvI.js";import{C}from"./clipboard-list-CXNPdciZ.js";const s=[{id:"example-app-reports",title:"Gestão de Relatórios",icon:l,description:"CRUD completo com createCrudPage, tabela com ações customizadas, formulário com validação e upload de arquivo.",components:["createCrudPage","CrudTable","CrudActionBar","BaseForm","ActionButton","Badge","Dialog","Combobox","Switch","Input","Textarea","Checkbox","Pagination","Toast"]},{id:"example-app-ideas",title:"Gestão de Ideias",icon:n,description:"Lista com filtros por tags, dialogs de criação/edição, formulário com RichTextEditor e confirmação de exclusão.",components:["BodyContent","Button","Badge","Popover","Dialog","Table","EmptyState","RichTextEditor","Input","Checkbox"]},{id:"example-app-settings",title:"Configurações com Tabs",icon:d,description:"Página com Tabs para gerenciar permissões, cards de formulário e tabela de registros existentes.",components:["Tabs","Card","Select","RadioGroup","Label","Input","Button","Separator","Progress","Table"]},{id:"example-app-action-plan",title:"Plano de Ação",icon:C,description:"Formulário complexo multi-tab com campos variados, breadcrumb de navegação e ações contextuais.",components:["Tabs","Input","Textarea","Select","Calendar","Label","Slider","DropdownMenu","Breadcrumb","Badge"]},{id:"example-app-dashboard",title:"Dashboard & Visão Geral",icon:c,description:"Dashboard com painéis numéricos, gráficos de coluna/pizza/linha e lista de itens recentes.",components:["Card","Chart","Progress","Badge","Separator","ScrollArea","Avatar"]},{id:"example-app-import",title:"Wizard de Importação",icon:p,description:"Fluxo step-by-step com upload de arquivo, validação em tabela, progresso e resultado final.",components:["StepSelector","FileUpload","Table","Progress","Loading","Alert","ScrollArea","Button"]}],j=new Set(s.flatMap(o=>o.components)).size;function N({onNavigate:o}){return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-4xl font-bold tracking-tight",children:"Aplicação Exemplo"}),e.jsxs("p",{className:"text-xl text-muted-foreground mt-2",children:[e.jsxs("strong",{children:[j," componentes"]})," demonstrados em ",s.length," cenários reais de gestão da qualidade"]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Cada página simula uma aplicação completa com dados mockados e interatividade real."})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:s.map(a=>{const r=a.icon;return e.jsxs(m,{className:"group cursor-pointer hover:border-primary/50 hover:shadow-md transition-all",onClick:()=>o?.(a.id),children:[e.jsx(x,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 rounded-md bg-primary/10 text-primary",children:e.jsx(r,{className:"h-5 w-5"})}),e.jsx(u,{className:"text-lg",children:a.title})]}),e.jsx(t,{variant:"secondary",children:a.components.length})]})}),e.jsxs(g,{children:[e.jsx(h,{className:"text-sm mb-3",children:a.description}),e.jsxs("div",{className:"flex flex-wrap gap-1 mb-3",children:[a.components.slice(0,6).map(i=>e.jsx(t,{variant:"outline",className:"text-xs",children:i},i)),a.components.length>6&&e.jsxs(t,{variant:"outline",className:"text-xs",children:["+",a.components.length-6]})]}),e.jsxs("div",{className:"flex items-center gap-1 text-sm text-primary opacity-0 group-hover:opacity-100 transition-opacity",children:["Ver cenário ",e.jsx(b,{className:"h-3.5 w-3.5"})]})]})]},a.id)})})]})}export{N as ExampleAppDoc};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as p,j as e,x as b,bs as h,a$ as j,b7 as u,a5 as v,a6 as N,a7 as l,aX as g,dy as f,aa as c}from"./index-DkiftrvI.js";function w({code:a,language:s="tsx",className:t=""}){const[d,r]=p.useState(!1),n=async()=>{await navigator.clipboard.writeText(a),r(!0),setTimeout(()=>r(!1),2e3)};return e.jsxs("div",{className:`relative rounded-lg border bg-muted/50 ${t}`,children:[e.jsxs("div",{className:"flex items-center justify-between border-b bg-muted/50 px-4 py-2",children:[e.jsx("span",{className:"text-xs font-mono text-muted-foreground",children:s}),e.jsx(b,{variant:"ghost",size:"sm",onClick:n,className:"h-7 px-2",children:d?e.jsxs(e.Fragment,{children:[e.jsx(h,{className:"h-3 w-3 mr-1"}),e.jsx("span",{className:"text-xs",children:"Copied"})]}):e.jsxs(e.Fragment,{children:[e.jsx(j,{className:"h-3 w-3 mr-1"}),e.jsx("span",{className:"text-xs",children:"Copy"})]})})]}),e.jsx("pre",{className:"overflow-x-auto p-4",children:e.jsx("code",{className:"text-sm font-mono",children:a})})]})}const C=u.forwardRef(({title:a,description:s,preview:t,code:d,id:r,language:n="tsx",defaultTab:o="preview",className:i="",previewClassName:x=""},m)=>e.jsxs("div",{ref:m,id:r,className:`rounded-lg border bg-card scroll-mt-4 ${i}`,children:[(a||s)&&e.jsxs("div",{className:"border-b px-4 py-3",children:[a&&e.jsx("h3",{className:"font-semibold text-base",children:a}),s&&e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s})]}),e.jsxs(v,{defaultValue:o,className:"w-full",children:[e.jsx("div",{className:"border-b px-4",children:e.jsxs(N,{className:"h-10 bg-transparent p-0 gap-4",children:[e.jsxs(l,{value:"preview",className:"gap-2 px-0 pb-3 pt-2 rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none",children:[e.jsx(g,{size:16}),"Preview"]}),e.jsxs(l,{value:"code",className:"gap-2 px-0 pb-3 pt-2 rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none",children:[e.jsx(f,{size:16}),"Código"]})]})}),e.jsx(c,{value:"preview",className:"mt-0 p-0",children:e.jsx("div",{className:`p-6 ${x}`,children:t})}),e.jsx(c,{value:"code",className:"mt-0 p-0",children:e.jsx("div",{className:"p-4",children:e.jsx(w,{code:d,language:n})})})]})]}));C.displayName="ExampleCard";export{w as C,C as E};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as ae,f as ie,g as te,r,j as e,h as re,T as ne,i as oe,k as K,l as H,m as q,n as le,o as de,p as ce,q as V,s as me,t as he,v as ue,B as G,w as xe,x as T,P as ge,y as pe,z as je,E as U,G as J,H as Q,I as X,J as z,K as Y,M as fe,N as ve,O as Se,Q as Ce,R as Ne,V as Re,W as be,X as Z,Y as I}from"./index-DkiftrvI.js";import{F as we}from"./FilterBar-DDTqqUfZ.js";function ke({data:c,columns:n,sortField:f,sortDirection:B,onSort:v,onRowClick:W,renderActions:o,isLoading:S=!1,emptyMessage:E,className:h,enableSelection:u=!1,selectedIds:F=[],onSelectItem:C,onSelectAll:y,isAllSelected:N=!1,enableColumnResize:d=!0,onColumnResize:D,enableColumnReorder:x=!1,onReorderColumns:g,storageKey:R}){const{t:m}=ae(),P=E||m("no_items_found","Nenhum item encontrado"),{columnWidths:b,isDragging:w,activeColumn:A,handleMouseDown:M}=ie({columns:n.map(i=>({key:String(i.key),minWidth:i.minWidth??60,maxWidth:i.maxWidth??500,defaultWidth:i.width??i.minWidth??150})),storageKey:R?`${R}-columns`:void 0,onResize:D,enabled:d}),l=te({enabled:x&&!!g,onReorder:g??(()=>{})}),O=r.useMemo(()=>{if(d)return n.map(a=>`${b[String(a.key)]??a.width??a.minWidth??150}px`);const i=n.reduce((a,p)=>p.width?a:a+(p.weight??1),0);return n.map(a=>{if(a.width)return`${a.width}px`;if(a.minWidth&&!a.weight)return`${a.minWidth}px`;const k=(a.weight??1)/i*100;return a.minWidth?`minmax(${a.minWidth}px, ${k}%)`:`${k}%`})},[n,d,b]),L=i=>f!==i?null:B==="asc"?e.jsx(he,{size:14,className:"ml-1"}):e.jsx(ue,{size:14,className:"ml-1"});return S?e.jsx("div",{className:"flex-1 overflow-auto",children:e.jsx("div",{className:"p-4 space-y-3",children:[...Array(5)].map((i,a)=>e.jsx(re,{className:"h-12 w-full"},a))})}):c.length===0?e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx("div",{className:"text-center text-muted-foreground",children:e.jsx("p",{children:P})})}):e.jsx("div",{className:`flex-1 overflow-auto ${w?"select-none":""}`,children:e.jsxs(ne,{className:h,children:[e.jsx(oe,{className:"sticky top-0 bg-background z-10",children:e.jsxs(K,{children:[u&&e.jsx(H,{className:"w-[40px]",children:e.jsx(q,{checked:N,onCheckedChange:y,"aria-label":m("select_all","Selecionar todos")})}),n.map((i,a)=>{const p=d&&i.resizable!==!1,k=A===String(i.key),$=x&&!!g,s=$?l.getDragProps(a):{},t=l.dragFromIndex===a,_=l.dragOverIndex===a&&l.dragFromIndex!==a;return e.jsxs(H,{className:de(i.className,"relative transition-opacity",i.sortable&&"cursor-pointer",$&&l.isDragging&&"cursor-grabbing",t&&"opacity-50",_&&"border-l-2 border-primary"),style:{width:O[a]},...s,children:[i.sortable&&v?e.jsxs("button",{onClick:()=>v(String(i.key)),className:"flex items-center hover:text-foreground transition-colors font-medium",children:[i.header,L(String(i.key))]}):e.jsx("span",{className:"font-medium",children:i.header}),p&&e.jsx(le,{direction:"horizontal",onMouseDown:se=>M(String(i.key),se),isDragging:k})]},String(i.key))}),o&&e.jsx(H,{className:"w-[80px] text-right",children:m("actions","Ações")})]})}),e.jsx(ce,{children:c.map(i=>e.jsxs(K,{onClick:()=>W?.(i),className:`${W?"cursor-pointer":""} relative`,children:[u&&e.jsx(V,{children:e.jsx(q,{checked:F.includes(i.id),onCheckedChange:()=>C?.(i.id),onClick:a=>a.stopPropagation(),"aria-label":`${m("select_all","Selecionar todos")} ${i.id}`})}),n.map(a=>e.jsx(V,{className:a.className,children:e.jsx(me,{children:a.render?a.render(i):String(i[a.key]??"-")})},String(a.key))),o&&e.jsx(V,{className:"text-right",onClick:a=>a.stopPropagation(),children:o(i)})]},i.id))})]})})}const ee=[{id:"docs",label:"Documentos"},{id:"nc",label:"Não Conformidades"},{id:"audit",label:"Auditorias"},{id:"training",label:"Treinamentos"},{id:"risk",label:"Gestão de Riscos"}],Te=[{id:"1",code:"RPT-001",name:"Relatório de Auditorias Pendentes",description:"Lista todas as auditorias com status pendente no período",isAdminReport:!1,module:"audit",fileSize:245760,lastModified:"2026-03-28T14:30:00"},{id:"2",code:"RPT-002",name:"Indicadores de NC por Setor",description:"Gráfico de não conformidades agrupadas por setor",isAdminReport:!0,module:"nc",fileSize:512e3,lastModified:"2026-03-25T09:15:00"},{id:"3",code:"RPT-003",name:"Controle de Documentos Vencidos",description:"Documentos com prazo de revisão expirado",isAdminReport:!1,module:"docs",fileSize:128e3,lastModified:"2026-03-20T16:45:00"},{id:"4",code:"RPT-004",name:"Matriz de Treinamentos",description:"Acompanhamento de treinamentos por colaborador",isAdminReport:!1,module:"training",fileSize:384e3,lastModified:"2026-03-15T11:00:00"},{id:"5",code:"RPT-005",name:"Análise de Riscos Críticos",description:"Riscos classificados como críticos e seus planos de ação",isAdminReport:!0,module:"risk",fileSize:64e4,lastModified:"2026-03-10T08:30:00"},{id:"6",code:"RPT-006",name:"Resumo Mensal de Ocorrências",description:"Consolidado mensal de todas as ocorrências registradas",isAdminReport:!1,module:"nc",fileSize:192e3,lastModified:"2026-03-05T13:20:00"}];function j({name:c}){return e.jsx(G,{variant:"outline",className:"text-[10px] font-mono bg-muted/50 absolute -top-2.5 right-2 z-10",children:c})}function Pe(){const[c,n]=r.useState(Te),[f,B]=r.useState(""),[v,W]=r.useState(1),[o,S]=r.useState([]),[E,h]=r.useState(!1),[u,F]=r.useState(null),[C,y]=r.useState(null),N=5,[d,D]=r.useState(""),[x,g]=r.useState(""),[R,m]=r.useState(""),[P,b]=r.useState(!1),[w,A]=r.useState(""),M=r.useMemo(()=>{if(!f)return c;const s=f.toLowerCase();return c.filter(t=>t.code.toLowerCase().includes(s)||t.name.toLowerCase().includes(s))},[c,f]),l=M.slice((v-1)*N,v*N),O=()=>{F(null),D(""),g(""),m(""),b(!1),A(""),h(!0)},L=s=>{F(s),D(s.code),g(s.name),m(s.description),b(s.isAdminReport),A(s.module),h(!0)},i=()=>{if(!d||!x||!w){I.error("Preencha os campos obrigatórios");return}if(u)n(s=>s.map(t=>t.id===u.id?{...t,code:d,name:x,description:R,isAdminReport:P,module:w,lastModified:new Date().toISOString()}:t)),I.success("Relatório atualizado");else{const s={id:String(Date.now()),code:d,name:x,description:R,isAdminReport:P,module:w,fileSize:0,lastModified:new Date().toISOString()};n(t=>[...t,s]),I.success("Relatório criado")}h(!1)},a=()=>{C&&(n(s=>s.filter(t=>t.id!==C.id)),I.success("Relatório excluído"),y(null))},p=()=>{n(s=>s.filter(t=>!o.includes(t.id))),I.success(`${o.length} relatórios excluídos`),S([])},k=[{key:"code",header:"Código",sortable:!0,width:120},{key:"name",header:"Nome",sortable:!0,minWidth:200},{key:"isAdminReport",header:"Admin",sortable:!0,width:80,render:s=>e.jsx(G,{variant:s.isAdminReport?"success":"secondary",children:s.isAdminReport?"Sim":"Não"})},{key:"module",header:"Módulo",sortable:!0,width:150,render:s=>ee.find(t=>t.id===s.module)?.label??s.module},{key:"fileSize",header:"Tamanho",width:100,render:s=>`${(s.fileSize/1024).toFixed(0)} KB`},{key:"lastModified",header:"Modificado",sortable:!0,width:160,render:s=>new Date(s.lastModified).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})}],$=()=>{o.length===l.length?S([]):S(l.map(s=>s.id))};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Gestão de Relatórios"}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"Cenário CRUD completo inspirado em páginas reais do sistema — demonstra como os componentes se integram."}),e.jsx("div",{className:"flex flex-wrap gap-1 mt-3",children:["CrudPrimitiveTable","CrudPrimitivePagination","FilterBar","ActionButton","Badge","Dialog","Select","Switch","Input","Textarea","Label","Checkbox","Toast","Button","Separator"].map(s=>e.jsx(G,{variant:"outline",className:"text-xs font-mono",children:s},s))})]}),e.jsx(xe,{}),e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"CrudActionBar pattern"}),e.jsxs("div",{className:"flex items-center gap-4 bg-muted/50 p-3 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(T,{onClick:O,children:[e.jsx(ge,{className:"h-4 w-4 mr-2"})," Novo Relatório"]}),o.length>0&&e.jsxs(T,{variant:"destructive",size:"sm",onClick:p,children:[e.jsx(pe,{className:"h-4 w-4 mr-2"})," Excluir (",o.length,")"]})]}),e.jsx("div",{className:"flex-1 max-w-md",children:e.jsx(we,{searchValue:f,onSearchChange:B})}),e.jsx("div",{})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"CrudPrimitiveTable"}),e.jsx(ke,{data:l,columns:k,enableSelection:!0,selectedIds:o,onSelectItem:s=>S(t=>t.includes(s)?t.filter(_=>_!==s):[...t,s]),onSelectAll:$,isAllSelected:o.length===l.length&&l.length>0,onRowClick:L})]}),e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"CrudPrimitivePagination"}),e.jsx(je,{variant:"full",currentPage:v,totalPages:Math.ceil(M.length/N),totalItems:M.length,itemsPerPage:N,onPageChange:W,onItemsPerPageChange:()=>{}})]}),e.jsx(U,{open:E,onOpenChange:h,children:e.jsxs(J,{children:[e.jsx(Q,{children:e.jsx(X,{children:u?"Editar Relatório":"Novo Relatório"})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"Input + Label"}),e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsxs("div",{className:"col-span-1 space-y-2",children:[e.jsx(z,{htmlFor:"rpt-code",children:"Código *"}),e.jsx(Y,{id:"rpt-code",value:d,onChange:s=>D(s.target.value),maxLength:40,placeholder:"RPT-000"})]}),e.jsxs("div",{className:"col-span-3 space-y-2",children:[e.jsx(z,{htmlFor:"rpt-name",children:"Nome *"}),e.jsx(Y,{id:"rpt-name",value:x,onChange:s=>g(s.target.value),maxLength:150})]})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"Textarea"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{htmlFor:"rpt-desc",children:"Descrição"}),e.jsx(fe,{id:"rpt-desc",value:R,onChange:s=>m(s.target.value),maxLength:300,rows:3})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"Select"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{children:"Módulo *"}),e.jsxs(ve,{value:w,onValueChange:A,children:[e.jsx(Se,{children:e.jsx(Ce,{placeholder:"Selecione..."})}),e.jsx(Ne,{children:ee.map(s=>e.jsx(Re,{value:s.id,children:s.label},s.id))})]})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(j,{name:"Switch"}),e.jsx("div",{className:"space-y-2 pt-6",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(be,{checked:P,onCheckedChange:b}),e.jsx(z,{children:"Relatório Admin?"})]})})]})]})]}),e.jsxs(Z,{children:[e.jsx(T,{variant:"outline",onClick:()=>h(!1),children:"Cancelar"}),e.jsx(T,{onClick:i,children:u?"Salvar":"Criar"})]})]})}),e.jsx(U,{open:!!C,onOpenChange:s=>{s||y(null)},children:e.jsxs(J,{size:"sm",variant:"destructive",children:[e.jsx(Q,{children:e.jsx(X,{children:"Confirmar Exclusão"})}),e.jsxs("p",{className:"text-sm text-muted-foreground py-4",children:["Tem certeza que deseja excluir o relatório ",e.jsx("strong",{children:C?.name}),"?"]}),e.jsxs(Z,{children:[e.jsx(T,{variant:"outline",onClick:()=>y(null),children:"Cancelar"}),e.jsx(T,{variant:"destructive",onClick:a,children:"Excluir"})]})]})})]})}export{Pe as ExampleCrudReportsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as a,B as u,w as v,a4 as g,ar as p,F as N,as as f,a as s,d as r,b as n,c as l,at as d,au as C,av as o,aw as x,ax as m,ay as c,az as b,aA as h,aB as A,aC as y,aD as T,aE as w,aF as R,aG as P,aH as B,aI as D,ac as F}from"./index-DkiftrvI.js";import{T as S,a as M}from"./trending-up-jip5-leJ.js";function t({name:e}){return a.jsx(u,{variant:"outline",className:"text-[10px] font-mono bg-muted/50 absolute -top-2.5 right-2 z-10",children:e})}const K=[{month:"Jan",abertas:12,fechadas:8},{month:"Fev",abertas:15,fechadas:11},{month:"Mar",abertas:8,fechadas:14},{month:"Abr",abertas:10,fechadas:9},{month:"Mai",abertas:6,fechadas:12},{month:"Jun",abertas:9,fechadas:7}],j=[{name:"Produto",value:35,color:"hsl(var(--primary))"},{name:"Processo",value:28,color:"hsl(var(--accent))"},{name:"Sistema",value:20,color:"hsl(var(--muted-foreground))"},{name:"Fornecedor",value:17,color:"hsl(var(--destructive))"}],L=[{month:"Jan",taxa:72},{month:"Fev",taxa:78},{month:"Mar",taxa:85},{month:"Abr",taxa:82},{month:"Mai",taxa:90},{month:"Jun",taxa:88}],J=[{id:"1",user:"Maria Silva",action:"Fechou NC-2026-042",time:"2 min atrás",initials:"MS"},{id:"2",user:"João Santos",action:"Criou auditoria AUD-2026-015",time:"15 min atrás",initials:"JS"},{id:"3",user:"Ana Costa",action:"Aprovou documento DOC-2026-088",time:"1h atrás",initials:"AC"},{id:"4",user:"Carlos Lima",action:"Concluiu treinamento TRN-2026-007",time:"2h atrás",initials:"CL"},{id:"5",user:"Fernanda Oliveira",action:"Registrou risco RSK-2026-003",time:"3h atrás",initials:"FO"},{id:"6",user:"Roberto Nunes",action:"Atualizou plano de ação PA-2026-001",time:"4h atrás",initials:"RN"}],E=[{title:"NCs Abertas",value:"23",change:"-12%",trend:"down",icon:g,color:"text-destructive"},{title:"Auditorias no Mês",value:"8",change:"+25%",trend:"up",icon:p,color:"text-green-600"},{title:"Docs Pendentes",value:"15",change:"+3%",trend:"up",icon:N,color:"text-orange-500"},{title:"Taxa Treinamento",value:"88%",change:"+6%",trend:"up",icon:f,color:"text-primary"}];function z(){return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Dashboard & Visão Geral"}),a.jsx("p",{className:"text-muted-foreground mt-1",children:"Dashboard com painéis numéricos, gráficos e lista de atividades — inspirado na página de visão geral do sistema."}),a.jsx("div",{className:"flex flex-wrap gap-1 mt-3",children:["Card","Badge","Progress","ScrollArea","Avatar","Separator","Recharts (Bar/Pie/Line)"].map(e=>a.jsx(u,{variant:"outline",className:"text-xs font-mono",children:e},e))})]}),a.jsx(v,{}),a.jsxs("div",{className:"relative",children:[a.jsx(t,{name:"Card + Badge"}),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:E.map(e=>{const i=e.icon;return a.jsx(s,{children:a.jsxs(r,{className:"pt-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:e.title}),a.jsx("p",{className:"text-3xl font-bold mt-1",children:e.value})]}),a.jsx("div",{className:`p-3 rounded-full bg-muted ${e.color}`,children:a.jsx(i,{className:"h-5 w-5"})})]}),a.jsxs("div",{className:"flex items-center gap-1 mt-2 text-sm",children:[e.trend==="up"?a.jsx(S,{className:"h-4 w-4 text-green-600"}):a.jsx(M,{className:"h-4 w-4 text-red-600"}),a.jsx("span",{className:e.trend==="up"?"text-green-600":"text-red-600",children:e.change}),a.jsx("span",{className:"text-muted-foreground",children:"vs mês anterior"})]})]})},e.title)})})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[a.jsxs("div",{className:"relative",children:[a.jsx(t,{name:"Recharts BarChart"}),a.jsxs(s,{children:[a.jsx(n,{children:a.jsx(l,{children:"Não Conformidades por Mês"})}),a.jsx(r,{children:a.jsx(d,{width:"100%",height:250,children:a.jsxs(C,{data:K,children:[a.jsx(o,{strokeDasharray:"3 3",className:"stroke-muted"}),a.jsx(x,{dataKey:"month",className:"text-xs"}),a.jsx(m,{className:"text-xs"}),a.jsx(c,{}),a.jsx(b,{}),a.jsx(h,{dataKey:"abertas",fill:"hsl(var(--destructive))",name:"Abertas",radius:[4,4,0,0]}),a.jsx(h,{dataKey:"fechadas",fill:"hsl(var(--primary))",name:"Fechadas",radius:[4,4,0,0]})]})})})]})]}),a.jsxs("div",{className:"relative",children:[a.jsx(t,{name:"Recharts PieChart"}),a.jsxs(s,{children:[a.jsx(n,{children:a.jsx(l,{children:"NCs por Tipo"})}),a.jsx(r,{children:a.jsx(d,{width:"100%",height:250,children:a.jsxs(A,{children:[a.jsx(y,{data:j,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:90,label:({name:e,percent:i})=>`${e} ${(i*100).toFixed(0)}%`,children:j.map((e,i)=>a.jsx(T,{fill:e.color},i))}),a.jsx(c,{})]})})})]})]})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[a.jsxs("div",{className:"lg:col-span-2 relative",children:[a.jsx(t,{name:"Recharts LineChart"}),a.jsxs(s,{children:[a.jsx(n,{children:a.jsx(l,{children:"Evolução da Taxa de Treinamento"})}),a.jsx(r,{children:a.jsx(d,{width:"100%",height:250,children:a.jsxs(w,{data:L,children:[a.jsx(o,{strokeDasharray:"3 3",className:"stroke-muted"}),a.jsx(x,{dataKey:"month",className:"text-xs"}),a.jsx(m,{domain:[60,100],className:"text-xs"}),a.jsx(c,{}),a.jsx(R,{type:"monotone",dataKey:"taxa",stroke:"hsl(var(--primary))",strokeWidth:2,dot:{r:4},name:"Taxa (%)"})]})})})]})]}),a.jsxs("div",{className:"relative",children:[a.jsx(t,{name:"ScrollArea + Avatar"}),a.jsxs(s,{className:"h-full",children:[a.jsx(n,{children:a.jsx(l,{children:"Atividades Recentes"})}),a.jsx(r,{children:a.jsx(P,{className:"h-[230px]",children:a.jsx("div",{className:"space-y-4",children:J.map(e=>a.jsxs("div",{className:"flex items-start gap-3",children:[a.jsx(B,{className:"h-8 w-8",children:a.jsx(D,{className:"text-xs",children:e.initials})}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("p",{className:"text-sm font-medium truncate",children:e.user}),a.jsx("p",{className:"text-xs text-muted-foreground",children:e.action}),a.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:e.time})]})]},e.id))})})})]})]})]}),a.jsxs("div",{className:"relative",children:[a.jsx(t,{name:"Progress"}),a.jsxs(s,{children:[a.jsx(n,{children:a.jsx(l,{children:"Progresso dos Módulos"})}),a.jsx(r,{children:a.jsx("div",{className:"space-y-4",children:[{name:"Controle de Documentos",value:92},{name:"Não Conformidades",value:78},{name:"Auditorias",value:65},{name:"Treinamentos",value:88},{name:"Gestão de Riscos",value:45}].map(e=>a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:e.name}),a.jsxs("span",{className:"font-medium",children:[e.value,"%"]})]}),a.jsx(F,{value:e.value})]},e.name))})})]})]})]})}export{z as ExampleDashboardPage};
|