forlogic-core 2.0.3 → 2.0.4
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/README.md +187 -917
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/types/sidebar.d.ts +2 -1
- 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 +427 -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 +651 -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 +536 -0
- package/docs/design-system/layout.md +351 -0
- package/docs/design-system/navigation.md +599 -0
- package/docs/design-system/notifications-feedback.md +137 -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
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
<!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
|
|
2
|
+
<!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
|
|
3
|
+
|
|
4
|
+
# CRUD
|
|
5
|
+
|
|
6
|
+
Categoria: **CRUD** | 8 componentes
|
|
7
|
+
|
|
8
|
+
### CRUD Overview
|
|
9
|
+
|
|
10
|
+
Visão geral da arquitetura CRUD do forlogic-core. Explica os 3 níveis de abstração: createCrudPage (alto nível), CrudTable/CrudGrid (médio nível) e Primitives (baixo nível).
|
|
11
|
+
|
|
12
|
+
**Uso:**
|
|
13
|
+
```tsx
|
|
14
|
+
import { createSimpleService, createCrudPage } from 'forlogic-core';
|
|
15
|
+
|
|
16
|
+
const notesService = createSimpleService({
|
|
17
|
+
tableName: 'notes',
|
|
18
|
+
entityName: 'nota',
|
|
19
|
+
searchFields: ['title', 'content'],
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const NotesPage = createCrudPage({
|
|
23
|
+
title: 'Notas',
|
|
24
|
+
service: notesService,
|
|
25
|
+
columns: [
|
|
26
|
+
{ key: 'title', header: 'Título' },
|
|
27
|
+
{ key: 'content', header: 'Conteúdo' },
|
|
28
|
+
],
|
|
29
|
+
formSections: [{
|
|
30
|
+
id: 'main',
|
|
31
|
+
fields: [
|
|
32
|
+
{ name: 'title', label: 'Título', type: 'text', required: true },
|
|
33
|
+
{ name: 'content', label: 'Conteúdo', type: 'textarea' },
|
|
34
|
+
],
|
|
35
|
+
}],
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Notas:**
|
|
40
|
+
- Nível Alto: createCrudPage — página CRUD completa com 1 configuração
|
|
41
|
+
- Nível Médio: CrudTable/CrudGrid — componentes compostos para layouts customizados
|
|
42
|
+
- Nível Baixo: Primitives (DataTable, DataPagination, DataFilterBar) — controle total
|
|
43
|
+
|
|
44
|
+
> Fonte: `src\design-system\docs\components\crud\CrudOverviewDoc.tsx`
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### createCrudPage
|
|
49
|
+
|
|
50
|
+
Factory de alto nível que gera uma página CRUD completa com ~15 linhas de configuração declarativa.
|
|
51
|
+
|
|
52
|
+
> Fonte: `src\design-system\docs\components\crud\CreateCrudPageDoc.tsx`
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### CrudActionBar
|
|
57
|
+
|
|
58
|
+
Barra de ações unificada usada por todos os componentes CRUD (CrudTable, CrudGrid, createCrudPage) para garantir UX consistente.
|
|
59
|
+
|
|
60
|
+
> Fonte: `src\design-system\docs\components\crud\CrudActionBarDoc.tsx`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### CrudTable
|
|
65
|
+
|
|
66
|
+
Componente de tabela CRUD completo com ordenação, seleção, resize de colunas, ações em massa e paginação integrada com useCrud.
|
|
67
|
+
|
|
68
|
+
> Fonte: `src\design-system\docs\components\crud\CrudTableDoc.tsx`
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### CrudGrid
|
|
73
|
+
|
|
74
|
+
Componente para exibir dados em formato de grade (cards) com todas as funcionalidades CRUD. Alternativa visual ao CrudTable para listagens com layout mais visual.
|
|
75
|
+
|
|
76
|
+
> Fonte: `src\design-system\docs\components\crud\CrudGridDoc.tsx`
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### CRUD Primitives
|
|
81
|
+
|
|
82
|
+
Componentes de baixo nível para interfaces CRUD totalmente customizadas com controle total sobre layout e comportamento. Aliases disponíveis: DataTable, DataFilterBar, DataPagination.
|
|
83
|
+
|
|
84
|
+
> Fonte: `src\design-system\docs\components\crud\CrudPrimitivesDoc.tsx`
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Pagination
|
|
89
|
+
|
|
90
|
+
Barra de paginação completa com seletor de itens por página e controles de navegação.
|
|
91
|
+
|
|
92
|
+
**Uso:**
|
|
93
|
+
```tsx
|
|
94
|
+
import { Pagination } from "forlogic-core/crud"
|
|
95
|
+
|
|
96
|
+
<Pagination
|
|
97
|
+
currentPage={1}
|
|
98
|
+
totalPages={10}
|
|
99
|
+
totalItems={100}
|
|
100
|
+
itemsPerPage={10}
|
|
101
|
+
onPageChange={(page) => setPage(page)}
|
|
102
|
+
onItemsPerPageChange={(limit) => setLimit(limit)}
|
|
103
|
+
variant="full"
|
|
104
|
+
/>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Props:**
|
|
108
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
109
|
+
|------|------|--------|-----------|
|
|
110
|
+
| `currentPage` | `number` | - | Página atual (1-indexed) |
|
|
111
|
+
| `totalPages` | `number` | - | Número total de páginas |
|
|
112
|
+
| `totalItems` | `number` | - | Número total de itens |
|
|
113
|
+
| `itemsPerPage` | `number` | - | Quantidade de itens por página |
|
|
114
|
+
| `onPageChange` | `(page: number) => void` | - | Callback ao mudar de página |
|
|
115
|
+
| `onItemsPerPageChange` | `(limit: number) => void` | - | Callback ao mudar itens por página |
|
|
116
|
+
|
|
117
|
+
**Exemplos:**
|
|
118
|
+
```tsx
|
|
119
|
+
<Pagination
|
|
120
|
+
currentPage={1}
|
|
121
|
+
totalPages={2}
|
|
122
|
+
totalItems={15}
|
|
123
|
+
itemsPerPage={10}
|
|
124
|
+
onPageChange={setPage}
|
|
125
|
+
onItemsPerPageChange={setItemsPerPage}
|
|
126
|
+
variant=
|
|
127
|
+
```
|
|
128
|
+
```tsx
|
|
129
|
+
<Pagination
|
|
130
|
+
currentPage={3}
|
|
131
|
+
totalPages={25}
|
|
132
|
+
totalItems={250}
|
|
133
|
+
itemsPerPage={10}
|
|
134
|
+
onPageChange={setPage}
|
|
135
|
+
onItemsPerPageChange={setItemsPerPage}
|
|
136
|
+
variant=
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Acessibilidade:**
|
|
140
|
+
- Navegável por teclado
|
|
141
|
+
- Labels ARIA apropriados
|
|
142
|
+
- Indicação visual da página atual
|
|
143
|
+
- Botões desabilitados quando não aplicável
|
|
144
|
+
- Amigável para leitores de tela
|
|
145
|
+
|
|
146
|
+
> Fonte: `src\design-system\docs\components\PaginationDoc.tsx`
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### Form
|
|
151
|
+
|
|
152
|
+
Construindo formulários com React Hook Form e Zod.
|
|
153
|
+
|
|
154
|
+
**Uso:**
|
|
155
|
+
```tsx
|
|
156
|
+
import { zodResolver } from "@hookform/resolvers/zod"
|
|
157
|
+
import { useForm } from "react-hook-form"
|
|
158
|
+
import * as z from "zod"
|
|
159
|
+
import {
|
|
160
|
+
Form,
|
|
161
|
+
FormControl,
|
|
162
|
+
FormDescription,
|
|
163
|
+
FormField,
|
|
164
|
+
FormItem,
|
|
165
|
+
FormLabel,
|
|
166
|
+
FormMessage,
|
|
167
|
+
} from "forlogic-core"
|
|
168
|
+
|
|
169
|
+
const formSchema = z.object({
|
|
170
|
+
username: z.string().min(2).max(50),
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
function MyForm() {
|
|
174
|
+
const form = useForm<z.infer<typeof formSchema>>({
|
|
175
|
+
resolver: zodResolver(formSchema),
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
function onSubmit(values: z.infer<typeof formSchema>) {
|
|
179
|
+
console.log(values)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<Form {...form}>
|
|
184
|
+
<form onSubmit={form.handleSubmit(onSubmit)}>
|
|
185
|
+
<FormField
|
|
186
|
+
control={form.control}
|
|
187
|
+
name="username"
|
|
188
|
+
render={({ field }) => (
|
|
189
|
+
<FormItem>
|
|
190
|
+
<FormLabel>Username</FormLabel>
|
|
191
|
+
<FormControl>
|
|
192
|
+
<Input placeholder="shadcn" {...field} />
|
|
193
|
+
</FormControl>
|
|
194
|
+
<FormDescription>
|
|
195
|
+
This is your public display name.
|
|
196
|
+
</FormDescription>
|
|
197
|
+
<FormMessage />
|
|
198
|
+
</FormItem>
|
|
199
|
+
)}
|
|
200
|
+
/>
|
|
201
|
+
<Button type="submit">Submit</Button>
|
|
202
|
+
</form>
|
|
203
|
+
</Form>
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Props:**
|
|
209
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
210
|
+
|------|------|--------|-----------|
|
|
211
|
+
| `Form` | `FormProvider props` | - | Wrapper que provê o contexto do formulário via React Hook Form |
|
|
212
|
+
| `FormField.control` | `Control` | - | Objeto control do useForm para gerenciar o campo |
|
|
213
|
+
| `FormField.name` | `string` | - | Nome do campo no schema do formulário |
|
|
214
|
+
| `FormField.render` | `(field) => ReactNode` | - | Função de renderização do campo com acesso ao field object |
|
|
215
|
+
| `FormItem` | `HTMLDivElement` | - | Container que agrupa label, controle, descrição e mensagem de erro |
|
|
216
|
+
| `FormLabel` | `LabelProps` | - | Label associado ao campo do formulário |
|
|
217
|
+
| `FormControl` | `SlotProps` | - | Wrapper que conecta o controle ao contexto do campo |
|
|
218
|
+
| `FormDescription` | `HTMLParagraphElement` | - | Texto de ajuda exibido abaixo do controle |
|
|
219
|
+
| `FormMessage` | `HTMLParagraphElement` | - | Exibe mensagens de erro de validação automaticamente |
|
|
220
|
+
|
|
221
|
+
**Exemplos:**
|
|
222
|
+
```tsx
|
|
223
|
+
<FormField
|
|
224
|
+
control={form.control}
|
|
225
|
+
name=
|
|
226
|
+
```
|
|
227
|
+
```tsx
|
|
228
|
+
const formSchema = z.object({
|
|
229
|
+
username: z.string().min(3, {
|
|
230
|
+
message:
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Acessibilidade:**
|
|
234
|
+
- Labels são automaticamente associados aos controles via aria-describedby
|
|
235
|
+
- Mensagens de erro são anunciadas por leitores de tela
|
|
236
|
+
- Suporta navegação por teclado nativa dos controles
|
|
237
|
+
- Estados de erro são indicados visualmente e semanticamente
|
|
238
|
+
- Usa React Hook Form para gerenciamento de estado de formulário
|
|
239
|
+
- Integra com Zod para validação de schema
|
|
240
|
+
|
|
241
|
+
> Fonte: `src\design-system\docs\components\FormDoc.tsx`
|
|
242
|
+
|
|
243
|
+
---
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
<!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
|
|
2
|
+
<!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
|
|
3
|
+
|
|
4
|
+
# Data Display
|
|
5
|
+
|
|
6
|
+
Categoria: **Data Display** | 8 componentes
|
|
7
|
+
|
|
8
|
+
### Avatar
|
|
9
|
+
|
|
10
|
+
Um elemento de imagem com fallback para representar o usuário.
|
|
11
|
+
|
|
12
|
+
**Uso:**
|
|
13
|
+
```tsx
|
|
14
|
+
import { Avatar, AvatarImage, AvatarFallback } from "forlogic-core"
|
|
15
|
+
|
|
16
|
+
<Avatar>
|
|
17
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
|
|
18
|
+
<AvatarFallback>CN</AvatarFallback>
|
|
19
|
+
</Avatar>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Props:**
|
|
23
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
24
|
+
|------|------|--------|-----------|
|
|
25
|
+
| `src` | `string` | - | A URL da fonte da imagem (AvatarImage). |
|
|
26
|
+
| `alt` | `string` | - | Texto alternativo para a imagem (AvatarImage). |
|
|
27
|
+
|
|
28
|
+
**Exemplos:**
|
|
29
|
+
```tsx
|
|
30
|
+
<Avatar>
|
|
31
|
+
<AvatarImage src=
|
|
32
|
+
```
|
|
33
|
+
```tsx
|
|
34
|
+
<Avatar>
|
|
35
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
36
|
+
</Avatar>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Acessibilidade:**
|
|
40
|
+
- Texto alternativo adequado para imagens
|
|
41
|
+
- Fallback garante que o conteúdo seja sempre exibido
|
|
42
|
+
- Estrutura HTML semântica
|
|
43
|
+
|
|
44
|
+
> Fonte: `src\design-system\docs\components\AvatarDoc.tsx`
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### Badge
|
|
49
|
+
|
|
50
|
+
Exibe um badge ou um componente que se parece com um badge.
|
|
51
|
+
|
|
52
|
+
**Uso:**
|
|
53
|
+
```tsx
|
|
54
|
+
import { Badge } from "forlogic-core"
|
|
55
|
+
|
|
56
|
+
<Badge>Badge</Badge>
|
|
57
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
58
|
+
<Badge variant="info">Info</Badge>
|
|
59
|
+
<Badge variant="success">Success</Badge>
|
|
60
|
+
<Badge variant="warning">Warning</Badge>
|
|
61
|
+
<Badge variant="danger">Danger</Badge>
|
|
62
|
+
<Badge variant="outline">Outline</Badge>
|
|
63
|
+
<Badge variant="sharp">Sharp</Badge>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Exemplos:**
|
|
67
|
+
```tsx
|
|
68
|
+
<Badge>Default</Badge>
|
|
69
|
+
<Badge variant=
|
|
70
|
+
```
|
|
71
|
+
```tsx
|
|
72
|
+
<Badge variant=
|
|
73
|
+
```
|
|
74
|
+
```tsx
|
|
75
|
+
<Badge variant=
|
|
76
|
+
```
|
|
77
|
+
```tsx
|
|
78
|
+
<div className=
|
|
79
|
+
```
|
|
80
|
+
```tsx
|
|
81
|
+
<Badge variant=
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Acessibilidade:**
|
|
85
|
+
- HTML semântico com taxas de contraste adequadas
|
|
86
|
+
- Funciona com leitores de tela
|
|
87
|
+
- Pode ser tornado interativo com labels ARIA adequadas se necessário
|
|
88
|
+
|
|
89
|
+
> Fonte: `src\design-system\docs\components\BadgeDoc.tsx`
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### Card
|
|
94
|
+
|
|
95
|
+
Exibe um card com cabeçalho, conteúdo e rodapé.
|
|
96
|
+
|
|
97
|
+
**Uso:**
|
|
98
|
+
```tsx
|
|
99
|
+
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "forlogic-core"
|
|
100
|
+
|
|
101
|
+
<Card>
|
|
102
|
+
<CardHeader>
|
|
103
|
+
<CardTitle>Card Title</CardTitle>
|
|
104
|
+
<CardDescription>Card Description</CardDescription>
|
|
105
|
+
</CardHeader>
|
|
106
|
+
<CardContent>
|
|
107
|
+
<p>Card Content</p>
|
|
108
|
+
</CardContent>
|
|
109
|
+
<CardFooter>
|
|
110
|
+
<p>Card Footer</p>
|
|
111
|
+
</CardFooter>
|
|
112
|
+
</Card>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Props:**
|
|
116
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
117
|
+
|------|------|--------|-----------|
|
|
118
|
+
| `className` | `string` | - | Classes CSS adicionais para o card. |
|
|
119
|
+
|
|
120
|
+
**Acessibilidade:**
|
|
121
|
+
- Estrutura semântica com elementos apropriados
|
|
122
|
+
- Hierarquia de cabeçalhos adequada
|
|
123
|
+
- Contraste de cores acessível
|
|
124
|
+
- Funciona com leitores de tela
|
|
125
|
+
|
|
126
|
+
> Fonte: `src\design-system\docs\components\CardDoc.tsx`
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### DataList
|
|
131
|
+
|
|
132
|
+
Sistema de lista de dados com composição de componentes. Ideal para exibir informações estruturadas em formato de cards.
|
|
133
|
+
|
|
134
|
+
**Uso:**
|
|
135
|
+
```tsx
|
|
136
|
+
import { DataList, Badge } from "forlogic-core"
|
|
137
|
+
|
|
138
|
+
<DataList.Root>
|
|
139
|
+
<DataList.Item onClick={() => console.log('clicked')}>
|
|
140
|
+
<DataList.Field label="Nome" value="João Silva" />
|
|
141
|
+
<DataList.Field label="Email" value="joao@exemplo.com" />
|
|
142
|
+
<DataList.Field label="Status" value={<Badge>Ativo</Badge>} />
|
|
143
|
+
</DataList.Item>
|
|
144
|
+
<DataList.Item>
|
|
145
|
+
<DataList.Field label="Nome" value="Maria Santos" />
|
|
146
|
+
<DataList.Field label="Email" value="maria@exemplo.com" />
|
|
147
|
+
</DataList.Item>
|
|
148
|
+
</DataList.Root>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Props:**
|
|
152
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
153
|
+
|------|------|--------|-----------|
|
|
154
|
+
| `DataList.Root` | `ReactNode` | - | Container principal com espaçamento vertical. |
|
|
155
|
+
| `DataList.Item` | `ReactNode` | - | Item individual renderizado como Card. |
|
|
156
|
+
| `DataList.Item.onClick` | `() => void` | - | Handler de clique (adiciona hover state). |
|
|
157
|
+
| `DataList.Field` | `{ label, value }` | - | Par label/value formatado horizontalmente. |
|
|
158
|
+
| `DataList.Field.value` | `ReactNode` | - | Valor pode ser texto ou componentes (Badge, etc.). |
|
|
159
|
+
|
|
160
|
+
**Acessibilidade:**
|
|
161
|
+
- Items clicáveis tem cursor pointer
|
|
162
|
+
- Hover state visual para feedback
|
|
163
|
+
- Estrutura semântica com Cards
|
|
164
|
+
|
|
165
|
+
**Notas:**
|
|
166
|
+
- 💡 Use para listas de dados estruturados
|
|
167
|
+
- 💡 Field.value aceita ReactNode - use Badge, Button, etc.
|
|
168
|
+
- 💡 onClick em Item adiciona hover state automaticamente
|
|
169
|
+
|
|
170
|
+
> Fonte: `src\design-system\docs\components\DataListDoc.tsx`
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### Empty State
|
|
175
|
+
|
|
176
|
+
Componente para exibir estados vazios com ícone, mensagem e ação opcional.
|
|
177
|
+
|
|
178
|
+
**Uso:**
|
|
179
|
+
```tsx
|
|
180
|
+
import { EmptyState } from "forlogic-core"
|
|
181
|
+
|
|
182
|
+
// Estado vazio padrão
|
|
183
|
+
<EmptyState
|
|
184
|
+
title="Nenhum item encontrado"
|
|
185
|
+
description="Adicione seu primeiro item para começar"
|
|
186
|
+
action={{
|
|
187
|
+
label: "Adicionar Item",
|
|
188
|
+
onClick: () => handleAddItem()
|
|
189
|
+
}}
|
|
190
|
+
/>
|
|
191
|
+
|
|
192
|
+
// Sem resultados de busca
|
|
193
|
+
<EmptyState
|
|
194
|
+
variant="search"
|
|
195
|
+
title="Nenhum resultado encontrado"
|
|
196
|
+
description="Tente ajustar sua busca"
|
|
197
|
+
/>
|
|
198
|
+
|
|
199
|
+
// Estado de erro
|
|
200
|
+
<EmptyState
|
|
201
|
+
variant="error"
|
|
202
|
+
title="Erro ao carregar dados"
|
|
203
|
+
description="Não foi possível carregar as informações"
|
|
204
|
+
action={{
|
|
205
|
+
label: "Tentar Novamente",
|
|
206
|
+
onClick: () => refetch()
|
|
207
|
+
}}
|
|
208
|
+
/>
|
|
209
|
+
|
|
210
|
+
// Ícone customizado
|
|
211
|
+
<EmptyState
|
|
212
|
+
icon={<Package className="h-8 w-8" />}
|
|
213
|
+
title="Sem produtos"
|
|
214
|
+
/>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Props:**
|
|
218
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
219
|
+
|------|------|--------|-----------|
|
|
220
|
+
| `icon` | `ReactNode` | - | Ícone customizado (sobrescreve o variant). |
|
|
221
|
+
| `title` | `string` | - | Título principal. |
|
|
222
|
+
| `description` | `string` | - | Descrição opcional. |
|
|
223
|
+
| `action` | `{ label: string, onClick: () => void }` | - | Botão de ação opcional. |
|
|
224
|
+
| `className` | `string` | - | Classes CSS adicionais. |
|
|
225
|
+
|
|
226
|
+
**Acessibilidade:**
|
|
227
|
+
- Ícones pré-configurados por variant
|
|
228
|
+
- Botão de ação opcional
|
|
229
|
+
- Centralizado e responsivo
|
|
230
|
+
- Suporte a ícone customizado
|
|
231
|
+
|
|
232
|
+
> Fonte: `src\design-system\docs\components\EmptyStateDoc.tsx`
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### Separator
|
|
237
|
+
|
|
238
|
+
Separa visual ou semanticamente o conteúdo.
|
|
239
|
+
|
|
240
|
+
**Uso:**
|
|
241
|
+
```tsx
|
|
242
|
+
import { Separator } from "forlogic-core"
|
|
243
|
+
|
|
244
|
+
<Separator />
|
|
245
|
+
<Separator orientation="vertical" />
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Props:**
|
|
249
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
250
|
+
|------|------|--------|-----------|
|
|
251
|
+
| `decorative` | `boolean` | true | Se o separador é decorativo ou semântico. |
|
|
252
|
+
|
|
253
|
+
**Exemplos:**
|
|
254
|
+
```tsx
|
|
255
|
+
<Separator />
|
|
256
|
+
```
|
|
257
|
+
```tsx
|
|
258
|
+
<Separator orientation=
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Acessibilidade:**
|
|
262
|
+
- HTML semântico com role adequado
|
|
263
|
+
- Pode ser decorativo ou estrutural
|
|
264
|
+
- Atributos ARIA adequados
|
|
265
|
+
|
|
266
|
+
> Fonte: `src\design-system\docs\components\SeparatorDoc.tsx`
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
### Progress
|
|
271
|
+
|
|
272
|
+
Exibe um indicador mostrando o progresso de conclusão de uma tarefa, tipicamente exibido como uma barra de progresso.
|
|
273
|
+
|
|
274
|
+
**Uso:**
|
|
275
|
+
```tsx
|
|
276
|
+
import { Progress } from "forlogic-core"
|
|
277
|
+
|
|
278
|
+
<Progress value={60} />
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**Props:**
|
|
282
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
283
|
+
|------|------|--------|-----------|
|
|
284
|
+
| `value` | `number` | 0 | O valor de progresso (0-100). |
|
|
285
|
+
| `max` | `number` | 100 | O valor máximo de progresso. |
|
|
286
|
+
| `getValueLabel` | `(value: number, max: number) => string` | - | Função para gerar label acessível. |
|
|
287
|
+
| `className` | `string` | - | Classes CSS para estilização. |
|
|
288
|
+
|
|
289
|
+
**Acessibilidade:**
|
|
290
|
+
- Usa atributos ARIA apropriados (role=
|
|
291
|
+
- )
|
|
292
|
+
- Anuncia o progresso para leitores de tela via aria-valuenow
|
|
293
|
+
- aria-valuemin e aria-valuemax definidos automaticamente
|
|
294
|
+
- Use getValueLabel para descrições customizadas
|
|
295
|
+
- Indicador visual claro para estado de progresso
|
|
296
|
+
|
|
297
|
+
**Notas:**
|
|
298
|
+
- Use Progress para indicar conclusão de tarefas de longa duração
|
|
299
|
+
- Combine com textos descritivos para fornecer contexto adicional
|
|
300
|
+
- Prefira Spinner para loading de curta duração ou indeterminado
|
|
301
|
+
- Ajuste a altura via className (h-1, h-2, h-4) para diferentes contextos
|
|
302
|
+
- Para uploads, mostre tamanho atual e total junto com o percentual
|
|
303
|
+
|
|
304
|
+
> Fonte: `src\design-system\docs\components\ProgressDoc.tsx`
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
### Loading
|
|
309
|
+
|
|
310
|
+
Componentes para estados de carregamento: Skeleton (placeholders), Spinner (indicador de loading), e LoadingState (gerenciamento declarativo).
|
|
311
|
+
|
|
312
|
+
**Uso:**
|
|
313
|
+
```tsx
|
|
314
|
+
import { Skeleton, Spinner, LoadingState } from "forlogic-core"
|
|
315
|
+
|
|
316
|
+
// Skeleton básico
|
|
317
|
+
<Skeleton className="h-4 w-[200px]" />
|
|
318
|
+
|
|
319
|
+
// Spinner
|
|
320
|
+
<Spinner size="md" />
|
|
321
|
+
|
|
322
|
+
// LoadingState declarativo
|
|
323
|
+
<LoadingState isLoading={isLoading} type="spinner">
|
|
324
|
+
<div>Conteúdo carregado</div>
|
|
325
|
+
</LoadingState>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Props:**
|
|
329
|
+
| Prop | Tipo | Padrão | Descrição |
|
|
330
|
+
|------|------|--------|-----------|
|
|
331
|
+
| `className` | `string` | - | Classes CSS para customizar dimensões e formato. |
|
|
332
|
+
| `rows` | `number` | 5 | Número de linhas (TableSkeleton). |
|
|
333
|
+
| `columns` | `number` | 4 | Número de colunas (TableSkeleton). |
|
|
334
|
+
| `count` | `number` | 3 | Número de cards (CardSkeleton). |
|
|
335
|
+
| `fields` | `number` | 4 | Número de campos (FormSkeleton). |
|
|
336
|
+
| `isLoading` | `boolean` | - | Estado de loading (LoadingState). |
|
|
337
|
+
|
|
338
|
+
**Acessibilidade:**
|
|
339
|
+
- Usa animação para indicar estado de carregamento
|
|
340
|
+
- Dimensionamento corresponde ao conteúdo esperado
|
|
341
|
+
- Não interfere com leitores de tela
|
|
342
|
+
- Animação respeita preferências de movimento reduzido
|
|
343
|
+
- LoadingState com overlay mantém contexto visual para usuários
|
|
344
|
+
- Spinner tem role=
|
|
345
|
+
- implícito para leitores de tela
|
|
346
|
+
|
|
347
|
+
**Notas:**
|
|
348
|
+
- **Skeleton**: Placeholder animado que imita o formato do conteúdo. Use para carregamentos iniciais.
|
|
349
|
+
- **Spinner**: Indicador circular de loading. Use em botões ou áreas pequenas.
|
|
350
|
+
- **LoadingState**: Componente declarativo que gerencia exibição de loading vs conteúdo.
|
|
351
|
+
- **type=
|
|
352
|
+
- **: Esconde children e mostra apenas o spinner centralizado.
|
|
353
|
+
- **type=
|
|
354
|
+
- **: Mantém children visíveis com um spinner sobreposto. Ideal para salvar.
|
|
355
|
+
- **type=
|
|
356
|
+
- **: Mostra um placeholder animado no lugar dos children.
|
|
357
|
+
|
|
358
|
+
> Fonte: `src\design-system\docs\components\SkeletonDoc.tsx`
|
|
359
|
+
|
|
360
|
+
---
|