@praxisui/dynamic-fields 9.0.5 → 9.0.7
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 +2 -2
- package/docs/dynamic-fields-field-selection-guide.md +100 -45
- package/fesm2022/praxisui-dynamic-fields.mjs +2059 -1541
- package/package.json +3 -3
- package/src/lib/components/material-async-select/pdx-material-async-select.json-api.md +10 -4
- package/src/lib/components/material-searchable-select/pdx-material-searchable-select.json-api.md +7 -2
- package/src/lib/components/material-select/pdx-material-select.json-api.md +10 -4
- package/types/praxisui-dynamic-fields.d.ts +32 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-fields",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.7",
|
|
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.
|
|
15
|
-
"@praxisui/cron-builder": "^9.0.
|
|
14
|
+
"@praxisui/core": "^9.0.7",
|
|
15
|
+
"@praxisui/cron-builder": "^9.0.7"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"libphonenumber-js": "^1.12.41",
|
|
@@ -22,8 +22,8 @@ source_of_truth:
|
|
|
22
22
|
- "projects/praxis-dynamic-fields/src/lib/components/material-async-select/material-async-select.component.ts"
|
|
23
23
|
- "projects/praxis-dynamic-fields/src/lib/base/simple-base-select.component.ts"
|
|
24
24
|
- "projects/praxis-core/src/lib/models/material-field-metadata.interface.ts"
|
|
25
|
-
source_of_truth_last_verified: "2026-08-
|
|
26
|
-
last_updated: "2026-08-
|
|
25
|
+
source_of_truth_last_verified: "2026-08-19"
|
|
26
|
+
last_updated: "2026-08-19"
|
|
27
27
|
toc: true
|
|
28
28
|
sidebar: true
|
|
29
29
|
tags:
|
|
@@ -112,8 +112,8 @@ Este documento e a referencia canonica da API JSON de pdx-material-async-select.
|
|
|
112
112
|
| Path | Type | Required | Default | Status | Notes |
|
|
113
113
|
| --- | --- | --- | --- | --- | --- |
|
|
114
114
|
| `metadata` | object | true | n/a | Partial | See Detailed API reference for runtime semantics. |
|
|
115
|
-
| `readonlyMode` | boolean | false | n/a |
|
|
116
|
-
| `disabledMode` | boolean | false | n/a |
|
|
115
|
+
| `readonlyMode` | boolean | false | n/a | Active | Mantém o trigger focalizável com `aria-readonly`, bloqueia mutações e oculta clear/chevron. |
|
|
116
|
+
| `disabledMode` | boolean | false | n/a | Active | Aplica disabled nativo, `aria-disabled` e bloqueia interação. |
|
|
117
117
|
| `visible` | boolean | false | n/a | Partial | See Detailed API reference for runtime semantics. |
|
|
118
118
|
| `presentationMode` | boolean | false | n/a | Partial | See Detailed API reference for runtime semantics. |
|
|
119
119
|
|
|
@@ -339,6 +339,12 @@ Limites:
|
|
|
339
339
|
- debounce de busca interno permanece fixo em `300ms`.
|
|
340
340
|
- selecao multipla usa o overlay conectado com `listbox` multisselecao; ela nao
|
|
341
341
|
projeta busca ou acoes dentro de `mat-select` e nao reutiliza o combobox simples.
|
|
342
|
+
- tanto o combobox pesquisável quanto o ramo de coleção usam o frame canônico `mat-form-field` para label, outline, hint, erro, prefixo e sufixos.
|
|
343
|
+
- o estado vazio não repete o label como valor; seleções múltiplas compactadas preservam todos os labels em tooltip e no nome acessível.
|
|
344
|
+
- no ramo de coleção, valor e chevron/spinner ocupam colunas explícitas; ações trailing usam slots Material e não criam reserva fixa vazia.
|
|
345
|
+
- tanto o combobox pesquisável quanto o ramo de coleção mantêm clear, seta/spinner e help em trilho trailing com separação entre adornos e inset final até o outline.
|
|
346
|
+
- a troca entre spinner e chevron não altera a altura do frame Material nem o alinhamento da linha do formulário.
|
|
347
|
+
- `readonly` não é materializado como disabled nativo: o trigger permanece focalizável, expõe `aria-readonly`, não oferece chevron/clear, não abre por teclado e possui bloqueio final contra mutação no runtime base.
|
|
342
348
|
- ordenacao nao possui contrato dedicado nesta camada.
|
|
343
349
|
- `loadOn` e `useCursor` dependem da capacidade do backend e da configuracao global.
|
|
344
350
|
|
package/src/lib/components/material-searchable-select/pdx-material-searchable-select.json-api.md
CHANGED
|
@@ -22,8 +22,8 @@ source_of_truth:
|
|
|
22
22
|
- "projects/praxis-dynamic-fields/src/lib/components/material-searchable-select/material-searchable-select.component.ts"
|
|
23
23
|
- "projects/praxis-dynamic-fields/src/lib/base/simple-base-select.component.ts"
|
|
24
24
|
- "projects/praxis-core/src/lib/models/material-field-metadata.interface.ts"
|
|
25
|
-
source_of_truth_last_verified: "2026-
|
|
26
|
-
last_updated: "2026-
|
|
25
|
+
source_of_truth_last_verified: "2026-08-19"
|
|
26
|
+
last_updated: "2026-08-19"
|
|
27
27
|
toc: true
|
|
28
28
|
sidebar: true
|
|
29
29
|
tags:
|
|
@@ -326,6 +326,11 @@ Garantias:
|
|
|
326
326
|
- input de busca esta presente na UI do componente.
|
|
327
327
|
- carga remota e cascata seguem contrato base de select.
|
|
328
328
|
- `multiple` e respeitado para alternar single/multiple.
|
|
329
|
+
- label, outline, hint, erro, prefixo e sufixos usam o frame `mat-form-field` compartilhado com os demais campos Material.
|
|
330
|
+
- o estado vazio não repete o label como valor; seleções múltiplas compactadas preservam todos os labels em tooltip e no nome acessível.
|
|
331
|
+
- ações trailing ocupam slots Material reais; o trigger não reserva espaço quando clear/help estão ausentes.
|
|
332
|
+
- clear/help presentes compartilham um único trilho trailing, com separação entre ações e inset final até o outline.
|
|
333
|
+
- `readonly` permanece focalizável e expõe `aria-readonly`, sem ser convertido em disabled nativo, sem abrir o overlay e com bloqueio final de mutação no runtime base.
|
|
329
334
|
|
|
330
335
|
Limites:
|
|
331
336
|
|
|
@@ -22,8 +22,8 @@ source_of_truth:
|
|
|
22
22
|
- "projects/praxis-dynamic-fields/src/lib/components/material-select/material-select.component.ts"
|
|
23
23
|
- "projects/praxis-dynamic-fields/src/lib/base/simple-base-select.component.ts"
|
|
24
24
|
- "projects/praxis-core/src/lib/models/material-field-metadata.interface.ts"
|
|
25
|
-
source_of_truth_last_verified: "2026-08-
|
|
26
|
-
last_updated: "2026-08-
|
|
25
|
+
source_of_truth_last_verified: "2026-08-19"
|
|
26
|
+
last_updated: "2026-08-19"
|
|
27
27
|
toc: true
|
|
28
28
|
sidebar: true
|
|
29
29
|
tags:
|
|
@@ -113,8 +113,8 @@ Este documento e a referencia canonica da API JSON de pdx-material-select.
|
|
|
113
113
|
| Path | Type | Required | Default | Status | Notes |
|
|
114
114
|
| --- | --- | --- | --- | --- | --- |
|
|
115
115
|
| `metadata` | object | true | n/a | Partial | See Detailed API reference for runtime semantics. |
|
|
116
|
-
| `readonlyMode` | boolean | false | n/a |
|
|
117
|
-
| `disabledMode` | boolean | false | n/a |
|
|
116
|
+
| `readonlyMode` | boolean | false | n/a | Active | Mantém o trigger focalizável com `aria-readonly`, bloqueia mutações e oculta clear/chevron. |
|
|
117
|
+
| `disabledMode` | boolean | false | n/a | Active | Aplica disabled nativo, `aria-disabled` e bloqueia interação. |
|
|
118
118
|
| `visible` | boolean | false | n/a | Partial | See Detailed API reference for runtime semantics. |
|
|
119
119
|
| `presentationMode` | boolean | false | n/a | Partial | See Detailed API reference for runtime semantics. |
|
|
120
120
|
|
|
@@ -333,6 +333,12 @@ Garantias:
|
|
|
333
333
|
- `metadata.selectOptions` e `metadata.resourcePath` sao consumidos no runtime.
|
|
334
334
|
- valor e ciclo de mudanca integram com CVA/Reactive Forms.
|
|
335
335
|
- opcao vazia e suporte a filtro remoto seguem o contrato base de select.
|
|
336
|
+
- label, outline, hint, erro, prefixo e sufixos usam o mesmo frame `mat-form-field` dos demais campos Material.
|
|
337
|
+
- o trigger usa colunas explícitas para valor e estado; não existe reserva fixa de espaço quando clear/help estão ausentes.
|
|
338
|
+
- quando clear/help estão presentes, formam um único trilho trailing com separação entre ações e inset final até o outline.
|
|
339
|
+
- o estado vazio não repete o label como valor; placeholder só aparece quando foi declarado.
|
|
340
|
+
- valores truncados preservam o conteúdo integral em tooltip e no nome acessível do combobox.
|
|
341
|
+
- `readonly` permanece semanticamente distinto de `disabled`: continua focalizável, expõe `aria-readonly`, não abre por ponteiro/teclado e possui bloqueio final contra mutação no runtime base.
|
|
336
342
|
|
|
337
343
|
Limites:
|
|
338
344
|
|
|
@@ -265,6 +265,7 @@ interface PraxisDynamicFieldsI18nOverrides {
|
|
|
265
265
|
endOfList?: PraxisDynamicFieldText;
|
|
266
266
|
noOptionsAvailable?: PraxisDynamicFieldText;
|
|
267
267
|
loadingOptionsAriaLabel?: PraxisDynamicFieldText;
|
|
268
|
+
triggerAriaLabel?: PraxisDynamicFieldText;
|
|
268
269
|
};
|
|
269
270
|
tree?: {
|
|
270
271
|
expandNodeAriaLabel?: PraxisDynamicFieldText;
|
|
@@ -1151,6 +1152,12 @@ declare abstract class SimpleBaseSelectComponent<T = any> extends SimpleBaseInpu
|
|
|
1151
1152
|
protected defaultPanelClass(): string | string[] | undefined;
|
|
1152
1153
|
selectPanelClass(): string[];
|
|
1153
1154
|
protected isInteractionDisabled(): boolean;
|
|
1155
|
+
/**
|
|
1156
|
+
* Native disabled state is intentionally distinct from readonly/presentation.
|
|
1157
|
+
* Readonly collection controls remain focusable and expose `aria-readonly`, while
|
|
1158
|
+
* this state alone removes the trigger from keyboard interaction.
|
|
1159
|
+
*/
|
|
1160
|
+
protected isDisabledEffective(): boolean;
|
|
1154
1161
|
protected normalizeMultipleControlValue(): void;
|
|
1155
1162
|
setExternalControl(control: AbstractControl): void;
|
|
1156
1163
|
/** Whether to show the clear button (if enabled in metadata) */
|
|
@@ -1197,6 +1204,7 @@ declare abstract class SimpleBaseSelectComponent<T = any> extends SimpleBaseInpu
|
|
|
1197
1204
|
selectPanelActionsAriaLabel(): string;
|
|
1198
1205
|
noOptionsAvailableLabel(): string;
|
|
1199
1206
|
loadingOptionsAriaLabel(): string;
|
|
1207
|
+
selectionTriggerAriaLabel(displayValue: string): string;
|
|
1200
1208
|
/**
|
|
1201
1209
|
* Ícone para estado "selecionado" em opções do painel.
|
|
1202
1210
|
*/
|
|
@@ -2579,6 +2587,7 @@ declare class MaterialSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2579
2587
|
private readonly collectionSearch;
|
|
2580
2588
|
private readonly overlayTrigger;
|
|
2581
2589
|
private readonly overlayOptions;
|
|
2590
|
+
private pendingOverlayFocusIndex;
|
|
2582
2591
|
protected defaultPanelClass(): string;
|
|
2583
2592
|
setSelectMetadata(metadata: SimpleSelectMetadata<unknown>): void;
|
|
2584
2593
|
ngOnInit(): void;
|
|
@@ -2595,7 +2604,8 @@ declare class MaterialSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2595
2604
|
onOptionKeydown(event: KeyboardEvent): void;
|
|
2596
2605
|
hasSelectionValue(): boolean;
|
|
2597
2606
|
materialDisplayText(): string;
|
|
2598
|
-
|
|
2607
|
+
materialFullDisplayText(): string;
|
|
2608
|
+
materialTriggerTooltip(): string | null;
|
|
2599
2609
|
panelId(): string;
|
|
2600
2610
|
overlayId(): string;
|
|
2601
2611
|
overlayPanelWidth(): string;
|
|
@@ -2702,6 +2712,7 @@ declare class MaterialSearchableSelectComponent extends SimpleBaseSelectComponen
|
|
|
2702
2712
|
protected readonly collectionSearch: _angular_core.Signal<PdxCollectionSearchComponent | undefined>;
|
|
2703
2713
|
protected readonly overlayTrigger: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
2704
2714
|
protected readonly overlayOptions: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
|
|
2715
|
+
private pendingOverlayFocusIndex;
|
|
2705
2716
|
private readonly store;
|
|
2706
2717
|
readonly endReached: _angular_core.WritableSignal<boolean>;
|
|
2707
2718
|
private initialLoadStrategy;
|
|
@@ -2730,7 +2741,7 @@ declare class MaterialSearchableSelectComponent extends SimpleBaseSelectComponen
|
|
|
2730
2741
|
onOptionKeydown(event: KeyboardEvent): void;
|
|
2731
2742
|
hasSelectionValue(): boolean;
|
|
2732
2743
|
materialDisplayText(): string;
|
|
2733
|
-
|
|
2744
|
+
materialFullDisplayText(): string;
|
|
2734
2745
|
panelId(): string;
|
|
2735
2746
|
overlayId(): string;
|
|
2736
2747
|
overlayPanelWidth(): string;
|
|
@@ -2746,7 +2757,6 @@ declare class MaterialSearchableSelectComponent extends SimpleBaseSelectComponen
|
|
|
2746
2757
|
private isLastPage;
|
|
2747
2758
|
onLoadMoreInteraction(event: Event): void;
|
|
2748
2759
|
onSearch(term: string): void;
|
|
2749
|
-
protected registerMatSelect(select: MatSelect): void;
|
|
2750
2760
|
private refocusSearchInput;
|
|
2751
2761
|
protected focusOverlayOption(index: number): void;
|
|
2752
2762
|
private resolveMaterialOptionLabel;
|
|
@@ -2857,6 +2867,7 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2857
2867
|
private readonly materialCollectionSearch;
|
|
2858
2868
|
private readonly materialOverlayTrigger;
|
|
2859
2869
|
private readonly materialOverlayOptions;
|
|
2870
|
+
private pendingMaterialOverlayFocusIndex;
|
|
2860
2871
|
readonly termControl: FormControl<unknown>;
|
|
2861
2872
|
materialSearchTerm(): string;
|
|
2862
2873
|
readonly activeLookupFilters: _angular_core.WritableSignal<LookupFilterRequest[]>;
|
|
@@ -2892,7 +2903,7 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2892
2903
|
onMaterialOptionKeydown(event: KeyboardEvent): void;
|
|
2893
2904
|
hasMaterialSelection(): boolean;
|
|
2894
2905
|
materialDisplayText(): string;
|
|
2895
|
-
|
|
2906
|
+
materialFullDisplayText(): string;
|
|
2896
2907
|
materialPanelId(): string;
|
|
2897
2908
|
materialOverlayId(): string;
|
|
2898
2909
|
materialOverlayPanelWidth(): string;
|
|
@@ -2950,7 +2961,6 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2950
2961
|
private isLastPage;
|
|
2951
2962
|
onLoadMoreInteraction(event: Event): void;
|
|
2952
2963
|
retry(): void;
|
|
2953
|
-
protected registerMatSelect(select: MatSelect): void;
|
|
2954
2964
|
private refocusSearchInput;
|
|
2955
2965
|
private focusMaterialOption;
|
|
2956
2966
|
private resolveMaterialOptionLabel;
|
|
@@ -4500,6 +4510,7 @@ declare class InlineDateRangeComponent extends MaterialDateRangeComponent {
|
|
|
4500
4510
|
inlineTextTruncated: boolean;
|
|
4501
4511
|
private fieldLabelText;
|
|
4502
4512
|
private resizeRafId;
|
|
4513
|
+
private overlayPositionRafId;
|
|
4503
4514
|
overlayOpen: boolean;
|
|
4504
4515
|
private overlayCommittedInSession;
|
|
4505
4516
|
private overlayBaseline;
|
|
@@ -4566,6 +4577,7 @@ declare class InlineDateRangeComponent extends MaterialDateRangeComponent {
|
|
|
4566
4577
|
onInputClick(picker: MatDateRangePicker<Date>, event: Event): void;
|
|
4567
4578
|
onFieldContainerClick(picker: MatDateRangePicker<Date>, event: MouseEvent): void;
|
|
4568
4579
|
openPicker(picker: MatDateRangePicker<Date>, event: Event): void;
|
|
4580
|
+
private resolvePickerXPosition;
|
|
4569
4581
|
onOverlayOpened(): void;
|
|
4570
4582
|
onOverlayClosed(): void;
|
|
4571
4583
|
onOverlayApplyAction(): void;
|
|
@@ -4606,6 +4618,19 @@ declare class InlineDateRangeComponent extends MaterialDateRangeComponent {
|
|
|
4606
4618
|
private parsePx;
|
|
4607
4619
|
private scheduleOverlayActionsContainerSync;
|
|
4608
4620
|
private syncOverlayActionsContainerClass;
|
|
4621
|
+
/**
|
|
4622
|
+
* Material positions the popup before projected actions are composed. Side shortcuts expand the
|
|
4623
|
+
* content from the calendar width to the enterprise two-column width, so the connected overlay
|
|
4624
|
+
* must be measured again after that DOM change. Delegating to the existing OverlayRef preserves
|
|
4625
|
+
* Material's viewport margin, fallback positions, directionality, and scroll strategy.
|
|
4626
|
+
*/
|
|
4627
|
+
private updatePickerOverlayPosition;
|
|
4628
|
+
/**
|
|
4629
|
+
* Material locks the first connected position so normal scrolling cannot make the popup jump.
|
|
4630
|
+
* Praxis adds the shortcut rail after that first measurement, therefore we briefly unlock only
|
|
4631
|
+
* while the CDK evaluates the final overlay dimensions and restore Material's default policy.
|
|
4632
|
+
*/
|
|
4633
|
+
private remeasurePickerOverlay;
|
|
4609
4634
|
private findOverlayActionsContainer;
|
|
4610
4635
|
private syncQuickPresetComposition;
|
|
4611
4636
|
private ensureQuickPresetRail;
|
|
@@ -4777,6 +4802,8 @@ interface TimeRangeValue {
|
|
|
4777
4802
|
end: string | null;
|
|
4778
4803
|
}
|
|
4779
4804
|
declare class PdxMaterialTimeRangeComponent extends SimpleBaseInputComponent implements OnInit {
|
|
4805
|
+
supportingTextId(): string;
|
|
4806
|
+
supportingTextDescribedBy(): string | null;
|
|
4780
4807
|
readonlyMode: boolean;
|
|
4781
4808
|
disabledMode: boolean;
|
|
4782
4809
|
visible: boolean;
|