forlogic-core 2.0.6 → 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.
- 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 +13 -1
- package/dist/crud/components/FilterBar.d.ts +2 -2
- package/dist/crud/primitives/Table.d.ts +3 -3
- package/dist/crud/primitives/types.d.ts +11 -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/types.d.ts +1 -0
- package/docs/WORKSPACE_KNOWLEDGE.md +254 -0
- package/docs/design-system/README.md +1 -1
- package/docs/design-system/patterns/README.md +53 -0
- package/{.note/memory/components/action-button-for-tables.md → docs/design-system/patterns/action-button.md} +1 -2
- package/{.note/memory/components/alertdialog-permanent-deletion.md → docs/design-system/patterns/alertdialog-deletion.md} +1 -2
- package/{.note/memory/components → docs/design-system/patterns}/baseform-custom-fields.md +2 -3
- package/{.note/memory/components → docs/design-system/patterns}/baseform-usage.md +1 -2
- package/{.note/memory/patterns/body-content-scroll-usage.md → docs/design-system/patterns/body-content-scroll.md} +1 -4
- package/{.note/memory/components → docs/design-system/patterns}/combo-tree.md +1 -2
- package/docs/design-system/patterns/components-registry.md +17 -0
- package/docs/design-system/patterns/crud-bulk-actions.md +12 -0
- package/docs/design-system/patterns/crud-config-props.md +16 -0
- package/docs/design-system/patterns/crud-defaults.md +17 -0
- package/{.note/memory/patterns/crud-toolbar-layout.md → docs/design-system/patterns/crud-toolbar.md} +8 -6
- package/{.note/memory/components/delete-confirmation-dialog.md → docs/design-system/patterns/delete-confirmation.md} +1 -9
- package/{.note/memory/patterns/dialog-body-scroll-pattern.md → docs/design-system/patterns/dialog-body-scroll.md} +3 -4
- package/{.note/memory/components/dialog-sizes-and-structure.md → docs/design-system/patterns/dialog-structure.md} +1 -2
- package/{.note/memory/components → docs/design-system/patterns}/dialog-variants.md +5 -8
- package/{.note/memory → docs/design-system}/patterns/feature-flags.md +1 -0
- package/{.note/memory/patterns/header-metadata-pattern.md → docs/design-system/patterns/header-metadata.md} +1 -6
- package/docs/design-system/patterns/i18n-setup.md +117 -0
- package/{.note/memory/components/pagination-usage.md → docs/design-system/patterns/pagination.md} +1 -2
- package/{.note/memory/patterns/single-scroll-pattern.md → docs/design-system/patterns/single-scroll.md} +1 -2
- package/{.note/memory → docs/design-system}/patterns/vite-tailwind-setup.md +1 -2
- package/package.json +1 -1
- package/.note/memory/features/crud-defaults-batteries-included.md +0 -14
- package/.note/memory/features/crud-standardized-config-props.md +0 -3
- package/.note/memory/patterns/components-registry.md +0 -18
- package/.note/memory/patterns/crud-action-bar-3-zone-layout.md +0 -3
- package/.note/memory/patterns/crud-bulk-actions-dropdown-standard.md +0 -3
- package/.note/memory/patterns/i18n-setup.md +0 -43
- package/docs/AUDIT_PROMPT.md +0 -74
- package/docs/KNOWLEDGE.md +0 -109
- package/docs/PROJECT_KNOWLEDGE_TEMPLATE.md +0 -117
- package/docs/PROMPT_TEMPLATE.md +0 -77
- package/docs/STARTER_TEMPLATE.md +0 -114
- /package/{.note/memory/patterns/core-providers-setup.md → docs/design-system/patterns/core-providers.md} +0 -0
|
@@ -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
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
**O padrão da aplicação é exibir título, subtítulo e breadcrumbs no header** usando `usePageMetadata()`.
|
|
6
6
|
|
|
7
7
|
- **NÃO** usar `BodyContent` ou `ContentContainer` com título/subtítulo internos por padrão.
|
|
8
|
-
- Breadcrumbs, títulos e subtítulos internos ao conteúdo são **exceções** e devem ser usados **somente quando explicitamente solicitados
|
|
8
|
+
- Breadcrumbs, títulos e subtítulos internos ao conteúdo são **exceções** e devem ser usados **somente quando explicitamente solicitados**.
|
|
9
9
|
|
|
10
10
|
## Uso Padrão
|
|
11
11
|
|
|
@@ -55,8 +55,3 @@ usePageMetadata({
|
|
|
55
55
|
</ContentContainer>
|
|
56
56
|
</BodyContent>
|
|
57
57
|
```
|
|
58
|
-
|
|
59
|
-
## Quando usar breadcrumbs/título interno
|
|
60
|
-
|
|
61
|
-
- Apenas quando o usuário **pedir explicitamente** breadcrumbs ou título dentro do conteúdo.
|
|
62
|
-
- Páginas com navegação hierárquica profunda podem justificar breadcrumbs, mas sempre confirmar antes.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Padrão: Setup de Traduções (i18n)
|
|
2
|
+
|
|
3
|
+
## Arquitetura de namespaces
|
|
4
|
+
|
|
5
|
+
- `core` — traduções base da lib (save, cancel, delete, etc.)
|
|
6
|
+
- `app` — traduções do projeto consumidor (injetadas via `CoreProviders`)
|
|
7
|
+
- Resolução: `app` → `core` → fallback `pt-BR`
|
|
8
|
+
|
|
9
|
+
## Setup em projetos consumidores
|
|
10
|
+
|
|
11
|
+
### Projeto simples (poucas chaves)
|
|
12
|
+
|
|
13
|
+
1. Criar JSON flat em `src/i18n/pt-BR.json`: `{ "key": "value" }` (sem nesting)
|
|
14
|
+
2. Passar para CoreProviders:
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<CoreProviders appTranslations={{ 'pt-BR': ptBR, 'en-US': enUS }}>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
3. Usar `useTranslation` de `forlogic-core` (nunca de `react-i18next`)
|
|
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
|
+
|
|
83
|
+
## Resolução de chaves
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
t('save') → app: não encontra → core: "Salvar"
|
|
87
|
+
t('objective') → app: "Objetivo"
|
|
88
|
+
t('save') com override no app → app: "Gravar" (sobrescreve core)
|
|
89
|
+
```
|
|
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
|
+
|
|
102
|
+
## Debug
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import { i18n } from 'forlogic-core';
|
|
106
|
+
console.log('Resources:', i18n.store.data);
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Troubleshooting
|
|
110
|
+
|
|
111
|
+
| Causa | Solução |
|
|
112
|
+
|-------|---------|
|
|
113
|
+
| Chaves aparecem ao invés de traduções | Instalar peer deps `i18next` e `react-i18next` |
|
|
114
|
+
| Import de `react-i18next` direto | Usar import de `forlogic-core` |
|
|
115
|
+
| `appTranslations` não passado | Adicionar prop no CoreProviders |
|
|
116
|
+
| JSON com formato errado | Deve ser flat, sem nesting |
|
|
117
|
+
| Chave duplicada entre features | Último arquivo no merge vence |
|
|
@@ -14,9 +14,8 @@ export default defineConfig(({ mode }) => ({
|
|
|
14
14
|
}),
|
|
15
15
|
],
|
|
16
16
|
resolve: {
|
|
17
|
-
alias: { '@': path.resolve(__dirname, './src') },
|
|
17
|
+
alias: { '@': path.resolve(__dirname, './src') },
|
|
18
18
|
},
|
|
19
|
-
// optimizeDeps.force: true já vem por padrão via createForlogicViteConfig()
|
|
20
19
|
publicDir: false,
|
|
21
20
|
esbuild: { sourcemap: true, target: 'es2020' },
|
|
22
21
|
build: { chunkSizeWarningLimit: 4000 },
|
package/package.json
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Memory: features/crud-defaults-batteries-included
|
|
2
|
-
|
|
3
|
-
Todos os CRUDs (CrudTable, createCrudPage) agora incluem por padrão:
|
|
4
|
-
- **Column resize** (`enableColumnResize=true`) — já era default
|
|
5
|
-
- **Column manager** (`enableColumnManager=true`) — botão ⋮ no header da coluna "Ações"
|
|
6
|
-
- **Sort** — **todas as colunas são ordenáveis por padrão** (`sortable` default `true`). Use `sortable: false` para desabilitar.
|
|
7
|
-
- **Busca** — por padrão usa a busca global do header (não a action bar). Para busca na action bar, usar `showSearch=true`
|
|
8
|
-
- **Storage keys** — `createCrudPage` gera automaticamente `columnManagerStorageKey` e `resizeStorageKey` a partir do `entityName`
|
|
9
|
-
|
|
10
|
-
**NÃO vem por padrão:**
|
|
11
|
-
- **Agrupamento** (`enableGrouping=false`) — precisa ser habilitado explicitamente com `enableGrouping={true}`
|
|
12
|
-
- **Busca na action bar** (`showSearch=false`) — padrão é busca no header
|
|
13
|
-
|
|
14
|
-
**Paginação:** padrão de 25 itens por página.
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
# Memory: features/crud-standardized-config-props
|
|
2
|
-
|
|
3
|
-
A interface CrudPageConfig foi estendida para padronizar a experiência do usuário (UX) em todos os CRUDs (createCrudPage, CrudTable, CrudGrid). As novas propriedades incluem: showNewButton (default: true), showSearch (default: true), showBulkActions (alias para enableBulkActions), showActionBar (default: true, substituindo hideActionBar), newButtonLabel (para customizar o texto do botão de criação) e searchPlaceholder. Esta padronização garante que todos os CRUDs ofereçam as mesmas capacidades de busca, criação e ações em lote de forma consistente.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Memory: documentation/consolidated-components-registry
|
|
2
|
-
Updated: now
|
|
3
|
-
|
|
4
|
-
Design System maintains a Consolidated Components Registry tracking components documented together under single documentation entries for reusability reference:
|
|
5
|
-
|
|
6
|
-
- **Breadcrumb** (documents Breadcrumb and PageBreadcrumb)
|
|
7
|
-
- **Calendar & Date Picker** (documents Calendar and DatePicker)
|
|
8
|
-
- **Combobox** (documents Combobox with Command used internally)
|
|
9
|
-
- **Toggle & Group** (documents Toggle and ToggleGroup)
|
|
10
|
-
- **Skeleton** (documents base Skeleton and all skeleton variants)
|
|
11
|
-
- **AppSidebar** (documents AppSidebar, Sidebar base component, SidebarProvider, SidebarMenu*, Collapsible integration)
|
|
12
|
-
- **Accordion** (documents Accordion and Collapsible)
|
|
13
|
-
- **Input** (documents Input, InputGroup, InputGroupAddon, InputGroupButton)
|
|
14
|
-
- **Grid & Stack** (documents Grid and Stack layout components)
|
|
15
|
-
- **Dialog** (documents Dialog, AlertDialog, Sheet positional variants, Drawer)
|
|
16
|
-
- **Tabs** (documents Tabs and TabPageLayout)
|
|
17
|
-
|
|
18
|
-
This registry must be checked before creating new documentation to avoid duplicates. The Sidebar base component from Shadcn is documented as a subsection within AppSidebarDoc for users who need to create custom sidebars outside the AppLayout context.
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
# Memory: patterns/crud-action-bar-3-zone-layout
|
|
2
|
-
|
|
3
|
-
O CrudActionBar (lib/crud/components/CrudActionBar.tsx) é o componente compartilhado que unifica a barra de ações de todos os CRUDs do sistema. Ele implementa um layout rígido de 3 zonas: ESQUERDA (Botão Novo + Dropdown de Ações em Lote), CENTRO (Barra de busca centralizada) e DIREITA (Filtros customizados + Toggle de visualização). Este componente substitui as implementações locais de barra de ferramentas no CrudTable, CrudGrid e createCrudPage, garantindo que a barra superior tenha sempre o mesmo visual (bg-muted/50), comportamento e espaçamento, independentemente do componente de visualização de dados utilizado.
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
# Memory: patterns/crud-bulk-actions-dropdown-standard
|
|
2
|
-
|
|
3
|
-
As ações em lote foram unificadas em um dropdown 'Ações em lote' no CrudActionBar. Este menu permanece visível se habilitado, exibindo um badge com a contagem de itens selecionados. As opções internas são desabilitadas se a seleção for zero. O componente BulkActionBar foi removido para evitar barras duplicadas e 'layout shifts'. Na CrudTable, a coluna de ações de linha não deve ter label no cabeçalho (usar apenas ícone ⋮ ou tooltip) para evitar confusão com o menu de ações em lote da toolbar.
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Padrão: Setup de Traduções (i18n)
|
|
2
|
-
|
|
3
|
-
## Arquitetura de namespaces
|
|
4
|
-
|
|
5
|
-
- `core` — traduções base da lib (save, cancel, delete, etc.)
|
|
6
|
-
- `app` — traduções do projeto consumidor (injetadas via `CoreProviders`)
|
|
7
|
-
- Resolução: `app` → `core` → fallback `pt-BR`
|
|
8
|
-
|
|
9
|
-
## Setup em projetos consumidores
|
|
10
|
-
|
|
11
|
-
1. Criar JSONs flat em `src/i18n/pt-BR.json`: `{ "key": "value" }` (sem nesting)
|
|
12
|
-
2. Passar para CoreProviders:
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
<CoreProviders appTranslations={{ 'pt-BR': ptBR, 'en-US': enUS }}>
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
3. Usar `useTranslation` de `forlogic-core` (nunca de `react-i18next`)
|
|
19
|
-
|
|
20
|
-
## Resolução de chaves
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
t('save') → app: não encontra → core: "Salvar"
|
|
24
|
-
t('objective') → app: "Objetivo"
|
|
25
|
-
t('save') com override no app → app: "Gravar" (sobrescreve core)
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Debug
|
|
29
|
-
|
|
30
|
-
```ts
|
|
31
|
-
import { i18n } from 'forlogic-core';
|
|
32
|
-
console.log('Resources:', i18n.store.data);
|
|
33
|
-
// { 'pt-BR': { core: {...}, app: {...} } }
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Troubleshooting
|
|
37
|
-
|
|
38
|
-
| Causa | Solução |
|
|
39
|
-
|-------|---------|
|
|
40
|
-
| Chaves aparecem ao invés de traduções | Instalar peer deps `i18next` e `react-i18next` |
|
|
41
|
-
| Import de `react-i18next` direto | Usar import de `forlogic-core` |
|
|
42
|
-
| `appTranslations` não passado | Adicionar prop no CoreProviders |
|
|
43
|
-
| JSON com formato errado | Deve ser flat, sem nesting |
|
package/docs/AUDIT_PROMPT.md
DELETED
|
@@ -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
|
-
> Consulte `.note/memory/` para padrões de layout e componentes.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 0. Schema do Projeto
|
|
9
|
-
|
|
10
|
-
**SCHEMA = `common`**
|
|
11
|
-
|
|
12
|
-
☝️ Este é o **único local** onde o schema é definido. Toda query Supabase
|
|
13
|
-
**DEVE** usar `.schema('<valor acima>')`. Altere **apenas aqui** ao configurar
|
|
14
|
-
um novo projeto.
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
// ✅ usar o schema definido acima
|
|
18
|
-
supabase.schema('common').from('tabela').select('*');
|
|
19
|
-
// ❌ vai falhar (sem schema)
|
|
20
|
-
supabase.from('tabela').select('*');
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 1. Regras Invioláveis
|
|
26
|
-
|
|
27
|
-
| Regra | Detalhe |
|
|
28
|
-
|-------|---------|
|
|
29
|
-
| Schema obrigatório | `.schema()` com o schema do projeto (seção 0) em toda query |
|
|
30
|
-
| Sem DELETE físico | Soft delete com `deleted_at` + policy `FOR UPDATE` |
|
|
31
|
-
| Sem índices automáticos | Apenas com aprovação explícita |
|
|
32
|
-
| Sem modificar `.env` | Apenas com autorização do usuário |
|
|
33
|
-
| Sem hardcoded admin | Nunca localStorage/sessionStorage para roles |
|
|
34
|
-
| Lib-first | Usar `forlogic-core` antes de criar componente |
|
|
35
|
-
| Import do Supabase | Sempre `getSupabaseClient()` de `forlogic-core`, nunca `@/integrations/supabase/client` |
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## 2. RLS — Resumo de Sintaxe
|
|
40
|
-
|
|
41
|
-
- `SELECT` → `USING` | `INSERT` → `WITH CHECK` | `UPDATE` → `USING` + `WITH CHECK`
|
|
42
|
-
- **Nunca** `FOR DELETE`
|
|
43
|
-
- **Sempre** `(SELECT auth.jwt())` com parênteses (evita re-execução por linha)
|
|
44
|
-
- Padrão multi-tenant: `((SELECT auth.jwt()) ->> 'alias'::text) = alias`
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## 3. Convenções SQL
|
|
49
|
-
|
|
50
|
-
| Tipo | Padrão | Exemplo |
|
|
51
|
-
|------|--------|---------|
|
|
52
|
-
| FK | `id_<singular>` | `id_process` |
|
|
53
|
-
| Boolean | `is_` / `has_` | `is_active` |
|
|
54
|
-
| Timestamps | `created_at`, `updated_at`, `deleted_at` | — |
|
|
55
|
-
| Tabelas | plural, snake_case | `processes` |
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 4. Mapa de Módulos (forlogic-core)
|
|
60
|
-
|
|
61
|
-
> Para props, tipos e implementação: ler do projeto **Admin** (forlogic-core) via cross-project.
|
|
62
|
-
|
|
63
|
-
| Módulo | Caminho | O que contém |
|
|
64
|
-
|--------|---------|--------------|
|
|
65
|
-
| **UI Components** | `lib/components/ui/` | Button, Dialog, Input, Select, Combobox, Badge, Tabs, etc. |
|
|
66
|
-
| **Layout** | `lib/components/layout/` | AppLayout, AppHeader, AppSidebar, BodyContent |
|
|
67
|
-
| **CRUD** | `lib/crud/` | createCrudPage, CrudTable, CrudGrid, BaseForm, ActionBar |
|
|
68
|
-
| **CRUD Primitives** | `lib/crud/primitives/` | Table, FilterBar, Pagination, ActionMenu, TreeTable |
|
|
69
|
-
| **Auth** | `lib/auth/` | AuthContext, ProtectedRoute, LoginPage, TokenManager |
|
|
70
|
-
| **Módulos** | `lib/components/modules/` | ModulesDialog, ModuleGrid, ModuleAccessGuard |
|
|
71
|
-
| **Places** | `lib/places/` | PlacesList, PlaceCard, ManageAccessModal |
|
|
72
|
-
| **Leadership** | `lib/leadership/` | LeadershipPage, LeadershipDialog |
|
|
73
|
-
| **Media** | `lib/media/` | ImageEditor, VideoEditor, useMediaUpload |
|
|
74
|
-
| **Sign** | `lib/sign/` | SignWidget, D4SignWidget, SignConfigForm |
|
|
75
|
-
| **Qualiex** | `lib/qualiex/` | QualiexUserField, useQualiexUsers |
|
|
76
|
-
| **i18n** | `lib/i18n/` | Namespaces core/app, JSONs por idioma, addAppTranslations, formatadores |
|
|
77
|
-
| **Config** | `lib/config/` | Environments, CRUD defaults, mensagens |
|
|
78
|
-
| **Services** | `lib/services/` | BaseService, EmailService, ErrorService |
|
|
79
|
-
| **Hooks** | `lib/hooks/` | useDebounce, useWizard, useModuleAccess, useColumnResize |
|
|
80
|
-
| **Providers** | `lib/providers/` | CoreProviders (setup simplificado) |
|
|
81
|
-
| **Vite** | `lib/vite/` | create-config, CSP, security headers |
|
|
82
|
-
| **Tailwind** | `lib/tailwind/` | Preset compartilhado |
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 5. Padrões Deprecated
|
|
87
|
-
|
|
88
|
-
| ❌ Não usar | ✅ Usar |
|
|
89
|
-
|------------|--------|
|
|
90
|
-
| `BulkActionBar` separado | Dropdown no `CrudActionBar` |
|
|
91
|
-
| `<MoreHorizontal>` genérico | `ActionButton` |
|
|
92
|
-
| Paginação manual | `CrudPrimitivePagination` |
|
|
93
|
-
| `StatusSelect` | `Combobox` |
|
|
94
|
-
| `DeleteConfirmationDialog` | `Dialog` |
|
|
95
|
-
| `Searchbar` | `Input` com ícone |
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 6. Fontes de Contexto
|
|
100
|
-
|
|
101
|
-
| Fonte | Caminho | Conteúdo |
|
|
102
|
-
|-------|---------|----------|
|
|
103
|
-
| Memory components | `.note/memory/components/` | Props, variantes e exemplos de componentes |
|
|
104
|
-
| Memory patterns | `.note/memory/patterns/` | Layouts, setup, convenções, regras do projeto |
|
|
105
|
-
| Memory features | `.note/memory/features/` | Contexto de features específicas do projeto |
|
|
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
|
-
> ℹ️ `.note/memory/` usa 3 pastas padronizadas: `components/`, `patterns/`, `features/`. `KNOWLEDGE.md` é a fonte única de verdade para regras e convenções.
|
|
@@ -1,117 +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. Instrução para IA
|
|
108
|
-
|
|
109
|
-
Antes de criar qualquer componente, leia via cross-project:
|
|
110
|
-
|
|
111
|
-
- `@Admin docs/design-system/crud.md` — listagens
|
|
112
|
-
- `@Admin docs/design-system/inputs.md` — formulários
|
|
113
|
-
- `@Admin docs/design-system/selectors.md` — selects/combos
|
|
114
|
-
- `@Admin docs/design-system/layout.md` — estrutura de página
|
|
115
|
-
- `@Admin docs/design-system/dialogs.md` — modais
|
|
116
|
-
|
|
117
|
-
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?
|