forlogic-core 2.0.7 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.note/memory/patterns/admin-i18n-policy.md +20 -0
  2. package/.note/memory/patterns/i18n-architecture.md +3 -0
  3. package/README.md +34 -269
  4. package/dist/action-plans/constants.d.ts +23 -3
  5. package/dist/audit-trail/utils.d.ts +5 -5
  6. package/dist/auth/components/EditProfileDialog.d.ts +12 -0
  7. package/dist/auth/contexts/AuthContext.d.ts +1 -1
  8. package/dist/auth/services/AuthService.d.ts +1 -1
  9. package/dist/components/dashboards/panels/panel-header.d.ts +1 -1
  10. package/dist/components/layout/SidebarActionTrigger.d.ts +3 -3
  11. package/dist/components/modules/ModuleAccessGuard.d.ts +1 -1
  12. package/dist/components/modules/icons/ModulesCardIcons.d.ts +2 -2
  13. package/dist/components/ui/color-picker.d.ts +2 -2
  14. package/dist/components/ui/combo-tree.d.ts +3 -1
  15. package/dist/components/ui/data-list.d.ts +2 -2
  16. package/dist/components/ui/dialog-wizard.d.ts +1 -1
  17. package/dist/components/ui/dialog.d.ts +1 -1
  18. package/dist/components/ui/disabled-menu-item.d.ts +1 -1
  19. package/dist/components/ui/empty-state.d.ts +9 -9
  20. package/dist/components/ui/onboarding-dialog.d.ts +1 -1
  21. package/dist/components/ui/popover.d.ts +1 -1
  22. package/dist/components/ui/split-button.d.ts +2 -2
  23. package/dist/components/ui/terms-of-use-dialog.d.ts +3 -3
  24. package/dist/config/index.d.ts +1 -1
  25. package/dist/contexts/PageMetadataContext.d.ts +2 -2
  26. package/dist/crud/components/CrudTable.d.ts +3 -1
  27. package/dist/crud/components/FilterBar.d.ts +2 -2
  28. package/dist/crud/primitives/Table.d.ts +2 -2
  29. package/dist/crud/primitives/types.d.ts +1 -1
  30. package/dist/i18n/index.d.ts +1 -10
  31. package/dist/i18n/utils.d.ts +14 -0
  32. package/dist/index.css +1 -1
  33. package/dist/index.css.map +1 -1
  34. package/dist/index.esm.js +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/leadership/components/LeadershipPage.d.ts +1 -1
  37. package/dist/media/components/ImageRenderer.d.ts +1 -1
  38. package/dist/media/components/VideoEditor.d.ts +0 -20
  39. package/dist/media/components/VideoRenderer.d.ts +0 -6
  40. package/dist/qualiex/components/QualiexUserField.d.ts +1 -1
  41. package/dist/types.d.ts +1 -0
  42. package/docs/WORKSPACE_KNOWLEDGE.md +254 -0
  43. package/docs/design-system/README.md +1 -1
  44. package/docs/design-system/patterns/feature-flags.md +1 -0
  45. package/docs/design-system/patterns/i18n-setup.md +76 -1
  46. package/package.json +1 -1
  47. package/docs/AUDIT_PROMPT.md +0 -74
  48. package/docs/KNOWLEDGE.md +0 -109
  49. package/docs/PROJECT_KNOWLEDGE_TEMPLATE.md +0 -120
  50. package/docs/PROMPT_TEMPLATE.md +0 -77
  51. package/docs/STARTER_TEMPLATE.md +0 -114
@@ -13,7 +13,7 @@ export interface LeadershipPageProps {
13
13
  columns?: TreeTableColumn<LeaderNode>[];
14
14
  /** Header da coluna de nome (default: "Líder") */
15
15
  nameHeader?: string;
16
- /** Texto da zona de drop raiz (default: "Tornar Líder Raiz") */
16
+ /** Texto da zona de drop raiz (default: t('leadership_make_root')) */
17
17
  rootDropLabel?: string;
18
18
  }
