forlogic-core 2.2.5 → 2.2.7
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/import/attachment-idempotency-registry.md +8 -8
- package/.note/memory/features/import/attachment-strategy.md +30 -30
- package/.note/memory/patterns/admin-i18n-policy.md +20 -20
- package/.note/memory/patterns/alias-url-resolution.md +69 -69
- package/.note/memory/patterns/doc-sync-rule.md +35 -35
- package/.note/memory/patterns/documentation-standard.md +17 -17
- package/.note/memory/patterns/dynamic-supabase-config.md +4 -4
- package/.note/memory/patterns/environment-detection-logic.md +35 -35
- package/.note/memory/patterns/i18n-architecture.md +3 -3
- package/README.md +120 -120
- package/dist/README.md +1079 -0
- package/dist/bin/bootstrap.js +40 -0
- package/dist/bin/pull-docs.js +186 -0
- package/dist/components/ui/color-picker.d.ts +2 -0
- package/dist/components/ui/combo-tree.d.ts +3 -1
- package/dist/components/ui/combobox.d.ts +2 -1
- package/dist/components/ui/select.d.ts +9 -2
- package/dist/docs/KNOWLEDGE.md +109 -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/docs/PUBLISH.md +168 -168
- package/docs/STORAGE_BUCKETS.md +456 -456
- package/docs/SUPABASE_SECRETS.md +122 -122
- package/docs/WORKSPACE_KNOWLEDGE.md +154 -154
- package/docs/design-system/buttons-actions.md +130 -130
- package/docs/design-system/charts-dashboards.md +301 -340
- package/docs/design-system/crud.md +114 -174
- package/docs/design-system/data-display.md +106 -106
- package/docs/design-system/dialogs.md +212 -212
- package/docs/design-system/domain.md +329 -319
- package/docs/design-system/examples.md +275 -275
- package/docs/design-system/foundation.md +1 -1
- package/docs/design-system/inputs.md +137 -132
- package/docs/design-system/layout.md +154 -202
- package/docs/design-system/navigation.md +331 -272
- package/docs/design-system/notifications-feedback.md +34 -34
- package/docs/design-system/patterns/README.md +53 -53
- package/docs/design-system/patterns/action-button.md +22 -22
- package/docs/design-system/patterns/alertdialog-deletion.md +46 -46
- package/docs/design-system/patterns/baseform-custom-fields.md +59 -59
- package/docs/design-system/patterns/baseform-usage.md +42 -42
- package/docs/design-system/patterns/body-content-scroll.md +56 -56
- package/docs/design-system/patterns/combo-tree.md +23 -23
- package/docs/design-system/patterns/components-registry.md +17 -17
- package/docs/design-system/patterns/core-providers.md +41 -41
- package/docs/design-system/patterns/crud-bulk-actions.md +12 -12
- package/docs/design-system/patterns/crud-config-props.md +16 -16
- package/docs/design-system/patterns/crud-defaults.md +17 -17
- package/docs/design-system/patterns/crud-toolbar.md +28 -28
- package/docs/design-system/patterns/delete-confirmation.md +40 -40
- package/docs/design-system/patterns/dialog-body-scroll.md +26 -26
- package/docs/design-system/patterns/dialog-structure.md +32 -32
- package/docs/design-system/patterns/dialog-variants.md +41 -41
- package/docs/design-system/patterns/feature-flags.md +81 -81
- package/docs/design-system/patterns/header-metadata.md +57 -57
- package/docs/design-system/patterns/i18n-setup.md +117 -117
- package/docs/design-system/patterns/pagination.md +27 -27
- package/docs/design-system/patterns/single-scroll.md +39 -39
- package/docs/design-system/patterns/vite-tailwind-setup.md +49 -49
- package/docs/design-system/platform.md +18 -18
- package/docs/design-system/selectors.md +287 -258
- package/docs/design-system/tables-grids.md +38 -95
- package/package.json +152 -152
- package/dist/assets/docs-BEwTKYu3.css +0 -1
- package/dist/assets/docs-Bgpz6ETN.js +0 -10752
- package/dist/assets/index-SqMwTzMJ.js +0 -97
- package/dist/index.html +0 -34
|
@@ -11,27 +11,27 @@ Dialog para navegação entre módulos do sistema.
|
|
|
11
11
|
|
|
12
12
|
**Uso:**
|
|
13
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
|
-
);
|
|
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
35
|
}
|
|
36
36
|
```
|
|
37
37
|
|
|
@@ -47,11 +47,11 @@ function App() {
|
|
|
47
47
|
**Acessibilidade:**
|
|
48
48
|
- Dialog acessível com role=
|
|
49
49
|
- e aria-modal=
|
|
50
|
-
- ,
|
|
50
|
+
- ,
|
|
51
51
|
|
|
52
|
-
- ,
|
|
52
|
+
- ,
|
|
53
53
|
|
|
54
|
-
- ,
|
|
54
|
+
- ,
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
**Notas:**
|
|
@@ -61,7 +61,7 @@ function App() {
|
|
|
61
61
|
- Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base
|
|
62
62
|
- Cards no Rodapé: Forlogic Educa, Saber Gestão e Wiki
|
|
63
63
|
|
|
64
|
-
> Fonte: `src
|
|
64
|
+
> Fonte: `src\design-system\docs\components\ModulesDialogDoc.tsx`
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
@@ -71,13 +71,13 @@ Exibe uma mensagem de destaque para chamar a atenção do usuário. O componente
|
|
|
71
71
|
|
|
72
72
|
**Uso:**
|
|
73
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>
|
|
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
81
|
</Alert>
|
|
82
82
|
```
|
|
83
83
|
|
|
@@ -111,7 +111,7 @@ import { Alert, AlertDescription, AlertTitle } from "forlogic-core"
|
|
|
111
111
|
- Estrutura HTML semântica com título e descrição claramente definidos
|
|
112
112
|
- Contraste de cores adequado para acessibilidade visual
|
|
113
113
|
|
|
114
|
-
> Fonte: `src
|
|
114
|
+
> Fonte: `src\design-system\docs\components\AlertDoc.tsx`
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
@@ -121,19 +121,19 @@ Exibe um card com cabeçalho, conteúdo e rodapé.
|
|
|
121
121
|
|
|
122
122
|
**Uso:**
|
|
123
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>
|
|
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
137
|
</Card>
|
|
138
138
|
```
|
|
139
139
|
|
|
@@ -148,7 +148,7 @@ import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }
|
|
|
148
148
|
- Contraste de cores acessível
|
|
149
149
|
- Funciona com leitores de tela
|
|
150
150
|
|
|
151
|
-
> Fonte: `src
|
|
151
|
+
> Fonte: `src\design-system\docs\components\CardDoc.tsx`
|
|
152
152
|
|
|
153
153
|
---
|
|
154
154
|
|
|
@@ -158,51 +158,51 @@ Exibe conteúdo rico em um portal, acionado por um botão.
|
|
|
158
158
|
|
|
159
159
|
**Uso:**
|
|
160
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
|
-
);
|
|
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
206
|
}
|
|
207
207
|
```
|
|
208
208
|
|
|
@@ -237,7 +237,7 @@ function DimensionsPopover() {
|
|
|
237
237
|
- O prop asChild permite usar qualquer elemento como trigger.
|
|
238
238
|
- Combine com formulários para edição inline de campos.
|
|
239
239
|
|
|
240
|
-
> Fonte: `src
|
|
240
|
+
> Fonte: `src\design-system\docs\components\PopoverDoc.tsx`
|
|
241
241
|
|
|
242
242
|
---
|
|
243
243
|
|
|
@@ -247,22 +247,22 @@ Um popup que exibe informações relacionadas a um elemento quando o elemento re
|
|
|
247
247
|
|
|
248
248
|
**Uso:**
|
|
249
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>
|
|
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
266
|
</TooltipProvider>
|
|
267
267
|
```
|
|
268
268
|
|
|
@@ -281,30 +281,30 @@ import {
|
|
|
281
281
|
|
|
282
282
|
**Exemplos:**
|
|
283
283
|
```tsx
|
|
284
|
-
<TooltipProvider>
|
|
285
|
-
<Tooltip>
|
|
286
|
-
<TooltipTrigger asChild>
|
|
284
|
+
<TooltipProvider>
|
|
285
|
+
<Tooltip>
|
|
286
|
+
<TooltipTrigger asChild>
|
|
287
287
|
<Info className=
|
|
288
288
|
```
|
|
289
289
|
```tsx
|
|
290
290
|
<TooltipContent side=
|
|
291
291
|
```
|
|
292
292
|
```tsx
|
|
293
|
-
// Sem delay
|
|
294
|
-
<TooltipProvider delayDuration={0}>
|
|
295
|
-
<Tooltip>...</Tooltip>
|
|
296
|
-
</TooltipProvider>
|
|
297
|
-
|
|
298
|
-
// Delay de 1 segundo
|
|
299
|
-
<TooltipProvider delayDuration={1000}>
|
|
300
|
-
<Tooltip>...</Tooltip>
|
|
293
|
+
// Sem delay
|
|
294
|
+
<TooltipProvider delayDuration={0}>
|
|
295
|
+
<Tooltip>...</Tooltip>
|
|
296
|
+
</TooltipProvider>
|
|
297
|
+
|
|
298
|
+
// Delay de 1 segundo
|
|
299
|
+
<TooltipProvider delayDuration={1000}>
|
|
300
|
+
<Tooltip>...</Tooltip>
|
|
301
301
|
</TooltipProvider>
|
|
302
302
|
```
|
|
303
303
|
```tsx
|
|
304
|
-
// Provider compartilhado - mover entre tooltips é instantâneo
|
|
305
|
-
<TooltipProvider delayDuration={100} skipDelayDuration={0}>
|
|
306
|
-
<Tooltip>
|
|
307
|
-
<TooltipTrigger asChild>
|
|
304
|
+
// Provider compartilhado - mover entre tooltips é instantâneo
|
|
305
|
+
<TooltipProvider delayDuration={100} skipDelayDuration={0}>
|
|
306
|
+
<Tooltip>
|
|
307
|
+
<TooltipTrigger asChild>
|
|
308
308
|
<Button variant=
|
|
309
309
|
```
|
|
310
310
|
```tsx
|
|
@@ -327,7 +327,7 @@ import {
|
|
|
327
327
|
- Use delayDuration={0} para exibição instantânea quando necessário
|
|
328
328
|
- TooltipContent é renderizado via Portal (default: document.body), evitando clipping em sidebars, cards com scroll, dialogs e demais containers com overflow. Use a prop opcional container para portar para um nó específico.
|
|
329
329
|
|
|
330
|
-
> Fonte: `src
|
|
330
|
+
> Fonte: `src\design-system\docs\components\TooltipDoc.tsx`
|
|
331
331
|
|
|
332
332
|
---
|
|
333
333
|
|
|
@@ -337,30 +337,30 @@ Módulo completo para upload, edição e renderização de imagens e vídeos. In
|
|
|
337
337
|
|
|
338
338
|
**Uso:**
|
|
339
339
|
```tsx
|
|
340
|
-
// Exemplo básico de upload de imagem
|
|
341
|
-
const { upload, uploading, progress } = useMediaUpload({
|
|
342
|
-
uploadFunction: async (file, options) => {
|
|
343
|
-
// Implementação do upload para seu storage
|
|
344
|
-
const url = await uploadToStorage(file, options);
|
|
345
|
-
return { url, path: file.name };
|
|
346
|
-
}
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
// Renderizar uma imagem
|
|
350
|
-
<ImageRenderer
|
|
351
|
-
content={{
|
|
352
|
-
imageUrl: 'https://example.com/image.jpg',
|
|
353
|
-
caption: 'Legenda da imagem',
|
|
354
|
-
alignment: 'center'
|
|
355
|
-
}}
|
|
356
|
-
/>
|
|
357
|
-
|
|
358
|
-
// Renderizar um vídeo
|
|
359
|
-
<VideoRenderer
|
|
360
|
-
content={{
|
|
361
|
-
videoUrl: 'https://youtube.com/watch?v=...',
|
|
362
|
-
controls: true
|
|
363
|
-
}}
|
|
340
|
+
// Exemplo básico de upload de imagem
|
|
341
|
+
const { upload, uploading, progress } = useMediaUpload({
|
|
342
|
+
uploadFunction: async (file, options) => {
|
|
343
|
+
// Implementação do upload para seu storage
|
|
344
|
+
const url = await uploadToStorage(file, options);
|
|
345
|
+
return { url, path: file.name };
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// Renderizar uma imagem
|
|
350
|
+
<ImageRenderer
|
|
351
|
+
content={{
|
|
352
|
+
imageUrl: 'https://example.com/image.jpg',
|
|
353
|
+
caption: 'Legenda da imagem',
|
|
354
|
+
alignment: 'center'
|
|
355
|
+
}}
|
|
356
|
+
/>
|
|
357
|
+
|
|
358
|
+
// Renderizar um vídeo
|
|
359
|
+
<VideoRenderer
|
|
360
|
+
content={{
|
|
361
|
+
videoUrl: 'https://youtube.com/watch?v=...',
|
|
362
|
+
controls: true
|
|
363
|
+
}}
|
|
364
364
|
/>
|
|
365
365
|
```
|
|
366
366
|
|
|
@@ -403,7 +403,7 @@ import { useMediaUpload, getSupabaseClient } from
|
|
|
403
403
|
- O módulo não inclui implementação de storage - use Supabase, S3, etc.
|
|
404
404
|
- Helpers de imagem usam Canvas API para compressão e resize
|
|
405
405
|
|
|
406
|
-
> Fonte: `src
|
|
406
|
+
> Fonte: `src\design-system\docs\components\MediaDoc.tsx`
|
|
407
407
|
|
|
408
408
|
---
|
|
409
409
|
|
|
@@ -413,27 +413,27 @@ Dialog para navegação entre módulos do sistema.
|
|
|
413
413
|
|
|
414
414
|
**Uso:**
|
|
415
415
|
```tsx
|
|
416
|
-
import { useState } from 'react';
|
|
417
|
-
import { Button, ModulesDialog } from 'forlogic-core';
|
|
418
|
-
import { LayoutGrid } from 'lucide-react';
|
|
419
|
-
|
|
420
|
-
function App() {
|
|
421
|
-
const [open, setOpen] = useState(false);
|
|
422
|
-
|
|
423
|
-
return (
|
|
424
|
-
<>
|
|
425
|
-
<Button onClick={() => setOpen(true)}>
|
|
426
|
-
<LayoutGrid className="h-4 w-4 mr-2" />
|
|
427
|
-
Módulos
|
|
428
|
-
</Button>
|
|
429
|
-
|
|
430
|
-
<ModulesDialog
|
|
431
|
-
open={open}
|
|
432
|
-
onOpenChange={setOpen}
|
|
433
|
-
onModuleClick={(module) => console.log(module)}
|
|
434
|
-
/>
|
|
435
|
-
</>
|
|
436
|
-
);
|
|
416
|
+
import { useState } from 'react';
|
|
417
|
+
import { Button, ModulesDialog } from 'forlogic-core';
|
|
418
|
+
import { LayoutGrid } from 'lucide-react';
|
|
419
|
+
|
|
420
|
+
function App() {
|
|
421
|
+
const [open, setOpen] = useState(false);
|
|
422
|
+
|
|
423
|
+
return (
|
|
424
|
+
<>
|
|
425
|
+
<Button onClick={() => setOpen(true)}>
|
|
426
|
+
<LayoutGrid className="h-4 w-4 mr-2" />
|
|
427
|
+
Módulos
|
|
428
|
+
</Button>
|
|
429
|
+
|
|
430
|
+
<ModulesDialog
|
|
431
|
+
open={open}
|
|
432
|
+
onOpenChange={setOpen}
|
|
433
|
+
onModuleClick={(module) => console.log(module)}
|
|
434
|
+
/>
|
|
435
|
+
</>
|
|
436
|
+
);
|
|
437
437
|
}
|
|
438
438
|
```
|
|
439
439
|
|
|
@@ -449,11 +449,11 @@ function App() {
|
|
|
449
449
|
**Acessibilidade:**
|
|
450
450
|
- Dialog acessível com role=
|
|
451
451
|
- e aria-modal=
|
|
452
|
-
- ,
|
|
452
|
+
- ,
|
|
453
453
|
|
|
454
|
-
- ,
|
|
454
|
+
- ,
|
|
455
455
|
|
|
456
|
-
- ,
|
|
456
|
+
- ,
|
|
457
457
|
|
|
458
458
|
|
|
459
459
|
**Notas:**
|
|
@@ -463,7 +463,7 @@ function App() {
|
|
|
463
463
|
- Grid Responsivo: 4 colunas em XL, 3 em MD, 2 em base
|
|
464
464
|
- Cards no Rodapé: Forlogic Educa, Saber Gestão e Wiki
|
|
465
465
|
|
|
466
|
-
> Fonte: `src
|
|
466
|
+
> Fonte: `src\design-system\docs\components\ModulesDialogDoc.tsx`
|
|
467
467
|
|
|
468
468
|
---
|
|
469
469
|
|
|
@@ -473,41 +473,41 @@ Componente para fluxos de onboarding em múltiplos passos. Suporta imagens está
|
|
|
473
473
|
|
|
474
474
|
**Uso:**
|
|
475
475
|
```tsx
|
|
476
|
-
import { useState } from "react";
|
|
477
|
-
import { OnboardingDialog, OnboardingStep, Button } from "forlogic-core";
|
|
478
|
-
|
|
479
|
-
function App() {
|
|
480
|
-
const [open, setOpen] = useState(false);
|
|
481
|
-
|
|
482
|
-
const steps: OnboardingStep[] = [
|
|
483
|
-
{
|
|
484
|
-
id: "welcome",
|
|
485
|
-
title: "Bem-vindo ao Sistema",
|
|
486
|
-
description: "Neste espaço, você irá adicionar o texto que explica o processo de onboarding.",
|
|
487
|
-
},
|
|
488
|
-
{
|
|
489
|
-
id: "features",
|
|
490
|
-
title: "Conheça as Funcionalidades",
|
|
491
|
-
description: "Descubra todas as ferramentas disponíveis para você.",
|
|
492
|
-
},
|
|
493
|
-
{
|
|
494
|
-
id: "start",
|
|
495
|
-
title: "Comece Agora",
|
|
496
|
-
description: "Você está pronto para começar a usar o sistema!",
|
|
497
|
-
},
|
|
498
|
-
];
|
|
499
|
-
|
|
500
|
-
return (
|
|
501
|
-
<>
|
|
502
|
-
<Button onClick={() => setOpen(true)}>Iniciar Onboarding</Button>
|
|
503
|
-
<OnboardingDialog
|
|
504
|
-
open={open}
|
|
505
|
-
onOpenChange={setOpen}
|
|
506
|
-
steps={steps}
|
|
507
|
-
onComplete={() => console.log("Onboarding concluído!")}
|
|
508
|
-
/>
|
|
509
|
-
</>
|
|
510
|
-
);
|
|
476
|
+
import { useState } from "react";
|
|
477
|
+
import { OnboardingDialog, OnboardingStep, Button } from "forlogic-core";
|
|
478
|
+
|
|
479
|
+
function App() {
|
|
480
|
+
const [open, setOpen] = useState(false);
|
|
481
|
+
|
|
482
|
+
const steps: OnboardingStep[] = [
|
|
483
|
+
{
|
|
484
|
+
id: "welcome",
|
|
485
|
+
title: "Bem-vindo ao Sistema",
|
|
486
|
+
description: "Neste espaço, você irá adicionar o texto que explica o processo de onboarding.",
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
id: "features",
|
|
490
|
+
title: "Conheça as Funcionalidades",
|
|
491
|
+
description: "Descubra todas as ferramentas disponíveis para você.",
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
id: "start",
|
|
495
|
+
title: "Comece Agora",
|
|
496
|
+
description: "Você está pronto para começar a usar o sistema!",
|
|
497
|
+
},
|
|
498
|
+
];
|
|
499
|
+
|
|
500
|
+
return (
|
|
501
|
+
<>
|
|
502
|
+
<Button onClick={() => setOpen(true)}>Iniciar Onboarding</Button>
|
|
503
|
+
<OnboardingDialog
|
|
504
|
+
open={open}
|
|
505
|
+
onOpenChange={setOpen}
|
|
506
|
+
steps={steps}
|
|
507
|
+
onComplete={() => console.log("Onboarding concluído!")}
|
|
508
|
+
/>
|
|
509
|
+
</>
|
|
510
|
+
);
|
|
511
511
|
}
|
|
512
512
|
```
|
|
513
513
|
|
|
@@ -531,7 +531,7 @@ function App() {
|
|
|
531
531
|
- O botão
|
|
532
532
|
- só aparece a partir do segundo step.
|
|
533
533
|
|
|
534
|
-
> Fonte: `src
|
|
534
|
+
> Fonte: `src\design-system\docs\components\OnboardingDialogDoc.tsx`
|
|
535
535
|
|
|
536
536
|
---
|
|
537
537
|
|
|
@@ -579,7 +579,7 @@ import { TermsOfUseDialog, TermsOfUseViewer } from 'forlogic-core';
|
|
|
579
579
|
**Notas:**
|
|
580
580
|
- TermsOfUseViewer oculta botão automaticamente quando hasUserSignature=true
|
|
581
581
|
|
|
582
|
-
> Fonte: `src
|
|
582
|
+
> Fonte: `src\design-system\docs\components\TermsOfUseDoc.tsx`
|
|
583
583
|
|
|
584
584
|
---
|
|
585
585
|
|