@praxisui/dynamic-fields 9.0.0-beta.41 → 9.0.0-beta.42

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-fields",
3
- "version": "9.0.0-beta.41",
3
+ "version": "9.0.0-beta.42",
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.0-beta.41",
15
- "@praxisui/cron-builder": "^9.0.0-beta.41"
14
+ "@praxisui/core": "^9.0.0-beta.42",
15
+ "@praxisui/cron-builder": "^9.0.0-beta.42"
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-03-06"
26
- last_updated: "2026-03-06"
25
+ source_of_truth_last_verified: "2026-07-06"
26
+ last_updated: "2026-07-06"
27
27
  toc: true
28
28
  sidebar: true
29
29
  tags:
@@ -319,6 +319,10 @@ Garantias:
319
319
  - input de busca e carga incremental estao habilitados no painel.
320
320
  - `loadOn` controla a primeira carga (`open`, `init`, `none`).
321
321
  - `useCursor` pode trocar estrategia de pagina quando backend suporta cursor.
322
+ - 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.
323
+ - `Carregar mais` so aparece depois de uma primeira pagina remota carregada com sucesso e com proxima pagina disponivel.
324
+ - fontes locais (`selectOptions`/`options`) e `loadOn='none'` antes da primeira carga nao exibem acao de paginacao.
325
+ - em paginacao numerada, o fim usa `totalPages`/`totalElements` quando fornecidos pelo backend; se ausentes, usa `content.length < pageSize` como fallback.
322
326
 
323
327
  Limites:
324
328
 
@@ -351,6 +355,7 @@ Precedencia de comportamento:
351
355
  #### Checklist corporativo
352
356
 
353
357
  - alinhe backend para pesquisa por termo e include de selecionados.
358
+ - retorne `totalPages` e `totalElements` consistentes para evitar chamadas extras de paginacao.
354
359
  - padronize `optionLabelKey`/`optionValueKey` entre dominios.
355
360
  - defina `dependencyLoadOnChange` conforme UX esperada em cascata.
356
361
  - use `maxSelections` quando multi-select exigir limite de negocio.
@@ -396,6 +401,8 @@ Notas de runtime:
396
401
  - em remoto generico, `loadOptions` pode usar `includeIds` na pagina 0.
397
402
  - em `optionSource`, o filtro envia `includeIds` somente quando `optionSource.includeIds=true`; quando ausente ou `false`, valores selecionados sao reidratados por `/option-sources/{sourceKey}/options/by-ids`.
398
403
  - `onSearch` limpa estado local e reinicia pagina para novo termo.
404
+ - `loadMore` nao inicia a primeira carga remota; a primeira pagina respeita `loadOn`, abertura do painel, reload explicito ou mudanca de dependencia.
405
+ - `loadMore` incrementa pagina somente quando ja existe pagina remota carregada e `endReached=false`.
399
406
 
400
407
  Contrato compartilhado completo:
401
408
 
@@ -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-04-27"
26
- last_updated: "2026-04-27"
25
+ source_of_truth_last_verified: "2026-07-06"
26
+ last_updated: "2026-07-06"
27
27
  toc: true
28
28
  sidebar: true
29
29
  tags:
@@ -347,6 +347,9 @@ Precedencia de comportamento:
347
347
  2. `options` atua como alias legado quando `selectOptions` nao e enviado.
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
+ 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.
352
+ 7. fontes locais (`selectOptions`/`options`) e `loadOn='none'` antes da primeira carga nao exibem acao de paginacao.
350
353
 
351
354
  #### Status model
352
355
 
@@ -357,6 +360,7 @@ Precedencia de comportamento:
357
360
  #### Checklist corporativo
358
361
 
359
362
  - alinhe backend para pesquisa por termo e include de selecionados.
363
+ - retorne `totalPages` e `totalElements` consistentes para evitar chamadas extras de paginacao.
360
364
  - para lookups metadata-driven, publique `optionSource.dependsOn` e `optionSource.dependencyFilterMap` no schema canonico.
361
365
  - padronize `optionLabelKey`/`optionValueKey` entre dominios.
362
366
  - defina `dependencyLoadOnChange` conforme UX esperada em cascata.
@@ -406,6 +410,9 @@ Notas de runtime:
406
410
  - em remoto, `loadOptions` usa filtro com include de selecionados na pagina 0.
407
411
  - com `optionSource`, `loadOptions` chama `filterOptionSourceOptions` e envia termo de busca como `search`, nao como campo de filtro textual.
408
412
  - `onSearch` limpa estado local e reinicia pagina para novo termo.
413
+ - `loadNextPage` nao inicia a primeira carga remota; a primeira pagina respeita `loadOn`, abertura do painel, reload explicito ou mudanca de dependencia.
414
+ - `loadNextPage` incrementa pagina somente quando ja existe pagina remota carregada e `endReached=false`.
415
+ - em paginacao numerada, `endReached` usa `totalPages`/`totalElements` quando fornecidos pelo backend; se ausentes, usa `content.length < pageSize` como fallback.
409
416
  - estados governados bloqueiam busca, abertura, selecao, reload, clear e `loadNextPage`.
410
417
 
411
418
  Contrato compartilhado completo:
@@ -2603,8 +2603,14 @@ declare class MaterialSearchableSelectComponent extends SimpleBaseSelectComponen
2603
2603
  private refreshOptions;
2604
2604
  protected loadOptions(page?: number, searchTerm?: string, criteria?: Record<string, unknown>): void;
2605
2605
  loadNextPage(): void;
2606
+ showLoadMore(): boolean;
2607
+ shouldRenderOpenSentinel(): boolean;
2608
+ private isLastPage;
2609
+ onLoadMorePointerDown(event: Event): void;
2610
+ onLoadMoreInteraction(event: Event): void;
2606
2611
  onSearch(term: string): void;
2607
2612
  protected registerMatSelect(select: MatSelect): void;
2613
+ private refocusSearchInput;
2608
2614
  reload(reset: boolean): void;
2609
2615
  protected onDependenciesChanged(): void;
2610
2616
  private syncDisabledModeControlState;
@@ -2730,9 +2736,15 @@ declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
2730
2736
  protected refreshLookupQueryState(): void;
2731
2737
  private runQuery;
2732
2738
  loadMore(): void;
2739
+ showLoadMore(): boolean;
2740
+ shouldRenderOpenSentinel(): boolean;
2741
+ private isLastPage;
2742
+ onLoadMorePointerDown(event: Event): void;
2743
+ onLoadMoreInteraction(event: Event): void;
2733
2744
  retry(): void;
2734
2745
  handleKey(event: KeyboardEvent): void;
2735
2746
  protected registerMatSelect(select: MatSelect): void;
2747
+ private refocusSearchInput;
2736
2748
  reload(reset: boolean): void;
2737
2749
  protected setupRemoteSelectionHydration(): void;
2738
2750
  protected onDependenciesChanged(): void;