forlogic-core 1.16.6 → 1.16.8
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/components/dialog-sizes-and-structure.md +3 -1
- package/.note/memory/ui/components/combo-tree.md +16 -0
- package/dist/assets/AccordionDoc-BVPUJk8G.js +31 -0
- package/dist/assets/ActionButtonDoc-DLJ_K9ib.js +47 -0
- package/dist/assets/AlertDoc-CY1ybZeG.js +37 -0
- package/dist/assets/AppHeaderDoc-Crkw4dA9.js +67 -0
- package/dist/assets/AppSidebarDoc-ET-4j6wV.js +204 -0
- package/dist/assets/AuthDoc-B4v4Nci5.js +192 -0
- package/dist/assets/AvatarDoc-BLdMoyJd.js +11 -0
- package/dist/assets/BadgeDoc-CSNM1b6b.js +36 -0
- package/dist/assets/BaseFormDoc-DXiYuN6-.js +169 -0
- package/dist/assets/BodyContentDoc-Bp6YmUWX.js +83 -0
- package/dist/assets/BreadcrumbDoc-D7tqqTvo.js +75 -0
- package/dist/assets/ButtonDoc-C4JwIvU3.js +41 -0
- package/dist/assets/ButtonGroupDoc-QFfjC7Pm.js +7 -0
- package/dist/assets/CalendarDoc-COlEKqmv.js +81 -0
- package/dist/assets/CardDoc-BVhMoC2w.js +49 -0
- package/dist/assets/ChartDoc-BJ14EjI2.js +111 -0
- package/dist/assets/CheckboxDoc-Bcqpln9_.js +55 -0
- package/dist/assets/ColorPickerDoc-CcfmSwyC.js +10 -0
- package/dist/assets/ColorsFoundationDoc-uO6IiJbS.js +13 -0
- package/dist/assets/ComboTreeDoc-R4qE6XwB.js +46 -0
- package/dist/assets/ComboboxDoc-JIo_-gSN.js +134 -0
- package/dist/assets/ComponentDocTemplate-CRbRY-v5.js +1 -0
- package/dist/assets/ContextMenuDoc-C4-_0NLp.js +182 -0
- package/dist/assets/ContextsDoc-Cj9Aaoyo.js +184 -0
- package/dist/assets/CreateCrudPageDoc-D_SnMRJ2.js +106 -0
- package/dist/assets/CrudActionBarDoc-BYqtIabp.js +112 -0
- package/dist/assets/CrudGridDoc-DspxQrq5.js +85 -0
- package/dist/assets/CrudOverviewDoc-DLcOL_HZ.js +14 -0
- package/dist/assets/CrudPrimitivesDoc-BRS86nWg.js +164 -0
- package/dist/assets/CrudTableDoc-Daw8u2G_.js +113 -0
- package/dist/assets/DataListDoc-BrgVNhhR.js +13 -0
- package/dist/assets/DesignSystemHome-BFBNqq1J.js +1 -0
- package/dist/assets/DialogDoc-DCpRy4rg.js +981 -0
- package/dist/assets/DropdownMenuDoc-DT6LBa8Z.js +175 -0
- package/dist/assets/EmptyStateDoc-wydc09gG.js +35 -0
- package/dist/assets/EnvironmentsDoc-amIriwDD.js +96 -0
- package/dist/assets/ErrorBoundaryDoc-BEixy_Gl.js +111 -0
- package/dist/assets/FormDoc-DxoRt6p7.js +81 -0
- package/dist/assets/FoundationOverview-CxSbumIt.js +1 -0
- package/dist/assets/GridDoc-BpQqCMUE.js +28 -0
- package/dist/assets/HooksDoc-JNODhbaF.js +665 -0
- package/dist/assets/HoverCardDoc-CdqiYrIb.js +31 -0
- package/dist/assets/I18nDoc-B6LMXnE3.js +232 -0
- package/dist/assets/IconPickerDoc-BRdy58IC.js +10 -0
- package/dist/assets/IconsFoundationDoc-CrymfxTI.js +33 -0
- package/dist/assets/InputDoc-BK-SdpJ7.js +211 -0
- package/dist/assets/LabelDoc-DHvgzhaJ.js +42 -0
- package/dist/assets/LeadershipDoc-DRiB0spL.js +416 -0
- package/dist/assets/MediaDoc-B_vqnf72.js +459 -0
- package/dist/assets/MenubarDoc-Zvgczxe2.js +165 -0
- package/dist/assets/ModuleAccessDoc-Nuxb4S27.js +153 -0
- package/dist/assets/ModulesDialogDoc-iJWLkOZo.js +46 -0
- package/dist/assets/NavigationMenuDoc-CeWun1VF.js +116 -0
- package/dist/assets/OnboardingDialogDoc-xBL-rXeZ.js +55 -0
- package/dist/assets/PaginationDoc-CfvwxCMe.js +98 -0
- package/dist/assets/PaginationDoc-DqtRgXnF.js +27 -0
- package/dist/assets/PlacesDoc-nckioEzg.js +226 -0
- package/dist/assets/PopoverDoc-C3o2CZCT.js +64 -0
- package/dist/assets/ProgressDoc-BmWBNMPA.js +29 -0
- package/dist/assets/QualiexUserFieldDoc-CE1e4mx6.js +149 -0
- package/dist/assets/RadioGroupDoc-DMZH6NmR.js +57 -0
- package/dist/assets/RadiusDoc-BOZD3gPV.js +7 -0
- package/dist/assets/RequiredFieldsCounterDoc-CG-lmSSy.js +58 -0
- package/dist/assets/ResizableDoc-CqGkv6Cd.js +104 -0
- package/dist/assets/RichTextEditorDoc-m50ll-Od.js +24 -0
- package/dist/assets/ScrollAreaDoc-BzJ-APXo.js +28 -0
- package/dist/assets/SecurityDoc-B34gVeiV.js +204 -0
- package/dist/assets/SelectDoc-DXRv7QHK.js +80 -0
- package/dist/assets/SeparatorDoc-DcNh8k0P.js +4 -0
- package/dist/assets/ServicesDoc-8aXBd6yg.js +308 -0
- package/dist/assets/ShadowsDoc-Brl4hIDI.js +9 -0
- package/dist/assets/SignDoc-BdwerR-2.js +66 -0
- package/dist/assets/SkeletonDoc-BWgqgbDY.js +54 -0
- package/dist/assets/SliderDoc-E-NjbYVk.js +41 -0
- package/dist/assets/SpacingDoc-BzburM-r.js +12 -0
- package/dist/assets/SplitButtonDoc-BYUysmJp.js +53 -0
- package/dist/assets/StepSelectorDoc-PB1k4v7F.js +41 -0
- package/dist/assets/SwitchDoc-BLOG6kfj.js +56 -0
- package/dist/assets/TableDoc-Dwcs-lop.js +128 -0
- package/dist/assets/TabsDoc-Ovkh8ArV.js +42 -0
- package/dist/assets/TextareaDoc-DsBYxmbr.js +46 -0
- package/dist/assets/ToastDoc-BbZaFE_A.js +157 -0
- package/dist/assets/ToggleDoc-C28vbvhp.js +51 -0
- package/dist/assets/TooltipDoc-DL5cnLak.js +58 -0
- package/dist/assets/TruncatedCellDoc-BuDA8QcY.js +12 -0
- package/dist/assets/TypographyFoundationDoc-CPdH4PHa.js +7 -0
- package/dist/assets/UtilitiesDoc-CrQhyEfz.js +145 -0
- package/dist/assets/blocks-DO93nPjs.js +1 -0
- package/dist/assets/calendar-days-cMfwBSZx.js +1 -0
- package/dist/assets/circle-plus-D3NftMzS.js +1 -0
- package/dist/assets/circle-x-BVAVJ_oz.js +1 -0
- package/dist/assets/crown-B2MTZDnM.js +1 -0
- package/dist/assets/date-picker-zhJU-_kM.js +1 -0
- package/dist/assets/disabled-menu-item-C16xsaVs.js +1 -0
- package/dist/assets/drawer-oTqCOtsC.js +3 -0
- package/dist/assets/file-pen-line-CXv-Eye-.js +1 -0
- package/dist/assets/git-branch-V6-h6P9K.js +1 -0
- package/dist/assets/globe-CaUBIJU8.js +1 -0
- package/dist/assets/hash-B4MTXppl.js +1 -0
- package/dist/assets/hover-card-DEuucfxP.js +1 -0
- package/dist/assets/index-CE0k7Rdh.js +312 -0
- package/dist/assets/index-Cx3adT_u.css +1 -0
- package/dist/assets/life-buoy-BRndExxh.js +1 -0
- package/dist/assets/lucide-react-t7dCa4lv.js +1 -0
- package/dist/assets/monitor-Dg3HKTSE.js +1 -0
- package/dist/assets/package-3G45ARQh.js +1 -0
- package/dist/assets/pen-BYSSwjK4.js +1 -0
- package/dist/assets/pin-CMYagNhs.js +1 -0
- package/dist/assets/radio-group-BVun_Tmt.js +1 -0
- package/dist/assets/server-p0Sb0mKI.js +1 -0
- package/dist/assets/share-2-D-ZhCCq2.js +1 -0
- package/dist/assets/shield-x-Q7hAXWsG.js +1 -0
- package/dist/assets/step-selector-DHxgT2FL.js +1 -0
- package/dist/assets/text-align-start-6aYQqbX4.js +1 -0
- package/dist/assets/trash-DveAOiLF.js +1 -0
- package/dist/assets/useMockCrud-GY0KxHXr.js +1 -0
- package/dist/assets/user-check-CoGNBfIk.js +1 -0
- package/dist/assets/user-plus-Bad2xWIT.js +1 -0
- package/dist/components/layout/SidebarActionTrigger.d.ts +15 -3
- package/dist/components/modules/ModuleAccessGuard.d.ts +24 -2
- package/dist/components/ui/combo-tree.d.ts +4 -0
- package/dist/crud/components/ColumnSettingsPopover.d.ts +17 -0
- package/dist/crud/components/CrudActionBar.d.ts +2 -1
- package/dist/crud/components/CrudTable.d.ts +5 -1
- package/dist/crud/components/GroupDropZone.d.ts +16 -0
- package/dist/crud/components/InlineRowActions.d.ts +15 -0
- package/dist/crud/hooks/useColumnDragReorder.d.ts +19 -0
- package/dist/crud/hooks/useColumnManager.d.ts +56 -0
- package/dist/crud/primitives/Table.d.ts +1 -1
- package/dist/crud/primitives/TreeTable.d.ts +2 -0
- package/dist/crud/primitives/index.d.ts +2 -1
- package/dist/crud/primitives/types.d.ts +33 -0
- package/dist/exports/crud.d.ts +2 -1
- package/dist/hooks/useDerivedContractedModules.d.ts +8 -0
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.html +35 -0
- package/dist/index.js +1 -1
- package/dist/types/sidebar.d.ts +2 -0
- package/dist/types.d.ts +4 -0
- package/dist/vite/index.esm.js +3 -1
- package/dist/vite/index.js +3 -1
- package/docs/DESIGN_SYSTEM.md +33 -13
- package/package.json +2 -4
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import{j as e,dc as m,dd as c,de as r,df as d,dg as i,dh as a,di as s,dj as t}from"./index-CE0k7Rdh.js";import{C as o}from"./ComponentDocTemplate-CRbRY-v5.js";function l(){return e.jsx(o,{title:"Breadcrumb",description:"Exibe o caminho até o recurso atual usando uma hierarquia de links.",component:e.jsx(m,{children:e.jsxs(c,{children:[e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/",children:"Home"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/ds",children:"Componentes"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(s,{children:"Breadcrumb"})})]})}),usage:`import { Link } from "react-router-dom"
|
|
2
|
+
import {
|
|
3
|
+
Breadcrumb,
|
|
4
|
+
BreadcrumbItem,
|
|
5
|
+
BreadcrumbLink,
|
|
6
|
+
BreadcrumbList,
|
|
7
|
+
BreadcrumbPage,
|
|
8
|
+
BreadcrumbSeparator,
|
|
9
|
+
} from "forlogic-core"
|
|
10
|
+
|
|
11
|
+
// ✅ CORRETO: Usar asChild + Link para navegação SPA
|
|
12
|
+
<Breadcrumb>
|
|
13
|
+
<BreadcrumbList>
|
|
14
|
+
<BreadcrumbItem>
|
|
15
|
+
<BreadcrumbLink asChild>
|
|
16
|
+
<Link to="/">Home</Link>
|
|
17
|
+
</BreadcrumbLink>
|
|
18
|
+
</BreadcrumbItem>
|
|
19
|
+
<BreadcrumbSeparator />
|
|
20
|
+
<BreadcrumbItem>
|
|
21
|
+
<BreadcrumbLink asChild>
|
|
22
|
+
<Link to="/componentes">Componentes</Link>
|
|
23
|
+
</BreadcrumbLink>
|
|
24
|
+
</BreadcrumbItem>
|
|
25
|
+
<BreadcrumbSeparator />
|
|
26
|
+
<BreadcrumbItem>
|
|
27
|
+
<BreadcrumbPage>Breadcrumb</BreadcrumbPage>
|
|
28
|
+
</BreadcrumbItem>
|
|
29
|
+
</BreadcrumbList>
|
|
30
|
+
</Breadcrumb>
|
|
31
|
+
|
|
32
|
+
// ❌ ERRADO: Usar href diretamente (causa reload da página)
|
|
33
|
+
<BreadcrumbLink href="/componentes">Componentes</BreadcrumbLink>`,examples:[{title:"Navegação SPA com React Router",description:"Use asChild + Link para navegação sem reload da página.",preview:e.jsx(m,{children:e.jsxs(c,{children:[e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/",children:"Home"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/ds",children:"Design System"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(s,{children:"Breadcrumb"})})]})}),code:`import { Link } from "react-router-dom"
|
|
34
|
+
|
|
35
|
+
<Breadcrumb>
|
|
36
|
+
<BreadcrumbList>
|
|
37
|
+
<BreadcrumbItem>
|
|
38
|
+
<BreadcrumbLink asChild>
|
|
39
|
+
<Link to="/">Home</Link>
|
|
40
|
+
</BreadcrumbLink>
|
|
41
|
+
</BreadcrumbItem>
|
|
42
|
+
<BreadcrumbSeparator />
|
|
43
|
+
<BreadcrumbItem>
|
|
44
|
+
<BreadcrumbLink asChild>
|
|
45
|
+
<Link to="/ds">Design System</Link>
|
|
46
|
+
</BreadcrumbLink>
|
|
47
|
+
</BreadcrumbItem>
|
|
48
|
+
<BreadcrumbSeparator />
|
|
49
|
+
<BreadcrumbItem>
|
|
50
|
+
<BreadcrumbPage>Breadcrumb</BreadcrumbPage>
|
|
51
|
+
</BreadcrumbItem>
|
|
52
|
+
</BreadcrumbList>
|
|
53
|
+
</Breadcrumb>`},{title:"Colapsado com Ellipsis",description:"Use BreadcrumbEllipsis para mostrar um estado colapsado quando o breadcrumb for muito longo.",preview:e.jsx(m,{children:e.jsxs(c,{children:[e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/",children:"Home"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(t,{})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(d,{asChild:!0,children:e.jsx(i,{to:"/ds",children:"Componentes"})})}),e.jsx(a,{}),e.jsx(r,{children:e.jsx(s,{children:"Breadcrumb"})})]})}),code:`<Breadcrumb>
|
|
54
|
+
<BreadcrumbList>
|
|
55
|
+
<BreadcrumbItem>
|
|
56
|
+
<BreadcrumbLink asChild>
|
|
57
|
+
<Link to="/">Home</Link>
|
|
58
|
+
</BreadcrumbLink>
|
|
59
|
+
</BreadcrumbItem>
|
|
60
|
+
<BreadcrumbSeparator />
|
|
61
|
+
<BreadcrumbItem>
|
|
62
|
+
<BreadcrumbEllipsis />
|
|
63
|
+
</BreadcrumbItem>
|
|
64
|
+
<BreadcrumbSeparator />
|
|
65
|
+
<BreadcrumbItem>
|
|
66
|
+
<BreadcrumbLink asChild>
|
|
67
|
+
<Link to="/componentes">Componentes</Link>
|
|
68
|
+
</BreadcrumbLink>
|
|
69
|
+
</BreadcrumbItem>
|
|
70
|
+
<BreadcrumbSeparator />
|
|
71
|
+
<BreadcrumbItem>
|
|
72
|
+
<BreadcrumbPage>Breadcrumb</BreadcrumbPage>
|
|
73
|
+
</BreadcrumbItem>
|
|
74
|
+
</BreadcrumbList>
|
|
75
|
+
</Breadcrumb>`}],props:[{name:"Breadcrumb",type:"nav",default:"-",description:'Elemento raiz do breadcrumb. Renderiza um elemento nav com aria-label="breadcrumb".'},{name:"BreadcrumbList",type:"ol",default:"-",description:"Lista ordenada que contém os itens do breadcrumb."},{name:"BreadcrumbItem",type:"li",default:"-",description:"Item individual do breadcrumb."},{name:"BreadcrumbLink",type:"a",default:"-",description:"Link clicável do breadcrumb. Use asChild + Link para navegação SPA."},{name:"asChild",type:"boolean",default:"false",description:"Permite compor com Link do React Router para navegação SPA."},{name:"BreadcrumbPage",type:"span",default:"-",description:'Representa a página atual (não clicável). Possui aria-current="page".'},{name:"BreadcrumbSeparator",type:"li",default:"ChevronRight",description:"Separador visual entre itens do breadcrumb."},{name:"BreadcrumbEllipsis",type:"span",default:"-",description:"Indica itens ocultos (reticências). Usado para breadcrumbs colapsados."}],accessibility:['Usa elemento nav com aria-label="breadcrumb" para identificação por leitores de tela.',"Estrutura HTML semântica com lista ordenada (ol > li).",'Página atual marcada com aria-current="page" e aria-disabled="true".','Separadores marcados com role="presentation" e aria-hidden="true".','BreadcrumbEllipsis inclui texto sr-only "Mais" para leitores de tela.',"Links navegáveis por teclado com foco visível.","Segue padrão WAI-ARIA Breadcrumb."],notes:["⚠️ OBRIGATÓRIO: Use asChild + Link do React Router para navegação SPA sem reload.","Use BreadcrumbPage para o item final (página atual) em vez de BreadcrumbLink.","Considere colapsar itens intermediários em telas menores usando BreadcrumbEllipsis.","Evite usar href diretamente - causa reload completo da página."]})}export{l as BreadcrumbDoc};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import{j as a,f as t,P as e,v as n,w as i,x as r,T as s,y as o}from"./index-CE0k7Rdh.js";import{C as l}from"./ComponentDocTemplate-CRbRY-v5.js";function u(){return a.jsx(l,{title:"Button",description:"Componente de botão com variantes semânticas, tamanhos e estados. Use para ações primárias, secundárias e destrutivas.",component:a.jsx(t,{children:"Button"}),usage:`import { Button } from "forlogic-core"
|
|
2
|
+
|
|
3
|
+
<Button>Click me</Button>
|
|
4
|
+
<Button variant="primary">Primary</Button>
|
|
5
|
+
<Button variant="destructive">Delete</Button>`,examples:[{title:"Variantes Semânticas",preview:a.jsxs("div",{className:"flex flex-wrap gap-3",children:[a.jsx(t,{variant:"primary",children:"Primary"}),a.jsx(t,{variant:"secondary",children:"Secondary"}),a.jsx(t,{variant:"tertiary",children:"Tertiary"}),a.jsx(t,{variant:"outline",children:"Outline"}),a.jsx(t,{variant:"ghost",children:"Ghost"}),a.jsx(t,{variant:"subtle",children:"Subtle"}),a.jsx(t,{variant:"danger",children:"Danger"}),a.jsx(t,{variant:"link",children:"Link"})]}),code:`<Button variant="primary">Primary</Button>
|
|
6
|
+
<Button variant="secondary">Secondary</Button>
|
|
7
|
+
<Button variant="tertiary">Tertiary</Button>
|
|
8
|
+
<Button variant="outline">Outline</Button>
|
|
9
|
+
<Button variant="ghost">Ghost</Button>
|
|
10
|
+
<Button variant="subtle">Subtle</Button>
|
|
11
|
+
<Button variant="danger">Danger</Button>
|
|
12
|
+
<Button variant="link">Link</Button>`},{title:"Variantes Legadas (Deprecated)",preview:a.jsxs("div",{className:"flex flex-wrap gap-3",children:[a.jsx(t,{variant:"default",children:"default"}),a.jsx(t,{variant:"action",children:"action"}),a.jsx(t,{variant:"action-primary",children:"action-primary"}),a.jsx(t,{variant:"action-secondary",children:"action-secondary"}),a.jsx(t,{variant:"icon-only",children:"icon-only"}),a.jsx(t,{variant:"external-link",children:"external-link"}),a.jsx(t,{variant:"loading",children:"loading"})]}),code:`// ⚠️ DEPRECATED: Variantes mantidas para compatibilidade
|
|
13
|
+
// Use as variantes semânticas (primary, secondary, etc.)
|
|
14
|
+
<Button variant="default">default</Button> // → use primary
|
|
15
|
+
<Button variant="action">action</Button> // → use primary/10
|
|
16
|
+
<Button variant="action-primary">action-primary</Button> // → use primary
|
|
17
|
+
<Button variant="action-secondary">action-secondary</Button> // → use secondary
|
|
18
|
+
<Button variant="icon-only">icon-only</Button> // → use variant="icon"
|
|
19
|
+
<Button variant="external-link">external-link</Button> // → use subtle
|
|
20
|
+
<Button variant="loading">loading</Button> // → use primary + disabled`},{title:"Tamanhos",preview:a.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[a.jsx(t,{variant:"primary",size:"sm",children:"Small"}),a.jsx(t,{variant:"primary",size:"md",children:"Medium"}),a.jsx(t,{variant:"primary",size:"lg",children:"Large"}),a.jsx(t,{variant:"primary",size:"xl",children:"Extra Large"})]}),code:`<Button size="sm">Small</Button>
|
|
21
|
+
<Button size="md">Medium</Button>
|
|
22
|
+
<Button size="lg">Large</Button>
|
|
23
|
+
<Button size="xl">Extra Large</Button>`},{title:"Botões de Ícone",preview:a.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[a.jsx(t,{variant:"outline",size:"icon-xs",children:a.jsx(e,{className:"h-3 w-3"})}),a.jsx(t,{variant:"outline",size:"icon-sm",children:a.jsx(e,{className:"h-4 w-4"})}),a.jsx(t,{variant:"outline",size:"icon",children:a.jsx(n,{className:"h-4 w-4"})})]}),code:`<Button size="icon-xs"><Plus /></Button>
|
|
24
|
+
<Button size="icon-sm"><Plus /></Button>
|
|
25
|
+
<Button size="icon"><Settings /></Button>`},{title:"Estados",preview:a.jsxs("div",{className:"flex flex-wrap gap-3",children:[a.jsx(t,{children:"Normal"}),a.jsx(t,{disabled:!0,children:"Disabled"}),a.jsxs(t,{disabled:!0,children:[a.jsx(i,{className:"mr-2 h-4 w-4 animate-spin"}),"Loading"]})]}),code:`<Button>Normal</Button>
|
|
26
|
+
<Button disabled>Disabled</Button>
|
|
27
|
+
<Button disabled>
|
|
28
|
+
<Loader2 className="mr-2 h-4 w-4 animate-spin" />
|
|
29
|
+
Loading
|
|
30
|
+
</Button>`},{title:"Com Ícones",preview:a.jsxs("div",{className:"flex flex-wrap gap-3",children:[a.jsxs(t,{variant:"primary",children:[a.jsx(r,{className:"mr-2 h-4 w-4"}),"Download"]}),a.jsxs(t,{variant:"secondary",children:[a.jsx(e,{className:"mr-2 h-4 w-4"}),"Adicionar"]}),a.jsxs(t,{variant:"danger",children:[a.jsx(s,{className:"mr-2 h-4 w-4"}),"Excluir"]}),a.jsxs(t,{variant:"outline",children:["Próximo",a.jsx(o,{className:"ml-2 h-4 w-4"})]})]}),code:`<Button variant="primary">
|
|
31
|
+
<Download className="mr-2 h-4 w-4" />
|
|
32
|
+
Download
|
|
33
|
+
</Button>
|
|
34
|
+
<Button variant="secondary">
|
|
35
|
+
<Plus className="mr-2 h-4 w-4" />
|
|
36
|
+
Adicionar
|
|
37
|
+
</Button>
|
|
38
|
+
<Button variant="danger">
|
|
39
|
+
<Trash2 className="mr-2 h-4 w-4" />
|
|
40
|
+
Excluir
|
|
41
|
+
</Button>`}],props:[{name:"variant",type:'"primary" | "secondary" | "tertiary" | "outline" | "ghost" | "subtle" | "danger" | "destructive" | "link" | "icon"',default:'"primary"',description:'Variante visual do botão. Use "danger" para ações destrutivas (alias de "destructive").'},{name:"size",type:'"sm" | "md" | "lg" | "xl" | "icon" | "icon-sm" | "icon-xs" | "default"',default:'"md"',description:"Tamanho do botão."},{name:"asChild",type:"boolean",default:"false",description:"Renderiza como elemento filho (ex: Link)."},{name:"disabled",type:"boolean",default:"false",description:"Estado desabilitado."}],accessibility:["Acessível via teclado (Tab, Enter, Space)","Indicador de foco visível (focus-visible)","Estado desabilitado comunicado a leitores de tela","Botões de ícone devem ter aria-label","Tamanho mínimo de toque de 44x44px no mobile"],notes:['✅ Use variant="primary" para a ação principal da página',"✅ Limite a um botão primário por seção",'✅ Use variant="danger" para ações destrutivas (consistente com Alert e Badge)',"✅ Inclua estado de loading para ações assíncronas","❌ Não use múltiplos botões primários no mesmo contexto","❌ Não crie estilos customizados fora do design system"]})}export{u as ButtonDoc};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{r as s,j as t,l as d,z as u,f as o}from"./index-CE0k7Rdh.js";import{C as l}from"./ComponentDocTemplate-CRbRY-v5.js";const c=u("flex items-center",{variants:{orientation:{horizontal:"flex-row [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",vertical:"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"}},defaultVariants:{orientation:"horizontal"}}),e=s.forwardRef(({className:n,orientation:a,...r},i)=>t.jsx("div",{ref:i,className:d(c({orientation:a}),n),...r}));e.displayName="ButtonGroup";function f(){return t.jsx(l,{title:"Button Group",description:"Agrupa botões relacionados com espaçamento e bordas apropriados.",component:t.jsxs(e,{children:[t.jsx(o,{variant:"outline",children:"Esquerda"}),t.jsx(o,{variant:"outline",children:"Meio"}),t.jsx(o,{variant:"outline",children:"Direita"})]}),usage:`import { ButtonGroup, Button } from "forlogic-core"
|
|
2
|
+
|
|
3
|
+
<ButtonGroup>
|
|
4
|
+
<Button variant="outline">Esquerda</Button>
|
|
5
|
+
<Button variant="outline">Meio</Button>
|
|
6
|
+
<Button variant="outline">Direita</Button>
|
|
7
|
+
</ButtonGroup>`,props:[{name:"orientation",type:'"horizontal" | "vertical"',default:'"horizontal"',description:"Orientação do grupo de botões."},{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para estilização."},{name:"children",type:"ReactNode",default:"-",description:"Botões a serem agrupados."}],accessibility:["Mantém acessibilidade individual dos botões","Gerenciamento adequado de foco","Navegação por teclas de seta entre botões"]})}export{f as ButtonGroupDoc};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import{aO as C,aP as S,r as s,j as e,aQ as D,L as n,f as r}from"./index-CE0k7Rdh.js";import{C as f}from"./ComponentDocTemplate-CRbRY-v5.js";import{C as m,D as d}from"./date-picker-zhJU-_kM.js";function p(l,o){const i=C(l);return isNaN(o)?S(l,NaN):(o&&i.setDate(i.getDate()+o),i)}function g(l,o){return p(l,-7)}function N(){const[l,o]=s.useState(new Date),[i,u]=s.useState();return e.jsx(f,{title:"Calendar & Date Picker",description:"Componentes para seleção de datas. O Calendar exibe um calendário interativo, enquanto o Date Picker combina um campo de input com o calendário em um popover.",component:e.jsxs("div",{className:"flex flex-wrap gap-8 items-start",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:"Calendar"}),e.jsx(m,{mode:"single",selected:l,onSelect:o,className:"rounded-md border"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:"Date Picker"}),e.jsx(d,{date:i,onDateChange:u,placeholder:"Selecione uma data",className:"w-[280px]"})]})]}),usage:`import { Calendar, DatePicker } from "forlogic-core"
|
|
2
|
+
import { useState } from "react"
|
|
3
|
+
|
|
4
|
+
// Calendar
|
|
5
|
+
const [date, setDate] = useState<Date | undefined>(new Date())
|
|
6
|
+
|
|
7
|
+
<Calendar
|
|
8
|
+
mode="single"
|
|
9
|
+
selected={date}
|
|
10
|
+
onSelect={setDate}
|
|
11
|
+
className="rounded-md border"
|
|
12
|
+
/>
|
|
13
|
+
|
|
14
|
+
// Date Picker
|
|
15
|
+
<DatePicker
|
|
16
|
+
date={date}
|
|
17
|
+
onDateChange={setDate}
|
|
18
|
+
placeholder="Selecione uma data"
|
|
19
|
+
/>`,examples:[{title:"Calendar - Seleção Única",preview:(()=>{const[a,t]=s.useState();return e.jsxs("div",{className:"space-y-4",children:[e.jsx(m,{mode:"single",selected:a,onSelect:t,className:"rounded-md border"}),a&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Data selecionada: ",D(a,"dd/MM/yyyy")]})]})})(),code:`const [date, setDate] = useState<Date>();
|
|
20
|
+
|
|
21
|
+
<Calendar
|
|
22
|
+
mode="single"
|
|
23
|
+
selected={date}
|
|
24
|
+
onSelect={setDate}
|
|
25
|
+
className="rounded-md border"
|
|
26
|
+
/>`},{title:"Calendar - Seleção Múltipla",preview:(()=>{const[a,t]=s.useState([]);return e.jsxs("div",{className:"space-y-4",children:[e.jsx(m,{mode:"multiple",selected:a,onSelect:t,className:"rounded-md border"}),a&&a.length>0&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:[a.length," data(s) selecionada(s)"]})]})})(),code:`const [dates, setDates] = useState<Date[]>([]);
|
|
27
|
+
|
|
28
|
+
<Calendar
|
|
29
|
+
mode="multiple"
|
|
30
|
+
selected={dates}
|
|
31
|
+
onSelect={setDates}
|
|
32
|
+
/>`},{title:"Date Picker - Básico",preview:(()=>{const[a,t]=s.useState();return e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione uma data",className:"w-[280px]"})})(),code:`const [date, setDate] = useState<Date>();
|
|
33
|
+
|
|
34
|
+
<DatePicker
|
|
35
|
+
date={date}
|
|
36
|
+
onDateChange={setDate}
|
|
37
|
+
placeholder="Selecione uma data"
|
|
38
|
+
/>`},{title:"Date Picker - Controlado",preview:(()=>{const[a,t]=s.useState();return e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione uma data",className:"w-[280px]"})})(),code:`const [date, setDate] = useState<Date>();
|
|
39
|
+
|
|
40
|
+
<DatePicker
|
|
41
|
+
date={date}
|
|
42
|
+
onDateChange={setDate}
|
|
43
|
+
placeholder="Selecione uma data"
|
|
44
|
+
/>`},{title:"Date Picker - Com Label",preview:(()=>{const[a,t]=s.useState();return e.jsxs("div",{className:"space-y-2 w-[280px]",children:[e.jsx(n,{children:"Data de Nascimento"}),e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione sua data de nascimento"})]})})(),code:`<div className="space-y-2">
|
|
45
|
+
<Label>Data de Nascimento</Label>
|
|
46
|
+
<DatePicker
|
|
47
|
+
date={date}
|
|
48
|
+
onDateChange={setDate}
|
|
49
|
+
placeholder="Selecione sua data de nascimento"
|
|
50
|
+
/>
|
|
51
|
+
</div>`},{title:"Date Picker - Desabilitado",preview:e.jsx(d,{placeholder:"Data desabilitada",disabled:!0,className:"w-[280px]"}),code:'<DatePicker placeholder="Data desabilitada" disabled />'},{title:"Date Picker - Com Datas Restritas",preview:(()=>{const[a,t]=s.useState();return e.jsxs("div",{className:"space-y-2 w-[280px]",children:[e.jsx(n,{children:"Apenas datas futuras"}),e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione uma data futura",disabledDates:c=>c<new Date})]})})(),code:`<DatePicker
|
|
52
|
+
date={date}
|
|
53
|
+
onDateChange={setDate}
|
|
54
|
+
disabledDates={(date) => date < new Date()}
|
|
55
|
+
/>`},{title:"Formulário de Agendamento",preview:(()=>{const[a,t]=s.useState(),[c,x]=s.useState();return e.jsxs("div",{className:"space-y-4 w-[280px]",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Data de Início"}),e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione a data de início"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(n,{children:"Data de Término"}),e.jsx(d,{date:c,onDateChange:x,placeholder:"Selecione a data de término",disabledDates:h=>a?h<a:!1})]}),a&&c&&e.jsxs("div",{className:"p-3 bg-muted rounded-md text-sm",children:[e.jsx("p",{className:"font-medium",children:"Período:"}),e.jsxs("p",{className:"text-muted-foreground",children:[D(a,"dd/MM/yyyy")," até ",D(c,"dd/MM/yyyy")]})]})]})})(),code:`const [startDate, setStartDate] = useState<Date>();
|
|
56
|
+
const [endDate, setEndDate] = useState<Date>();
|
|
57
|
+
|
|
58
|
+
<div className="space-y-2">
|
|
59
|
+
<Label>Data de Início</Label>
|
|
60
|
+
<DatePicker
|
|
61
|
+
date={startDate}
|
|
62
|
+
onDateChange={setStartDate}
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div className="space-y-2">
|
|
67
|
+
<Label>Data de Término</Label>
|
|
68
|
+
<DatePicker
|
|
69
|
+
date={endDate}
|
|
70
|
+
onDateChange={setEndDate}
|
|
71
|
+
disabledDates={(date) => date < startDate}
|
|
72
|
+
/>
|
|
73
|
+
</div>`},{title:"Date Picker com Atalhos",preview:(()=>{const[a,t]=s.useState();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2 w-[280px]",children:[e.jsx(n,{children:"Selecione ou use um atalho"}),e.jsx(d,{date:a,onDateChange:t,placeholder:"Selecione uma data"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(new Date),children:"Hoje"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(p(new Date,1)),children:"Amanhã"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(p(new Date,7)),children:"+7 dias"}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>t(g(new Date)),children:"-7 dias"})]})]})})(),code:`const [date, setDate] = useState<Date>();
|
|
74
|
+
|
|
75
|
+
<DatePicker
|
|
76
|
+
date={date}
|
|
77
|
+
onDateChange={setDate}
|
|
78
|
+
/>
|
|
79
|
+
|
|
80
|
+
<Button onClick={() => setDate(new Date())}>Hoje</Button>
|
|
81
|
+
<Button onClick={() => setDate(addDays(new Date(), 1))}>Amanhã</Button>`}],props:[{name:"mode",type:'"single" | "multiple" | "range"',default:'"single"',description:"(Calendar) O modo de seleção."},{name:"selected",type:"Date | Date[] | DateRange",default:"-",description:"(Calendar) A(s) data(s) selecionada(s)."},{name:"onSelect",type:"(date) => void",default:"-",description:"(Calendar) Callback quando uma data é selecionada."},{name:"disabled",type:"(date: Date) => boolean",default:"-",description:"(Calendar) Função para desabilitar datas específicas."},{name:"showOutsideDays",type:"boolean",default:"true",description:"(Calendar) Exibe dias de meses adjacentes."},{name:"className",type:"string",default:"-",description:"(Calendar) Classes CSS adicionais."},{name:"date",type:"Date",default:"-",description:"(DatePicker) A data selecionada."},{name:"onDateChange",type:"(date: Date | undefined) => void",default:"-",description:"(DatePicker) Callback quando a data muda."},{name:"placeholder",type:"string",default:'"Pick a date"',description:"(DatePicker) Texto do placeholder."},{name:"disabled",type:"boolean",default:"false",description:"(DatePicker) Desabilita o componente."},{name:"disabledDates",type:"(date: Date) => boolean",default:"-",description:"(DatePicker) Função para desabilitar datas específicas."},{name:"className",type:"string",default:"-",description:"(DatePicker) Classes CSS adicionais."}],accessibility:["Navegação completa por teclado","Teclas de seta para navegar entre datas","Page Up/Down para navegação mensal","Labels e roles ARIA apropriados","Gerenciamento de foco adequado"]})}export{N as CalendarDoc};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import{j as e,C as a,a as s,b as t,c as d,d as r,af as i,f as o,ag as c,ah as n}from"./index-CE0k7Rdh.js";import{C as l}from"./ComponentDocTemplate-CRbRY-v5.js";function p(){return e.jsx(l,{title:"Card",description:"Exibe um card com cabeçalho, conteúdo e rodapé.",component:e.jsxs(a,{className:"w-[350px]",children:[e.jsxs(s,{children:[e.jsx(t,{children:"Card Title"}),e.jsx(d,{children:"Card Description"})]}),e.jsx(r,{children:e.jsx("p",{children:"Card Content"})})]}),usage:`import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "forlogic-core"
|
|
2
|
+
|
|
3
|
+
<Card>
|
|
4
|
+
<CardHeader>
|
|
5
|
+
<CardTitle>Card Title</CardTitle>
|
|
6
|
+
<CardDescription>Card Description</CardDescription>
|
|
7
|
+
</CardHeader>
|
|
8
|
+
<CardContent>
|
|
9
|
+
<p>Card Content</p>
|
|
10
|
+
</CardContent>
|
|
11
|
+
<CardFooter>
|
|
12
|
+
<p>Card Footer</p>
|
|
13
|
+
</CardFooter>
|
|
14
|
+
</Card>`,examples:[{title:"Card Básico",preview:e.jsxs(a,{className:"w-[350px]",children:[e.jsxs(s,{children:[e.jsx(t,{children:"Criar projeto"}),e.jsx(d,{children:"Implante seu novo projeto em um clique."})]}),e.jsx(r,{children:e.jsx("p",{className:"text-sm text-muted-foreground",children:"Configure seu projeto e comece a desenvolver imediatamente."})}),e.jsxs(i,{className:"flex justify-between",children:[e.jsx(o,{variant:"outline",children:"Cancelar"}),e.jsx(o,{children:"Criar"})]})]}),code:`<Card className="w-[350px]">
|
|
15
|
+
<CardHeader>
|
|
16
|
+
<CardTitle>Criar projeto</CardTitle>
|
|
17
|
+
<CardDescription>Implante seu novo projeto em um clique.</CardDescription>
|
|
18
|
+
</CardHeader>
|
|
19
|
+
<CardContent>
|
|
20
|
+
<p>Configure seu projeto e comece a desenvolver imediatamente.</p>
|
|
21
|
+
</CardContent>
|
|
22
|
+
<CardFooter className="flex justify-between">
|
|
23
|
+
<Button variant="outline">Cancelar</Button>
|
|
24
|
+
<Button>Criar</Button>
|
|
25
|
+
</CardFooter>
|
|
26
|
+
</Card>`},{title:"Card com Notificações",preview:e.jsxs(a,{className:"w-[380px]",children:[e.jsxs(s,{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(c,{className:"h-4 w-4"}),e.jsx(t,{children:"Notificações"})]}),e.jsx(d,{children:"Você tem 3 notificações não lidas."})]}),e.jsxs(r,{className:"grid gap-4",children:[e.jsx("div",{className:"flex items-center gap-4 rounded-md border p-4",children:e.jsxs("div",{className:"flex-1 space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:"Sua chamada foi confirmada."}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Há 1 hora"})]})}),e.jsx("div",{className:"flex items-center gap-4 rounded-md border p-4",children:e.jsxs("div",{className:"flex-1 space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:"Você tem uma nova mensagem!"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Há 2 horas"})]})})]}),e.jsx(i,{children:e.jsxs(o,{className:"w-full",children:[e.jsx(n,{className:"mr-2 h-4 w-4"})," Marcar todas como lidas"]})})]}),code:`<Card className="w-[380px]">
|
|
27
|
+
<CardHeader>
|
|
28
|
+
<CardTitle>Notificações</CardTitle>
|
|
29
|
+
<CardDescription>Você tem 3 notificações não lidas.</CardDescription>
|
|
30
|
+
</CardHeader>
|
|
31
|
+
<CardContent className="grid gap-4">
|
|
32
|
+
<div className="flex items-center gap-4 rounded-md border p-4">
|
|
33
|
+
<div className="flex-1 space-y-1">
|
|
34
|
+
<p className="text-sm font-medium">Sua chamada foi confirmada.</p>
|
|
35
|
+
<p className="text-sm text-muted-foreground">Há 1 hora</p>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</CardContent>
|
|
39
|
+
<CardFooter>
|
|
40
|
+
<Button className="w-full">Marcar todas como lidas</Button>
|
|
41
|
+
</CardFooter>
|
|
42
|
+
</Card>`},{title:"Card Simples",preview:e.jsx(a,{className:"w-[350px]",children:e.jsx(r,{className:"pt-6",children:e.jsxs("div",{className:"text-center",children:[e.jsx("h3",{className:"text-2xl font-bold",children:"$99"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"por mês"})]})})}),code:`<Card className="w-[350px]">
|
|
43
|
+
<CardContent className="pt-6">
|
|
44
|
+
<div className="text-center">
|
|
45
|
+
<h3 className="text-2xl font-bold">$99</h3>
|
|
46
|
+
<p className="text-sm text-muted-foreground">por mês</p>
|
|
47
|
+
</div>
|
|
48
|
+
</CardContent>
|
|
49
|
+
</Card>`}],props:[{name:"className",type:"string",default:"-",description:"Classes CSS adicionais para o card."}],accessibility:["Estrutura semântica com elementos apropriados","Hierarquia de cabeçalhos adequada","Contraste de cores acessível","Funciona com leitores de tela"]})}export{p as CardDoc};
|