forlogic-core 2.1.4 → 2.2.0

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.
Files changed (248) hide show
  1. package/.note/memory/features/import/attachment-idempotency-registry.md +8 -8
  2. package/.note/memory/features/import/attachment-strategy.md +30 -30
  3. package/.note/memory/patterns/admin-i18n-policy.md +20 -20
  4. package/.note/memory/patterns/alias-url-resolution.md +69 -69
  5. package/.note/memory/patterns/doc-sync-rule.md +35 -35
  6. package/.note/memory/patterns/documentation-standard.md +17 -17
  7. package/.note/memory/patterns/dynamic-supabase-config.md +4 -4
  8. package/.note/memory/patterns/environment-detection-logic.md +35 -35
  9. package/.note/memory/patterns/i18n-architecture.md +3 -3
  10. package/README.md +120 -68
  11. package/dist/action-plans/components/ActionPlanAttachmentsTab.d.ts +3 -0
  12. package/dist/action-plans/components/ActionPlanCommentsTab.d.ts +3 -0
  13. package/dist/action-plans/components/ActionPlanCostTab.d.ts +5 -0
  14. package/dist/action-plans/components/ActionPlanGeneralTab.d.ts +3 -0
  15. package/dist/action-plans/components/ActionPlanHistoryTab.d.ts +3 -0
  16. package/dist/action-plans/components/ActionPlanPredecessorsTab.d.ts +5 -0
  17. package/dist/action-plans/components/ActionPlanProgressDialog.d.ts +3 -0
  18. package/dist/action-plans/components/ActionPlanProgressTab.d.ts +5 -0
  19. package/dist/action-plans/components/ActionPlanStatusBadge.d.ts +9 -2
  20. package/dist/action-plans/constants.d.ts +24 -0
  21. package/dist/action-plans/hooks/useActionPlan.d.ts +5 -0
  22. package/dist/action-plans/hooks/useActionPlanProgress.d.ts +5 -0
  23. package/dist/action-plans/types.d.ts +60 -0
  24. package/dist/action-plans/utils/formatTime.d.ts +9 -0
  25. package/dist/audit-trail/components/AuditTrailDetails.d.ts +10 -0
  26. package/dist/audit-trail/components/AuditTrailFilter.d.ts +10 -0
  27. package/dist/audit-trail/components/AuditTrailPage.d.ts +10 -0
  28. package/dist/audit-trail/types.d.ts +58 -0
  29. package/dist/audit-trail/utils.d.ts +18 -2
  30. package/dist/auth/components/EditProfileDialog.d.ts +1 -0
  31. package/dist/auth/components/ProtectedRoute.d.ts +5 -0
  32. package/dist/auth/contexts/AuthContext.d.ts +5 -0
  33. package/dist/auth/pages/CallbackPage.d.ts +5 -0
  34. package/dist/auth/services/AuthService.d.ts +5 -0
  35. package/dist/auth/services/TokenManager.d.ts +5 -0
  36. package/dist/auth/services/TokenService.d.ts +10 -0
  37. package/dist/auth/utils/ErrorInterceptor.d.ts +5 -0
  38. package/dist/components/dashboards/dashboard-form.d.ts +15 -0
  39. package/dist/components/dashboards/dashboard-general-view.d.ts +15 -0
  40. package/dist/components/dashboards/dashboard-grid.d.ts +25 -0
  41. package/dist/components/dashboards/dashboard-list.d.ts +10 -0
  42. package/dist/components/dashboards/dashboard-panel-renderer.d.ts +10 -0
  43. package/dist/components/dashboards/dashboard-view.d.ts +10 -0
  44. package/dist/components/dashboards/helpers.d.ts +44 -5
  45. package/dist/components/dashboards/panels/burndown-panel.d.ts +15 -0
  46. package/dist/components/dashboards/panels/cartesian-panel.d.ts +20 -0
  47. package/dist/components/dashboards/panels/list-panel.d.ts +15 -0
  48. package/dist/components/dashboards/panels/matrix-risk-panel.d.ts +25 -0
  49. package/dist/components/dashboards/panels/numeric-panel.d.ts +10 -0
  50. package/dist/components/dashboards/panels/panel-error.d.ts +10 -0
  51. package/dist/components/dashboards/panels/panel-header.d.ts +10 -0
  52. package/dist/components/dashboards/panels/panel-loader.d.ts +10 -0
  53. package/dist/components/dashboards/panels/panel-no-data.d.ts +10 -0
  54. package/dist/components/dashboards/panels/panel-unavailable.d.ts +10 -0
  55. package/dist/components/dashboards/panels/pareto-panel.d.ts +10 -0
  56. package/dist/components/dashboards/panels/performance-panel.d.ts +15 -0
  57. package/dist/components/dashboards/panels/pie-panel.d.ts +10 -0
  58. package/dist/components/dashboards/panels/text-panel.d.ts +10 -0
  59. package/dist/components/dashboards/types.d.ts +230 -0
  60. package/dist/components/modules/AccessDeniedDialog.d.ts +3 -1
  61. package/dist/components/modules/ModuleAccessGuard.d.ts +3 -1
  62. package/dist/components/modules/ModulesContent.d.ts +3 -1
  63. package/dist/components/modules/ModulesDialog.d.ts +1 -1
  64. package/dist/components/modules/ModulesFooterCards.d.ts +3 -1
  65. package/dist/components/modules/types.d.ts +2 -0
  66. package/dist/components/ui/accordion.d.ts +35 -0
  67. package/dist/components/ui/action-button.d.ts +5 -0
  68. package/dist/components/ui/alert-dialog.d.ts +82 -0
  69. package/dist/components/ui/alert.d.ts +32 -0
  70. package/dist/components/ui/avatar.d.ts +30 -0
  71. package/dist/components/ui/badge.d.ts +32 -0
  72. package/dist/components/ui/breadcrumb.d.ts +54 -0
  73. package/dist/components/ui/button-group.d.ts +15 -0
  74. package/dist/components/ui/button.d.ts +55 -0
  75. package/dist/components/ui/calendar.d.ts +16 -0
  76. package/dist/components/ui/card.d.ts +49 -0
  77. package/dist/components/ui/chart.d.ts +35 -0
  78. package/dist/components/ui/checkbox.d.ts +11 -0
  79. package/dist/components/ui/collapsible.d.ts +15 -0
  80. package/dist/components/ui/color-picker.d.ts +5 -0
  81. package/dist/components/ui/combo-tree.d.ts +23 -0
  82. package/dist/components/ui/combobox.d.ts +28 -0
  83. package/dist/components/ui/command.d.ts +66 -0
  84. package/dist/components/ui/context-menu.d.ts +95 -0
  85. package/dist/components/ui/date-picker.d.ts +10 -0
  86. package/dist/components/ui/dialog-wizard.d.ts +22 -4
  87. package/dist/components/ui/dialog.d.ts +181 -0
  88. package/dist/components/ui/drawer.d.ts +72 -0
  89. package/dist/components/ui/dropdown-menu.d.ts +153 -0
  90. package/dist/components/ui/electronic-signature-dialog.d.ts +10 -0
  91. package/dist/components/ui/export-dialog.d.ts +20 -0
  92. package/dist/components/ui/form.d.ts +96 -0
  93. package/dist/components/ui/hover-card.d.ts +15 -0
  94. package/dist/components/ui/icon-picker.d.ts +5 -0
  95. package/dist/components/ui/iframe-dialog.d.ts +10 -0
  96. package/dist/components/ui/input-group.d.ts +16 -0
  97. package/dist/components/ui/input.d.ts +5 -0
  98. package/dist/components/ui/menubar.d.ts +80 -0
  99. package/dist/components/ui/multiselect-permissions.d.ts +25 -0
  100. package/dist/components/ui/navigation-menu.d.ts +45 -0
  101. package/dist/components/ui/onboarding-dialog.d.ts +15 -0
  102. package/dist/components/ui/online-editor-dialog.d.ts +10 -0
  103. package/dist/components/ui/pagination.d.ts +53 -0
  104. package/dist/components/ui/popover.d.ts +8 -0
  105. package/dist/components/ui/radio-group.d.ts +3 -0
  106. package/dist/components/ui/report-request-list.d.ts +20 -0
  107. package/dist/components/ui/resizable.d.ts +15 -0
  108. package/dist/components/ui/rich-text-editor.d.ts +13 -0
  109. package/dist/components/ui/scroll-area.d.ts +3 -0
  110. package/dist/components/ui/select.d.ts +71 -0
  111. package/dist/components/ui/separator.d.ts +13 -0
  112. package/dist/components/ui/sheet.d.ts +76 -0
  113. package/dist/components/ui/sidebar.d.ts +203 -0
  114. package/dist/components/ui/skeleton-variants.d.ts +25 -0
  115. package/dist/components/ui/skeleton.d.ts +12 -0
  116. package/dist/components/ui/slider.d.ts +5 -0
  117. package/dist/components/ui/sonner.d.ts +5 -0
  118. package/dist/components/ui/spinner.d.ts +5 -0
  119. package/dist/components/ui/split-button.d.ts +6 -0
  120. package/dist/components/ui/stack.d.ts +5 -0
  121. package/dist/components/ui/status-badge.d.ts +52 -0
  122. package/dist/components/ui/step-selector.d.ts +5 -0
  123. package/dist/components/ui/stimulsoft-viewer.d.ts +8 -0
  124. package/dist/components/ui/switch.d.ts +21 -0
  125. package/dist/components/ui/tab-page-layout.d.ts +33 -0
  126. package/dist/components/ui/table-resize-handle.d.ts +10 -3
  127. package/dist/components/ui/table.d.ts +102 -0
  128. package/dist/components/ui/tabs.d.ts +59 -0
  129. package/dist/components/ui/terms-of-use-dialog.d.ts +50 -4
  130. package/dist/components/ui/textarea.d.ts +27 -0
  131. package/dist/components/ui/timepicker.d.ts +23 -0
  132. package/dist/components/ui/toggle-group.d.ts +25 -0
  133. package/dist/components/ui/toggle.d.ts +21 -0
  134. package/dist/components/ui/tooltip.d.ts +48 -0
  135. package/dist/components/ui/truncated-cell.d.ts +13 -0
  136. package/dist/components/ui/typography.d.ts +119 -0
  137. package/dist/components/ui/updates-notification.d.ts +33 -0
  138. package/dist/components/ui/users-groups-selector.d.ts +43 -0
  139. package/dist/components/ui/viewer-dialog.d.ts +107 -0
  140. package/dist/crud/components/ActionMenuItems.d.ts +5 -0
  141. package/dist/crud/components/BaseForm.d.ts +46 -0
  142. package/dist/crud/components/ColumnSettingsPopover.d.ts +10 -0
  143. package/dist/crud/components/CrudActionBar.d.ts +20 -0
  144. package/dist/crud/components/CrudGrid.d.ts +10 -0
  145. package/dist/crud/components/CrudPagination.d.ts +5 -0
  146. package/dist/crud/components/CrudTable.d.ts +5 -0
  147. package/dist/crud/components/TableRowActions.d.ts +5 -0
  148. package/dist/crud/createCrudPage.d.ts +41 -8
  149. package/dist/crud/generateCrudConfig.d.ts +13 -8
  150. package/dist/crud/hooks/useBaseForm.d.ts +39 -0
  151. package/dist/crud/hooks/useColumnManager.d.ts +25 -0
  152. package/dist/crud/hooks/useCrud.d.ts +35 -0
  153. package/dist/crud/primitives/ActionMenu.d.ts +41 -0
  154. package/dist/crud/primitives/FilterBar.d.ts +45 -0
  155. package/dist/crud/primitives/Pagination.d.ts +5 -0
  156. package/dist/crud/primitives/Table.d.ts +6 -1
  157. package/dist/crud/primitives/TreeTable.d.ts +5 -0
  158. package/dist/crud/primitives/types.d.ts +63 -0
  159. package/dist/crud/utils/routingHelpers.d.ts +11 -0
  160. package/dist/custom-form-fields/components/CustomFormFields.d.ts +3 -0
  161. package/dist/custom-form-fields/fields/FormDateField.d.ts +3 -0
  162. package/dist/custom-form-fields/fields/FormMultiSelectionField.d.ts +3 -0
  163. package/dist/custom-form-fields/fields/FormNumericField.d.ts +3 -0
  164. package/dist/custom-form-fields/fields/FormQuestionsField.d.ts +3 -0
  165. package/dist/custom-form-fields/fields/FormSingleSelectionField.d.ts +3 -0
  166. package/dist/custom-form-fields/fields/FormTextField.d.ts +3 -0
  167. package/dist/custom-form-fields/fields/FormTimeField.d.ts +3 -0
  168. package/dist/custom-form-fields/fields/FormUrlField.d.ts +3 -0
  169. package/dist/custom-form-fields/fields/ReadOnlyTextField.d.ts +3 -0
  170. package/dist/custom-form-fields/types.d.ts +84 -21
  171. package/dist/exports/crud.d.ts +5 -0
  172. package/dist/exports/integrations.d.ts +1 -0
  173. package/dist/exports/ui.d.ts +1 -0
  174. package/dist/file-upload/components/SingleFileUpload.d.ts +59 -0
  175. package/dist/file-upload/types.d.ts +15 -0
  176. package/dist/file-upload/utils/formatBytes.d.ts +5 -0
  177. package/dist/file-upload/utils/getFileExtension.d.ts +5 -0
  178. package/dist/hooks/useColumnResize.d.ts +24 -0
  179. package/dist/hooks/useRowResize.d.ts +18 -0
  180. package/dist/hooks/useSidebarResize.d.ts +18 -0
  181. package/dist/hooks/useUpdatesNotification.d.ts +16 -0
  182. package/dist/index.css +1 -1
  183. package/dist/index.css.map +1 -1
  184. package/dist/index.esm.js +1 -1
  185. package/dist/index.js +1 -1
  186. package/dist/integrations/clarity/clarityTracking.d.ts +31 -0
  187. package/dist/integrations/clarity/index.d.ts +3 -0
  188. package/dist/integrations/clarity/types.d.ts +46 -0
  189. package/dist/integrations/clarity/useClarity.d.ts +34 -0
  190. package/dist/integrations/index.d.ts +5 -0
  191. package/dist/providers/CoreProviders.d.ts +16 -1
  192. package/dist/qualiex/components/QualiexUserField.d.ts +8 -0
  193. package/dist/qualiex/hooks/useQualiexUsers.d.ts +16 -26
  194. package/dist/qualiex/services/qualiexApi.d.ts +38 -2
  195. package/dist/qualiex/utils/QualiexErrorInterceptor.d.ts +5 -0
  196. package/dist/supabase/SupabaseSingleton.d.ts +34 -0
  197. package/dist/types.d.ts +51 -2
  198. package/dist/utils/color.d.ts +26 -0
  199. package/dist/utils/index.d.ts +1 -0
  200. package/dist/vite/index.esm.js +4 -1
  201. package/dist/vite/index.js +4 -1
  202. package/docs/PUBLISH.md +168 -0
  203. package/docs/STORAGE_BUCKETS.md +384 -0
  204. package/docs/WORKSPACE_KNOWLEDGE.md +120 -119
  205. package/docs/design-system/README.md +1 -1
  206. package/docs/design-system/buttons-actions.md +130 -130
  207. package/docs/design-system/charts-dashboards.md +340 -301
  208. package/docs/design-system/crud.md +174 -114
  209. package/docs/design-system/data-display.md +108 -103
  210. package/docs/design-system/dialogs.md +212 -212
  211. package/docs/design-system/domain.md +317 -317
  212. package/docs/design-system/examples.md +275 -275
  213. package/docs/design-system/foundation.md +1 -1
  214. package/docs/design-system/inputs.md +131 -131
  215. package/docs/design-system/layout.md +202 -154
  216. package/docs/design-system/navigation.md +271 -325
  217. package/docs/design-system/notifications-feedback.md +34 -34
  218. package/docs/design-system/patterns/README.md +53 -53
  219. package/docs/design-system/patterns/action-button.md +22 -22
  220. package/docs/design-system/patterns/alertdialog-deletion.md +46 -46
  221. package/docs/design-system/patterns/baseform-custom-fields.md +59 -59
  222. package/docs/design-system/patterns/baseform-usage.md +42 -42
  223. package/docs/design-system/patterns/body-content-scroll.md +56 -56
  224. package/docs/design-system/patterns/combo-tree.md +23 -23
  225. package/docs/design-system/patterns/components-registry.md +17 -17
  226. package/docs/design-system/patterns/core-providers.md +41 -39
  227. package/docs/design-system/patterns/crud-bulk-actions.md +12 -12
  228. package/docs/design-system/patterns/crud-config-props.md +16 -16
  229. package/docs/design-system/patterns/crud-defaults.md +17 -17
  230. package/docs/design-system/patterns/crud-toolbar.md +28 -28
  231. package/docs/design-system/patterns/delete-confirmation.md +40 -40
  232. package/docs/design-system/patterns/dialog-body-scroll.md +26 -26
  233. package/docs/design-system/patterns/dialog-structure.md +32 -32
  234. package/docs/design-system/patterns/dialog-variants.md +41 -41
  235. package/docs/design-system/patterns/feature-flags.md +24 -20
  236. package/docs/design-system/patterns/header-metadata.md +57 -57
  237. package/docs/design-system/patterns/i18n-setup.md +117 -117
  238. package/docs/design-system/patterns/pagination.md +27 -27
  239. package/docs/design-system/patterns/single-scroll.md +39 -39
  240. package/docs/design-system/patterns/vite-tailwind-setup.md +48 -48
  241. package/docs/design-system/platform.md +18 -18
  242. package/docs/design-system/selectors.md +240 -236
  243. package/docs/design-system/tables-grids.md +95 -38
  244. package/package.json +150 -144
  245. package/dist/README.md +0 -1079
  246. package/dist/bin/bootstrap.js +0 -40
  247. package/dist/bin/pull-docs.js +0 -186
  248. package/dist/docs/KNOWLEDGE.md +0 -109
