infinity-forge 10.8.9 → 10.9.1
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
CHANGED
|
@@ -1,3 +1,268 @@
|
|
|
1
|
+
# Infinity Forge
|
|
2
|
+
|
|
3
|
+
Uma biblioteca abrangente React/Next.js da **Codie Digital** que fornece um poderoso sistema de gerenciamento de conteúdo chamado **Atena** para construir sites dinâmicos e editáveis.
|
|
4
|
+
|
|
5
|
+
## Visão Geral
|
|
6
|
+
|
|
7
|
+
O Infinity Forge foi projetado para criar sites onde o conteúdo pode ser gerenciado dinamicamente através de uma interface CMS intuitiva. O núcleo da biblioteca é o sistema **Atena**, que permite edição de conteúdo em tempo real, suporte multi-idioma e controle de acesso baseado em funções.
|
|
8
|
+
|
|
9
|
+
## Principais Recursos
|
|
10
|
+
|
|
11
|
+
- 🚀 **Renderização Dinâmica de Páginas** - Páginas são construídas dinamicamente baseadas nos caminhos das URLs
|
|
12
|
+
- ✏️ **Edição de Conteúdo em Tempo Real** - Edite conteúdo diretamente no site com preview ao vivo
|
|
13
|
+
- 🌍 **Internacionalização (i18n)** - Suporte multi-idioma integrado
|
|
14
|
+
- 🔐 **Controle de Acesso Baseado em Funções** - Gerenciamento seguro de conteúdo com permissões de usuário
|
|
15
|
+
- 📱 **Renderização no Servidor (SSR)** - Suporte completo a SSR para melhor SEO e performance
|
|
16
|
+
- 🎨 **Componentes Modulares** - Seções dinâmicas e componentes reutilizáveis
|
|
17
|
+
- 📊 **Painel Administrativo** - Interface administrativa abrangente para gerenciamento de conteúdo
|
|
18
|
+
|
|
19
|
+
## Arquitetura
|
|
20
|
+
|
|
21
|
+
### Componentes Principais
|
|
22
|
+
|
|
23
|
+
#### **Sistema Atena**
|
|
24
|
+
|
|
25
|
+
O coração do Infinity Forge, fornecendo:
|
|
26
|
+
|
|
27
|
+
- Gerenciamento dinâmico de conteúdo
|
|
28
|
+
- Roteamento e renderização de páginas
|
|
29
|
+
- Funcionalidade de modo de edição
|
|
30
|
+
- Organização de conteúdo baseada em seções
|
|
31
|
+
|
|
32
|
+
#### **Camada UI** (`src/ui/`)
|
|
33
|
+
|
|
34
|
+
- Componentes UI reutilizáveis
|
|
35
|
+
- Seções e elementos dinâmicos
|
|
36
|
+
- Hooks para gerenciamento de conteúdo
|
|
37
|
+
|
|
38
|
+
#### **Camada Sistema** (`src/system/`)
|
|
39
|
+
|
|
40
|
+
- Autenticação e autorização
|
|
41
|
+
- Gerenciamento de temas e layout
|
|
42
|
+
- Provedores de contexto
|
|
43
|
+
|
|
44
|
+
#### **Codie Panel** (`src/codie_panel/`)
|
|
45
|
+
|
|
46
|
+
- Componentes da interface administrativa
|
|
47
|
+
- Ferramentas de gerenciamento de conteúdo
|
|
48
|
+
- Painéis de configuração
|
|
49
|
+
|
|
50
|
+
## Instalação
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install infinity-forge
|
|
54
|
+
# ou
|
|
55
|
+
pnpm install infinity-forge
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Início Rápido
|
|
59
|
+
|
|
60
|
+
### 1. Configure sua Aplicação Next.js
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// pages/_app.tsx
|
|
64
|
+
import { InfinityForgeProviders, api } from 'infinity-forge'
|
|
65
|
+
import 'infinity-forge/dist/infinity-forge.css'
|
|
66
|
+
|
|
67
|
+
export default function App({ Component, pageProps }) {
|
|
68
|
+
const forgeConfig = {
|
|
69
|
+
queryClient: new QueryClient(),
|
|
70
|
+
auth: {
|
|
71
|
+
roles: {
|
|
72
|
+
administradorMaster: {},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
atena: { ...pageProps, disableAuth: false },
|
|
76
|
+
siteConfigurations: {
|
|
77
|
+
// Suas configurações do site
|
|
78
|
+
},
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<InfinityForgeProviders {...forgeConfig}>
|
|
83
|
+
<Component {...pageProps} />
|
|
84
|
+
</InfinityForgeProviders>
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 2. Crie Páginas Dinâmicas
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// pages/[...dynamic].tsx
|
|
93
|
+
import { AtenaPage, AtenaSSR } from 'infinity-forge'
|
|
94
|
+
|
|
95
|
+
export default function DynamicPage() {
|
|
96
|
+
return <AtenaPage />
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export const getServerSideProps = (ctx) => AtenaSSR(ctx, {})
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 3. Use Seções Dinâmicas
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { useDynamicSection } from 'infinity-forge'
|
|
106
|
+
|
|
107
|
+
function MeuComponente() {
|
|
108
|
+
const section = useDynamicSection({
|
|
109
|
+
refSection: 'minha-secao',
|
|
110
|
+
fields: {
|
|
111
|
+
title: {},
|
|
112
|
+
description: {},
|
|
113
|
+
images: {},
|
|
114
|
+
},
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<section.Section>
|
|
119
|
+
<h1>{section.title}</h1>
|
|
120
|
+
<p>{section.description}</p>
|
|
121
|
+
<img src={section.images[0]?.url} alt='' />
|
|
122
|
+
</section.Section>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Como o Atena Funciona
|
|
128
|
+
|
|
129
|
+
### 1. **Resolução de Páginas**
|
|
130
|
+
|
|
131
|
+
Quando um usuário visita qualquer URL, o manipulador de rota dinâmica (`[...dynamic].tsx`) captura a requisição.
|
|
132
|
+
|
|
133
|
+
### 2. **Processamento no Servidor**
|
|
134
|
+
|
|
135
|
+
A função `AtenaSSR`:
|
|
136
|
+
|
|
137
|
+
- Analisa a URL requisitada
|
|
138
|
+
- Busca seções dinâmicas da API
|
|
139
|
+
- Carrega dados específicos da página
|
|
140
|
+
- Gerencia internacionalização
|
|
141
|
+
- Retorna props processadas
|
|
142
|
+
|
|
143
|
+
### 3. **Gerenciamento de Contexto**
|
|
144
|
+
|
|
145
|
+
`AtenaProvider` gerencia o estado global:
|
|
146
|
+
|
|
147
|
+
- Permissões e funções do usuário
|
|
148
|
+
- Status do modo de edição
|
|
149
|
+
- Dados das seções dinâmicas
|
|
150
|
+
- Informações da página atual
|
|
151
|
+
|
|
152
|
+
### 4. **Seções Dinâmicas**
|
|
153
|
+
|
|
154
|
+
Componentes usam `useDynamicSection` para:
|
|
155
|
+
|
|
156
|
+
- Buscar conteúdo específico da seção
|
|
157
|
+
- Gerenciar renderização do modo de edição
|
|
158
|
+
- Gerenciar conteúdo multilíngue
|
|
159
|
+
- Fornecer capacidades de edição inline
|
|
160
|
+
|
|
161
|
+
### 5. **Gerenciamento de Conteúdo**
|
|
162
|
+
|
|
163
|
+
Usuários autorizados podem:
|
|
164
|
+
|
|
165
|
+
- Editar conteúdo diretamente na página
|
|
166
|
+
- Gerenciar mídia e imagens
|
|
167
|
+
- Configurar definições de seção
|
|
168
|
+
- Visualizar mudanças em tempo real
|
|
169
|
+
|
|
170
|
+
## Referência da API
|
|
171
|
+
|
|
172
|
+
### Hooks Principais
|
|
173
|
+
|
|
174
|
+
#### `useDynamicSection<T>(props: DynamicSectionProps)`
|
|
175
|
+
|
|
176
|
+
Hook principal para criar seções dinâmicas e editáveis.
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
const section = useDynamicSection<MeuTipoDeConteudo>({
|
|
180
|
+
refSection: 'id-unico-da-secao',
|
|
181
|
+
isGlobal: false, // Opcional: torna a seção disponível globalmente
|
|
182
|
+
fields: {
|
|
183
|
+
title: {},
|
|
184
|
+
description: {},
|
|
185
|
+
images: {},
|
|
186
|
+
// ... outros campos
|
|
187
|
+
},
|
|
188
|
+
})
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### `useAtena()`
|
|
192
|
+
|
|
193
|
+
Acesse dados do contexto Atena.
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
const { sections, isEditMode, hasPermission, atenaPagePathname } = useAtena()
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Componentes Principais
|
|
200
|
+
|
|
201
|
+
#### `AtenaPage`
|
|
202
|
+
|
|
203
|
+
Renderiza páginas dinâmicas baseadas no roteamento de URL.
|
|
204
|
+
|
|
205
|
+
#### `AtenaProvider`
|
|
206
|
+
|
|
207
|
+
Provedor de contexto para funcionalidade Atena.
|
|
208
|
+
|
|
209
|
+
#### `InfinityForgeProviders`
|
|
210
|
+
|
|
211
|
+
Componente wrapper principal que fornece todos os contextos necessários.
|
|
212
|
+
|
|
213
|
+
## Tipos de Conteúdo
|
|
214
|
+
|
|
215
|
+
### DynamicSection
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
type DynamicSection<J> = {
|
|
219
|
+
id: string
|
|
220
|
+
enabled: boolean
|
|
221
|
+
i18n: i18n<{
|
|
222
|
+
title: string
|
|
223
|
+
subtitle: string
|
|
224
|
+
description: string
|
|
225
|
+
linkText: string
|
|
226
|
+
}>
|
|
227
|
+
ref: string
|
|
228
|
+
videoUrl: string
|
|
229
|
+
linkUrl: string
|
|
230
|
+
jsonContent: J
|
|
231
|
+
images: FileSystemType[]
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Configuração
|
|
236
|
+
|
|
237
|
+
### Configuração do Atena
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
type AtenaConfigurations = {
|
|
241
|
+
ssrFunction?: () => Promise<Record<string, any>>
|
|
242
|
+
apiUrl?: string
|
|
243
|
+
debugMode?: boolean
|
|
244
|
+
i18n?: {
|
|
245
|
+
active: boolean
|
|
246
|
+
}
|
|
247
|
+
disableAuth?: boolean
|
|
248
|
+
modifierSections?: (sections: any) => { sections: any; [key: string]: any }
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Desenvolvimento
|
|
253
|
+
|
|
254
|
+
### Pré-requisitos
|
|
255
|
+
|
|
256
|
+
- Node.js 18+
|
|
257
|
+
- pnpm (recomendado) ou npm
|
|
258
|
+
- Next.js 15+
|
|
259
|
+
- React 19+
|
|
260
|
+
|
|
261
|
+
### Configuração TypeScript
|
|
262
|
+
|
|
263
|
+
Para usar o Infinity Forge em seu projeto, configure o `tsconfig.json` com as seguintes configurações:
|
|
264
|
+
|
|
265
|
+
```json
|
|
1
266
|
{
|
|
2
267
|
"include": ["src/**/*", "styled.d.ts"],
|
|
3
268
|
"compilerOptions": {
|
|
@@ -17,3 +282,70 @@
|
|
|
17
282
|
},
|
|
18
283
|
"afterDeclarations": true
|
|
19
284
|
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Scripts
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# Desenvolvimento
|
|
291
|
+
pnpm dev
|
|
292
|
+
|
|
293
|
+
# Build
|
|
294
|
+
pnpm build
|
|
295
|
+
|
|
296
|
+
# Iniciar servidor de produção
|
|
297
|
+
pnpm start
|
|
298
|
+
|
|
299
|
+
# Deploy (incrementa versão e publica)
|
|
300
|
+
pnpm deploy
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Páginas Integradas
|
|
304
|
+
|
|
305
|
+
A biblioteca inclui vários tipos de página pré-construídas:
|
|
306
|
+
|
|
307
|
+
- **Páginas de Contato** - Formulários de contato dinâmicos com campos personalizáveis
|
|
308
|
+
- **Páginas de Blog** - Listagem de blog e páginas de posts individuais
|
|
309
|
+
- **Páginas Administrativas** - Interface de gerenciamento de conteúdo
|
|
310
|
+
|
|
311
|
+
## Internacionalização
|
|
312
|
+
|
|
313
|
+
Atena suporta gerenciamento de conteúdo multi-idioma:
|
|
314
|
+
|
|
315
|
+
```typescript
|
|
316
|
+
// Habilitar i18n no AtenaSSR
|
|
317
|
+
export const getServerSideProps = (ctx) =>
|
|
318
|
+
AtenaSSR(ctx, {
|
|
319
|
+
i18n: { active: true },
|
|
320
|
+
})
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
O conteúdo é automaticamente gerenciado por idioma, com fallbacks para o idioma padrão.
|
|
324
|
+
|
|
325
|
+
## Autenticação e Permissões
|
|
326
|
+
|
|
327
|
+
Controle de acesso baseado em funções para edição de conteúdo:
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
const forgeConfig = {
|
|
331
|
+
auth: {
|
|
332
|
+
roles: {
|
|
333
|
+
admin: {},
|
|
334
|
+
editor: {},
|
|
335
|
+
// ... outras funções
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Licença
|
|
342
|
+
|
|
343
|
+
Licença MIT - veja o arquivo [LICENSE](./LICENSE) para detalhes.
|
|
344
|
+
|
|
345
|
+
## Suporte
|
|
346
|
+
|
|
347
|
+
Para suporte e dúvidas, entre em contato com a **Codie Digital** em [https://codie.com.br/](https://codie.com.br/)
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
**Infinity Forge** - Capacitando desenvolvedores a construir sites dinâmicos e gerenciados por conteúdo com facilidade.
|
|
@@ -55,6 +55,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
55
55
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
56
|
exports.SourceFilterCustom = SourceFilterCustom;
|
|
57
57
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
58
|
+
var react_1 = require("react");
|
|
58
59
|
var router_1 = require("next/router");
|
|
59
60
|
var ui_1 = require("../../../../../ui/index.js");
|
|
60
61
|
var hooks_1 = require("../hooks/index.js");
|
|
@@ -145,12 +146,24 @@ function CustomItem(_a) {
|
|
|
145
146
|
}
|
|
146
147
|
function CustomCarousel(_a) {
|
|
147
148
|
var index = _a.index, configuration = _a.configuration, filter = _a.filter, onClick = _a.onClick;
|
|
149
|
+
var router = (0, router_1.useRouter)();
|
|
148
150
|
var _b = (0, ui_1.useCarousel)({
|
|
149
151
|
id: configuration.target,
|
|
150
152
|
items: filter || [],
|
|
151
153
|
config: configuration.carouselConfig,
|
|
152
154
|
Component: function (props) { return ((0, jsx_runtime_1.jsx)(CustomItem, { configuration: configuration, index: index, onClick: function () { return onClick((props === null || props === void 0 ? void 0 : props.url) ? [props === null || props === void 0 ? void 0 : props.url] : []); }, props: props })); },
|
|
153
|
-
}), Carousel = _b.Carousel, Next = _b.Next, Prev = _b.Prev;
|
|
155
|
+
}), Carousel = _b.Carousel, Next = _b.Next, Prev = _b.Prev, actions = _b.actions;
|
|
156
|
+
(0, react_1.useEffect)(function () {
|
|
157
|
+
var _a, _b;
|
|
158
|
+
var decoded = (0, ui_1.fromBase64ToString)(router.query.sourceFilters);
|
|
159
|
+
var url = (_b = (_a = decoded === null || decoded === void 0 ? void 0 : decoded[0]) === null || _a === void 0 ? void 0 : _a.sourceUrls) === null || _b === void 0 ? void 0 : _b[0];
|
|
160
|
+
var filterItemIndex = filter.findIndex(function (item) { return item.url === url; });
|
|
161
|
+
if (filterItemIndex >= 0) {
|
|
162
|
+
setTimeout(function () {
|
|
163
|
+
actions.slideTo(filterItemIndex);
|
|
164
|
+
}, 500);
|
|
165
|
+
}
|
|
166
|
+
}, [router.query.sourceFilters]);
|
|
154
167
|
return ((0, jsx_runtime_1.jsxs)("div", { className: 'custom_filter', children: [(0, jsx_runtime_1.jsx)(Prev, { children: (0, jsx_runtime_1.jsx)(ui_1.Icon, { name: 'IconLeftChevron' }) }), (0, jsx_runtime_1.jsx)(Carousel, {}), (0, jsx_runtime_1.jsx)(Next, { children: (0, jsx_runtime_1.jsx)(ui_1.Icon, { name: 'IconRightChevron' }) })] }));
|
|
155
168
|
}
|
|
156
169
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/codie-dynamic/components/directory-filter/source-filter-custom/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,gDAuEC;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/codie-dynamic/components/directory-filter/source-filter-custom/index.tsx"],"names":[],"mappings":"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"}
|