@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-fields",
|
|
3
|
-
"version": "9.0.5-rc.
|
|
3
|
+
"version": "9.0.5-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.5-rc.
|
|
15
|
-
"@praxisui/cron-builder": "^9.0.5-rc.
|
|
14
|
+
"@praxisui/core": "^9.0.5-rc.21",
|
|
15
|
+
"@praxisui/cron-builder": "^9.0.5-rc.21"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"libphonenumber-js": "^1.12.41",
|
|
@@ -311,7 +311,7 @@ Resumo de composicao deste componente:
|
|
|
311
311
|
|
|
312
312
|
### 4. Mapeamento de Comportamento
|
|
313
313
|
- Trigger em pill + badge de quantidade quando multiplo.
|
|
314
|
-
- Painel com busca em tempo real (`termControl`) e rodape compartilhado: o rodape e materializado como irmao do `listbox` no
|
|
314
|
+
- Painel com busca em tempo real (`termControl`) e rodape compartilhado: o rodape e materializado como irmao do `listbox` no dialog de colecao, nunca como opcao. `Carregar mais` e um botao real de largura total e alvo minimo de 44 px; durante a paginacao ele permanece visivel, ocupado e desabilitado. `Tab`/`Shift+Tab` percorrem e ciclam os controles do dialog sem fecha-lo; selecao, `Escape` e clique externo fecham e restauram o trigger. `Fim de lista` e um status, fora da semantica de opcoes.
|
|
315
315
|
- Se `resourcePath` ausente, busca opera sobre snapshot local.
|
|
316
316
|
|
|
317
317
|
### 5. Exemplo Minimo (JSON + Uso)
|
package/src/lib/components/inline-searchable-select/pdx-inline-searchable-select.json-api.md
CHANGED
|
@@ -308,7 +308,7 @@ Resumo de composicao deste componente:
|
|
|
308
308
|
- `Extensao de runtime`: `searchPlaceholder` e `inlineAutoSize.*`.
|
|
309
309
|
|
|
310
310
|
### 4. Mapeamento de Comportamento
|
|
311
|
-
- A paginacao usa o rodape compartilhado da familia de selects, materializado como irmao do `listbox` no
|
|
311
|
+
- A paginacao usa o rodape compartilhado da familia de selects, materializado como irmao do `listbox` no dialog de colecao: botao `Carregar mais` com alvo minimo de 44 px, estado ocupado sem salto de layout e acesso por `Tab` a partir da busca. `Tab`/`Shift+Tab` ciclam entre os controles do dialog; selecao, `Escape` e clique externo fecham e restauram o trigger. A acao nao participa da semantica de opcoes.
|
|
312
312
|
- Trigger exibe label e, em modo multiplo, badge de quantidade.
|
|
313
313
|
- Painel contem input de busca e estados de loading/fim de lista.
|
|
314
314
|
- Quando sem `resourcePath`, usa filtragem local da lista estatica.
|
package/src/lib/components/material-searchable-select/pdx-material-searchable-select.json-api.md
CHANGED
|
@@ -348,7 +348,7 @@ Precedencia de comportamento:
|
|
|
348
348
|
3. `optionSource` ativa consulta remota pelo endpoint canonico `/option-sources/{key}/options/filter`.
|
|
349
349
|
4. `resourcePath` ativa consulta remota paginada legada com termo de busca.
|
|
350
350
|
5. Com `resourcePath` e `loadOn='open'`, o painel abre mesmo antes da primeira pagina remota para disparar a carga inicial; a opcao sentinela usada para isso e interna, invisivel e nao compoe contrato visual publico.
|
|
351
|
-
6. `Carregar mais` so aparece depois de uma primeira pagina remota carregada com sucesso e com proxima pagina disponivel; durante a paginacao permanece visivel, ocupado e desabilitado para evitar requisicoes duplicadas e salto de layout. A acao usa o rodape compartilhado, materializado como irmao do `listbox` no
|
|
351
|
+
6. `Carregar mais` so aparece depois de uma primeira pagina remota carregada com sucesso e com proxima pagina disponivel; durante a paginacao permanece visivel, ocupado e desabilitado para evitar requisicoes duplicadas e salto de layout. A acao usa o rodape compartilhado, materializado como irmao do `listbox` no dialog de colecao, tem alvo minimo de 44 px, recebe foco por `Tab` a partir da busca e nao participa da semantica de opcoes. `Tab`/`Shift+Tab` ciclam dentro do dialog; selecao, `Escape` e clique externo fecham e restauram o trigger.
|
|
352
352
|
7. fontes locais (`selectOptions`/`options`) e `loadOn='none'` antes da primeira carga nao exibem acao de paginacao.
|
|
353
353
|
|
|
354
354
|
#### Status model
|
|
@@ -2545,18 +2545,23 @@ type PdxCollectionOverlayCloseReason = 'escape' | 'outside' | 'detach' | 'progra
|
|
|
2545
2545
|
declare class PdxCollectionOverlayComponent {
|
|
2546
2546
|
readonly open: _angular_core.ModelSignal<boolean>;
|
|
2547
2547
|
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
2548
|
+
/** Optional explicit dialog id. A unique id is generated for direct legacy consumers. */
|
|
2549
|
+
readonly panelId: _angular_core.InputSignal<string | null>;
|
|
2548
2550
|
readonly panelClass: _angular_core.InputSignal<string>;
|
|
2549
2551
|
readonly panelWidth: _angular_core.InputSignal<string | number | null>;
|
|
2550
2552
|
readonly density: _angular_core.InputSignal<"compact" | "regular">;
|
|
2551
2553
|
readonly opened: _angular_core.OutputEmitterRef<void>;
|
|
2552
2554
|
readonly closed: _angular_core.OutputEmitterRef<PdxCollectionOverlayCloseReason>;
|
|
2555
|
+
private readonly fallbackPanelId;
|
|
2553
2556
|
readonly trigger: _angular_core.Signal<PdxCollectionOverlayTriggerDirective>;
|
|
2554
2557
|
readonly positions: ConnectedPosition[];
|
|
2555
2558
|
resolvedPanelWidth(): number | string;
|
|
2559
|
+
resolvedPanelClasses(): string[];
|
|
2560
|
+
resolvedPanelId(): string;
|
|
2556
2561
|
close(reason: PdxCollectionOverlayCloseReason, restoreFocus?: boolean): void;
|
|
2557
2562
|
onOverlayKeydown(event: KeyboardEvent): void;
|
|
2558
2563
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PdxCollectionOverlayComponent, never>;
|
|
2559
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PdxCollectionOverlayComponent, "pdx-collection-overlay", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, ["trigger"], ["[pdxCollectionOverlayTrigger]", "[pdxCollectionOverlayHeader]", "[pdxCollectionOverlayOptions]", "[pdxCollectionOverlayFooter]"], true, never>;
|
|
2564
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PdxCollectionOverlayComponent, "pdx-collection-overlay", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "panelId": { "alias": "panelId"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, ["trigger"], ["[pdxCollectionOverlayTrigger]", "[pdxCollectionOverlayHeader]", "[pdxCollectionOverlayOptions]", "[pdxCollectionOverlayFooter]"], true, never>;
|
|
2560
2565
|
}
|
|
2561
2566
|
|
|
2562
2567
|
declare class MaterialSelectComponent extends SimpleBaseSelectComponent {
|
|
@@ -2587,6 +2592,7 @@ declare class MaterialSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2587
2592
|
materialDisplayText(): string;
|
|
2588
2593
|
labelId(): string;
|
|
2589
2594
|
panelId(): string;
|
|
2595
|
+
overlayId(): string;
|
|
2590
2596
|
overlayPanelWidth(): string;
|
|
2591
2597
|
private focusOverlayOption;
|
|
2592
2598
|
private sameValue;
|
|
@@ -2634,6 +2640,7 @@ declare class InlineSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2634
2640
|
selectEmptyOption(): void;
|
|
2635
2641
|
onOptionKeydown(event: KeyboardEvent): void;
|
|
2636
2642
|
panelId(): string;
|
|
2643
|
+
overlayId(): string;
|
|
2637
2644
|
overlayPanelWidth(): string;
|
|
2638
2645
|
private focusOverlayOption;
|
|
2639
2646
|
onSearchInput(term: string): void;
|
|
@@ -2720,6 +2727,7 @@ declare class MaterialSearchableSelectComponent extends SimpleBaseSelectComponen
|
|
|
2720
2727
|
materialDisplayText(): string;
|
|
2721
2728
|
labelId(): string;
|
|
2722
2729
|
panelId(): string;
|
|
2730
|
+
overlayId(): string;
|
|
2723
2731
|
overlayPanelWidth(): string;
|
|
2724
2732
|
private getSelectedIds;
|
|
2725
2733
|
private preloadSelected;
|
|
@@ -2849,6 +2857,7 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2849
2857
|
readonly activeLookupFilters: _angular_core.WritableSignal<LookupFilterRequest[]>;
|
|
2850
2858
|
readonly selectedLookupSortKey: _angular_core.WritableSignal<string | null>;
|
|
2851
2859
|
readonly selectedLookupSearchStrategyKey: _angular_core.WritableSignal<string | null>;
|
|
2860
|
+
readonly lookupSearchFeedback: _angular_core.WritableSignal<string | null>;
|
|
2852
2861
|
protected readonly remoteTotalElements: _angular_core.WritableSignal<number | null>;
|
|
2853
2862
|
private readonly queryTerm;
|
|
2854
2863
|
private readonly store;
|
|
@@ -2880,6 +2889,7 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2880
2889
|
materialDisplayText(): string;
|
|
2881
2890
|
materialLabelId(): string;
|
|
2882
2891
|
materialPanelId(): string;
|
|
2892
|
+
materialOverlayId(): string;
|
|
2883
2893
|
materialOverlayPanelWidth(): string;
|
|
2884
2894
|
usesSearchCombobox(): boolean;
|
|
2885
2895
|
comboboxInputAriaLabel(): string;
|
|
@@ -2928,6 +2938,7 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2928
2938
|
private attachAutocompleteScrollListener;
|
|
2929
2939
|
private detachAutocompleteScrollListener;
|
|
2930
2940
|
private runQuery;
|
|
2941
|
+
private resolveGovernedLookupSearch;
|
|
2931
2942
|
loadMore(): void;
|
|
2932
2943
|
showLoadMore(): boolean;
|
|
2933
2944
|
shouldRenderOpenSentinel(): boolean;
|
|
@@ -3017,6 +3028,7 @@ declare class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
|
|
|
3017
3028
|
showEndReachedMessage(): boolean;
|
|
3018
3029
|
overlayPanelWidth(): string;
|
|
3019
3030
|
panelId(): string;
|
|
3031
|
+
overlayId(): string;
|
|
3020
3032
|
isOverlayDisabled(): boolean;
|
|
3021
3033
|
private focusOverlayOption;
|
|
3022
3034
|
onLoadMoreClick(event: MouseEvent): void;
|
|
@@ -3558,6 +3570,7 @@ declare class InlineMultiSelectComponent extends SimpleBaseSelectComponent {
|
|
|
3558
3570
|
toggleOverlayValue(value: unknown): void;
|
|
3559
3571
|
toggleOverlaySelectAll(): void;
|
|
3560
3572
|
panelId(): string;
|
|
3573
|
+
overlayId(): string;
|
|
3561
3574
|
overlayPanelWidth(): string;
|
|
3562
3575
|
showPanelActions(): boolean;
|
|
3563
3576
|
showPanelClearAction(): boolean;
|