forlogic-core 2.0.7 → 2.1.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/.note/memory/patterns/admin-i18n-policy.md +20 -0
- package/.note/memory/patterns/i18n-architecture.md +3 -0
- package/README.md +34 -269
- package/dist/action-plans/constants.d.ts +23 -3
- package/dist/audit-trail/utils.d.ts +5 -5
- package/dist/auth/components/EditProfileDialog.d.ts +12 -0
- package/dist/auth/contexts/AuthContext.d.ts +1 -1
- package/dist/auth/services/AuthService.d.ts +1 -1
- package/dist/components/dashboards/panels/panel-header.d.ts +1 -1
- package/dist/components/layout/SidebarActionTrigger.d.ts +3 -3
- package/dist/components/modules/ModuleAccessGuard.d.ts +1 -1
- package/dist/components/modules/icons/ModulesCardIcons.d.ts +2 -2
- package/dist/components/ui/color-picker.d.ts +2 -2
- package/dist/components/ui/combo-tree.d.ts +3 -1
- package/dist/components/ui/data-list.d.ts +2 -2
- package/dist/components/ui/dialog-wizard.d.ts +1 -1
- package/dist/components/ui/dialog.d.ts +1 -1
- package/dist/components/ui/disabled-menu-item.d.ts +1 -1
- package/dist/components/ui/empty-state.d.ts +9 -9
- package/dist/components/ui/onboarding-dialog.d.ts +1 -1
- package/dist/components/ui/popover.d.ts +1 -1
- package/dist/components/ui/split-button.d.ts +2 -2
- package/dist/components/ui/terms-of-use-dialog.d.ts +3 -3
- package/dist/config/index.d.ts +1 -1
- package/dist/contexts/PageMetadataContext.d.ts +2 -2
- package/dist/crud/components/CrudTable.d.ts +3 -1
- package/dist/crud/components/FilterBar.d.ts +2 -2
- package/dist/crud/primitives/Table.d.ts +2 -2
- package/dist/crud/primitives/types.d.ts +1 -1
- package/dist/i18n/index.d.ts +1 -10
- package/dist/i18n/utils.d.ts +14 -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/leadership/components/LeadershipPage.d.ts +1 -1
- package/dist/media/components/ImageRenderer.d.ts +1 -1
- package/dist/media/components/VideoEditor.d.ts +0 -20
- package/dist/media/components/VideoRenderer.d.ts +0 -6
- package/dist/qualiex/components/QualiexUserField.d.ts +1 -1
- package/dist/tailwind/index.esm.js +4 -0
- package/dist/tailwind/index.js +4 -0
- package/dist/types.d.ts +1 -0
- package/docs/WORKSPACE_KNOWLEDGE.md +119 -0
- package/docs/design-system/README.md +1 -1
- package/docs/design-system/patterns/feature-flags.md +1 -0
- package/docs/design-system/patterns/i18n-setup.md +76 -1
- package/package.json +1 -1
- package/docs/AUDIT_PROMPT.md +0 -74
- package/docs/ICON_MIGRATION_GUIDE.md +0 -177
- package/docs/KNOWLEDGE.md +0 -109
- package/docs/PROJECT_KNOWLEDGE_TEMPLATE.md +0 -120
- package/docs/PROMPT_TEMPLATE.md +0 -77
- package/docs/PUBLISH.md +0 -168
- package/docs/STARTER_TEMPLATE.md +0 -114
package/docs/KNOWLEDGE.md
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# KNOWLEDGE — Regras Críticas do Projeto
|
|
2
|
-
|
|
3
|
-
> 🤖 **Para IA**: Detalhes de componentes, props e tipos → ler do projeto **Admin** via cross-project.
|
|
4
|
-
> Padrões universais (componentes, layout, CRUD, scroll) → `docs/design-system/patterns/`
|
|
5
|
-
> Padrões internos do Admin → `.note/memory/`
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 0. Schema do Projeto
|
|
10
|
-
|
|
11
|
-
**SCHEMA = `common`**
|
|
12
|
-
|
|
13
|
-
☝️ Este é o **único local** onde o schema é definido. Toda query Supabase
|
|
14
|
-
**DEVE** usar `.schema('<valor acima>')`. Altere **apenas aqui** ao configurar
|
|
15
|
-
um novo projeto.
|
|
16
|
-
|
|
17
|
-
```ts
|
|
18
|
-
// ✅ usar o schema definido acima
|
|
19
|
-
supabase.schema('common').from('tabela').select('*');
|
|
20
|
-
// ❌ vai falhar (sem schema)
|
|
21
|
-
supabase.from('tabela').select('*');
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 1. Regras Invioláveis
|
|
27
|
-
|
|
28
|
-
| Regra | Detalhe |
|
|
29
|
-
|-------|---------|
|
|
30
|
-
| Schema obrigatório | `.schema()` com o schema do projeto (seção 0) em toda query |
|
|
31
|
-
| Sem DELETE físico | Soft delete com `deleted_at` + policy `FOR UPDATE` |
|
|
32
|
-
| Sem índices automáticos | Apenas com aprovação explícita |
|
|
33
|
-
| Sem modificar `.env` | Apenas com autorização do usuário |
|
|
34
|
-
| Sem hardcoded admin | Nunca localStorage/sessionStorage para roles |
|
|
35
|
-
| Lib-first | Usar `forlogic-core` antes de criar componente |
|
|
36
|
-
| Import do Supabase | Sempre `getSupabaseClient()` de `forlogic-core`, nunca `@/integrations/supabase/client` |
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 2. RLS — Resumo de Sintaxe
|
|
41
|
-
|
|
42
|
-
- `SELECT` → `USING` | `INSERT` → `WITH CHECK` | `UPDATE` → `USING` + `WITH CHECK`
|
|
43
|
-
- **Nunca** `FOR DELETE`
|
|
44
|
-
- **Sempre** `(SELECT auth.jwt())` com parênteses (evita re-execução por linha)
|
|
45
|
-
- Padrão multi-tenant: `((SELECT auth.jwt()) ->> 'alias'::text) = alias`
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 3. Convenções SQL
|
|
50
|
-
|
|
51
|
-
| Tipo | Padrão | Exemplo |
|
|
52
|
-
|------|--------|---------|
|
|
53
|
-
| FK | `id_<singular>` | `id_process` |
|
|
54
|
-
| Boolean | `is_` / `has_` | `is_active` |
|
|
55
|
-
| Timestamps | `created_at`, `updated_at`, `deleted_at` | — |
|
|
56
|
-
| Tabelas | plural, snake_case | `processes` |
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## 4. Mapa de Módulos (forlogic-core)
|
|
61
|
-
|
|
62
|
-
> Para props, tipos e implementação: ler do projeto **Admin** (forlogic-core) via cross-project.
|
|
63
|
-
|
|
64
|
-
| Módulo | Caminho | O que contém |
|
|
65
|
-
|--------|---------|--------------|
|
|
66
|
-
| **UI Components** | `lib/components/ui/` | Button, Dialog, Input, Select, Combobox, Badge, Tabs, etc. |
|
|
67
|
-
| **Layout** | `lib/components/layout/` | AppLayout, AppHeader, AppSidebar, BodyContent |
|
|
68
|
-
| **CRUD** | `lib/crud/` | createCrudPage, CrudTable, CrudGrid, BaseForm, ActionBar |
|
|
69
|
-
| **CRUD Primitives** | `lib/crud/primitives/` | Table, FilterBar, Pagination, ActionMenu, TreeTable |
|
|
70
|
-
| **Auth** | `lib/auth/` | AuthContext, ProtectedRoute, LoginPage, TokenManager |
|
|
71
|
-
| **Módulos** | `lib/components/modules/` | ModulesDialog, ModuleGrid, ModuleAccessGuard |
|
|
72
|
-
| **Places** | `lib/places/` | PlacesList, PlaceCard, ManageAccessModal |
|
|
73
|
-
| **Leadership** | `lib/leadership/` | LeadershipPage, LeadershipDialog |
|
|
74
|
-
| **Media** | `lib/media/` | ImageEditor, VideoEditor, useMediaUpload |
|
|
75
|
-
| **Sign** | `lib/sign/` | SignWidget, D4SignWidget, SignConfigForm |
|
|
76
|
-
| **Qualiex** | `lib/qualiex/` | QualiexUserField, useQualiexUsers |
|
|
77
|
-
| **i18n** | `lib/i18n/` | Namespaces core/app, JSONs por idioma, addAppTranslations, formatadores |
|
|
78
|
-
| **Config** | `lib/config/` | Environments, CRUD defaults, mensagens |
|
|
79
|
-
| **Services** | `lib/services/` | BaseService, EmailService, ErrorService |
|
|
80
|
-
| **Hooks** | `lib/hooks/` | useDebounce, useWizard, useModuleAccess, useColumnResize |
|
|
81
|
-
| **Providers** | `lib/providers/` | CoreProviders (setup simplificado) |
|
|
82
|
-
| **Vite** | `lib/vite/` | create-config, CSP, security headers |
|
|
83
|
-
| **Tailwind** | `lib/tailwind/` | Preset compartilhado |
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 5. Padrões Deprecated
|
|
88
|
-
|
|
89
|
-
| ❌ Não usar | ✅ Usar |
|
|
90
|
-
|------------|--------|
|
|
91
|
-
| `BulkActionBar` separado | Dropdown no `CrudActionBar` |
|
|
92
|
-
| `<MoreHorizontal>` genérico | `ActionButton` |
|
|
93
|
-
| Paginação manual | `CrudPrimitivePagination` |
|
|
94
|
-
| `StatusSelect` | `Combobox` |
|
|
95
|
-
| `DeleteConfirmationDialog` | `Dialog` |
|
|
96
|
-
| `Searchbar` | `Input` com ícone |
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## 6. Fontes de Contexto
|
|
101
|
-
|
|
102
|
-
| Fonte | Caminho | Conteúdo |
|
|
103
|
-
|-------|---------|----------|
|
|
104
|
-
| **Padrões universais** | `docs/design-system/patterns/` | Componentes, CRUD, layout, scroll, setup — acessível via cross-project |
|
|
105
|
-
| Padrões internos Admin | `.note/memory/` | Lógicas específicas do Admin (alias, doc-sync, env detection) |
|
|
106
|
-
| Código-fonte da lib | Cross-project → projeto **Admin** (forlogic-core) | Props, tipos, implementação |
|
|
107
|
-
| Design System (visual) | Rota `/ds` no app do projeto **Admin** | Documentação interativa |
|
|
108
|
-
|
|
109
|
-
> ℹ️ Padrões universais foram migrados de `.note/memory/` para `docs/design-system/patterns/` para ficarem acessíveis a todos os projetos consumidores via `@Admin docs/design-system/patterns/`. `KNOWLEDGE.md` é a fonte única de verdade para regras e convenções.
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# KNOWLEDGE — [Nome do Módulo]
|
|
2
|
-
|
|
3
|
-
> Copie este template para o Project Knowledge do seu projeto Lovable.
|
|
4
|
-
> Preencha os placeholders `[...]` e remova comentários `<!-- -->`.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 0. Schema
|
|
9
|
-
|
|
10
|
-
> ⚠️ **SCHEMA_PADRAO = `[seu_schema]`**
|
|
11
|
-
|
|
12
|
-
```ts
|
|
13
|
-
supabase.schema('[seu_schema]').from('tabela').select('*');
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 1. Regras do Módulo
|
|
19
|
-
|
|
20
|
-
<!-- Liste regras específicas deste módulo que a IA precisa saber -->
|
|
21
|
-
|
|
22
|
-
- [Regra 1: ex: Processos só podem ser inativados, nunca deletados]
|
|
23
|
-
- [Regra 2: ex: Todo documento precisa de aprovação antes de publicar]
|
|
24
|
-
- [Regra 3: ex: Usuários só veem dados do próprio alias/empresa]
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 2. Mapa de Telas
|
|
29
|
-
|
|
30
|
-
<!-- Para cada tela, descreva: nome, tipo, tabela e componentes do DS -->
|
|
31
|
-
|
|
32
|
-
### [Nome da Tela 1: ex: Processos]
|
|
33
|
-
|
|
34
|
-
- **Tipo**: CRUD listagem
|
|
35
|
-
- **Tabela**: `[processes]`
|
|
36
|
-
- **Componente DS**: `createCrudPage` ou `CrudTable`
|
|
37
|
-
- **Colunas**: [title, status, responsible, updated_at]
|
|
38
|
-
- **Ações de linha**: [Editar, Duplicar, Inativar]
|
|
39
|
-
- **Filtros**: [status, responsible]
|
|
40
|
-
|
|
41
|
-
### [Nome da Tela 2: ex: Formulário de Processo]
|
|
42
|
-
|
|
43
|
-
- **Tipo**: Formulário (Dialog ou página)
|
|
44
|
-
- **Tabela**: `[processes]`
|
|
45
|
-
- **Campos**:
|
|
46
|
-
- `title` — text, obrigatório
|
|
47
|
-
- `description` — textarea
|
|
48
|
-
- `status` — Combobox (Ativo, Inativo, Rascunho)
|
|
49
|
-
- `id_responsible` — Combobox (busca em users)
|
|
50
|
-
- `due_date` — DatePicker
|
|
51
|
-
|
|
52
|
-
<!-- Repita para cada tela do módulo -->
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## 3. Tabelas e Relacionamentos
|
|
57
|
-
|
|
58
|
-
<!-- Liste as tabelas do módulo com campos principais -->
|
|
59
|
-
|
|
60
|
-
| Tabela | Campos principais | FKs |
|
|
61
|
-
|--------|-------------------|-----|
|
|
62
|
-
| `[processes]` | id, title, status, created_at, deleted_at | id_responsible → users |
|
|
63
|
-
| `[documents]` | id, name, version, id_process | id_process → processes |
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## 4. Enums e Status
|
|
68
|
-
|
|
69
|
-
<!-- Liste valores possíveis para campos de status/tipo -->
|
|
70
|
-
|
|
71
|
-
| Campo | Valores |
|
|
72
|
-
|-------|---------|
|
|
73
|
-
| `processes.status` | `active`, `inactive`, `draft` |
|
|
74
|
-
| `documents.type` | `policy`, `procedure`, `instruction` |
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## 5. Regras de Negócio por Tela
|
|
79
|
-
|
|
80
|
-
<!-- Detalhe regras específicas que afetam a UI -->
|
|
81
|
-
|
|
82
|
-
### [Processos]
|
|
83
|
-
- Ao inativar: confirmar com Dialog, definir `deleted_at = now()`
|
|
84
|
-
- Coluna status: exibir com Badge colorido (active=green, inactive=red)
|
|
85
|
-
- Busca: pesquisar em `title` e `description`
|
|
86
|
-
|
|
87
|
-
### [Formulário]
|
|
88
|
-
- Campo `title`: mínimo 3 caracteres
|
|
89
|
-
- Campo `id_responsible`: carregar de `users` filtrado por alias
|
|
90
|
-
- Ao salvar: validar com Zod, exibir toast de sucesso
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## 6. Imports Obrigatórios
|
|
95
|
-
|
|
96
|
-
```ts
|
|
97
|
-
import {
|
|
98
|
-
createCrudPage, CrudTable, CrudActionBar,
|
|
99
|
-
Button, Dialog, Input, Combobox, ActionButton,
|
|
100
|
-
BaseForm, EmptyState, LoadingState,
|
|
101
|
-
cn, useTranslation, getSupabaseClient
|
|
102
|
-
} from 'forlogic-core';
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## 7. Fontes de Contexto (Cross-Project)
|
|
108
|
-
|
|
109
|
-
Antes de criar qualquer componente, leia via cross-project (`@Admin`):
|
|
110
|
-
|
|
111
|
-
| O que | Onde buscar |
|
|
112
|
-
|-------|------------|
|
|
113
|
-
| Padrões universais (componentes, CRUD, layout, scroll, setup) | `@Admin docs/design-system/patterns/` |
|
|
114
|
-
| Índice dos padrões | `@Admin docs/design-system/patterns/README.md` |
|
|
115
|
-
| Documentação MD do Design System | `@Admin docs/design-system/*.md` |
|
|
116
|
-
| Código-fonte dos componentes | `@Admin lib/components/ui/` |
|
|
117
|
-
| Implementação CRUD | `@Admin lib/crud/` |
|
|
118
|
-
| Design System visual | Rota `/ds` no app Admin |
|
|
119
|
-
|
|
120
|
-
Nunca crie componentes sem consultar esses arquivos primeiro.
|
package/docs/PROMPT_TEMPLATE.md
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Prompt Template — Criação de Telas com Design System
|
|
2
|
-
|
|
3
|
-
> **Como usar**: Copie o bloco abaixo e cole como **primeiro prompt** ao iniciar uma conversa no Lovable para criar/migrar telas em projetos consumidores. Preencha os placeholders `[...]`.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Prompt para copiar
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
Antes de gerar qualquer código, leia OBRIGATORIAMENTE a documentação do Design System via cross-project:
|
|
11
|
-
|
|
12
|
-
@Admin docs/design-system/crud.md — para telas de listagem (CRUD)
|
|
13
|
-
@Admin docs/design-system/inputs.md — para campos de formulário
|
|
14
|
-
@Admin docs/design-system/selectors.md — para selects, combos, multiselect
|
|
15
|
-
@Admin docs/design-system/layout.md — para estrutura de página (AppSidebar, AppLayout)
|
|
16
|
-
@Admin docs/design-system/dialogs.md — para modais e confirmações
|
|
17
|
-
@Admin docs/design-system/buttons-actions.md — para botões e ações
|
|
18
|
-
@Admin docs/design-system/data-display.md — para exibição de dados
|
|
19
|
-
@Admin docs/design-system/tables-grids.md — para tabelas e grids
|
|
20
|
-
|
|
21
|
-
Regras obrigatórias:
|
|
22
|
-
1. TODO import de componente visual DEVE vir de `forlogic-core` — nunca criar componente local se existir na lib
|
|
23
|
-
2. Usar `createCrudPage` para telas de listagem simples, `CrudTable` para customizadas
|
|
24
|
-
3. Usar `Combobox` para selects com busca (nunca Select nativo ou StatusSelect)
|
|
25
|
-
4. Usar `ActionButton` para ações de linha (nunca ícone MoreHorizontal solto)
|
|
26
|
-
5. Usar `Dialog` para confirmações (nunca DeleteConfirmationDialog)
|
|
27
|
-
6. Usar `.schema('SCHEMA_PADRAO')` em toda query Supabase
|
|
28
|
-
7. Usar `useTranslation` de `forlogic-core`, nunca de `react-i18next`
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
Agora crie a seguinte tela:
|
|
33
|
-
|
|
34
|
-
**Nome da tela**: [ex: Gestão de Processos]
|
|
35
|
-
**Tipo**: [CRUD listagem | Formulário | Dashboard | Detalhe]
|
|
36
|
-
**Schema Supabase**: [ex: quality]
|
|
37
|
-
**Tabela principal**: [ex: processes]
|
|
38
|
-
|
|
39
|
-
**Campos da listagem** (se CRUD):
|
|
40
|
-
- [campo1]: [tipo] — [descrição]
|
|
41
|
-
- [campo2]: [tipo] — [descrição]
|
|
42
|
-
|
|
43
|
-
**Campos do formulário** (se tiver criação/edição):
|
|
44
|
-
- [campo1]: [tipo, obrigatório?] — [descrição]
|
|
45
|
-
- [campo2]: [tipo, obrigatório?] — [descrição]
|
|
46
|
-
|
|
47
|
-
**Regras de negócio**:
|
|
48
|
-
- [regra 1]
|
|
49
|
-
- [regra 2]
|
|
50
|
-
|
|
51
|
-
**Ações disponíveis**:
|
|
52
|
-
- [ação 1: ex: Editar, Duplicar, Inativar]
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Mapeamento: Tipo de tela → Docs obrigatórios
|
|
58
|
-
|
|
59
|
-
| Tipo de tela | Docs que a IA DEVE ler |
|
|
60
|
-
|--------------|------------------------|
|
|
61
|
-
| CRUD listagem | `crud.md`, `buttons-actions.md`, `tables-grids.md` |
|
|
62
|
-
| Formulário | `inputs.md`, `selectors.md`, `dialogs.md` |
|
|
63
|
-
| Dashboard | `charts-dashboards.md`, `data-display.md` |
|
|
64
|
-
| Página com sidebar | `layout.md`, `navigation.md` |
|
|
65
|
-
| Modal/Dialog | `dialogs.md`, `inputs.md` |
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Checklist de revisão pós-geração
|
|
70
|
-
|
|
71
|
-
- [ ] Todos os imports vêm de `forlogic-core`?
|
|
72
|
-
- [ ] Nenhum componente foi criado localmente quando existe na lib?
|
|
73
|
-
- [ ] `Combobox` usado em vez de Select/StatusSelect?
|
|
74
|
-
- [ ] `ActionButton` usado para ações de linha?
|
|
75
|
-
- [ ] `CrudActionBar` com layout de 3 zonas?
|
|
76
|
-
- [ ] `.schema('SCHEMA_PADRAO')` em toda query?
|
|
77
|
-
- [ ] Soft delete em vez de DELETE físico?
|
package/docs/PUBLISH.md
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
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.js patch
|
|
38
|
-
|
|
39
|
-
# Release minor (1.0.0 → 1.1.0)
|
|
40
|
-
node scripts/publish.js minor
|
|
41
|
-
|
|
42
|
-
# Release major (1.0.0 → 2.0.0)
|
|
43
|
-
node scripts/publish.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/docs/STARTER_TEMPLATE.md
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Starter Template — Projeto Consumidor forlogic-core
|
|
2
|
-
|
|
3
|
-
> **Como usar**: Ao criar um novo projeto no Lovable, cole este conteúdo como **primeiro prompt** para gerar a estrutura base completa.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Prompt para criar projeto base
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
Crie a estrutura base do projeto seguindo EXATAMENTE este boilerplate.
|
|
11
|
-
Leia @Admin docs/design-system/layout.md antes de começar.
|
|
12
|
-
|
|
13
|
-
### 1. vite.config.ts
|
|
14
|
-
|
|
15
|
-
import { defineConfig } from 'vite';
|
|
16
|
-
import react from '@vitejs/plugin-react-swc';
|
|
17
|
-
import path from 'path';
|
|
18
|
-
import { createSecurityHeadersPlugin } from 'forlogic-core/vite';
|
|
19
|
-
|
|
20
|
-
export default defineConfig(({ mode }) => ({
|
|
21
|
-
plugins: [
|
|
22
|
-
react(),
|
|
23
|
-
createSecurityHeadersPlugin(mode === 'development', {
|
|
24
|
-
supabaseUrls: ['https://SEU_PROJETO.supabase.co'],
|
|
25
|
-
additionalConnectSrc: ['https://*.qualiex.com'],
|
|
26
|
-
}),
|
|
27
|
-
],
|
|
28
|
-
resolve: { alias: { '@': path.resolve(__dirname, './src') } },
|
|
29
|
-
optimizeDeps: { force: true },
|
|
30
|
-
}));
|
|
31
|
-
|
|
32
|
-
### 2. tailwind.config.ts
|
|
33
|
-
|
|
34
|
-
import type { Config } from 'tailwindcss';
|
|
35
|
-
import { forlogicTailwindPreset, forlogicContentPaths } from 'forlogic-core/tailwind';
|
|
36
|
-
|
|
37
|
-
export default {
|
|
38
|
-
presets: [forlogicTailwindPreset],
|
|
39
|
-
content: ['./src/**/*.{ts,tsx}', ...forlogicContentPaths],
|
|
40
|
-
} satisfies Config;
|
|
41
|
-
|
|
42
|
-
### 3. src/App.tsx
|
|
43
|
-
|
|
44
|
-
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
45
|
-
import { CoreProviders, AppLayout } from 'forlogic-core';
|
|
46
|
-
import { Home, FileText, Settings } from 'lucide-react';
|
|
47
|
-
import ptBR from './i18n/pt-BR.json';
|
|
48
|
-
import { HomePage } from './pages/HomePage';
|
|
49
|
-
|
|
50
|
-
const sidebarConfig = {
|
|
51
|
-
navigation: [
|
|
52
|
-
{ label: 'Início', path: '/', icon: Home },
|
|
53
|
-
{ label: 'Registros', path: '/registros', icon: FileText },
|
|
54
|
-
{ type: 'separator' as const, label: '', path: '' },
|
|
55
|
-
{ label: 'Configurações', path: '/config', icon: Settings },
|
|
56
|
-
],
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
function AppRoutes() {
|
|
60
|
-
return (
|
|
61
|
-
<AppLayout sidebarConfig={sidebarConfig}>
|
|
62
|
-
<Routes>
|
|
63
|
-
<Route path="/" element={<HomePage />} />
|
|
64
|
-
<Route path="*" element={<Navigate to="/" replace />} />
|
|
65
|
-
</Routes>
|
|
66
|
-
</AppLayout>
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export default function App() {
|
|
71
|
-
return (
|
|
72
|
-
<CoreProviders moduleAlias="SEU_MODULO" appTranslations={{ 'pt-BR': ptBR }}>
|
|
73
|
-
<BrowserRouter>
|
|
74
|
-
<AppRoutes />
|
|
75
|
-
</BrowserRouter>
|
|
76
|
-
</CoreProviders>
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
### 4. src/pages/HomePage.tsx
|
|
81
|
-
|
|
82
|
-
import { usePageMetadata } from 'forlogic-core';
|
|
83
|
-
|
|
84
|
-
export function HomePage() {
|
|
85
|
-
usePageMetadata({ title: 'Início', subtitle: 'Bem-vindo ao módulo' });
|
|
86
|
-
return <div className="p-6">Conteúdo aqui</div>;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
### 5. src/i18n/pt-BR.json
|
|
90
|
-
|
|
91
|
-
{
|
|
92
|
-
"home": "Início",
|
|
93
|
-
"records": "Registros",
|
|
94
|
-
"settings": "Configurações"
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
Substitua:
|
|
98
|
-
- SEU_PROJETO pelo ref do Supabase
|
|
99
|
-
- SEU_MODULO pelo alias do módulo (ex: "performance", "suppliers")
|
|
100
|
-
- Ajuste as rotas e sidebar conforme o módulo
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Checklist pós-criação
|
|
106
|
-
|
|
107
|
-
- [ ] `forlogic-core` instalado como dependência
|
|
108
|
-
- [ ] `vite.config.ts` usando `createSecurityHeadersPlugin`
|
|
109
|
-
- [ ] `tailwind.config.ts` usando `forlogicTailwindPreset` + `forlogicContentPaths`
|
|
110
|
-
- [ ] `App.tsx` usando `CoreProviders` + `AppLayout`
|
|
111
|
-
- [ ] Sidebar com itens e separadores definidos
|
|
112
|
-
- [ ] `usePageMetadata` em cada página
|
|
113
|
-
- [ ] `.schema('SCHEMA_PADRAO')` em toda query Supabase
|
|
114
|
-
- [ ] Arquivo `pt-BR.json` com traduções do módulo
|