@praxisui/table 10.0.0-rc.10 → 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-13T14:47:21.726Z",
3
+ "generatedAt": "2026-10-13T20:53:39.090Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "10.0.0-rc.10",
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.',
@@ -22359,6 +22361,8 @@ class PraxisTable {
22359
22361
  return true;
22360
22362
  if (config.export?.enabled)
22361
22363
  return true;
22364
+ if (config.actions?.bulk?.enabled)
22365
+ return true;
22362
22366
  if (config.behavior?.filtering?.advancedFilters?.enabled)
22363
22367
  return true;
22364
22368
  return (config.toolbar?.actions?.length ?? 0) > 0;
@@ -23007,7 +23011,7 @@ class PraxisTable {
23007
23011
  if (this.aiAdapter || this.aiAdapterLoadStarted)
23008
23012
  return;
23009
23013
  this.aiAdapterLoadStarted = true;
23010
- import('./praxisui-table-table-ai.adapter-CGYmONXh.mjs')
23014
+ import('./praxisui-table-table-ai.adapter-nUhrYuKK.mjs')
23011
23015
  .then(({ TableAiAdapter }) => {
23012
23016
  if (!this.isAiAssistantEnabled()) {
23013
23017
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -23753,7 +23757,7 @@ class PraxisTable {
23753
23757
  initializeAiAssistantController() {
23754
23758
  if (!this.aiAdapter || this.aiAssistantController)
23755
23759
  return;
23756
- import('./praxisui-table-table-agentic-authoring-turn-flow-BLXICz1r.mjs')
23760
+ import('./praxisui-table-table-agentic-authoring-turn-flow-7mVc-Xm1.mjs')
23757
23761
  .then(({ TableAgenticAuthoringTurnFlow }) => {
23758
23762
  if (this.aiAssistantController || !this.aiAdapter)
23759
23763
  return;
@@ -39319,6 +39323,7 @@ class PraxisTable {
39319
39323
  this.publishSelectionStatus(row, selectedRows.length);
39320
39324
  this.emitResourceEvent('selection-change', 'selectionChange', payload, null, this.getRowId(row ?? selectedRows[0]));
39321
39325
  this.refreshAiAssistantContextAfterSelectionChange();
39326
+ this.cdr.markForCheck();
39322
39327
  }
39323
39328
  publishSelectionStatus(row, selectedCount) {
39324
39329
  if (this.config?.accessibility?.announcements?.userActions === false)
@@ -51816,14 +51821,13 @@ class BehaviorConfigEditorComponent {
51816
51821
  this.arrayToString(pagination.pageSizeOptions || [5, 10, 25, 50]),
51817
51822
  ],
51818
51823
  showFirstLastButtons: [pagination.showFirstLastButtons !== false],
51819
- // Default adaptado: se houver resourcePath e não houver override, usar 'server'
51820
- paginationStrategy: [this.resourcePath ? 'server' : 'client'], // V2 only
51824
+ paginationStrategy: [this.isV2 ? null : (this.resourcePath ? 'server' : 'client')],
51821
51825
  paginationPosition: ['bottom'],
51822
51826
  paginationStyle: ['default'],
51823
51827
  // Sorting
51824
51828
  sortingEnabled: [gridOptions.sortable !== false],
51825
51829
  multiSort: [false], // V2 only
51826
- sortingStrategy: ['client'], // V2 only
51830
+ sortingStrategy: [this.isV2 ? null : 'client'],
51827
51831
  allowClearSort: [true], // V2 only
51828
51832
  defaultSortField: [''],
51829
51833
  defaultSortDirection: ['asc'],
@@ -51916,8 +51920,7 @@ class BehaviorConfigEditorComponent {
51916
51920
  pageSize: behavior.pagination.pageSize || 10,
51917
51921
  pageSizeOptions: this.arrayToString(behavior.pagination.pageSizeOptions || [5, 10, 25, 50]),
51918
51922
  showFirstLastButtons: behavior.pagination.showFirstLastButtons !== false,
51919
- // Se a estratégia não estiver definida, respeitar contexto de resourcePath
51920
- paginationStrategy: behavior.pagination.strategy ?? (this.resourcePath ? 'server' : 'client'),
51923
+ paginationStrategy: behavior.pagination.strategy ?? null,
51921
51924
  paginationPosition: behavior.pagination.position || 'bottom',
51922
51925
  paginationStyle: behavior.pagination.style || 'default',
51923
51926
  });
@@ -51926,7 +51929,7 @@ class BehaviorConfigEditorComponent {
51926
51929
  this.behaviorForm.patchValue({
51927
51930
  sortingEnabled: behavior.sorting.enabled !== false,
51928
51931
  multiSort: behavior.sorting.multiSort || false,
51929
- sortingStrategy: behavior.sorting.strategy || 'client',
51932
+ sortingStrategy: behavior.sorting.strategy ?? null,
51930
51933
  allowClearSort: behavior.sorting.allowClearSort !== false,
51931
51934
  defaultSortField: (Array.isArray(behavior.sorting.defaultSort) ? behavior.sorting.defaultSort[0]?.column : behavior.sorting.defaultSort?.column) || '',
51932
51935
  defaultSortDirection: (Array.isArray(behavior.sorting.defaultSort) ? behavior.sorting.defaultSort[0]?.direction : behavior.sorting.defaultSort?.direction) || 'asc',
@@ -52105,6 +52108,8 @@ class BehaviorConfigEditorComponent {
52105
52108
  position: values.paginationPosition || 'bottom',
52106
52109
  style: values.paginationStyle || 'default',
52107
52110
  };
52111
+ if (paginationStrategy === undefined)
52112
+ delete v2Config.behavior.pagination.strategy;
52108
52113
  // Sorting
52109
52114
  v2Config.behavior.sorting = {
52110
52115
  enabled: values.sortingEnabled,
@@ -52114,6 +52119,8 @@ class BehaviorConfigEditorComponent {
52114
52119
  showSortIndicators: true,
52115
52120
  indicatorPosition: 'end',
52116
52121
  };
52122
+ if (sortingStrategy === undefined)
52123
+ delete v2Config.behavior.sorting.strategy;
52117
52124
  const dfField = (values.defaultSortField || '').trim();
52118
52125
  const dfDir = values.defaultSortDirection;
52119
52126
  if (dfField) {
@@ -52361,7 +52368,7 @@ class BehaviorConfigEditorComponent {
52361
52368
  resolveStrategy(value) {
52362
52369
  if (this.forceClientStrategies)
52363
52370
  return 'client';
52364
- return value === 'server' ? 'server' : 'client';
52371
+ return value === 'server' || value === 'client' ? value : undefined;
52365
52372
  }
52366
52373
  enforceStrategyConstraints(emitEvent) {
52367
52374
  if (!this.isV2 || !this.forceClientStrategies || !this.behaviorForm) {
@@ -52664,7 +52671,8 @@ class BehaviorConfigEditorComponent {
52664
52671
 
52665
52672
  @if (isV2) { <mat-form-field appearance="outline">
52666
52673
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
52667
- <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> }
52668
52676
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
52669
52677
  <mat-option value="server" [disabled]="forceClientStrategies"
52670
52678
  >{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option
@@ -52752,7 +52760,8 @@ class BehaviorConfigEditorComponent {
52752
52760
 
52753
52761
  <mat-form-field appearance="outline">
52754
52762
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
52755
- <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> }
52756
52765
  <mat-option value="client"
52757
52766
  >{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option
52758
52767
  >
@@ -53686,7 +53695,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
53686
53695
 
53687
53696
  @if (isV2) { <mat-form-field appearance="outline">
53688
53697
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
53689
- <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> }
53690
53700
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
53691
53701
  <mat-option value="server" [disabled]="forceClientStrategies"
53692
53702
  >{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option
@@ -53774,7 +53784,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
53774
53784
 
53775
53785
  <mat-form-field appearance="outline">
53776
53786
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
53777
- <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> }
53778
53789
  <mat-option value="client"
53779
53790
  >{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option
53780
53791
  >
@@ -67845,7 +67856,6 @@ class PraxisTableConfigEditor {
67845
67856
  sorting: {
67846
67857
  enabled: true,
67847
67858
  multiSort: false,
67848
- strategy: 'client',
67849
67859
  showSortIndicators: true,
67850
67860
  indicatorPosition: 'end',
67851
67861
  allowClearSort: true,
@@ -67864,7 +67874,6 @@ class PraxisTableConfigEditor {
67864
67874
  showPageInfo: true,
67865
67875
  position: 'bottom',
67866
67876
  style: 'default',
67867
- strategy: 'client',
67868
67877
  },
67869
67878
  },
67870
67879
  toolbar: {
@@ -73493,11 +73502,11 @@ class PraxisTableInlineAuthoringEditorComponent {
73493
73502
  pageSize = 10;
73494
73503
  pageSizeOptionsText = '5, 10, 25, 50';
73495
73504
  showFirstLastButtons = true;
73496
- paginationStrategy = 'client';
73505
+ paginationStrategy;
73497
73506
  paginationPosition = 'bottom';
73498
73507
  paginationStyle = 'default';
73499
73508
  sortingEnabled = true;
73500
- sortingStrategy = 'client';
73509
+ sortingStrategy;
73501
73510
  allowClearSort = true;
73502
73511
  defaultSortField = '';
73503
73512
  defaultSortDirection = 'asc';
@@ -73540,11 +73549,11 @@ class PraxisTableInlineAuthoringEditorComponent {
73540
73549
  this.pageSizeOptionsText = this.arrayToString(this.workingConfig.behavior?.pagination?.pageSizeOptions || [5, 10, 25, 50]);
73541
73550
  this.showFirstLastButtons =
73542
73551
  this.workingConfig.behavior?.pagination?.showFirstLastButtons !== false;
73543
- this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy || 'client';
73552
+ this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy;
73544
73553
  this.paginationPosition = this.workingConfig.behavior?.pagination?.position || 'bottom';
73545
73554
  this.paginationStyle = this.workingConfig.behavior?.pagination?.style || 'default';
73546
73555
  this.sortingEnabled = this.workingConfig.behavior?.sorting?.enabled !== false;
73547
- this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy || 'client';
73556
+ this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy;
73548
73557
  this.allowClearSort = this.workingConfig.behavior?.sorting?.allowClearSort !== false;
73549
73558
  this.defaultSortField = this.getDefaultSortField(this.workingConfig);
73550
73559
  this.defaultSortDirection = this.getDefaultSortDirection(this.workingConfig);
@@ -73656,7 +73665,7 @@ class PraxisTableInlineAuthoringEditorComponent {
73656
73665
  this.patchPagination();
73657
73666
  }
73658
73667
  setPaginationStrategy(value) {
73659
- this.paginationStrategy = value || 'client';
73668
+ this.paginationStrategy = value;
73660
73669
  this.patchPagination();
73661
73670
  }
73662
73671
  setPaginationPosition(value) {
@@ -73672,7 +73681,7 @@ class PraxisTableInlineAuthoringEditorComponent {
73672
73681
  this.patchSorting();
73673
73682
  }
73674
73683
  setSortingStrategy(value) {
73675
- this.sortingStrategy = value || 'client';
73684
+ this.sortingStrategy = value;
73676
73685
  this.patchSorting();
73677
73686
  }
73678
73687
  setSortingAllowClear(value) {
@@ -73731,11 +73740,11 @@ class PraxisTableInlineAuthoringEditorComponent {
73731
73740
  this.pageSizeOptionsText = this.arrayToString(this.workingConfig.behavior?.pagination?.pageSizeOptions || [5, 10, 25, 50]);
73732
73741
  this.showFirstLastButtons =
73733
73742
  this.workingConfig.behavior?.pagination?.showFirstLastButtons !== false;
73734
- this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy || 'client';
73743
+ this.paginationStrategy = this.workingConfig.behavior?.pagination?.strategy;
73735
73744
  this.paginationPosition = this.workingConfig.behavior?.pagination?.position || 'bottom';
73736
73745
  this.paginationStyle = this.workingConfig.behavior?.pagination?.style || 'default';
73737
73746
  this.sortingEnabled = this.workingConfig.behavior?.sorting?.enabled !== false;
73738
- this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy || 'client';
73747
+ this.sortingStrategy = this.workingConfig.behavior?.sorting?.strategy;
73739
73748
  this.allowClearSort = this.workingConfig.behavior?.sorting?.allowClearSort !== false;
73740
73749
  this.defaultSortField = this.getDefaultSortField(this.workingConfig);
73741
73750
  this.defaultSortDirection = this.getDefaultSortDirection(this.workingConfig);
@@ -73879,34 +73888,36 @@ class PraxisTableInlineAuthoringEditorComponent {
73879
73888
  this.emitConfig();
73880
73889
  }
73881
73890
  patchPagination() {
73882
- this.patchBehavior({
73883
- pagination: {
73884
- ...(this.workingConfig.behavior?.pagination || {}),
73885
- enabled: this.paginationEnabled,
73886
- pageSize: this.pageSize,
73887
- pageSizeOptions: this.parseNumberList(this.pageSizeOptionsText, [5, 10, 25, 50]),
73888
- showFirstLastButtons: this.showFirstLastButtons,
73889
- showPageNumbers: this.workingConfig.behavior?.pagination?.showPageNumbers ?? true,
73890
- showPageInfo: this.workingConfig.behavior?.pagination?.showPageInfo ?? true,
73891
- position: this.paginationPosition,
73892
- style: this.paginationStyle,
73893
- strategy: this.paginationStrategy,
73894
- },
73895
- });
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 });
73896
73906
  }
73897
73907
  patchSorting() {
73898
- this.patchBehavior({
73899
- sorting: {
73900
- ...(this.workingConfig.behavior?.sorting || {}),
73901
- enabled: this.sortingEnabled,
73902
- strategy: this.sortingStrategy,
73903
- allowClearSort: this.allowClearSort,
73904
- multiSort: this.workingConfig.behavior?.sorting?.multiSort ?? false,
73905
- showSortIndicators: this.workingConfig.behavior?.sorting?.showSortIndicators ?? true,
73906
- indicatorPosition: this.workingConfig.behavior?.sorting?.indicatorPosition || 'end',
73907
- defaultSort: this.buildDefaultSort(),
73908
- },
73909
- });
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 });
73910
73921
  }
73911
73922
  patchMessages(patch) {
73912
73923
  this.workingConfig = {
@@ -74248,10 +74259,12 @@ class PraxisTableInlineAuthoringEditorComponent {
74248
74259
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
74249
74260
  <mat-select
74250
74261
  data-testid="table-inline-editor-pagination-strategy"
74262
+ [canSelectNullableOptions]="true"
74251
74263
  [ngModel]="paginationStrategy"
74252
74264
  (ngModelChange)="setPaginationStrategy($event)"
74253
74265
  [disabled]="readonly || !paginationEnabled"
74254
74266
  >
74267
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74255
74268
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
74256
74269
  <mat-option value="server">{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option>
74257
74270
  </mat-select>
@@ -74299,10 +74312,12 @@ class PraxisTableInlineAuthoringEditorComponent {
74299
74312
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
74300
74313
  <mat-select
74301
74314
  data-testid="table-inline-editor-sorting-strategy"
74315
+ [canSelectNullableOptions]="true"
74302
74316
  [ngModel]="sortingStrategy"
74303
74317
  (ngModelChange)="setSortingStrategy($event)"
74304
74318
  [disabled]="readonly || !sortingEnabled"
74305
74319
  >
74320
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74306
74321
  <mat-option value="client">{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option>
74307
74322
  <mat-option value="server">{{ tx('behavior.sorting.strategy.server', 'Server (remote sorting)') }}</mat-option>
74308
74323
  </mat-select>
@@ -74731,10 +74746,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
74731
74746
  <mat-label>{{ tx('behavior.pagination.strategy', 'Pagination strategy') }}</mat-label>
74732
74747
  <mat-select
74733
74748
  data-testid="table-inline-editor-pagination-strategy"
74749
+ [canSelectNullableOptions]="true"
74734
74750
  [ngModel]="paginationStrategy"
74735
74751
  (ngModelChange)="setPaginationStrategy($event)"
74736
74752
  [disabled]="readonly || !paginationEnabled"
74737
74753
  >
74754
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74738
74755
  <mat-option value="client">{{ tx('behavior.pagination.strategy.client', 'Client (local data)') }}</mat-option>
74739
74756
  <mat-option value="server">{{ tx('behavior.pagination.strategy.server', 'Server (remote pagination)') }}</mat-option>
74740
74757
  </mat-select>
@@ -74782,10 +74799,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
74782
74799
  <mat-label>{{ tx('behavior.sorting.strategy', 'Sorting strategy') }}</mat-label>
74783
74800
  <mat-select
74784
74801
  data-testid="table-inline-editor-sorting-strategy"
74802
+ [canSelectNullableOptions]="true"
74785
74803
  [ngModel]="sortingStrategy"
74786
74804
  (ngModelChange)="setSortingStrategy($event)"
74787
74805
  [disabled]="readonly || !sortingEnabled"
74788
74806
  >
74807
+ <mat-option [value]="undefined">{{ tx('behavior.strategy.auto', 'Automatic (by data source)') }}</mat-option>
74789
74808
  <mat-option value="client">{{ tx('behavior.sorting.strategy.client', 'Client (local sorting)') }}</mat-option>
74790
74809
  <mat-option value="server">{{ tx('behavior.sorting.strategy.server', 'Server (remote sorting)') }}</mat-option>
74791
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-DFhDGXIx.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-DFhDGXIx.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-DFhDGXIx.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.10",
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.10",
10
- "@praxisui/core": "^10.0.0-rc.10",
11
- "@praxisui/dynamic-fields": "^10.0.0-rc.10",
12
- "@praxisui/dynamic-form": "^10.0.0-rc.10",
13
- "@praxisui/metadata-editor": "^10.0.0-rc.10",
14
- "@praxisui/rich-content": "^10.0.0-rc.10",
15
- "@praxisui/settings-panel": "^10.0.0-rc.10",
16
- "@praxisui/table-rule-builder": "^10.0.0-rc.10",
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.10",
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;