@@ -11,19 +11,19 @@ Componente de notificação toast usando Sonner. Feedback temporário e não blo
11
11
 
12
12
  **Uso:**
13
13
  ```tsx
14
- import { toast } from "sonner"
15
-
16
- // Informativo (BG #FFFFFF)
17
- toast("Mensagem simples")
18
- toast.info("Informação importante")
19
-
20
- // Sucesso (BG #E0FBE8)
21
- toast.success("Operação concluída")
22
-
23
- // Alerta (BG #FEF3C8)
24
- toast.warning("Atenção necessária")
25
-
26
- // Erro (BG #FEE1E1)
14
+ import { toast } from "sonner"
15
+
16
+ // Informativo (BG #FFFFFF)
17
+ toast("Mensagem simples")
18
+ toast.info("Informação importante")
19
+
20
+ // Sucesso (BG #E0FBE8)
21
+ toast.success("Operação concluída")
22
+
23
+ // Alerta (BG #FEF3C8)
24
+ toast.warning("Atenção necessária")
25
+
26
+ // Erro (BG #FEE1E1)
27
27
  toast.error("Algo deu errado")
28
28
  ```
29
29
 
@@ -43,19 +43,19 @@ toast.error("Algo deu errado")
43
43
 
44
44
  **Exemplos:**
