forlogic-core 1.15.8 → 1.16.1
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/components/action-button-for-tables.md +23 -0
- package/.note/memory/components/alertdialog-permanent-deletion.md +47 -0
- package/.note/memory/components/baseform-custom-fields.md +60 -0
- package/.note/memory/components/baseform-usage.md +43 -0
- package/.note/memory/components/delete-confirmation-dialog.md +48 -0
- package/.note/memory/components/dialog-sizes-and-structure.md +31 -0
- package/.note/memory/components/dialog-variants.md +44 -0
- package/.note/memory/components/pagination-usage.md +28 -0
- package/.note/memory/documentation/consolidated-components-registry.md +18 -0
- package/.note/memory/features/crud-standardized-config-props.md +3 -0
- package/.note/memory/features/import/attachment-strategy.md +18 -0
- package/.note/memory/patterns/body-content-scroll-usage.md +59 -0
- package/.note/memory/patterns/crud-action-bar-3-zone-layout.md +3 -0
- package/.note/memory/patterns/crud-bulk-actions-dropdown-standard.md +3 -0
- package/.note/memory/patterns/crud-toolbar-layout.md +26 -0
- package/.note/memory/patterns/dialog-body-scroll-pattern.md +27 -0
- package/.note/memory/patterns/single-scroll-pattern.md +22 -0
- package/.note/memory/patterns/spa-navigation-pattern.md +19 -0
- package/.note/memory/rules/no-auto-index-rule.md +20 -0
- package/.note/memory/rules/no-delete-policy-rule.md +23 -0
- package/.note/memory/rules/no-env-modification-rule.md +19 -0
- package/.note/memory/rules/supabase-schema-rule.md +19 -0
- package/README.md +8 -4
- package/dist/README.md +7 -4
- package/dist/assets/AccordionDoc-BnfxyOi9.js +31 -0
- package/dist/assets/ActionButtonDoc-b4F_J8gn.js +47 -0
- package/dist/assets/AlertDoc-PkiHguSJ.js +37 -0
- package/dist/assets/AppHeaderDoc-CsFMZGV0.js +67 -0
- package/dist/assets/AppSidebarDoc-Bg71N-zq.js +196 -0
- package/dist/assets/AuthDoc-DDm57y_J.js +192 -0
- package/dist/assets/AvatarDoc-C6wiZIZR.js +11 -0
- package/dist/assets/BadgeDoc-Bsg7cfm0.js +36 -0
- package/dist/assets/BaseFormDoc-DeIlV273.js +169 -0
- package/dist/assets/BodyContentDoc-Q3DGvyN9.js +83 -0
- package/dist/assets/BreadcrumbDoc-ChsVFjMF.js +75 -0
- package/dist/assets/ButtonDoc-C7Q31Bh3.js +41 -0
- package/dist/assets/ButtonGroupDoc-Bn5vhjBq.js +7 -0
- package/dist/assets/CalendarDoc-iVjNyxyr.js +81 -0
- package/dist/assets/CardDoc-D511dll7.js +49 -0
- package/dist/assets/ChartDoc-CQyYOEHL.js +111 -0
- package/dist/assets/CheckboxDoc-Cjsy4XAq.js +55 -0
- package/dist/assets/ColorPickerDoc-hnYJUWpF.js +10 -0
- package/dist/assets/ColorsFoundationDoc-B8Z4tAyZ.js +13 -0
- package/dist/assets/ComboTreeDoc-ChEbW4a3.js +21 -0
- package/dist/assets/ComboboxDoc-CHWeGE_F.js +134 -0
- package/dist/assets/ComponentDocTemplate-BtOCnlM2.js +1 -0
- package/dist/assets/ContextMenuDoc-C3mFO_Yx.js +182 -0
- package/dist/assets/ContextsDoc-ChEbQxom.js +184 -0
- package/dist/assets/CreateCrudPageDoc-C9tXisCF.js +106 -0
- package/dist/assets/CrudActionBarDoc-Cp1L4gpO.js +112 -0
- package/dist/assets/CrudGridDoc-D-kSFBAQ.js +85 -0
- package/dist/assets/CrudOverviewDoc-CeLBwg-B.js +14 -0
- package/dist/assets/CrudPrimitivesDoc-B2u1vZog.js +164 -0
- package/dist/assets/CrudTableDoc-CvV-II_X.js +95 -0
- package/dist/assets/DataListDoc-BLRii0jB.js +13 -0
- package/dist/assets/DesignSystemHome-TE0Ubaup.js +1 -0
- package/dist/assets/DialogDoc--LC5Jvat.js +981 -0
- package/dist/assets/DropdownMenuDoc-oPlEriRY.js +175 -0
- package/dist/assets/EmptyStateDoc-rNqfWKok.js +35 -0
- package/dist/assets/EnvironmentsDoc-CT7l5s2u.js +96 -0
- package/dist/assets/ErrorBoundaryDoc-rPHOUygA.js +111 -0
- package/dist/assets/ExampleCard-DfuMYM6E.js +1 -0
- package/dist/assets/FormDoc-B0L_QaCT.js +81 -0
- package/dist/assets/FoundationOverview-Dbb8rBsU.js +1 -0
- package/dist/assets/GridDoc-ifcGA2Yw.js +28 -0
- package/dist/assets/HooksDoc-CUOT_3Du.js +665 -0
- package/dist/assets/HoverCardDoc-CdTU2QkI.js +31 -0
- package/dist/assets/I18nDoc-CMEvFqsz.js +232 -0
- package/dist/assets/IconPickerDoc-DF9hEwnJ.js +10 -0
- package/dist/assets/IconsFoundationDoc-D4Y0wKbm.js +33 -0
- package/dist/assets/InputDoc-d_IL4dsq.js +211 -0
- package/dist/assets/LabelDoc-Dr64ISiJ.js +42 -0
- package/dist/assets/LeadershipDoc-BnrTuaeV.js +416 -0
- package/dist/assets/MediaDoc-CLuVprAr.js +459 -0
- package/dist/assets/MenubarDoc-CW7L4QJ4.js +165 -0
- package/dist/assets/ModulesDialogDoc-CUb_g4X-.js +71 -0
- package/dist/assets/NavigationMenuDoc-Csc0U6bV.js +116 -0
- package/dist/assets/OnboardingDialogDoc-3RtjNH1O.js +55 -0
- package/dist/assets/PaginationDoc-BGurD4xQ.js +27 -0
- package/dist/assets/PaginationDoc-DqFyou6O.js +98 -0
- package/dist/assets/PlacesDoc-Dyx8gsqb.js +226 -0
- package/dist/assets/PopoverDoc-DHF-ItUX.js +64 -0
- package/dist/assets/ProgressDoc-DXKV-fkI.js +29 -0
- package/dist/assets/QualiexUserFieldDoc-BbP7w-Pu.js +149 -0
- package/dist/assets/RadioGroupDoc-D845uweM.js +57 -0
- package/dist/assets/RadiusDoc-vN4tTsay.js +7 -0
- package/dist/assets/RequiredFieldsCounterDoc-TzR9r-U9.js +58 -0
- package/dist/assets/ResizableDoc-Bkfz_25O.js +104 -0
- package/dist/assets/RichTextEditorDoc-BUQrg7M8.js +24 -0
- package/dist/assets/ScrollAreaDoc-B6ODYHMX.js +28 -0
- package/dist/assets/SecurityDoc-Chbt6w1s.js +204 -0
- package/dist/assets/SelectDoc-BhcpBIAO.js +80 -0
- package/dist/assets/SeparatorDoc-C3fhatb0.js +4 -0
- package/dist/assets/ServicesDoc-_uao-HA_.js +308 -0
- package/dist/assets/ShadowsDoc-DpkO_TZQ.js +9 -0
- package/dist/assets/SignDoc-BJtnoT6I.js +66 -0
- package/dist/assets/SkeletonDoc-BZS07PJh.js +54 -0
- package/dist/assets/SliderDoc-D2ApV3XT.js +41 -0
- package/dist/assets/SpacingDoc-PNrU24B2.js +12 -0
- package/dist/assets/SplitButtonDoc-D5tUF2Ja.js +53 -0
- package/dist/assets/StepSelectorDoc-Cj0ALYar.js +41 -0
- package/dist/assets/SwitchDoc-DtsT8oh_.js +56 -0
- package/dist/assets/TableDoc-BC-jQnXu.js +128 -0
- package/dist/assets/TableOfContents-DBMJMbI4.js +1 -0
- package/dist/assets/TabsDoc-DtXJ0xY5.js +42 -0
- package/dist/assets/TextareaDoc-nuW5tqBQ.js +46 -0
- package/dist/assets/ToastDoc-D1aX5zda.js +157 -0
- package/dist/assets/ToggleDoc-ILass4CS.js +51 -0
- package/dist/assets/TooltipDoc-lPbdWe_9.js +58 -0
- package/dist/assets/TruncatedCellDoc-DOAzbF2F.js +12 -0
- package/dist/assets/TypographyFoundationDoc-3ZD-rQZw.js +7 -0
- package/dist/assets/UtilitiesDoc-D7lkYhuz.js +145 -0
- package/dist/assets/blocks-Jy49RoqJ.js +1 -0
- package/dist/assets/calendar-days-Cvf2zLJl.js +1 -0
- package/dist/assets/circle-plus-MnG9kjyq.js +1 -0
- package/dist/assets/circle-x-B9ouupla.js +1 -0
- package/dist/assets/crown-BweN5jpI.js +1 -0
- package/dist/assets/date-picker-ttyYeYvC.js +1 -0
- package/dist/assets/disabled-menu-item-WlpPOqxg.js +1 -0
- package/dist/assets/drawer-DvU6_eK5.js +3 -0
- package/dist/assets/file-pen-line-C0VV-QjF.js +1 -0
- package/dist/assets/git-branch-DCjGGwvF.js +1 -0
- package/dist/assets/globe-BdFDFP_k.js +1 -0
- package/dist/assets/grip-vertical-CgXp0oI-.js +1 -0
- package/dist/assets/hash-BAYi_wfk.js +1 -0
- package/dist/assets/index-BtX5DZqb.js +310 -0
- package/dist/assets/index-C1So5Sai.css +1 -0
- package/dist/assets/life-buoy-BydIgTyJ.js +1 -0
- package/dist/assets/lucide-react-ZIMhRYmb.js +1 -0
- package/dist/assets/monitor-B6txWJPg.js +1 -0
- package/dist/assets/package-DNe3FsCh.js +1 -0
- package/dist/assets/pen-CzTmQ16z.js +1 -0
- package/dist/assets/pin-CJJgLEBz.js +1 -0
- package/dist/assets/radio-group-Btv_BY60.js +1 -0
- package/dist/assets/server-XQDXtrjm.js +1 -0
- package/dist/assets/share-2-Dz_89MJb.js +1 -0
- package/dist/assets/step-selector-D0_Y1dow.js +1 -0
- package/dist/assets/text-align-start-WsHo7CNJ.js +1 -0
- package/dist/assets/trash-CeK-mWnM.js +1 -0
- package/dist/assets/useMockCrud-RV9z9n5x.js +1 -0
- package/dist/assets/user-check-CrbWcnPN.js +1 -0
- package/dist/assets/user-plus-Dce9DbqQ.js +1 -0
- package/dist/auth/services/TokenManager.d.ts +5 -0
- package/dist/auth/services/TokenRegenerationService.d.ts +5 -3
- package/dist/auth/services/TokenService.d.ts +0 -4
- package/dist/bin/pull-docs.js +87 -64
- package/dist/components/modules/ModuleAccessGuard.d.ts +16 -0
- package/dist/components/modules/index.d.ts +2 -0
- package/dist/components/ui/chart.d.ts +1 -1
- package/dist/components/ui/color-picker.d.ts +4 -0
- package/dist/components/ui/combo-tree.d.ts +70 -0
- package/dist/components/ui/combobox.d.ts +1 -0
- package/dist/components/ui/dialog.d.ts +8 -0
- package/dist/components/ui/icon-picker.d.ts +2 -0
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/config/environments.d.ts +12 -0
- package/dist/config/index.d.ts +23 -9
- package/dist/contexts/ModuleContext.d.ts +34 -0
- package/dist/crud/components/SelectionCheckbox.d.ts +9 -0
- package/dist/crud/generateCrudConfig.d.ts +2 -2
- package/dist/docs/KNOWLEDGE.md +206 -0
- package/dist/exports/ui.d.ts +1 -0
- package/dist/hooks/useMediaQuery.d.ts +14 -0
- package/dist/hooks/useModuleAccess.d.ts +60 -0
- package/dist/hooks/usePageTitle.d.ts +7 -1
- package/dist/index.css +2 -2
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.html +16 -11
- package/dist/index.js +1 -1
- package/dist/leadership/hooks/useLeadershipMutations.d.ts +0 -1
- package/dist/media/hooks/useMediaUpload.d.ts +0 -1
- package/dist/media/utils/imageHelpers.d.ts +1 -1
- package/dist/places/services/PlaceService.d.ts +1 -1
- package/dist/providers/CoreProviders.d.ts +20 -4
- package/dist/qualiex/services/qualiexApi.d.ts +22 -4
- package/dist/services/QualiexEnrichmentService.d.ts +0 -12
- package/dist/setup.d.ts +2 -0
- package/dist/sign/services/signService.d.ts +0 -6
- package/dist/types.d.ts +59 -10
- package/dist/utils/index.d.ts +2 -2
- package/docs/DESIGN_SYSTEM.md +12181 -0
- package/docs/KNOWLEDGE.md +206 -0
- package/docs/PUBLISH.md +168 -0
- package/package.json +16 -18
- package/dist/assets/index-D0RTIFH3.css +0 -1
- package/dist/assets/index-YMQXWoDk.js +0 -9868
- package/dist/auth/utils/AuthUtils.d.ts +0 -4
- package/dist/i18n/DatabaseBackend.d.ts +0 -9
- package/dist/i18n/components/TranslationLoader.d.ts +0 -10
- package/dist/services/TranslationService.d.ts +0 -20
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# KNOWLEDGE — Regras Críticas do Projeto
|
|
2
|
+
|
|
3
|
+
> 📖 **Fonte oficial completa**: `README.md` | 🎨 **Design System**: `docs/DESIGN_SYSTEM.md`
|
|
4
|
+
> 🤖 **Para IA**: Consulte `.note/memory/` para padrões de componentes e layout
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 0. Variável de Schema
|
|
9
|
+
|
|
10
|
+
> ⚠️ **SCHEMA_PADRAO = `common`**
|
|
11
|
+
>
|
|
12
|
+
> Todos os exemplos abaixo usam `SCHEMA_PADRAO`. Em cada projeto, substitua pelo schema correto.
|
|
13
|
+
> **Neste projeto o schema é `common`.**
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Schema Padrão
|
|
18
|
+
|
|
19
|
+
Toda query Supabase **DEVE** usar `.schema('SCHEMA_PADRAO')`. O projeto **NÃO** usa o schema `public`.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
// ✅ CORRETO
|
|
23
|
+
const { data } = await supabase.schema('SCHEMA_PADRAO').from('tabela').select('*');
|
|
24
|
+
|
|
25
|
+
// ❌ ERRADO (vai falhar em produção)
|
|
26
|
+
const { data } = await supabase.from('tabela').select('*');
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. RLS Policies
|
|
32
|
+
|
|
33
|
+
### Regras obrigatórias
|
|
34
|
+
- **NUNCA** criar policy `FOR DELETE` — usar soft delete (`deleted_at` + policy `FOR UPDATE`)
|
|
35
|
+
- **SEMPRE** usar `(SELECT auth.uid())` ou `(SELECT auth.jwt())` com parênteses — evita re-execução por linha
|
|
36
|
+
- Sintaxe: `SELECT` → `USING` | `INSERT` → `WITH CHECK` | `UPDATE` → `USING` + `WITH CHECK`
|
|
37
|
+
|
|
38
|
+
### Padrão JWT alias (multi-tenancy por alias)
|
|
39
|
+
|
|
40
|
+
```sql
|
|
41
|
+
-- SELECT
|
|
42
|
+
CREATE POLICY "table_select" ON SCHEMA_PADRAO.tabela
|
|
43
|
+
FOR SELECT USING (
|
|
44
|
+
((SELECT auth.jwt()) ->> 'alias'::text) = alias
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
-- INSERT
|
|
48
|
+
CREATE POLICY "table_insert" ON SCHEMA_PADRAO.tabela
|
|
49
|
+
FOR INSERT WITH CHECK (
|
|
50
|
+
((SELECT auth.jwt()) ->> 'alias'::text) = alias
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
-- UPDATE
|
|
54
|
+
CREATE POLICY "table_update" ON SCHEMA_PADRAO.tabela
|
|
55
|
+
FOR UPDATE
|
|
56
|
+
USING (((SELECT auth.jwt()) ->> 'alias'::text) = alias)
|
|
57
|
+
WITH CHECK (((SELECT auth.jwt()) ->> 'alias'::text) = alias);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Alternativa: auth.uid() (quando tabela tem `id_user`)
|
|
61
|
+
|
|
62
|
+
```sql
|
|
63
|
+
CREATE POLICY "table_select" ON SCHEMA_PADRAO.tabela
|
|
64
|
+
FOR SELECT USING (auth.uid() = id_user);
|
|
65
|
+
|
|
66
|
+
CREATE POLICY "table_insert" ON SCHEMA_PADRAO.tabela
|
|
67
|
+
FOR INSERT WITH CHECK (auth.uid() = id_user);
|
|
68
|
+
|
|
69
|
+
CREATE POLICY "table_update" ON SCHEMA_PADRAO.tabela
|
|
70
|
+
FOR UPDATE
|
|
71
|
+
USING (auth.uid() = id_user)
|
|
72
|
+
WITH CHECK (auth.uid() = id_user);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Padrão company_id (multi-tenancy por empresa)
|
|
76
|
+
|
|
77
|
+
```sql
|
|
78
|
+
CREATE POLICY "table_select" ON SCHEMA_PADRAO.tabela
|
|
79
|
+
FOR SELECT TO authenticated
|
|
80
|
+
USING (
|
|
81
|
+
company_id = (
|
|
82
|
+
SELECT (auth.jwt() -> 'user_metadata' ->> 'company_id')::uuid
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### ❌ Erros comuns de RLS
|
|
88
|
+
|
|
89
|
+
```sql
|
|
90
|
+
-- ❌ WITH CHECK em SELECT (deve ser USING)
|
|
91
|
+
CREATE POLICY "x" ON SCHEMA_PADRAO.t FOR SELECT WITH CHECK (...);
|
|
92
|
+
|
|
93
|
+
-- ❌ USING em INSERT (deve ser WITH CHECK)
|
|
94
|
+
CREATE POLICY "x" ON SCHEMA_PADRAO.t FOR INSERT USING (...);
|
|
95
|
+
|
|
96
|
+
-- ❌ Parênteses extra no JWT
|
|
97
|
+
CREATE POLICY "x" ON SCHEMA_PADRAO.t FOR SELECT USING (
|
|
98
|
+
((SELECT (auth.jwt()) ->> 'alias'::text)) = alias
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
-- ❌ Política DELETE (usar soft delete)
|
|
102
|
+
CREATE POLICY "x" ON SCHEMA_PADRAO.t FOR DELETE USING (...);
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Soft delete (padrão obrigatório)
|
|
106
|
+
|
|
107
|
+
```sql
|
|
108
|
+
ALTER TABLE SCHEMA_PADRAO.tabela ADD COLUMN deleted_at TIMESTAMP WITH TIME ZONE;
|
|
109
|
+
|
|
110
|
+
-- Filtrar registros ativos
|
|
111
|
+
CREATE POLICY "table_select" ON SCHEMA_PADRAO.tabela
|
|
112
|
+
FOR SELECT USING (
|
|
113
|
+
deleted_at IS NULL
|
|
114
|
+
AND ((SELECT auth.jwt()) ->> 'alias'::text) = alias
|
|
115
|
+
);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Tabela de roles (quando necessário)
|
|
119
|
+
|
|
120
|
+
Usar função `SECURITY DEFINER` para checar roles e evitar recursão RLS:
|
|
121
|
+
|
|
122
|
+
```sql
|
|
123
|
+
CREATE FUNCTION public.has_role(_user_id uuid, _role app_role)
|
|
124
|
+
RETURNS boolean LANGUAGE sql STABLE SECURITY DEFINER
|
|
125
|
+
SET search_path = public AS $$
|
|
126
|
+
SELECT EXISTS (SELECT 1 FROM public.user_roles WHERE user_id = _user_id AND role = _role)
|
|
127
|
+
$$;
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 3. Convenções de Nomenclatura (SQL)
|
|
133
|
+
|
|
134
|
+
| Tipo | Padrão | Exemplo |
|
|
135
|
+
|------|--------|---------|
|
|
136
|
+
| FK | `id_<tabela_singular>` | `id_process`, `id_user` |
|
|
137
|
+
| Boolean | `is_` ou `has_` | `is_active`, `has_access` |
|
|
138
|
+
| Timestamps | `created_at`, `updated_at`, `deleted_at` | — |
|
|
139
|
+
| Tabelas | plural, snake_case | `processes`, `user_roles` |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 4. Proibições
|
|
144
|
+
|
|
145
|
+
| Regra | Detalhe |
|
|
146
|
+
|-------|---------|
|
|
147
|
+
| ❌ Índices automáticos | Nunca criar índices em migrations sem aprovação explícita |
|
|
148
|
+
| ❌ Modificar `.env` | Nunca sem autorização explícita do usuário |
|
|
149
|
+
| ❌ Policy DELETE | Usar soft delete com `deleted_at` |
|
|
150
|
+
| ❌ Duplicar componentes da lib | Sempre usar `forlogic-core` primeiro |
|
|
151
|
+
| ❌ Hardcoded admin checks | Nunca usar localStorage/sessionStorage para verificar roles |
|
|
152
|
+
| ❌ Import direto do client auto-gerado | Nunca importar de `@/integrations/supabase/client`. Usar `getSupabaseClient()` de `forlogic-core`. ESLint `no-restricted-imports` bloqueia automaticamente. O arquivo existe apenas como fonte de dados para o `vite.config.ts`. |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 5. Lib-First (forlogic-core)
|
|
157
|
+
|
|
158
|
+
Antes de criar qualquer componente, verificar se já existe em `forlogic-core`:
|
|
159
|
+
|
|
160
|
+
- **UI**: Button, Dialog, Input, Select, Combobox, SplitButton, RichTextEditor, ColorPicker, IconPicker, etc.
|
|
161
|
+
- **Layout**: AppLayout, AppHeader, AppSidebar, BodyContent
|
|
162
|
+
- **CRUD**: createCrudPage, CrudTable, CrudGrid, CrudActionBar, BaseForm
|
|
163
|
+
- **Utilitários**: ActionButton, Pagination, FilterBar, EmptyState, LoadingState, StepSelector
|
|
164
|
+
- **Módulos**: Sign, Places, Leadership, Media, ModulesDialog
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
import { Button, Dialog, createCrudPage, cn, formatDatetime } from 'forlogic-core';
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 6. Padrões CRUD
|
|
173
|
+
|
|
174
|
+
- **Toolbar**: Layout 3 zonas — Esquerda (Botão Novo + Ações em lote), Centro (Busca), Direita (Filtros + Toggle view)
|
|
175
|
+
- **Paginação**: Sempre usar `CrudPrimitivePagination` com `variant="full"`
|
|
176
|
+
- **Ações em lote**: Dropdown "Ações em lote" no CrudActionBar (não criar BulkActionBar separado)
|
|
177
|
+
- **Ações de linha**: Sempre usar `ActionButton` da lib (nunca botão genérico com ícone MoreHorizontal)
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 7. Componentes/Padrões Deprecated
|
|
182
|
+
|
|
183
|
+
| Não usar | Usar em vez disso |
|
|
184
|
+
|----------|-------------------|
|
|
185
|
+
| `BulkActionBar` separado | Dropdown integrado no `CrudActionBar` |
|
|
186
|
+
| Botão genérico `<MoreHorizontal>` | `ActionButton` da lib |
|
|
187
|
+
| Paginação manual | `CrudPrimitivePagination` |
|
|
188
|
+
| `public` schema | `.schema('SCHEMA_PADRAO')` |
|
|
189
|
+
| `StatusSelect` | `Combobox` |
|
|
190
|
+
| `DeleteConfirmationDialog` | `Dialog` |
|
|
191
|
+
| `Searchbar` | `Input` com ícone |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 8. Fontes Complementares
|
|
196
|
+
|
|
197
|
+
| Fonte | Caminho | Conteúdo |
|
|
198
|
+
|-------|---------|----------|
|
|
199
|
+
| **Memory rules** | `.note/memory/rules/` | Regras de schema, RLS, índices, .env |
|
|
200
|
+
| **Memory patterns** | `.note/memory/patterns/` | Layouts CRUD, toolbar, scroll, navegação SPA |
|
|
201
|
+
| **Memory components** | `.note/memory/components/` | ActionButton, BaseForm, Dialog, Pagination |
|
|
202
|
+
| **README.md** | `README.md` | Documentação completa e genérica da lib |
|
|
203
|
+
| **Design System** | Rota `/ds` no app | Documentação visual de todos os componentes |
|
|
204
|
+
| **DESIGN_SYSTEM.md** | `docs/DESIGN_SYSTEM.md` | Documentação técnica do Design System |
|
|
205
|
+
|
|
206
|
+
> 📌 Ao implementar qualquer funcionalidade, consulte as fontes acima antes de criar código novo.
|
package/docs/PUBLISH.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# 📦 Como Publicar a Biblioteca forlogic-core
|
|
2
|
+
|
|
3
|
+
> **Nota:** Para documentação de uso e instalação da biblioteca, consulte [README.md](../README.md)
|
|
4
|
+
|
|
5
|
+
## Configuração Inicial
|
|
6
|
+
|
|
7
|
+
A biblioteca está configurada para ser publicada no NPM como `forlogic-core`.
|
|
8
|
+
|
|
9
|
+
### Arquivos de Configuração
|
|
10
|
+
|
|
11
|
+
- `package.json` - Configuração principal com campos de biblioteca
|
|
12
|
+
- `rollup.config.js` - Configuração de build
|
|
13
|
+
- `tsconfig.json` - Configuração TypeScript unificada
|
|
14
|
+
- `.npmignore` - Arquivos excluídos da publicação (inclui `docs/` - não publicada no NPM)
|
|
15
|
+
- `README.md` - Documentação principal (copiada para dist/)
|
|
16
|
+
|
|
17
|
+
## Comandos Disponíveis
|
|
18
|
+
|
|
19
|
+
### 1. Build da Biblioteca
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run build:lib
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 2. Teste de Publicação (Dry Run)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm publish --dry-run
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3. Release Automatizado (Recomendado)
|
|
32
|
+
|
|
33
|
+
**Script JavaScript**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Release patch (1.0.0 → 1.0.1)
|
|
37
|
+
node scripts/publish/release.js patch
|
|
38
|
+
|
|
39
|
+
# Release minor (1.0.0 → 1.1.0)
|
|
40
|
+
node scripts/publish/release.js minor
|
|
41
|
+
|
|
42
|
+
# Release major (1.0.0 → 2.0.0)
|
|
43
|
+
node scripts/publish/release.js major
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 4. Publicação Manual (Legado)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Incrementar versão e publicar manualmente
|
|
50
|
+
npm version patch # 1.0.0 → 1.0.1
|
|
51
|
+
npm version minor # 1.0.0 → 1.1.0
|
|
52
|
+
npm version major # 1.0.0 → 2.0.0
|
|
53
|
+
|
|
54
|
+
# Publicar versão atual
|
|
55
|
+
npm publish
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Processo de Release Automatizado
|
|
59
|
+
|
|
60
|
+
### Scripts Automatizados
|
|
61
|
+
|
|
62
|
+
Os scripts `scripts/publish/release.js` e `scripts/publish/release.sh` executam automaticamente:
|
|
63
|
+
|
|
64
|
+
1. **Verificação**: Confere se não há mudanças pendentes no Git
|
|
65
|
+
2. **Build**: Executa `npm run build:lib` com Rollup
|
|
66
|
+
3. **Versão**: Incrementa versão no `package.json`
|
|
67
|
+
4. **Publicação**: Publica no NPM
|
|
68
|
+
5. **Tags**: Envia tags para o GitHub
|
|
69
|
+
|
|
70
|
+
### Processo Manual (Legado)
|
|
71
|
+
|
|
72
|
+
1. **Build**: Executa `npm run build:lib` com Rollup
|
|
73
|
+
2. **Geração**: Cria arquivos CJS, ESM e declarações TypeScript
|
|
74
|
+
3. **Publicação**: Usa `npm publish` diretamente
|
|
75
|
+
|
|
76
|
+
## Estrutura da Publicação
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
dist/
|
|
80
|
+
├── index.js # CommonJS
|
|
81
|
+
├── index.esm.js # ES Modules
|
|
82
|
+
├── index.d.ts # TypeScript declarations
|
|
83
|
+
├── index.css # CSS da biblioteca
|
|
84
|
+
├── package.json # Configuração da lib
|
|
85
|
+
└── README.md # Documentação
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Documentação para Usuários
|
|
89
|
+
|
|
90
|
+
A documentação completa está **consolidada no README.md** e disponível publicamente no repositório GitHub:
|
|
91
|
+
|
|
92
|
+
- **[📖 README.md](../README.md)** - Guia completo (~350 linhas)
|
|
93
|
+
- ✅ Regras críticas e checklist
|
|
94
|
+
- ✅ Quick start CRUD
|
|
95
|
+
- ✅ Migrations e RLS
|
|
96
|
+
- ✅ Troubleshooting
|
|
97
|
+
- ✅ Referência rápida
|
|
98
|
+
|
|
99
|
+
### ⚙️ Documentação no Pacote NPM
|
|
100
|
+
|
|
101
|
+
O `README.md` é incluído no pacote NPM publicado (`dist/README.md`) e contém toda a documentação necessária em um único arquivo otimizado para leitura por IA e desenvolvedores.
|
|
102
|
+
|
|
103
|
+
#### Documentações Modulares
|
|
104
|
+
|
|
105
|
+
Algumas features possuem documentação detalhada em arquivos específicos para desenvolvimento local:
|
|
106
|
+
|
|
107
|
+
- `lib/crud/components/CUSTOM_FIELDS.md` - Campos customizados do BaseForm
|
|
108
|
+
- `lib/qualiex/places/README.md` - Sistema de gestores de locais
|
|
109
|
+
|
|
110
|
+
**Importante:** Essas documentações **não são publicadas no NPM**. O conteúdo consolidado está no `README.md` principal que é copiado para `dist/README.md`.
|
|
111
|
+
|
|
112
|
+
## Verificação antes da Publicação
|
|
113
|
+
|
|
114
|
+
1. ✅ Build bem-sucedido (`npm run build:lib`)
|
|
115
|
+
2. ✅ Dry-run sem erros (`npm publish --dry-run`)
|
|
116
|
+
3. ✅ Versão correta no `package.json`
|
|
117
|
+
4. ✅ README atualizado
|
|
118
|
+
5. ✅ Changelog documentado (se aplicável)
|
|
119
|
+
|
|
120
|
+
## Troubleshooting
|
|
121
|
+
|
|
122
|
+
### Erro de Permissão NPM
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm login
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Build Falha
|
|
129
|
+
|
|
130
|
+
Verifique se todas as dependências estão instaladas:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm install
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Rollup Errors
|
|
137
|
+
|
|
138
|
+
Confirme que o `rollup.config.js` está correto e que o `lib/index.ts` existe e exporta tudo necessário.
|
|
139
|
+
|
|
140
|
+
### CSS Import Issues
|
|
141
|
+
|
|
142
|
+
Se houver erro ao importar CSS, use:
|
|
143
|
+
|
|
144
|
+
```tsx
|
|
145
|
+
import 'forlogic-core/index.css';
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
O CSS é extraído para `index.css` durante o build da biblioteca.
|
|
149
|
+
|
|
150
|
+
# Comandos Disponíveis
|
|
151
|
+
|
|
152
|
+
## Instalar a última versão do forlogic-core
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npm i forlogic-core@latest
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Build do projeto
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npm run build
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Limpar cache do NPM
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npm cache clean --force
|
|
168
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forlogic-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
28
|
"dist",
|
|
29
|
+
"docs",
|
|
30
|
+
".note/memory",
|
|
29
31
|
"DESIGN_SYSTEM.md"
|
|
30
32
|
],
|
|
31
33
|
"sideEffects": [
|
|
@@ -44,13 +46,9 @@
|
|
|
44
46
|
"lib-update": "dist/bin/pull-docs.js"
|
|
45
47
|
},
|
|
46
48
|
"dependencies": {
|
|
47
|
-
"@babel/parser": "^7.28.5",
|
|
48
|
-
"@babel/traverse": "^7.28.5",
|
|
49
|
-
"@babel/types": "^7.28.5",
|
|
50
49
|
"@dnd-kit/core": "^6.3.1",
|
|
51
50
|
"@dnd-kit/sortable": "^10.0.0",
|
|
52
51
|
"@hookform/resolvers": "^3.10.0",
|
|
53
|
-
"@playwright/test": "^1.57.0",
|
|
54
52
|
"@radix-ui/react-accordion": "^1.2.11",
|
|
55
53
|
"@radix-ui/react-alert-dialog": "^1.1.14",
|
|
56
54
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
@@ -77,12 +75,7 @@
|
|
|
77
75
|
"@radix-ui/react-toggle": "^1.1.9",
|
|
78
76
|
"@radix-ui/react-toggle-group": "^1.1.10",
|
|
79
77
|
"@radix-ui/react-tooltip": "^1.2.7",
|
|
80
|
-
"@
|
|
81
|
-
"@rollup/plugin-json": "^6.1.0",
|
|
82
|
-
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
83
|
-
"@rollup/plugin-terser": "^0.4.4",
|
|
84
|
-
"@supabase/supabase-js": "^2.98.0",
|
|
85
|
-
"@svgr/rollup": "^8.1.0",
|
|
78
|
+
"@supabase/supabase-js": "^2.99.0",
|
|
86
79
|
"@tanstack/react-query": "^5.83.0",
|
|
87
80
|
"@tiptap/extension-color": "^3.14.0",
|
|
88
81
|
"@tiptap/extension-highlight": "^3.14.0",
|
|
@@ -97,22 +90,16 @@
|
|
|
97
90
|
"date-fns-tz": "^3.2.0",
|
|
98
91
|
"exceljs": "^4.4.0",
|
|
99
92
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
93
|
+
"jszip": "^3.10.1",
|
|
100
94
|
"lucide-react": "^0.553.0",
|
|
101
95
|
"next-themes": "^0.3.0",
|
|
102
96
|
"react": "^18.3.1",
|
|
103
97
|
"react-day-picker": "^9.13.0",
|
|
104
98
|
"react-dom": "^18.3.1",
|
|
105
99
|
"react-hook-form": "^7.61.1",
|
|
106
|
-
"react-is": "^19.2.3",
|
|
107
|
-
"react-markdown": "^10.1.0",
|
|
108
|
-
"react-refresh": "^0.18.0",
|
|
109
100
|
"react-resizable-panels": "^3.0.6",
|
|
110
101
|
"react-router-dom": "^6.30.1",
|
|
111
102
|
"recharts": "^3.6.0",
|
|
112
|
-
"remark-gfm": "^4.0.1",
|
|
113
|
-
"rollup": "^4.50.1",
|
|
114
|
-
"rollup-plugin-copy": "^3.5.0",
|
|
115
|
-
"rollup-plugin-postcss": "^4.0.2",
|
|
116
103
|
"sonner": "^1.7.4",
|
|
117
104
|
"tailwind-merge": "^3.3.1",
|
|
118
105
|
"tailwindcss-animate": "^1.0.7",
|
|
@@ -124,9 +111,17 @@
|
|
|
124
111
|
"react-i18next": "^16.0.0"
|
|
125
112
|
},
|
|
126
113
|
"devDependencies": {
|
|
114
|
+
"@babel/parser": "^7.28.5",
|
|
115
|
+
"@babel/traverse": "^7.28.5",
|
|
116
|
+
"@babel/types": "^7.28.5",
|
|
127
117
|
"@eslint/js": "^9.32.0",
|
|
118
|
+
"@rollup/plugin-commonjs": "^28.0.6",
|
|
119
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
120
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
121
|
+
"@rollup/plugin-terser": "1.0.0",
|
|
128
122
|
"@rollup/plugin-typescript": "^12.1.4",
|
|
129
123
|
"@rollup/plugin-url": "^8.0.2",
|
|
124
|
+
"@svgr/rollup": "^8.1.0",
|
|
130
125
|
"@tailwindcss/typography": "^0.5.16",
|
|
131
126
|
"@types/file-saver": "^2.0.7",
|
|
132
127
|
"@types/node": "^22.16.5",
|
|
@@ -141,7 +136,10 @@
|
|
|
141
136
|
"globals": "^15.15.0",
|
|
142
137
|
"lovable-tagger": "^1.1.9",
|
|
143
138
|
"postcss": "^8.5.6",
|
|
139
|
+
"rollup": "^4.50.1",
|
|
140
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
144
141
|
"rollup-plugin-esbuild": "^6.2.1",
|
|
142
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
145
143
|
"tailwindcss": "^3.4.17",
|
|
146
144
|
"tsx": "^4.20.6",
|
|
147
145
|
"typescript": "^5.8.3",
|