@praxisui/dynamic-fields 9.0.5-rc.2 → 9.0.5-rc.21
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 +3 -3
- package/ai/component-registry.json +2 -2
- package/docs/dynamic-fields-field-selection-guide.md +29 -6
- package/docs/dynamic-fields-inline-components-guide.md +3 -3
- package/fesm2022/praxisui-dynamic-fields.mjs +191 -68
- package/package.json +3 -3
- package/src/lib/components/inline-async-select/pdx-inline-async-select.json-api.md +1 -1
- package/src/lib/components/inline-searchable-select/pdx-inline-searchable-select.json-api.md +1 -1
- package/src/lib/components/material-searchable-select/pdx-material-searchable-select.json-api.md +1 -1
- package/types/praxisui-dynamic-fields.d.ts +14 -1
package/README.md
CHANGED
|
@@ -178,11 +178,11 @@ Inline filter support has its own runtime and discovery contract. Use the offici
|
|
|
178
178
|
|
|
179
179
|
## Collection Selection Overlay
|
|
180
180
|
|
|
181
|
-
Select controls that need search, pagination or panel actions use the public `PdxCollectionOverlayComponent` and `PdxCollectionSearchComponent` primitives. The trigger remains a single accessible combobox control
|
|
181
|
+
Select controls that need search, pagination or panel actions use the public `PdxCollectionOverlayComponent` and `PdxCollectionSearchComponent` primitives. Direct consumers may provide `panelId` when they need a stable dialog id; otherwise the primitive generates a unique id. The combobox `aria-controls` references the dialog ID while the options region keeps its own listbox ID. The trigger remains a single accessible combobox control with `aria-haspopup="dialog"`; the connected non-modal dialog contains search, listbox options and footer actions as sibling regions. No input, button, status row or footer action may be projected as option content inside `mat-select`.
|
|
182
182
|
|
|
183
|
-
The overlay is attached only while open, prefers the space below the trigger, falls back above it, constrains itself to the viewport and owns scrolling in the options region.
|
|
183
|
+
The overlay is attached only while open, prefers the space below the trigger, falls back above it, constrains itself to the viewport and owns scrolling in the options region. While open, `Tab` and `Shift+Tab` cycle through the dialog controls without dismissing the collection or moving focus behind it. Selection, `Escape` and outside click are explicit close paths and restore focus to the trigger; detach does not steal focus from the next surface. Footer actions exist only while the overlay is attached and never participate in option keyboard navigation.
|
|
184
184
|
|
|
185
|
-
Collection search styling is shared with `@praxisui/table` through the Core `--praxis-collection-search-*` contract. In particular, `--praxis-collection-search-radius` supports square (`0`), intermediate (for example `8px`) and pill (`999px`) themes without component-specific aliases.
|
|
185
|
+
Collection search styling is shared with `@praxisui/table` through the Core `--praxis-collection-search-*` contract. In particular, `--praxis-collection-search-radius` supports square (`0`), intermediate (for example `8px`) and pill (`999px`) themes without component-specific aliases. The popup surface resolves from `--pdx-inline-panel-surface`, then the governed Praxis/Material surface chain, with an opaque final fallback; this prevents host token gaps from making options transparent. Narrow hosts may govern the default `22rem` popup limit through `--praxis-collection-overlay-narrow-max-height`.
|
|
186
186
|
|
|
187
187
|
## AI Authoring
|
|
188
188
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-14T20:54:13.811Z",
|
|
4
4
|
"packageName": "@praxisui/dynamic-fields",
|
|
5
|
-
"packageVersion": "9.0.5-rc.
|
|
5
|
+
"packageVersion": "9.0.5-rc.21",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 76,
|
|
@@ -136,6 +136,25 @@ combobox unico. Nao insira input, botao, toolbar ou footer interativo dentro de
|
|
|
136
136
|
`mat-select`; para resultados remotos, a carga incremental do combobox ocorre
|
|
137
137
|
automaticamente ao aproximar-se do fim da lista.
|
|
138
138
|
|
|
139
|
+
### Busca governada por estratégia
|
|
140
|
+
|
|
141
|
+
Quando `optionSource.filtering.searchStrategies` estiver presente, o runtime
|
|
142
|
+
materializa a intenção declarada pelo backend em vez de inferi-la pelo texto:
|
|
143
|
+
|
|
144
|
+
- uma única estratégia é selecionada automaticamente;
|
|
145
|
+
- duas ou mais estratégias exigem escolha explícita e acessível antes do HTTP;
|
|
146
|
+
- `minSearchChars` é aplicado à estratégia selecionada;
|
|
147
|
+
- `inputFormat: digits` aceita somente dígitos ASCII;
|
|
148
|
+
- `normalized-document` aceita dígitos, espaços, pontos e hífens, remove os
|
|
149
|
+
separadores visuais e aplica o mínimo ao valor normalizado;
|
|
150
|
+
- a requisição envia a chave em `searchStrategy`, sem expor bindings, SQL,
|
|
151
|
+
documentos brutos ou detalhes privados do provider.
|
|
152
|
+
|
|
153
|
+
Sem estratégias publicadas, permanece o comportamento compatível de busca do
|
|
154
|
+
option source. Respostas `422` ainda recebem mensagem segura e localizada, mas
|
|
155
|
+
ambiguidade, formato inválido e mínimo insuficiente são bloqueados antes da
|
|
156
|
+
rede.
|
|
157
|
+
|
|
139
158
|
### Promocao oficial de exemplos `entityLookup`
|
|
140
159
|
|
|
141
160
|
Um recurso so deve ser promovido como exemplo oficial de `entityLookup` quando
|
|
@@ -274,6 +293,9 @@ Use `rich-content` quando:
|
|
|
274
293
|
`MatSelect` implementa um combobox cujo painel e um listbox gerenciado pelo CDK.
|
|
275
294
|
Por isso, o conteudo projetado em `mat-select` deve se limitar a opcoes,
|
|
276
295
|
optgroups e elementos estritamente apresentacionais suportados pelo controle.
|
|
296
|
+
Quando a colecao exige busca, status e acoes, use o overlay compartilhado: o
|
|
297
|
+
trigger declara `aria-haspopup="dialog"`, o dialog conectado governa o foco e a
|
|
298
|
+
regiao de resultados preserva `role="listbox"`.
|
|
277
299
|
|
|
278
300
|
Regras obrigatorias:
|
|
279
301
|
|
|
@@ -285,12 +307,13 @@ Regras obrigatorias:
|
|
|
285
307
|
apresentacional; acoes interativas ficam fora do trigger;
|
|
286
308
|
- nao use `ElementRef`, `DOCUMENT`, `append`, `insertBefore` ou placeholders
|
|
287
309
|
para transportar uma view Angular entre a arvore declarada e o overlay;
|
|
288
|
-
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
310
|
+
- no dialog de colecao, `Tab` e `Shift+Tab` permanecem contidos entre busca,
|
|
311
|
+
opcoes e acoes; `Escape`, selecao e clique externo sao saidas explicitas e
|
|
312
|
+
restauram o foco no trigger;
|
|
313
|
+
- um controle declarado como irmao fora do overlay pertence ao fluxo da pagina;
|
|
314
|
+
busca e paginacao remota ricas devem ser regioes declarativas do dialog de
|
|
315
|
+
colecao compartilhado ou, em jornadas de lookup completas, do dialog/drawer
|
|
316
|
+
governado de `entityLookup`.
|
|
294
317
|
- em `entityLookup`, `searchable=true` materializa uma acao acessivel no sufixo
|
|
295
318
|
do campo que abre o dialogo governado. `dialog` customiza essa superficie e
|
|
296
319
|
`dialog.enabled=false` e o opt-out explicito; a acao nunca vira uma
|
|
@@ -197,8 +197,8 @@ Compatibilidade de mapeamento no `praxis-filter`:
|
|
|
197
197
|
|
|
198
198
|
Observação técnica importante:
|
|
199
199
|
|
|
200
|
-
-
|
|
201
|
-
-
|
|
200
|
+
- `inlineSelect` e `inlineSearchableSelect` usam um botão-combobox estável; o pill vazio e preenchido pertence ao mesmo trigger, sem depender do placeholder interno de `mat-select`.
|
|
201
|
+
- Busca, lista e rodapé são regiões irmãs no dialog de coleção conectado. A superfície, borda, raio, elevação, scrolling e camada pertencem ao overlay compartilhado, não ao `overlay-pane` de cada consumidor.
|
|
202
202
|
|
|
203
203
|
Regra de curadoria enterprise:
|
|
204
204
|
|
|
@@ -410,7 +410,7 @@ O vocabulário público de `inlineOverlay.applyMode` é `auto | explicit`. Compo
|
|
|
410
410
|
`Limpar` não é sinônimo de `Cancelar`: no trigger/pill, limpa diretamente o valor aplicado; dentro de um painel `explicit`, deve limpar o rascunho e só virar valor final quando o usuário acionar `Aplicar`, salvo contrato específico documentado pelo componente.
|
|
411
411
|
|
|
412
412
|
`inlineSelect` usa o mesmo envelope de min/max por densidade/viewport (pill vazio e preenchido), mantendo largura por conteúdo para o texto selecionado.
|
|
413
|
-
`inlineMultiSelect` também usa o envelope adaptativo e, com `inlineOverlay.applyMode: "explicit"`, mantém seleção, remoção e limpeza do painel em rascunho até `Aplicar`; `Cancelar`, `Esc` ou fechamento externo restauram a seleção confirmada anterior. Labels, aria, `appearance` e `colorRole` das ações do rodapé devem vir de `inlineOverlay.actions.*`. O `inlineSelect` single
|
|
413
|
+
`inlineMultiSelect` também usa o envelope adaptativo e, com `inlineOverlay.applyMode: "explicit"`, mantém seleção, remoção e limpeza do painel em rascunho até `Aplicar`; `Cancelar`, `Esc` ou fechamento externo restauram a seleção confirmada anterior. Labels, aria, `appearance` e `colorRole` das ações do rodapé devem vir de `inlineOverlay.actions.*`. O `inlineSelect` single comita quando uma opção do listbox é ativada e fecha pelo contrato explícito do overlay compartilhado; uma futura confirmação explícita deve reutilizar o mesmo estado de rascunho governado, sem reintroduzir semântica de `mat-select`.
|
|
414
414
|
`inlineAsyncSelect` segue o mesmo envelope adaptativo de largura e mantém label como placeholder visual quando vazio.
|
|
415
415
|
`inlineAutocomplete` também usa auto-width por conteúdo (valor/label), mantendo foco no shape pill e clear alinhado.
|
|
416
416
|
`inlineNumber` segue o mesmo envelope adaptativo de largura, usando valor numérico atual ou label como fallback quando vazio.
|