@luminix/mui-cms 0.2.13 → 1.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/README.md +32 -22
- package/bundle/mui-cms.bundle.iife.js +42 -36
- package/dist/mui-cms.js +2849 -2411
- package/docs/acoes.md +196 -0
- package/docs/componentes.md +166 -0
- package/docs/configuracao.md +117 -0
- package/docs/extensibilidade.md +261 -0
- package/docs/facades.md +195 -0
- package/docs/hooks.md +307 -0
- package/docs/index.md +25 -0
- package/docs/instalacao.md +95 -0
- package/docs/introducao.md +72 -0
- package/docs/tipos.md +248 -0
- package/package.json +18 -6
- package/tsconfig.json +1 -0
- package/tsconfig.test.json +16 -0
- package/types/components/Layout/Drawer/LogoutButton.d.ts +4 -0
- package/types/dist.d.ts +3 -1
- package/types/services/CmsService.d.ts +3 -0
- package/types/types/PropTypes.d.ts +3 -0
- package/vitest.config.ts +22 -0
- package/types/main.dev.d.ts +0 -0
package/docs/hooks.md
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
# Hooks
|
|
2
|
+
|
|
3
|
+
Todos os hooks abaixo são exportados de `@luminix/mui-cms` e devem ser usados dentro da árvore de componentes do `LuminixCms`.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import { useNotify, useDialog, useTable, /* ... */ } from '@luminix/mui-cms';
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Navegação e página
|
|
12
|
+
|
|
13
|
+
### usePageTitle
|
|
14
|
+
|
|
15
|
+
Retorna o título atual da página.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const title = usePageTitle(); // string
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### useSetPageTitle
|
|
22
|
+
|
|
23
|
+
Recebe um `title` como argumento e define o título da página enquanto o componente está montado. Remove o título automaticamente no unmount.
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
useSetPageTitle('Meus Posts');
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Não retorna valor.
|
|
30
|
+
|
|
31
|
+
### useSearch
|
|
32
|
+
|
|
33
|
+
Torna a barra de busca visível enquanto o componente está montado. Esconde-a automaticamente no unmount.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
useSearch();
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Não recebe parâmetros nem retorna valor. Para ler o valor atual da busca (query string), use diretamente `useSearchParams` do `react-router-dom`.
|
|
40
|
+
|
|
41
|
+
### useHasSearch
|
|
42
|
+
|
|
43
|
+
Retorna `true` se a barra de busca está visível no momento.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
const hasSearch = useHasSearch(); // boolean
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### useBackButton
|
|
50
|
+
|
|
51
|
+
Torna o botão voltar visível enquanto o componente está montado. Esconde-o automaticamente no unmount.
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
useBackButton();
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Não recebe parâmetros nem retorna valor.
|
|
58
|
+
|
|
59
|
+
### useHasBackButton
|
|
60
|
+
|
|
61
|
+
Retorna `true` se o botão voltar está visível no momento.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
const hasBack = useHasBackButton(); // boolean
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Estado da tabela
|
|
70
|
+
|
|
71
|
+
### useTable
|
|
72
|
+
|
|
73
|
+
Retorna o valor completo do `TableContext`. Disponível dentro de componentes filhos do `TableProvider`.
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
const {
|
|
77
|
+
columns, // Column[]
|
|
78
|
+
columnCount, // number
|
|
79
|
+
massActions, // MassAction[]
|
|
80
|
+
items, // Collection<Model> | undefined
|
|
81
|
+
loading, // boolean | undefined
|
|
82
|
+
error, // Error | null
|
|
83
|
+
Model, // typeof ModelType
|
|
84
|
+
selected, // Collection<Model>
|
|
85
|
+
} = useTable();
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### useSelection
|
|
89
|
+
|
|
90
|
+
Retorna utilitários para gerenciar a seleção de linhas da tabela.
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
const {
|
|
94
|
+
selected, // Collection<Model> — itens selecionados (reativo)
|
|
95
|
+
indeterminate, // boolean — true se parte dos itens está selecionada
|
|
96
|
+
allSelected, // boolean — true se todos os itens da página estão selecionados
|
|
97
|
+
isSelected, // (item: Model) => boolean
|
|
98
|
+
handleClearSelected, // () => void
|
|
99
|
+
handleSelectToggle, // (item: Model) => void
|
|
100
|
+
handleSelectToggleAll, // () => void
|
|
101
|
+
} = useSelection();
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### useCurrentModel
|
|
105
|
+
|
|
106
|
+
Retorna a classe do modelo ativo na tela atual. Disponível dentro de um `ModelProvider`.
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
const ModelClass = useCurrentModel(); // typeof ModelType
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Notificações
|
|
115
|
+
|
|
116
|
+
### useNotify
|
|
117
|
+
|
|
118
|
+
Retorna a função `notify` para exibir notificações toast.
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
const notify = useNotify();
|
|
122
|
+
|
|
123
|
+
// forma simplificada
|
|
124
|
+
notify('Salvo com sucesso!');
|
|
125
|
+
|
|
126
|
+
// com objeto completo
|
|
127
|
+
notify({
|
|
128
|
+
message: 'Post publicado.',
|
|
129
|
+
severity: 'success', // 'success' | 'error' | 'warning' | 'info'
|
|
130
|
+
title: 'Sucesso', // opcional
|
|
131
|
+
actions: [ // opcional — botões de ação no toast
|
|
132
|
+
{ label: 'Desfazer', callback: () => { /* ... */ } },
|
|
133
|
+
],
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
A assinatura completa:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
type NotifyFunction = (notification: string | Notification) => void;
|
|
141
|
+
|
|
142
|
+
type Notification = {
|
|
143
|
+
message: React.ReactNode;
|
|
144
|
+
severity?: 'success' | 'error' | 'warning' | 'info';
|
|
145
|
+
title?: React.ReactNode;
|
|
146
|
+
actions?: { label: React.ReactNode; callback: () => void }[];
|
|
147
|
+
};
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### useNotifications
|
|
151
|
+
|
|
152
|
+
Acessa o estado interno do `NotificationContext`. Útil para criar providers de notificação customizados.
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
const {
|
|
156
|
+
isOpen,
|
|
157
|
+
notify,
|
|
158
|
+
dismissNotification,
|
|
159
|
+
notifications, // Notification[]
|
|
160
|
+
current, // Notification | undefined — notificação sendo exibida
|
|
161
|
+
displacement, // string — deslocamento CSS atual do Snackbar
|
|
162
|
+
} = useNotifications();
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### useDisplaceNotifications
|
|
166
|
+
|
|
167
|
+
Define o deslocamento (offset) do Snackbar de notificações. Útil para evitar sobreposição com elementos fixos como FABs ou rodapés.
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
useDisplaceNotifications(value);
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
- `value: string | number | false` — número de unidades de espaçamento MUI, string CSS ou `false` para restaurar o valor padrão.
|
|
174
|
+
- O deslocamento é restaurado automaticamente no unmount.
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
// desloca 8 unidades de espaçamento MUI acima do padrão
|
|
178
|
+
useDisplaceNotifications(8);
|
|
179
|
+
|
|
180
|
+
// restaura o deslocamento padrão
|
|
181
|
+
useDisplaceNotifications(false);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Diálogos
|
|
187
|
+
|
|
188
|
+
### useDialog
|
|
189
|
+
|
|
190
|
+
Retorna a função `dialog` para abrir diálogos modais. Retorna uma `Promise` que resolve com o resultado da interação do usuário.
|
|
191
|
+
|
|
192
|
+
```ts
|
|
193
|
+
const dialog = useDialog();
|
|
194
|
+
|
|
195
|
+
// forma simplificada — abre um alerta
|
|
196
|
+
const confirmed = await dialog('Tem certeza?');
|
|
197
|
+
|
|
198
|
+
// com objeto completo
|
|
199
|
+
const result = await dialog({
|
|
200
|
+
title: 'Confirmar exclusão',
|
|
201
|
+
message: 'Esta ação não pode ser desfeita.',
|
|
202
|
+
type: 'confirm', // 'alert' | 'confirm' | 'prompt'
|
|
203
|
+
dismissable: true, // permite fechar clicando fora
|
|
204
|
+
confirmText: 'Excluir',
|
|
205
|
+
cancelText: 'Cancelar',
|
|
206
|
+
// para type: 'prompt':
|
|
207
|
+
defaultValue: '',
|
|
208
|
+
textFieldProps: { label: 'Nome do arquivo' },
|
|
209
|
+
});
|
|
210
|
+
// result: true (confirmou) | false (cancelou) | string (prompt)
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
A assinatura completa:
|
|
214
|
+
|
|
215
|
+
```ts
|
|
216
|
+
type DialogFunction = (message: string | DialogMessage) => Promise<boolean | string>;
|
|
217
|
+
|
|
218
|
+
type DialogMessage = {
|
|
219
|
+
title?: React.ReactNode;
|
|
220
|
+
message: React.ReactNode;
|
|
221
|
+
type?: 'alert' | 'confirm' | 'prompt';
|
|
222
|
+
dismissable?: boolean;
|
|
223
|
+
confirmText?: string;
|
|
224
|
+
cancelText?: string;
|
|
225
|
+
defaultValue?: string; // valor inicial para type 'prompt'
|
|
226
|
+
dialogProps?: Partial<DialogProps>;
|
|
227
|
+
textFieldProps?: Partial<TextFieldProps>;
|
|
228
|
+
};
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Layout
|
|
234
|
+
|
|
235
|
+
### useLayoutConfig
|
|
236
|
+
|
|
237
|
+
Lê um valor da configuração de layout (`CmsConfig['layout']`) pelo caminho (dot notation).
|
|
238
|
+
|
|
239
|
+
```ts
|
|
240
|
+
const drawerWidth = useLayoutConfig('drawer.width', 240);
|
|
241
|
+
const appBarColor = useLayoutConfig('appBar.color');
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Parâmetros:
|
|
245
|
+
- `path: string` — caminho no objeto de layout (ex.: `'drawer.width'`, `'appBar.height'`)
|
|
246
|
+
- `defaultValue?: unknown` — valor retornado se o caminho não estiver definido
|
|
247
|
+
|
|
248
|
+
### useIsDesktopMode
|
|
249
|
+
|
|
250
|
+
Retorna `true` quando a largura da tela está acima do breakpoint configurado em `layout.breakpoint`.
|
|
251
|
+
|
|
252
|
+
```ts
|
|
253
|
+
const isDesktop = useIsDesktopMode(); // boolean
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### useMenu
|
|
257
|
+
|
|
258
|
+
Retorna o estado de abertura do Drawer lateral e funções para controlá-lo.
|
|
259
|
+
|
|
260
|
+
```ts
|
|
261
|
+
const {
|
|
262
|
+
open, // boolean — true se o Drawer está aberto
|
|
263
|
+
handleDrawerOpen, // () => void
|
|
264
|
+
handleDrawerClose, // () => void
|
|
265
|
+
toggle, // () => void
|
|
266
|
+
} = useMenu();
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Eventos e ações
|
|
272
|
+
|
|
273
|
+
### useActionEvent
|
|
274
|
+
|
|
275
|
+
Monta o objeto `ActionCallbackEvent` — útil para chamar manualmente callbacks de ações em componentes customizados.
|
|
276
|
+
|
|
277
|
+
```ts
|
|
278
|
+
const event = useActionEvent();
|
|
279
|
+
|
|
280
|
+
event.navigate('/posts');
|
|
281
|
+
event.refresh();
|
|
282
|
+
event.notify('Salvo!');
|
|
283
|
+
await event.dialog({ message: 'Confirmar?' });
|
|
284
|
+
event.t('chave.de.traducao');
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### useHandleError
|
|
288
|
+
|
|
289
|
+
Retorna uma função que trata erros de requisição e os exibe como notificação.
|
|
290
|
+
|
|
291
|
+
```ts
|
|
292
|
+
const handleError = useHandleError();
|
|
293
|
+
|
|
294
|
+
try {
|
|
295
|
+
await model.save();
|
|
296
|
+
} catch (err) {
|
|
297
|
+
handleError(err);
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Próximos passos
|
|
304
|
+
|
|
305
|
+
- [Ações](acoes.md) — como definir ações estáticas, de instância e em massa
|
|
306
|
+
- [Extensibilidade](extensibilidade.md) — customizações via redutores
|
|
307
|
+
- [Volta ao índice](index.md)
|
package/docs/index.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Documentação — @luminix/mui-cms
|
|
2
|
+
|
|
3
|
+
Bem-vindo à documentação da biblioteca `@luminix/mui-cms`.
|
|
4
|
+
|
|
5
|
+
## Páginas
|
|
6
|
+
|
|
7
|
+
| Página | Descrição |
|
|
8
|
+
|---|---|
|
|
9
|
+
| [Introdução](introducao.md) | O que é a biblioteca, visão geral do ecossistema Luminix |
|
|
10
|
+
| [Instalação](instalacao.md) | Como instalar e configurar o ambiente |
|
|
11
|
+
| [Configuração](configuracao.md) | Opções de configuração do layout e tema |
|
|
12
|
+
| [Componentes](componentes.md) | `LuminixCms`, `Link` e providers de contexto |
|
|
13
|
+
| [Facades](facades.md) | `Cms`, `Filter` e `Icon` |
|
|
14
|
+
| [Hooks](hooks.md) | Todos os hooks exportados pela biblioteca |
|
|
15
|
+
| [Ações](acoes.md) | Ações estáticas, de instância e em massa |
|
|
16
|
+
| [Extensibilidade](extensibilidade.md) | Como customizar via redutores |
|
|
17
|
+
| [Referência de tipos](tipos.md) | Tipos TypeScript exportados |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Próximos passos
|
|
22
|
+
|
|
23
|
+
- Comece pela [Introdução](introducao.md) para entender o ecossistema.
|
|
24
|
+
- Se já conhece o Luminix, vá direto para [Instalação](instalacao.md).
|
|
25
|
+
- Para customizar o painel, consulte [Extensibilidade](extensibilidade.md).
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Instalação
|
|
2
|
+
|
|
3
|
+
## Via luminix/admin (recomendado)
|
|
4
|
+
|
|
5
|
+
O caminho mais simples é usar o pacote Laravel `luminix/admin`, que instala e configura todas as dependências automaticamente:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
composer require luminix/admin
|
|
9
|
+
php artisan luminix:admin-ui
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
O comando `luminix:admin-ui` publica os arquivos JavaScript em `resources/js/`, instala as dependências npm e configura o Vite. Após isso, basta compilar:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm run build
|
|
16
|
+
# ou, em desenvolvimento:
|
|
17
|
+
npm run dev
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
O painel estará disponível em `/admin`.
|
|
21
|
+
|
|
22
|
+
> Consulte a documentação do `luminix/admin` para detalhes sobre middleware, permissões e configuração do servidor.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Instalação manual
|
|
27
|
+
|
|
28
|
+
Se preferir integrar a biblioteca em um projeto React existente, instale as dependências:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install @luminix/mui-cms \
|
|
32
|
+
@luminix/core \
|
|
33
|
+
@luminix/react \
|
|
34
|
+
@luminix/support \
|
|
35
|
+
@mui/material \
|
|
36
|
+
@mui/icons-material \
|
|
37
|
+
@emotion/react \
|
|
38
|
+
@emotion/styled \
|
|
39
|
+
@fontsource/roboto \
|
|
40
|
+
i18next \
|
|
41
|
+
react-i18next \
|
|
42
|
+
react-router-dom@6.25.1
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Ponto de entrada
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
// src/main.tsx
|
|
49
|
+
import '@fontsource/roboto/300.css';
|
|
50
|
+
import '@fontsource/roboto/400.css';
|
|
51
|
+
import '@fontsource/roboto/500.css';
|
|
52
|
+
import '@fontsource/roboto/700.css';
|
|
53
|
+
|
|
54
|
+
import React from 'react';
|
|
55
|
+
import ReactDOM from 'react-dom/client';
|
|
56
|
+
import { LuminixCms } from '@luminix/mui-cms';
|
|
57
|
+
|
|
58
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
59
|
+
<React.StrictMode>
|
|
60
|
+
<LuminixCms />
|
|
61
|
+
</React.StrictMode>
|
|
62
|
+
);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Pré-requisitos no backend
|
|
66
|
+
|
|
67
|
+
A instalação manual requer que o backend Laravel já tenha os pacotes `luminix/backend` e `luminix/frontend` configurados, com `@luminixEmbed()` presente no template Blade que carrega o JavaScript.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Dependências peer
|
|
72
|
+
|
|
73
|
+
| Pacote | Versão mínima |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `react` | ^18.3.1 |
|
|
76
|
+
| `react-dom` | ^18.3.1 |
|
|
77
|
+
| `react-router-dom` | 6.25.1 |
|
|
78
|
+
| `@mui/material` | ^5.16.5 |
|
|
79
|
+
| `@mui/icons-material` | ^5.16.5 |
|
|
80
|
+
| `@emotion/react` | ^11.13.0 |
|
|
81
|
+
| `@emotion/styled` | ^11.13.0 |
|
|
82
|
+
| `@fontsource/roboto` | ^5.0.12 |
|
|
83
|
+
| `@luminix/core` | ^1.0.0 |
|
|
84
|
+
| `@luminix/react` | ^1.0.0 |
|
|
85
|
+
| `@luminix/support` | ^1.0.1 |
|
|
86
|
+
| `i18next` | ^23.12.2 |
|
|
87
|
+
| `react-i18next` | ^15.0.1 |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Próximos passos
|
|
92
|
+
|
|
93
|
+
- [Configuração](configuracao.md) — personalize o tema e o layout
|
|
94
|
+
- [Componentes](componentes.md) — conheça o `LuminixCms` e os providers
|
|
95
|
+
- [Volta ao índice](index.md)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Introdução
|
|
2
|
+
|
|
3
|
+
`@luminix/mui-cms` é a camada de interface do ecossistema Luminix: uma biblioteca de componentes React construída sobre o Material-UI que entrega um painel administrativo (CMS) completo e extensível, pronto para ser integrado a qualquer aplicação Laravel.
|
|
4
|
+
|
|
5
|
+
## O ecossistema Luminix
|
|
6
|
+
|
|
7
|
+
O Luminix é composto por pacotes que cooperam em camadas bem definidas:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Laravel (servidor)
|
|
11
|
+
├── luminix/backend → Gera endpoints REST automáticos para modelos Eloquent
|
|
12
|
+
└── luminix/frontend → Injeta dados de boot no HTML via @luminixEmbed()
|
|
13
|
+
|
|
14
|
+
↓ dados chegam ao navegador
|
|
15
|
+
|
|
16
|
+
JavaScript (cliente)
|
|
17
|
+
├── @luminix/support → Utilitários, padrões Reducible/Macroable, cliente HTTP
|
|
18
|
+
├── @luminix/core → Contêiner de app, sistema de modelos, roteamento
|
|
19
|
+
├── @luminix/react → Hooks e componentes React base (formulários, paginação)
|
|
20
|
+
└── @luminix/mui-cms → Interface MUI: layout, tabelas, filtros, notificações
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
O pacote `luminix/admin` (Laravel) orquestra toda a integração: publica os arquivos React, configura o Vite e serve o painel em `/admin`.
|
|
24
|
+
|
|
25
|
+
## Responsabilidades de cada camada
|
|
26
|
+
|
|
27
|
+
### luminix/backend
|
|
28
|
+
Aplica a trait `LuminixModel` nos modelos Eloquent e expõe automaticamente endpoints REST em `/luminix-api/*`. Suporta filtros avançados, paginação, ordenação, soft deletes e controle de acesso via Laravel Gates.
|
|
29
|
+
|
|
30
|
+
Documentação: `luminix/backend/docs/`
|
|
31
|
+
|
|
32
|
+
### luminix/frontend
|
|
33
|
+
Fornece a diretiva Blade `@luminixEmbed()` que injeta no HTML o manifesto de modelos e rotas, configuração da aplicação, usuário autenticado e token CSRF — tudo o que o frontend JavaScript precisa para inicializar.
|
|
34
|
+
|
|
35
|
+
Documentação: `luminix/frontend/docs/`
|
|
36
|
+
|
|
37
|
+
### @luminix/support
|
|
38
|
+
Base de infraestrutura: coleções, manipulação de strings/objetos/arrays, cliente HTTP com axios, container de aplicação e os padrões `Reducible` e `Macroable` usados em toda a stack.
|
|
39
|
+
|
|
40
|
+
Documentação: `@luminix/support/docs/`
|
|
41
|
+
|
|
42
|
+
### @luminix/core
|
|
43
|
+
Fachadas de alto nível (`App`, `Auth`, `Config`, `Model`, `Route`) e o sistema de modelos com suporte a relacionamentos e queries encadeadas.
|
|
44
|
+
|
|
45
|
+
Documentação: `@luminix/core/docs/`
|
|
46
|
+
|
|
47
|
+
### @luminix/react
|
|
48
|
+
Camada React: `LuminixProvider`, `ModelForm`, hooks de formulário (`useForm`), paginação (`usePagination`), requisições (`useQuery`) e acesso a coleções (`useCollection`).
|
|
49
|
+
|
|
50
|
+
Documentação: `@luminix/react/docs/`
|
|
51
|
+
|
|
52
|
+
### @luminix/mui-cms _(esta biblioteca)_
|
|
53
|
+
Interface completa: layout responsivo com AppBar e Drawer, tabelas com filtros, ações (estáticas, de instância, em massa), sistema de notificações, diálogos e todas as extensões via redutores.
|
|
54
|
+
|
|
55
|
+
### luminix/admin _(não documentado ainda)_
|
|
56
|
+
Pacote Laravel que integra tudo: publica os arquivos React em `resources/js/`, configura o Vite, registra as rotas do painel e serve a SPA em `/admin`. É o ponto de entrada recomendado para quem quer usar o Luminix CMS em um projeto Laravel sem precisar configurar cada peça manualmente.
|
|
57
|
+
|
|
58
|
+
## Fluxo de dados
|
|
59
|
+
|
|
60
|
+
1. O Laravel renderiza o HTML com `@luminixEmbed()` — que injeta boot data e manifesto.
|
|
61
|
+
2. O JavaScript inicializa o contêiner de aplicação via `@luminix/core`.
|
|
62
|
+
3. O `LuminixCms` monta a SPA com `react-router-dom` e Material-UI.
|
|
63
|
+
4. O painel descobre os modelos pelo manifesto e gera rotas, menus e telas automaticamente.
|
|
64
|
+
5. Toda requisição de dados passa pelo cliente HTTP de `@luminix/support` com o token CSRF já configurado.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Próximos passos
|
|
69
|
+
|
|
70
|
+
- [Instalação](instalacao.md) — como instalar e configurar o ambiente de desenvolvimento
|
|
71
|
+
- [Configuração](configuracao.md) — tema MUI, layout e opções disponíveis
|
|
72
|
+
- [Volta ao índice](index.md)
|