forlogic-core 2.0.2 → 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.
@@ -0,0 +1,536 @@
1
+ <!-- ⚠️ ARQUIVO GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE -->
2
+ <!-- Fonte: src/design-system/docs/ | Regenerar: npx tsx scripts/generate-ds-docs.ts -->
3
+
4
+ # Inputs
5
+
6
+ Categoria: **Inputs** | 10 componentes
7
+
8
+ ### Input
9
+
10
+ Campo de entrada de texto com suporte a todos os tipos HTML. Inclui Label para rótulos acessíveis e InputGroup para agrupar inputs com addons de prefixo, sufixo, ícones e botões.
11
+
12
+ **Uso:**
13
+ ```tsx
14
+ import { Input, Label } from "forlogic-core"
15
+
16
+ // Input básico
17
+ <Input placeholder="Digite algo..." />
18
+
19
+ // Com Label
20
+ <div className="grid w-full items-center gap-1.5">
21
+ <Label htmlFor="email">Email</Label>
22
+ <Input type="email" id="email" placeholder="email@exemplo.com" />
23
+ </div>
24
+
25
+ // InputGroup com prefixo e sufixo
26
+ import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from "forlogic-core"
27
+
28
+ <InputGroup>
29
+ <InputGroupAddon align="inline-start">https://</InputGroupAddon>
30
+ <InputGroupInput placeholder="exemplo.com" />
31
+ <InputGroupAddon align="inline-end">.com.br</InputGroupAddon>
32
+ </InputGroup>
33
+ ```
34
+
35
+ **Props:**
36
+ | Prop | Tipo | Padrão | Descrição |
37
+ |------|------|--------|-----------|
38
+ | `placeholder` | `string` | - | Texto de placeholder exibido quando o campo está vazio. |
39
+ | `value` | `string | number` | - | Valor controlado do input. |
40
+ | `defaultValue` | `string | number` | - | Valor inicial para input não controlado. |
41
+ | `disabled` | `boolean` | false | Se o input está desabilitado (não editável e não envia no form). |
42
+ | `readOnly` | `boolean` | false | Se o input é somente leitura (não editável mas envia no form). |
43
+ | `required` | `boolean` | false | Se o campo é obrigatório para submissão do formulário. |
44
+ | `maxLength` | `number` | - | Número máximo de caracteres permitidos. |
45
+ | `minLength` | `number` | - | Número mínimo de caracteres necessários. |
46
+ | `pattern` | `string` | - | Regex para validação do valor (HTML5). |
47
+ | `autoComplete` | `string` | - | Dica de autocompletar: |
48
+ | `autoFocus` | `boolean` | false | Se o input deve receber foco automaticamente ao montar. |
49
+ | `className` | `string` | - | Classes CSS adicionais para customização. |
50
+ | `onChange` | `(e: ChangeEvent) => void` | - | Callback chamado quando o valor muda. |
51
+ | `onBlur` | `(e: FocusEvent) => void` | - | Callback chamado quando o input perde foco. |
52
+ | `onFocus` | `(e: FocusEvent) => void` | - | Callback chamado quando o input recebe foco. |
53
+
54
+ **Exemplos:**
55
+ ```tsx
56
+ <Input type=
57
+ ```
58
+ ```tsx
59
+ <div className=
60
+ ```
61
+ ```tsx
62
+ // Normal
63
+ <Input placeholder=
64
+ ```
65
+ ```tsx
66
+ // Ícone à esquerda
67
+ <div className=
68
+ ```
69
+ ```tsx
70
+ // Prefixo
71
+ <InputGroup>
72
+ <InputGroupAddon align=
73
+ ```
74
+ ```tsx
75
+ // Ícone de usuário
76
+ <InputGroup>
77
+ <InputGroupAddon align=
78
+ ```
79
+
80
+ **Acessibilidade:**
81
+ - Sempre associe Label ao Input usando htmlFor/id para melhor navegação com leitores de tela
82
+ - Use placeholder como dica adicional, nunca como substituto do Label
83
+ - O estado disabled é comunicado automaticamente para tecnologias assistivas
84
+ - O estado required é comunicado e valida automaticamente no submit
85
+ - InputGroup mantém foco visual unificado (ring) quando qualquer elemento interno está focado
86
+ - Indicadores de foco visíveis atendem WCAG 2.4.7 (Focus Visible)
87
+ - Inputs são totalmente navegáveis via teclado (Tab, Shift+Tab)
88
+ - Para campos de senha, forneça toggle de visibilidade com ícone descritivo
89
+ - Mensagens de erro devem ser associadas ao input via aria-describedby para leitores de tela
90
+
91
+ **Notas:**
92
+ - **Label**: Componente de rótulo acessível. Use
93
+ - para associar ao
94
+ - do input.
95
+ - **InputGroup**: Container que agrupa input com addons. Adiciona borda unificada e foco visual compartilhado.
96
+ - **InputGroupInput**: Input estilizado para uso dentro do InputGroup (remove bordas próprias).
97
+ - **InputGroupTextarea**: Textarea estilizado para uso com addons
98
+ - ou
99
+ - .
100
+ - **InputGroupAddon**: Elemento decorativo (texto, ícone). Props:
101
+ - :
102
+ - (prefixo),
103
+ - (sufixo),
104
+ - (topo),
105
+ - (base).
106
+ - **InputGroupButton**: Botão integrado ao InputGroup. Props:
107
+ - :
108
+ - ,
109
+ - ,
110
+ - ,
111
+ - . Aceita todas as
112
+ - do Button.
113
+ - Para validação de formulários, use react-hook-form com FormField, FormControl e FormMessage.
114
+ - Para estados de erro, adicione as classes
115
+ - ao Input.
116
+
117
+ > Fonte: `src\design-system\docs\components\InputDoc.tsx`
118
+
119
+ ---
120
+
121
+ ### Textarea
122
+
123
+ Exibe um textarea de formulário ou um componente que se parece com um textarea.
124
+
125
+ **Uso:**
126
+ ```tsx
127
+ import { Textarea } from "forlogic-core"
128
+
129
+ <Textarea placeholder="Digite sua mensagem aqui." />
130
+ ```
131
+
132
+ **Props:**
133
+ | Prop | Tipo | Padrão | Descrição |
134
+ |------|------|--------|-----------|
135
+ | `placeholder` | `string` | - | Texto do placeholder. |
136
+ | `disabled` | `boolean` | false | Se o textarea está desabilitado. |
137
+ | `rows` | `number` | - | Número de linhas de texto visíveis. |
138
+
139
+ **Exemplos:**
140
+ ```tsx
141
+ <Textarea placeholder=
142
+ ```
143
+
144
+ **Acessibilidade:**
145
+ - Elemento HTML textarea padrão
146
+ - Funciona com labels e controles de formulário
147
+ - Acessível por teclado
148
+ - Amigável para leitores de tela
149
+
150
+ > Fonte: `src\design-system\docs\components\TextareaDoc.tsx`
151
+
152
+ ---
153
+
154
+ ### Checkbox
155
+
156
+ Um controle que permite ao usuário alternar entre marcado e desmarcado.
157
+
158
+ **Uso:**
159
+ ```tsx
160
+ import { Checkbox } from "forlogic-core"
161
+
162
+ <div className="flex items-center space-x-2">
163
+ <Checkbox id="terms" />
164
+ <label htmlFor="terms">Accept terms and conditions</label>
165
+ </div>
166
+ ```
167
+
168
+ **Props:**
169
+ | Prop | Tipo | Padrão | Descrição |
170
+ |------|------|--------|-----------|
171
+ | `checked` | `boolean` | false | O estado marcado controlado. |
172
+ | `defaultChecked` | `boolean` | false | O estado marcado padrão. |
173
+ | `disabled` | `boolean` | false | Se o checkbox está desabilitado. |
174
+ | `onCheckedChange` | `(checked: boolean) => void` | - | Manipulador de evento chamado quando o estado marcado muda. |
175
+
176
+ **Exemplos:**
177
+ ```tsx
178
+ <Checkbox id=
179
+ ```
180
+ ```tsx
181
+ <div className=
182
+ ```
183
+
184
+ **Acessibilidade:**
185
+ - Suporte completo de teclado
186
+ - Segue o padrão de design WAI-ARIA
187
+ - Gerenciamento adequado de foco
188
+ - Funciona com labels de formulário
189
+
190
+ > Fonte: `src\design-system\docs\components\CheckboxDoc.tsx`
191
+
192
+ ---
193
+
194
+ ### Radio Group
195
+
196
+ Um conjunto de botões marcáveis—conhecidos como botões de rádio—onde apenas um pode ser marcado por vez.
197
+
198
+ **Uso:**
199
+ ```tsx
200
+ import { RadioGroup, RadioGroupItem } from "forlogic-core"
201
+
202
+ <RadioGroup defaultValue="option-one">
203
+ <div className="flex items-center space-x-2">
204
+ <RadioGroupItem value="option-one" id="r1" />
205
+ <Label htmlFor="r1">Option One</Label>
206
+ </div>
207
+ <div className="flex items-center space-x-2">
208
+ <RadioGroupItem value="option-two" id="r2" />
209
+ <Label htmlFor="r2">Option Two</Label>
210
+ </div>
211
+ </RadioGroup>
212
+ ```
213
+
214
+ **Props:**
215
+ | Prop | Tipo | Padrão | Descrição |
216
+ |------|------|--------|-----------|
217
+ | `defaultValue` | `string` | - | O valor selecionado padrão. |
218
+ | `value` | `string` | - | O valor selecionado controlado. |
219
+ | `onValueChange` | `(value: string) => void` | - | Manipulador de evento quando o valor muda. |
220
+ | `disabled` | `boolean` | false | Se o grupo de rádio está desabilitado. |
221
+
222
+ **Exemplos:**
223
+ ```tsx
224
+ <RadioGroup defaultValue=
225
+ ```
226
+ ```tsx
227
+ <RadioGroup defaultValue=
228
+ ```
229
+ ```tsx
230
+ <RadioGroup defaultValue=
231
+ ```
232
+ ```tsx
233
+ <RadioGroup defaultValue=
234
+ ```
235
+
236
+ **Acessibilidade:**
237
+ - Navegação completa por teclado
238
+ - Teclas de seta para selecionar opções
239
+ - Segue o padrão de grupo de rádio WAI-ARIA
240
+ - Gerenciamento adequado de foco
241
+
242
+ > Fonte: `src\design-system\docs\components\RadioGroupDoc.tsx`
243
+
244
+ ---
245
+
246
+ ### Label
247
+
248
+ Renderiza uma label acessível associada a controles de formulário.
249
+
250
+ **Uso:**
251
+ ```tsx
252
+ import { Label } from "forlogic-core"
253
+
254
+ <Label htmlFor="email">Email</Label>
255
+ <Input id="email" type="email" />
256
+ ```
257
+
258
+ **Props:**
259
+ | Prop | Tipo | Padrão | Descrição |
260
+ |------|------|--------|-----------|
261
+ | `htmlFor` | `string` | - | O id do controle de formulário para associar. |
262
+ | `className` | `string` | - | Classes CSS para estilização. |
263
+ | `children` | `ReactNode` | - | Conteúdo da label. |
264
+
265
+ **Exemplos:**
266
+ ```tsx
267
+ <div className=
268
+ ```
269
+ ```tsx
270
+ <Label htmlFor=
271
+ ```
272
+ ```tsx
273
+ <div className=
274
+ ```
275
+ ```tsx
276
+ <Label htmlFor=
277
+ ```
278
+ ```tsx
279
+ <Label htmlFor=
280
+ ```
281
+ ```tsx
282
+ <div className=
283
+ ```
284
+ ```tsx
285
+ <div className=
286
+ ```
287
+
288
+ **Acessibilidade:**
289
+ - Associa adequadamente com controles de formulário via htmlFor
290
+ - Clicar na label foca automaticamente o input associado
291
+ - Suporte completo para leitores de tela
292
+ - Compatível com WCAG - melhora a área de clique
293
+ - Use com Checkbox/Radio para melhor UX
294
+
295
+ **Notas:**
296
+ - Sempre associe Labels a seus campos via htmlFor/id
297
+ - Use o componente Label (não <label>) para formulários acessíveis
298
+ - Indique campos obrigatórios com asterisco ou texto descritivo
299
+ - Labels aumentam a área de clique para inputs (especialmente útil em mobile)
300
+ - Adicione cursor-pointer quando associada a checkboxes/radios
301
+ - Combine com texto de ajuda abaixo do input para instruções adicionais
302
+
303
+ > Fonte: `src\design-system\docs\components\LabelDoc.tsx`
304
+
305
+ ---
306
+
307
+ ### Slider
308
+
309
+ Um input onde o usuário seleciona um valor dentro de um intervalo determinado.
310
+
311
+ **Uso:**
312
+ ```tsx
313
+ import { Slider } from "forlogic-core"
314
+
315
+ <Slider defaultValue={[50]} max={100} step={1} />
316
+ ```
317
+
318
+ **Acessibilidade:**
319
+ - Suporte completo de teclado (teclas de seta para ajustar)
320
+ - Segue o padrão WAI-ARIA de slider
321
+ - Labels e valores ARIA adequados
322
+ - Indicadores de foco visíveis
323
+
324
+ > Fonte: `src\design-system\docs\components\SliderDoc.tsx`
325
+
326
+ ---
327
+
328
+ ### File Upload
329
+
330
+ Componente de upload de arquivo único com drag & drop, validação de tipo/tamanho e ações (download, visualizar, substituir, remover). Portado do flc-single-file-uploader Angular.
331
+
332
+ **Uso:**
333
+ ```tsx
334
+ import { SingleFileUpload } from 'forlogic-core';
335
+
336
+ <SingleFileUpload
337
+ storedFile={{ id: '1', name: 'doc.pdf', extension: 'pdf', size: 1024 }}
338
+ allowedExtensions={['pdf', 'docx']}
339
+ maxSizeInBytes={10 * 1024 * 1024}
340
+ onFileSelect={(file) => console.log(file)}
341
+ onFileRemove={() => console.log('removed')}
342
+ onDownload={async (f) => downloadFile(f.id)}
343
+ onView={(f) => openViewer(f.id)}
344
+ />
345
+ ```
346
+
347
+ **Props:**
348
+ | Prop | Tipo | Padrão | Descrição |
349
+ |------|------|--------|-----------|
350
+ | `storedFile` | `StoredFile | null` | - | Arquivo já armazenado no servidor (id, name, extension, size). |
351
+ | `disabled` | `boolean` | false | Desabilita interação com o componente. |
352
+ | `required` | `boolean` | false | Marca o campo como obrigatório. |
353
+ | `touched` | `boolean` | false | Marca o campo como tocado (exibe erro de required). |
354
+ | `error` | `string` | - | Mensagem de erro externa a ser exibida. |
355
+
356
+ **Exemplos:**
357
+ ```tsx
358
+ <SingleFileUpload
359
+ onFileSelect={(f) => handleSelect(f)}
360
+ onFileRemove={() => handleRemove()}
361
+ />
362
+ ```
363
+ ```tsx
364
+ <SingleFileUpload
365
+ storedFile={{ id:
366
+ ```
367
+ ```tsx
368
+ <SingleFileUpload
369
+ allowedExtensions={[
370
+ ```
371
+
372
+ **Notas:**
373
+ - Portado do flc-single-file-uploader Angular. Valida tipos proibidos (FORBIDDEN_FILE_TYPES: exe, bat, cmd, etc) automaticamente.
374
+ - Utilitários exportados: formatBytes(bytes) e getFileExtension(filename).
375
+ - O componente gerencia estados internos de arquivo local vs servidor (StoredFile).
376
+ - Tipos proibidos são bloqueados automaticamente independente da prop allowedExtensions.
377
+
378
+ > Fonte: `src\design-system\docs\components\FileUploadDoc.tsx`
379
+
380
+ ---
381
+
382
+ ### Select
383
+
384
+ Exibe uma lista de opções para o usuário escolher—acionada por um botão.
385
+
386
+ **Uso:**
387
+ ```tsx
388
+ import {
389
+ Select,
390
+ SelectContent,
391
+ SelectItem,
392
+ SelectTrigger,
393
+ SelectValue,
394
+ } from "forlogic-core"
395
+
396
+ <Select>
397
+ <SelectTrigger className="w-[180px]">
398
+ <SelectValue placeholder="Theme" />
399
+ </SelectTrigger>
400
+ <SelectContent>
401
+ <SelectItem value="light">Light</SelectItem>
402
+ <SelectItem value="dark">Dark</SelectItem>
403
+ </SelectContent>
404
+ </Select>
405
+ ```
406
+
407
+ **Props:**
408
+ | Prop | Tipo | Padrão | Descrição |
409
+ |------|------|--------|-----------|
410
+ | `defaultValue` | `string` | - | O valor selecionado padrão. |
411
+ | `value` | `string` | - | O valor selecionado controlado. |
412
+ | `onValueChange` | `(value: string) => void` | - | Manipulador de evento quando o valor muda. |
413
+ | `disabled` | `boolean` | false | Se o select está desabilitado. |
414
+ | `container (SelectContent)` | `HTMLElement` | - | Container HTML para portal (útil dentro de Dialog). |
415
+ | `collisionBoundary (SelectContent)` | `HTMLElement` | - | Elemento para detecção de colisão de posicionamento. |
416
+
417
+ **Acessibilidade:**
418
+ - Navegação completa por teclado
419
+ - Busca por digitação antecipada
420
+ - Segue o padrão de listbox WAI-ARIA
421
+ - Anúncios para leitores de tela
422
+
423
+ **Notas:**
424
+ - 💡 Use
425
+ - e
426
+ - quando o Select estiver dentro de um Dialog para evitar problemas de scroll
427
+ - 💡 Para seleção com busca, considere usar
428
+ - ao invés de
429
+
430
+ > Fonte: `src\design-system\docs\components\SelectDoc.tsx`
431
+
432
+ ---
433
+
434
+ ### Rich Text Editor
435
+
436
+ Editor de texto rico construído com Tiptap, suportando formatação visual, edição de código HTML e preview. Ideal para formulários que precisam de conteúdo formatado.
437
+
438
+ **Uso:**
439
+ ```tsx
440
+ import { RichTextEditor } from "forlogic-core"
441
+
442
+ const [content, setContent] = useState('')
443
+
444
+ <RichTextEditor
445
+ value={content}
446
+ onChange={setContent}
447
+ placeholder="Escreva algo aqui..."
448
+ />
449
+ ```
450
+
451
+ **Props:**
452
+ | Prop | Tipo | Padrão | Descrição |
453
+ |------|------|--------|-----------|
454
+ | `value` | `string` | - | Conteúdo HTML atual do editor. |
455
+ | `onChange` | `(value: string) => void` | - | Callback chamado quando o conteúdo muda. |
456
+ | `disabled` | `boolean` | false | Desabilita a edição. |
457
+ | `showModeToggle` | `boolean` | true | Mostra botões de alternância Visual/Código/Preview. |
458
+ | `showVariableHint` | `boolean` | true | Mostra dica sobre uso de variáveis {{variavel}}. |
459
+ | `className` | `string` | - | Classes CSS adicionais para o container. |
460
+
461
+ **Exemplos:**
462
+ ```tsx
463
+ <RichTextEditor
464
+ value={content}
465
+ onChange={setContent}
466
+ showVariableHint={false}
467
+ placeholder=
468
+ ```
469
+ ```tsx
470
+ <RichTextEditor
471
+ value={content}
472
+ onChange={setContent}
473
+ showModeToggle={false}
474
+ showVariableHint={false}
475
+ minHeight=
476
+ ```
477
+ ```tsx
478
+ <RichTextEditor
479
+ value={content}
480
+ onChange={setContent}
481
+ disabled
482
+ />
483
+ ```
484
+
485
+ **Acessibilidade:**
486
+ - Toolbar com botões acessíveis via teclado
487
+ - Títulos com atributos title para tooltips
488
+ - Suporte a atalhos de teclado (Ctrl+B, Ctrl+I, etc.)
489
+ - Contraste adequado nos estados ativo/inativo
490
+ - Focus visível em todos os elementos interativos
491
+
492
+ > Fonte: `src\design-system\docs\components\RichTextEditorDoc.tsx`
493
+
494
+ ---
495
+
496
+ ### Custom Form Fields
497
+
498
+ Componente container que renderiza campos de formulário dinâmicos baseados em configuração. Suporta 9 tipos de campo: Texto Somente Leitura, Texto, Data, Hora, URL, Numérico, Seleção Única, Seleção Múltipla e Questões. Portado de FlcCustomFormFieldsComponent (flc-custom-form-fields).
499
+
500
+ **Uso:**
501
+ ```tsx
502
+ import { CustomFormFields, ECustomFormFieldType, validateFields } from "forlogic-core"
503
+ import type { FieldAssociation } from "forlogic-core"
504
+
505
+ const fields: FieldAssociation[] = [
506
+ {
507
+ id: 'f1',
508
+ type: ECustomFormFieldType.text,
509
+ name: 'Nome',
510
+ required: true,
511
+ config: { multiline: false },
512
+ isActive: true,
513
+ },
514
+ // ...mais campos
515
+ ];
516
+
517
+ const [formFields, setFormFields] = useState(fields);
518
+
519
+ <CustomFormFields
520
+ fields={formFields}
521
+ onChange={setFormFields}
522
+ onFieldChange={(field) => console.log('Changed:', field)}
523
+ />
524
+ ```
525
+
526
+ **Notas:**
527
+ - Portado de FlcCustomFormFieldsComponent (flc-custom-form-fields) Angular.
528
+ - Tipos de campo: readOnlyText (1), text (2), date (3), time (4), url (5), number (6), singleSelection (7), multiSelection (8), questions (9).
529
+ - Use validateFields() para validar campos obrigatórios e restrições numéricas.
530
+ - Use getFormFieldValues() para extrair valores no formato de envio ao backend.
531
+ - Use setFormFieldValues() para aplicar valores salvos a uma lista de campos.
532
+ - Campos de seleção suportam dataSource custom (dados estáticos) e users (lista de usuários do sistema).
533
+
534
+ > Fonte: `src\design-system\docs\components\CustomFormFieldsDoc.tsx`
535
+
536
+ ---