@praxisui/core 8.0.0-beta.0 → 8.0.0-beta.11

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
@@ -59,6 +59,15 @@ Exemplo completo (app de referência)
59
59
 
60
60
  ### 1) `PraxisIconDirective`
61
61
 
62
+ Hosts devem carregar Material Symbols para ícones `mso:*` e Material Icons classic quando usarem `mi:*`, componentes legados baseados em ligature classic, ou `mat-icon.material-icons`. Sem Material Icons classic, a ligature pode aparecer como texto visível, por exemplo `clear` dentro de um select.
63
+
64
+ Para alinhar tokens e superfícies Angular Material/Praxis, importe o asset canônico do pacote depois do tema Angular Material e do CSS do CDK Overlay:
65
+
66
+ ```scss
67
+ @import "@angular/cdk/overlay-prebuilt.css";
68
+ @import "@praxisui/core/theme-bridge.css";
69
+ ```
70
+
62
71
  ```ts
63
72
  import { Component } from '@angular/core';
64
73
  import { MatIconModule } from '@angular/material/icon';
@@ -111,6 +120,42 @@ export class GridDemoComponent {
111
120
 
112
121
  Observação: os IDs de widgets usados na página devem estar registrados via `ComponentMetadataRegistry` para que o carregador dinâmico resolva os componentes.
113
122
 
123
+ #### Composition links e nested component ports
124
+
125
+ O wiring persistido de páginas dinâmicas deve usar `page.composition.links`.
126
+ `page.connections` é formato legado/residual e não deve ser usado para novas
127
+ páginas ou exemplos.
128
+
129
+ Para conectar componentes internos de containers como `praxis-tabs` e
130
+ `praxis-expansion`, use endpoints `component-port` com `ref.nestedPath`:
131
+
132
+ ```json
133
+ {
134
+ "kind": "component-port",
135
+ "ref": {
136
+ "widget": "tabs-widget",
137
+ "nestedPath": [
138
+ { "kind": "tab", "id": "analytics", "index": 0 },
139
+ { "kind": "widget", "key": "sales-chart", "componentType": "praxis-chart" }
140
+ ],
141
+ "port": "pointClick",
142
+ "direction": "output",
143
+ "componentType": "praxis-chart"
144
+ }
145
+ }
146
+ ```
147
+
148
+ Regras de plataforma:
149
+
150
+ - `ref.widget` é sempre o owner top-level presente em `page.widgets`;
151
+ - `nestedPath` é relativo ao owner e deve terminar com segmento
152
+ `kind: "widget"` contendo `key` estável;
153
+ - `ref.port` representa a porta real do componente filho;
154
+ - `widgetEvent` em containers compostos é bridge avançada/legado, não caminho
155
+ principal de authoring;
156
+ - `bindingPath` e dot-path profundo não são endereço canônico para nested
157
+ component ports.
158
+
114
159
  ### Component config editors
115
160
 
116
161
  `ComponentDocMeta.configEditor` é a superfície pública canônica para um
@@ -199,6 +244,21 @@ Regra de leitura:
199
244
  - se o problema for URL, submit, fetch ou schema, pense primeiro em `resourcePath`
200
245
  - se o problema for discovery semantico, contexto de surface/action ou identidade estavel, pense primeiro em `resourceKey`
201
246
 
247
+ ## `x-ui.optionSource` e Entity Lookup
248
+
249
+ `@praxisui/core` preserva `x-ui.optionSource` como contrato canônico de opções remotas e lookups de entidade publicados por `/schemas/filtered`.
250
+
251
+ Para `RESOURCE_ENTITY`, o `SchemaNormalizerService` mantém a semântica enriquecida usada pelos consumidores:
252
+
253
+ - identidade: `entityKey`, `valuePropertyPath`, `labelPropertyPath`, `codePropertyPath`
254
+ - exibição: `descriptionPropertyPaths`, `statusPropertyPath`, `disabledReasonPropertyPath`
255
+ - busca e cascata: `searchPropertyPaths`, `dependsOn`, `dependencyFilterMap`
256
+ - seleção: `selectionPolicy.allowedStatuses`, `blockedStatuses`, `allowRetainInvalidExistingValue`
257
+ - operação: `capabilities.byIds`, `navigateToDetail`, `create`, `auditSnapshot`
258
+ - navegação: `detail.hrefTemplate`, `routeTemplate`, `openDetailMode`
259
+
260
+ O mapper de `FieldDefinition` para `FieldMetadata` deriva apenas a ponte runtime necessária (`dependencyFields` e `dependencyFilterMap`) a partir de `optionSource.dependsOn`. Ele não inventa política de reset, reload ou persistência; essas decisões continuam explícitas no metadata do campo.
261
+
202
262
  ## `x-ui.analytics` no runtime
203
263
 
204
264
  O `@praxisui/core` trata `x-ui.analytics` como a projeção semantica analitica canonica vinda do backend.
@@ -265,7 +325,7 @@ definition: {
265
325
  ```ts
266
326
  shell: {
267
327
  actions: [
268
- { id: 'back', icon: 'arrow_back', command: 'global:navigation.back' }
328
+ { id: 'back', icon: 'arrow_back', globalAction: { actionId: 'navigation.back' } }
269
329
  ]
270
330
  }
271
331
  ```