19
19
  export declare function LeadershipPage({ unassociatedUsers, onAssociateUser, onMoveNode: customMoveNode, onMoveNodes: customMoveNodes, columns: customColumns, nameHeader, rootDropLabel, }?: LeadershipPageProps): import("react/jsx-runtime").JSX.Element;
@@ -12,7 +12,7 @@
12
12
  * content={{
13
13
  * imageUrl: 'https://example.com/image.jpg',
14
14
  * caption: 'Minha imagem',
15
- * alt: 'Descrição da imagem',
15
+ * alt: t('image_description'),
16
16
  * alignment: 'center',
17
17
  * allowDownload: true
18
18
  * }}
@@ -1,22 +1,2 @@
1
- /**
2
- * Video Editor Component
3
- *
4
- * Editor genérico de vídeo para forlogic-core.
5
- * Suporta URL, upload e código embed.
6
- *
7
- * @example
8
- * ```tsx
9
- * import { VideoEditor } from 'forlogic-core';
10
- *
11
- * <VideoEditor
12
- * value={videoData}
13
- * onChange={setVideoData}
14
- * onSubmit={handleSave}
15
- * onCancel={handleCancel}
16
- * uploadFunction={myUploadFunction}
17
- * uploadOptions={{ bucket: 'videos', folder: 'content' }}
18
- * />
19
- * ```
20
- */
21
1
  import type { MediaEditorProps, VideoBlockContent } from '../types';
22
2
  export declare function VideoEditor({ value, onChange, onSubmit, onCancel, uploadFunction, deleteFunction, uploadOptions }: MediaEditorProps<VideoBlockContent>): import("react/jsx-runtime").JSX.Element;
@@ -1,8 +1,2 @@
1
- /**
2
- * Video Renderer Component
3
- *
4
- * Renderizador genérico de vídeo para forlogic-core.
5
- * Suporta YouTube, Vimeo e arquivos diretos.
6
- */
7
1
  import type { MediaRendererProps, VideoBlockContent } from '../types';
8
2
  export declare function VideoRenderer({ content, className, style }: MediaRendererProps<VideoBlockContent>): import("react/jsx-runtime").JSX.Element;
@@ -52,7 +52,7 @@ export type QualiexUserDisplayFormat = 'name' | 'name-email' | 'name-role' | 'cu
52
52
  * // Display customizado
53
53
  * <QualiexUserField
54
54
  * displayFormat="custom"
55
- * customDisplayFn={(user) => `${user.userName} - ${user.placeName || 'Sem local'}`}
55
+ * customDisplayFn={(user) => `${user.userName} - ${user.placeName || t('no_place_selected')}`}
56
56
  * value={userId}
57
57
  * onChange={setUserId}
58
58
  * />
package/dist/types.d.ts CHANGED
@@ -405,6 +405,7 @@ export interface UserInfo {
405
405
  name: string;
406
406
  identifier: string;
407
407
  alias?: string;
408
+ isSysAdmin: boolean;
408
409
  }
