@praxisui/table 10.0.0-rc.11 → 10.0.0-rc.12

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 CHANGED
@@ -745,7 +745,7 @@ O editor de conteúdo da tabela recebe a configuração efetiva em contexto tran
745
745
 
746
746
  O editor do filtro permite selecionar o recurso e carregar seus campos pelo schema de filtro canônico. `resourcePath` e preferências visuais são persistidos; os metadados carregados permanecem derivados da API.
747
747
 
748
- Ao receber novos `filterCriteria` ou `queryContext` de outro widget, a consulta remota reinicia na página zero. Para um recurso paginado, selecione estratégia de paginação `server` no editor; a estratégia cliente continua sendo uma opção explícita para dados locais.
748
+ Ao receber novos `filterCriteria` ou `queryContext` de outro widget, a consulta remota reinicia na página zero. Com a estratégia omitida, paginação e ordenação são inferidas da origem: `server` para remoto e `client` para local. O editor oferece **Automática (pela fonte de dados)**, que remove a propriedade; escolhas explícitas são preservadas. Consulte [a precedência oficial](docs/local-data-mode-precedence.md) para as regras de round-trip e validação do total remoto.
749
749
 
750
750
  ## Filter heading and advanced-action presentation
751
751
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-13T19:31:57.571Z",
3
+ "generatedAt": "2026-10-13T20:53:39.090Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "10.0.0-rc.11",
5
+ "packageVersion": "10.0.0-rc.12",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -11,6 +11,27 @@ Regras de conflito:
11
11
  - `resourcePath` + `data` ao mesmo tempo resolve para `remote`.
12
12
  - Limpar `document.bindings.resourcePath` no documento autorado é a forma explícita de remover a conexão remota via editor.
13
13
 
14
+ ## Estratégia contextual de paginação e ordenação
15
+
16
+ `pagination.strategy` e `sorting.strategy` são opcionais. Quando ausentes, o
17
+ runtime usa `server` para uma origem remota e `client` para dados locais. Os
18
+ defaults compartilhados e o reset dos editores preservam essa ausência; não
19
+ transformam uma configuração parcial em uma escolha explícita de cliente.
20
+
21
+ Os editores apresentam **Automática (pela fonte de dados)**. Essa opção
22
+ remove a propriedade do documento. As únicas estratégias públicas continuam
23
+ sendo `client` e `server`; não existe um valor serializado `auto`. Uma escolha
24
+ explícita é preservada, respeitando as restrições e diagnostics do modo local.
25
+ Uma operação parcial de authoring que omite a estratégia mantém uma escolha
26
+ anterior; omissão em um patch não significa limpar essa escolha.
27
+
28
+ Na paginação remota, o total vem da resposta do backend. O paginator e o sort
29
+ cliente do `MatTableDataSource` não devem ser anexados nessa estratégia, pois
30
+ seus callbacks assíncronos podem substituir o total pela quantidade de registros
31
+ da página e voltar o índice para zero. A prova deve aguardar esses callbacks e
32
+ as materializações de capabilities, navegar à segunda página e confirmar que o
33
+ total e o intervalo continuam corretos. Uma captura intermediária não basta.
34
+
14
35
  ## Ciclo da primeira consulta remota
15
36
 
16
37
  Quando `resourcePath`, `config` e `queryContext` chegam no primeiro ciclo de inputs, o
