@praxisui/dynamic-fields 9.0.4 → 9.0.5-rc.10
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 +10 -6
- package/docs/dynamic-fields-inline-components-guide.md +3 -3
- package/fesm2022/praxisui-dynamic-fields.mjs +112 -67
- 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 +12 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-fields",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.5-rc.10",
|
|
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.5-rc.10",
|
|
15
|
+
"@praxisui/cron-builder": "^9.0.5-rc.10"
|
|
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;
|
|
@@ -2880,6 +2888,7 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
2880
2888
|
materialDisplayText(): string;
|
|
2881
2889
|
materialLabelId(): string;
|
|
2882
2890
|
materialPanelId(): string;
|
|
2891
|
+
materialOverlayId(): string;
|
|
2883
2892
|
materialOverlayPanelWidth(): string;
|
|
2884
2893
|
usesSearchCombobox(): boolean;
|
|
2885
2894
|
comboboxInputAriaLabel(): string;
|
|
@@ -3017,6 +3026,7 @@ declare class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
|
|
|
3017
3026
|
showEndReachedMessage(): boolean;
|
|
3018
3027
|
overlayPanelWidth(): string;
|
|
3019
3028
|
panelId(): string;
|
|
3029
|
+
overlayId(): string;
|
|
3020
3030
|
isOverlayDisabled(): boolean;
|
|
3021
3031
|
private focusOverlayOption;
|
|
3022
3032
|
onLoadMoreClick(event: MouseEvent): void;
|
|
@@ -3558,6 +3568,7 @@ declare class InlineMultiSelectComponent extends SimpleBaseSelectComponent {
|
|
|
3558
3568
|
toggleOverlayValue(value: unknown): void;
|
|
3559
3569
|
toggleOverlaySelectAll(): void;
|
|
3560
3570
|
panelId(): string;
|
|
3571
|
+
overlayId(): string;
|
|
3561
3572
|
overlayPanelWidth(): string;
|
|
3562
3573
|
showPanelActions(): boolean;
|
|
3563
3574
|
showPanelClearAction(): boolean;
|