45
45
  ```tsx
46
- // Toast é um feedback temporário e não bloqueante
47
- // - Informa rapidamente o usuário
48
- // - Não compete visualmente com outros Toasts
49
- // - Empilhamento vertical sem sobreposição
46
+ // Toast é um feedback temporário e não bloqueante
47
+ // - Informa rapidamente o usuário
48
+ // - Não compete visualmente com outros Toasts
49
+ // - Empilhamento vertical sem sobreposição
50
50
  // - Ordem previsível: mais recente no topo
51
51
  ```
52
52
  ```tsx
53
- // Empilhamento vertical com espaçamento consistente
53
+ // Empilhamento vertical com espaçamento consistente
54
54
  toast.success(
55
55
  ```
56
56
  ```tsx
57
- // Configuração de posição no Toaster:
58
- <Sonner
57
+ // Configuração de posição no Toaster:
58
+ <Sonner
59
59
  position=
60
60
  ```
61
61
 
@@ -80,7 +80,7 @@ toast.success(
80
80
  - 🎨 **Padrão v2**: Toasts possuem
81
81
  - como identidade visual herdada da v2.
82
82
 
83
- > Fonte: `src\design-system\docs\components\ToastDoc.tsx`
83
+ > Fonte: `src/design-system/docs/components/ToastDoc.tsx`
84
84
 
85
85
  ---
86
86
 
@@ -90,18 +90,18 @@ Botão com popover para exibir notificações de atualização das aplicações.
90
90
 
91
91
  **Uso:**
92
92
  ```tsx
93
- // Modo automático — basta importar e usar, sem props
94
- // O componente busca dados da API internamente usando useAuth() e useUpdatesNotification()
95
- import { UpdatesNotification } from 'forlogic-core';
96
-
97
- <UpdatesNotification />
98
-
99
- // Modo controlado — para testes, docs ou lógica customizada
100
- <UpdatesNotification
101
- updates={[{ id: '1', title: 'Nova versão', text: 'Descrição' }]}
102
- badgeCount={1}
103
- onOpen={() => markAsViewed()}
104
- onViewAll={() => window.open('https://apps4.qualiex.com/common/alias/up/view', '_blank')}
93
+ // Modo automático — basta importar e usar, sem props
94
+ // O componente busca dados da API internamente usando useAuth() e useUpdatesNotification()
95
+ import { UpdatesNotification } from 'forlogic-core';
96
+
97
+ <UpdatesNotification />
98
+
99
+ // Modo controlado — para testes, docs ou lógica customizada
100
+ <UpdatesNotification
101
+ updates={[{ id: '1', title: 'Nova versão', text: 'Descrição' }]}
102
+ badgeCount={1}
103
+ onOpen={() => markAsViewed()}
104
+ onViewAll={() => window.open('https://apps4.qualiex.com/common/alias/up/view', '_blank')}
105
105
  />
106
106
  ```
107
107
 
@@ -122,7 +122,7 @@ import { UpdatesNotification } from
122
122
  - Em caso de 401, o hook faz retry automático regenerando o token via QualiexErrorInterceptor.
123
123
  - Em produção, o componente deve ser colocado no AppHeader — já está integrado no forlogic-core.
124
124
 
125
- > Fonte: `src\design-system\docs\components\UpdatesNotificationDoc.tsx`
125
+ > Fonte: `src/design-system/docs/components/UpdatesNotificationDoc.tsx`
126
126
 
127
127
  ---
128
128
 
@@ -1,53 +1,53 @@
1
- # Design System — Padrões Universais
2
-
3
- > Padrões obrigatórios para todos os projetos que consomem `forlogic-core`.
4
- > Acessível via cross-project: `@Admin docs/design-system/patterns/`
5
-
6
- ## Índice
7
-
8
- ### Componentes
9
-
10
- | Arquivo | Descrição |
11
- |---------|-----------|
12
- | [action-button.md](action-button.md) | Uso obrigatório do ActionButton em tabelas |
13
- | [alertdialog-deletion.md](alertdialog-deletion.md) | AlertDialog para exclusões permanentes |
14
- | [baseform-usage.md](baseform-usage.md) | BaseForm — formulário dinâmico CRUD |
15
- | [baseform-custom-fields.md](baseform-custom-fields.md) | Campos customizados no BaseForm |
16
- | [combo-tree.md](combo-tree.md) | ComboTree — seleção hierárquica |
17
- | [delete-confirmation.md](delete-confirmation.md) | Dialog de confirmação de exclusão |
18
- | [dialog-structure.md](dialog-structure.md) | Tamanhos e estrutura obrigatória do Dialog |
19
- | [dialog-variants.md](dialog-variants.md) | Variantes semânticas do Dialog |
20
- | [pagination.md](pagination.md) | Paginação padronizada |
21
-
22
- ### Padrões de Layout & Scroll
23
-
24
- | Arquivo | Descrição |
25
- |---------|-----------|
26
- | [dialog-body-scroll.md](dialog-body-scroll.md) | Scroll interno em Dialogs |
27
- | [body-content-scroll.md](body-content-scroll.md) | Scroll em páginas (BodyContent) |
28
- | [single-scroll.md](single-scroll.md) | Padrão de scroll único no viewport |
29
-
30
- ### Padrões CRUD
31
-
32
- | Arquivo | Descrição |
33
- |---------|-----------|
34
- | [crud-toolbar.md](crud-toolbar.md) | Layout 3 zonas da toolbar |
35
- | [crud-bulk-actions.md](crud-bulk-actions.md) | Ações em lote via dropdown |
36
- | [crud-defaults.md](crud-defaults.md) | Defaults obrigatórios (resize, sort, etc.) |
37
- | [crud-config-props.md](crud-config-props.md) | Props padronizadas de configuração |
38
-
39
- ### Setup & Configuração
40
-
41
- | Arquivo | Descrição |
42
- |---------|-----------|
43
- | [core-providers.md](core-providers.md) | Setup obrigatório do CoreProviders |
44
- | [vite-tailwind-setup.md](vite-tailwind-setup.md) | Configuração Vite + Tailwind |
45
- | [i18n-setup.md](i18n-setup.md) | Setup de internacionalização |
46
- | [feature-flags.md](feature-flags.md) | Feature flags disponíveis |
47
- | [header-metadata.md](header-metadata.md) | Padrão de título/subtítulo via header |
48
-
49
- ### Referência
50
-
51
- | Arquivo | Descrição |
52
- |---------|-----------|
53
- | [components-registry.md](components-registry.md) | Registry de componentes consolidados |
1
+ # Design System — Padrões Universais
2
+
3
+ > Padrões obrigatórios para todos os projetos que consomem `forlogic-core`.
4
+ > Acessível via cross-project: `@Admin docs/design-system/patterns/`
5
+
6
+ ## Índice
7
+
8
+ ### Componentes
9
+
10
+ | Arquivo | Descrição |
11
+ |---------|-----------|
12
+ | [action-button.md](action-button.md) | Uso obrigatório do ActionButton em tabelas |
13
+ | [alertdialog-deletion.md](alertdialog-deletion.md) | AlertDialog para exclusões permanentes |
14
+ | [baseform-usage.md](baseform-usage.md) | BaseForm — formulário dinâmico CRUD |
15
+ | [baseform-custom-fields.md](baseform-custom-fields.md) | Campos customizados no BaseForm |
16
+ | [combo-tree.md](combo-tree.md) | ComboTree — seleção hierárquica |
17
+ | [delete-confirmation.md](delete-confirmation.md) | Dialog de confirmação de exclusão |
18
+ | [dialog-structure.md](dialog-structure.md) | Tamanhos e estrutura obrigatória do Dialog |
19
+ | [dialog-variants.md](dialog-variants.md) | Variantes semânticas do Dialog |
20
+ | [pagination.md](pagination.md) | Paginação padronizada |
21
+
22
+ ### Padrões de Layout & Scroll
23
+
24
+ | Arquivo | Descrição |
25
+ |---------|-----------|
26
+ | [dialog-body-scroll.md](dialog-body-scroll.md) | Scroll interno em Dialogs |
27
+ | [body-content-scroll.md](body-content-scroll.md) | Scroll em páginas (BodyContent) |
28
+ | [single-scroll.md](single-scroll.md) | Padrão de scroll único no viewport |
29
+
30
+ ### Padrões CRUD
31
+
32
+ | Arquivo | Descrição |
33
+ |---------|-----------|
34
+ | [crud-toolbar.md](crud-toolbar.md) | Layout 3 zonas da toolbar |
35
+ | [crud-bulk-actions.md](crud-bulk-actions.md) | Ações em lote via dropdown |
36
+ | [crud-defaults.md](crud-defaults.md) | Defaults obrigatórios (resize, sort, etc.) |
37
+ | [crud-config-props.md](crud-config-props.md) | Props padronizadas de configuração |
38
+
39
+ ### Setup & Configuração
40
+
41
+ | Arquivo | Descrição |
42
+ |---------|-----------|
43
+ | [core-providers.md](core-providers.md) | Setup obrigatório do CoreProviders |
44
+ | [vite-tailwind-setup.md](vite-tailwind-setup.md) | Configuração Vite + Tailwind |
45
+ | [i18n-setup.md](i18n-setup.md) | Setup de internacionalização |
46
+ | [feature-flags.md](feature-flags.md) | Feature flags disponíveis |
47
+ | [header-metadata.md](header-metadata.md) | Padrão de título/subtítulo via header |
48
+
49
+ ### Referência
50
+
51
+ | Arquivo | Descrição |
52
+ |---------|-----------|
53
+ | [components-registry.md](components-registry.md) | Registry de componentes consolidados |
@@ -1,22 +1,22 @@
1
- # Padrão: ActionButton para Tabelas
2
-
3
- Uso de `ActionButton` é **OBRIGATÓRIO** para menus de ação em linhas de tabela.
4
-
5
- ```tsx
6
- // ❌ PROIBIDO - botão genérico com ícone manual
7
- <Button variant="ghost" size="icon">
8
- <MoreHorizontal className="h-4 w-4" />
9
- </Button>
10
-
11
- // ✅ CORRETO - ActionButton padronizado
12
- import { ActionButton } from 'forlogic-core';
13
-
14
- <ActionButton
15
- items={[
16
- { label: 'Editar', icon: Edit, onClick: handleEdit },
17
- { label: 'Excluir', icon: Trash, onClick: handleDelete, variant: 'destructive' }
18
- ]}
19
- />
20
- ```
21
-
22
- **Motivo**: Garante mesma estética e comportamento em todas as tabelas do sistema.
1
+ # Padrão: ActionButton para Tabelas
2
+
3
+ Uso de `ActionButton` é **OBRIGATÓRIO** para menus de ação em linhas de tabela.
4
+
5
+ ```tsx
6
+ // ❌ PROIBIDO - botão genérico com ícone manual
7
+ <Button variant="ghost" size="icon">
8
+ <MoreHorizontal className="h-4 w-4" />
9
+ </Button>
10
+
11
+ // ✅ CORRETO - ActionButton padronizado
12
+ import { ActionButton } from 'forlogic-core';
13
+
14
+ <ActionButton
15
+ items={[
16
+ { label: 'Editar', icon: Edit, onClick: handleEdit },
17
+ { label: 'Excluir', icon: Trash, onClick: handleDelete, variant: 'destructive' }
18
+ ]}
19
+ />
20
+ ```
21
+
22
+ **Motivo**: Garante mesma estética e comportamento em todas as tabelas do sistema.
@@ -1,46 +1,46 @@
1
- # Padrão: AlertDialog para Exclusão Permanente
2
-
3
- AlertDialog é usado **apenas** para exclusões permanentes que requerem digitação de confirmação:
4
-
5
- ```tsx
6
- <AlertDialog open={open} onOpenChange={setOpen}>
7
- <AlertDialogContent>
8
- <AlertDialogHeader className="border-b pb-4">
9
- <AlertDialogTitle className="text-center">
10
- Exclusão Permanente
11
- </AlertDialogTitle>
12
- </AlertDialogHeader>
13
-
14
- <div className="py-4 space-y-4">
15
- <div className="flex justify-center">
16
- <AlertTriangle className="h-12 w-12 text-destructive" />
17
- </div>
18
- <AlertDialogDescription className="text-center">
19
- Esta ação é irreversível. Digite <strong>EXCLUIR</strong> para confirmar.
20
- </AlertDialogDescription>
21
- <Input
22
- value={confirmation}
23
- onChange={(e) => setConfirmation(e.target.value)}
24
- placeholder="Digite EXCLUIR"
25
- className="text-center"
26
- />
27
- </div>
28
-
29
- <AlertDialogFooter>
30
- <AlertDialogCancel>Cancelar</AlertDialogCancel>
31
- <AlertDialogAction
32
- disabled={confirmation !== 'EXCLUIR'}
33
- onClick={handlePermanentDelete}
34
- className="bg-destructive hover:bg-destructive/90"
35
- >
36
- Excluir Permanentemente
37
- </AlertDialogAction>
38
- </AlertDialogFooter>
39
- </AlertDialogContent>
40
- </AlertDialog>
41
- ```
42
-
43
- **Quando usar:**
44
- - ✅ Exclusão de dados sem possibilidade de recuperação
45
- - ✅ Ações destrutivas em massa críticas
46
- - ❌ NÃO usar para soft deletes (usar Dialog padrão)
1
+ # Padrão: AlertDialog para Exclusão Permanente
2
+
3
+ AlertDialog é usado **apenas** para exclusões permanentes que requerem digitação de confirmação:
4
+
5
+ ```tsx
6
+ <AlertDialog open={open} onOpenChange={setOpen}>
7
+ <AlertDialogContent>
8
+ <AlertDialogHeader className="border-b pb-4">
9
+ <AlertDialogTitle className="text-center">
10
+ Exclusão Permanente
11
+ </AlertDialogTitle>
12
+ </AlertDialogHeader>
13
+
14
+ <div className="py-4 space-y-4">
15
+ <div className="flex justify-center">
16
+ <AlertTriangle className="h-12 w-12 text-destructive" />
17
+ </div>
18
+ <AlertDialogDescription className="text-center">
19
+ Esta ação é irreversível. Digite <strong>EXCLUIR</strong> para confirmar.
20
+ </AlertDialogDescription>
21
+ <Input
22
+ value={confirmation}
23
+ onChange={(e) => setConfirmation(e.target.value)}
24
+ placeholder="Digite EXCLUIR"
25
+ className="text-center"
26
+ />
27
+ </div>
28
+
29
+ <AlertDialogFooter>
30
+ <AlertDialogCancel>Cancelar</AlertDialogCancel>
31
+ <AlertDialogAction
32
+ disabled={confirmation !== 'EXCLUIR'}
33
+ onClick={handlePermanentDelete}
34
+ className="bg-destructive hover:bg-destructive/90"
35
+ >
36
+ Excluir Permanentemente
37
+ </AlertDialogAction>
38
+ </AlertDialogFooter>
39
+ </AlertDialogContent>
40
+ </AlertDialog>
41
+ ```
42
+
43
+ **Quando usar:**
44
+ - ✅ Exclusão de dados sem possibilidade de recuperação
45
+ - ✅ Ações destrutivas em massa críticas
46
+ - ❌ NÃO usar para soft deletes (usar Dialog padrão)
@@ -1,59 +1,59 @@
1
- # Padrão: BaseForm — Campos Customizados
2
-
3
- Campos customizados no BaseForm usam `type: 'custom'` com `component` ou `render`:
4
-
5
- ```tsx
6
- // Opção 1: Componente externo
7
- {
8
- name: 'module_id',
9
- label: 'Módulo',
10
- type: 'custom',
11
- required: true,
12
- component: ModuleCombobox,
13
- componentProps: {
14
- placeholder: 'Selecione...',
15
- },
16
- }
17
-
18
- // Opção 2: Props dinâmicas baseadas em formData
19
- {
20
- name: 'file',
21
- label: 'Arquivo',
22
- type: 'custom',
23
- component: FileUpload,
24
- componentProps: (formData) => ({
25
- required: !formData?.id,
26
- accept: '.pdf,.doc',
27
- }),
28
- }
29
-
30
- // Opção 3: Render function inline
31
- {
32
- name: 'priority',
33
- label: 'Prioridade',
34
- type: 'custom',
35
- render: ({ value, onChange, error }) => (
36
- <div className="flex gap-2">
37
- {['low', 'medium', 'high'].map(p => (
38
- <Button
39
- key={p}
40
- variant={value === p ? 'default' : 'outline'}
41
- onClick={() => onChange(p)}
42
- >
43
- {p}
44
- </Button>
45
- ))}
46
- </div>
47
- ),
48
- }
49
- ```
50
-
51
- **Interface do componente customizado:**
52
- ```tsx
53
- interface CustomFieldProps {
54
- value: any;
55
- onChange: (value: any) => void;
56
- error?: string;
57
- disabled?: boolean;
58
- }
59
- ```
1
+ # Padrão: BaseForm — Campos Customizados
2
+
3
+ Campos customizados no BaseForm usam `type: 'custom'` com `component` ou `render`:
4
+
5
+ ```tsx
6
+ // Opção 1: Componente externo
7
+ {
8
+ name: 'module_id',
9
+ label: 'Módulo',
10
+ type: 'custom',
11
+ required: true,
12
+ component: ModuleCombobox,
13
+ componentProps: {
14
+ placeholder: 'Selecione...',
15
+ },
16
+ }
17
+
18
+ // Opção 2: Props dinâmicas baseadas em formData
19
+ {
20
+ name: 'file',
21
+ label: 'Arquivo',
22
+ type: 'custom',
23
+ component: FileUpload,
24
+ componentProps: (formData) => ({
25
+ required: !formData?.id,
26
+ accept: '.pdf,.doc',
27
+ }),
28
+ }
29
+
30
+ // Opção 3: Render function inline
31
+ {
32
+ name: 'priority',
33
+ label: 'Prioridade',
34
+ type: 'custom',
35
+ render: ({ value, onChange, error }) => (
36
+ <div className="flex gap-2">
37
+ {['low', 'medium', 'high'].map(p => (
38
+ <Button
39
+ key={p}
40
+ variant={value === p ? 'default' : 'outline'}
41
+ onClick={() => onChange(p)}
42
+ >
43
+ {p}
44
+ </Button>
45
+ ))}
46
+ </div>
47
+ ),
48
+ }
49
+ ```
50
+
51
+ **Interface do componente customizado:**
52
+ ```tsx
53
+ interface CustomFieldProps {
54
+ value: any;
55
+ onChange: (value: any) => void;
56
+ error?: string;
57
+ disabled?: boolean;
58
+ }
59
+ ```
@@ -1,42 +1,42 @@
1
- # Padrão: BaseForm — Formulário Dinâmico
2
-
3
- BaseForm é o formulário dinâmico do sistema CRUD, configurado via `sections` e `fields`.
4
-
5
- ```tsx
6
- import BaseForm from 'forlogic-core/crud/components/BaseForm';
7
-
8
- const sections: FormSection[] = [
9
- {
10
- id: 'basic',
11
- title: 'Informações Básicas',
12
- fields: [
13
- { name: 'title', label: 'Título', type: 'text', required: true },
14
- { name: 'email', label: 'E-mail', type: 'email' },
15
- { name: 'is_active', label: 'Ativo', type: 'switch' },
16
- ],
17
- },
18
- ];
19
-
20
- <BaseForm
21
- title="Novo Item"
22
- sections={sections}
23
- initialData={data}
24
- open={isOpen}
25
- onSubmit={handleSubmit}
26
- onCancel={() => setIsOpen(false)}
27
- />
28
- ```
29
-
30
- **Tipos de campo suportados:**
31
- `text`, `email`, `password`, `number`, `textarea`, `select`, `multiselect`, `date`, `datetime-local`, `switch`, `checkbox`, `color`, `color-picker`, `icon-picker`, `user-select`, `custom`
32
-
33
- **Grupos de campos:**
34
- ```tsx
35
- {
36
- name: 'row1',
37
- type: 'group',
38
- layout: 'horizontal', // ou 'vertical'
39
- wrapperClassName: 'col-span-full',
40
- fields: [...]
41
- }
42
- ```
1
+ # Padrão: BaseForm — Formulário Dinâmico
2
+
3
+ BaseForm é o formulário dinâmico do sistema CRUD, configurado via `sections` e `fields`.
4
+
5
+ ```tsx
6
+ import BaseForm from 'forlogic-core/crud/components/BaseForm';
7
+
8
+ const sections: FormSection[] = [
9
+ {
10
+ id: 'basic',
11
+ title: 'Informações Básicas',
12
+ fields: [
13
+ { name: 'title', label: 'Título', type: 'text', required: true },
14
+ { name: 'email', label: 'E-mail', type: 'email' },
15
+ { name: 'is_active', label: 'Ativo', type: 'switch' },
16
+ ],
17
+ },
18
+ ];
19
+
20
+ <BaseForm
21
+ title="Novo Item"
22
+ sections={sections}
23
+ initialData={data}
24
+ open={isOpen}
25
+ onSubmit={handleSubmit}
26
+ onCancel={() => setIsOpen(false)}
27
+ />
28
+ ```
29
+
30
+ **Tipos de campo suportados:**
31
+ `text`, `email`, `password`, `number`, `textarea`, `select`, `multiselect`, `date`, `datetime-local`, `switch`, `checkbox`, `color`, `color-picker`, `icon-picker`, `user-select`, `custom`
32
+
33
+ **Grupos de campos:**
34
+ ```tsx
35
+ {
36
+ name: 'row1',
37
+ type: 'group',
38
+ layout: 'horizontal', // ou 'vertical'
39
+ wrapperClassName: 'col-span-full',
40
+ fields: [...]
41
+ }
42
+ ```
@@ -1,56 +1,56 @@
1
- # Padrão: Scroll em Páginas (BodyContent)
2
-
3
- ## Quando Usar Cada Abordagem
4
-
5
- | Cenário | Componente | Classes |
6
- |---------|------------|---------|
7
- | **Página nova (Design System)** | `BodyContent` + `ContentContainer` | Padrão, sem classes extras |
8
- | **Página legada (design próprio)** | `BodyContent` | `className="bg-transparent p-0"` |
9
- | **Módulo customizado** | `div` simples | `className="h-full overflow-y-auto"` |
10
-
11
- ## Exemplos
12
-
13
- ### ✅ Página Nova (Design System Completo)
14
- ```tsx
15
- import { BodyContent, ContentContainer } from 'forlogic-core';
16
-
17
- <BodyContent breadcrumbs={[{ label: 'Home', href: '/' }, { label: 'Página' }]}>
18
- <ContentContainer title="Título" subtitle="Descrição">
19
- {/* Conteúdo */}
20
- </ContentContainer>
21
- </BodyContent>
22
- ```
23
-
24
- ### ✅ Página Legada (Preservar Design Original)
25
- ```tsx
26
- import { BodyContent } from 'forlogic-core';
27
-
28
- <BodyContent className="bg-transparent p-0">
29
- {/* Conteúdo original mantido sem alterações */}
30
- <div className="p-6">
31
- <h1>Título Original</h1>
32
- </div>
33
- </BodyContent>
34
- ```
35
-
36
- ### ✅ Container Mínimo (Sem BodyContent)
37
- ```tsx
38
- <div className="h-full overflow-y-auto">
39
- {/* Conteúdo original */}
40
- </div>
41
- ```
42
-
43
- ## ❌ Erro Comum
44
- ```tsx
45
- // ERRADO: ContentContainer em página com design próprio
46
- <BodyContent>
47
- <ContentContainer>
48
- {/* Resultado: fundo branco, bordas, padding extra indesejados */}
49
- </ContentContainer>
50
- </BodyContent>
51
- ```
52
-
53
- ## Regra de Ouro
54
- - `ContentContainer` adiciona: fundo branco, borda, sombra, padding
55
- - Use apenas quando o design da página DEVE seguir esse padrão
56
- - Para páginas legadas: `BodyContent className="bg-transparent p-0"`
1
+ # Padrão: Scroll em Páginas (BodyContent)
2
+
3
+ ## Quando Usar Cada Abordagem
4
+
5
+ | Cenário | Componente | Classes |
6
+ |---------|------------|---------|
7
+ | **Página nova (Design System)** | `BodyContent` + `ContentContainer` | Padrão, sem classes extras |
8
+ | **Página legada (design próprio)** | `BodyContent` | `className="bg-transparent p-0"` |
9
+ | **Módulo customizado** | `div` simples | `className="h-full overflow-y-auto"` |
10
+
11
+ ## Exemplos
12
+
13
+ ### ✅ Página Nova (Design System Completo)
14
+ ```tsx
15
+ import { BodyContent, ContentContainer } from 'forlogic-core';
16
+
17
+ <BodyContent breadcrumbs={[{ label: 'Home', href: '/' }, { label: 'Página' }]}>
18
+ <ContentContainer title="Título" subtitle="Descrição">
19
+ {/* Conteúdo */}
20
+ </ContentContainer>
21
+ </BodyContent>
22
+ ```
23
+
24
+ ### ✅ Página Legada (Preservar Design Original)
25
+ ```tsx
26
+ import { BodyContent } from 'forlogic-core';
27
+
28
+ <BodyContent className="bg-transparent p-0">
29
+ {/* Conteúdo original mantido sem alterações */}
30
+ <div className="p-6">
31
+ <h1>Título Original</h1>
32
+ </div>
33
+ </BodyContent>
34
+ ```
35
+
36
+ ### ✅ Container Mínimo (Sem BodyContent)
37
+ ```tsx
38
+ <div className="h-full overflow-y-auto">
39
+ {/* Conteúdo original */}
40
+ </div>
41
+ ```
42
+
43
+ ## ❌ Erro Comum
44
+ ```tsx
45
+ // ERRADO: ContentContainer em página com design próprio
46
+ <BodyContent>
47
+ <ContentContainer>
48
+ {/* Resultado: fundo branco, bordas, padding extra indesejados */}
49
+ </ContentContainer>
50
+ </BodyContent>
51
+ ```
52
+
53
+ ## Regra de Ouro
54
+ - `ContentContainer` adiciona: fundo branco, borda, sombra, padding
55
+ - Use apenas quando o design da página DEVE seguir esse padrão
56
+ - Para páginas legadas: `BodyContent className="bg-transparent p-0"`