forlogic-core 2.1.5 → 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.
- package/README.md +53 -1
- package/dist/action-plans/components/ActionPlanAttachmentsTab.d.ts +3 -0
- package/dist/action-plans/components/ActionPlanCommentsTab.d.ts +3 -0
- package/dist/action-plans/components/ActionPlanCostTab.d.ts +5 -0
- package/dist/action-plans/components/ActionPlanGeneralTab.d.ts +3 -0
- package/dist/action-plans/components/ActionPlanHistoryTab.d.ts +3 -0
- package/dist/action-plans/components/ActionPlanPredecessorsTab.d.ts +5 -0
- package/dist/action-plans/components/ActionPlanProgressDialog.d.ts +3 -0
- package/dist/action-plans/components/ActionPlanProgressTab.d.ts +5 -0
- package/dist/action-plans/components/ActionPlanStatusBadge.d.ts +3 -0
- package/dist/action-plans/constants.d.ts +24 -0
- package/dist/action-plans/hooks/useActionPlan.d.ts +5 -0
- package/dist/action-plans/hooks/useActionPlanProgress.d.ts +5 -0
- package/dist/action-plans/types.d.ts +60 -0
- package/dist/action-plans/utils/formatTime.d.ts +9 -0
- package/dist/audit-trail/components/AuditTrailDetails.d.ts +10 -0
- package/dist/audit-trail/components/AuditTrailFilter.d.ts +10 -0
- package/dist/audit-trail/components/AuditTrailPage.d.ts +10 -0
- package/dist/audit-trail/types.d.ts +58 -0
- package/dist/audit-trail/utils.d.ts +18 -2
- package/dist/auth/components/EditProfileDialog.d.ts +1 -0
- package/dist/auth/components/ProtectedRoute.d.ts +5 -0
- package/dist/auth/contexts/AuthContext.d.ts +5 -0
- package/dist/auth/pages/CallbackPage.d.ts +5 -0
- package/dist/auth/services/AuthService.d.ts +5 -0
- package/dist/auth/services/TokenManager.d.ts +5 -0
- package/dist/auth/services/TokenService.d.ts +10 -0
- package/dist/auth/utils/ErrorInterceptor.d.ts +5 -0
- package/dist/components/dashboards/dashboard-form.d.ts +15 -0
- package/dist/components/dashboards/dashboard-general-view.d.ts +15 -0
- package/dist/components/dashboards/dashboard-grid.d.ts +25 -0
- package/dist/components/dashboards/dashboard-list.d.ts +10 -0
- package/dist/components/dashboards/dashboard-panel-renderer.d.ts +10 -0
- package/dist/components/dashboards/dashboard-view.d.ts +10 -0
- package/dist/components/dashboards/helpers.d.ts +44 -5
- package/dist/components/dashboards/panels/burndown-panel.d.ts +15 -0
- package/dist/components/dashboards/panels/cartesian-panel.d.ts +20 -0
- package/dist/components/dashboards/panels/list-panel.d.ts +15 -0
- package/dist/components/dashboards/panels/matrix-risk-panel.d.ts +25 -0
- package/dist/components/dashboards/panels/numeric-panel.d.ts +10 -0
- package/dist/components/dashboards/panels/panel-error.d.ts +10 -0
- package/dist/components/dashboards/panels/panel-header.d.ts +10 -0
- package/dist/components/dashboards/panels/panel-loader.d.ts +10 -0
- package/dist/components/dashboards/panels/panel-no-data.d.ts +10 -0
- package/dist/components/dashboards/panels/panel-unavailable.d.ts +10 -0
- package/dist/components/dashboards/panels/pareto-panel.d.ts +10 -0
- package/dist/components/dashboards/panels/performance-panel.d.ts +15 -0
- package/dist/components/dashboards/panels/pie-panel.d.ts +10 -0
- package/dist/components/dashboards/panels/text-panel.d.ts +10 -0
- package/dist/components/dashboards/types.d.ts +230 -0
- package/dist/components/modules/AccessDeniedDialog.d.ts +3 -1
- package/dist/components/modules/ModuleAccessGuard.d.ts +3 -1
- package/dist/components/modules/ModulesContent.d.ts +3 -1
- package/dist/components/modules/ModulesDialog.d.ts +1 -1
- package/dist/components/modules/ModulesFooterCards.d.ts +3 -1
- package/dist/components/modules/types.d.ts +2 -0
- package/dist/components/ui/accordion.d.ts +35 -0
- package/dist/components/ui/action-button.d.ts +5 -0
- package/dist/components/ui/alert-dialog.d.ts +82 -0
- package/dist/components/ui/alert.d.ts +32 -0
- package/dist/components/ui/avatar.d.ts +30 -0
- package/dist/components/ui/badge.d.ts +32 -0
- package/dist/components/ui/breadcrumb.d.ts +54 -0
- package/dist/components/ui/button-group.d.ts +15 -0
- package/dist/components/ui/button.d.ts +55 -0
- package/dist/components/ui/calendar.d.ts +16 -0
- package/dist/components/ui/card.d.ts +49 -0
- package/dist/components/ui/chart.d.ts +35 -0
- package/dist/components/ui/checkbox.d.ts +11 -0
- package/dist/components/ui/collapsible.d.ts +15 -0
- package/dist/components/ui/color-picker.d.ts +5 -0
- package/dist/components/ui/combo-tree.d.ts +23 -0
- package/dist/components/ui/combobox.d.ts +28 -0
- package/dist/components/ui/command.d.ts +66 -0
- package/dist/components/ui/context-menu.d.ts +95 -0
- package/dist/components/ui/date-picker.d.ts +10 -0
- package/dist/components/ui/dialog-wizard.d.ts +22 -4
- package/dist/components/ui/dialog.d.ts +181 -0
- package/dist/components/ui/drawer.d.ts +72 -0
- package/dist/components/ui/dropdown-menu.d.ts +153 -0
- package/dist/components/ui/electronic-signature-dialog.d.ts +10 -0
- package/dist/components/ui/export-dialog.d.ts +20 -0
- package/dist/components/ui/form.d.ts +96 -0
- package/dist/components/ui/hover-card.d.ts +15 -0
- package/dist/components/ui/icon-picker.d.ts +5 -0
- package/dist/components/ui/iframe-dialog.d.ts +10 -0
- package/dist/components/ui/input-group.d.ts +16 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/menubar.d.ts +80 -0
- package/dist/components/ui/multiselect-permissions.d.ts +25 -0
- package/dist/components/ui/navigation-menu.d.ts +45 -0
- package/dist/components/ui/onboarding-dialog.d.ts +15 -0
- package/dist/components/ui/online-editor-dialog.d.ts +10 -0
- package/dist/components/ui/pagination.d.ts +53 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/radio-group.d.ts +3 -0
- package/dist/components/ui/report-request-list.d.ts +20 -0
- package/dist/components/ui/resizable.d.ts +15 -0
- package/dist/components/ui/rich-text-editor.d.ts +13 -0
- package/dist/components/ui/scroll-area.d.ts +3 -0
- package/dist/components/ui/select.d.ts +71 -0
- package/dist/components/ui/separator.d.ts +13 -0
- package/dist/components/ui/sheet.d.ts +76 -0
- package/dist/components/ui/sidebar.d.ts +203 -0
- package/dist/components/ui/skeleton-variants.d.ts +25 -0
- package/dist/components/ui/skeleton.d.ts +12 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/sonner.d.ts +5 -0
- package/dist/components/ui/spinner.d.ts +5 -0
- package/dist/components/ui/split-button.d.ts +6 -0
- package/dist/components/ui/stack.d.ts +5 -0
- package/dist/components/ui/status-badge.d.ts +3 -0
- package/dist/components/ui/step-selector.d.ts +5 -0
- package/dist/components/ui/stimulsoft-viewer.d.ts +8 -0
- package/dist/components/ui/switch.d.ts +21 -0
- package/dist/components/ui/tab-page-layout.d.ts +33 -0
- package/dist/components/ui/table-resize-handle.d.ts +10 -3
- package/dist/components/ui/table.d.ts +102 -0
- package/dist/components/ui/tabs.d.ts +59 -0
- package/dist/components/ui/terms-of-use-dialog.d.ts +50 -4
- package/dist/components/ui/textarea.d.ts +27 -0
- package/dist/components/ui/timepicker.d.ts +23 -0
- package/dist/components/ui/toggle-group.d.ts +25 -0
- package/dist/components/ui/toggle.d.ts +21 -0
- package/dist/components/ui/tooltip.d.ts +48 -0
- package/dist/components/ui/truncated-cell.d.ts +13 -0
- package/dist/components/ui/typography.d.ts +119 -0
- package/dist/components/ui/updates-notification.d.ts +33 -0
- package/dist/components/ui/users-groups-selector.d.ts +43 -0
- package/dist/components/ui/viewer-dialog.d.ts +107 -0
- package/dist/crud/components/ActionMenuItems.d.ts +5 -0
- package/dist/crud/components/BaseForm.d.ts +46 -0
- package/dist/crud/components/ColumnSettingsPopover.d.ts +10 -0
- package/dist/crud/components/CrudActionBar.d.ts +20 -0
- package/dist/crud/components/CrudGrid.d.ts +10 -0
- package/dist/crud/components/CrudPagination.d.ts +5 -0
- package/dist/crud/components/CrudTable.d.ts +5 -0
- package/dist/crud/components/TableRowActions.d.ts +5 -0
- package/dist/crud/createCrudPage.d.ts +41 -8
- package/dist/crud/generateCrudConfig.d.ts +13 -8
- package/dist/crud/hooks/useBaseForm.d.ts +39 -0
- package/dist/crud/hooks/useColumnManager.d.ts +25 -0
- package/dist/crud/hooks/useCrud.d.ts +35 -0
- package/dist/crud/primitives/ActionMenu.d.ts +41 -0
- package/dist/crud/primitives/FilterBar.d.ts +45 -0
- package/dist/crud/primitives/Pagination.d.ts +5 -0
- package/dist/crud/primitives/Table.d.ts +5 -0
- package/dist/crud/primitives/TreeTable.d.ts +5 -0
- package/dist/crud/primitives/types.d.ts +57 -0
- package/dist/crud/utils/routingHelpers.d.ts +11 -0
- package/dist/custom-form-fields/components/CustomFormFields.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormDateField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormMultiSelectionField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormNumericField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormQuestionsField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormSingleSelectionField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormTextField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormTimeField.d.ts +3 -0
- package/dist/custom-form-fields/fields/FormUrlField.d.ts +3 -0
- package/dist/custom-form-fields/fields/ReadOnlyTextField.d.ts +3 -0
- package/dist/custom-form-fields/types.d.ts +84 -21
- package/dist/exports/integrations.d.ts +1 -0
- package/dist/file-upload/components/SingleFileUpload.d.ts +59 -0
- package/dist/file-upload/types.d.ts +15 -0
- package/dist/file-upload/utils/formatBytes.d.ts +5 -0
- package/dist/file-upload/utils/getFileExtension.d.ts +5 -0
- package/dist/hooks/useColumnResize.d.ts +24 -0
- package/dist/hooks/useRowResize.d.ts +18 -0
- package/dist/hooks/useSidebarResize.d.ts +18 -0
- package/dist/hooks/useUpdatesNotification.d.ts +16 -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/integrations/clarity/clarityTracking.d.ts +31 -0
- package/dist/integrations/clarity/index.d.ts +3 -0
- package/dist/integrations/clarity/types.d.ts +46 -0
- package/dist/integrations/clarity/useClarity.d.ts +34 -0
- package/dist/integrations/index.d.ts +5 -0
- package/dist/providers/CoreProviders.d.ts +16 -1
- package/dist/qualiex/components/QualiexUserField.d.ts +8 -0
- package/dist/qualiex/hooks/useQualiexUsers.d.ts +16 -26
- package/dist/qualiex/services/qualiexApi.d.ts +38 -2
- package/dist/qualiex/utils/QualiexErrorInterceptor.d.ts +5 -0
- package/dist/supabase/SupabaseSingleton.d.ts +34 -0
- package/dist/types.d.ts +51 -2
- package/dist/vite/index.esm.js +4 -1
- package/dist/vite/index.js +4 -1
- package/docs/STORAGE_BUCKETS.md +384 -0
- package/docs/WORKSPACE_KNOWLEDGE.md +1 -0
- package/docs/design-system/README.md +1 -1
- package/docs/design-system/patterns/core-providers.md +2 -0
- package/docs/design-system/selectors.md +4 -0
- package/package.json +7 -1
- package/dist/components/ui/__tests__/status-badge.test.d.ts +0 -1
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
# Supabase Storage — Inventário e mapa de consumidores
|
|
2
|
+
|
|
3
|
+
> **Projeto Supabase:** `ccjfvpnndclajkleyqkc` (qualiex-db, prod)
|
|
4
|
+
> **Snapshot:** 2026-04-21
|
|
5
|
+
> **Objetivo:** mapear todos os buckets, quem os consome, suas RLS atuais e os riscos para guiar o próximo ciclo de hardening.
|
|
6
|
+
> **Escopo:** apenas documentação — nenhuma policy, bucket ou código foi alterado.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Visão geral
|
|
11
|
+
|
|
12
|
+
15 buckets ativos. Tamanho total ≈ 320 GB (dominado por `content-videos`).
|
|
13
|
+
|
|
14
|
+
| # | Bucket | Público | Objetos | Tamanho | MIME limit | File size limit |
|
|
15
|
+
|---|---|---|---:|---:|---|---|
|
|
16
|
+
| 1 | `career-banners` | ✅ | 4 | 349 kB | — | — |
|
|
17
|
+
| 2 | `certificates` | ✅ | 2.270 | 929 MB | — | — |
|
|
18
|
+
| 3 | `content-files` | ✅ | 5.180 | 2,3 GB | lista ampla | 2 GB |
|
|
19
|
+
| 4 | `content-videos` | ✅ | 1.856 | 317 GB | só vídeo | 3 GB |
|
|
20
|
+
| 5 | `contracts` | 🔒 | 151 | 47 MB | — | — |
|
|
21
|
+
| 6 | `imports` | 🔒 | 3 | 569 kB | — | — |
|
|
22
|
+
| 7 | `knowledge-files` | 🔒 | 8 | 24 MB | — | — |
|
|
23
|
+
| 8 | `library-assets` | ✅ | 10 | 105 kB | — | — |
|
|
24
|
+
| 9 | `performance` | ✅ | 22 | 7 MB | — | — |
|
|
25
|
+
| 10 | `performance-files` | ✅ | 33 | 6 MB | — | — |
|
|
26
|
+
| 11 | `resumes` | 🔒 | 715 | 156 MB | — | — |
|
|
27
|
+
| 12 | `thumbnails` | ✅ | 1.109 | 564 MB | — | — |
|
|
28
|
+
| 13 | `trainings` | 🔒 | 10 | 10 MB | — | — |
|
|
29
|
+
| 14 | `university-assets` | ✅ | 272 | 300 MB | — | — |
|
|
30
|
+
| 15 | `user-uploads` | 🔒 | 986 | 1,4 GB | — | — |
|
|
31
|
+
|
|
32
|
+
> ℹ️ A coluna **Público** indica `storage.buckets.public`. Buckets públicos liberam download anônimo via `/storage/v1/object/public/<bucket>/<path>` e, sem policy explícita, também permitem `LIST` anônimo.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Matriz Bucket × Projeto
|
|
37
|
+
|
|
38
|
+
Projetos do ecossistema (Lovable):
|
|
39
|
+
|
|
40
|
+
- [Admin / Configurações Core](/projects/9dc9be11-bf85-4561-b36a-8d8f35fdbc06) — `qualiex-admin` (este; lib `forlogic-core`)
|
|
41
|
+
- [Documentos](/projects/196d59d6-6e5c-4e49-b064-a24e57874298)
|
|
42
|
+
- [Configurações](/projects/b0970ba3-5c2a-4b7d-8d3b-5b2162b2d285)
|
|
43
|
+
- [OKR](/projects/53776a8a-ab33-494d-8b92-74341fd3d133)
|
|
44
|
+
- [Cockpit](/projects/e6853fb4-67f9-4776-b427-7768a9136f10)
|
|
45
|
+
- [Plano de Controle](/projects/d4712bc3-bc32-40a6-874c-401cf773c55c)
|
|
46
|
+
- [Colaboradores](/projects/37cdf18f-3d54-4af2-a02b-9f7e2d94e654)
|
|
47
|
+
- [Educação](/projects/075796dc-6ed4-43d3-92e3-3ab7f6314db6)
|
|
48
|
+
- [Matriz de Foco](/projects/e0a4fc74-f1c6-4466-8a9c-dcb31f03fb20)
|
|
49
|
+
- [Treinamentos](/projects/e02280e1-3f95-4114-8d83-80d3e8ced304)
|
|
50
|
+
- [Competências](/projects/ffc892d4-d7b4-46cd-883d-01ffeb99b2f4)
|
|
51
|
+
- [PDI](/projects/7269db93-bd03-4b7d-842a-cd74404d2606)
|
|
52
|
+
- [Desempenho](/projects/7c73eab6-bf0a-4cb5-93b3-e1809d1363d7)
|
|
53
|
+
- [Pulso](/projects/f49c7856-0bf8-4aa7-be0b-a6c5c5bf3ca1)
|
|
54
|
+
|
|
55
|
+
| Bucket | Admin | Educação | Colaboradores | Treinamentos | Matriz Foco | PDI | Desempenho | Cockpit | Documentos |
|
|
56
|
+
|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
|
57
|
+
| `library-assets` | ✅ | | | | | | | | |
|
|
58
|
+
| `imports` | ✅ | | | | | | | | |
|
|
59
|
+
| `thumbnails` | | ✅ | | | | | | | |
|
|
60
|
+
| `university-assets` | | ✅ | | | | | | | |
|
|
61
|
+
| `certificates` | | ✅ | | 🔎 read | | | | | |
|
|
62
|
+
| `content-files` | | ✅ | | | | | | | |
|
|
63
|
+
| `content-videos` | | ✅ | | | | | | | |
|
|
64
|
+
| `career-banners` | | | ✅ | | | | | | |
|
|
65
|
+
| `resumes` | | | ✅ | | | | | (policy) | |
|
|
66
|
+
| `contracts` | | | ✅ | | | | | | |
|
|
67
|
+
| `user-uploads` | | | ✅ (interviews) | ✅ (training-requests, trainings, imported-evidence) | ✅ (evidence-images, evidence-attachments) | ✅ (evidences) | ❓ | | |
|
|
68
|
+
| `trainings` | | | | ✅ | | | | | |
|
|
69
|
+
| `performance` | | | | | | | ✅ (1:1) | | |
|
|
70
|
+
| `performance-files` | | | | | | | ⚠️ órfão | | |
|
|
71
|
+
| `knowledge-files` | | | | | | | | | ❓ |
|
|
72
|
+
|
|
73
|
+
Legenda: ✅ uso confirmado em código · 🔎 só leitura · (policy) tem RLS mas sem código consumidor encontrado · ❓ a confirmar com o time.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 3. Detalhamento por bucket
|
|
78
|
+
|
|
79
|
+
### 3.1 `library-assets` — 🚨 prioridade alta
|
|
80
|
+
|
|
81
|
+
- **Finalidade:** logos, favicons e marca branca da lib (Qualiex / Saber).
|
|
82
|
+
- **Consumidor:** [Admin](/projects/9dc9be11-bf85-4561-b36a-8d8f35fdbc06) — `lib/assets/index.ts`, `lib/setup/favicon.ts`. Consumido como leitura pública por todos os projetos via URL pública.
|
|
83
|
+
- **Estrutura:** raiz do bucket (`logo-qualiex-white.svg`, `favicon.png`, etc.).
|
|
84
|
+
- **Visibilidade:** público.
|
|
85
|
+
- **RLS atuais:**
|
|
86
|
+
- `Allow public upload to library assets` — **INSERT para role `public` sem qualquer condição de auth**.
|
|
87
|
+
- **Riscos:**
|
|
88
|
+
- 🔴 Qualquer pessoa anônima pode subir arquivos (defacement, hospedagem indevida, custo).
|
|
89
|
+
- 🟡 `LIST` anônimo (default de bucket público) expõe inventário, mas como são logos é baixo impacto.
|
|
90
|
+
- **Recomendação:** restringir `INSERT` a `authenticated` + role admin. Avaliar mover para um bucket `brand-assets` privado com signed URLs ou simplesmente versionar os SVGs no repo da lib.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### 3.2 `imports` — ok, com ressalvas
|
|
95
|
+
|
|
96
|
+
- **Finalidade:** arquivos Excel/CSV submetidos pelo wizard de importação.
|
|
97
|
+
- **Consumidor:** [Admin](/projects/9dc9be11-bf85-4561-b36a-8d8f35fdbc06) — `src/imports/wizard/services/importJobService.ts`.
|
|
98
|
+
- **Estrutura:** `{alias}/{timestamp}_{filename}`.
|
|
99
|
+
- **Visibilidade:** privado.
|
|
100
|
+
- **RLS atuais:** SELECT/INSERT/UPDATE/DELETE escopados por `authenticated` + `(storage.foldername(name))[1] = jwt.alias`.
|
|
101
|
+
- **Riscos:**
|
|
102
|
+
- 🟡 Policies estão atribuídas ao role `public`, mas com `auth.role() = 'authenticated'` no body — funcional, mas inconsistente com o padrão `TO authenticated`.
|
|
103
|
+
- **Recomendação:** converter as policies para `TO authenticated` (mais explícito e linter-friendly).
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 3.3 `thumbnails` — 🚨 prioridade alta
|
|
108
|
+
|
|
109
|
+
- **Finalidade:** miniaturas/capas de cursos e conteúdos.
|
|
110
|
+
- **Consumidor:** [Educação](/projects/075796dc-6ed4-43d3-92e3-3ab7f6314db6) — `src/modules/contents/hooks/useImageUpload.ts` (default bucket).
|
|
111
|
+
- **Estrutura:** `thumbnails/{filename}` (sem segregação por alias).
|
|
112
|
+
- **Visibilidade:** público.
|
|
113
|
+
- **RLS atuais:**
|
|
114
|
+
- `Users can upload thumbnails` — **INSERT para `public` sem auth**.
|
|
115
|
+
- `Authenticated users can update/delete thumbnails` — UPDATE/DELETE só `authenticated`, mas sem scoping por alias.
|
|
116
|
+
- **Riscos:**
|
|
117
|
+
- 🔴 INSERT anônimo permite upload sem login.
|
|
118
|
+
- 🟠 Sem segregação por `alias`: um tenant autenticado pode atualizar/deletar miniaturas de outro tenant.
|
|
119
|
+
- 🟡 `LIST` público.
|
|
120
|
+
- **Recomendação:** trocar `Users can upload thumbnails` por uma policy `TO authenticated` com scoping `(storage.foldername(name))[1] = jwt.alias`. Aplicar o mesmo scoping em UPDATE/DELETE.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### 3.4 `university-assets` — média
|
|
125
|
+
|
|
126
|
+
- **Finalidade:** imagens da plataforma de cursos (banners, ilustrações, IA-docs).
|
|
127
|
+
- **Consumidor:** [Educação](/projects/075796dc-6ed4-43d3-92e3-3ab7f6314db6) — `src/hooks/useImageUpload.ts`, `src/modules/contents/services/aiDocsService.ts`.
|
|
128
|
+
- **Estrutura:** `{alias}/...` em parte das chamadas (não obrigatório).
|
|
129
|
+
- **Visibilidade:** público.
|
|
130
|
+
- **RLS atuais:** INSERT/UPDATE/DELETE só `authenticated` exigindo `jwt.alias IS NOT NULL`. Sem scoping por pasta.
|
|
131
|
+
- **Riscos:**
|
|
132
|
+
- 🟠 Qualquer usuário autenticado de qualquer tenant pode sobrescrever/excluir arquivos de qualquer outro tenant.
|
|
133
|
+
- 🟡 `LIST` público.
|
|
134
|
+
- **Recomendação:** adicionar scoping `(storage.foldername(name))[1] = jwt.alias` no INSERT/UPDATE/DELETE.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### 3.5 `certificates` — média
|
|
139
|
+
|
|
140
|
+
- **Finalidade:** PDFs/imagens de certificados emitidos para alunos.
|
|
141
|
+
- **Consumidores:**
|
|
142
|
+
- [Educação](/projects/075796dc-6ed4-43d3-92e3-3ab7f6314db6) — `src/hooks/useUserCertificateUpload.ts`, `src/hooks/useBulkCertificateUpload.ts` (uploads usam **signed URLs** com TTL 1 ano).
|
|
143
|
+
- [Treinamentos](/projects/e02280e1-3f95-4114-8d83-80d3e8ced304) — `src/training/utils/evidenceUrlResolver.ts` (leitura via `getPublicUrl`).
|
|
144
|
+
- **Estrutura:** sem padrão por alias (arquivos no root).
|
|
145
|
+
- **Visibilidade:** público (mesmo o código gerando signed URLs — ou seja, a privacidade pretendida não é real).
|
|
146
|
+
- **RLS atuais:** INSERT/UPDATE/DELETE só `authenticated`. Sem scoping por alias. SELECT público (bucket público).
|
|
147
|
+
- **Riscos:**
|
|
148
|
+
- 🔴 Certificados são **PII** (nome do aluno, curso, datas). Bucket público + sem scoping = qualquer URL adivinhada/descoberta vaza dados pessoais.
|
|
149
|
+
- 🟠 `LIST` anônimo expõe inventário com nomes de arquivo.
|
|
150
|
+
- **Recomendação:** **tornar privado** e migrar Treinamentos para usar signed URLs (já é o padrão de Educação). Adicionar scoping por alias.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### 3.6 `content-files` — média/alta
|
|
155
|
+
|
|
156
|
+
- **Finalidade:** materiais de cursos (apostilas, planilhas, pacotes SCORM).
|
|
157
|
+
- **Consumidor:** [Educação](/projects/075796dc-6ed4-43d3-92e3-3ab7f6314db6) — `src/modules/contents/hooks/useFileUpload.ts`, `docs/SCORM_IMPLEMENTATION.md`.
|
|
158
|
+
- **Estrutura:** `{packageFolder}/...` (SCORM); demais sem padrão claro.
|
|
159
|
+
- **Visibilidade:** público.
|
|
160
|
+
- **RLS atuais:** INSERT/UPDATE/DELETE só `authenticated`. Sem scoping por alias.
|
|
161
|
+
- **Riscos:**
|
|
162
|
+
- 🟠 Materiais de treinamento de um cliente podem estar acessíveis publicamente para quem tiver a URL/listar o bucket.
|
|
163
|
+
- 🟡 `LIST` público.
|
|
164
|
+
- **Recomendação:** scoping por `alias` e avaliar deixar privado com signed URLs (impacta player de cursos — exige mudança no front).
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### 3.7 `content-videos` — ok (mais maduro)
|
|
169
|
+
|
|
170
|
+
- **Finalidade:** vídeos das aulas de Educação.
|
|
171
|
+
- **Consumidor:** [Educação](/projects/075796dc-6ed4-43d3-92e3-3ab7f6314db6) — `src/contexts/UploadQueueContext.tsx`, `src/modules/contents/hooks/useVideoUpload.ts`.
|
|
172
|
+
- **Estrutura:** `{alias}/{filename}`.
|
|
173
|
+
- **Visibilidade:** público.
|
|
174
|
+
- **RLS atuais:** INSERT/UPDATE/DELETE só `authenticated` com **scoping por alias** (`(storage.foldername(name))[1] = jwt.alias`). SELECT público.
|
|
175
|
+
- **Riscos:**
|
|
176
|
+
- 🟠 Vídeos premium acessíveis por URL pública direta.
|
|
177
|
+
- 🟡 `LIST` público (alto volume — 317 GB).
|
|
178
|
+
- **Recomendação:** considerar privado + signed URLs (igual a Vimeo/Mux). Custo: rever player e CDN.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### 3.8 `career-banners` — baixa
|
|
183
|
+
|
|
184
|
+
- **Finalidade:** banners da página pública de carreiras.
|
|
185
|
+
- **Consumidor:** [Colaboradores](/projects/37cdf18f-3d54-4af2-a02b-9f7e2d94e654).
|
|
186
|
+
- **Estrutura:** raiz.
|
|
187
|
+
- **Visibilidade:** público.
|
|
188
|
+
- **RLS atuais:** INSERT/DELETE só `authenticated`. SELECT público (esperado).
|
|
189
|
+
- **Riscos:**
|
|
190
|
+
- 🟡 Sem scoping por alias — qualquer admin de qualquer tenant pode deletar banners de outro.
|
|
191
|
+
- **Recomendação:** scoping por alias se houver mais de um cliente usando.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
### 3.9 `resumes` — média
|
|
196
|
+
|
|
197
|
+
- **Finalidade:** currículos de candidatos (RH).
|
|
198
|
+
- **Consumidores:**
|
|
199
|
+
- [Colaboradores](/projects/37cdf18f-3d54-4af2-a02b-9f7e2d94e654) — fluxo de RH.
|
|
200
|
+
- [Cockpit](/projects/e6853fb4-67f9-4776-b427-7768a9136f10) — migração `20260330141432` cria policy escopada por `auth.uid()`.
|
|
201
|
+
- **Estrutura:** `{alias}/{filename}` (Colaboradores) e `{auth.uid()}/...` (Cockpit) — **dois esquemas convivendo**.
|
|
202
|
+
- **Visibilidade:** privado.
|
|
203
|
+
- **RLS atuais:**
|
|
204
|
+
- `resumes_alias_select`, `resumes_auth_upload` — escopados por `jwt.alias`, exigem extensões `pdf|doc|docx|jpg|jpeg|png`.
|
|
205
|
+
- **Riscos:**
|
|
206
|
+
- 🟠 Há duas convenções de path conflitantes (alias vs uid). Pode haver arquivos "órfãos" que não casam com nenhuma policy.
|
|
207
|
+
- 🟠 Não há policy explícita de UPDATE/DELETE listada.
|
|
208
|
+
- **Recomendação:** alinhar uma única convenção (`{alias}/{auth.uid()}/{file}` cobre os dois) e adicionar UPDATE/DELETE.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
### 3.10 `contracts` — ok
|
|
213
|
+
|
|
214
|
+
- **Finalidade:** templates DOCX e contratos gerados.
|
|
215
|
+
- **Consumidor:** [Colaboradores](/projects/37cdf18f-3d54-4af2-a02b-9f7e2d94e654) — `src/contracts/contractService.ts`, edge function `contract-processor`.
|
|
216
|
+
- **Estrutura:** `{templates|generated}/{alias}/{filename}`.
|
|
217
|
+
- **Visibilidade:** privado.
|
|
218
|
+
- **RLS atuais:** SELECT/INSERT/UPDATE/DELETE escopados por pasta + alias.
|
|
219
|
+
- **Riscos:**
|
|
220
|
+
- 🟢 Bem segregado.
|
|
221
|
+
- 🟡 Policies estão em role `public` com `auth.role() = 'authenticated'` implícito via `jwt`. Funcional mas inconsistente.
|
|
222
|
+
- **Recomendação:** padronizar para `TO authenticated`.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
### 3.11 `user-uploads` — 🚨 alta complexidade
|
|
227
|
+
|
|
228
|
+
Bucket multi-projeto, segregado por subpasta. **Usado por 4 projetos** (Colaboradores, Treinamentos, Matriz de Foco, PDI).
|
|
229
|
+
|
|
230
|
+
- **Visibilidade:** privado.
|
|
231
|
+
- **Estrutura por consumidor:**
|
|
232
|
+
|
|
233
|
+
| Subpasta raiz | Projeto | Uso |
|
|
234
|
+
|---|---|---|
|
|
235
|
+
| `interviews/{alias}/...` | Colaboradores | Áudios/anexos de entrevistas |
|
|
236
|
+
| `training-requests/{alias}/...` | Treinamentos | Anexos de solicitações de treinamento |
|
|
237
|
+
| `imported-evidence/{alias}/...` | Treinamentos | Evidências importadas em massa |
|
|
238
|
+
| `trainings/.../{alias}/...` | Treinamentos | Evidências de treinamento (alias na 3ª pasta) |
|
|
239
|
+
| `evidence-images/...` | Matriz de Foco | Imagens coladas no rich-text editor |
|
|
240
|
+
| `evidence-attachments/{evidenceId}/...` | Matriz de Foco | Anexos de evidências |
|
|
241
|
+
| `evidences/...` | PDI | Anexos de planos de ação |
|
|
242
|
+
|
|
243
|
+
- **RLS atuais:**
|
|
244
|
+
- `interview_scoped_select` — SELECT escopado.
|
|
245
|
+
- `training_requests_attachments_select/insert/delete` — escopados.
|
|
246
|
+
- `imported_evidence_select/insert` — escopados.
|
|
247
|
+
- `trainings_bucket_*` — escopados (mas no bucket `trainings`, não no `user-uploads`).
|
|
248
|
+
- `Authenticated users can update user-uploads` — **UPDATE genérico para qualquer authenticated, sem scoping**.
|
|
249
|
+
- `authenticated_interview_upload` — INSERT genérico no bucket sem scoping (legado da Matriz de Foco antes da migração `20260328223532`).
|
|
250
|
+
- **Não vejo policies SELECT/INSERT explícitas para `evidence-images/`, `evidence-attachments/` e `evidences/`** — provavelmente estão dependendo da policy genérica `authenticated` existente em outra migração.
|
|
251
|
+
|
|
252
|
+
- **Riscos:**
|
|
253
|
+
- 🔴 UPDATE genérico permite que qualquer authenticated sobrescreva arquivos de outros tenants e outros projetos.
|
|
254
|
+
- 🔴 Sem policies específicas para Matriz de Foco / PDI, a leitura/insert pode estar usando uma policy genérica `authenticated_select/insert` (precisa verificar) — se sim, **vazamento cross-tenant**.
|
|
255
|
+
- 🟠 Padrão de path inconsistente entre projetos (uns usam alias na 1ª pasta, outros na 3ª, outros não usam).
|
|
256
|
+
|
|
257
|
+
- **Recomendação:**
|
|
258
|
+
- Padronizar para `{projeto}/{alias}/...`.
|
|
259
|
+
- Substituir UPDATE genérico por policies por subpasta + alias.
|
|
260
|
+
- Auditar e adicionar policies específicas para `evidence-images`, `evidence-attachments`, `evidences`.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
### 3.12 `trainings` — ok
|
|
265
|
+
|
|
266
|
+
- **Finalidade:** evidências de treinamentos (PDFs, fotos).
|
|
267
|
+
- **Consumidor:** [Treinamentos](/projects/e02280e1-3f95-4114-8d83-80d3e8ced304) — `LeaderResolveModal`, `LeaderPendingSelectModal`.
|
|
268
|
+
- **Estrutura:** `.../.../{alias}/...` (alias na 3ª pasta — esquisito).
|
|
269
|
+
- **Visibilidade:** privado.
|
|
270
|
+
- **RLS atuais:** SELECT/INSERT escopados por `(storage.foldername(name))[2] = jwt.alias`.
|
|
271
|
+
- **Riscos:**
|
|
272
|
+
- 🟡 Discrepância: a policy usa pasta `[2]`, mas o resolver de evidências em `evidenceUrlResolver.ts` aceita o bucket. Validar se o path real bate.
|
|
273
|
+
- 🟠 Sem policy explícita de UPDATE/DELETE.
|
|
274
|
+
- **Recomendação:** confirmar convenção de path e adicionar UPDATE/DELETE escopados.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
### 3.13 `performance` — média/alta
|
|
279
|
+
|
|
280
|
+
- **Finalidade:** anexos do módulo de **One-on-One** dentro de Desempenho — evidências de tarefas e relatórios de tarefa.
|
|
281
|
+
- **Consumidor:** [Desempenho](/projects/7c73eab6-bf0a-4cb5-93b3-e1809d1363d7)
|
|
282
|
+
- `src/one-on-ones/services/evidenceService.ts` → pasta `evidences/`
|
|
283
|
+
- `src/one-on-ones/services/taskReportService.ts` → pasta `task-reports/`
|
|
284
|
+
- Ambos usam `getPublicUrl` (ou seja, dependem do bucket ser público para servir os arquivos).
|
|
285
|
+
- **Estrutura real:** `evidences/...` e `task-reports/...` no root (sem segregação por `alias` ou `auth.uid()`).
|
|
286
|
+
- **Visibilidade:** público.
|
|
287
|
+
- **RLS atuais:** apenas `performance_authenticated_insert` (INSERT escopado por `(storage.foldername(name))[1] = jwt.alias`). **Sem SELECT/UPDATE/DELETE explícitos** — caem no default do bucket público.
|
|
288
|
+
- **Riscos:**
|
|
289
|
+
- 🔴 Policy de INSERT exige alias na 1ª pasta, mas o **código grava em `evidences/{file}` e `task-reports/{file}`** — ou seja, a policy **não bate com o path real** e o INSERT só funciona porque… provavelmente está funcionando via outra policy genérica ou os arquivos foram criados antes da policy. Precisa investigar (22 objetos, último em 20/04).
|
|
290
|
+
- 🔴 Bucket público + sem segregação por tenant = qualquer URL adivinhada vaza evidências de qualquer cliente.
|
|
291
|
+
- 🟠 `LIST` anônimo expõe inventário.
|
|
292
|
+
- **Recomendação:**
|
|
293
|
+
1. Realinhar o código para `{alias}/evidences/...` e `{alias}/task-reports/...` (ou alterar a policy para casar com o path atual).
|
|
294
|
+
2. Tornar privado e migrar o front para signed URLs.
|
|
295
|
+
3. Adicionar SELECT/UPDATE/DELETE escopados por alias + autor.
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
### 3.14 `performance-files` — ⚠️ órfão (candidato a deprecar)
|
|
300
|
+
|
|
301
|
+
- **Origem:** criado pela migração `20260203114103_ffecc964-7e28-4605-8516-b851f62d0433.sql` no projeto Desempenho ("bucket dedicado para o módulo de desempenho").
|
|
302
|
+
- **Consumidor atual:** **nenhum** — busca em todo o projeto Desempenho (e nos demais 13 projetos do ecossistema) não encontra nenhuma referência ao nome `performance-files` fora da própria migração. Os 33 objetos existentes parecem ser de testes manuais ou de uma implementação anterior que foi substituída por `performance`.
|
|
303
|
+
- **Estrutura:** `{auth.uid()}/...` (assumido pela policy de DELETE).
|
|
304
|
+
- **Visibilidade:** público.
|
|
305
|
+
- **RLS atuais:**
|
|
306
|
+
- `performance_files_public_read` — SELECT para `public` sem condição.
|
|
307
|
+
- `performance_files_authenticated_insert` — INSERT só `authenticated`, sem scoping por alias.
|
|
308
|
+
- `performance_files_owner_delete` — DELETE só pelo dono via `auth.uid()`.
|
|
309
|
+
- **Riscos:**
|
|
310
|
+
- 🟠 Bucket sem código consumidor: nenhum hardening é prioridade, mas mantê-lo aberto é superfície de ataque desnecessária.
|
|
311
|
+
- 🔴 Bucket público + INSERT sem scoping por alias = qualquer authenticated pode poluir o bucket.
|
|
312
|
+
- **Recomendação:** **deprecar**. Backup dos 33 objetos atuais, migrar (se algum for relevante) para `performance`, depois remover o bucket. Confirmar com o time de Desempenho antes de deletar.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
### 3.15 `knowledge-files` — ❓ a confirmar
|
|
317
|
+
|
|
318
|
+
- **Finalidade provável:** base de conhecimento para IA / chatbot.
|
|
319
|
+
- **Consumidor:** sem uso direto encontrado em nenhum dos 14 projetos. 8 objetos, último em março/2026.
|
|
320
|
+
- **Estrutura:** `{alias}/...`.
|
|
321
|
+
- **Visibilidade:** privado.
|
|
322
|
+
- **RLS atuais:** SELECT/INSERT escopados por `authenticated` + alias.
|
|
323
|
+
- **Riscos:**
|
|
324
|
+
- 🟡 Sem UPDATE/DELETE explícitos.
|
|
325
|
+
- 🟡 Provavelmente consumido por uma edge function (não por front) — confirmar.
|
|
326
|
+
- **Recomendação:** identificar consumidor e validar fluxo antes de mexer.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## 4. Padrões de policies (síntese)
|
|
331
|
+
|
|
332
|
+
Boas práticas observadas no projeto:
|
|
333
|
+
|
|
334
|
+
| Padrão | Onde aparece | Recomendar generalizar |
|
|
335
|
+
|---|---|---|
|
|
336
|
+
| `(storage.foldername(name))[1] = ((SELECT auth.jwt()) ->> 'alias')` | content-videos, contracts, imports, knowledge-files, training-requests, imported-evidence, resumes | ✅ sim — virar padrão |
|
|
337
|
+
| `TO authenticated` explícito | thumbnails, certificates, content-files, university-assets, content-videos, resumes | ✅ sim — converter as policies em role `public` |
|
|
338
|
+
| `(SELECT auth.jwt())` (e não `auth.jwt()`) | a maioria das policies novas | ✅ obrigatório (linter) |
|
|
339
|
+
| Bucket privado + signed URLs | certificates (Educação), contracts | ✅ aplicar a thumbnails, content-files, content-videos |
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## 5. Itens em aberto (a confirmar com o time)
|
|
344
|
+
|
|
345
|
+
1. **`knowledge-files`**: quem consome? É edge function?
|
|
346
|
+
2. **`performance-files`**: confirmar com o time de Desempenho que pode ser deprecado (não há código consumidor; 33 objetos de origem desconhecida).
|
|
347
|
+
3. **`performance`**: alinhar path do código (`evidences/`, `task-reports/`) com a policy (que exige alias na 1ª pasta) — atualmente são incompatíveis.
|
|
348
|
+
4. **`certificates` precisa ser público?** O código de Educação já gera signed URLs, então não.
|
|
349
|
+
5. **`content-videos` privado?** Avaliar custo (player) vs benefício (proteger PII e propriedade intelectual).
|
|
350
|
+
6. **`user-uploads` para Matriz de Foco e PDI**: existem policies dedicadas ou tudo cai numa policy genérica `authenticated`?
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## 6. Próximos passos sugeridos (priorizados)
|
|
355
|
+
|
|
356
|
+
> Cada item é uma migração isolada — abrir uma issue/PR separada por bucket.
|
|
357
|
+
|
|
358
|
+
| Prioridade | Bucket | Ação |
|
|
359
|
+
|---|---|---|
|
|
360
|
+
| 🔴 P0 | `library-assets` | Remover `Allow public upload to library assets` (INSERT anônimo). |
|
|
361
|
+
| 🔴 P0 | `thumbnails` | Trocar `Users can upload thumbnails` por policy `TO authenticated` + scoping por alias. |
|
|
362
|
+
| 🔴 P0 | `user-uploads` | Substituir UPDATE genérico por policies por subpasta + alias; auditar Matriz de Foco e PDI. |
|
|
363
|
+
| 🔴 P0 | `certificates` | Tornar privado + migrar Treinamentos para signed URLs. |
|
|
364
|
+
| 🟠 P1 | `university-assets`, `content-files` | Adicionar scoping por alias em UPDATE/DELETE/INSERT. |
|
|
365
|
+
| 🔴 P0 | `performance` | Realinhar path do código (`evidences/`, `task-reports/`) com a policy de INSERT (que exige `{alias}/...`); tornar privado; adicionar SELECT escopado. |
|
|
366
|
+
| 🟠 P1 | `performance-files` | Deprecar bucket — nenhum código consumidor encontrado; backup dos 33 objetos e remover. |
|
|
367
|
+
| 🟠 P1 | `resumes` | Unificar convenção de path (alias + uid) e adicionar UPDATE/DELETE. |
|
|
368
|
+
| 🟡 P2 | `contracts`, `imports` | Padronizar `TO authenticated` (limpeza, sem mudança funcional). |
|
|
369
|
+
| 🟡 P2 | `career-banners` | Scoping por alias se for multi-tenant. |
|
|
370
|
+
| 🟡 P2 | `content-videos` | Avaliar privado + signed URLs (impacto no player). |
|
|
371
|
+
| 🟡 P2 | Todos públicos | Substituir SELECT default por SELECT `TO authenticated` (ou `TO public` apenas para os realmente públicos como `library-assets` e `career-banners`) — alinha com plano já existente em [Cockpit `.lovable/plan.md`](/projects/e6853fb4-67f9-4776-b427-7768a9136f10). |
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 7. Como manter este documento
|
|
376
|
+
|
|
377
|
+
- Atualizar a cada migração que toque `storage.objects` ou `storage.buckets`.
|
|
378
|
+
- Refresh trimestral dos números (objetos / tamanho) via:
|
|
379
|
+
```sql
|
|
380
|
+
SELECT bucket_id, COUNT(*) AS objects,
|
|
381
|
+
pg_size_pretty(SUM((metadata->>'size')::bigint)) AS total_size
|
|
382
|
+
FROM storage.objects GROUP BY bucket_id ORDER BY bucket_id;
|
|
383
|
+
```
|
|
384
|
+
- Quando um novo projeto consumir um bucket existente, adicioná-lo à matriz da seção 2 e à seção 3 do bucket.
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
| moduleAlias | string | Não | Alias do módulo para verificação de acesso |
|
|
32
32
|
| moduleAccessGuardProps | object | Não | Props para o ModuleAccessGuard |
|
|
33
33
|
| appTranslations | Record<string, Record<string, string>> | Não | Traduções por idioma no namespace 'app' |
|
|
34
|
+
| clarityProjectId | string | Não | Project ID do Microsoft Clarity. Sem ele, integração desativada. Ver `/ds/clarity-tracking`. |
|
|
35
|
+
| clarityMode | 'auto' \| 'disabled' | Não | Opt-out do tracking Clarity. Default `'auto'`. |
|
|
34
36
|
|
|
35
37
|
## QueryClient default
|
|
36
38
|
|
|
@@ -51,6 +51,8 @@ const options: ComboTreeOption[] = [
|
|
|
51
51
|
|
|
52
52
|
- ,
|
|
53
53
|
|
|
54
|
+
- ,
|
|
55
|
+
|
|
54
56
|
|
|
55
57
|
> Fonte: `src/design-system/docs/components/ComboTreeDoc.tsx`
|
|
56
58
|
|
|
@@ -262,6 +264,8 @@ const options: ComboTreeOption[] = [
|
|
|
262
264
|
|
|
263
265
|
- ,
|
|
264
266
|
|
|
267
|
+
- ,
|
|
268
|
+
|
|
265
269
|
|
|
266
270
|
> Fonte: `src/design-system/docs/components/ComboTreeDoc.tsx`
|
|
267
271
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forlogic-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -38,12 +38,18 @@
|
|
|
38
38
|
"build:dev": "vite build --mode development",
|
|
39
39
|
"build:lib": "npx tsx scripts/generate-ds-docs.ts & rollup -c",
|
|
40
40
|
"lint": "eslint .",
|
|
41
|
+
"docs:check": "tsx scripts/check-docs.ts",
|
|
42
|
+
"docs:check-all": "tsx scripts/check-docs.ts --all",
|
|
43
|
+
"docs:fix": "tsx scripts/auto-doc.ts",
|
|
44
|
+
"docs:fix-all": "tsx scripts/auto-doc.ts --all",
|
|
41
45
|
"preview": "vite preview"
|
|
42
46
|
},
|
|
43
47
|
"dependencies": {
|
|
44
48
|
"@dnd-kit/core": "^6.3.1",
|
|
45
49
|
"@dnd-kit/sortable": "^10.0.0",
|
|
50
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
46
51
|
"@hookform/resolvers": "^3.10.0",
|
|
52
|
+
"@microsoft/clarity": "^1.0.2",
|
|
47
53
|
"@radix-ui/react-accordion": "^1.2.11",
|
|
48
54
|
"@radix-ui/react-alert-dialog": "^1.1.14",
|
|
49
55
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|