409
410
  export interface Company {
410
411
  id: string;
@@ -0,0 +1,254 @@
1
+ # forlogic-core — Workspace Knowledge
2
+
3
+ > **Documento de referência** para todos os projetos que consomem `forlogic-core`.
4
+ > Cole este conteúdo como **Workspace Knowledge** no Lovable.
5
+
6
+ ---
7
+
8
+ ## 🔗 Cross-Project: Projeto Admin (DS + Lib)
9
+
10
+ > **Para consultar componentes, props, tipos, exemplos e implementação**: use cross-project (`@Admin`) para ler arquivos do projeto **"Admin"** (`qualiex-admin`).
11
+
12
+ ### Caminhos úteis no projeto Admin
13
+
14
+ | O que procurar | Caminho no Admin |
15
+ |----------------|------------------|
16
+ | Código-fonte dos componentes UI | `lib/components/ui/` |
17
+ | Sistema CRUD | `lib/crud/` |
18
+ | Barrel exports (lista completa) | `lib/exports/ui.ts`, `lib/exports/index.ts` |
19
+ | Documentação MD do Design System | `docs/design-system/` |
20
+ | Docs interativos (código-fonte) | `src/design-system/docs/` |
21
+ | Hooks compartilhados | `lib/hooks/` |
22
+ | Providers (CoreProviders) | `lib/providers/` |
23
+ | Serviços (Base, Email, Error) | `lib/services/` |
24
+ | Config Vite/Tailwind | `lib/vite/`, `lib/tailwind/` |
25
+ | Constituição (regras canônicas) | `spec/constitution.md` |
26
+ | Prompt template | `docs/PROMPT_TEMPLATE.md` |
27
+ | Project Knowledge template | `docs/PROJECT_KNOWLEDGE_TEMPLATE.md` |
28
+ | Starter template | `docs/STARTER_TEMPLATE.md` |
29
+ | Golden snippets | `docs/design-system/examples.md` |
30
+
31
+ ---
32
+
33
+ ## 0. Schema do Projeto
34
+
35
+ > ⚠️ **O schema é definido no `README.md` de cada projeto.** Consulte-o antes de qualquer query.
36
+
37
+ ```ts
38
+ // ✅ CORRETO — substituir pelo schema do projeto (ex: 'common', 'docs', etc.)
39
+ supabase.schema('SCHEMA_DO_PROJETO').from('tabela').select('*');
40
+
41
+ // ❌ ERRADO (vai falhar em produção)
42
+ supabase.from('tabela').select('*');
43
+ ```
44
+
45
+ > Nunca usar o schema `public`. Cada projeto tem seu próprio schema documentado no `README.md`.
46
+
47
+ ---
48
+
49
+ ## 1. Constituição — Regras Canônicas
50
+
51
+ > 📖 **Todas as regras, convenções e melhores práticas estão em `spec/constitution.md`** no projeto Admin.
52
+
53
+ Antes de implementar qualquer funcionalidade, consulte a constituição via cross-project:
54
+ ```
55
+ @Admin spec/constitution.md
56
+ ```
57
+
58
+ ### Resumo das regras invioláveis
59
+
60
+ | Regra | Detalhe |
61
+ |-------|---------|
62
+ | Schema obrigatório | `.schema('...')` em toda query Supabase (schema do `README.md`) |
63
+ | Sem DELETE físico | Soft delete com `deleted_at` + policy `FOR UPDATE` |
64
+ | Sem índices automáticos | Apenas com aprovação explícita + `EXPLAIN ANALYZE` |
65
+ | Sem modificar `.env` | Apenas com autorização do usuário |
66
+ | Sem hardcoded admin | Nunca localStorage/sessionStorage para roles |
67
+ | Lib-first | Usar `forlogic-core` antes de criar componente |
68
+ | Import do Supabase | Sempre `getSupabaseClient()` de `forlogic-core` |
69
+ | Import de i18n | Sempre `useTranslation` de `forlogic-core`, nunca de `react-i18next` |
70
+
71
+ ---
72
+
73
+ ## 2. Lib-First — forlogic-core
74
+
75
+ > Antes de criar qualquer componente, **verificar se já existe em `forlogic-core`**.
76
+
77
+ ```ts
78
+ // ✅ CORRETO
79
+ import { Button, Dialog, Input, Combobox, ActionButton, useTranslation } from 'forlogic-core';
80
+
81
+ // ❌ PROIBIDO — criar componente local que já existe na lib
82
+ import { MyCustomButton } from '@/components/MyCustomButton';
83
+ ```
84
+
85
+ ### Checklist
86
+
87
+ - [ ] Pesquisei se existe na forlogic-core?
88
+ - [ ] Verifiquei o Design System (`@Admin docs/design-system/`)?
89
+ - [ ] Pode ser alcançado com props/variantes existentes?
90
+
91
+ ### Exceções permitidas
92
+
93
+ 1. Componente específico de domínio de negócio (ex: `InvoiceCard`)
94
+ 2. Composição de componentes da lib (wrapper Dialog + Form)
95
+ 3. Protótipo temporário que será migrado para a lib
96
+
97
+ ---
98
+
99
+ ## 3. Design System — Categorias
100
+
101
+ > Para ver props e exemplos: `@Admin docs/design-system/<arquivo>.md`
102
+
103
+ | Categoria | Arquivo |
104
+ |-----------|---------|
105
+ | Fundação | `foundation.md` |
106
+ | Botões & Ações | `buttons-actions.md` |
107
+ | Inputs | `inputs.md` |
108
+ | Seletores | `selectors.md` |
109
+ | Data Display | `data-display.md` |
110
+ | Data Grid | `tables-grids.md` |
111
+ | Gráficos & Dashboards | `charts-dashboards.md` |
112
+ | Navegação | `navigation.md` |
113
+ | Dialogs | `dialogs.md` |
114
+ | Notifications & Feedback | `notifications-feedback.md` |
115
+ | Layout | `layout.md` |
116
+ | CRUD | `crud.md` |
117
+ | Plataforma | `platform.md` |
118
+ | Business Components | `domain.md` |
119
+ | Developer Tools | `infra-utils.md` |
120
+
121
+ ### Aliases disponíveis
122
+
123
+ | Original | Alias(es) |
124
+ |----------|-----------|
125
+ | Combobox | SelectSearch, MultiSelect, EntitySelect, AutoComplete |
126
+ | ComboTree | TreeSelect |
127
+ | StepSelector | Stepper |
128
+ | ActionButton | ActionMenu, RowActions |
129
+ | TruncatedCell | EllipsisText |
130
+ | CrudPrimitiveTable | DataTable |
131
+ | CrudPrimitivePagination | DataPagination |
132
+ | CrudPrimitiveFilterBar | DataFilterBar |
133
+
134
+ ---
135
+
136
+ ## 4. Instrução para IA — Leitura Obrigatória
137
+
138
+ **QUANDO** criar ou modificar qualquer arquivo `.tsx` com JSX:
139
+
140
+ - **SE** contém tabela, listagem ou CRUD → **LER** `@Admin docs/design-system/crud.md` e `@Admin docs/design-system/tables-grids.md` ANTES
141
+ - **SE** contém formulário, input ou campo → **LER** `@Admin docs/design-system/inputs.md` e `@Admin docs/design-system/selectors.md` ANTES
142
+ - **SE** contém modal ou confirmação → **LER** `@Admin docs/design-system/dialogs.md` ANTES
143
+ - **SE** contém botões ou ações de linha → **LER** `@Admin docs/design-system/buttons-actions.md` ANTES
144
+ - **SE** é estrutura de página/layout → **LER** `@Admin docs/design-system/layout.md` ANTES
145
+
146
+ **SEMPRE** consultar `@Admin docs/design-system/examples.md` como referência de implementação.
147
+
148
+ **VALIDAÇÃO pós-geração**: Todo import de componente visual DEVE vir de `forlogic-core`. Se criou componente local que existe na lib, refatore imediatamente.
149
+
150
+ ---
151
+
152
+ ## 5. Padrões CRUD
153
+
154
+ ### Toolbar — Layout obrigatório de 3 zonas
155
+
156
+ | Zona | Posição | Conteúdo |
157
+ |------|---------|----------|
158
+ | Esquerda | `justify-start` | Botão "Novo" + Dropdown ações em lote |
159
+ | Centro | `flex-1 max-w-md` | Campo de busca |
160
+ | Direita | `justify-end` | Filtros + Toggle view |
161
+
162
+ ### Defaults obrigatórios
163
+
164
+ - Paginação: `CrudPrimitivePagination variant="full"`, **10 itens/página** (menor opção)
165
+ - Column resize: ativado por padrão
166
+ - Column manager: ativado por padrão
167
+ - Ordenação: ativada em todas as colunas por padrão
168
+ - Busca: na action bar com `showSearch=true`
169
+ - Ações de linha: sempre usar `ActionButton` da lib
170
+
171
+ ---
172
+
173
+ ## 6. Padrões Deprecated
174
+
175
+ | ❌ Não usar | ✅ Usar |
176
+ |------------|--------|
177
+ | `BulkActionBar` separado | Dropdown no `CrudActionBar` |
178
+ | `<MoreHorizontal>` genérico | `ActionButton` |
179
+ | Paginação manual | `CrudPrimitivePagination` |
180
+ | `StatusSelect` | `Combobox` |
181
+ | `DeleteConfirmationDialog` | `Dialog` |
182
+ | `Searchbar` | `Input` com ícone |
183
+ | Schema `public` | `.schema('...')` com schema do projeto |
184
+
185
+ ---
186
+
187
+ ## 7. Feature Flags
188
+
189
+ | Variável | Descrição | Padrão |
190
+ |----------|-----------|--------|
191
+ | `VITE_SHOW_USER_PREFERENCES` | Exibe "Preferências" no menu do usuário (idioma, timezone, formato de data) | Não exibe |
192
+ | `VITE_I18N_DEBUG_MODE` | Modo debug de i18n (mostra `🔑 chave` ao invés de traduções) | `"false"` |
193
+ | `VITE_IS_QUALIEX` | Usa logos Qualiex ao invés de Forlogic | `"false"` |
194
+ | `VITE_SHOW_EDIT_PROFILE` | Exibe "Editar Perfil" no menu do usuário (foto e idioma) | Não exibe |
195
+
196
+ Todas precisam do prefixo `VITE_` para serem expostas ao cliente.
197
+
198
+ ---
199
+
200
+ ## 8. Configuração — Setup do Projeto
201
+
202
+ ### CoreProviders
203
+
204
+ ```tsx
205
+ import { CoreProviders } from 'forlogic-core';
206
+ import ptBR from './i18n/pt-BR.json';
207
+
208
+ function App() {
209
+ return (
210
+ <CoreProviders moduleAlias="seu-modulo" appTranslations={{ 'pt-BR': ptBR, 'en-US': enUS }}>
211
+ <BrowserRouter><Routes /></BrowserRouter>
212
+ </CoreProviders>
213
+ );
214
+ }
215
+ ```
216
+
217
+ ### Vite
218
+
219
+ ```ts
220
+ import { createSecurityHeadersPlugin } from 'forlogic-core/vite';
221
+
222
+ export default defineConfig(({ mode }) => ({
223
+ plugins: [
224
+ react(),
225
+ createSecurityHeadersPlugin(mode === 'development', {
226
+ supabaseUrls: ['https://SEU_PROJETO.supabase.co'],
227
+ additionalConnectSrc: ['https://*.qualiex.com'],
228
+ }),
229
+ ],
230
+ resolve: { alias: { '@': path.resolve(__dirname, './src') } },
231
+ }));
232
+ ```
233
+
234
+ ### Tailwind
235
+
236
+ ```ts
237
+ import { forlogicTailwindPreset, forlogicContentPaths } from 'forlogic-core/tailwind';
238
+
239
+ export default {
240
+ presets: [forlogicTailwindPreset],
241
+ content: [...forlogicContentPaths],
242
+ } satisfies Config;
243
+ ```
244
+
245
+ ---
246
+
247
+ ## 9. Estrutura de Documentação
248
+
249
+ | Local | Responsabilidade |
250
+ |-------|-----------------|
251
+ | `README.md` (raiz de cada projeto) | **Schema do projeto** — única fonte canônica |
252
+ | `spec/constitution.md` (projeto Admin) | **Regras e convenções** — fonte canônica para todos os projetos |
253
+ | `docs/design-system/` (projeto Admin) | **Design System** — documentação de componentes |
254
+ | Rota `/ds` no app Admin | **Design System visual** — documentação interativa |
@@ -3,7 +3,7 @@
3
3
 
4
4
  # Design System — forlogic-core
5
5
 
6
- > Gerado automaticamente em 2026-04-06
6
+ > Gerado automaticamente em 2026-04-08
7
7
  > Total: 92 componentes documentados em 15 categorias
8
8
 
9
9
  ## Categorias
@@ -7,6 +7,7 @@
7
7
  | `VITE_SHOW_USER_PREFERENCES` | Exibe "Preferências" no menu do usuário (idioma, timezone, formato de data) | Não exibe |
8
8
  | `VITE_I18N_DEBUG_MODE` | Modo debug de i18n (mostra chaves ao invés de traduções) | `"false"` |
9
9
  | `VITE_IS_QUALIEX` | Usa logos Qualiex ao invés de Forlogic | `"false"` |
10
+ | `VITE_SHOW_EDIT_PROFILE` | Exibe "Editar Perfil" no menu do usuário (foto e idioma) | Não exibe |
10
11
 
11
12
  ## Uso
12
13
 
@@ -8,7 +8,9 @@
8
8
 
9
9
  ## Setup em projetos consumidores
10
10
 
11
- 1. Criar JSONs flat em `src/i18n/pt-BR.json`: `{ "key": "value" }` (sem nesting)
11
+ ### Projeto simples (poucas chaves)
12
+
13
+ 1. Criar JSON flat em `src/i18n/pt-BR.json`: `{ "key": "value" }` (sem nesting)
12
14
  2. Passar para CoreProviders:
13
15
 
14
16
  ```tsx
@@ -17,6 +19,67 @@
17
19
 
18
20
  3. Usar `useTranslation` de `forlogic-core` (nunca de `react-i18next`)
19
21
 
22
+ ### Projeto modular (múltiplas features)
23
+
24
+ Para módulos com muitas chaves, dividir traduções por feature:
25
+
26
+ ```text
27
+ src/i18n/
28
+ ├── pt-BR/
29
+ │ ├── common.json ← chaves gerais do módulo
30
+ │ ├── matrices.json ← feature: matrizes
31
+ │ ├── requirements.json ← feature: requisitos
32
+ │ └── reports.json ← feature: relatórios
33
+ ├── en-US/
34
+ │ ├── common.json
35
+ │ ├── matrices.json
36
+ │ ├── requirements.json
37
+ │ └── reports.json
38
+ └── index.ts ← merge automático
39
+ ```
40
+
41
+ #### Arquivo `src/i18n/index.ts`
42
+
43
+ ```ts
44
+ import { mergeTranslationFiles } from 'forlogic-core/i18n';
45
+
46
+ import ptCommon from './pt-BR/common.json';
47
+ import ptMatrices from './pt-BR/matrices.json';
48
+ import ptRequirements from './pt-BR/requirements.json';
49
+ import ptReports from './pt-BR/reports.json';
50
+
51
+ import enCommon from './en-US/common.json';
52
+ import enMatrices from './en-US/matrices.json';
53
+ import enRequirements from './en-US/requirements.json';
54
+ import enReports from './en-US/reports.json';
55
+
56
+ export const appTranslations = {
57
+ 'pt-BR': mergeTranslationFiles(ptCommon, ptMatrices, ptRequirements, ptReports),
58
+ 'en-US': mergeTranslationFiles(enCommon, enMatrices, enRequirements, enReports),
59
+ };
60
+ ```
61
+
62
+ #### Uso no App
63
+
64
+ ```tsx
65
+ import { CoreProviders } from 'forlogic-core';
66
+ import { appTranslations } from './i18n';
67
+
68
+ function App() {
69
+ return (
70
+ <CoreProviders appTranslations={appTranslations}>
71
+ <BrowserRouter><Routes /></BrowserRouter>
72
+ </CoreProviders>
73
+ );
74
+ }
75
+ ```
76
+
77
+ ## Regras dos JSONs
78
+
79
+ - Formato **flat** (sem nesting): `{ "key": "value" }`
80
+ - Chaves duplicadas entre arquivos: o último spread vence (common → features)
81
+ - Chaves do `app` sobrescrevem chaves do `core` com mesmo nome
82
+
20
83
  ## Resolução de chaves
21
84
 
22
85
  ```
@@ -25,6 +88,17 @@ t('objective') → app: "Objetivo"
25
88
  t('save') com override no app → app: "Gravar" (sobrescreve core)
26
89
  ```
27
90
 
91
+ ## Helper `mergeTranslationFiles`
92
+
93
+ Utilitário exportado pela lib para facilitar o merge:
94
+
95
+ ```ts
96
+ import { mergeTranslationFiles } from 'forlogic-core/i18n';
97
+
98
+ const ptBR = mergeTranslationFiles(common, matrices, requirements);
99
+ // Equivalente a: { ...common, ...matrices, ...requirements }
100
+ ```
101
+
28
102
  ## Debug
29
103
 
30
104
  ```ts
@@ -40,3 +114,4 @@ console.log('Resources:', i18n.store.data);
40
114
  | Import de `react-i18next` direto | Usar import de `forlogic-core` |
41
115
  | `appTranslations` não passado | Adicionar prop no CoreProviders |
42
116
  | JSON com formato errado | Deve ser flat, sem nesting |
117
+ | Chave duplicada entre features | Último arquivo no merge vence |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forlogic-core",
3
- "version": "2.0.7",
3
+ "version": "2.0.8",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -1,74 +0,0 @@
1
- # Prompt de Auditoria — Design System
2
-
3
- > **Como usar**: Cole este prompt em uma conversa do Lovable no projeto consumidor para auditar e corrigir violações do Design System.
4
-
5
- ---
6
-
7
- ## Prompt para copiar
8
-
9
- ```
10
- Audite TODOS os arquivos .tsx do projeto em busca de violações do Design System do forlogic-core.
11
-
12
- Antes de começar, leia obrigatoriamente via cross-project:
13
- @Admin docs/design-system/crud.md
14
- @Admin docs/design-system/inputs.md
15
- @Admin docs/design-system/selectors.md
16
- @Admin docs/design-system/layout.md
17
- @Admin docs/design-system/dialogs.md
18
- @Admin docs/design-system/buttons-actions.md
19
-
20
- Verifique CADA arquivo .tsx contra estas regras:
21
-
22
- ### Imports inválidos
23
- - [ ] Import de componente UI que NÃO vem de `forlogic-core` (Button, Dialog, Input, Select, Table, etc.)
24
- - [ ] Import de `react-i18next` em vez de `useTranslation` de `forlogic-core`
25
- - [ ] Import de `@/integrations/supabase/client` em vez de `getSupabaseClient()` de `forlogic-core`
26
-
27
- ### Componentes proibidos
28
- - [ ] `<Select>` ou `<StatusSelect>` → deve ser `<Combobox>`
29
- - [ ] `<MoreHorizontal>` genérico como menu de ações → deve ser `<ActionButton>`
30
- - [ ] `<DeleteConfirmationDialog>` → deve ser `<Dialog>`
31
- - [ ] `<Searchbar>` → deve ser `<Input>` com ícone de busca
32
- - [ ] `BulkActionBar` separado → deve ser dropdown no `CrudActionBar`
33
- - [ ] Paginação manual → deve ser `CrudPrimitivePagination`
34
-
35
- ### Supabase
36
- - [ ] Query sem `.schema('SCHEMA_PADRAO')` (qualquer `supabase.from(` direto)
37
- - [ ] DELETE físico (deve ser soft delete com `deleted_at`)
38
- - [ ] `supabase` importado diretamente do client em vez de `getSupabaseClient()`
39
-
40
- ### Layout
41
- - [ ] Página sem `usePageMetadata` (título/subtítulo)
42
- - [ ] Layout sem `AppLayout` + `AppSidebar`
43
- - [ ] Componente criado localmente quando existe equivalente na lib
44
-
45
- ### Formulários
46
- - [ ] Formulário sem `BaseForm` ou `react-hook-form` + `zod`
47
- - [ ] Select nativo HTML em vez de `Combobox`
48
-
49
- Para cada violação encontrada, gere um relatório no formato:
50
-
51
- | Arquivo | Linha | Violação | Correção |
52
- |---------|-------|----------|----------|
53
- | src/pages/X.tsx | 15 | Import de Button local | Usar `import { Button } from 'forlogic-core'` |
54
-
55
- Depois do relatório, pergunte se devo corrigir automaticamente.
56
- ```
57
-
58
- ---
59
-
60
- ## Variações
61
-
62
- ### Auditoria rápida (apenas imports)
63
-
64
- ```
65
- Busque em TODOS os arquivos .tsx do projeto por imports que NÃO vêm de 'forlogic-core'.
66
- Liste: arquivo, linha, import atual, e o import correto de forlogic-core.
67
- ```
68
-
69
- ### Auditoria de Supabase
70
-
71
- ```
72
- Busque em TODOS os arquivos .ts/.tsx por chamadas a `supabase.from(` sem `.schema('SCHEMA_PADRAO')`.
73
- Liste: arquivo, linha, query atual, e a correção com .schema().
74
- ```
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.