cax-design-system 2.4.1 → 2.6.0

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.
Files changed (107) hide show
  1. package/README.md +1 -1
  2. package/api/confirmation.d.ts +5 -0
  3. package/autocomplete/autocomplete.d.ts +5 -3
  4. package/button/button.directive.d.ts +5 -2
  5. package/chips/chips.d.ts +12 -1
  6. package/chips/chips.module.d.ts +2 -1
  7. package/confirmdialog/confirmdialog.d.ts +9 -1
  8. package/dialog/dialog.d.ts +4 -0
  9. package/esm2022/api/confirmation.mjs +1 -1
  10. package/esm2022/autocomplete/autocomplete.mjs +12 -8
  11. package/esm2022/button/button.directive.mjs +36 -4
  12. package/esm2022/button/button.mjs +2 -2
  13. package/esm2022/calendar/calendar.mjs +4 -4
  14. package/esm2022/chips/chips.mjs +56 -17
  15. package/esm2022/chips/chips.module.mjs +5 -4
  16. package/esm2022/confirmdialog/confirmdialog.mjs +31 -6
  17. package/esm2022/dialog/dialog.mjs +18 -3
  18. package/esm2022/dropdown/dropdown.mjs +3 -3
  19. package/esm2022/dynamicdialog/dynamicdialog.mjs +3 -3
  20. package/esm2022/inputgroup/inputgroup.mjs +10 -3
  21. package/esm2022/inputnumber/inputnumber.mjs +2 -2
  22. package/esm2022/inputtext/inputtext.component.mjs +2 -2
  23. package/esm2022/navigation/navigation.interface.mjs +1 -1
  24. package/esm2022/navigation/navigation.mjs +78 -17
  25. package/esm2022/selectbutton/public_api.mjs +2 -1
  26. package/esm2022/selectbutton/selectbutton.mjs +11 -86
  27. package/esm2022/selectbutton/selectbutton.module.mjs +21 -0
  28. package/esm2022/sidebar/sidebar.mjs +10 -3
  29. package/esm2022/speeddial/speeddial.mjs +1 -1
  30. package/esm2022/splitbutton/splitbutton.mjs +4 -4
  31. package/esm2022/table/components/column-filter/column-filter.mjs +146 -7
  32. package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +8 -7
  33. package/esm2022/table/components/sort-icon/sort-icon.mjs +7 -7
  34. package/esm2022/table/directives/sortable-column.directive.mjs +6 -6
  35. package/esm2022/table/table.mjs +114 -77
  36. package/esm2022/tableconfiguration/tableconfiguration.mjs +3 -3
  37. package/esm2022/tabview/tabview.mjs +31 -3
  38. package/esm2022/tabview/tabview.module.mjs +5 -4
  39. package/esm2022/timeline/timeline.mjs +2 -2
  40. package/esm2022/tooltip/tooltip.module.mjs +6 -4
  41. package/fesm2022/cax-design-system-autocomplete.mjs +11 -7
  42. package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -1
  43. package/fesm2022/cax-design-system-button.mjs +36 -4
  44. package/fesm2022/cax-design-system-button.mjs.map +1 -1
  45. package/fesm2022/cax-design-system-calendar.mjs +3 -3
  46. package/fesm2022/cax-design-system-calendar.mjs.map +1 -1
  47. package/fesm2022/cax-design-system-chips.mjs +58 -19
  48. package/fesm2022/cax-design-system-chips.mjs.map +1 -1
  49. package/fesm2022/cax-design-system-confirmdialog.mjs +31 -6
  50. package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -1
  51. package/fesm2022/cax-design-system-dialog.mjs +17 -2
  52. package/fesm2022/cax-design-system-dialog.mjs.map +1 -1
  53. package/fesm2022/cax-design-system-dropdown.mjs +2 -2
  54. package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
  55. package/fesm2022/cax-design-system-dynamicdialog.mjs +2 -2
  56. package/fesm2022/cax-design-system-dynamicdialog.mjs.map +1 -1
  57. package/fesm2022/cax-design-system-inputgroup.mjs +9 -2
  58. package/fesm2022/cax-design-system-inputgroup.mjs.map +1 -1
  59. package/fesm2022/cax-design-system-inputnumber.mjs +1 -1
  60. package/fesm2022/cax-design-system-inputnumber.mjs.map +1 -1
  61. package/fesm2022/cax-design-system-inputtext.mjs +1 -1
  62. package/fesm2022/cax-design-system-inputtext.mjs.map +1 -1
  63. package/fesm2022/cax-design-system-navigation.mjs +77 -16
  64. package/fesm2022/cax-design-system-navigation.mjs.map +1 -1
  65. package/fesm2022/cax-design-system-selectbutton.mjs +12 -70
  66. package/fesm2022/cax-design-system-selectbutton.mjs.map +1 -1
  67. package/fesm2022/cax-design-system-sidebar.mjs +9 -2
  68. package/fesm2022/cax-design-system-sidebar.mjs.map +1 -1
  69. package/fesm2022/cax-design-system-speeddial.mjs +1 -1
  70. package/fesm2022/cax-design-system-speeddial.mjs.map +1 -1
  71. package/fesm2022/cax-design-system-splitbutton.mjs +3 -3
  72. package/fesm2022/cax-design-system-splitbutton.mjs.map +1 -1
  73. package/fesm2022/cax-design-system-table.mjs +270 -99
  74. package/fesm2022/cax-design-system-table.mjs.map +1 -1
  75. package/fesm2022/cax-design-system-tableconfiguration.mjs +2 -2
  76. package/fesm2022/cax-design-system-tableconfiguration.mjs.map +1 -1
  77. package/fesm2022/cax-design-system-tabview.mjs +34 -5
  78. package/fesm2022/cax-design-system-tabview.mjs.map +1 -1
  79. package/fesm2022/cax-design-system-timeline.mjs +2 -2
  80. package/fesm2022/cax-design-system-timeline.mjs.map +1 -1
  81. package/fesm2022/cax-design-system-tooltip.mjs +5 -3
  82. package/fesm2022/cax-design-system-tooltip.mjs.map +1 -1
  83. package/inputgroup/inputgroup.d.ts +6 -1
  84. package/navigation/navigation.d.ts +12 -7
  85. package/navigation/navigation.interface.d.ts +8 -5
  86. package/package.json +190 -190
  87. package/resources/cax.min.scss +1 -1
  88. package/resources/cax.scss +1088 -593
  89. package/resources/components/autocomplete/autocomplete.scss +77 -6
  90. package/resources/components/calendar/calendar.scss +9 -10
  91. package/resources/components/chips/chips.scss +110 -62
  92. package/resources/components/dialog/dialog.scss +2 -2
  93. package/resources/components/dropdown/dropdown.scss +6 -0
  94. package/resources/components/table/table.scss +50 -2
  95. package/resources/components/tabview/tabview.scss +19 -1
  96. package/resources/components/timeline/timeline.scss +4 -10
  97. package/selectbutton/public_api.d.ts +1 -0
  98. package/selectbutton/selectbutton.d.ts +2 -10
  99. package/selectbutton/selectbutton.module.d.ts +11 -0
  100. package/sidebar/sidebar.d.ts +8 -1
  101. package/splitbutton/splitbutton.d.ts +2 -2
  102. package/table/components/column-filter/column-filter.d.ts +30 -0
  103. package/table/directives/sortable-column.directive.d.ts +2 -2
  104. package/table/table.d.ts +3 -2
  105. package/tabview/tabview.d.ts +10 -1
  106. package/tabview/tabview.module.d.ts +2 -1
  107. package/tooltip/tooltip.module.d.ts +3 -1
@@ -16,25 +16,26 @@ import { PaginatorModule } from 'cax-design-system/paginator';
16
16
  import { Subject } from 'rxjs';
17
17
  import * as i3$1 from '@angular/platform-browser';
18
18
  import { trigger, transition, style, animate } from '@angular/animations';
19
- import * as i4 from '@angular/forms';
19
+ import * as i5$1 from '@angular/forms';
20
20
  import { FormsModule } from '@angular/forms';
21
- import * as i5$1 from 'cax-design-system/calendar';
21
+ import * as i6$1 from 'cax-design-system/calendar';
22
22
  import { CalendarModule } from 'cax-design-system/calendar';
23
- import * as i6$1 from 'cax-design-system/inputnumber';
23
+ import * as i7 from 'cax-design-system/inputnumber';
24
24
  import { InputNumberModule } from 'cax-design-system/inputnumber';
25
+ import * as i4 from 'cax-design-system/inputtext';
25
26
  import { InputTextModule } from 'cax-design-system/inputtext';
26
- import * as i7 from 'cax-design-system/tristatecheckbox';
27
+ import * as i8 from 'cax-design-system/tristatecheckbox';
27
28
  import { TriStateCheckboxModule } from 'cax-design-system/tristatecheckbox';
28
- import { FilterIcon } from 'cax-design-system/icons/filter';
29
29
  import { FilterSlashIcon } from 'cax-design-system/icons/filterslash';
30
30
  import * as i4$1 from 'cax-design-system/dropdown';
31
31
  import { DropdownModule } from 'cax-design-system/dropdown';
32
+ import * as i6$2 from 'cax-design-system/button';
32
33
  import { ButtonModule } from 'cax-design-system/button';
33
34
  import { TrashIcon } from 'cax-design-system/icons/trash';
34
35
  import { PlusIcon } from 'cax-design-system/icons/plus';
35
- import { SortAltIcon } from 'cax-design-system/icons/sortalt';
36
- import { SortAmountDownIcon } from 'cax-design-system/icons/sortamountdown';
37
- import { SortAmountUpAltIcon } from 'cax-design-system/icons/sortamountupalt';
36
+ import { RadioButtonModule } from 'cax-design-system/radiobutton';
37
+ import * as i7$1 from 'cax-design-system/divider';
38
+ import { DividerModule } from 'cax-design-system/divider';
38
39
  import { CheckIcon } from 'cax-design-system/icons/check';
39
40
 
