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