@@ -8500,6 +8500,7 @@ const PRAXIS_TABLE_EDITOR_I18N_CONFIG = {
8500
8500
  'behavior.pagination.title': 'Paginacao',
8501
8501
  'behavior.pagination.description': 'Configure como os dados sao divididos em paginas',
8502
8502
  'behavior.pagination.enabled': 'Habilitar paginacao',
8503
+ 'behavior.strategy.auto': 'Automática (pela fonte de dados)',
8503
8504
  'behavior.pagination.strategy': 'Estrategia de paginacao',
8504
8505
  'behavior.pagination.pageSize': 'Itens por pagina',
8505
8506
  'behavior.pagination.pageSizeHint': 'Número de registros exibidos por pagina.',
@@ -9831,6 +9832,7 @@ const PRAXIS_TABLE_EDITOR_I18N_CONFIG = {
9831
9832
  'behavior.pagination.title': 'Pagination',
9832
9833
  'behavior.pagination.description': 'Configure how data is divided into pages',
9833
9834
  'behavior.pagination.enabled': 'Enable pagination',
9835
+ 'behavior.strategy.auto': 'Automatic (by data source)',
9834
9836
  'behavior.pagination.strategy': 'Pagination strategy',
9835
9837
  'behavior.pagination.pageSize': 'Items per page',
9836
9838
  'behavior.pagination.pageSizeHint': 'Number of records displayed per page.',
@@ -23009,7 +23011,7 @@ class PraxisTable {
23009
23011
  if (this.aiAdapter || this.aiAdapterLoadStarted)
23010
23012
  return;
23011
23013
  this.aiAdapterLoadStarted = true;
23012
- import('./praxisui-table-table-ai.adapter-vtpAb33s.mjs')
23014
+ import('./praxisui-table-table-ai.adapter-nUhrYuKK.mjs')
23013
23015
  .then(({ TableAiAdapter }) => {
23014
23016
  if (!this.isAiAssistantEnabled()) {
23015
23017
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -23755,7 +23757,7 @@ class PraxisTable {
23755
23757
  initializeAiAssistantController() {
23756
23758
  if (!this.aiAdapter || this.aiAssistantController)
23757
23759
  return;
23758
- import('./praxisui-table-table-agentic-authoring-turn-flow-DmnNx_fm.mjs')
23760
+ import('./praxisui-table-table-agentic-authoring-turn-flow-7mVc-Xm1.mjs')
23759
23761
  .then(({ TableAgenticAuthoringTurnFlow }) => {
23760
23762
  if (this.aiAssistantController || !this.aiAdapter)
23761
23763
  return;
@@ -51819,14 +51821,13 @@ class BehaviorConfigEditorComponent {
51819
51821
  this.arrayToString(pagination.pageSizeOptions || [5, 10, 25, 50]),
51820
51822
  ],
51821
51823
  showFirstLastButtons: [pagination.showFirstLastButtons !== false],
51822
- // Default adaptado: se houver resourcePath e não houver override, usar 'server'
51823
- paginationStrategy: [this.resourcePath ? 'server' : 'client'], // V2 only
51824
+ paginationStrategy: [this.isV2 ? null : (this.resourcePath ? 'server' : 'client')],
51824
51825
  paginationPosition: ['bottom'],
51825
51826
  paginationStyle: ['default'],
51826
51827
  // Sorting
51827
51828
  sortingEnabled: [gridOptions.sortable !== false],
51828
51829
  multiSort: [false], // V2 only
51829
- sortingStrategy: ['client'], // V2 only
51830
+ sortingStrategy: [this.isV2 ? null : 'client'],
51830
51831
  allowClearSort: [true], // V2 only
51831
51832
  defaultSortField: [''],
51832
51833
  defaultSortDirection: ['asc'],
@@ -51919,8 +51920,7 @@ class BehaviorConfigEditorComponent {
51919
51920
  pageSize: behavior.pagination.pageSize || 10,
51920
51921
  pageSizeOptions: this.arrayToString(behavior.pagination.pageSizeOptions || [5, 10, 25, 50]),
51921
51922
  showFirstLastButtons: behavior.pagination.showFirstLastButtons !== false,
51922
- // Se a estratégia não estiver definida, respeitar contexto de resourcePath
51923
- paginationStrategy: behavior.pagination.strategy ?? (this.resourcePath ? 'server' : 'client'),
51923
+ paginationStrategy: behavior.pagination.strategy ?? null,
51924
51924
  paginationPosition: behavior.pagination.position || 'bottom',
51925
51925
  paginationStyle: behavior.pagination.style || 'default',
51926
51926
  });
@@ -51929,7 +51929,7 @@ class BehaviorConfigEditorComponent {
51929
51929
  this.behaviorForm.patchValue({
51930
51930
  sortingEnabled: behavior.sorting.enabled !== false,
51931
51931
  multiSort: behavior.sorting.multiSort || false,
51932
- sortingStrategy: behavior.sorting.strategy || 'client',
51932
+ sortingStrategy: behavior.sorting.strategy ?? null,
51933
51933
  allowClearSort: behavior.sorting.allowClearSort !== false,
51934
51934
  defaultSortField: (Array.isArray(behavior.sorting.defaultSort) ? behavior.sorting.defaultSort[0]?.column : behavior.sorting.defaultSort?.column) || '',
51935
51935
  defaultSortDirection: (Array.isArray(behavior.sorting.defaultSort) ? behavior.sorting.defaultSort[0]?.direction : behavior.sorting.defaultSort?.direction) || 'asc',
@@ -52108,6 +52108,8 @@ class BehaviorConfigEditorComponent {
52108
52108
  position: values.paginationPosition || 'bottom',
52109
52109
  style: values.paginationStyle || 'default',
52110
52110
  };
52111
+ if (paginationStrategy === undefined)
52112
+ delete v2Config.behavior.pagination.strategy;
52111
52113
  // Sorting
52112
52114
  v2Config.behavior.sorting = {
52113
52115
  enabled: values.sortingEnabled,
@@ -52117,6 +52119,8 @@ class BehaviorConfigEditorComponent {
52117
52119
  showSortIndicators: true,
52118
52120
  indicatorPosition: 'end',
52119
52121
  };
52122
+ if (sortingStrategy === undefined)
52123
+ delete v2Config.behavior.sorting.strategy;
52120
52124
  const dfField = (values.defaultSortField || '').trim();
52121
52125
  const dfDir = values.defaultSortDirection;
52122
52126
  if (dfField) {
@@ -52364,7 +52368,7 @@ class BehaviorConfigEditorComponent {
52364
52368
  resolveStrategy(value) {
52365
52369
  if (this.forceClientStrategies)
52366
52370
  return 'client';
52367
- return value === 'server' ? 'server' : 'client';
52371
+ return value === 'server' || value === 'client' ? value : undefined;
52368
52372
  }
52369
52373
  enforceStrategyConstraints(emitEvent) {
52370
52374
  if (!this.isV2 || !this.forceClientStrategies || !this.behaviorForm) {
@@ -52667,7 +52671,8 @@ class BehaviorConfigEditorComponent {
52667
52671
 
52668
52672
  @if (isV2) { <mat-form-field appearance="outline">
52669
52673
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
52670
- <mat-select formControlName="paginationStrategy">
52674
+ <mat-select formControlName="paginationStrategy" [canSelectNullableOptions]="true">
52675
+ @if (!forceClientStrategies) { <mat-option [value]="null">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option> }
52671
52676
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
52672
52677
  <mat-option value="server" [disabled]="forceClientStrategies"
52673
52678
  >{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option
@@ -52755,7 +52760,8 @@ class BehaviorConfigEditorComponent {
52755
52760
 
52756
52761
  <mat-form-field appearance="outline">
52757
52762
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
52758
- <mat-select formControlName="sortingStrategy">
52763
+ <mat-select formControlName="sortingStrategy" [canSelectNullableOptions]="true">
52764
+ @if (!forceClientStrategies) { <mat-option [value]="null">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option> }
52759
52765
  <mat-option value="client"
52760
52766
  >{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option
52761
52767
  >
@@ -53689,7 +53695,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
53689
53695
 
53690
53696
  @if (isV2) { <mat-form-field appearance="outline">
53691
53697
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
53692
- <mat-select formControlName="paginationStrategy">
53698
+ <mat-select formControlName="paginationStrategy" [canSelectNullableOptions]="true">
53699
+ @if (!forceClientStrategies) { <mat-option [value]="null">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option> }
53693
53700
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
53694
53701
  <mat-option value="server" [disabled]="forceClientStrategies"
53695
53702
  >{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option
@@ -53777,7 +53784,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
53777
53784
 
53778
53785
  <mat-form-field appearance="outline">
53779
53786
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
53780
- <mat-select formControlName="sortingStrategy">
53787
+ <mat-select formControlName="sortingStrategy" [canSelectNullableOptions]="true">
53788
+ @if (!forceClientStrategies) { <mat-option [value]="null">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option> }
53781
53789
  <mat-option value="client"
53782
53790
  >{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option
53783
53791
  >
@@ -67848,7 +67856,6 @@ class PraxisTableConfigEditor {
67848
67856
  sorting: {
67849
67857
  enabled: true,
67850
67858
  multiSort: false,
67851
- strategy: 'client',
67852
67859
  showSortIndicators: true,
67853
67860
  indicatorPosition: 'end',
67854
67861
  allowClearSort: true,
@@ -67867,7 +67874,6 @@ class PraxisTableConfigEditor {
67867
67874
  showPageInfo: true,
67868
67875
  position: 'bottom',
67869
67876
  style: 'default',
67870
- strategy: 'client',
67871
67877
  },
67872
67878
  },
67873
67879
  toolbar: {
@@ -73496,11 +73502,11 @@ class PraxisTableInlineAuthoringEditorComponent {
73496
73502
  pageSize = 10;
73497
73503
  pageSizeOptionsText = '5, 10, 25, 50';
73498
73504
  showFirstLastButtons = true;
73499
- paginationStrategy = 'client';
73505
+ paginationStrategy;
73500
73506
  paginationPosition = 'bottom';
73501
73507
  paginationStyle = 'default';
73502
73508
  sortingEnabled = true;
73503
- sortingStrategy = 'client';
73509
+ sortingStrategy;
73504
73510
  allowClearSort = true;
73505
73511
  defaultSortField = '';
73506
73512
  defaultSortDirection = 'asc';
@@ -73543,11 +73549,11 @@ class PraxisTableInlineAuthoringEditorComponent {
73543
73549
  this.pageSizeOptionsText = this.arrayToString(this.workingConfig.behavior?.pagination?.pageSizeOptions || [5, 10, 25, 50]);
73544
73550
  this.showFirstLastButtons =
73545
73551
  this.workingConfig.behavior?.pagination?.showFirstLastButtons !== false;
73546
- this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy || 'client';
73552
+ this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy;
73547
73553
  this.paginationPosition = this.workingConfig.behavior?.pagination?.position || 'bottom';
73548
73554
  this.paginationStyle = this.workingConfig.behavior?.pagination?.style || 'default';
73549
73555
  this.sortingEnabled = this.workingConfig.behavior?.sorting?.enabled !== false;
73550
- this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy || 'client';
73556
+ this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy;
73551
73557
  this.allowClearSort = this.workingConfig.behavior?.sorting?.allowClearSort !== false;
73552
73558
  this.defaultSortField = this.getDefaultSortField(this.workingConfig);
73553
73559
  this.defaultSortDirection = this.getDefaultSortDirection(this.workingConfig);
@@ -73659,7 +73665,7 @@ class PraxisTableInlineAuthoringEditorComponent {
73659
73665
  this.patchPagination();
73660
73666
  }
73661
73667
  setPaginationStrategy(value) {
73662
- this.paginationStrategy = value || 'client';
73668
+ this.paginationStrategy = value;
73663
73669
  this.patchPagination();
73664
73670
  }
73665
73671
  setPaginationPosition(value) {
@@ -73675,7 +73681,7 @@ class PraxisTableInlineAuthoringEditorComponent {
73675
73681
  this.patchSorting();
73676
73682
  }
73677
73683
  setSortingStrategy(value) {
73678
- this.sortingStrategy = value || 'client';
73684
+ this.sortingStrategy = value;
73679
73685
  this.patchSorting();
73680
73686
  }
73681
73687
  setSortingAllowClear(value) {
@@ -73734,11 +73740,11 @@ class PraxisTableInlineAuthoringEditorComponent {
73734
73740
  this.pageSizeOptionsText = this.arrayToString(this.workingConfig.behavior?.pagination?.pageSizeOptions || [5, 10, 25, 50]);
73735
73741
  this.showFirstLastButtons =
73736
73742
  this.workingConfig.behavior?.pagination?.showFirstLastButtons !== false;
73737
- this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy || 'client';
73743
+ this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy;
73738
73744
  this.paginationPosition = this.workingConfig.behavior?.pagination?.position || 'bottom';
73739
73745
  this.paginationStyle = this.workingConfig.behavior?.pagination?.style || 'default';
73740
73746
  this.sortingEnabled = this.workingConfig.behavior?.sorting?.enabled !== false;
73741
- this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy || 'client';
73747
+ this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy;
73742
73748
  this.allowClearSort = this.workingConfig.behavior?.sorting?.allowClearSort !== false;
73743
73749
  this.defaultSortField = this.getDefaultSortField(this.workingConfig);
73744
73750
  this.defaultSortDirection = this.getDefaultSortDirection(this.workingConfig);
@@ -73882,34 +73888,36 @@ class PraxisTableInlineAuthoringEditorComponent {
73882
73888
  this.emitConfig();
73883
73889
  }
73884
73890
  patchPagination() {
73885
- this.patchBehavior({
73886
- pagination: {
73887
- ...(this.workingConfig.behavior?.pagination || {}),
73888
- enabled: this.paginationEnabled,
73889
- pageSize: this.pageSize,
73890
- pageSizeOptions: this.parseNumberList(this.pageSizeOptionsText, [5, 10, 25, 50]),
73891
- showFirstLastButtons: this.showFirstLastButtons,
73892
- showPageNumbers: this.workingConfig.behavior?.pagination?.showPageNumbers ?? true,
73893
- showPageInfo: this.workingConfig.behavior?.pagination?.showPageInfo ?? true,
73894
- position: this.paginationPosition,
73895
- style: this.paginationStyle,
73896
- strategy: this.paginationStrategy,
73897
- },
73898
- });
73891
+ const pagination = {
73892
+ ...(this.workingConfig.behavior?.pagination || {}),
73893
+ enabled: this.paginationEnabled,
73894
+ pageSize: this.pageSize,
73895
+ pageSizeOptions: this.parseNumberList(this.pageSizeOptionsText, [5, 10, 25, 50]),
73896
+ showFirstLastButtons: this.showFirstLastButtons,
73897
+ showPageNumbers: this.workingConfig.behavior?.pagination?.showPageNumbers ?? true,
73898
+ showPageInfo: this.workingConfig.behavior?.pagination?.showPageInfo ?? true,
73899
+ position: this.paginationPosition,
73900
+ style: this.paginationStyle,
73901
+ strategy: this.paginationStrategy,
73902
+ };
73903
+ if (this.paginationStrategy === undefined)
73904
+ delete pagination.strategy;
73905
+ this.patchBehavior({ pagination });
73899
73906
  }
73900
73907
  patchSorting() {
73901
- this.patchBehavior({
73902
- sorting: {
73903
- ...(this.workingConfig.behavior?.sorting || {}),
73904
- enabled: this.sortingEnabled,
73905
- strategy: this.sortingStrategy,
73906
- allowClearSort: this.allowClearSort,
73907
- multiSort: this.workingConfig.behavior?.sorting?.multiSort ?? false,
73908
- showSortIndicators: this.workingConfig.behavior?.sorting?.showSortIndicators ?? true,
73909
- indicatorPosition: this.workingConfig.behavior?.sorting?.indicatorPosition || 'end',
73910
- defaultSort: this.buildDefaultSort(),
73911
- },
73912
- });
73908
+ const sorting = {
73909
+ ...(this.workingConfig.behavior?.sorting || {}),
73910
+ enabled: this.sortingEnabled,
73911
+ strategy: this.sortingStrategy,
73912
+ allowClearSort: this.allowClearSort,
73913
+ multiSort: this.workingConfig.behavior?.sorting?.multiSort ?? false,
73914
+ showSortIndicators: this.workingConfig.behavior?.sorting?.showSortIndicators ?? true,
73915
+ indicatorPosition: this.workingConfig.behavior?.sorting?.indicatorPosition || 'end',
73916
+ defaultSort: this.buildDefaultSort(),
73917
+ };
73918
+ if (this.sortingStrategy === undefined)
73919
+ delete sorting.strategy;
73920
+ this.patchBehavior({ sorting });
73913
73921
  }
73914
73922
  patchMessages(patch) {
73915
73923
  this.workingConfig = {
@@ -74251,10 +74259,12 @@ class PraxisTableInlineAuthoringEditorComponent {
74251
74259
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
74252
74260
  <mat-select
74253
74261
  data-testid="table-inline-editor-pagination-strategy"
74262
+ [canSelectNullableOptions]="true"
74254
74263
  [ngModel]="paginationStrategy"
74255
74264
  (ngModelChange)="setPaginationStrategy($event)"
74256
74265
  [disabled]="readonly || !paginationEnabled"
74257
74266
  >
74267
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74258
74268
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
74259
74269
  <mat-option value="server">{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option>
74260
74270
  </mat-select>
@@ -74302,10 +74312,12 @@ class PraxisTableInlineAuthoringEditorComponent {
74302
74312
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
74303
74313
  <mat-select
74304
74314
  data-testid="table-inline-editor-sorting-strategy"
74315
+ [canSelectNullableOptions]="true"
74305
74316
  [ngModel]="sortingStrategy"
74306
74317
  (ngModelChange)="setSortingStrategy($event)"
74307
74318
  [disabled]="readonly || !sortingEnabled"
74308
74319
  >
74320
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74309
74321
  <mat-option value="client">{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option>
74310
74322
  <mat-option value="server">{{ tx('behavior.sorting.strategy.server', 'Server (remote sorting)') }}</mat-option>
74311
74323
  </mat-select>
@@ -74734,10 +74746,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
74734
74746
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
74735
74747
  <mat-select
74736
74748
  data-testid="table-inline-editor-pagination-strategy"
74749
+ [canSelectNullableOptions]="true"
74737
74750
  [ngModel]="paginationStrategy"
74738
74751
  (ngModelChange)="setPaginationStrategy($event)"
74739
74752
  [disabled]="readonly || !paginationEnabled"
74740
74753
  >
74754
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74741
74755
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
74742
74756
  <mat-option value="server">{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option>
74743
74757
  </mat-select>
@@ -74785,10 +74799,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
74785
74799
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
74786
74800
  <mat-select
74787
74801
  data-testid="table-inline-editor-sorting-strategy"
74802
+ [canSelectNullableOptions]="true"
74788
74803
  [ngModel]="sortingStrategy"
74789
74804
  (ngModelChange)="setSortingStrategy($event)"
74790
74805
  [disabled]="readonly || !sortingEnabled"
74791
74806
  >
74807
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74792
74808
  <mat-option value="client">{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option>
74793
74809
  <mat-option value="server">{{ tx('behavior.sorting.strategy.server', 'Server (remote sorting)') }}</mat-option>
74794
74810
  </mat-select>
@@ -1,6 +1,6 @@
1
1
  import { Observable, firstValueFrom } from 'rxjs';
2
2
  import { withAuthoringScopePolicy } from '@praxisui/ai';
3
- import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-ConSKl5g.mjs';
3
+ import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-DXPvAOf8.mjs';
4
4
 
5
5
  class TableAgenticAuthoringTurnFlow {
6
6
  adapter;
@@ -1,7 +1,7 @@
1
1
  import { firstValueFrom } from 'rxjs';
2
2
  import { BaseAiAdapter, sanitizePraxisAssistantText, createComponentAuthoringContext } from '@praxisui/ai';
3
3
  import { PRAXIS_GLOBAL_ACTION_CATALOG, deepMerge } from '@praxisui/core';
4
- import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a6 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlans, Y as TASK_PRESETS, ae as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-ConSKl5g.mjs';
4
+ import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a6 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlans, Y as TASK_PRESETS, ae as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-DXPvAOf8.mjs';
5
5
 
6
6
  const TABLE_ROW_EXPRESSION_CONTEXT_OPTION = {
7
7
  mode: 'expression',
@@ -1,2 +1,2 @@
1
- export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TASK_PRESETS, Z as TableDefaultsProvider, _ as TableRulesEditorComponent, $ as ToolbarActionsEditorComponent, a0 as ValueMappingEditorComponent, a1 as VisualFormulaBuilderComponent, a2 as analyticsComparisonMetricField, a3 as applyComputedFieldsToRows, a4 as buildTableApplyPlan, a5 as coerceTableComponentEditPlan, a6 as coerceTableComponentEditPlans, a7 as compileTableComponentEditPlan, a8 as compileTableComponentEditPlans, a9 as createTableAuthoringDocument, aa as formatComputedFieldValue, ab as getActionId, ac as getEnum, ad as getTableCapabilities, ae as getTableComponentEditPlanCapabilities, af as interpolateRelationEndpoint, ag as isAnalyticalDrawerSchema, ah as isTableRendererSupportedByRichContentP0, ai as mapTableRendererToRichContentP0, aj as normalizeComputedFieldDefinition, ak as normalizeTableAuthoringDocument, al as parseLegacyOrTableDocument, am as providePraxisAnalyticalDrawerSchemas, an as providePraxisFilterMetadata, ao as providePraxisTableMetadata, ap as providePraxisTableToolbarAppearance, aq as serializeTableAuthoringDocument, as as toCanonicalTableConfig, at as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-ConSKl5g.mjs';
1
+ export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TASK_PRESETS, Z as TableDefaultsProvider, _ as TableRulesEditorComponent, $ as ToolbarActionsEditorComponent, a0 as ValueMappingEditorComponent, a1 as VisualFormulaBuilderComponent, a2 as analyticsComparisonMetricField, a3 as applyComputedFieldsToRows, a4 as buildTableApplyPlan, a5 as coerceTableComponentEditPlan, a6 as coerceTableComponentEditPlans, a7 as compileTableComponentEditPlan, a8 as compileTableComponentEditPlans, a9 as createTableAuthoringDocument, aa as formatComputedFieldValue, ab as getActionId, ac as getEnum, ad as getTableCapabilities, ae as getTableComponentEditPlanCapabilities, af as interpolateRelationEndpoint, ag as isAnalyticalDrawerSchema, ah as isTableRendererSupportedByRichContentP0, ai as mapTableRendererToRichContentP0, aj as normalizeComputedFieldDefinition, ak as normalizeTableAuthoringDocument, al as parseLegacyOrTableDocument, am as providePraxisAnalyticalDrawerSchemas, an as providePraxisFilterMetadata, ao as providePraxisTableMetadata, ap as providePraxisTableToolbarAppearance, aq as serializeTableAuthoringDocument, as as toCanonicalTableConfig, at as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-DXPvAOf8.mjs';
2
2
  export { createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "10.0.0-rc.11",
3
+ "version": "10.0.0-rc.12",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
8
  "@angular/platform-browser": "^21.0.0",
9
- "@praxisui/ai": "^10.0.0-rc.11",
10
- "@praxisui/core": "^10.0.0-rc.11",
11
- "@praxisui/dynamic-fields": "^10.0.0-rc.11",
12
- "@praxisui/dynamic-form": "^10.0.0-rc.11",
13
- "@praxisui/metadata-editor": "^10.0.0-rc.11",
14
- "@praxisui/rich-content": "^10.0.0-rc.11",
15
- "@praxisui/settings-panel": "^10.0.0-rc.11",
16
- "@praxisui/table-rule-builder": "^10.0.0-rc.11",
9
+ "@praxisui/ai": "^10.0.0-rc.12",
10
+ "@praxisui/core": "^10.0.0-rc.12",
11
+ "@praxisui/dynamic-fields": "^10.0.0-rc.12",
12
+ "@praxisui/dynamic-form": "^10.0.0-rc.12",
13
+ "@praxisui/metadata-editor": "^10.0.0-rc.12",
14
+ "@praxisui/rich-content": "^10.0.0-rc.12",
15
+ "@praxisui/settings-panel": "^10.0.0-rc.12",
16
+ "@praxisui/table-rule-builder": "^10.0.0-rc.12",
17
17
  "@angular/cdk": "^21.0.0",
18
18
  "@angular/forms": "^21.0.0",
19
19
  "@angular/material": "^21.0.0",
20
20
  "@angular/router": "^21.0.0",
21
- "@praxisui/dialog": "^10.0.0-rc.11",
21
+ "@praxisui/dialog": "^10.0.0-rc.12",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {
@@ -5090,11 +5090,11 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
5090
5090
  pageSize: number;
5091
5091
  pageSizeOptionsText: string;
5092
5092
  showFirstLastButtons: boolean;
5093
- paginationStrategy: 'client' | 'server';
5093
+ paginationStrategy: 'client' | 'server' | undefined;
5094
5094
  paginationPosition: 'top' | 'bottom' | 'both';
5095
5095
  paginationStyle: 'default' | 'simple' | 'advanced' | 'compact';
5096
5096
  sortingEnabled: boolean;
5097
- sortingStrategy: 'client' | 'server';
5097
+ sortingStrategy: 'client' | 'server' | undefined;
5098
5098
  allowClearSort: boolean;
5099
5099
  defaultSortField: string;
5100
5100
  defaultSortDirection: 'asc' | 'desc';
@@ -5122,11 +5122,11 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
5122
5122
  setPaginationPageSize(value: number | string): void;
5123
5123
  setPaginationPageSizeOptions(value: string): void;
5124
5124
  setPaginationShowFirstLastButtons(value: boolean): void;
5125
- setPaginationStrategy(value: 'client' | 'server'): void;
5125
+ setPaginationStrategy(value: 'client' | 'server' | undefined): void;
5126
5126
  setPaginationPosition(value: 'top' | 'bottom' | 'both'): void;
5127
5127
  setPaginationStyle(value: 'default' | 'simple' | 'advanced' | 'compact'): void;
5128
5128
  setSortingEnabled(value: boolean): void;
5129
- setSortingStrategy(value: 'client' | 'server'): void;
5129
+ setSortingStrategy(value: 'client' | 'server' | undefined): void;
5130
5130
  setSortingAllowClear(value: boolean): void;
5131
5131
  setSortingDefaultField(value: string): void;
5132
5132
  setSortingDefaultDirection(value: 'asc' | 'desc'): void;