@praxisui/page-builder 3.0.0-beta.9 → 5.0.0-beta.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 +47 -140
- package/fesm2022/praxisui-page-builder.mjs +798 -2983
- package/index.d.ts +17 -162
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
# @praxisui/page-builder
|
|
2
2
|
|
|
3
|
-
Ferramentas de edicao para paginas dinamicas canonicas baseadas em `praxis-dynamic-page`, com
|
|
3
|
+
Ferramentas de edicao para paginas dinamicas canonicas baseadas em `praxis-dynamic-page`, com palette, configuracao de pagina/widget e integracao com `@praxisui/settings-panel`.
|
|
4
4
|
|
|
5
5
|
## Documentation
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
- Indicado para: times que precisam
|
|
7
|
+
- Documentacao oficial: https://praxisui.dev
|
|
8
|
+
- Aplicacao de referencia: https://github.com/codexrodrigues/praxis-ui-quickstart
|
|
9
|
+
- Indicado para: times que precisam configurar paginas metadata-driven sobre o runtime canonico
|
|
10
10
|
|
|
11
11
|
## When to use
|
|
12
12
|
|
|
13
|
-
- Montar paginas dinamicas com widgets
|
|
14
|
-
- Entregar experiencia de
|
|
13
|
+
- Montar paginas dinamicas com widgets e layout visual sobre o runtime canonico
|
|
14
|
+
- Entregar experiencia de configuracao de pagina/widget sem depender de editor visual de conexoes
|
|
15
15
|
- Integrar page composition com IA, settings panel e contratos compartilhados do Praxis UI
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
O pacote permanece focado no shell canonico de authoring em torno de `praxis-dynamic-page`: palette, page settings, widget shell e catalogos de IA. A composicao declarativa de conexoes deve ser feita exclusivamente via JSON/configuracao canonica no `@praxisui/core`; os editores visuais legados de conexoes sairam do escopo ativo desta fase.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Instalacao
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
npm i @praxisui/page-builder
|
|
@@ -31,23 +31,22 @@ Peer dependencies (Angular v20):
|
|
|
31
31
|
- `@praxisui/core` `*`
|
|
32
32
|
- `@praxisui/settings-panel` `*`
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Visao Geral
|
|
35
35
|
|
|
36
|
-
Este pacote
|
|
37
|
-
- `
|
|
38
|
-
- `
|
|
39
|
-
-
|
|
40
|
-
- `
|
|
36
|
+
Este pacote expoe o shell ativo do builder canonico de pagina dinamica:
|
|
37
|
+
- `ComponentPaletteDialogComponent` para adicionar widgets a pagina.
|
|
38
|
+
- `FloatingToolbarComponent` e `TileToolbarComponent` para acoes rapidas de add/save/preview/configuracao.
|
|
39
|
+
- visualizador inicial de conexoes somente leitura para inspecao de `composition.links`.
|
|
40
|
+
- `WidgetShellEditorComponent` e `DynamicPageConfigEditorComponent` para authoring de shell/canvas sem redefinir a semantica canonica de composicao.
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- Como diálogo fullscreen (Material Dialog) para uma experiência imersiva de edição.
|
|
42
|
+
Conexoes continuam pertencendo ao contrato `WidgetPageDefinition`, mas a criacao/manutencao delas nesta fase deve acontecer por JSON/configuracao canonica e nao por builder/graph/editor visual legado.
|
|
43
|
+
O viewer ativo nesta fase existe apenas para inspecao contextual do contrato canonico e nao para editar links inline.
|
|
45
44
|
|
|
46
45
|
## AI Capabilities Registration
|
|
47
46
|
|
|
48
|
-
Para que o assistente de IA consiga configurar os inputs dos widgets, registre os
|
|
47
|
+
Para que o assistente de IA consiga configurar os inputs dos widgets, registre os catalogos de capacidades no bootstrap da aplicacao.
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
Opcao recomendada (registro automatico via provider + InjectionToken):
|
|
51
50
|
|
|
52
51
|
```ts
|
|
53
52
|
import { bootstrapApplication } from '@angular/platform-browser';
|
|
@@ -70,7 +69,7 @@ bootstrapApplication(AppComponent, {
|
|
|
70
69
|
});
|
|
71
70
|
```
|
|
72
71
|
|
|
73
|
-
Registro manual (
|
|
72
|
+
Registro manual (util para apps que precisam customizar o mapa):
|
|
74
73
|
|
|
75
74
|
```ts
|
|
76
75
|
import { registerWidgetAiCatalogs } from '@praxisui/page-builder';
|
|
@@ -88,8 +87,7 @@ Registro via token:
|
|
|
88
87
|
|
|
89
88
|
## Settings Panel Bridge
|
|
90
89
|
|
|
91
|
-
Para abrir "
|
|
92
|
-
registrar o bridge do Settings Panel:
|
|
90
|
+
Para abrir "Configuracoes da Pagina" e editores de shell no painel lateral, o host deve registrar o bridge do Settings Panel:
|
|
93
91
|
|
|
94
92
|
```ts
|
|
95
93
|
import { SETTINGS_PANEL_BRIDGE } from '@praxisui/core';
|
|
@@ -103,19 +101,19 @@ providers: [
|
|
|
103
101
|
]
|
|
104
102
|
```
|
|
105
103
|
|
|
106
|
-
|
|
107
|
-
- `TABLE_AI_CAPABILITIES`
|
|
108
|
-
- `CRUD_AI_CAPABILITIES`
|
|
109
|
-
- `LIST_AI_CAPABILITIES`
|
|
110
|
-
- `FORM_AI_CAPABILITIES`
|
|
111
|
-
- `FILES_UPLOAD_AI_CAPABILITIES`
|
|
112
|
-
- `STEPPER_AI_CAPABILITIES`
|
|
113
|
-
- `TABS_AI_CAPABILITIES`
|
|
114
|
-
- `EXPANSION_AI_CAPABILITIES`
|
|
104
|
+
Catalogos conhecidos (exports):
|
|
105
|
+
- `TABLE_AI_CAPABILITIES` - `@praxisui/table` (`praxis-table`)
|
|
106
|
+
- `CRUD_AI_CAPABILITIES` - `@praxisui/crud` (`praxis-crud`)
|
|
107
|
+
- `LIST_AI_CAPABILITIES` - `@praxisui/list` (`praxis-list`)
|
|
108
|
+
- `FORM_AI_CAPABILITIES` - `@praxisui/dynamic-form` (`praxis-dynamic-form`)
|
|
109
|
+
- `FILES_UPLOAD_AI_CAPABILITIES` - `@praxisui/files-upload` (`praxis-files-upload`)
|
|
110
|
+
- `STEPPER_AI_CAPABILITIES` - `@praxisui/stepper` (`praxis-stepper`)
|
|
111
|
+
- `TABS_AI_CAPABILITIES` - `@praxisui/tabs` (`praxis-tabs`)
|
|
112
|
+
- `EXPANSION_AI_CAPABILITIES` - `@praxisui/expansion` (`praxis-expansion`)
|
|
115
113
|
|
|
116
114
|
## Quick Start
|
|
117
115
|
|
|
118
|
-
O builder
|
|
116
|
+
O builder canonico expoe authoring de shell/palette sobre `praxis-dynamic-page`. Exemplo de uso no template:
|
|
119
117
|
|
|
120
118
|
```html
|
|
121
119
|
<praxis-dynamic-page-builder
|
|
@@ -124,89 +122,25 @@ O builder canônico expõe os métodos utilitários de authoring sobre `praxis-d
|
|
|
124
122
|
[enableCustomization]="true"
|
|
125
123
|
(pageChange)="onPageChange($event)">
|
|
126
124
|
</praxis-dynamic-page-builder>
|
|
127
|
-
|
|
128
|
-
<!-- Ações auxiliares -->
|
|
129
|
-
<button (click)="page.openConnectionsGraph()">Conexões (Graph)</button>
|
|
130
|
-
<button (click)="page.openConnectionsBuilder()">Conexões (Builder)</button>
|
|
131
|
-
<button (click)="page.openConnectionsEditor()">Editor Visual (Dialog)</button>
|
|
132
125
|
```
|
|
133
126
|
|
|
134
|
-
`page`
|
|
127
|
+
`page` e um `WidgetPageDefinition` (do `@praxisui/core`) contendo `widgets` e opcionalmente `composition.links`. O envelope `composition` e o caminho `composition.links` formam a superficie canonica persistida para wiring da pagina, com `condition` em Json Logic e `policy` para comportamento operacional.
|
|
135
128
|
|
|
136
129
|
## Widget Shell (Dashboard Cards)
|
|
137
130
|
|
|
138
|
-
Cada widget pode declarar um `shell` para renderizar um card padronizado com
|
|
139
|
-
ações de contexto e controles de janela (expandir/recolher). Exemplo:
|
|
131
|
+
Cada widget pode declarar um `shell` para renderizar um card padronizado com cabecalho rico, acoes de contexto e controles de janela (expandir/recolher).
|
|
140
132
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
{
|
|
145
|
-
"key": "dados-cadastrais",
|
|
146
|
-
"definition": { "id": "praxis-list", "inputs": { "listId": "dados", "config": {} } },
|
|
147
|
-
"layout": { "col": 1, "row": 1, "colSpan": 6, "rowSpan": 4 },
|
|
148
|
-
"shell": {
|
|
149
|
-
"kind": "dashboard-card",
|
|
150
|
-
"icon": "badge",
|
|
151
|
-
"title": "Dados Cadastrais",
|
|
152
|
-
"subtitle": "Servidor: Jéssica Techne",
|
|
153
|
-
"actions": [
|
|
154
|
-
{ "id": "editar", "label": "Editar", "icon": "edit", "variant": "outlined", "emit": "editar" },
|
|
155
|
-
{ "id": "imprimir", "label": "Imprimir", "icon": "print", "variant": "text", "emit": "imprimir" }
|
|
156
|
-
],
|
|
157
|
-
"windowActions": { "collapsible": true, "expandable": true },
|
|
158
|
-
"appearance": {
|
|
159
|
-
"card": { "background": "#0b1220", "borderColor": "rgba(255,255,255,0.12)", "borderRadius": "16px" },
|
|
160
|
-
"header": { "titleColor": "#e6edf3", "subtitleColor": "#9fb0c4", "iconColor": "#8ab4ff" },
|
|
161
|
-
"typography": { "titleSize": "14px", "titleWeight": "600", "subtitleSize": "12px" }
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
]
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Quando uma ação é clicada, o shell:
|
|
170
|
-
- dispara um evento para o page-builder (`emit`, ou `shell:<id>` por padrão) para uso em `connections`;
|
|
171
|
-
- tenta despachar a ação para o componente interno via método `handleShellAction(action)`.
|
|
133
|
+
Quando uma acao e clicada, o shell:
|
|
134
|
+
- dispara um evento para o page-builder (`emit`, ou `shell:<id>` por padrao) para uso em `composition.links`;
|
|
135
|
+
- tenta despachar a acao para o componente interno via metodo `handleShellAction(action)`.
|
|
172
136
|
|
|
173
137
|
### Presets visuais (global)
|
|
174
138
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
```json
|
|
178
|
-
{
|
|
179
|
-
"context": {
|
|
180
|
-
"ui": {
|
|
181
|
-
"shell": {
|
|
182
|
-
"preset": "dark-glass",
|
|
183
|
-
"presets": {
|
|
184
|
-
"dark-glass": {
|
|
185
|
-
"card": { "background": "#0b1220", "borderColor": "rgba(255,255,255,0.12)", "borderRadius": "16px" }
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
O widget pode sobrescrever:
|
|
195
|
-
|
|
196
|
-
```json
|
|
197
|
-
{
|
|
198
|
-
"shell": {
|
|
199
|
-
"preset": "light-neutral",
|
|
200
|
-
"appearance": { "header": { "titleColor": "#1f2937" } }
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
```
|
|
139
|
+
Voce pode definir presets globais na pagina e escolher um preset padrao para todos os cards por JSON no contexto da pagina.
|
|
204
140
|
|
|
205
141
|
## Editor do Card (Shell)
|
|
206
142
|
|
|
207
|
-
O
|
|
208
|
-
titulo, subtitulo, icone e acoes do cabecalho. O editor grava os metadados no campo
|
|
209
|
-
`shell` do widget.
|
|
143
|
+
O botao "Configurar card" na toolbar do tile abre o editor de shell, permitindo editar titulo, subtitulo, icone e acoes do cabecalho. O editor grava os metadados no campo `shell` do widget.
|
|
210
144
|
|
|
211
145
|
Para abrir via API (Settings Panel):
|
|
212
146
|
|
|
@@ -223,53 +157,26 @@ this.settingsPanel.open({
|
|
|
223
157
|
});
|
|
224
158
|
```
|
|
225
159
|
|
|
226
|
-
## Abrindo editores via Settings Panel
|
|
227
|
-
|
|
228
|
-
Para abrir o Builder/Graph em um painel lateral, injete o `SettingsPanelService` e forneça o conteúdo. O `ConnectionBuilderComponent` é exportado por este pacote.
|
|
229
|
-
|
|
230
|
-
```ts
|
|
231
|
-
import { Component } from '@angular/core';
|
|
232
|
-
import { SettingsPanelService } from '@praxisui/settings-panel';
|
|
233
|
-
import { ConnectionBuilderComponent } from '@praxisui/page-builder';
|
|
234
|
-
import type { WidgetInstance, WidgetPageDefinition } from '@praxisui/core';
|
|
235
|
-
|
|
236
|
-
@Component({ selector: 'app-page-tools', standalone: true })
|
|
237
|
-
export class PageToolsComponent {
|
|
238
|
-
constructor(private settings: SettingsPanelService) {}
|
|
239
|
-
|
|
240
|
-
openBuilder(page: WidgetPageDefinition, widgets: WidgetInstance[]) {
|
|
241
|
-
this.settings.open({
|
|
242
|
-
id: 'grid-connections:builder',
|
|
243
|
-
title: 'Conexões (Builder)',
|
|
244
|
-
content: { component: ConnectionBuilderComponent, inputs: { page, widgets } },
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
Para abrir o Graph visual como painel, utilize os métodos do componente da página (`page.openConnectionsGraph()`), que encapsulam o componente interno do gráfico.
|
|
251
|
-
|
|
252
|
-
## Diálogo fullscreen (Graph/Editor Visual)
|
|
253
|
-
|
|
254
|
-
O fluxo visual completo pode ser aberto em diálogo Material (fullscreen). Caso esteja usando o componente de página, utilize `page.openConnectionsEditor()` para abrir o editor visual; ele lida com a passagem de `page` e `widgets` e propaga o resultado em `pageChange` quando o usuário salva.
|
|
255
|
-
|
|
256
160
|
## Dicas
|
|
257
|
-
|
|
258
|
-
-
|
|
259
|
-
-
|
|
161
|
+
|
|
162
|
+
- Trate `composition.links` como parte do contrato canonico salvo no JSON da pagina.
|
|
163
|
+
- Use `composition.links[].condition` para guardas semanticas em Json Logic e `composition.links[].policy` para debounce/distinct/missing-value.
|
|
164
|
+
- Quando precisar revisar ligacoes, prefira inspecao textual/versionada do contrato e do runtime, nao um editor visual legado.
|
|
260
165
|
|
|
261
166
|
## API (resumo)
|
|
262
167
|
|
|
263
168
|
Exports deste pacote:
|
|
264
|
-
- `ConnectionBuilderComponent`
|
|
265
169
|
- `ComponentPaletteDialogComponent`
|
|
266
170
|
- `FloatingToolbarComponent`
|
|
267
171
|
- `TileToolbarComponent`
|
|
172
|
+
- `WidgetShellEditorComponent`
|
|
173
|
+
- `DynamicPageConfigEditorComponent`
|
|
174
|
+
- `DynamicPageBuilderComponent`
|
|
268
175
|
|
|
269
|
-
|
|
270
|
-
- `SettingsPanelService.open({ id, title, content: { component, inputs } })`
|
|
271
|
-
- Métodos do componente da página: `openConnectionsGraph()`, `openConnectionsBuilder()`, `openConnectionsEditor()`
|
|
176
|
+
Integracoes comuns:
|
|
177
|
+
- `SettingsPanelService.open({ id, title, content: { component, inputs } })` para page settings e shell editors
|
|
272
178
|
|
|
273
179
|
## Links
|
|
180
|
+
|
|
274
181
|
- Repo: https://github.com/codexrodrigues/praxis
|
|
275
182
|
- Issues: https://github.com/codexrodrigues/praxis/issues
|