40
41
  class TableService {
@@ -347,7 +348,7 @@ class Table {
347
348
  * Defines whether sorting works on single column or on multiple columns.
348
349
  * @group Props
349
350
  */
350
- sortMode = 'single';
351
+ sortMode = 'custom';
351
352
  /**
352
353
  * When true, resets paginator to first page after sorting. Available only when sortMode is set to single.
353
354
  * @group Props
@@ -1248,6 +1249,23 @@ class Table {
1248
1249
  }
1249
1250
  this.sortSingle();
1250
1251
  }
1252
+ else if (this.sortMode === 'custom') {
1253
+ const nextSortOrder = (current) => {
1254
+ switch (current) {
1255
+ case 0:
1256
+ return 1;
1257
+ case 1:
1258
+ return -1;
1259
+ case -1:
1260
+ return 0;
1261
+ default:
1262
+ return 1; // fallback to default if somehow invalid
1263
+ }
1264
+ };
1265
+ this._sortOrder = this.sortField === event.field ? nextSortOrder(this._sortOrder) : this.defaultSortOrder;
1266
+ this._sortField = event.field;
1267
+ this.sortCustom();
1268
+ }
1251
1269
  if (this.sortMode === 'multiple') {
1252
1270
  let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;
1253
1271
  let sortMeta = this.getSortMeta(event.field);
@@ -1338,6 +1356,16 @@ class Table {
1338
1356
  this.tableService.onSort(sortMeta);
1339
1357
  }
1340
1358
  }
1359
+ sortCustom() {
1360
+ let field = this.sortField || this.groupRowsBy;
1361
+ let order = this.sortField ? this.sortOrder : this.groupRowsByOrder;
1362
+ let sortMeta = {
1363
+ field: field,
1364
+ order: order
1365
+ };
1366
+ this.onSort.emit(sortMeta);
1367
+ this.tableService.onSort(sortMeta);
1368
+ }
1341
1369
  sortMultiple() {
1342
1370
  if (this.groupRowsBy) {
1343
1371
  if (!this._multiSortMeta)
@@ -1410,6 +1438,9 @@ class Table {
1410
1438
  }
1411
1439
  return sorted;
1412
1440
  }
1441
+ else if (this.sortMode === 'custom') {
1442
+ return this.sortField && this.sortField === field;
1443
+ }
1413
1444
  }
1414
1445
  handleRowClick(event) {
1415
1446
  let target = event.originalEvent.target;
@@ -1776,96 +1807,103 @@ class Table {
1776
1807
  }
1777
1808
  return true;
1778
1809
  }
1779
- _filter() {
1780
- if (!this.restoringFilter) {
1781
- this.first = 0;
1782
- this.firstChange.emit(this.first);
1783
- }
1784
- if (this.lazy) {
1785
- this.onLazyLoad.emit(this.createLazyLoadMetadata());
1810
+ _filter(display) {
1811
+ if (display === 'custom') {
1812
+ this.onFilter.emit({
1813
+ filters: this.filters
1814
+ });
1786
1815
  }
1787
1816
  else {
1788
- if (!this.value) {
1789
- return;
1817
+ if (!this.restoringFilter) {
1818
+ this.first = 0;
1819
+ this.firstChange.emit(this.first);
1790
1820
  }
1791
- if (!this.hasFilter()) {
1792
- this.filteredValue = null;
1793
- if (this.paginator) {
1794
- this.totalRecords = this.value ? this.value.length : 0;
1795
- }
1821
+ if (this.lazy) {
1822
+ this.onLazyLoad.emit(this.createLazyLoadMetadata());
1796
1823
  }
1797
1824
  else {
1798
- let globalFilterFieldsArray;
1799
- if (this.filters['global']) {
1800
- if (!this.columns && !this.globalFilterFields)
1801
- throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
1802
- else
1803
- globalFilterFieldsArray = this.globalFilterFields || this.columns;
1825
+ if (!this.value) {
1826
+ return;
1804
1827
  }
1805
- this.filteredValue = [];
1806
- for (let i = 0; i < this.value.length; i++) {
1807
- let localMatch = true;
1808
- let globalMatch = false;
1809
- let localFiltered = false;
1810
- for (let prop in this.filters) {
1811
- if (this.filters.hasOwnProperty(prop) && prop !== 'global') {
1812
- localFiltered = true;
1813
- let filterField = prop;
1814
- let filterMeta = this.filters[filterField];
1815
- if (Array.isArray(filterMeta)) {
1816
- for (let meta of filterMeta) {
1817
- localMatch = this.executeLocalFilter(filterField, this.value[i], meta);
1818
- if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {
1819
- break;
1828
+ if (!this.hasFilter()) {
1829
+ this.filteredValue = null;
1830
+ if (this.paginator) {
1831
+ this.totalRecords = this.value ? this.value.length : 0;
1832
+ }
1833
+ }
1834
+ else {
1835
+ let globalFilterFieldsArray;
1836
+ if (this.filters['global']) {
1837
+ if (!this.columns && !this.globalFilterFields)
1838
+ throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
1839
+ else
1840
+ globalFilterFieldsArray = this.globalFilterFields || this.columns;
1841
+ }
1842
+ this.filteredValue = [];
1843
+ for (let i = 0; i < this.value.length; i++) {
1844
+ let localMatch = true;
1845
+ let globalMatch = false;
1846
+ let localFiltered = false;
1847
+ for (let prop in this.filters) {
1848
+ if (this.filters.hasOwnProperty(prop) && prop !== 'global') {
1849
+ localFiltered = true;
1850
+ let filterField = prop;
1851
+ let filterMeta = this.filters[filterField];
1852
+ if (Array.isArray(filterMeta)) {
1853
+ for (let meta of filterMeta) {
1854
+ localMatch = this.executeLocalFilter(filterField, this.value[i], meta);
1855
+ if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {
1856
+ break;
1857
+ }
1820
1858
  }
1821
1859
  }
1822
- }
1823
- else {
1824
- localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);
1825
- }
1826
- if (!localMatch) {
1827
- break;
1860
+ else {
1861
+ localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);
1862
+ }
1863
+ if (!localMatch) {
1864
+ break;
1865
+ }
1828
1866
  }
1829
1867
  }
1830
- }
1831
- if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {
1832
- for (let j = 0; j < globalFilterFieldsArray.length; j++) {
1833
- let globalFilterField = globalFilterFieldsArray[j].field || globalFilterFieldsArray[j];
1834
- globalMatch = this.filterService.filters[this.filters['global'].matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), this.filters['global'].value, this.filterLocale);
1835
- if (globalMatch) {
1836
- break;
1868
+ if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {
1869
+ for (let j = 0; j < globalFilterFieldsArray.length; j++) {
1870
+ let globalFilterField = globalFilterFieldsArray[j].field || globalFilterFieldsArray[j];
1871
+ globalMatch = this.filterService.filters[this.filters['global'].matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), this.filters['global'].value, this.filterLocale);
1872
+ if (globalMatch) {
1873
+ break;
1874
+ }
1837
1875
  }
1838
1876
  }
1877
+ let matches;
1878
+ if (this.filters['global']) {
1879
+ matches = localFiltered ? localFiltered && localMatch && globalMatch : globalMatch;
1880
+ }
1881
+ else {
1882
+ matches = localFiltered && localMatch;
1883
+ }
1884
+ if (matches) {
1885
+ this.filteredValue.push(this.value[i]);
1886
+ }
1839
1887
  }
1840
- let matches;
1841
- if (this.filters['global']) {
1842
- matches = localFiltered ? localFiltered && localMatch && globalMatch : globalMatch;
1843
- }
1844
- else {
1845
- matches = localFiltered && localMatch;
1888
+ if (this.filteredValue.length === this.value.length) {
1889
+ this.filteredValue = null;
1846
1890
  }
1847
- if (matches) {
1848
- this.filteredValue.push(this.value[i]);
1891
+ if (this.paginator) {
1892
+ this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;
1849
1893
  }
1850
1894
  }
1851
- if (this.filteredValue.length === this.value.length) {
1852
- this.filteredValue = null;
1853
- }
1854
- if (this.paginator) {
1855
- this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;
1856
- }
1857
1895
  }
1858
- }
1859
- this.onFilter.emit({
1860
- filters: this.filters,
1861
- filteredValue: this.filteredValue || this.value
1862
- });
1863
- this.tableService.onValueChange(this.value);
1864
- if (this.isStateful() && !this.restoringFilter) {
1865
- this.saveState();
1866
- }
1867
- if (this.restoringFilter) {
1868
- this.restoringFilter = false;
1896
+ this.onFilter.emit({
1897
+ filters: this.filters,
1898
+ filteredValue: this.filteredValue || this.value
1899
+ });
1900
+ this.tableService.onValueChange(this.value);
1901
+ if (this.isStateful() && !this.restoringFilter) {
1902
+ this.saveState();
1903
+ }
1904
+ if (this.restoringFilter) {
1905
+ this.restoringFilter = false;
1906
+ }
1869
1907
  }
1870
1908
  this.cd.markForCheck();
1871
1909
  if (this.scrollable) {
@@ -2644,13 +2682,13 @@ class Table {
2644
2682
  .trim();
2645
2683
  }
2646
2684
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Table, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: TableService }, { token: i0.ChangeDetectorRef }, { token: i2.FilterService }, { token: i2.OverlayService }, { token: i2.caxConfig }, { token: i3$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
2647
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Table, isStandalone: true, selector: "cax-table", inputs: { fontSize: "fontSize", rowSize: "rowSize", frozenColumns: "frozenColumns", frozenValue: "frozenValue", style: "style", styleClass: "styleClass", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", paginator: ["paginator", "paginator", booleanAttribute], pageLinks: ["pageLinks", "pageLinks", numberAttribute], rowsPerPageOptions: "rowsPerPageOptions", alwaysShowPaginator: ["alwaysShowPaginator", "alwaysShowPaginator", booleanAttribute], paginatorPosition: "paginatorPosition", paginatorStyleClass: "paginatorStyleClass", paginatorDropdownAppendTo: "paginatorDropdownAppendTo", paginatorDropdownScrollHeight: "paginatorDropdownScrollHeight", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: ["showCurrentPageReport", "showCurrentPageReport", booleanAttribute], showJumpToPageDropdown: ["showJumpToPageDropdown", "showJumpToPageDropdown", booleanAttribute], showJumpToPageInput: ["showJumpToPageInput", "showJumpToPageInput", booleanAttribute], showFirstLastIcon: ["showFirstLastIcon", "showFirstLastIcon", booleanAttribute], showPageLinks: ["showPageLinks", "showPageLinks", booleanAttribute], defaultSortOrder: ["defaultSortOrder", "defaultSortOrder", numberAttribute], sortMode: "sortMode", resetPageOnSort: ["resetPageOnSort", "resetPageOnSort", booleanAttribute], selectionMode: "selectionMode", selectionPageOnly: ["selectionPageOnly", "selectionPageOnly", booleanAttribute], contextMenuSelection: "contextMenuSelection", contextMenuSelectionMode: "contextMenuSelectionMode", dataKey: "dataKey", metaKeySelection: ["metaKeySelection", "metaKeySelection", booleanAttribute], rowSelectable: "rowSelectable", rowTrackBy: "rowTrackBy", lazy: ["lazy", "lazy", booleanAttribute], lazyLoadOnInit: ["lazyLoadOnInit", "lazyLoadOnInit", booleanAttribute], compareSelectionBy: "compareSelectionBy", csvSeparator: "csvSeparator", exportFilename: "exportFilename", filters: "filters", globalFilterFields: "globalFilterFields", filterDelay: ["filterDelay", "filterDelay", numberAttribute], filterLocale: "filterLocale", expandedRowKeys: "expandedRowKeys", editingRowKeys: "editingRowKeys", rowExpandMode: "rowExpandMode", scrollable: ["scrollable", "scrollable", booleanAttribute], scrollDirection: "scrollDirection", rowGroupMode: "rowGroupMode", scrollHeight: "scrollHeight", virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", virtualScrollDelay: ["virtualScrollDelay", "virtualScrollDelay", numberAttribute], frozenWidth: "frozenWidth", responsive: "responsive", contextMenu: "contextMenu", resizableColumns: ["resizableColumns", "resizableColumns", booleanAttribute], columnResizeMode: "columnResizeMode", reorderableColumns: ["reorderableColumns", "reorderableColumns", booleanAttribute], loading: ["loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", showLoader: ["showLoader", "showLoader", booleanAttribute], rowHover: ["rowHover", "rowHover", booleanAttribute], customSort: ["customSort", "customSort", booleanAttribute], showInitialSortBadge: ["showInitialSortBadge", "showInitialSortBadge", booleanAttribute], autoLayout: ["autoLayout", "autoLayout", booleanAttribute], exportFunction: "exportFunction", exportHeader: "exportHeader", stateKey: "stateKey", stateStorage: "stateStorage", editMode: "editMode", groupRowsBy: "groupRowsBy", groupRowsByOrder: ["groupRowsByOrder", "groupRowsByOrder", numberAttribute], responsiveLayout: "responsiveLayout", breakpoint: "breakpoint", paginatorLocale: "paginatorLocale", value: "value", columns: "columns", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", multiSortMeta: "multiSortMeta", selection: "selection", selectAll: "selectAll", virtualRowHeight: "virtualRowHeight" }, outputs: { contextMenuSelectionChange: "contextMenuSelectionChange", selectAllChange: "selectAllChange", selectionChange: "selectionChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", onPage: "onPage", onSort: "onSort", onFilter: "onFilter", onLazyLoad: "onLazyLoad", onRowExpand: "onRowExpand", onRowCollapse: "onRowCollapse", onContextMenuSelect: "onContextMenuSelect", onColResize: "onColResize", onColReorder: "onColReorder", onRowReorder: "onRowReorder", onEditInit: "onEditInit", onEditComplete: "onEditComplete", onEditCancel: "onEditCancel", onHeaderCheckboxToggle: "onHeaderCheckboxToggle", sortFunction: "sortFunction", firstChange: "firstChange", rowsChange: "rowsChange", onStateSave: "onStateSave", onStateRestore: "onStateRestore" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "resizeHelperViewChild", first: true, predicate: ["resizeHelper"], descendants: true }, { propertyName: "reorderIndicatorUpViewChild", first: true, predicate: ["reorderIndicatorUp"], descendants: true }, { propertyName: "reorderIndicatorDownViewChild", first: true, predicate: ["reorderIndicatorDown"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "tableViewChild", first: true, predicate: ["table"], descendants: true }, { propertyName: "tableHeaderViewChild", first: true, predicate: ["thead"], descendants: true }, { propertyName: "tableFooterViewChild", first: true, predicate: ["tfoot"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"getTableClasses()\" [attr.id]=\"id\">\r\n <div class=\"cax-datatable-loading-overlay cax-component-overlay\" *ngIf=\"loading && showLoader\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-datatable-loading-icon ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-datatable-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-datatable-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"captionTemplate\" class=\"cax-datatable-header\">\r\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\r\n </div>\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-top')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div #wrapper class=\"cax-datatable-wrapper\" [ngStyle]=\"{ maxHeight: virtualScroll ? '' : scrollHeight }\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"processedData\"\r\n [columns]=\"columns\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualRowHeight\"\r\n [step]=\"rows\"\r\n [delay]=\"lazy ? virtualScrollDelay : 0\"\r\n [inline]=\"true\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyItemLoad($event)\"\r\n [loaderDisabled]=\"true\"\r\n [showSpacer]=\"false\"\r\n [showLoader]=\"loadingBodyTemplate\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: processedData, options: { columns } }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInTable let-items let-scrollerOptions=\"options\">\r\n <table\r\n #table\r\n role=\"table\"\r\n [ngClass]=\"{ 'cax-datatable-table': true, 'cax-datatable-scrollable-table': scrollable, 'cax-datatable-resizable-table': resizableColumns, 'cax-datatable-resizable-table-fit': resizableColumns && columnResizeMode === 'fit' }\"\r\n [class]=\"tableStyleClass\"\r\n [ngStyle]=\"tableStyle\"\r\n [attr.id]=\"id + '-table'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n <thead role=\"rowgroup\" #thead class=\"cax-datatable-thead\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupedTemplate || headerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </thead>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody cax-datatable-frozen-tbody\"\r\n *ngIf=\"frozenValue || frozenBodyTemplate\"\r\n [value]=\"frozenValue\"\r\n [frozenRows]=\"true\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"frozenBodyTemplate\"\r\n [frozen]=\"true\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody\"\r\n [ngClass]=\"scrollerOptions.contentStyleClass\"\r\n [ngStyle]=\"scrollerOptions.contentStyle\"\r\n [value]=\"dataToRender(scrollerOptions.rows)\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"bodyTemplate\"\r\n [scrollerOptions]=\"scrollerOptions\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n *ngIf=\"scrollerOptions.spacerStyle\"\r\n [ngStyle]=\"{ height: 'calc(' + scrollerOptions.spacerStyle.height + ' - ' + scrollerOptions.rows.length * scrollerOptions.itemSize + 'px)' }\"\r\n class=\"cax-datatable-scroller-spacer\"\r\n ></tbody>\r\n <tfoot role=\"rowgroup\" *ngIf=\"footerGroupedTemplate || footerTemplate\" #tfoot class=\"cax-datatable-tfoot\">\r\n <ng-container *ngTemplateOutlet=\"footerGroupedTemplate || footerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </tfoot>\r\n </table>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-bottom')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div *ngIf=\"summaryTemplate\" class=\"cax-datatable-footer\">\r\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\r\n </div>\r\n\r\n <div\r\n #resizeHelper\r\n class=\"cax-column-resizer-helper\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"resizableColumns\"\r\n ></div>\r\n <span\r\n #reorderIndicatorUp\r\n class=\"cax-datatable-reorder-indicator-up\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowDownIcon *ngIf=\"!reorderIndicatorUpIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorUpIconTemplate\"></ng-template>\r\n </span>\r\n <span\r\n #reorderIndicatorDown\r\n class=\"cax-datatable-reorder-indicator-down\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowUpIcon *ngIf=\"!reorderIndicatorDownIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorDownIconTemplate\"></ng-template>\r\n </span>\r\n</div>\r\n", styles: ["@layer cax{.cax-datatable{position:relative}.cax-datatable>.cax-datatable-wrapper{overflow:auto;border-radius:12px}.cax-datatable-wrapper::-webkit-scrollbar{width:8px;height:8px}.cax-datatable-wrapper::-webkit-scrollbar-track{background:#f0f0f0;border-radius:10px}.cax-datatable-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:10px}.cax-datatable-table{border-spacing:0px;width:100%}.cax-datatable .cax-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-datatable .cax-sortable-column .cax-column-title,.cax-datatable .cax-sortable-column .cax-sortable-column-icon,.cax-datatable .cax-sortable-column .cax-sortable-column-badge{vertical-align:middle}.cax-datatable .cax-sortable-column .cax-icon-wrapper{display:inline}.cax-datatable .cax-sortable-column .cax-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.cax-datatable-hoverable-rows .cax-selectable-row{cursor:pointer}.cax-datatable-scrollable>.cax-datatable-wrapper{position:relative}.cax-datatable-scrollable-table>.cax-datatable-thead{position:sticky;top:0;z-index:2}.cax-datatable-scrollable-table>.cax-datatable-frozen-tbody{position:sticky;z-index:1}.cax-datatable-scrollable-table>.cax-datatable-tfoot{position:sticky;bottom:0;z-index:1}.cax-datatable-scrollable .cax-frozen-column{position:sticky;z-index:1}.cax-datatable-scrollable th.cax-frozen-column{z-index:2;background:var(--neutral-75)}.cax-datatable-scrollable td.cax-frozen-column{z-index:1;background:transparent;-webkit-backdrop-filter:blur(80px);backdrop-filter:blur(80px)}.cax-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.cax-datatable-flex-scrollable>.cax-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.cax-datatable-scrollable-table>.cax-datatable-tbody>.cax-rowgroucax-header{position:sticky;z-index:2}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th,.cax-datatable-resizable-table>.cax-datatable-tfoot>tr>td,.cax-datatable-resizable-table>.cax-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th.cax-resizable-column:not(.cax-frozen-column){background-clip:padding-box;position:relative}.cax-datatable-resizable-table-fit>.cax-datatable-thead>tr>th.cax-resizable-column:last-child .cax-column-resizer{display:none}.cax-datatable .cax-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.cax-datatable .cax-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.cax-datatable .cax-row-editor-init,.cax-datatable .cax-row-editor-save,.cax-datatable .cax-row-editor-cancel,.cax-datatable .cax-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-datatable-reorder-indicator-up,.cax-datatable-reorder-indicator-down{position:absolute}.cax-datatable-reorderablerow-handle,[caxReorderableColumn]{cursor:move}.cax-datatable .cax-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3}.cax-column-filter-row{display:flex;align-items:center;width:100%}.cax-column-filter-menu{display:inline-flex}.cax-column-filter-row cax-columnfilterformelement{flex:1 1 auto;width:1%}.cax-column-filter-menu-button,.cax-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.cax-column-filter-overlay{position:absolute;top:0;left:0}.cax-column-filter-row-items{margin:0;padding:0;list-style:none}.cax-column-filter-row-item{cursor:pointer}.cax-column-filter-add-button,.cax-column-filter-remove-button{justify-content:center}.cax-column-filter-add-button .cax-button-label,.cax-column-filter-remove-button .cax-button-label{flex-grow:0}.cax-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between}.cax-column-filter-buttonbar .cax-button{width:auto}.cax-datatable-tbody>tr>td>.cax-column-title{display:none}.cax-datatable-scroller-spacer{display:flex}.cax-datatable .cax-scroller .cax-scroller-loading{transform:none!important;min-height:0;position:sticky;top:0;left:0}}.cax-datatable .cax-editable-column .cax-inputtext{width:100%;box-shadow:none;border:0;padding:0;line-height:normal}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td .cax-inputtext{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:16px;height:16px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td .cax-inputtext{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:18px;height:18px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td .cax-inputtext{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:20px;height:20px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td .cax-inputtext{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:22px;height:22px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:42px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:72px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:88px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:44px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:60px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:78px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:96px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:54px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:66px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:86px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:108px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:70px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:94px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:116px}.cax-cell-highlight-default{border:1px solid var(--primary-500)!important}.cax-cell-highlight-error{border:1px solid var(--error-600)!important}.cax-cell-background-error{background:var(--error-50)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i5.Paginator, selector: "cax-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first", "rightAligned"], outputs: ["onPageChange"] }, { kind: "directive", type: i2.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "component", type: i6.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: ScrollerModule }, { kind: "component", type: ArrowDownIcon, selector: "ArrowDownIcon" }, { kind: "component", type: ArrowUpIcon, selector: "ArrowUpIcon" }, { kind: "component", type: SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: TableBody, selector: "[caxTableBody]", inputs: ["caxTableBody", "caxTableBodyTemplate", "value", "frozen", "frozenRows", "scrollerOptions"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
2685
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Table, isStandalone: true, selector: "cax-table", inputs: { fontSize: "fontSize", rowSize: "rowSize", frozenColumns: "frozenColumns", frozenValue: "frozenValue", style: "style", styleClass: "styleClass", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", paginator: ["paginator", "paginator", booleanAttribute], pageLinks: ["pageLinks", "pageLinks", numberAttribute], rowsPerPageOptions: "rowsPerPageOptions", alwaysShowPaginator: ["alwaysShowPaginator", "alwaysShowPaginator", booleanAttribute], paginatorPosition: "paginatorPosition", paginatorStyleClass: "paginatorStyleClass", paginatorDropdownAppendTo: "paginatorDropdownAppendTo", paginatorDropdownScrollHeight: "paginatorDropdownScrollHeight", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: ["showCurrentPageReport", "showCurrentPageReport", booleanAttribute], showJumpToPageDropdown: ["showJumpToPageDropdown", "showJumpToPageDropdown", booleanAttribute], showJumpToPageInput: ["showJumpToPageInput", "showJumpToPageInput", booleanAttribute], showFirstLastIcon: ["showFirstLastIcon", "showFirstLastIcon", booleanAttribute], showPageLinks: ["showPageLinks", "showPageLinks", booleanAttribute], defaultSortOrder: ["defaultSortOrder", "defaultSortOrder", numberAttribute], sortMode: "sortMode", resetPageOnSort: ["resetPageOnSort", "resetPageOnSort", booleanAttribute], selectionMode: "selectionMode", selectionPageOnly: ["selectionPageOnly", "selectionPageOnly", booleanAttribute], contextMenuSelection: "contextMenuSelection", contextMenuSelectionMode: "contextMenuSelectionMode", dataKey: "dataKey", metaKeySelection: ["metaKeySelection", "metaKeySelection", booleanAttribute], rowSelectable: "rowSelectable", rowTrackBy: "rowTrackBy", lazy: ["lazy", "lazy", booleanAttribute], lazyLoadOnInit: ["lazyLoadOnInit", "lazyLoadOnInit", booleanAttribute], compareSelectionBy: "compareSelectionBy", csvSeparator: "csvSeparator", exportFilename: "exportFilename", filters: "filters", globalFilterFields: "globalFilterFields", filterDelay: ["filterDelay", "filterDelay", numberAttribute], filterLocale: "filterLocale", expandedRowKeys: "expandedRowKeys", editingRowKeys: "editingRowKeys", rowExpandMode: "rowExpandMode", scrollable: ["scrollable", "scrollable", booleanAttribute], scrollDirection: "scrollDirection", rowGroupMode: "rowGroupMode", scrollHeight: "scrollHeight", virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", virtualScrollDelay: ["virtualScrollDelay", "virtualScrollDelay", numberAttribute], frozenWidth: "frozenWidth", responsive: "responsive", contextMenu: "contextMenu", resizableColumns: ["resizableColumns", "resizableColumns", booleanAttribute], columnResizeMode: "columnResizeMode", reorderableColumns: ["reorderableColumns", "reorderableColumns", booleanAttribute], loading: ["loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", showLoader: ["showLoader", "showLoader", booleanAttribute], rowHover: ["rowHover", "rowHover", booleanAttribute], customSort: ["customSort", "customSort", booleanAttribute], showInitialSortBadge: ["showInitialSortBadge", "showInitialSortBadge", booleanAttribute], autoLayout: ["autoLayout", "autoLayout", booleanAttribute], exportFunction: "exportFunction", exportHeader: "exportHeader", stateKey: "stateKey", stateStorage: "stateStorage", editMode: "editMode", groupRowsBy: "groupRowsBy", groupRowsByOrder: ["groupRowsByOrder", "groupRowsByOrder", numberAttribute], responsiveLayout: "responsiveLayout", breakpoint: "breakpoint", paginatorLocale: "paginatorLocale", value: "value", columns: "columns", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", multiSortMeta: "multiSortMeta", selection: "selection", selectAll: "selectAll", virtualRowHeight: "virtualRowHeight" }, outputs: { contextMenuSelectionChange: "contextMenuSelectionChange", selectAllChange: "selectAllChange", selectionChange: "selectionChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", onPage: "onPage", onSort: "onSort", onFilter: "onFilter", onLazyLoad: "onLazyLoad", onRowExpand: "onRowExpand", onRowCollapse: "onRowCollapse", onContextMenuSelect: "onContextMenuSelect", onColResize: "onColResize", onColReorder: "onColReorder", onRowReorder: "onRowReorder", onEditInit: "onEditInit", onEditComplete: "onEditComplete", onEditCancel: "onEditCancel", onHeaderCheckboxToggle: "onHeaderCheckboxToggle", sortFunction: "sortFunction", firstChange: "firstChange", rowsChange: "rowsChange", onStateSave: "onStateSave", onStateRestore: "onStateRestore" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "resizeHelperViewChild", first: true, predicate: ["resizeHelper"], descendants: true }, { propertyName: "reorderIndicatorUpViewChild", first: true, predicate: ["reorderIndicatorUp"], descendants: true }, { propertyName: "reorderIndicatorDownViewChild", first: true, predicate: ["reorderIndicatorDown"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "tableViewChild", first: true, predicate: ["table"], descendants: true }, { propertyName: "tableHeaderViewChild", first: true, predicate: ["thead"], descendants: true }, { propertyName: "tableFooterViewChild", first: true, predicate: ["tfoot"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"getTableClasses()\" [attr.id]=\"id\">\r\n <div class=\"cax-datatable-loading-overlay cax-component-overlay\" *ngIf=\"loading && showLoader\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-datatable-loading-icon ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-datatable-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-datatable-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"captionTemplate\" class=\"cax-datatable-header\">\r\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\r\n </div>\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-top')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div #wrapper class=\"cax-datatable-wrapper\" [ngStyle]=\"{ maxHeight: virtualScroll ? '' : scrollHeight }\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"processedData\"\r\n [columns]=\"columns\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualRowHeight\"\r\n [step]=\"rows\"\r\n [delay]=\"lazy ? virtualScrollDelay : 0\"\r\n [inline]=\"true\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyItemLoad($event)\"\r\n [loaderDisabled]=\"true\"\r\n [showSpacer]=\"false\"\r\n [showLoader]=\"loadingBodyTemplate\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: processedData, options: { columns } }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInTable let-items let-scrollerOptions=\"options\">\r\n <table\r\n #table\r\n role=\"table\"\r\n [ngClass]=\"{ 'cax-datatable-table': true, 'cax-datatable-scrollable-table': scrollable, 'cax-datatable-resizable-table': resizableColumns, 'cax-datatable-resizable-table-fit': resizableColumns && columnResizeMode === 'fit' }\"\r\n [class]=\"tableStyleClass\"\r\n [ngStyle]=\"tableStyle\"\r\n [attr.id]=\"id + '-table'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n <thead role=\"rowgroup\" #thead class=\"cax-datatable-thead\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupedTemplate || headerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </thead>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody cax-datatable-frozen-tbody\"\r\n *ngIf=\"frozenValue || frozenBodyTemplate\"\r\n [value]=\"frozenValue\"\r\n [frozenRows]=\"true\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"frozenBodyTemplate\"\r\n [frozen]=\"true\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody\"\r\n [ngClass]=\"scrollerOptions.contentStyleClass\"\r\n [ngStyle]=\"scrollerOptions.contentStyle\"\r\n [value]=\"dataToRender(scrollerOptions.rows)\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"bodyTemplate\"\r\n [scrollerOptions]=\"scrollerOptions\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n *ngIf=\"scrollerOptions.spacerStyle\"\r\n [ngStyle]=\"{ height: 'calc(' + scrollerOptions.spacerStyle.height + ' - ' + scrollerOptions.rows.length * scrollerOptions.itemSize + 'px)' }\"\r\n class=\"cax-datatable-scroller-spacer\"\r\n ></tbody>\r\n <tfoot role=\"rowgroup\" *ngIf=\"footerGroupedTemplate || footerTemplate\" #tfoot class=\"cax-datatable-tfoot\">\r\n <ng-container *ngTemplateOutlet=\"footerGroupedTemplate || footerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </tfoot>\r\n </table>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-bottom')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div *ngIf=\"summaryTemplate\" class=\"cax-datatable-footer\">\r\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\r\n </div>\r\n\r\n <div\r\n #resizeHelper\r\n class=\"cax-column-resizer-helper\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"resizableColumns\"\r\n ></div>\r\n <span\r\n #reorderIndicatorUp\r\n class=\"cax-datatable-reorder-indicator-up\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowDownIcon *ngIf=\"!reorderIndicatorUpIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorUpIconTemplate\"></ng-template>\r\n </span>\r\n <span\r\n #reorderIndicatorDown\r\n class=\"cax-datatable-reorder-indicator-down\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowUpIcon *ngIf=\"!reorderIndicatorDownIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorDownIconTemplate\"></ng-template>\r\n </span>\r\n</div>\r\n", styles: ["@layer cax{.cax-datatable{position:relative}.cax-datatable>.cax-datatable-wrapper{overflow:auto;border-radius:12px}.cax-datatable-wrapper::-webkit-scrollbar{width:8px;height:8px}.cax-datatable-wrapper::-webkit-scrollbar-track{background:#f0f0f0;border-radius:10px}.cax-datatable-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:10px}.cax-datatable-table{border-spacing:0px;width:100%}.cax-datatable .cax-sortable-column{-webkit-user-select:none;user-select:none}.cax-datatable .cax-sortable-column .cax-column-title,.cax-datatable .cax-sortable-column .cax-sortable-column-icon,.cax-datatable .cax-sortable-column .cax-sortable-column-badge{vertical-align:middle}.cax-datatable .cax-sortable-column .cax-icon-wrapper{display:inline}.cax-datatable .cax-sortable-column .cax-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.cax-datatable-hoverable-rows .cax-selectable-row{cursor:pointer}.cax-datatable-scrollable>.cax-datatable-wrapper{position:relative}.cax-datatable-scrollable-table>.cax-datatable-thead{position:sticky;top:0;z-index:2}.cax-datatable-scrollable-table>.cax-datatable-frozen-tbody{position:sticky;z-index:1}.cax-datatable-scrollable-table>.cax-datatable-tfoot{position:sticky;bottom:0;z-index:1}.cax-datatable-scrollable .cax-frozen-column{position:sticky;z-index:1}.cax-datatable-scrollable th.cax-frozen-column{z-index:2;background:var(--neutral-75)}.cax-datatable-scrollable td.cax-frozen-column{z-index:1;background:transparent;-webkit-backdrop-filter:blur(80px);backdrop-filter:blur(80px)}.cax-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.cax-datatable-flex-scrollable>.cax-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.cax-datatable-scrollable-table>.cax-datatable-tbody>.cax-rowgroucax-header{position:sticky;z-index:2}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th,.cax-datatable-resizable-table>.cax-datatable-tfoot>tr>td,.cax-datatable-resizable-table>.cax-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th.cax-resizable-column:not(.cax-frozen-column){background-clip:padding-box;position:relative}.cax-datatable-resizable-table-fit>.cax-datatable-thead>tr>th.cax-resizable-column:last-child .cax-column-resizer{display:none}.cax-datatable .cax-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.cax-datatable .cax-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.cax-datatable .cax-row-editor-init,.cax-datatable .cax-row-editor-save,.cax-datatable .cax-row-editor-cancel,.cax-datatable .cax-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-datatable-reorder-indicator-up,.cax-datatable-reorder-indicator-down{position:absolute}.cax-datatable-reorderablerow-handle,[caxReorderableColumn]{cursor:move}.cax-datatable .cax-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3}.cax-column-filter-row{display:flex;align-items:center;width:100%}.cax-column-filter-row i{font-size:20px}.cax-column-filter-menu,.cax-column-filter-custom{display:inline-flex;position:relative;float:right}.cax-column-filter-menu i,.cax-column-filter-custom i{font-size:20px}.cax-column-filter-custom-container{padding:16px;display:flex;gap:16px;flex-direction:column}.cax-column-filter-custom-container .cax-column-filter-custom-buttons{display:flex;gap:12px}.cax-column-filter-custom-container .cax-column-filter-custom-buttons cax-button{flex:1}.cax-column-filter-overlay-custom{width:248px}.cax-column-filter-row cax-columnfilterformelement{flex:1 1 auto;width:1%}.cax-column-filter-menu-button,.cax-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.cax-column-filter-overlay{position:absolute;top:0;left:0}.cax-column-filter-row-items{margin:0;padding:0;list-style:none}.cax-column-filter-row-item{cursor:pointer}.cax-column-filter-add-button,.cax-column-filter-remove-button{justify-content:center}.cax-column-filter-add-button .cax-button-label,.cax-column-filter-remove-button .cax-button-label{flex-grow:0}.cax-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.cax-column-filter-buttonbar .cax-button{width:auto}.cax-datatable-tbody>tr>td>.cax-column-title{display:none}.cax-datatable-scroller-spacer{display:flex}.cax-datatable .cax-scroller .cax-scroller-loading{transform:none!important;min-height:0;position:sticky;top:0;left:0}}.cax-datatable .cax-editable-column .cax-inputtext{width:100%;box-shadow:none;border:0;padding:0;line-height:normal}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td .cax-inputtext{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:16px;height:16px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td .cax-inputtext{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:18px;height:18px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td .cax-inputtext{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:20px;height:20px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td .cax-inputtext{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:22px;height:22px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:42px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:72px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:88px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:44px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:60px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:78px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:96px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:54px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:66px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:86px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:108px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:70px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:94px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:116px}.cax-cell-highlight-default{border:1px solid var(--primary-500)!important}.cax-cell-highlight-error{border:1px solid var(--error-600)!important}.cax-cell-background-error{background:var(--error-50)}.cax-sort-icon-button{border:0;width:28px;height:28px;display:flex;background:transparent;cursor:pointer;padding:0;align-items:center;justify-content:center}.cax-sort-icon-button i{font-size:20px}cax-sorticon{float:right;margin-left:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i5.Paginator, selector: "cax-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first", "rightAligned"], outputs: ["onPageChange"] }, { kind: "directive", type: i2.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "component", type: i6.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: ScrollerModule }, { kind: "component", type: ArrowDownIcon, selector: "ArrowDownIcon" }, { kind: "component", type: ArrowUpIcon, selector: "ArrowUpIcon" }, { kind: "component", type: SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: TableBody, selector: "[caxTableBody]", inputs: ["caxTableBody", "caxTableBodyTemplate", "value", "frozen", "frozenRows", "scrollerOptions"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
2648
2686
  }
2649
2687
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Table, decorators: [{
2650
2688
  type: Component,
2651
2689
  args: [{ selector: 'cax-table', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, PaginatorModule, ScrollerModule, ArrowDownIcon, ArrowUpIcon, SpinnerIcon, TableBody], host: {
2652
2690
  class: 'cax-element'
2653
- }, template: "<div #container [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"getTableClasses()\" [attr.id]=\"id\">\r\n <div class=\"cax-datatable-loading-overlay cax-component-overlay\" *ngIf=\"loading && showLoader\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-datatable-loading-icon ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-datatable-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-datatable-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"captionTemplate\" class=\"cax-datatable-header\">\r\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\r\n </div>\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-top')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div #wrapper class=\"cax-datatable-wrapper\" [ngStyle]=\"{ maxHeight: virtualScroll ? '' : scrollHeight }\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"processedData\"\r\n [columns]=\"columns\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualRowHeight\"\r\n [step]=\"rows\"\r\n [delay]=\"lazy ? virtualScrollDelay : 0\"\r\n [inline]=\"true\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyItemLoad($event)\"\r\n [loaderDisabled]=\"true\"\r\n [showSpacer]=\"false\"\r\n [showLoader]=\"loadingBodyTemplate\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: processedData, options: { columns } }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInTable let-items let-scrollerOptions=\"options\">\r\n <table\r\n #table\r\n role=\"table\"\r\n [ngClass]=\"{ 'cax-datatable-table': true, 'cax-datatable-scrollable-table': scrollable, 'cax-datatable-resizable-table': resizableColumns, 'cax-datatable-resizable-table-fit': resizableColumns && columnResizeMode === 'fit' }\"\r\n [class]=\"tableStyleClass\"\r\n [ngStyle]=\"tableStyle\"\r\n [attr.id]=\"id + '-table'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n <thead role=\"rowgroup\" #thead class=\"cax-datatable-thead\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupedTemplate || headerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </thead>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody cax-datatable-frozen-tbody\"\r\n *ngIf=\"frozenValue || frozenBodyTemplate\"\r\n [value]=\"frozenValue\"\r\n [frozenRows]=\"true\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"frozenBodyTemplate\"\r\n [frozen]=\"true\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody\"\r\n [ngClass]=\"scrollerOptions.contentStyleClass\"\r\n [ngStyle]=\"scrollerOptions.contentStyle\"\r\n [value]=\"dataToRender(scrollerOptions.rows)\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"bodyTemplate\"\r\n [scrollerOptions]=\"scrollerOptions\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n *ngIf=\"scrollerOptions.spacerStyle\"\r\n [ngStyle]=\"{ height: 'calc(' + scrollerOptions.spacerStyle.height + ' - ' + scrollerOptions.rows.length * scrollerOptions.itemSize + 'px)' }\"\r\n class=\"cax-datatable-scroller-spacer\"\r\n ></tbody>\r\n <tfoot role=\"rowgroup\" *ngIf=\"footerGroupedTemplate || footerTemplate\" #tfoot class=\"cax-datatable-tfoot\">\r\n <ng-container *ngTemplateOutlet=\"footerGroupedTemplate || footerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </tfoot>\r\n </table>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-bottom')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div *ngIf=\"summaryTemplate\" class=\"cax-datatable-footer\">\r\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\r\n </div>\r\n\r\n <div\r\n #resizeHelper\r\n class=\"cax-column-resizer-helper\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"resizableColumns\"\r\n ></div>\r\n <span\r\n #reorderIndicatorUp\r\n class=\"cax-datatable-reorder-indicator-up\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowDownIcon *ngIf=\"!reorderIndicatorUpIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorUpIconTemplate\"></ng-template>\r\n </span>\r\n <span\r\n #reorderIndicatorDown\r\n class=\"cax-datatable-reorder-indicator-down\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowUpIcon *ngIf=\"!reorderIndicatorDownIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorDownIconTemplate\"></ng-template>\r\n </span>\r\n</div>\r\n", styles: ["@layer cax{.cax-datatable{position:relative}.cax-datatable>.cax-datatable-wrapper{overflow:auto;border-radius:12px}.cax-datatable-wrapper::-webkit-scrollbar{width:8px;height:8px}.cax-datatable-wrapper::-webkit-scrollbar-track{background:#f0f0f0;border-radius:10px}.cax-datatable-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:10px}.cax-datatable-table{border-spacing:0px;width:100%}.cax-datatable .cax-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-datatable .cax-sortable-column .cax-column-title,.cax-datatable .cax-sortable-column .cax-sortable-column-icon,.cax-datatable .cax-sortable-column .cax-sortable-column-badge{vertical-align:middle}.cax-datatable .cax-sortable-column .cax-icon-wrapper{display:inline}.cax-datatable .cax-sortable-column .cax-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.cax-datatable-hoverable-rows .cax-selectable-row{cursor:pointer}.cax-datatable-scrollable>.cax-datatable-wrapper{position:relative}.cax-datatable-scrollable-table>.cax-datatable-thead{position:sticky;top:0;z-index:2}.cax-datatable-scrollable-table>.cax-datatable-frozen-tbody{position:sticky;z-index:1}.cax-datatable-scrollable-table>.cax-datatable-tfoot{position:sticky;bottom:0;z-index:1}.cax-datatable-scrollable .cax-frozen-column{position:sticky;z-index:1}.cax-datatable-scrollable th.cax-frozen-column{z-index:2;background:var(--neutral-75)}.cax-datatable-scrollable td.cax-frozen-column{z-index:1;background:transparent;-webkit-backdrop-filter:blur(80px);backdrop-filter:blur(80px)}.cax-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.cax-datatable-flex-scrollable>.cax-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.cax-datatable-scrollable-table>.cax-datatable-tbody>.cax-rowgroucax-header{position:sticky;z-index:2}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th,.cax-datatable-resizable-table>.cax-datatable-tfoot>tr>td,.cax-datatable-resizable-table>.cax-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th.cax-resizable-column:not(.cax-frozen-column){background-clip:padding-box;position:relative}.cax-datatable-resizable-table-fit>.cax-datatable-thead>tr>th.cax-resizable-column:last-child .cax-column-resizer{display:none}.cax-datatable .cax-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.cax-datatable .cax-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.cax-datatable .cax-row-editor-init,.cax-datatable .cax-row-editor-save,.cax-datatable .cax-row-editor-cancel,.cax-datatable .cax-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-datatable-reorder-indicator-up,.cax-datatable-reorder-indicator-down{position:absolute}.cax-datatable-reorderablerow-handle,[caxReorderableColumn]{cursor:move}.cax-datatable .cax-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3}.cax-column-filter-row{display:flex;align-items:center;width:100%}.cax-column-filter-menu{display:inline-flex}.cax-column-filter-row cax-columnfilterformelement{flex:1 1 auto;width:1%}.cax-column-filter-menu-button,.cax-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.cax-column-filter-overlay{position:absolute;top:0;left:0}.cax-column-filter-row-items{margin:0;padding:0;list-style:none}.cax-column-filter-row-item{cursor:pointer}.cax-column-filter-add-button,.cax-column-filter-remove-button{justify-content:center}.cax-column-filter-add-button .cax-button-label,.cax-column-filter-remove-button .cax-button-label{flex-grow:0}.cax-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between}.cax-column-filter-buttonbar .cax-button{width:auto}.cax-datatable-tbody>tr>td>.cax-column-title{display:none}.cax-datatable-scroller-spacer{display:flex}.cax-datatable .cax-scroller .cax-scroller-loading{transform:none!important;min-height:0;position:sticky;top:0;left:0}}.cax-datatable .cax-editable-column .cax-inputtext{width:100%;box-shadow:none;border:0;padding:0;line-height:normal}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td .cax-inputtext{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:16px;height:16px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td .cax-inputtext{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:18px;height:18px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td .cax-inputtext{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:20px;height:20px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td .cax-inputtext{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:22px;height:22px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:42px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:72px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:88px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:44px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:60px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:78px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:96px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:54px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:66px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:86px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:108px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:70px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:94px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:116px}.cax-cell-highlight-default{border:1px solid var(--primary-500)!important}.cax-cell-highlight-error{border:1px solid var(--error-600)!important}.cax-cell-background-error{background:var(--error-50)}\n"] }]
2691
+ }, template: "<div #container [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"getTableClasses()\" [attr.id]=\"id\">\r\n <div class=\"cax-datatable-loading-overlay cax-component-overlay\" *ngIf=\"loading && showLoader\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-datatable-loading-icon ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-datatable-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-datatable-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"captionTemplate\" class=\"cax-datatable-header\">\r\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\r\n </div>\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-top')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div #wrapper class=\"cax-datatable-wrapper\" [ngStyle]=\"{ maxHeight: virtualScroll ? '' : scrollHeight }\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"processedData\"\r\n [columns]=\"columns\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualRowHeight\"\r\n [step]=\"rows\"\r\n [delay]=\"lazy ? virtualScrollDelay : 0\"\r\n [inline]=\"true\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyItemLoad($event)\"\r\n [loaderDisabled]=\"true\"\r\n [showSpacer]=\"false\"\r\n [showLoader]=\"loadingBodyTemplate\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: processedData, options: { columns } }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInTable let-items let-scrollerOptions=\"options\">\r\n <table\r\n #table\r\n role=\"table\"\r\n [ngClass]=\"{ 'cax-datatable-table': true, 'cax-datatable-scrollable-table': scrollable, 'cax-datatable-resizable-table': resizableColumns, 'cax-datatable-resizable-table-fit': resizableColumns && columnResizeMode === 'fit' }\"\r\n [class]=\"tableStyleClass\"\r\n [ngStyle]=\"tableStyle\"\r\n [attr.id]=\"id + '-table'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n <thead role=\"rowgroup\" #thead class=\"cax-datatable-thead\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupedTemplate || headerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </thead>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody cax-datatable-frozen-tbody\"\r\n *ngIf=\"frozenValue || frozenBodyTemplate\"\r\n [value]=\"frozenValue\"\r\n [frozenRows]=\"true\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"frozenBodyTemplate\"\r\n [frozen]=\"true\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody\"\r\n [ngClass]=\"scrollerOptions.contentStyleClass\"\r\n [ngStyle]=\"scrollerOptions.contentStyle\"\r\n [value]=\"dataToRender(scrollerOptions.rows)\"\r\n [caxTableBody]=\"scrollerOptions.columns\"\r\n [caxTableBodyTemplate]=\"bodyTemplate\"\r\n [scrollerOptions]=\"scrollerOptions\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n *ngIf=\"scrollerOptions.spacerStyle\"\r\n [ngStyle]=\"{ height: 'calc(' + scrollerOptions.spacerStyle.height + ' - ' + scrollerOptions.rows.length * scrollerOptions.itemSize + 'px)' }\"\r\n class=\"cax-datatable-scroller-spacer\"\r\n ></tbody>\r\n <tfoot role=\"rowgroup\" *ngIf=\"footerGroupedTemplate || footerTemplate\" #tfoot class=\"cax-datatable-tfoot\">\r\n <ng-container *ngTemplateOutlet=\"footerGroupedTemplate || footerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </tfoot>\r\n </table>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-bottom')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div *ngIf=\"summaryTemplate\" class=\"cax-datatable-footer\">\r\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\r\n </div>\r\n\r\n <div\r\n #resizeHelper\r\n class=\"cax-column-resizer-helper\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"resizableColumns\"\r\n ></div>\r\n <span\r\n #reorderIndicatorUp\r\n class=\"cax-datatable-reorder-indicator-up\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowDownIcon *ngIf=\"!reorderIndicatorUpIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorUpIconTemplate\"></ng-template>\r\n </span>\r\n <span\r\n #reorderIndicatorDown\r\n class=\"cax-datatable-reorder-indicator-down\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowUpIcon *ngIf=\"!reorderIndicatorDownIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorDownIconTemplate\"></ng-template>\r\n </span>\r\n</div>\r\n", styles: ["@layer cax{.cax-datatable{position:relative}.cax-datatable>.cax-datatable-wrapper{overflow:auto;border-radius:12px}.cax-datatable-wrapper::-webkit-scrollbar{width:8px;height:8px}.cax-datatable-wrapper::-webkit-scrollbar-track{background:#f0f0f0;border-radius:10px}.cax-datatable-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:10px}.cax-datatable-table{border-spacing:0px;width:100%}.cax-datatable .cax-sortable-column{-webkit-user-select:none;user-select:none}.cax-datatable .cax-sortable-column .cax-column-title,.cax-datatable .cax-sortable-column .cax-sortable-column-icon,.cax-datatable .cax-sortable-column .cax-sortable-column-badge{vertical-align:middle}.cax-datatable .cax-sortable-column .cax-icon-wrapper{display:inline}.cax-datatable .cax-sortable-column .cax-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.cax-datatable-hoverable-rows .cax-selectable-row{cursor:pointer}.cax-datatable-scrollable>.cax-datatable-wrapper{position:relative}.cax-datatable-scrollable-table>.cax-datatable-thead{position:sticky;top:0;z-index:2}.cax-datatable-scrollable-table>.cax-datatable-frozen-tbody{position:sticky;z-index:1}.cax-datatable-scrollable-table>.cax-datatable-tfoot{position:sticky;bottom:0;z-index:1}.cax-datatable-scrollable .cax-frozen-column{position:sticky;z-index:1}.cax-datatable-scrollable th.cax-frozen-column{z-index:2;background:var(--neutral-75)}.cax-datatable-scrollable td.cax-frozen-column{z-index:1;background:transparent;-webkit-backdrop-filter:blur(80px);backdrop-filter:blur(80px)}.cax-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.cax-datatable-flex-scrollable>.cax-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.cax-datatable-scrollable-table>.cax-datatable-tbody>.cax-rowgroucax-header{position:sticky;z-index:2}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th,.cax-datatable-resizable-table>.cax-datatable-tfoot>tr>td,.cax-datatable-resizable-table>.cax-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th.cax-resizable-column:not(.cax-frozen-column){background-clip:padding-box;position:relative}.cax-datatable-resizable-table-fit>.cax-datatable-thead>tr>th.cax-resizable-column:last-child .cax-column-resizer{display:none}.cax-datatable .cax-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.cax-datatable .cax-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.cax-datatable .cax-row-editor-init,.cax-datatable .cax-row-editor-save,.cax-datatable .cax-row-editor-cancel,.cax-datatable .cax-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-datatable-reorder-indicator-up,.cax-datatable-reorder-indicator-down{position:absolute}.cax-datatable-reorderablerow-handle,[caxReorderableColumn]{cursor:move}.cax-datatable .cax-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3}.cax-column-filter-row{display:flex;align-items:center;width:100%}.cax-column-filter-row i{font-size:20px}.cax-column-filter-menu,.cax-column-filter-custom{display:inline-flex;position:relative;float:right}.cax-column-filter-menu i,.cax-column-filter-custom i{font-size:20px}.cax-column-filter-custom-container{padding:16px;display:flex;gap:16px;flex-direction:column}.cax-column-filter-custom-container .cax-column-filter-custom-buttons{display:flex;gap:12px}.cax-column-filter-custom-container .cax-column-filter-custom-buttons cax-button{flex:1}.cax-column-filter-overlay-custom{width:248px}.cax-column-filter-row cax-columnfilterformelement{flex:1 1 auto;width:1%}.cax-column-filter-menu-button,.cax-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.cax-column-filter-overlay{position:absolute;top:0;left:0}.cax-column-filter-row-items{margin:0;padding:0;list-style:none}.cax-column-filter-row-item{cursor:pointer}.cax-column-filter-add-button,.cax-column-filter-remove-button{justify-content:center}.cax-column-filter-add-button .cax-button-label,.cax-column-filter-remove-button .cax-button-label{flex-grow:0}.cax-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.cax-column-filter-buttonbar .cax-button{width:auto}.cax-datatable-tbody>tr>td>.cax-column-title{display:none}.cax-datatable-scroller-spacer{display:flex}.cax-datatable .cax-scroller .cax-scroller-loading{transform:none!important;min-height:0;position:sticky;top:0;left:0}}.cax-datatable .cax-editable-column .cax-inputtext{width:100%;box-shadow:none;border:0;padding:0;line-height:normal}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td .cax-inputtext{font-size:12px}.cax-datatable.cax-datatable-font-sm .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:16px;height:16px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td .cax-inputtext{font-size:14px}.cax-datatable.cax-datatable-font-md .cax-datatable-tbody>tr>td cax-tablecheckbox .cax-checkbox .cax-checkbox-box{width:18px;height:18px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td .cax-inputtext{font-size:16px}.cax-datatable.cax-datatable-font-lg .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:20px;height:20px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td .cax-inputtext{font-size:18px}.cax-datatable.cax-datatable-font-xl .cax-datatable-tbody>tr>td cax-tablecheckbox.cax-checkbox .cax-checkbox-box{width:22px;height:22px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:42px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:72px}.cax-datatable.cax-datatable-font-sm.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:88px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:44px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:60px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:78px}.cax-datatable.cax-datatable-font-md.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:96px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:54px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:66px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:86px}.cax-datatable.cax-datatable-font-lg.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:108px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-sm .cax-datatable-tbody>tr>td{height:56px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-md .cax-datatable-tbody>tr>td{height:70px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-lg .cax-datatable-tbody>tr>td{height:94px}.cax-datatable.cax-datatable-font-xl.cax-datatable-row-xl .cax-datatable-tbody>tr>td{height:116px}.cax-cell-highlight-default{border:1px solid var(--primary-500)!important}.cax-cell-highlight-error{border:1px solid var(--error-600)!important}.cax-cell-background-error{background:var(--error-50)}.cax-sort-icon-button{border:0;width:28px;height:28px;display:flex;background:transparent;cursor:pointer;padding:0;align-items:center;justify-content:center}.cax-sort-icon-button i{font-size:20px}cax-sorticon{float:right;margin-left:8px}\n"] }]
2654
2692
  }], ctorParameters: () => [{ type: Document, decorators: [{
2655
2693
  type: Inject,
2656
2694
  args: [DOCUMENT]
@@ -3402,13 +3440,13 @@ class ColumnFilterFormElement {
3402
3440
  }
3403
3441
  }
3404
3442
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ColumnFilterFormElement, deps: [{ token: Table }, { token: ColumnFilter }], target: i0.ɵɵFactoryTarget.Component });
3405
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: ColumnFilterFormElement, isStandalone: true, selector: "cax-columnFilterFormElement", inputs: { field: "field", type: "type", filterConstraint: "filterConstraint", filterTemplate: "filterTemplate", placeholder: "placeholder", minFractionDigits: ["minFractionDigits", "minFractionDigits", (value) => numberAttribute(value, null)], maxFractionDigits: ["maxFractionDigits", "maxFractionDigits", (value) => numberAttribute(value, null)], prefix: "prefix", suffix: "suffix", locale: "locale", localeMatcher: "localeMatcher", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: ["useGrouping", "useGrouping", booleanAttribute], ariaLabel: "ariaLabel" }, host: { classAttribute: "cax-element" }, ngImport: i0, template: "<ng-container *ngIf=\"filterTemplate; else builtInElement\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterTemplate;\r\n context: {\r\n $implicit: filterConstraint.value,\r\n filterCallback: filterCallback,\r\n type: type,\r\n field: field,\r\n filterConstraint: filterConstraint,\r\n placeholder: placeholder,\r\n minFractionDigits: minFractionDigits,\r\n maxFractionDigits: maxFractionDigits,\r\n prefix: prefix,\r\n suffix: suffix,\r\n locale: locale,\r\n localeMatcher: localeMatcher,\r\n currency: currency,\r\n currencyDisplay: currencyDisplay,\r\n useGrouping: useGrouping,\r\n showButtons: showButtons\r\n }\r\n \"\r\n ></ng-container>\r\n</ng-container>\r\n<ng-template #builtInElement>\r\n <ng-container [ngSwitch]=\"type\">\r\n <input *ngSwitchCase=\"'text'\" type=\"text\" [ariaLabel]=\"ariaLabel\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\" (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\" />\r\n <cax-inputNumber\r\n *ngSwitchCase=\"'numeric'\"\r\n [ngModel]=\"filterConstraint?.value\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (onKeyDown)=\"onNumericInputKeyDown($event)\"\r\n [showButtons]=\"showButtons\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [placeholder]=\"placeholder\"\r\n [mode]=\"currency ? 'currency' : 'decimal'\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-inputNumber>\r\n <cax-triStateCheckbox [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></cax-triStateCheckbox>\r\n <cax-calendar [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'date'\" [placeholder]=\"placeholder\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" appendTo=\"body\"></cax-calendar>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i5$1.Calendar, selector: "cax-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "leftIcon", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i6$1.InputNumber, selector: "cax-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefixIcon", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: TriStateCheckboxModule }, { kind: "component", type: i7.TriStateCheckbox, selector: "cax-triStateCheckbox", inputs: ["disabled", "name", "ariaLabel", "ariaLabelledBy", "variant", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon", "autofocus"], outputs: ["onChange"] }], encapsulation: i0.ViewEncapsulation.None });
3443
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: ColumnFilterFormElement, isStandalone: true, selector: "cax-columnFilterFormElement", inputs: { field: "field", type: "type", filterConstraint: "filterConstraint", filterTemplate: "filterTemplate", placeholder: "placeholder", minFractionDigits: ["minFractionDigits", "minFractionDigits", (value) => numberAttribute(value, null)], maxFractionDigits: ["maxFractionDigits", "maxFractionDigits", (value) => numberAttribute(value, null)], prefix: "prefix", suffix: "suffix", locale: "locale", localeMatcher: "localeMatcher", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: ["useGrouping", "useGrouping", booleanAttribute], ariaLabel: "ariaLabel" }, host: { classAttribute: "cax-element" }, ngImport: i0, template: "<ng-container *ngIf=\"filterTemplate; else builtInElement\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterTemplate;\r\n context: {\r\n $implicit: filterConstraint.value,\r\n filterCallback: filterCallback,\r\n type: type,\r\n field: field,\r\n filterConstraint: filterConstraint,\r\n placeholder: placeholder,\r\n minFractionDigits: minFractionDigits,\r\n maxFractionDigits: maxFractionDigits,\r\n prefix: prefix,\r\n suffix: suffix,\r\n locale: locale,\r\n localeMatcher: localeMatcher,\r\n currency: currency,\r\n currencyDisplay: currencyDisplay,\r\n useGrouping: useGrouping,\r\n showButtons: showButtons\r\n }\r\n \"\r\n ></ng-container>\r\n</ng-container>\r\n<ng-template #builtInElement>\r\n <ng-container [ngSwitch]=\"type\">\r\n <input\r\n *ngSwitchCase=\"'text'\"\r\n type=\"text\"\r\n [ariaLabel]=\"ariaLabel\"\r\n caxInputText\r\n [value]=\"filterConstraint?.value\"\r\n (input)=\"onModelChange($event.target.value)\"\r\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\"\r\n [attr.placeholder]=\"placeholder\"\r\n />\r\n <cax-inputNumber\r\n *ngSwitchCase=\"'numeric'\"\r\n [ngModel]=\"filterConstraint?.value\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (onKeyDown)=\"onNumericInputKeyDown($event)\"\r\n [showButtons]=\"showButtons\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [placeholder]=\"placeholder\"\r\n [mode]=\"currency ? 'currency' : 'decimal'\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-inputNumber>\r\n <cax-triStateCheckbox [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></cax-triStateCheckbox>\r\n <cax-calendar [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'date'\" [placeholder]=\"placeholder\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" appendTo=\"body\"></cax-calendar>\r\n </ng-container>\r\n</ng-template>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4.InputtextDirective, selector: "[caxInputText]", inputs: ["placeholder", "disabled", "variant"], outputs: ["valueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i6$1.Calendar, selector: "cax-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "leftIcon", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i7.InputNumber, selector: "cax-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefixIcon", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: TriStateCheckboxModule }, { kind: "component", type: i8.TriStateCheckbox, selector: "cax-triStateCheckbox", inputs: ["disabled", "name", "ariaLabel", "ariaLabelledBy", "variant", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon", "autofocus"], outputs: ["onChange"] }], encapsulation: i0.ViewEncapsulation.None });
3406
3444
  }
3407
3445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ColumnFilterFormElement, decorators: [{
3408
3446
  type: Component,
3409
3447
  args: [{ selector: 'cax-columnFilterFormElement', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, InputTextModule, FormsModule, CalendarModule, InputNumberModule, TriStateCheckboxModule], host: {
3410
3448
  class: 'cax-element'
3411
- }, template: "<ng-container *ngIf=\"filterTemplate; else builtInElement\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterTemplate;\r\n context: {\r\n $implicit: filterConstraint.value,\r\n filterCallback: filterCallback,\r\n type: type,\r\n field: field,\r\n filterConstraint: filterConstraint,\r\n placeholder: placeholder,\r\n minFractionDigits: minFractionDigits,\r\n maxFractionDigits: maxFractionDigits,\r\n prefix: prefix,\r\n suffix: suffix,\r\n locale: locale,\r\n localeMatcher: localeMatcher,\r\n currency: currency,\r\n currencyDisplay: currencyDisplay,\r\n useGrouping: useGrouping,\r\n showButtons: showButtons\r\n }\r\n \"\r\n ></ng-container>\r\n</ng-container>\r\n<ng-template #builtInElement>\r\n <ng-container [ngSwitch]=\"type\">\r\n <input *ngSwitchCase=\"'text'\" type=\"text\" [ariaLabel]=\"ariaLabel\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\" (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\" />\r\n <cax-inputNumber\r\n *ngSwitchCase=\"'numeric'\"\r\n [ngModel]=\"filterConstraint?.value\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (onKeyDown)=\"onNumericInputKeyDown($event)\"\r\n [showButtons]=\"showButtons\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [placeholder]=\"placeholder\"\r\n [mode]=\"currency ? 'currency' : 'decimal'\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-inputNumber>\r\n <cax-triStateCheckbox [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></cax-triStateCheckbox>\r\n <cax-calendar [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'date'\" [placeholder]=\"placeholder\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" appendTo=\"body\"></cax-calendar>\r\n </ng-container>\r\n</ng-template>\r\n" }]
3449
+ }, template: "<ng-container *ngIf=\"filterTemplate; else builtInElement\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterTemplate;\r\n context: {\r\n $implicit: filterConstraint.value,\r\n filterCallback: filterCallback,\r\n type: type,\r\n field: field,\r\n filterConstraint: filterConstraint,\r\n placeholder: placeholder,\r\n minFractionDigits: minFractionDigits,\r\n maxFractionDigits: maxFractionDigits,\r\n prefix: prefix,\r\n suffix: suffix,\r\n locale: locale,\r\n localeMatcher: localeMatcher,\r\n currency: currency,\r\n currencyDisplay: currencyDisplay,\r\n useGrouping: useGrouping,\r\n showButtons: showButtons\r\n }\r\n \"\r\n ></ng-container>\r\n</ng-container>\r\n<ng-template #builtInElement>\r\n <ng-container [ngSwitch]=\"type\">\r\n <input\r\n *ngSwitchCase=\"'text'\"\r\n type=\"text\"\r\n [ariaLabel]=\"ariaLabel\"\r\n caxInputText\r\n [value]=\"filterConstraint?.value\"\r\n (input)=\"onModelChange($event.target.value)\"\r\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\"\r\n [attr.placeholder]=\"placeholder\"\r\n />\r\n <cax-inputNumber\r\n *ngSwitchCase=\"'numeric'\"\r\n [ngModel]=\"filterConstraint?.value\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (onKeyDown)=\"onNumericInputKeyDown($event)\"\r\n [showButtons]=\"showButtons\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [placeholder]=\"placeholder\"\r\n [mode]=\"currency ? 'currency' : 'decimal'\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-inputNumber>\r\n <cax-triStateCheckbox [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></cax-triStateCheckbox>\r\n <cax-calendar [ariaLabel]=\"ariaLabel\" *ngSwitchCase=\"'date'\" [placeholder]=\"placeholder\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" appendTo=\"body\"></cax-calendar>\r\n </ng-container>\r\n</ng-template>\r\n" }]
3412
3450
  }], ctorParameters: () => [{ type: Table }, { type: ColumnFilter }], propDecorators: { field: [{
3413
3451
  type: Input
3414
3452
  }], type: [{
@@ -3466,7 +3504,7 @@ class ColumnFilter {
3466
3504
  * Filter display.
3467
3505
  * @group Props
3468
3506
  */
3469
- display = 'row';
3507
+ display = 'custom';
3470
3508
  /**
3471
3509
  * Decides whether to display filter menu popup.
3472
3510
  * @group Props
@@ -3664,6 +3702,72 @@ class ColumnFilter {
3664
3702
  get filterConstraintAriaLabel() {
3665
3703
  return this.config.translation ? this.config.translation.aria.filterConstraint : undefined;
3666
3704
  }
3705
+ customFilterListVisible = false;
3706
+ selectedCustomFilter;
3707
+ commonFilterOptions = [
3708
+ {
3709
+ label: 'Is empty',
3710
+ key: 'empty'
3711
+ },
3712
+ {
3713
+ label: 'Is filled',
3714
+ key: 'filled'
3715
+ }
3716
+ ];
3717
+ stringFilterOptions = [
3718
+ {
3719
+ label: 'Contains',
3720
+ key: 'contains'
3721
+ },
3722
+ {
3723
+ label: 'Does not contain',
3724
+ key: 'does not contain'
3725
+ },
3726
+ {
3727
+ label: 'Is exactly',
3728
+ key: 'exactly'
3729
+ }
3730
+ ];
3731
+ numberFilterOptions = [
3732
+ {
3733
+ label: 'Greater than',
3734
+ key: 'gt'
3735
+ },
3736
+ {
3737
+ label: 'Less than',
3738
+ key: 'lt'
3739
+ },
3740
+ {
3741
+ label: 'Greater than or equal to',
3742
+ key: 'gte'
3743
+ },
3744
+ {
3745
+ label: 'Less than or equal to',
3746
+ key: 'lte'
3747
+ },
3748
+ {
3749
+ label: 'Greater than and less than',
3750
+ key: 'gtlt'
3751
+ }
3752
+ ];
3753
+ dateFilterOptions = [
3754
+ {
3755
+ label: 'Before',
3756
+ key: 'before'
3757
+ },
3758
+ {
3759
+ label: 'After',
3760
+ key: 'after'
3761
+ },
3762
+ {
3763
+ label: 'Today',
3764
+ key: 'today'
3765
+ }
3766
+ ];
3767
+ customInputFilter = '';
3768
+ customNumberFilter1;
3769
+ customNumberFilter2;
3770
+ customDateFilter;
3667
3771
  constructor(document, el, dt, renderer, config, overlayService, cd) {
3668
3772
  this.document = document;
3669
3773
  this.el = el;
@@ -3731,7 +3835,8 @@ class ColumnFilter {
3731
3835
  }
3732
3836
  initFieldFilterConstraint() {
3733
3837
  let defaultMatchMode = this.getDefaultMatchMode();
3734
- this.dt.filters[this.field] = this.display == 'row' ? { value: null, matchMode: defaultMatchMode } : [{ value: null, matchMode: defaultMatchMode, operator: this.operator }];
3838
+ this.dt.filters[this.field] =
3839
+ this.display == 'row' ? { value: null, matchMode: defaultMatchMode } : this.display == 'custom' ? { value: null, matchMode: null } : [{ value: null, matchMode: defaultMatchMode, operator: this.operator }];
3735
3840
  }
3736
3841
  onMenuMatchModeChange(value, filterMeta) {
3737
3842
  filterMeta.matchMode = value;
@@ -4019,14 +4124,77 @@ class ColumnFilter {
4019
4124
  this.overlaySubscription.unsubscribe();
4020
4125
  }
4021
4126
  }
4127
+ toggleCustomFilterList() {
4128
+ this.customFilterListVisible = !this.customFilterListVisible;
4129
+ }
4130
+ selectCustomFilter(option) {
4131
+ this.customInputFilter = '';
4132
+ this.customNumberFilter1 = undefined;
4133
+ this.customNumberFilter2 = undefined;
4134
+ this.customDateFilter = undefined;
4135
+ this.customFilterListVisible = false;
4136
+ this.selectedCustomFilter = option;
4137
+ }
4138
+ get isCustomCommonFilterSelected() {
4139
+ return this.commonFilterOptions.some((list) => list.key == this.selectedCustomFilter?.key);
4140
+ }
4141
+ get isCustomStringFilterSelected() {
4142
+ return this.stringFilterOptions.some((list) => list.key == this.selectedCustomFilter?.key);
4143
+ }
4144
+ get isCustomNumberFilterSelected() {
4145
+ return this.numberFilterOptions.some((list) => list.key == this.selectedCustomFilter?.key);
4146
+ }
4147
+ get isCustomDateFilterSelected() {
4148
+ return this.dateFilterOptions.some((list) => list.key == this.selectedCustomFilter?.key);
4149
+ }
4150
+ onClearCustomFilters() {
4151
+ this.selectedCustomFilter = undefined;
4152
+ this.customInputFilter = '';
4153
+ this.customNumberFilter1 = undefined;
4154
+ this.customNumberFilter2 = undefined;
4155
+ this.customDateFilter = undefined;
4156
+ }
4157
+ onApplyCustomFilters() {
4158
+ let appliedFilters = undefined;
4159
+ if (this.isCustomCommonFilterSelected) {
4160
+ appliedFilters = {
4161
+ matchMode: this.selectedCustomFilter.key
4162
+ };
4163
+ }
4164
+ else if (this.isCustomStringFilterSelected) {
4165
+ appliedFilters = {
4166
+ matchMode: this.selectedCustomFilter.key,
4167
+ value: this.customInputFilter
4168
+ };
4169
+ }
4170
+ else if (this.isCustomNumberFilterSelected) {
4171
+ appliedFilters = {
4172
+ matchMode: this.selectedCustomFilter.key
4173
+ };
4174
+ if (this.selectedCustomFilter.key === 'gtlt')
4175
+ appliedFilters.value = { gt: this.customNumberFilter1, lt: this.customNumberFilter2 };
4176
+ else
4177
+ appliedFilters.value = this.customNumberFilter1;
4178
+ }
4179
+ else if (this.isCustomDateFilterSelected) {
4180
+ appliedFilters = {
4181
+ matchMode: this.selectedCustomFilter.key
4182
+ };
4183
+ if (this.selectedCustomFilter.key !== 'today')
4184
+ appliedFilters.value = this.customDateFilter;
4185
+ }
4186
+ this.dt.filters[this.field] = appliedFilters;
4187
+ this.dt._filter(this.display);
4188
+ this.hide();
4189
+ }
4022
4190
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ColumnFilter, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: Table }, { token: i0.Renderer2 }, { token: i2.caxConfig }, { token: i2.OverlayService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4023
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: ColumnFilter, isStandalone: true, selector: "cax-columnFilter", inputs: { field: "field", type: "type", display: "display", showMenu: ["showMenu", "showMenu", booleanAttribute], matchMode: "matchMode", operator: "operator", showOperator: ["showOperator", "showOperator", booleanAttribute], showClearButton: ["showClearButton", "showClearButton", booleanAttribute], showApplyButton: ["showApplyButton", "showApplyButton", booleanAttribute], showMatchModes: ["showMatchModes", "showMatchModes", booleanAttribute], showAddButton: ["showAddButton", "showAddButton", booleanAttribute], hideOnClear: ["hideOnClear", "hideOnClear", booleanAttribute], placeholder: "placeholder", matchModeOptions: "matchModeOptions", maxConstraints: ["maxConstraints", "maxConstraints", numberAttribute], minFractionDigits: ["minFractionDigits", "minFractionDigits", (value) => numberAttribute(value, null)], maxFractionDigits: ["maxFractionDigits", "maxFractionDigits", (value) => numberAttribute(value, null)], prefix: "prefix", suffix: "suffix", locale: "locale", localeMatcher: "localeMatcher", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: ["useGrouping", "useGrouping", booleanAttribute], showButtons: ["showButtons", "showButtons", booleanAttribute], ariaLabel: "ariaLabel" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "icon", first: true, predicate: ["icon"], descendants: true }, { propertyName: "clearButtonViewChild", first: true, predicate: ["clearBtn"], descendants: true }], ngImport: i0, template: "<div class=\"cax-column-filter\" [ngClass]=\"{ 'cax-column-filter-row': display === 'row', 'cax-column-filter-menu': display === 'menu' }\">\r\n <cax-columnFilterFormElement\r\n *ngIf=\"display === 'row'\"\r\n class=\"cax-fluid\"\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [filterConstraint]=\"dt.filters[field]\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n [showButtons]=\"showButtons\"\r\n ></cax-columnFilterFormElement>\r\n <button\r\n #icon\r\n *ngIf=\"showMenuButton\"\r\n type=\"button\"\r\n class=\"cax-column-filter-menu-button cax-link\"\r\n aria-haspopup=\"true\"\r\n [attr.aria-label]=\"filterMenuButtonAriaLabel\"\r\n [attr.aria-controls]=\"overlayVisible ? overlayId : null\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [ngClass]=\"{ 'cax-column-filter-menu-button-open': overlayVisible, 'cax-column-filter-menu-button-active': hasFilter() }\"\r\n (click)=\"toggleMenu()\"\r\n (keydown)=\"onToggleButtonKeyDown($event)\"\r\n >\r\n <FilterIcon [styleClass]=\"'pi-filter-icon'\" *ngIf=\"!filterIconTemplate\" />\r\n <span class=\"pi-filter-icon\" *ngIf=\"filterIconTemplate\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n <button #icon *ngIf=\"showClearButton && display === 'row'\" [ngClass]=\"{ 'cax-hidden-space': !hasRowFilter() }\" type=\"button\" class=\"cax-column-filter-clear-button cax-link\" (click)=\"clearFilter()\" [attr.aria-label]=\"clearButtonLabel\">\r\n <FilterSlashIcon *ngIf=\"!clearFilterIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"clearFilterIconTemplate\"></ng-template>\r\n </button>\r\n <div\r\n *ngIf=\"showMenu && overlayVisible\"\r\n [ngClass]=\"{ 'cax-column-filter-overlay cax-component cax-fluid': true, 'cax-column-filter-overlay-menu': display === 'menu' }\"\r\n [id]=\"overlayId\"\r\n [attr.aria-modal]=\"true\"\r\n role=\"dialog\"\r\n (click)=\"onContentClick()\"\r\n [@overlayAnimation]=\"'visible'\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\r\n (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\"\r\n (keydown.escape)=\"onEscape()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: field }\"></ng-container>\r\n <ul *ngIf=\"display === 'row'; else menu\" class=\"cax-column-filter-row-items\">\r\n <li\r\n class=\"cax-column-filter-row-item\"\r\n *ngFor=\"let matchMode of matchModes; let i = index\"\r\n (click)=\"onRowMatchModeChange(matchMode.value)\"\r\n (keydown)=\"onRowMatchModeKeyDown($event)\"\r\n (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\r\n [ngClass]=\"{ 'cax-highlight': isRowMatchModeSelected(matchMode.value) }\"\r\n [attr.tabindex]=\"i === 0 ? '0' : null\"\r\n >\r\n {{ matchMode.label }}\r\n </li>\r\n <li class=\"cax-column-filter-separator\"></li>\r\n <li class=\"cax-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{ noFilterLabel }}</li>\r\n </ul>\r\n <ng-template #menu>\r\n <div class=\"cax-column-filter-operator\" *ngIf=\"isShowOperator\">\r\n <cax-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"cax-column-filter-operator-dropdown\"></cax-dropdown>\r\n </div>\r\n <div class=\"cax-column-filter-constraints\">\r\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"cax-column-filter-constraint\">\r\n <cax-dropdown\r\n *ngIf=\"showMatchModes && matchModes\"\r\n [options]=\"matchModes\"\r\n [ngModel]=\"fieldConstraint.matchMode\"\r\n (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\"\r\n styleClass=\"cax-column-filter-matchmode-dropdown\"\r\n ></cax-dropdown>\r\n <cax-columnFilterFormElement\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [filterConstraint]=\"fieldConstraint\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-columnFilterFormElement>\r\n <div>\r\n <button\r\n *ngIf=\"showRemoveIcon\"\r\n type=\"button\"\r\n pButton\r\n class=\"cax-column-filter-remove-button cax-button-text cax-button-danger cax-button-sm\"\r\n (click)=\"removeConstraint(fieldConstraint)\"\r\n pRipple\r\n [attr.aria-label]=\"removeRuleButtonLabel\"\r\n [label]=\"removeRuleButtonLabel\"\r\n >\r\n <TrashIcon *ngIf=\"!removeRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"removeRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cax-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\r\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" [attr.aria-label]=\"addRuleButtonLabel\" class=\"cax-column-filter-add-button cax-button-text cax-button-sm\" (click)=\"addConstraint()\" pRipple>\r\n <PlusIcon *ngIf=\"!addRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"addRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n <div class=\"cax-column-filter-buttonbar\" *ngIf=\"showButtons\">\r\n <button #clearBtn *ngIf=\"showClearButton\" type=\"button\" pButton class=\"cax-button-outlined cax-button-sm\" (click)=\"clearFilter()\" [attr.aria-label]=\"clearButtonLabel\" [label]=\"clearButtonLabel\" pRipple></button>\r\n <button *ngIf=\"showApplyButton\" type=\"button\" pButton (click)=\"applyFilter()\" class=\"cax-button-sm\" [label]=\"applyButtonLabel\" pRipple [attr.aria-label]=\"applyButtonLabel\"></button>\r\n </div>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: field }\"></ng-container>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i4$1.Dropdown, selector: "cax-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "labelText", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: FilterIcon, selector: "FilterIcon" }, { kind: "component", type: FilterSlashIcon, selector: "FilterSlashIcon" }, { kind: "component", type: PlusIcon, selector: "PlusIcon" }, { kind: "component", type: TrashIcon, selector: "TrashIcon" }, { kind: "component", type: ColumnFilterFormElement, selector: "cax-columnFilterFormElement", inputs: ["field", "type", "filterConstraint", "filterTemplate", "placeholder", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "ariaLabel"] }], animations: [trigger('overlayAnimation', [transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]), transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])])], encapsulation: i0.ViewEncapsulation.None });
4191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: ColumnFilter, isStandalone: true, selector: "cax-columnFilter", inputs: { field: "field", type: "type", display: "display", showMenu: ["showMenu", "showMenu", booleanAttribute], matchMode: "matchMode", operator: "operator", showOperator: ["showOperator", "showOperator", booleanAttribute], showClearButton: ["showClearButton", "showClearButton", booleanAttribute], showApplyButton: ["showApplyButton", "showApplyButton", booleanAttribute], showMatchModes: ["showMatchModes", "showMatchModes", booleanAttribute], showAddButton: ["showAddButton", "showAddButton", booleanAttribute], hideOnClear: ["hideOnClear", "hideOnClear", booleanAttribute], placeholder: "placeholder", matchModeOptions: "matchModeOptions", maxConstraints: ["maxConstraints", "maxConstraints", numberAttribute], minFractionDigits: ["minFractionDigits", "minFractionDigits", (value) => numberAttribute(value, null)], maxFractionDigits: ["maxFractionDigits", "maxFractionDigits", (value) => numberAttribute(value, null)], prefix: "prefix", suffix: "suffix", locale: "locale", localeMatcher: "localeMatcher", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: ["useGrouping", "useGrouping", booleanAttribute], showButtons: ["showButtons", "showButtons", booleanAttribute], ariaLabel: "ariaLabel" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "icon", first: true, predicate: ["icon"], descendants: true }, { propertyName: "clearButtonViewChild", first: true, predicate: ["clearBtn"], descendants: true }], ngImport: i0, template: "<div class=\"cax-column-filter\" [ngClass]=\"{ 'cax-column-filter-row': display === 'row', 'cax-column-filter-menu': display === 'menu', 'cax-column-filter-custom': display === 'custom' }\">\r\n <cax-columnFilterFormElement\r\n *ngIf=\"display === 'row'\"\r\n class=\"cax-fluid\"\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [filterConstraint]=\"dt.filters[field]\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n [showButtons]=\"showButtons\"\r\n ></cax-columnFilterFormElement>\r\n <button\r\n #icon\r\n *ngIf=\"showMenuButton\"\r\n type=\"button\"\r\n class=\"cax-column-filter-menu-button cax-link\"\r\n aria-haspopup=\"true\"\r\n [attr.aria-label]=\"filterMenuButtonAriaLabel\"\r\n [attr.aria-controls]=\"overlayVisible ? overlayId : null\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [ngClass]=\"{ 'cax-column-filter-menu-button-open': overlayVisible, 'cax-column-filter-menu-button-active': hasFilter() }\"\r\n (click)=\"toggleMenu()\"\r\n (keydown)=\"onToggleButtonKeyDown($event)\"\r\n >\r\n <i *ngIf=\"!filterIconTemplate\" [styleClass]=\"'pi-filter-icon'\" class=\"cax cax-filter\"></i>\r\n <span class=\"pi-filter-icon\" *ngIf=\"filterIconTemplate\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n <button #icon *ngIf=\"showClearButton && display === 'row'\" [ngClass]=\"{ 'cax-hidden-space': !hasRowFilter() }\" type=\"button\" class=\"cax-column-filter-clear-button cax-link\" (click)=\"clearFilter()\" [attr.aria-label]=\"clearButtonLabel\">\r\n <FilterSlashIcon *ngIf=\"!clearFilterIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"clearFilterIconTemplate\"></ng-template>\r\n </button>\r\n <div\r\n *ngIf=\"showMenu && overlayVisible\"\r\n [ngClass]=\"{ 'cax-column-filter-overlay cax-component cax-fluid': true, 'cax-column-filter-overlay-menu': display === 'menu', 'cax-column-filter-overlay-custom': display === 'custom' }\"\r\n [id]=\"overlayId\"\r\n [attr.aria-modal]=\"true\"\r\n role=\"dialog\"\r\n (click)=\"onContentClick()\"\r\n [@overlayAnimation]=\"'visible'\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\r\n (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\"\r\n (keydown.escape)=\"onEscape()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: field }\"></ng-container>\r\n <ul *ngIf=\"display === 'row'; else menu\" class=\"cax-column-filter-row-items\">\r\n <li\r\n class=\"cax-column-filter-row-item\"\r\n *ngFor=\"let matchMode of matchModes; let i = index\"\r\n (click)=\"onRowMatchModeChange(matchMode.value)\"\r\n (keydown)=\"onRowMatchModeKeyDown($event)\"\r\n (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\r\n [ngClass]=\"{ 'cax-highlight': isRowMatchModeSelected(matchMode.value) }\"\r\n [attr.tabindex]=\"i === 0 ? '0' : null\"\r\n >\r\n {{ matchMode.label }}\r\n </li>\r\n <li class=\"cax-column-filter-separator\"></li>\r\n <li class=\"cax-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{ noFilterLabel }}</li>\r\n </ul>\r\n <ng-template #menu>\r\n <ng-container *ngIf=\"display === 'menu'; else custom\">\r\n <div class=\"cax-column-filter-operator\" *ngIf=\"isShowOperator\">\r\n <cax-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"cax-column-filter-operator-dropdown\"></cax-dropdown>\r\n </div>\r\n <div class=\"cax-column-filter-constraints\">\r\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"cax-column-filter-constraint\">\r\n <cax-dropdown\r\n *ngIf=\"showMatchModes && matchModes\"\r\n [options]=\"matchModes\"\r\n [ngModel]=\"fieldConstraint.matchMode\"\r\n (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\"\r\n styleClass=\"cax-column-filter-matchmode-dropdown\"\r\n ></cax-dropdown>\r\n <cax-columnFilterFormElement\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [filterConstraint]=\"fieldConstraint\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-columnFilterFormElement>\r\n <div>\r\n <button\r\n *ngIf=\"showRemoveIcon\"\r\n type=\"button\"\r\n caxButton\r\n class=\"cax-column-filter-remove-button cax-button-text cax-button-danger cax-button-sm\"\r\n (click)=\"removeConstraint(fieldConstraint)\"\r\n pRipple\r\n [attr.aria-label]=\"removeRuleButtonLabel\"\r\n [label]=\"removeRuleButtonLabel\"\r\n >\r\n <TrashIcon *ngIf=\"!removeRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"removeRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cax-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\r\n <button type=\"button\" caxButton [label]=\"addRuleButtonLabel\" [attr.aria-label]=\"addRuleButtonLabel\" class=\"cax-column-filter-add-button cax-button-text cax-button-sm\" (click)=\"addConstraint()\" pRipple>\r\n <PlusIcon *ngIf=\"!addRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"addRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n <div class=\"cax-column-filter-buttonbar\" *ngIf=\"showButtons\">\r\n <button\r\n #clearBtn\r\n *ngIf=\"showClearButton\"\r\n type=\"button\"\r\n caxButton\r\n class=\"cax-button-outlined cax-button-danger cax-button-sm\"\r\n (click)=\"clearFilter()\"\r\n [attr.aria-label]=\"clearButtonLabel\"\r\n [label]=\"clearButtonLabel\"\r\n pRipple\r\n ></button>\r\n <button *ngIf=\"showApplyButton\" type=\"button\" caxButton (click)=\"applyFilter()\" class=\"cax-button-sm\" [label]=\"applyButtonLabel\" pRipple [attr.aria-label]=\"applyButtonLabel\"></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #custom>\r\n <div class=\"cax-column-filter-custom-container\">\r\n <div>\r\n <div class=\"cax-column-filter-custom-list-header\" (click)=\"toggleCustomFilterList()\">\r\n <span *ngIf=\"!selectedCustomFilter?.label?.length\">Select a condition</span>\r\n <div *ngIf=\"selectedCustomFilter\">{{ selectedCustomFilter.label }}</div>\r\n <i class=\"cax cax-alt-arrow-down\"></i>\r\n </div>\r\n <div class=\"cax-column-filter-custom-list\" *ngIf=\"customFilterListVisible\">\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of commonFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n <cax-divider [style]=\"{margin: 0}\"></cax-divider>\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of stringFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n <cax-divider [style]=\"{margin: 0}\"></cax-divider>\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of numberFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n <cax-divider [style]=\"{margin: 0}\"></cax-divider>\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of dateFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCustomStringFilterSelected\">\r\n <cax-inputtext [(ngModel)]=\"customInputFilter\" [clearIcon]=\"false\"></cax-inputtext>\r\n </div>\r\n <div *ngIf=\"isCustomNumberFilterSelected\" style=\"display: flex; gap: 12px\">\r\n <cax-inputNumber [(ngModel)]=\"customNumberFilter1\"></cax-inputNumber>\r\n <cax-inputNumber [(ngModel)]=\"customNumberFilter2\" *ngIf=\"selectedCustomFilter.key === 'gtlt'\"></cax-inputNumber>\r\n </div>\r\n <div *ngIf=\"isCustomDateFilterSelected && selectedCustomFilter.key !== 'today'\">\r\n <cax-calendar [(ngModel)]=\"customDateFilter\" [showIcon]=\"true\" iconDisplay=\"input\"></cax-calendar>\r\n </div>\r\n <div class=\"cax-column-filter-custom-buttons\">\r\n <cax-button (click)=\"onClearCustomFilters()\" [disabled]=\"!selectedCustomFilter\" [label]=\"'Clear'\" [severity]=\"'danger'\" outlined=\"true\"></cax-button>\r\n <cax-button (click)=\"onApplyCustomFilters()\" [label]=\"'Apply'\"></cax-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: field }\"></ng-container>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i4$1.Dropdown, selector: "cax-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "labelText", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6$2.ButtonDirective, selector: "[caxButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "link"] }, { kind: "component", type: i6$2.Button, selector: "cax-button", inputs: ["type", "iconPos", "icon", "badge", "rightIcon", "leftIcon", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: FilterSlashIcon, selector: "FilterSlashIcon" }, { kind: "component", type: PlusIcon, selector: "PlusIcon" }, { kind: "component", type: TrashIcon, selector: "TrashIcon" }, { kind: "component", type: ColumnFilterFormElement, selector: "cax-columnFilterFormElement", inputs: ["field", "type", "filterConstraint", "filterTemplate", "placeholder", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "ariaLabel"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i7$1.Divider, selector: "cax-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "component", type: i4.InputTextComponent, selector: "cax-inputtext", inputs: ["value", "placeholder", "disabled", "maxlength", "successText", "errorText", "showLabel", "leftIcon", "rightIcon", "clearIcon", "label", "iconPath", "disabledIcon", "showIcon", "iconClass", "leftIconClass", "rightIconClass", "invalid", "required", "style", "size", "styleClass"], outputs: ["valueChange"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i7.InputNumber, selector: "cax-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefixIcon", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i6$1.Calendar, selector: "cax-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "leftIcon", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }], animations: [trigger('overlayAnimation', [transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]), transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])])], encapsulation: i0.ViewEncapsulation.None });
4024
4192
  }
4025
4193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ColumnFilter, decorators: [{
4026
4194
  type: Component,
4027
- args: [{ selector: 'cax-columnFilter', animations: [trigger('overlayAnimation', [transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]), transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])])], encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, DropdownModule, FormsModule, ButtonModule, FilterIcon, FilterSlashIcon, PlusIcon, TrashIcon, ColumnFilterFormElement], host: {
4195
+ args: [{ selector: 'cax-columnFilter', animations: [trigger('overlayAnimation', [transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]), transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])])], encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, DropdownModule, FormsModule, ButtonModule, FilterSlashIcon, PlusIcon, TrashIcon, ColumnFilterFormElement, RadioButtonModule, DividerModule, InputTextModule, InputNumberModule, CalendarModule], host: {
4028
4196
  class: 'cax-element'
4029
- }, template: "<div class=\"cax-column-filter\" [ngClass]=\"{ 'cax-column-filter-row': display === 'row', 'cax-column-filter-menu': display === 'menu' }\">\r\n <cax-columnFilterFormElement\r\n *ngIf=\"display === 'row'\"\r\n class=\"cax-fluid\"\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [filterConstraint]=\"dt.filters[field]\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n [showButtons]=\"showButtons\"\r\n ></cax-columnFilterFormElement>\r\n <button\r\n #icon\r\n *ngIf=\"showMenuButton\"\r\n type=\"button\"\r\n class=\"cax-column-filter-menu-button cax-link\"\r\n aria-haspopup=\"true\"\r\n [attr.aria-label]=\"filterMenuButtonAriaLabel\"\r\n [attr.aria-controls]=\"overlayVisible ? overlayId : null\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [ngClass]=\"{ 'cax-column-filter-menu-button-open': overlayVisible, 'cax-column-filter-menu-button-active': hasFilter() }\"\r\n (click)=\"toggleMenu()\"\r\n (keydown)=\"onToggleButtonKeyDown($event)\"\r\n >\r\n <FilterIcon [styleClass]=\"'pi-filter-icon'\" *ngIf=\"!filterIconTemplate\" />\r\n <span class=\"pi-filter-icon\" *ngIf=\"filterIconTemplate\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n <button #icon *ngIf=\"showClearButton && display === 'row'\" [ngClass]=\"{ 'cax-hidden-space': !hasRowFilter() }\" type=\"button\" class=\"cax-column-filter-clear-button cax-link\" (click)=\"clearFilter()\" [attr.aria-label]=\"clearButtonLabel\">\r\n <FilterSlashIcon *ngIf=\"!clearFilterIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"clearFilterIconTemplate\"></ng-template>\r\n </button>\r\n <div\r\n *ngIf=\"showMenu && overlayVisible\"\r\n [ngClass]=\"{ 'cax-column-filter-overlay cax-component cax-fluid': true, 'cax-column-filter-overlay-menu': display === 'menu' }\"\r\n [id]=\"overlayId\"\r\n [attr.aria-modal]=\"true\"\r\n role=\"dialog\"\r\n (click)=\"onContentClick()\"\r\n [@overlayAnimation]=\"'visible'\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\r\n (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\"\r\n (keydown.escape)=\"onEscape()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: field }\"></ng-container>\r\n <ul *ngIf=\"display === 'row'; else menu\" class=\"cax-column-filter-row-items\">\r\n <li\r\n class=\"cax-column-filter-row-item\"\r\n *ngFor=\"let matchMode of matchModes; let i = index\"\r\n (click)=\"onRowMatchModeChange(matchMode.value)\"\r\n (keydown)=\"onRowMatchModeKeyDown($event)\"\r\n (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\r\n [ngClass]=\"{ 'cax-highlight': isRowMatchModeSelected(matchMode.value) }\"\r\n [attr.tabindex]=\"i === 0 ? '0' : null\"\r\n >\r\n {{ matchMode.label }}\r\n </li>\r\n <li class=\"cax-column-filter-separator\"></li>\r\n <li class=\"cax-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{ noFilterLabel }}</li>\r\n </ul>\r\n <ng-template #menu>\r\n <div class=\"cax-column-filter-operator\" *ngIf=\"isShowOperator\">\r\n <cax-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"cax-column-filter-operator-dropdown\"></cax-dropdown>\r\n </div>\r\n <div class=\"cax-column-filter-constraints\">\r\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"cax-column-filter-constraint\">\r\n <cax-dropdown\r\n *ngIf=\"showMatchModes && matchModes\"\r\n [options]=\"matchModes\"\r\n [ngModel]=\"fieldConstraint.matchMode\"\r\n (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\"\r\n styleClass=\"cax-column-filter-matchmode-dropdown\"\r\n ></cax-dropdown>\r\n <cax-columnFilterFormElement\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [filterConstraint]=\"fieldConstraint\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-columnFilterFormElement>\r\n <div>\r\n <button\r\n *ngIf=\"showRemoveIcon\"\r\n type=\"button\"\r\n pButton\r\n class=\"cax-column-filter-remove-button cax-button-text cax-button-danger cax-button-sm\"\r\n (click)=\"removeConstraint(fieldConstraint)\"\r\n pRipple\r\n [attr.aria-label]=\"removeRuleButtonLabel\"\r\n [label]=\"removeRuleButtonLabel\"\r\n >\r\n <TrashIcon *ngIf=\"!removeRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"removeRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cax-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\r\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" [attr.aria-label]=\"addRuleButtonLabel\" class=\"cax-column-filter-add-button cax-button-text cax-button-sm\" (click)=\"addConstraint()\" pRipple>\r\n <PlusIcon *ngIf=\"!addRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"addRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n <div class=\"cax-column-filter-buttonbar\" *ngIf=\"showButtons\">\r\n <button #clearBtn *ngIf=\"showClearButton\" type=\"button\" pButton class=\"cax-button-outlined cax-button-sm\" (click)=\"clearFilter()\" [attr.aria-label]=\"clearButtonLabel\" [label]=\"clearButtonLabel\" pRipple></button>\r\n <button *ngIf=\"showApplyButton\" type=\"button\" pButton (click)=\"applyFilter()\" class=\"cax-button-sm\" [label]=\"applyButtonLabel\" pRipple [attr.aria-label]=\"applyButtonLabel\"></button>\r\n </div>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: field }\"></ng-container>\r\n </div>\r\n</div>\r\n" }]
4197
+ }, template: "<div class=\"cax-column-filter\" [ngClass]=\"{ 'cax-column-filter-row': display === 'row', 'cax-column-filter-menu': display === 'menu', 'cax-column-filter-custom': display === 'custom' }\">\r\n <cax-columnFilterFormElement\r\n *ngIf=\"display === 'row'\"\r\n class=\"cax-fluid\"\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [filterConstraint]=\"dt.filters[field]\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n [showButtons]=\"showButtons\"\r\n ></cax-columnFilterFormElement>\r\n <button\r\n #icon\r\n *ngIf=\"showMenuButton\"\r\n type=\"button\"\r\n class=\"cax-column-filter-menu-button cax-link\"\r\n aria-haspopup=\"true\"\r\n [attr.aria-label]=\"filterMenuButtonAriaLabel\"\r\n [attr.aria-controls]=\"overlayVisible ? overlayId : null\"\r\n [attr.aria-expanded]=\"overlayVisible ?? false\"\r\n [ngClass]=\"{ 'cax-column-filter-menu-button-open': overlayVisible, 'cax-column-filter-menu-button-active': hasFilter() }\"\r\n (click)=\"toggleMenu()\"\r\n (keydown)=\"onToggleButtonKeyDown($event)\"\r\n >\r\n <i *ngIf=\"!filterIconTemplate\" [styleClass]=\"'pi-filter-icon'\" class=\"cax cax-filter\"></i>\r\n <span class=\"pi-filter-icon\" *ngIf=\"filterIconTemplate\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n </button>\r\n <button #icon *ngIf=\"showClearButton && display === 'row'\" [ngClass]=\"{ 'cax-hidden-space': !hasRowFilter() }\" type=\"button\" class=\"cax-column-filter-clear-button cax-link\" (click)=\"clearFilter()\" [attr.aria-label]=\"clearButtonLabel\">\r\n <FilterSlashIcon *ngIf=\"!clearFilterIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"clearFilterIconTemplate\"></ng-template>\r\n </button>\r\n <div\r\n *ngIf=\"showMenu && overlayVisible\"\r\n [ngClass]=\"{ 'cax-column-filter-overlay cax-component cax-fluid': true, 'cax-column-filter-overlay-menu': display === 'menu', 'cax-column-filter-overlay-custom': display === 'custom' }\"\r\n [id]=\"overlayId\"\r\n [attr.aria-modal]=\"true\"\r\n role=\"dialog\"\r\n (click)=\"onContentClick()\"\r\n [@overlayAnimation]=\"'visible'\"\r\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\r\n (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\"\r\n (keydown.escape)=\"onEscape()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: field }\"></ng-container>\r\n <ul *ngIf=\"display === 'row'; else menu\" class=\"cax-column-filter-row-items\">\r\n <li\r\n class=\"cax-column-filter-row-item\"\r\n *ngFor=\"let matchMode of matchModes; let i = index\"\r\n (click)=\"onRowMatchModeChange(matchMode.value)\"\r\n (keydown)=\"onRowMatchModeKeyDown($event)\"\r\n (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\r\n [ngClass]=\"{ 'cax-highlight': isRowMatchModeSelected(matchMode.value) }\"\r\n [attr.tabindex]=\"i === 0 ? '0' : null\"\r\n >\r\n {{ matchMode.label }}\r\n </li>\r\n <li class=\"cax-column-filter-separator\"></li>\r\n <li class=\"cax-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{ noFilterLabel }}</li>\r\n </ul>\r\n <ng-template #menu>\r\n <ng-container *ngIf=\"display === 'menu'; else custom\">\r\n <div class=\"cax-column-filter-operator\" *ngIf=\"isShowOperator\">\r\n <cax-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"cax-column-filter-operator-dropdown\"></cax-dropdown>\r\n </div>\r\n <div class=\"cax-column-filter-constraints\">\r\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"cax-column-filter-constraint\">\r\n <cax-dropdown\r\n *ngIf=\"showMatchModes && matchModes\"\r\n [options]=\"matchModes\"\r\n [ngModel]=\"fieldConstraint.matchMode\"\r\n (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\"\r\n styleClass=\"cax-column-filter-matchmode-dropdown\"\r\n ></cax-dropdown>\r\n <cax-columnFilterFormElement\r\n [type]=\"type\"\r\n [field]=\"field\"\r\n [filterConstraint]=\"fieldConstraint\"\r\n [filterTemplate]=\"filterTemplate\"\r\n [placeholder]=\"placeholder\"\r\n [minFractionDigits]=\"minFractionDigits\"\r\n [maxFractionDigits]=\"maxFractionDigits\"\r\n [prefix]=\"prefix\"\r\n [suffix]=\"suffix\"\r\n [locale]=\"locale\"\r\n [localeMatcher]=\"localeMatcher\"\r\n [currency]=\"currency\"\r\n [currencyDisplay]=\"currencyDisplay\"\r\n [useGrouping]=\"useGrouping\"\r\n ></cax-columnFilterFormElement>\r\n <div>\r\n <button\r\n *ngIf=\"showRemoveIcon\"\r\n type=\"button\"\r\n caxButton\r\n class=\"cax-column-filter-remove-button cax-button-text cax-button-danger cax-button-sm\"\r\n (click)=\"removeConstraint(fieldConstraint)\"\r\n pRipple\r\n [attr.aria-label]=\"removeRuleButtonLabel\"\r\n [label]=\"removeRuleButtonLabel\"\r\n >\r\n <TrashIcon *ngIf=\"!removeRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"removeRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cax-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\r\n <button type=\"button\" caxButton [label]=\"addRuleButtonLabel\" [attr.aria-label]=\"addRuleButtonLabel\" class=\"cax-column-filter-add-button cax-button-text cax-button-sm\" (click)=\"addConstraint()\" pRipple>\r\n <PlusIcon *ngIf=\"!addRuleIconTemplate\" [styleClass]=\"'cax-button-icon-left'\" />\r\n <ng-template *ngTemplateOutlet=\"addRuleIconTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n <div class=\"cax-column-filter-buttonbar\" *ngIf=\"showButtons\">\r\n <button\r\n #clearBtn\r\n *ngIf=\"showClearButton\"\r\n type=\"button\"\r\n caxButton\r\n class=\"cax-button-outlined cax-button-danger cax-button-sm\"\r\n (click)=\"clearFilter()\"\r\n [attr.aria-label]=\"clearButtonLabel\"\r\n [label]=\"clearButtonLabel\"\r\n pRipple\r\n ></button>\r\n <button *ngIf=\"showApplyButton\" type=\"button\" caxButton (click)=\"applyFilter()\" class=\"cax-button-sm\" [label]=\"applyButtonLabel\" pRipple [attr.aria-label]=\"applyButtonLabel\"></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #custom>\r\n <div class=\"cax-column-filter-custom-container\">\r\n <div>\r\n <div class=\"cax-column-filter-custom-list-header\" (click)=\"toggleCustomFilterList()\">\r\n <span *ngIf=\"!selectedCustomFilter?.label?.length\">Select a condition</span>\r\n <div *ngIf=\"selectedCustomFilter\">{{ selectedCustomFilter.label }}</div>\r\n <i class=\"cax cax-alt-arrow-down\"></i>\r\n </div>\r\n <div class=\"cax-column-filter-custom-list\" *ngIf=\"customFilterListVisible\">\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of commonFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n <cax-divider [style]=\"{margin: 0}\"></cax-divider>\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of stringFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n <cax-divider [style]=\"{margin: 0}\"></cax-divider>\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of numberFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n <cax-divider [style]=\"{margin: 0}\"></cax-divider>\r\n <div class=\"cax-column-filter-custom-list-item\" *ngFor=\"let opt of dateFilterOptions\" (click)=\"selectCustomFilter(opt)\">\r\n <span>{{ opt.label }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCustomStringFilterSelected\">\r\n <cax-inputtext [(ngModel)]=\"customInputFilter\" [clearIcon]=\"false\"></cax-inputtext>\r\n </div>\r\n <div *ngIf=\"isCustomNumberFilterSelected\" style=\"display: flex; gap: 12px\">\r\n <cax-inputNumber [(ngModel)]=\"customNumberFilter1\"></cax-inputNumber>\r\n <cax-inputNumber [(ngModel)]=\"customNumberFilter2\" *ngIf=\"selectedCustomFilter.key === 'gtlt'\"></cax-inputNumber>\r\n </div>\r\n <div *ngIf=\"isCustomDateFilterSelected && selectedCustomFilter.key !== 'today'\">\r\n <cax-calendar [(ngModel)]=\"customDateFilter\" [showIcon]=\"true\" iconDisplay=\"input\"></cax-calendar>\r\n </div>\r\n <div class=\"cax-column-filter-custom-buttons\">\r\n <cax-button (click)=\"onClearCustomFilters()\" [disabled]=\"!selectedCustomFilter\" [label]=\"'Clear'\" [severity]=\"'danger'\" outlined=\"true\"></cax-button>\r\n <cax-button (click)=\"onApplyCustomFilters()\" [label]=\"'Apply'\"></cax-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: field }\"></ng-container>\r\n </div>\r\n</div>\r\n" }]
4030
4198
  }], ctorParameters: () => [{ type: Document, decorators: [{
4031
4199
  type: Inject,
4032
4200
  args: [DOCUMENT]
@@ -4136,6 +4304,9 @@ class SortIcon {
4136
4304
  let sortMeta = this.dt.getSortMeta(this.field);
4137
4305
  this.sortOrder = sortMeta ? sortMeta.order : 0;
4138
4306
  }
4307
+ else if (this.dt.sortMode === 'custom') {
4308
+ this.sortOrder = this.dt.isSorted(this.field) ? this.dt.sortOrder : 0;
4309
+ }
4139
4310
  this.cd.markForCheck();
4140
4311
  }
4141
4312
  getMultiSortMetaIndex() {
@@ -4165,13 +4336,13 @@ class SortIcon {
4165
4336
  }
4166
4337
  }
4167
4338
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SortIcon, deps: [{ token: Table }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4168
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: SortIcon, isStandalone: true, selector: "cax-sortIcon", inputs: { field: "field" }, host: { classAttribute: "cax-element" }, ngImport: i0, template: "<ng-container *ngIf=\"!dt.sortIconTemplate\">\r\n <SortAltIcon [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 0\" />\r\n <SortAmountUpAltIcon [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 1\" />\r\n <SortAmountDownIcon [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === -1\" />\r\n</ng-container>\r\n<span *ngIf=\"dt.sortIconTemplate\" class=\"cax-sortable-column-icon\">\r\n <ng-template *ngTemplateOutlet=\"dt.sortIconTemplate; context: { $implicit: sortOrder }\"></ng-template>\r\n</span>\r\n<span *ngIf=\"isMultiSorted()\" class=\"cax-sortable-column-badge\">{{ getBadgeValue() }}</span>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SortAltIcon, selector: "SortAltIcon" }, { kind: "component", type: SortAmountUpAltIcon, selector: "SortAmountUpAltIcon" }, { kind: "component", type: SortAmountDownIcon, selector: "SortAmountDownIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4339
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: SortIcon, isStandalone: true, selector: "cax-sortIcon", inputs: { field: "field" }, host: { classAttribute: "cax-element" }, ngImport: i0, template: "<ng-container *ngIf=\"!dt.sortIconTemplate\">\r\n <button class=\"cax-sort-icon-button\">\r\n <i class=\"cax cax-sort-vertical\" [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 0\"></i>\r\n <i class=\"cax cax-sort-from-bottom-to-top\" style=\"color: var(--primary-color)\" [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 1\"></i>\r\n <i class=\"cax cax-sort-from-top-to-bottom\" style=\"color: var(--primary-color)\" [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === -1\"></i>\r\n </button>\r\n</ng-container>\r\n<span *ngIf=\"dt.sortIconTemplate\" class=\"cax-sortable-column-icon\">\r\n <ng-template *ngTemplateOutlet=\"dt.sortIconTemplate; context: { $implicit: sortOrder }\"></ng-template>\r\n</span>\r\n<span *ngIf=\"isMultiSorted()\" class=\"cax-sortable-column-badge\">{{ getBadgeValue() }}</span>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4169
4340
  }
4170
4341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SortIcon, decorators: [{
4171
4342
  type: Component,
4172
- args: [{ selector: 'cax-sortIcon', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, SortAltIcon, SortAmountUpAltIcon, SortAmountDownIcon], host: {
4343
+ args: [{ selector: 'cax-sortIcon', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], host: {
4173
4344
  class: 'cax-element'
4174
- }, template: "<ng-container *ngIf=\"!dt.sortIconTemplate\">\r\n <SortAltIcon [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 0\" />\r\n <SortAmountUpAltIcon [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 1\" />\r\n <SortAmountDownIcon [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === -1\" />\r\n</ng-container>\r\n<span *ngIf=\"dt.sortIconTemplate\" class=\"cax-sortable-column-icon\">\r\n <ng-template *ngTemplateOutlet=\"dt.sortIconTemplate; context: { $implicit: sortOrder }\"></ng-template>\r\n</span>\r\n<span *ngIf=\"isMultiSorted()\" class=\"cax-sortable-column-badge\">{{ getBadgeValue() }}</span>\r\n" }]
4345
+ }, template: "<ng-container *ngIf=\"!dt.sortIconTemplate\">\r\n <button class=\"cax-sort-icon-button\">\r\n <i class=\"cax cax-sort-vertical\" [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 0\"></i>\r\n <i class=\"cax cax-sort-from-bottom-to-top\" style=\"color: var(--primary-color)\" [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === 1\"></i>\r\n <i class=\"cax cax-sort-from-top-to-bottom\" style=\"color: var(--primary-color)\" [styleClass]=\"'cax-sortable-column-icon'\" *ngIf=\"sortOrder === -1\"></i>\r\n </button>\r\n</ng-container>\r\n<span *ngIf=\"dt.sortIconTemplate\" class=\"cax-sortable-column-icon\">\r\n <ng-template *ngTemplateOutlet=\"dt.sortIconTemplate; context: { $implicit: sortOrder }\"></ng-template>\r\n</span>\r\n<span *ngIf=\"isMultiSorted()\" class=\"cax-sortable-column-badge\">{{ getBadgeValue() }}</span>\r\n" }]
4175
4346
  }], ctorParameters: () => [{ type: Table }, { type: i0.ChangeDetectorRef }], propDecorators: { field: [{
4176
4347
  type: Input
4177
4348
  }] } });
@@ -5391,7 +5562,7 @@ class SortableColumn {
5391
5562
  this.sortOrder = this.sorted ? (this.dt.sortOrder === 1 ? 'ascending' : 'descending') : 'none';
5392
5563
  }
5393
5564
  onClick(event) {
5394
- if (this.isEnabled() && !this.isFilterElement(event.target)) {
5565
+ if (this.isEnabled() && this.isSortElement(event.target)) {
5395
5566
  this.updateSortState();
5396
5567
  this.dt.sort({
5397
5568
  originalEvent: event,
@@ -5407,11 +5578,11 @@ class SortableColumn {
5407
5578
  isEnabled() {
5408
5579
  return this.caxSortableColumnDisabled !== true;
5409
5580
  }
5410
- isFilterElement(element) {
5411
- return this.isFilterElementIconOrButton(element) || this.isFilterElementIconOrButton(element?.parentElement?.parentElement);
5581
+ isSortElement(element) {
5582
+ return this.isSortButton(element) || this.isSortButton(element?.parentElement?.parentElement);
5412
5583
  }
5413
- isFilterElementIconOrButton(element) {
5414
- return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'cax-column-filter-menu-button');
5584
+ isSortButton(element) {
5585
+ return DomHandler.hasClass(element, 'cax-sort-icon-button') || DomHandler.hasClass(element, 'cax-sort-vertical') || DomHandler.hasClass(element, 'cax-sort-from-bottom-to-top') || DomHandler.hasClass(element, 'cax-sort-from-top-to-bottom');
5415
5586
  }
5416
5587
  ngOnDestroy() {
5417
5588
  if (this.subscription) {