forlogic-core 2.0.3 → 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/README.md +187 -917
- 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/sidebar.d.ts +2 -1
- package/dist/types.d.ts +3 -0
- package/docs/AUDIT_PROMPT.md +74 -0
- package/docs/PROJECT_KNOWLEDGE_TEMPLATE.md +117 -0
- package/docs/PROMPT_TEMPLATE.md +77 -0
- package/docs/STARTER_TEMPLATE.md +114 -0
- package/docs/design-system/README.md +45 -0
- package/docs/design-system/buttons-actions.md +433 -0
- package/docs/design-system/charts-dashboards.md +547 -0
- package/docs/design-system/crud.md +243 -0
- package/docs/design-system/data-display.md +360 -0
- package/docs/design-system/dialogs.md +588 -0
- package/docs/design-system/domain.md +661 -0
- package/docs/design-system/examples.md +275 -0
- package/docs/design-system/foundation.md +82 -0
- package/docs/design-system/infra-utils.md +36 -0
- package/docs/design-system/inputs.md +556 -0
- package/docs/design-system/layout.md +351 -0
- package/docs/design-system/navigation.md +604 -0
- package/docs/design-system/notifications-feedback.md +139 -0
- package/docs/design-system/platform.md +95 -0
- package/docs/design-system/selectors.md +424 -0
- package/docs/design-system/tables-grids.md +114 -0
- package/package.json +2 -2
- 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
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
<!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
|
|
2
|
+
<!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
|
|
3
|
+
|
|
4
|
+
# Dialogs
|
|
5
|
+
|
|
6
|
+
Categoria: **Dialogs** | 11 componentes
|
|
7
|
+
|
|
8
|
+
### ModulesDialog
|
|
9
|
+
|
|
10
|
+
Dialog para navegação entre módulos do sistema.
|
|
11
|
+
|
|
12
|
+
**Uso:**
|
|
13
|
+
```tsx
|
|
14
|
+
import { useState } from 'react';
|
|
15
|
+
import { Button, ModulesDialog } from 'forlogic-core';
|
|
16
|
+
import { LayoutGrid } from 'lucide-react';
|
|
17
|
+
|
|
18
|
+
function App() {
|
|
19
|
+
const [open, setOpen] = useState(false);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<>
|
|
23
|
+
<Button onClick={() => setOpen(true)}>
|
|
24
|
+
<LayoutGrid className="h-4 w-4 mr-2" />
|
|
25
|
+
Módulos
|
|
26
|
+
</Button>
|
|
27
|
+
|
|
28
|
+
<ModulesDialog
|
|
29
|
+
open={open}
|
|
30
|
+
onOpenChange={setOpen}
|
|
31
|
+
onModuleClick={(module) => console.log(module)}
|
|
32
|
+
/>
|
|
33
|
+
</>
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Props:**
|
|
39
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
40
|
+
|------|------|--------|-----------|
|
|
41
|
+
| `open` | `boolean` | - | Controla se o dialog está aberto |
|
|
42
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado muda |
|
|
43
|
+
| `onModuleClick` | `(module: Module) => void` | - | Callback ao clicar em um módulo. Default: navega via URL do módulo |
|
|
44
|
+
| `educaUrl` | `string` | https://educa.forlogic.net/ | URL do link do Forlogic Educa |
|
|
45
|
+
| `saberGestaoUrl` | `string` | https://sabergestao.com.br/ | URL do link do Saber Gestão |
|
|
46
|
+
|
|
47
|
+
**Acessibilidade:**
|
|
48
|
+
- Dialog acessível com role=
|
|
49
|
+
- e aria-modal=
|
|
50
|
+
- ,
|
|
51
|
+
|
|
52
|
+
- ,
|
|
53
|
+
|
|
54
|
+
- ,
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
**Notas:**
|
|
58
|
+
- Para separação entre módulos contratados e disponíveis (contractedModules, onModuleInterest), consulte a documentação de Module Access.
|
|
59
|
+
- Internamente usa o componente ModulesContent, compartilhado com o AccessDeniedDialog.
|
|
60
|
+
- 2 Abas de Grupos: Qualiex e Clássicos
|
|
61
|
+
- Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base
|
|
62
|
+
- Cards no Rodapé: Forlogic Educa, Saber Gestão e Wiki
|
|
63
|
+
|
|
64
|
+
> Fonte: `src\design-system\docs\components\ModulesDialogDoc.tsx`
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Alert
|
|
69
|
+
|
|
70
|
+
Exibe uma mensagem de destaque para chamar a atenção do usuário. O componente inclui ícone automático baseado na variante.
|
|
71
|
+
|
|
72
|
+
**Uso:**
|
|
73
|
+
```tsx
|
|
74
|
+
import { Alert, AlertDescription, AlertTitle } from "forlogic-core"
|
|
75
|
+
|
|
76
|
+
<Alert variant="info">
|
|
77
|
+
<AlertTitle>Informação</AlertTitle>
|
|
78
|
+
<AlertDescription>
|
|
79
|
+
Esta é uma mensagem informativa para o usuário.
|
|
80
|
+
</AlertDescription>
|
|
81
|
+
</Alert>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Props:**
|
|
85
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
86
|
+
|------|------|--------|-----------|
|
|
87
|
+
| `showIcon` | `boolean` | true | Se deve exibir o ícone padrão da variante. |
|
|
88
|
+
| `className` | `string` | - | Classes CSS adicionais. |
|
|
89
|
+
|
|
90
|
+
**Exemplos:**
|
|
91
|
+
```tsx
|
|
92
|
+
<Alert variant=
|
|
93
|
+
```
|
|
94
|
+
```tsx
|
|
95
|
+
<Alert variant=
|
|
96
|
+
```
|
|
97
|
+
```tsx
|
|
98
|
+
<Alert variant=
|
|
99
|
+
```
|
|
100
|
+
```tsx
|
|
101
|
+
<Alert variant=
|
|
102
|
+
```
|
|
103
|
+
```tsx
|
|
104
|
+
<Alert variant=
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Acessibilidade:**
|
|
108
|
+
- Usa role=
|
|
109
|
+
- para anunciar automaticamente aos leitores de tela
|
|
110
|
+
- A cor não é o único meio de transmitir informações - ícones fornecem contexto adicional
|
|
111
|
+
- Estrutura HTML semântica com título e descrição claramente definidos
|
|
112
|
+
- Contraste de cores adequado para acessibilidade visual
|
|
113
|
+
|
|
114
|
+
> Fonte: `src\design-system\docs\components\AlertDoc.tsx`
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### Card
|
|
119
|
+
|
|
120
|
+
Exibe um card com cabeçalho, conteúdo e rodapé.
|
|
121
|
+
|
|
122
|
+
**Uso:**
|
|
123
|
+
```tsx
|
|
124
|
+
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "forlogic-core"
|
|
125
|
+
|
|
126
|
+
<Card>
|
|
127
|
+
<CardHeader>
|
|
128
|
+
<CardTitle>Card Title</CardTitle>
|
|
129
|
+
<CardDescription>Card Description</CardDescription>
|
|
130
|
+
</CardHeader>
|
|
131
|
+
<CardContent>
|
|
132
|
+
<p>Card Content</p>
|
|
133
|
+
</CardContent>
|
|
134
|
+
<CardFooter>
|
|
135
|
+
<p>Card Footer</p>
|
|
136
|
+
</CardFooter>
|
|
137
|
+
</Card>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Props:**
|
|
141
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
142
|
+
|------|------|--------|-----------|
|
|
143
|
+
| `className` | `string` | - | Classes CSS adicionais para o card. |
|
|
144
|
+
|
|
145
|
+
**Acessibilidade:**
|
|
146
|
+
- Estrutura semântica com elementos apropriados
|
|
147
|
+
- Hierarquia de cabeçalhos adequada
|
|
148
|
+
- Contraste de cores acessível
|
|
149
|
+
- Funciona com leitores de tela
|
|
150
|
+
|
|
151
|
+
> Fonte: `src\design-system\docs\components\CardDoc.tsx`
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### Popover
|
|
156
|
+
|
|
157
|
+
Exibe conteúdo rico em um portal, acionado por um botão.
|
|
158
|
+
|
|
159
|
+
**Uso:**
|
|
160
|
+
```tsx
|
|
161
|
+
import {
|
|
162
|
+
Popover,
|
|
163
|
+
PopoverContent,
|
|
164
|
+
PopoverTrigger,
|
|
165
|
+
Button,
|
|
166
|
+
Input,
|
|
167
|
+
Label
|
|
168
|
+
} from 'forlogic-core';
|
|
169
|
+
|
|
170
|
+
function DimensionsPopover() {
|
|
171
|
+
return (
|
|
172
|
+
<Popover>
|
|
173
|
+
<PopoverTrigger asChild>
|
|
174
|
+
<Button variant="outline">Abrir popover</Button>
|
|
175
|
+
</PopoverTrigger>
|
|
176
|
+
<PopoverContent className="w-80">
|
|
177
|
+
<div className="grid gap-4">
|
|
178
|
+
<div className="space-y-2">
|
|
179
|
+
<h4 className="font-medium leading-none">Dimensões</h4>
|
|
180
|
+
<p className="text-sm text-muted-foreground">
|
|
181
|
+
Defina as dimensões para a camada.
|
|
182
|
+
</p>
|
|
183
|
+
</div>
|
|
184
|
+
<div className="grid gap-2">
|
|
185
|
+
<div className="grid grid-cols-3 items-center gap-4">
|
|
186
|
+
<Label htmlFor="width">Largura</Label>
|
|
187
|
+
<Input id="width" defaultValue="100%" className="col-span-2 h-8" />
|
|
188
|
+
</div>
|
|
189
|
+
<div className="grid grid-cols-3 items-center gap-4">
|
|
190
|
+
<Label htmlFor="maxWidth">Máx. largura</Label>
|
|
191
|
+
<Input id="maxWidth" defaultValue="300px" className="col-span-2 h-8" />
|
|
192
|
+
</div>
|
|
193
|
+
<div className="grid grid-cols-3 items-center gap-4">
|
|
194
|
+
<Label htmlFor="height">Altura</Label>
|
|
195
|
+
<Input id="height" defaultValue="25px" className="col-span-2 h-8" />
|
|
196
|
+
</div>
|
|
197
|
+
<div className="grid grid-cols-3 items-center gap-4">
|
|
198
|
+
<Label htmlFor="maxHeight">Máx. altura</Label>
|
|
199
|
+
<Input id="maxHeight" defaultValue="none" className="col-span-2 h-8" />
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</PopoverContent>
|
|
204
|
+
</Popover>
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Props:**
|
|
210
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
211
|
+
|------|------|--------|-----------|
|
|
212
|
+
| `defaultOpen` | `boolean` | false | Estado aberto inicial (não controlado). |
|
|
213
|
+
| `open` | `boolean` | - | Estado aberto controlado. |
|
|
214
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado muda. |
|
|
215
|
+
| `modal` | `boolean` | false | Define comportamento modal (bloqueia interação externa). |
|
|
216
|
+
| `asChild (Trigger)` | `boolean` | false | Mescla props com o elemento filho. |
|
|
217
|
+
| `sideOffset` | `number` | 4 | Distância em pixels do trigger. |
|
|
218
|
+
| `alignOffset` | `number` | 0 | Deslocamento do alinhamento em pixels. |
|
|
219
|
+
| `avoidCollisions` | `boolean` | true | Evita colisões com bordas da viewport. |
|
|
220
|
+
| `collisionPadding` | `number | Padding` | 0 | Espaçamento da borda de colisão. |
|
|
221
|
+
| `hideWhenDetached` | `boolean` | false | Oculta quando desconectado do trigger. |
|
|
222
|
+
| `container` | `HTMLElement | null` | document.body | Container do portal. |
|
|
223
|
+
|
|
224
|
+
**Acessibilidade:**
|
|
225
|
+
- Segue o padrão WAI-ARIA Dialog (non-modal).
|
|
226
|
+
- Enter/Space: Abre/fecha o popover quando o trigger está focado.
|
|
227
|
+
- Escape: Fecha o popover e retorna o foco ao trigger.
|
|
228
|
+
- Tab: Navega entre elementos focáveis dentro do popover.
|
|
229
|
+
- Foco é automaticamente movido para o conteúdo ao abrir.
|
|
230
|
+
- Foco retorna ao trigger ao fechar.
|
|
231
|
+
- Atributos ARIA: aria-expanded, aria-haspopup.
|
|
232
|
+
- Data attributes: [data-state], [data-side], [data-align].
|
|
233
|
+
|
|
234
|
+
**Notas:**
|
|
235
|
+
- Use Popover para exibir conteúdo rico como formulários, detalhes ou ações secundárias.
|
|
236
|
+
- Prefira Dialog para conteúdo que requer atenção total do usuário.
|
|
237
|
+
- O prop asChild permite usar qualquer elemento como trigger.
|
|
238
|
+
- Combine com formulários para edição inline de campos.
|
|
239
|
+
|
|
240
|
+
> Fonte: `src\design-system\docs\components\PopoverDoc.tsx`
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### Tooltip
|
|
245
|
+
|
|
246
|
+
Um popup que exibe informações relacionadas a um elemento quando o elemento recebe foco do teclado ou o mouse passa sobre ele.
|
|
247
|
+
|
|
248
|
+
**Uso:**
|
|
249
|
+
```tsx
|
|
250
|
+
import {
|
|
251
|
+
Tooltip,
|
|
252
|
+
TooltipContent,
|
|
253
|
+
TooltipProvider,
|
|
254
|
+
TooltipTrigger,
|
|
255
|
+
} from 'forlogic-core';
|
|
256
|
+
|
|
257
|
+
<TooltipProvider>
|
|
258
|
+
<Tooltip>
|
|
259
|
+
<TooltipTrigger asChild>
|
|
260
|
+
<Button variant="outline">Hover</Button>
|
|
261
|
+
</TooltipTrigger>
|
|
262
|
+
<TooltipContent>
|
|
263
|
+
<p>Adicionar à biblioteca</p>
|
|
264
|
+
</TooltipContent>
|
|
265
|
+
</Tooltip>
|
|
266
|
+
</TooltipProvider>
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Props:**
|
|
270
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
271
|
+
|------|------|--------|-----------|
|
|
272
|
+
| `delayDuration` | `number` | 300 | TooltipProvider: Atraso em ms antes de exibir o tooltip |
|
|
273
|
+
| `skipDelayDuration` | `number` | 300 | TooltipProvider: Tempo para pular o delay ao mover entre tooltips |
|
|
274
|
+
| `disableHoverableContent` | `boolean` | false | TooltipProvider: Impede que o conteúdo permaneça aberto ao passar o mouse |
|
|
275
|
+
| `open` | `boolean` | - | Tooltip: Estado controlado de abertura |
|
|
276
|
+
| `defaultOpen` | `boolean` | false | Tooltip: Estado inicial (não controlado) |
|
|
277
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Tooltip: Callback quando o estado muda |
|
|
278
|
+
| `sideOffset` | `number` | 4 | TooltipContent: Distância em pixels do trigger |
|
|
279
|
+
| `alignOffset` | `number` | 0 | TooltipContent: Offset do alinhamento em pixels |
|
|
280
|
+
|
|
281
|
+
**Exemplos:**
|
|
282
|
+
```tsx
|
|
283
|
+
<TooltipProvider>
|
|
284
|
+
<Tooltip>
|
|
285
|
+
<TooltipTrigger asChild>
|
|
286
|
+
<Info className=
|
|
287
|
+
```
|
|
288
|
+
```tsx
|
|
289
|
+
<TooltipContent side=
|
|
290
|
+
```
|
|
291
|
+
```tsx
|
|
292
|
+
// Sem delay
|
|
293
|
+
<TooltipProvider delayDuration={0}>
|
|
294
|
+
<Tooltip>...</Tooltip>
|
|
295
|
+
</TooltipProvider>
|
|
296
|
+
|
|
297
|
+
// Delay de 1 segundo
|
|
298
|
+
<TooltipProvider delayDuration={1000}>
|
|
299
|
+
<Tooltip>...</Tooltip>
|
|
300
|
+
</TooltipProvider>
|
|
301
|
+
```
|
|
302
|
+
```tsx
|
|
303
|
+
// Provider compartilhado - mover entre tooltips é instantâneo
|
|
304
|
+
<TooltipProvider delayDuration={100} skipDelayDuration={0}>
|
|
305
|
+
<Tooltip>
|
|
306
|
+
<TooltipTrigger asChild>
|
|
307
|
+
<Button variant=
|
|
308
|
+
```
|
|
309
|
+
```tsx
|
|
310
|
+
<TooltipContent className=
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**Acessibilidade:**
|
|
314
|
+
- Exibido ao focar no elemento trigger via teclado
|
|
315
|
+
- Fechado automaticamente ao pressionar Escape
|
|
316
|
+
- role=
|
|
317
|
+
- aplicado automaticamente
|
|
318
|
+
- Associação via aria-describedby
|
|
319
|
+
- Não depende apenas de hover (acessível via focus)
|
|
320
|
+
|
|
321
|
+
**Notas:**
|
|
322
|
+
- Use TooltipProvider como wrapper para compartilhar delays entre tooltips
|
|
323
|
+
- Prefira Tooltip para dicas curtas, use Popover para conteúdo interativo
|
|
324
|
+
- Evite tooltips em elementos que requerem ação rápida (botões principais)
|
|
325
|
+
- Combine com ícones de informação para ajuda contextual
|
|
326
|
+
- Use delayDuration={0} para exibição instantânea quando necessário
|
|
327
|
+
|
|
328
|
+
> Fonte: `src\design-system\docs\components\TooltipDoc.tsx`
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
### Media
|
|
333
|
+
|
|
334
|
+
Módulo completo para upload, edição e renderização de imagens e vídeos. Inclui editores interativos, renderizadores otimizados e hook genérico de upload.
|
|
335
|
+
|
|
336
|
+
**Uso:**
|
|
337
|
+
```tsx
|
|
338
|
+
// Exemplo básico de upload de imagem
|
|
339
|
+
const { upload, uploading, progress } = useMediaUpload({
|
|
340
|
+
uploadFunction: async (file, options) => {
|
|
341
|
+
// Implementação do upload para seu storage
|
|
342
|
+
const url = await uploadToStorage(file, options);
|
|
343
|
+
return { url, path: file.name };
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// Renderizar uma imagem
|
|
348
|
+
<ImageRenderer
|
|
349
|
+
content={{
|
|
350
|
+
imageUrl: 'https://example.com/image.jpg',
|
|
351
|
+
caption: 'Legenda da imagem',
|
|
352
|
+
alignment: 'center'
|
|
353
|
+
}}
|
|
354
|
+
/>
|
|
355
|
+
|
|
356
|
+
// Renderizar um vídeo
|
|
357
|
+
<VideoRenderer
|
|
358
|
+
content={{
|
|
359
|
+
videoUrl: 'https://youtube.com/watch?v=...',
|
|
360
|
+
controls: true
|
|
361
|
+
}}
|
|
362
|
+
/>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
**Props:**
|
|
366
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
367
|
+
|------|------|--------|-----------|
|
|
368
|
+
| `uploadFunction` | `UploadFunction` | - | Função de upload customizada (obrigatória para uploads) |
|
|
369
|
+
| `deleteFunction` | `DeleteFunction` | - | Função de delete customizada |
|
|
370
|
+
| `defaultOptions` | `UploadOptions` | - | Opções padrão: bucket, maxSize, allowedTypes |
|
|
371
|
+
| `onSuccess` | `(result: UploadResult) => void` | - | Callback executado após upload bem-sucedido |
|
|
372
|
+
| `onError` | `(error: Error) => void` | - | Callback executado em caso de erro |
|
|
373
|
+
| `value` | `ImageBlockContent | VideoBlockContent` | - | Valor atual do conteúdo |
|
|
374
|
+
| `onChange` | `(value) => void` | - | Callback para mudanças no conteúdo |
|
|
375
|
+
| `onSubmit` | `(value) => void` | - | Callback ao salvar o conteúdo |
|
|
376
|
+
| `onCancel` | `() => void` | - | Callback ao cancelar edição |
|
|
377
|
+
| `uploadOptions` | `UploadOptions` | - | Opções de upload específicas para o editor |
|
|
378
|
+
| `content` | `ImageBlockContent | VideoBlockContent` | - | Conteúdo a ser renderizado |
|
|
379
|
+
| `className` | `string` | - | Classes CSS adicionais |
|
|
380
|
+
| `style` | `CSSProperties` | - | Estilos inline adicionais |
|
|
381
|
+
|
|
382
|
+
**Exemplos:**
|
|
383
|
+
```tsx
|
|
384
|
+
import { useMediaUpload, getSupabaseClient } from
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**Acessibilidade:**
|
|
388
|
+
- ImageRenderer inclui atributo alt obrigatório para acessibilidade
|
|
389
|
+
- VideoRenderer usa atributo title no iframe para identificação
|
|
390
|
+
- Controles de vídeo habilitados por padrão para navegação por teclado
|
|
391
|
+
- Autoplay sempre acompanhado de muted para conformidade com navegadores
|
|
392
|
+
- Links de download possuem texto descritivo
|
|
393
|
+
- Todos os inputs dos editores possuem labels associados
|
|
394
|
+
|
|
395
|
+
**Notas:**
|
|
396
|
+
- O hook useMediaUpload requer que o projeto forneça as funções de upload/delete
|
|
397
|
+
- A função uploadFunction deve retornar { url: string, path?: string }
|
|
398
|
+
- VideoRenderer detecta automaticamente YouTube e Vimeo pela URL
|
|
399
|
+
- Para vídeos locais, use o player HTML5 nativo com controles
|
|
400
|
+
- Dimensões são opcionais; imagens usam max-width: 100% por padrão
|
|
401
|
+
- O módulo não inclui implementação de storage - use Supabase, S3, etc.
|
|
402
|
+
- Helpers de imagem usam Canvas API para compressão e resize
|
|
403
|
+
|
|
404
|
+
> Fonte: `src\design-system\docs\components\MediaDoc.tsx`
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
### ModulesDialog
|
|
409
|
+
|
|
410
|
+
Dialog para navegação entre módulos do sistema.
|
|
411
|
+
|
|
412
|
+
**Uso:**
|
|
413
|
+
```tsx
|
|
414
|
+
import { useState } from 'react';
|
|
415
|
+
import { Button, ModulesDialog } from 'forlogic-core';
|
|
416
|
+
import { LayoutGrid } from 'lucide-react';
|
|
417
|
+
|
|
418
|
+
function App() {
|
|
419
|
+
const [open, setOpen] = useState(false);
|
|
420
|
+
|
|
421
|
+
return (
|
|
422
|
+
<>
|
|
423
|
+
<Button onClick={() => setOpen(true)}>
|
|
424
|
+
<LayoutGrid className="h-4 w-4 mr-2" />
|
|
425
|
+
Módulos
|
|
426
|
+
</Button>
|
|
427
|
+
|
|
428
|
+
<ModulesDialog
|
|
429
|
+
open={open}
|
|
430
|
+
onOpenChange={setOpen}
|
|
431
|
+
onModuleClick={(module) => console.log(module)}
|
|
432
|
+
/>
|
|
433
|
+
</>
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
**Props:**
|
|
439
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
440
|
+
|------|------|--------|-----------|
|
|
441
|
+
| `open` | `boolean` | - | Controla se o dialog está aberto |
|
|
442
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado muda |
|
|
443
|
+
| `onModuleClick` | `(module: Module) => void` | - | Callback ao clicar em um módulo. Default: navega via URL do módulo |
|
|
444
|
+
| `educaUrl` | `string` | https://educa.forlogic.net/ | URL do link do Forlogic Educa |
|
|
445
|
+
| `saberGestaoUrl` | `string` | https://sabergestao.com.br/ | URL do link do Saber Gestão |
|
|
446
|
+
|
|
447
|
+
**Acessibilidade:**
|
|
448
|
+
- Dialog acessível com role=
|
|
449
|
+
- e aria-modal=
|
|
450
|
+
- ,
|
|
451
|
+
|
|
452
|
+
- ,
|
|
453
|
+
|
|
454
|
+
- ,
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
**Notas:**
|
|
458
|
+
- Para separação entre módulos contratados e disponíveis (contractedModules, onModuleInterest), consulte a documentação de Module Access.
|
|
459
|
+
- Internamente usa o componente ModulesContent, compartilhado com o AccessDeniedDialog.
|
|
460
|
+
- 2 Abas de Grupos: Qualiex e Clássicos
|
|
461
|
+
- Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base
|
|
462
|
+
- Cards no Rodapé: Forlogic Educa, Saber Gestão e Wiki
|
|
463
|
+
|
|
464
|
+
> Fonte: `src\design-system\docs\components\ModulesDialogDoc.tsx`
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
### Onboarding Dialog
|
|
469
|
+
|
|
470
|
+
Componente para fluxos de onboarding em múltiplos passos. Suporta imagens estáticas, GIFs, navegação entre steps e indicador de progresso com dropdown.
|
|
471
|
+
|
|
472
|
+
**Uso:**
|
|
473
|
+
```tsx
|
|
474
|
+
import { useState } from "react";
|
|
475
|
+
import { OnboardingDialog, OnboardingStep, Button } from "forlogic-core";
|
|
476
|
+
|
|
477
|
+
function App() {
|
|
478
|
+
const [open, setOpen] = useState(false);
|
|
479
|
+
|
|
480
|
+
const steps: OnboardingStep[] = [
|
|
481
|
+
{
|
|
482
|
+
id: "welcome",
|
|
483
|
+
title: "Bem-vindo ao Sistema",
|
|
484
|
+
description: "Neste espaço, você irá adicionar o texto que explica o processo de onboarding.",
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
id: "features",
|
|
488
|
+
title: "Conheça as Funcionalidades",
|
|
489
|
+
description: "Descubra todas as ferramentas disponíveis para você.",
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
id: "start",
|
|
493
|
+
title: "Comece Agora",
|
|
494
|
+
description: "Você está pronto para começar a usar o sistema!",
|
|
495
|
+
},
|
|
496
|
+
];
|
|
497
|
+
|
|
498
|
+
return (
|
|
499
|
+
<>
|
|
500
|
+
<Button onClick={() => setOpen(true)}>Iniciar Onboarding</Button>
|
|
501
|
+
<OnboardingDialog
|
|
502
|
+
open={open}
|
|
503
|
+
onOpenChange={setOpen}
|
|
504
|
+
steps={steps}
|
|
505
|
+
onComplete={() => console.log("Onboarding concluído!")}
|
|
506
|
+
/>
|
|
507
|
+
</>
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
**Props:**
|
|
513
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
514
|
+
|------|------|--------|-----------|
|
|
515
|
+
| `open` | `boolean` | - | Controla se o dialog está aberto. (obrigatório) |
|
|
516
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Callback quando o estado de aberto muda. (obrigatório) |
|
|
517
|
+
|
|
518
|
+
**Acessibilidade:**
|
|
519
|
+
- O dialog usa os padrões de acessibilidade do Radix UI Dialog.
|
|
520
|
+
- O botão de fechar possui sr-only label.
|
|
521
|
+
- Navegação por teclado suportada (Tab, Escape).
|
|
522
|
+
- Focus trap ativo quando o dialog está aberto.
|
|
523
|
+
|
|
524
|
+
**Notas:**
|
|
525
|
+
- O componente suporta tanto imagens estáticas quanto GIFs animados.
|
|
526
|
+
- Use o modo controlado (currentStepIndex + onCurrentStepChange) quando precisar sincronizar o estado com outros componentes.
|
|
527
|
+
- Os textos dos botões são customizáveis para suporte a i18n.
|
|
528
|
+
- Para anúncios de features, use com um único step e showProgressIndicator={false}.
|
|
529
|
+
- O botão
|
|
530
|
+
- só aparece a partir do segundo step.
|
|
531
|
+
|
|
532
|
+
> Fonte: `src\design-system\docs\components\OnboardingDialogDoc.tsx`
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
536
|
+
### Online Editor Dialog
|
|
537
|
+
|
|
538
|
+
*Documentação não extraída automaticamente. Consulte o Design System interativo em `/ds`.*
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
### Terms of Use
|
|
543
|
+
|
|
544
|
+
Componentes para exibir e gerenciar termos de uso. Inclui TermsOfUseDialog (notificação de termos atualizados) e TermsOfUseViewer (visualização full-screen do documento com opção de assinatura).
|
|
545
|
+
|
|
546
|
+
**Uso:**
|
|
547
|
+
```tsx
|
|
548
|
+
import { TermsOfUseDialog, TermsOfUseViewer } from 'forlogic-core';
|
|
549
|
+
|
|
550
|
+
// Dialog de notificação
|
|
551
|
+
<TermsOfUseDialog
|
|
552
|
+
term={term}
|
|
553
|
+
open={open}
|
|
554
|
+
onClose={() => setOpen(false)}
|
|
555
|
+
onAgree={(termId) => handleAgree(termId)}
|
|
556
|
+
/>
|
|
557
|
+
|
|
558
|
+
// Viewer full-screen
|
|
559
|
+
<TermsOfUseViewer
|
|
560
|
+
term={term}
|
|
561
|
+
open={open}
|
|
562
|
+
onClose={() => setOpen(false)}
|
|
563
|
+
onSign={(termId) => handleSign(termId)}
|
|
564
|
+
/>
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
**Props:**
|
|
568
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
569
|
+
|------|------|--------|-----------|
|
|
570
|
+
| `term` | `TermOfUse` | - | Termo a exibir (id, description, file, type, hasUserSignature) |
|
|
571
|
+
| `open` | `boolean` | - | Controla visibilidade |
|
|
572
|
+
| `onClose` | `() => void` | - | Callback ao fechar |
|
|
573
|
+
| `onAgree` | `(termId) => void` | - | Callback ao concordar (TermsOfUseDialog) |
|
|
574
|
+
| `onSign` | `(termId) => void` | - | Callback ao assinar (TermsOfUseViewer) |
|
|
575
|
+
| `viewOnly` | `boolean` | false | Oculta botão de assinatura (TermsOfUseViewer) |
|
|
576
|
+
|
|
577
|
+
**Notas:**
|
|
578
|
+
- TermsOfUseViewer oculta botão automaticamente quando hasUserSignature=true
|
|
579
|
+
|
|
580
|
+
> Fonte: `src\design-system\docs\components\TermsOfUseDoc.tsx`
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
### Viewer Dialog
|
|
585
|
+
|
|
586
|
+
*Documentação não extraída automaticamente. Consulte o Design System interativo em `/ds`.*
|
|
587
|
+
|
|
588
|
+
---
|