@praxisui/dynamic-fields 9.0.0-beta.90 → 9.0.0-rc.2
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/ai/component-registry.json +7 -5
- package/docs/dynamic-fields-field-selection-guide.md +66 -17
- package/fesm2022/praxisui-dynamic-fields.mjs +2590 -1874
- package/package.json +3 -3
- package/src/lib/components/material-async-select/pdx-material-async-select.json-api.md +22 -9
- package/types/praxisui-dynamic-fields.d.ts +37 -6
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-24T21:24:57.799Z",
|
|
4
4
|
"packageName": "@praxisui/dynamic-fields",
|
|
5
|
-
"packageVersion": "9.0.0-
|
|
5
|
+
"packageVersion": "9.0.0-rc.2",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 76,
|
|
@@ -122379,7 +122379,7 @@
|
|
|
122379
122379
|
},
|
|
122380
122380
|
"pdx-material-async-select": {
|
|
122381
122381
|
"id": "pdx-material-async-select",
|
|
122382
|
-
"description": "
|
|
122382
|
+
"description": "Combobox de selecao com busca e carregamento assincrono de opcoes.",
|
|
122383
122383
|
"inputs": [
|
|
122384
122384
|
{
|
|
122385
122385
|
"name": "metadata",
|
|
@@ -122425,6 +122425,8 @@
|
|
|
122425
122425
|
"widget",
|
|
122426
122426
|
"field",
|
|
122427
122427
|
"select",
|
|
122428
|
+
"combobox",
|
|
122429
|
+
"search",
|
|
122428
122430
|
"async",
|
|
122429
122431
|
"material"
|
|
122430
122432
|
],
|
|
@@ -125752,9 +125754,9 @@
|
|
|
125752
125754
|
{
|
|
125753
125755
|
"chunkIndex": 0,
|
|
125754
125756
|
"chunkKind": "summary",
|
|
125755
|
-
"content": "Component ID: pdx-material-async-select\nSelector: pdx-material-async-select\nFriendly Name: Async Select (Material)\nDescription:
|
|
125757
|
+
"content": "Component ID: pdx-material-async-select\nSelector: pdx-material-async-select\nFriendly Name: Async Select (Material)\nDescription: Combobox de selecao com busca e carregamento assincrono de opcoes.\nLib/Package: @praxisui/dynamic-fields\nTags: widget, field, select, combobox, search, async, material\nInputs:\n - metadata (MaterialSelectMetadata)\n - readonlyMode (boolean)\n - disabledMode (boolean)\n - visible (boolean)\n - presentationMode (boolean)\n",
|
|
125756
125758
|
"sourcePointer": "projects/praxis-dynamic-fields/src/lib/components/material-async-select/material-async-select.metadata.ts",
|
|
125757
|
-
"contentHash": "
|
|
125759
|
+
"contentHash": "7771e7b327e31fabf9c121de968d212af0238a36009945ef750c9ae0cc06ca5a",
|
|
125758
125760
|
"sourceKind": "component_definition",
|
|
125759
125761
|
"sourceId": "pdx-material-async-select",
|
|
125760
125762
|
"corpusVersion": "1.0.0"
|
|
@@ -87,11 +87,6 @@ campos, nao de CSS local. O Angular Material documenta que, em campos
|
|
|
87
87
|
`fill`/`outline`, prefixos/sufixos nao se alinham bem com labels em repouso; por
|
|
88
88
|
isso a recomendacao oficial e manter o label sempre flutuante nesses cenarios.
|
|
89
89
|
|
|
90
|
-
O runtime usa `subscriptSizing: 'dynamic'` como padrao seguro: hints e erros
|
|
91
|
-
multiline participam do fluxo vertical e nao podem invadir o proximo campo.
|
|
92
|
-
Use `'fixed'` somente como opt-in explicito quando o conteudo do subscript for
|
|
93
|
-
comprovadamente limitado a uma linha.
|
|
94
|
-
|
|
95
90
|
## 1. Texto livre vs selecao
|
|
96
91
|
|
|
97
92
|
### Use `input` / `textarea` quando
|
|
@@ -120,21 +115,26 @@ Se o schema usa `input` para algo que depois exige validacao pesada, busca seman
|
|
|
120
115
|
| entidade de negocio remota com status, permissao, reidratacao ou dependencias | `entityLookup` | preserva identidade de entidade e usa contrato `RESOURCE_ENTITY` em vez de tratar entidade como opcao simples |
|
|
121
116
|
| busca incremental com semantica de sugestao | `autoComplete` | boa UX para descoberta |
|
|
122
117
|
|
|
123
|
-
###
|
|
118
|
+
### Invariante de UX para selecao pesquisavel
|
|
124
119
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
estar disponível. Caso o valor persistido já tenha chegado, o
|
|
128
|
-
`inlineEntityLookup` o preserva como pendente: não o apresenta como seleção
|
|
129
|
-
ativa nem emite evento de seleção até encontrar a option correspondente.
|
|
120
|
+
Uma selecao simples pesquisavel deve ocupar um unico campo visual. O runtime
|
|
121
|
+
pode manter dois estados internos, mas eles nao podem ser confundidos:
|
|
130
122
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
123
|
+
- o controle de exibicao recebe o texto digitado e apresenta o label;
|
|
124
|
+
- o `FormControl` de negocio preserva somente o valor canonico da opcao;
|
|
125
|
+
- digitar, apagar ou abandonar uma pesquisa nao altera o valor persistido;
|
|
126
|
+
- somente selecionar uma opcao ou acionar o comando explicito de limpar muda o
|
|
127
|
+
valor de negocio;
|
|
128
|
+
- ao perder foco sem selecao, o campo restaura o label da opcao vigente;
|
|
129
|
+
- busca, lista de resultados, loading, vazio e paginacao formam um unico
|
|
130
|
+
combobox acessivel, sem um segundo input empilhado sobre um select.
|
|
131
|
+
- limpar, indicador de abertura e ajuda permanecem agrupados em uma unica faixa
|
|
132
|
+
de sufixo, sem aumentar a altura do campo em layouts estreitos.
|
|
134
133
|
|
|
135
|
-
Em
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
Em `async-select`, `searchable=true` e `multiple=false` materializam esse
|
|
135
|
+
combobox unico. Nao insira input, botao, toolbar ou footer interativo dentro de
|
|
136
|
+
`mat-select`; para resultados remotos, a carga incremental do combobox ocorre
|
|
137
|
+
automaticamente ao aproximar-se do fim da lista.
|
|
138
138
|
|
|
139
139
|
### Promocao oficial de exemplos `entityLookup`
|
|
140
140
|
|
|
@@ -267,6 +267,55 @@ Use `rich-content` quando:
|
|
|
267
267
|
- para colecoes repetiveis, use `array` com `array.itemSchema.fields` em vez de criar campos numerados como `item1`, `item2`, `item3`;
|
|
268
268
|
- para custom fields, alinhe runtime registry + metadata registry + hot update desde o inicio.
|
|
269
269
|
|
|
270
|
+
### Composicao segura de selects
|
|
271
|
+
|
|
272
|
+
`MatSelect` implementa um combobox cujo painel e um listbox gerenciado pelo CDK.
|
|
273
|
+
Por isso, o conteudo projetado em `mat-select` deve se limitar a opcoes,
|
|
274
|
+
optgroups e elementos estritamente apresentacionais suportados pelo controle.
|
|
275
|
+
|
|
276
|
+
Regras obrigatorias:
|
|
277
|
+
|
|
278
|
+
- toolbar, footer, paginacao, limpar selecao e demais botoes ficam fora de
|
|
279
|
+
`mat-select`, como irmaos declarativos no template;
|
|
280
|
+
- `SelectPanelActionsComponent` e apresentacional: nao injeta `MatSelect`, nao
|
|
281
|
+
assina `openedChange`, nao move o proprio host e nao manipula o CDK overlay;
|
|
282
|
+
- `mat-select-trigger` exibe somente valor, label, status ou icone
|
|
283
|
+
apresentacional; acoes interativas ficam fora do trigger;
|
|
284
|
+
- nao use `ElementRef`, `DOCUMENT`, `append`, `insertBefore` ou placeholders
|
|
285
|
+
para transportar uma view Angular entre a arvore declarada e o overlay;
|
|
286
|
+
- preserve o fluxo nativo de teclado. Um helper visual nao deve interceptar
|
|
287
|
+
`Tab`, `Shift+Tab` ou `Escape` para simular um composite control.
|
|
288
|
+
- um controle declarado como irmao pertence ao fluxo da pagina; ele nao deve
|
|
289
|
+
ser apresentado como footer do overlay. Para busca/paginacao remota rica,
|
|
290
|
+
prefira o dialog/drawer de `entityLookup`, um autocomplete/composite overlay
|
|
291
|
+
proprio ou carregamento automatico nao interativo.
|
|
292
|
+
|
|
293
|
+
O gate `node tools/check-mat-select-content-model.mjs` falha quando:
|
|
294
|
+
|
|
295
|
+
- `pdx-select-panel-actions` volta a aparecer dentro de `mat-select`;
|
|
296
|
+
- marcadores conhecidos de relocacao de DOM reaparecem;
|
|
297
|
+
- um novo componente introduz `input` dentro do painel ou `button` dentro do
|
|
298
|
+
trigger sem que a arquitetura seja corrigida.
|
|
299
|
+
|
|
300
|
+
Os warnings atuais identificam divida legada, nao autorizacao para copiar o
|
|
301
|
+
padrao. A baseline so pode diminuir.
|
|
302
|
+
|
|
303
|
+
### Contextos globais corporativos
|
|
304
|
+
|
|
305
|
+
Seletores globais de empresa, tenant, unidade ou ambiente sao controles de
|
|
306
|
+
seguranca e contexto, nao filtros opcionais:
|
|
307
|
+
|
|
308
|
+
- o valor precisa pertencer a lista autorizada carregada para a sessao;
|
|
309
|
+
- valor nulo, desconhecido ou injetado programaticamente deve ser rejeitado e
|
|
310
|
+
restaurado sem emitir uma nova troca;
|
|
311
|
+
- o contexto anterior permanece autoritativo ate o backend confirmar a mudanca;
|
|
312
|
+
- falha de troca deve manter a tela operavel e apresentar feedback recuperavel;
|
|
313
|
+
- metadados locais podem controlar apresentacao, mas nao substituir
|
|
314
|
+
autorizacao, escopo ou identidade publicados pelo backend.
|
|
315
|
+
- listas globais pequenas devem ser carregadas integralmente e usar typeahead
|
|
316
|
+
nativo; nao habilite busca remota/paginacao apenas para imitar um seletor
|
|
317
|
+
simples de empresa ou tenant.
|
|
318
|
+
|
|
270
319
|
## Nota de governanca para hosts
|
|
271
320
|
|
|
272
321
|
Se um host precisar montar vitrine, filtros ou snippets jogaveis, derive isso do catalogo exportado da lib em vez de manter listas autorais locais.
|