@praxisui/dynamic-fields 9.0.4-rc.2 → 9.0.4-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 +1 -1
- package/ai/component-registry.json +2 -2
- package/docs/dynamic-fields-inline-filter-catalog.md +3 -1
- package/fesm2022/praxisui-dynamic-fields.mjs +394 -121
- package/package.json +3 -3
- package/src/lib/components/inline-entity-lookup/pdx-inline-entity-lookup.json-api.md +20 -3
- package/types/praxisui-dynamic-fields.d.ts +28 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-fields",
|
|
3
|
-
"version": "9.0.4-rc.
|
|
3
|
+
"version": "9.0.4-rc.21",
|
|
4
4
|
"description": "Angular Material-based dynamic form fields for Praxis UI with lazy loading and metadata-driven rendering.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"@angular/platform-browser": "^21.0.0",
|
|
12
12
|
"@angular/router": "^21.0.0",
|
|
13
13
|
"rxjs": "^7.8.0",
|
|
14
|
-
"@praxisui/core": "^9.0.4-rc.
|
|
15
|
-
"@praxisui/cron-builder": "^9.0.4-rc.
|
|
14
|
+
"@praxisui/core": "^9.0.4-rc.21",
|
|
15
|
+
"@praxisui/cron-builder": "^9.0.4-rc.21"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"libphonenumber-js": "^1.12.41",
|
|
@@ -21,8 +21,8 @@ source_of_truth:
|
|
|
21
21
|
- "projects/praxis-dynamic-fields/src/lib/components/inline-entity-lookup/inline-entity-lookup.component.ts"
|
|
22
22
|
- "projects/praxis-dynamic-fields/src/lib/components/material-async-select/material-async-select.component.ts"
|
|
23
23
|
- "projects/praxis-core/src/lib/models/material-field-metadata.interface.ts"
|
|
24
|
-
source_of_truth_last_verified: "2026-
|
|
25
|
-
last_updated: "2026-
|
|
24
|
+
source_of_truth_last_verified: "2026-08-03"
|
|
25
|
+
last_updated: "2026-08-03"
|
|
26
26
|
toc: true
|
|
27
27
|
sidebar: true
|
|
28
28
|
tags:
|
|
@@ -128,10 +128,19 @@ Este documento e a referencia canonica da API JSON de pdx-inline-entity-lookup.
|
|
|
128
128
|
| `metadata.optionSource.display.secondaryPropertyPaths` | string[] | false | n/a | Active | Campos de subtitulo usados para diferenciar entidades parecidas. |
|
|
129
129
|
| `metadata.optionSource.display.fields` | object[] | false | n/a | Active | Campos ricos semanticos exibidos na lista e no valor selecionado. Cada item aceita `key`, `propertyPath`, `label`, `icon`, `presentation`, `tone` e `format`. |
|
|
130
130
|
| `metadata.optionSource.display.badgePropertyPaths` | string[] | false | n/a | Active | Campos publicados como badges/chips quando o backend tambem os materializa no payload de option. |
|
|
131
|
+
| `metadata.optionSource.display.statusLabelMap` | Record<string, string> | false | n/a | Active | Traduz somente o rótulo visual do status; o código canônico continua governando seleção, filtros e tons. |
|
|
131
132
|
| `metadata.searchable` | boolean | false | `true` para fontes nao categoricas | Active | Materializa a acao acessivel de busca no sufixo e abre o dialogo governado sem inserir controles interativos no listbox do `MatSelect`. |
|
|
132
133
|
| `metadata.dialog` | object | false | configuracao derivada do campo | Active | Customiza titulo, tamanho, preview, colunas e acoes da busca governada. |
|
|
133
134
|
| `metadata.dialog.enabled` | boolean | false | herda `metadata.searchable` | Active | `false` desativa explicitamente a superficie de busca; `true` a habilita mesmo quando `searchable=false`. |
|
|
134
135
|
|
|
136
|
+
The governed search dialog owns a visible close action, focuses the search
|
|
137
|
+
input when it opens, restores focus on close, constrains itself to the viewport,
|
|
138
|
+
and presents remote failures with a retry action. Canonical search strategy
|
|
139
|
+
`kind` values are translated into business-facing labels; internal strategy
|
|
140
|
+
keys are not exposed as the primary copy. Remote option sources may require an
|
|
141
|
+
authenticated host context. The component preserves that boundary and never
|
|
142
|
+
falls back to an unprotected resource endpoint when authorization fails.
|
|
143
|
+
|
|
135
144
|
### Path audit
|
|
136
145
|
|
|
137
146
|
Nenhum desvio de caminho foi identificado nesta revisao.
|
|
@@ -329,13 +338,14 @@ Use quando precisar:
|
|
|
329
338
|
| `metadata.optionSource.detail.surfaceId` | `string` | Ativo | Id da surface item-level preferida para o detalhe. Quando ausente, o runtime escolhe `detail`, `view` ou a primeira surface item-level de leitura disponivel. |
|
|
330
339
|
| `metadata.optionSource.detail.presentation` | `"drawer" | "modal"` | Ativo | Apresentacao desejada para `surface.open`. Default vem do preset/host de surface. |
|
|
331
340
|
| `metadata.optionSource.detail.preferredWidget` / `metadata.optionSource.detail.mode` | `string` | Documental | Hints semanticos para autoria/discovery. A materializacao final vem da surface descoberta e do `ResourceSurfaceOpenAdapterService`. |
|
|
332
|
-
| `metadata.optionSource.detail.hrefTemplate` / `metadata.optionSource.detail.routeTemplate` | `string` | Legado |
|
|
341
|
+
| `metadata.optionSource.detail.hrefTemplate` / `metadata.optionSource.detail.routeTemplate` | `string` | Legado | Navegacao usada somente quando o contrato nao declara surface governada. Uma falha ao materializar `detail.kind: "surface"` nunca degrada para rota/href, evitando 404, vazamento de endpoint ou mudanca inesperada de contexto. Quando somente os fallbacks legados existem, `routeTemplate` tem precedencia; `hrefTemplate` de `/api/**` e evidencia de recurso, nao destino de UX. |
|
|
333
342
|
| `metadata.optionSource.display.preset` | `"compact" | "rich" | "directory" | "status" | "reference" | "hierarchical"` | Ativo | Define a intencao visual canonica. `directory` e recomendado para pessoas/equipes; `reference` para codigo + descricao; `status` para entidades com estado operacional forte. |
|
|
334
343
|
| `metadata.optionSource.display.usage` | `"form" | "filter" | "table-cell" | "dashboard" | "wizard" | "review"` | Ativo | Indica onde a option-source costuma aparecer. O runtime pode ajustar densidade e acoes sem duplicar regra por host. |
|
|
335
344
|
| `metadata.optionSource.display.density` | `"compact" | "comfortable" | "rich"` | Ativo | Densidade preferencial. Campos de formulario usam `comfortable`; filtros inline e celulas de tabela tendem a `compact`; revisoes podem usar `rich`. |
|
|
336
345
|
| `metadata.optionSource.display.secondaryPropertyPaths` | `string[]` | Ativo | Campos usados como subtitulo quando o payload local ou remoto preserva essas propriedades. O runtime tambem aceita `descriptionPropertyPaths` como fallback. |
|
|
337
346
|
| `metadata.optionSource.display.fields` | `object[]` | Ativo | Subinformacoes ricas com `propertyPath`, `label`, `icon`, `presentation` (`text`, `chip`, `badge`, `date`, `currency`, `metric`), `tone` e `format`. Quando o endpoint materializa `OptionDTO.extra.richFields[]`, esses valores sao usados diretamente. |
|
|
338
347
|
| `metadata.optionSource.display.badgePropertyPaths` | `string[]` | Ativo | Campos usados para badges/chips quando materializados no payload da option-source. |
|
|
348
|
+
| `metadata.optionSource.display.statusLabelMap` | `Record<string, string>` | Ativo | Mapeia códigos canônicos para rótulos localizados sem alterar o valor usado por `selectionPolicy`. |
|
|
339
349
|
| `metadata.resourcePath` | `string` | Ativo | Caminho operacional herdado. Para Entity Lookup de plataforma, preferir `metadata.optionSource.resourcePath`. |
|
|
340
350
|
| `metadata.inlineAutoSize.*` | `object` | Ativo | Largura responsiva da pill lookup. |
|
|
341
351
|
| `metadata.selectedLayout` | `"compact" | "inline" | "card" | "token"` | Ativo | Para `controlType: "entityLookup"`, `compact` e o default preservam altura de campo de formulario. `card` renderiza valor selecionado como cartao rico quando a superficie pedir revisao/detalhe. `token` preserva leitura compacta herdada. |
|
|
@@ -348,6 +358,7 @@ Use quando precisar:
|
|
|
348
358
|
| `metadata.showDisabledReason` | `boolean` | Ativo | Controla exibicao do motivo de bloqueio quando `selectable=false`. Default: `true`. |
|
|
349
359
|
| `metadata.showResultCount` | `boolean` | Ativo | Controla contador de resultados no painel de busca. Quando `totalElements` remoto for maior que os itens carregados, mostra `carregados de total` para deixar claro que a lista visivel ainda e uma pagina parcial; em fontes locais/cursor, mostra o total carregado. Default: `true`. |
|
|
350
360
|
| `metadata.statusToneMap` | `Record<string, "success" | "warning" | "danger" | "neutral">` | Ativo | Permite mapear status de dominio para tom visual governado. |
|
|
361
|
+
| `metadata.statusLabelMap` | `Record<string, string>` | Ativo | Override local do mapa de rótulos; prefira `optionSource.display.statusLabelMap` como fonte governada. |
|
|
351
362
|
| `metadata.badgeKeys` | `string[]` | Ativo | Chaves adicionais lidas do valor de entidade para compor badges auxiliares. |
|
|
352
363
|
| `metadata.maxVisibleBadges` | `number` | Ativo | Limita quantidade de badges auxiliares exibidos. Default: `3`. |
|
|
353
364
|
| `metadata.actions.showDetail` | `boolean` | Ativo | Controla acao de detalhe quando houver surface canonica, `detailRoute` navegavel ou `detailHref` nao-API. `detailHref` de API nao abre nova aba para evitar link morto em hosts corporativos. Default: `true`. |
|
|
@@ -371,6 +382,8 @@ Resumo de composicao deste componente:
|
|
|
371
382
|
- `metadata.optionSource.display` e a fonte preferencial de UX para a entidade; campos top-level como `selectedLayout`, `density`, `showAvatar` e `showStatus` funcionam como override local de host.
|
|
372
383
|
- Opcoes podem mostrar linha secundaria (`subtitle`) para desambiguacao; em `entityLookup`, a linha rica tambem mostra avatar, campos ricos com icones/chips/datas, status visual, badges e motivo de bloqueio.
|
|
373
384
|
- Com `metadata.optionSource.resourcePath`, busca emite termo no pipeline remoto de option-source; sem endpoint, filtra local.
|
|
385
|
+
- Com fonte remota e `loadOn: "open"`, o seletor rapido permanece abrivel antes da primeira pagina para disparar a carga inicial. A opcao sentinela que viabiliza essa abertura e interna, invisivel e nao integra o contrato visual ou o valor do campo.
|
|
386
|
+
- Ao confirmar uma opcao no seletor rapido, a selecao simples fecha o painel e devolve o foco ao campo; a selecao multipla preserva o painel aberto para continuidade da tarefa. Mouse e teclado seguem a mesma regra.
|
|
374
387
|
- Em uso standalone de shell/topbar autenticado, o componente aceita `FormControl` externo com `initialMetadata` estático e `options` locais. Um valor inicial já selecionado no controle deve materializar o texto da opção local sem bloquear a montagem da rota nem realimentar change detection quando a metadata recebida for semanticamente equivalente.
|
|
375
388
|
- `metadata.resourcePath` continua aceito como configuracao operacional herdada, mas nao substitui a semantica canonica de entidade publicada em `metadata.optionSource`.
|
|
376
389
|
- As acoes de painel ficam em um rodape materializado como irmao do `listbox` no overlay: `Limpar selecao` e uma acao secundaria alinhada ao inicio; `Carregar mais` e uma acao de largura total, com alvo minimo de 44 px, estado ocupado e foco visivel. `Tab` transfere o foco da busca para a primeira acao habilitada. Nenhuma delas participa da navegacao semantica de opcoes.
|
|
@@ -434,6 +447,10 @@ Uso: lookup simples em lista local.
|
|
|
434
447
|
"showCode": false,
|
|
435
448
|
"showDescription": true,
|
|
436
449
|
"showStatus": true,
|
|
450
|
+
"statusLabelMap": {
|
|
451
|
+
"ACTIVE": "Ativa",
|
|
452
|
+
"BLOCKED": "Bloqueada"
|
|
453
|
+
},
|
|
437
454
|
"showBadges": true,
|
|
438
455
|
"showResultCount": true
|
|
439
456
|
}
|
|
@@ -843,6 +843,7 @@ declare abstract class SimpleBaseInputComponent implements ControlValueAccessor,
|
|
|
843
843
|
params?: Record<string, any>;
|
|
844
844
|
} | null | undefined, keySuffix: string, fallback: string, params?: Record<string, string | number | boolean | null | undefined>): string;
|
|
845
845
|
protected clearActionTooltip(): string | null;
|
|
846
|
+
protected openCalendarAriaLabel(): string;
|
|
846
847
|
protected clearActionAriaLabel(): string;
|
|
847
848
|
private resolveClearActionContextLabel;
|
|
848
849
|
private interpolateValidationMessage;
|
|
@@ -2113,7 +2114,9 @@ declare class MaterialDateRangeComponent extends SimpleBaseInputComponent implem
|
|
|
2113
2114
|
protected normalizeDateRangeValue(value: unknown): DateRangeValue | null;
|
|
2114
2115
|
private coerceDateLike;
|
|
2115
2116
|
private metadataAsField;
|
|
2116
|
-
|
|
2117
|
+
protected syncDateAdapterLocale(): void;
|
|
2118
|
+
protected resolveBuiltinPresetLabel(id: string, fallback: string, overrides: Record<string, string | undefined>): string;
|
|
2119
|
+
protected resolveAdapterLocale(): string;
|
|
2117
2120
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialDateRangeComponent, never>;
|
|
2118
2121
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialDateRangeComponent, "pdx-material-date-range", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; "metadataInput": { "alias": "metadata"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
2119
2122
|
}
|
|
@@ -2846,6 +2849,7 @@ type InlineAsyncSelectMetadata = MaterialSelectMetadata & {
|
|
|
2846
2849
|
declare class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
|
|
2847
2850
|
inlineMinWidthPx: number;
|
|
2848
2851
|
inlineMaxWidthPx: number;
|
|
2852
|
+
readonly isPanelOpen: _angular_core.WritableSignal<boolean>;
|
|
2849
2853
|
private fieldLabelText;
|
|
2850
2854
|
private staticOptions;
|
|
2851
2855
|
private currentMetadata;
|
|
@@ -2899,6 +2903,7 @@ interface EntityLookupViewModel {
|
|
|
2899
2903
|
label: string;
|
|
2900
2904
|
description: string;
|
|
2901
2905
|
status: string;
|
|
2906
|
+
statusCode: string;
|
|
2902
2907
|
statusTone: LookupStatusTone;
|
|
2903
2908
|
selectable: boolean;
|
|
2904
2909
|
selectionState: EntityLookupResultState;
|
|
@@ -2965,6 +2970,8 @@ declare class InlineEntityLookupComponent extends MaterialAsyncSelectComponent {
|
|
|
2965
2970
|
private nextMetadataFunctionId;
|
|
2966
2971
|
private readonly inlineSelectPanelClasses;
|
|
2967
2972
|
private readonly fullFieldSelectPanelClasses;
|
|
2973
|
+
private singleSelectionCloseTimer;
|
|
2974
|
+
private singleSelectionCloseDestroyHookRegistered;
|
|
2968
2975
|
private placeholderTextCacheSignature;
|
|
2969
2976
|
private placeholderTextCache;
|
|
2970
2977
|
set initialMetadata(metadata: MaterialEntityLookupMetadata | null | undefined);
|
|
@@ -3057,6 +3064,7 @@ declare class InlineEntityLookupComponent extends MaterialAsyncSelectComponent {
|
|
|
3057
3064
|
onTriggerIconMouseDown(event: MouseEvent): void;
|
|
3058
3065
|
onQuickClear(event: MouseEvent): void;
|
|
3059
3066
|
onOpenedChange(opened: boolean): void;
|
|
3067
|
+
onQuickSelectionCommitted(): void;
|
|
3060
3068
|
onSearchInput(term: string): void;
|
|
3061
3069
|
showLoadMore(): boolean;
|
|
3062
3070
|
showEndReachedMessage(): boolean;
|
|
@@ -3086,6 +3094,7 @@ declare class InlineEntityLookupComponent extends MaterialAsyncSelectComponent {
|
|
|
3086
3094
|
dialogOpenSupportingText(): string;
|
|
3087
3095
|
dialogContextSupportingText(hasActiveFilters: boolean): string;
|
|
3088
3096
|
dialogApplyActionText(): string;
|
|
3097
|
+
dialogCurrentSelectionText(value: string): string;
|
|
3089
3098
|
dialogFilterPanelToggleText(open: boolean): string;
|
|
3090
3099
|
dialogFilterPlaceholderText(operator: LookupFilterOperator, type: LookupFilterFieldType): string;
|
|
3091
3100
|
dialogFilterOperatorHintText(operator: LookupFilterOperator): string;
|
|
@@ -3100,6 +3109,14 @@ declare class InlineEntityLookupComponent extends MaterialAsyncSelectComponent {
|
|
|
3100
3109
|
dialogResultsAriaLabelText(): string;
|
|
3101
3110
|
dialogFiltersAriaLabelText(): string;
|
|
3102
3111
|
dialogPreviewAriaLabelText(): string;
|
|
3112
|
+
dialogCloseAriaLabelText(): string;
|
|
3113
|
+
dialogLoadErrorTitleText(): string;
|
|
3114
|
+
dialogLoadErrorSupportingText(): string;
|
|
3115
|
+
dialogRetryActionText(): string;
|
|
3116
|
+
lookupSearchStrategyOptionText(strategy: {
|
|
3117
|
+
key?: string;
|
|
3118
|
+
kind?: string;
|
|
3119
|
+
}): string;
|
|
3103
3120
|
dialogResultOptionAriaLabel(item: EntityLookupViewModel): string;
|
|
3104
3121
|
dialogCancelActionText(): string;
|
|
3105
3122
|
dialogTitleText(): string;
|
|
@@ -3146,6 +3163,7 @@ declare class InlineEntityLookupComponent extends MaterialAsyncSelectComponent {
|
|
|
3146
3163
|
private normalizeLookupTone;
|
|
3147
3164
|
private classifyLookupSelectionState;
|
|
3148
3165
|
private resolveStatusTone;
|
|
3166
|
+
private resolveStatusLabel;
|
|
3149
3167
|
private lookupSeparator;
|
|
3150
3168
|
private normalizeLookupText;
|
|
3151
3169
|
private normalizeLookupOptionalText;
|
|
@@ -3219,6 +3237,15 @@ declare class EntityLookupDialogComponent implements AfterViewInit {
|
|
|
3219
3237
|
onSearchStrategyChange(event: Event): void;
|
|
3220
3238
|
searchStrategyLabel(): string;
|
|
3221
3239
|
searchStrategyDefaultLabel(): string;
|
|
3240
|
+
searchStrategyOptionText(strategy: {
|
|
3241
|
+
key?: string;
|
|
3242
|
+
kind?: string;
|
|
3243
|
+
}): string;
|
|
3244
|
+
closeAriaLabel(): string;
|
|
3245
|
+
errorStateTitle(): string;
|
|
3246
|
+
errorStateSupporting(): string;
|
|
3247
|
+
retryActionText(): string;
|
|
3248
|
+
retryResults(): void;
|
|
3222
3249
|
sortOptions(): _praxisui_core.LookupSortOptionMetadata[];
|
|
3223
3250
|
trackLookupSortOption(index: number, option: {
|
|
3224
3251
|
key?: string;
|