@praxisui/core 8.0.0-beta.1 → 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
@@ -120,6 +120,42 @@ export class GridDemoComponent {
120
120
 
121
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.
122
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
+
123
159
  ### Component config editors
124
160
 
125
161
  `ComponentDocMeta.configEditor` é a superfície pública canônica para um
@@ -208,6 +244,21 @@ Regra de leitura:
208
244
  - se o problema for URL, submit, fetch ou schema, pense primeiro em `resourcePath`
209
245
  - se o problema for discovery semantico, contexto de surface/action ou identidade estavel, pense primeiro em `resourceKey`
210
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
+
211
262
  ## `x-ui.analytics` no runtime
212
263
 
213
264
  O `@praxisui/core` trata `x-ui.analytics` como a projeção semantica analitica canonica vinda do backend.
@@ -274,7 +325,7 @@ definition: {
274
325
  ```ts
275
326
  shell: {
276
327
  actions: [
277
- { id: 'back', icon: 'arrow_back', command: 'global:navigation.back' }
328
+ { id: 'back', icon: 'arrow_back', globalAction: { actionId: 'navigation.back' } }
278
329
  ]
279
330
  }
280
331
  ```