forlogic-core 1.11.7 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -4
- package/dist/README.md +134 -0
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.esm.js +2 -2
- package/dist/index.js +2 -2
- package/dist/tailwind/index.esm.js +3 -0
- package/dist/tailwind/index.js +3 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -836,6 +836,140 @@ Se você não fornecer um `queryClient`, o `CoreProviders` cria um com as seguin
|
|
|
836
836
|
|
|
837
837
|
---
|
|
838
838
|
|
|
839
|
+
## 🎯 Ações Principais de Módulo (SidebarActionTrigger)
|
|
840
|
+
|
|
841
|
+
O `SidebarActionTrigger` permite adicionar ações principais de módulo no sidebar, diferenciadas visualmente da navegação. São gatilhos de ação, não destinos de navegação.
|
|
842
|
+
|
|
843
|
+
### Conceito
|
|
844
|
+
|
|
845
|
+
| Característica | Descrição |
|
|
846
|
+
|----------------|-----------|
|
|
847
|
+
| **Ação de módulo** | Válida apenas dentro do contexto do módulo ao qual pertence |
|
|
848
|
+
| **Não global** | Não aplicável a todo o sistema |
|
|
849
|
+
| **Não contextual** | Não depende de seleção de item específico |
|
|
850
|
+
| **Destaque visual** | Exibida com aparência diferenciada da navegação |
|
|
851
|
+
|
|
852
|
+
### Uso Básico
|
|
853
|
+
|
|
854
|
+
```tsx
|
|
855
|
+
import { AppSidebar, SidebarConfig } from 'forlogic-core';
|
|
856
|
+
import { Plus, FileText, Folder } from 'lucide-react';
|
|
857
|
+
|
|
858
|
+
const sidebarConfig: SidebarConfig = {
|
|
859
|
+
appName: 'Meu Módulo',
|
|
860
|
+
|
|
861
|
+
// Ações principais do módulo
|
|
862
|
+
moduleActions: {
|
|
863
|
+
triggerLabel: 'Criar',
|
|
864
|
+
triggerIcon: Plus,
|
|
865
|
+
actions: [
|
|
866
|
+
{
|
|
867
|
+
id: 'create-item',
|
|
868
|
+
label: 'Novo Item',
|
|
869
|
+
icon: FileText,
|
|
870
|
+
onClick: () => openCreateDialog()
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
id: 'create-folder',
|
|
874
|
+
label: 'Nova Pasta',
|
|
875
|
+
icon: Folder,
|
|
876
|
+
onClick: () => openFolderDialog()
|
|
877
|
+
},
|
|
878
|
+
]
|
|
879
|
+
},
|
|
880
|
+
|
|
881
|
+
// Navegação
|
|
882
|
+
navigation: [
|
|
883
|
+
{ label: 'Visão Geral', path: '/', icon: Home },
|
|
884
|
+
{ label: 'Configurações', path: '/settings', icon: Settings },
|
|
885
|
+
]
|
|
886
|
+
};
|
|
887
|
+
|
|
888
|
+
<AppSidebar config={sidebarConfig} />
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
### Comportamento
|
|
892
|
+
|
|
893
|
+
| Cenário | Comportamento |
|
|
894
|
+
|---------|---------------|
|
|
895
|
+
| **Uma ação** | Clique executa a ação diretamente |
|
|
896
|
+
| **Múltiplas ações** | Clique exibe dropdown com opções |
|
|
897
|
+
| **Modal aberto** | Gatilho fica desabilitado |
|
|
898
|
+
| **Sidebar colapsada** | Exibe apenas ícone com tooltip |
|
|
899
|
+
|
|
900
|
+
### Props do SidebarActionTrigger
|
|
901
|
+
|
|
902
|
+
| Prop | Tipo | Obrigatório | Descrição |
|
|
903
|
+
|------|------|-------------|-----------|
|
|
904
|
+
| `config` | `SidebarActionsConfig` | ✅ | Configuração das ações |
|
|
905
|
+
| `isCollapsed` | `boolean` | ❌ | Se a sidebar está colapsada |
|
|
906
|
+
| `isDisabled` | `boolean` | ❌ | Desabilita o gatilho |
|
|
907
|
+
|
|
908
|
+
### Interface SidebarModuleAction
|
|
909
|
+
|
|
910
|
+
```typescript
|
|
911
|
+
interface SidebarModuleAction {
|
|
912
|
+
id: string; // Identificador único
|
|
913
|
+
label: string; // Texto do botão/opção
|
|
914
|
+
icon?: LucideIcon; // Ícone opcional
|
|
915
|
+
onClick: () => void; // Callback de execução
|
|
916
|
+
disabled?: boolean; // Estado desabilitado
|
|
917
|
+
permissionCheck?: () => Promise<boolean>;
|
|
918
|
+
}
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
### Interface SidebarActionsConfig
|
|
922
|
+
|
|
923
|
+
```typescript
|
|
924
|
+
interface SidebarActionsConfig {
|
|
925
|
+
triggerLabel?: string; // Rótulo do gatilho (padrão: 'Criar')
|
|
926
|
+
triggerIcon?: LucideIcon; // Ícone do gatilho (padrão: Plus)
|
|
927
|
+
actions: SidebarModuleAction[];
|
|
928
|
+
}
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
### Gerenciamento de Modais (Opcional)
|
|
932
|
+
|
|
933
|
+
Para desabilitar o gatilho quando há modais abertos, use o `ModalStateProvider`:
|
|
934
|
+
|
|
935
|
+
```tsx
|
|
936
|
+
import { CoreProviders, ModalStateProvider, useModalState } from 'forlogic-core';
|
|
937
|
+
|
|
938
|
+
// No App.tsx (opcional - CoreProviders não inclui por padrão)
|
|
939
|
+
<CoreProviders>
|
|
940
|
+
<ModalStateProvider>
|
|
941
|
+
<AppLayout />
|
|
942
|
+
</ModalStateProvider>
|
|
943
|
+
</CoreProviders>
|
|
944
|
+
|
|
945
|
+
// Em componentes com modal
|
|
946
|
+
function MeuDialog({ open, onOpenChange }) {
|
|
947
|
+
const { registerModal, unregisterModal } = useModalState();
|
|
948
|
+
|
|
949
|
+
useEffect(() => {
|
|
950
|
+
if (open) {
|
|
951
|
+
registerModal('meu-dialog');
|
|
952
|
+
} else {
|
|
953
|
+
unregisterModal('meu-dialog');
|
|
954
|
+
}
|
|
955
|
+
}, [open]);
|
|
956
|
+
|
|
957
|
+
return <Dialog open={open} onOpenChange={onOpenChange}>...</Dialog>;
|
|
958
|
+
}
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
### Diretriz para Uso via Prompt
|
|
962
|
+
|
|
963
|
+
#### ✅ Prompts corretos:
|
|
964
|
+
- "Adicione uma ação principal 'Criar Processo' no sidebar do módulo"
|
|
965
|
+
- "Configure o módulo para ter duas ações principais: 'Novo Item' e 'Nova Pasta'"
|
|
966
|
+
- "Adicione o botão de criar no topo do sidebar como ação de módulo"
|
|
967
|
+
|
|
968
|
+
#### ❌ Prompts ambíguos (evitar):
|
|
969
|
+
- "Coloque um botão de criar no menu" (ambíguo - qual menu?)
|
|
970
|
+
- "Adicione navegação para criar" (ação ≠ navegação)
|
|
971
|
+
- "Crie um link para nova entidade" (link = navegação, não ação)
|
|
972
|
+
|
|
839
973
|
## 🛠️ CLI: Sincronização de Documentação
|
|
840
974
|
|
|
841
975
|
O `forlogic-core` disponibiliza um comando CLI para sincronizar a documentação centralizada do banco de dados para projetos consumidores.
|
|
@@ -882,7 +1016,7 @@ O comando usa credenciais públicas do Supabase do forlogic-core e não requer c
|
|
|
882
1016
|
|
|
883
1017
|
### 📚 Estatísticas da Documentação
|
|
884
1018
|
|
|
885
|
-
**
|
|
1019
|
+
**47 Componentes UI** | **6 Tokens** | **6 Ferramentas CRUD**
|
|
886
1020
|
|
|
887
1021
|
---
|
|
888
1022
|
|
|
@@ -922,10 +1056,8 @@ O comando usa credenciais públicas do Supabase do forlogic-core e não requer c
|
|
|
922
1056
|
- [Icon Picker](./docs/DESIGN_SYSTEM.md#iconpicker) - Seletor de ícones da biblioteca Lucide React com busca integrada.
|
|
923
1057
|
- [Input](./docs/DESIGN_SYSTEM.md#input) - Exibe um campo de entrada de texto.
|
|
924
1058
|
- [Input Group](./docs/DESIGN_SYSTEM.md#inputgroup) - Agrupe inputs com addons de prefixo, sufixo, ícones, botões, tooltips e dropdowns. Segue a API oficial do shadcn/ui.
|
|
925
|
-
- [Input OTP](./docs/DESIGN_SYSTEM.md#inputotp) - Accessible one-time password component with customizable number of inputs. Available in the UI library but not exported from forlogic-core.
|
|
926
1059
|
- [Label](./docs/DESIGN_SYSTEM.md#label) - Renderiza uma label acessível associada a controles.
|
|
927
1060
|
- [Loading State](./docs/DESIGN_SYSTEM.md#loadingstate) - Componente para gerenciar estados de loading de forma declarativa com dois tipos: spinner e overlay.
|
|
928
|
-
- [Native Select](./docs/DESIGN_SYSTEM.md#nativeselect) - Elemento select nativo do HTML com estilização.
|
|
929
1061
|
- [Pagination](./docs/DESIGN_SYSTEM.md#pagination) - Barra de paginação completa com seletor de itens por página e controles de navegação.
|
|
930
1062
|
- [Progress](./docs/DESIGN_SYSTEM.md#progress) - Exibe um indicador mostrando o progresso de conclusão de uma tarefa, tipicamente exibido como uma barra de progresso.
|
|
931
1063
|
- [Radio Group](./docs/DESIGN_SYSTEM.md#radiogroup) - Um conjunto de botões marcáveis—conhecidos como botões de rádio—onde apenas um pode ser marcado por vez.
|
|
@@ -944,11 +1076,15 @@ O comando usa credenciais públicas do Supabase do forlogic-core e não requer c
|
|
|
944
1076
|
- [Table](./docs/DESIGN_SYSTEM.md#table) - Uma tabela semântica para exibir dados tabulares.
|
|
945
1077
|
- [Tabs](./docs/DESIGN_SYSTEM.md#tabs) - Um conjunto de seções de conteúdo em camadas—conhecidas como painéis de abas—que são exibidas uma de cada vez.
|
|
946
1078
|
- [Textarea](./docs/DESIGN_SYSTEM.md#textarea) - Exibe um textarea de formulário ou um componente que se parece com um textarea.
|
|
947
|
-
- [Toast](./docs/DESIGN_SYSTEM.md#toast) - Componente de notificação toast usando Sonner.
|
|
1079
|
+
- [Toast](./docs/DESIGN_SYSTEM.md#toast) - Componente de notificação toast usando Sonner. Feedback temporário e não bloqueante que informa rapidamente o usuário sem competir visualmente com outros Toasts.
|
|
948
1080
|
- [Toggle](./docs/DESIGN_SYSTEM.md#toggle) - Botões de dois estados que podem estar ligados ou desligados, individualmente ou em grupo.
|
|
949
1081
|
|
|
950
1082
|
### 🚀 Sistema CRUD
|
|
951
1083
|
|
|
1084
|
+
- [CRUD Avançado](./docs/DESIGN_SYSTEM.md#crudadvanced) - Padrão de tabela CRUD com recursos avançados como avatar de produto, indicadores visuais de estoque, sistema de avaliação com estrelas, métricas de vendas e formatação de moeda. Inclui dialogs para todas as operações CRUD, exportação/importação e ações em massa.
|
|
1085
|
+
- [CRUD Básico](./docs/DESIGN_SYSTEM.md#crudbasic) - Padrão de tabela CRUD simples com busca, filtros, ações por linha e paginação. Inclui dialogs interativos para visualização, criação, edição, duplicação, alteração de status e exclusão de itens.
|
|
1086
|
+
- [CRUD com Alternância de Visualização](./docs/DESIGN_SYSTEM.md#crudviewtoggle) - Padrão de CRUD que permite alternar entre visualização em lista (cards horizontais) e grade (cards em grid). Inclui todas as operações CRUD com dialogs, exportação/importação e ações em massa.
|
|
1087
|
+
- [CRUD de Fornecedores](./docs/DESIGN_SYSTEM.md#crudusers) - Padrão completo de CRUD para gestão de fornecedores com 16 campos, incluindo ordenação, filtros avançados, exportação/importação e ações em massa.
|
|
952
1088
|
- [CRUD System](./docs/DESIGN_SYSTEM.md#crudsystem) - Sistema completo para criação rápida de interfaces CRUD com validação, busca, paginação e muito mais.
|
|
953
1089
|
- [Wizard Form](./docs/DESIGN_SYSTEM.md#wizardform) - Formulário multi-etapas com validação, navegação entre seções e indicadores de progresso.
|
|
954
1090
|
|
package/dist/README.md
CHANGED
|
@@ -836,6 +836,140 @@ Se você não fornecer um `queryClient`, o `CoreProviders` cria um com as seguin
|
|
|
836
836
|
|
|
837
837
|
---
|
|
838
838
|
|
|
839
|
+
## 🎯 Ações Principais de Módulo (SidebarActionTrigger)
|
|
840
|
+
|
|
841
|
+
O `SidebarActionTrigger` permite adicionar ações principais de módulo no sidebar, diferenciadas visualmente da navegação. São gatilhos de ação, não destinos de navegação.
|
|
842
|
+
|
|
843
|
+
### Conceito
|
|
844
|
+
|
|
845
|
+
| Característica | Descrição |
|
|
846
|
+
|----------------|-----------|
|
|
847
|
+
| **Ação de módulo** | Válida apenas dentro do contexto do módulo ao qual pertence |
|
|
848
|
+
| **Não global** | Não aplicável a todo o sistema |
|
|
849
|
+
| **Não contextual** | Não depende de seleção de item específico |
|
|
850
|
+
| **Destaque visual** | Exibida com aparência diferenciada da navegação |
|
|
851
|
+
|
|
852
|
+
### Uso Básico
|
|
853
|
+
|
|
854
|
+
```tsx
|
|
855
|
+
import { AppSidebar, SidebarConfig } from 'forlogic-core';
|
|
856
|
+
import { Plus, FileText, Folder } from 'lucide-react';
|
|
857
|
+
|
|
858
|
+
const sidebarConfig: SidebarConfig = {
|
|
859
|
+
appName: 'Meu Módulo',
|
|
860
|
+
|
|
861
|
+
// Ações principais do módulo
|
|
862
|
+
moduleActions: {
|
|
863
|
+
triggerLabel: 'Criar',
|
|
864
|
+
triggerIcon: Plus,
|
|
865
|
+
actions: [
|
|
866
|
+
{
|
|
867
|
+
id: 'create-item',
|
|
868
|
+
label: 'Novo Item',
|
|
869
|
+
icon: FileText,
|
|
870
|
+
onClick: () => openCreateDialog()
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
id: 'create-folder',
|
|
874
|
+
label: 'Nova Pasta',
|
|
875
|
+
icon: Folder,
|
|
876
|
+
onClick: () => openFolderDialog()
|
|
877
|
+
},
|
|
878
|
+
]
|
|
879
|
+
},
|
|
880
|
+
|
|
881
|
+
// Navegação
|
|
882
|
+
navigation: [
|
|
883
|
+
{ label: 'Visão Geral', path: '/', icon: Home },
|
|
884
|
+
{ label: 'Configurações', path: '/settings', icon: Settings },
|
|
885
|
+
]
|
|
886
|
+
};
|
|
887
|
+
|
|
888
|
+
<AppSidebar config={sidebarConfig} />
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
### Comportamento
|
|
892
|
+
|
|
893
|
+
| Cenário | Comportamento |
|
|
894
|
+
|---------|---------------|
|
|
895
|
+
| **Uma ação** | Clique executa a ação diretamente |
|
|
896
|
+
| **Múltiplas ações** | Clique exibe dropdown com opções |
|
|
897
|
+
| **Modal aberto** | Gatilho fica desabilitado |
|
|
898
|
+
| **Sidebar colapsada** | Exibe apenas ícone com tooltip |
|
|
899
|
+
|
|
900
|
+
### Props do SidebarActionTrigger
|
|
901
|
+
|
|
902
|
+
| Prop | Tipo | Obrigatório | Descrição |
|
|
903
|
+
|------|------|-------------|-----------|
|
|
904
|
+
| `config` | `SidebarActionsConfig` | ✅ | Configuração das ações |
|
|
905
|
+
| `isCollapsed` | `boolean` | ❌ | Se a sidebar está colapsada |
|
|
906
|
+
| `isDisabled` | `boolean` | ❌ | Desabilita o gatilho |
|
|
907
|
+
|
|
908
|
+
### Interface SidebarModuleAction
|
|
909
|
+
|
|
910
|
+
```typescript
|
|
911
|
+
interface SidebarModuleAction {
|
|
912
|
+
id: string; // Identificador único
|
|
913
|
+
label: string; // Texto do botão/opção
|
|
914
|
+
icon?: LucideIcon; // Ícone opcional
|
|
915
|
+
onClick: () => void; // Callback de execução
|
|
916
|
+
disabled?: boolean; // Estado desabilitado
|
|
917
|
+
permissionCheck?: () => Promise<boolean>;
|
|
918
|
+
}
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
### Interface SidebarActionsConfig
|
|
922
|
+
|
|
923
|
+
```typescript
|
|
924
|
+
interface SidebarActionsConfig {
|
|
925
|
+
triggerLabel?: string; // Rótulo do gatilho (padrão: 'Criar')
|
|
926
|
+
triggerIcon?: LucideIcon; // Ícone do gatilho (padrão: Plus)
|
|
927
|
+
actions: SidebarModuleAction[];
|
|
928
|
+
}
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
### Gerenciamento de Modais (Opcional)
|
|
932
|
+
|
|
933
|
+
Para desabilitar o gatilho quando há modais abertos, use o `ModalStateProvider`:
|
|
934
|
+
|
|
935
|
+
```tsx
|
|
936
|
+
import { CoreProviders, ModalStateProvider, useModalState } from 'forlogic-core';
|
|
937
|
+
|
|
938
|
+
// No App.tsx (opcional - CoreProviders não inclui por padrão)
|
|
939
|
+
<CoreProviders>
|
|
940
|
+
<ModalStateProvider>
|
|
941
|
+
<AppLayout />
|
|
942
|
+
</ModalStateProvider>
|
|
943
|
+
</CoreProviders>
|
|
944
|
+
|
|
945
|
+
// Em componentes com modal
|
|
946
|
+
function MeuDialog({ open, onOpenChange }) {
|
|
947
|
+
const { registerModal, unregisterModal } = useModalState();
|
|
948
|
+
|
|
949
|
+
useEffect(() => {
|
|
950
|
+
if (open) {
|
|
951
|
+
registerModal('meu-dialog');
|
|
952
|
+
} else {
|
|
953
|
+
unregisterModal('meu-dialog');
|
|
954
|
+
}
|
|
955
|
+
}, [open]);
|
|
956
|
+
|
|
957
|
+
return <Dialog open={open} onOpenChange={onOpenChange}>...</Dialog>;
|
|
958
|
+
}
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
### Diretriz para Uso via Prompt
|
|
962
|
+
|
|
963
|
+
#### ✅ Prompts corretos:
|
|
964
|
+
- "Adicione uma ação principal 'Criar Processo' no sidebar do módulo"
|
|
965
|
+
- "Configure o módulo para ter duas ações principais: 'Novo Item' e 'Nova Pasta'"
|
|
966
|
+
- "Adicione o botão de criar no topo do sidebar como ação de módulo"
|
|
967
|
+
|
|
968
|
+
#### ❌ Prompts ambíguos (evitar):
|
|
969
|
+
- "Coloque um botão de criar no menu" (ambíguo - qual menu?)
|
|
970
|
+
- "Adicione navegação para criar" (ação ≠ navegação)
|
|
971
|
+
- "Crie um link para nova entidade" (link = navegação, não ação)
|
|
972
|
+
|
|
839
973
|
## 🛠️ CLI: Sincronização de Documentação
|
|
840
974
|
|
|
841
975
|
O `forlogic-core` disponibiliza um comando CLI para sincronizar a documentação centralizada do banco de dados para projetos consumidores.
|