@apexara/ng-components 1.0.6-test.4 → 1.0.6-test.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1635,7 +1635,34 @@ Two types of tables are available. One with local data and local sorting & filte
|
|
|
1635
1635
|
>export interface ApexTableCellOptions {
|
|
1636
1636
|
> icon?: string | { [key: string]: string }; // static icon or value-to-icon map
|
|
1637
1637
|
> iconPosition?: 'left' | 'right'; // default: 'left'
|
|
1638
|
-
>
|
|
1638
|
+
> iconColor?: { [key: string]: string }; // value-to-color map for icon fill/stroke
|
|
1639
|
+
> textColor?: { [key: string]: string }; // value-to-color map for text color (Text columns)
|
|
1640
|
+
> chipColor?: { [key: string]: string }; // value-to-color map for chip text color (Chip columns)
|
|
1641
|
+
> chipBackgroundColor?: { [key: string]: string }; // value-to-color map for chip background (Chip columns)
|
|
1642
|
+
>}
|
|
1643
|
+
>```
|
|
1644
|
+
>
|
|
1645
|
+
>**Icon with color example** — use `cellOptions` to set icon and text color per value:
|
|
1646
|
+
>```typescript
|
|
1647
|
+
>{
|
|
1648
|
+
> label: 'Trend', value: 'trend', width: '120px',
|
|
1649
|
+
> cellOptions: {
|
|
1650
|
+
> icon: { 'Up': 'arrow-up.svg', 'Down': 'arrow-down.svg', 'Neutral': 'neutral.svg' },
|
|
1651
|
+
> iconColor: { 'Up': '#26D280', 'Down': '#FF4242', 'Neutral': '#FFA753' },
|
|
1652
|
+
> textColor: { 'Up': '#26D280', 'Down': '#FF4242', 'Neutral': '#FFA753' }
|
|
1653
|
+
> }
|
|
1654
|
+
>}
|
|
1655
|
+
>```
|
|
1656
|
+
>
|
|
1657
|
+
>**Chip column styling example** — use `cellOptions` to set chip colors per value without predefined CSS classes:
|
|
1658
|
+
>```typescript
|
|
1659
|
+
>{
|
|
1660
|
+
> label: 'Status', value: 'status', type: ApexTableColumnType.Chip,
|
|
1661
|
+
> chipLabel: { 'active': 'Active', 'pending': 'Pending', 'inactive': 'Inactive' },
|
|
1662
|
+
> cellOptions: {
|
|
1663
|
+
> chipColor: { 'active': '#00B67A', 'pending': '#FFA753', 'inactive': '#FF4242' },
|
|
1664
|
+
> chipBackgroundColor: { 'active': '#E6F9F0', 'pending': '#FFF8EF', 'inactive': '#FFF2EF' }
|
|
1665
|
+
> }
|
|
1639
1666
|
>}
|
|
1640
1667
|
>```
|
|
1641
1668
|
>
|
|
@@ -1652,6 +1679,7 @@ Two types of tables are available. One with local data and local sorting & filte
|
|
|
1652
1679
|
> NumberMath, // A column for displaying combined properties' values numbers with additional addition, subtraction, multiplication, division logic.
|
|
1653
1680
|
> Actions, // A column for action buttons
|
|
1654
1681
|
> List, // A column for displaying arrays with overflow badge
|
|
1682
|
+
> Status, // A column for displaying multi-step progress indicators
|
|
1655
1683
|
>}
|
|
1656
1684
|
>```
|
|
1657
1685
|
>
|
|
@@ -1670,6 +1698,8 @@ Two types of tables are available. One with local data and local sorting & filte
|
|
|
1670
1698
|
>Actions Column: Displays action buttons with dynamic visibility based on context.
|
|
1671
1699
|
>
|
|
1672
1700
|
>List Column: Displays an array of objects as a formatted text string joined by " / " (e.g., "Miami / Orlando / Tampa"). When the array exceeds `listOptions.max` items, an overflow badge (+N) appears. Hovering the badge shows a tooltip with all remaining items.
|
|
1701
|
+
>
|
|
1702
|
+
>Status Column: Displays a horizontal sequence of labeled steps, each underlined by a colored bar. Steps up to and including the row's current status show their configured color; later steps show a muted gray bar. Useful for deal pipelines, order progress, approval flows, etc.
|
|
1673
1703
|
|
|
1674
1704
|
### List Column Usage
|
|
1675
1705
|
|
|
@@ -1717,6 +1747,53 @@ Two types of tables are available. One with local data and local sorting & filte
|
|
|
1717
1747
|
>| `--apex-table-list-overflow-color` | `#FFA753` | Overflow badge text color |
|
|
1718
1748
|
>| `--apex-table-list-overflow-border-color` | `#FFEFE1` | Overflow badge border color |
|
|
1719
1749
|
|
|
1750
|
+
### Status Column Usage
|
|
1751
|
+
|
|
1752
|
+
>```typescript
|
|
1753
|
+
>export interface ApexTableStatusStep {
|
|
1754
|
+
> label: string; // Display label for the step
|
|
1755
|
+
> value: string | number | boolean; // Identifier matched against the row's status value (strict equality)
|
|
1756
|
+
> color: string; // Bar color when this step is reached
|
|
1757
|
+
>}
|
|
1758
|
+
>```
|
|
1759
|
+
>
|
|
1760
|
+
>The row's status value (resolved from `column.value`) is matched against each step's `value`. All steps up to and including the matched one are considered completed and show their configured `color`. Remaining steps show the muted incomplete color. If the value doesn't match any step → every step renders as incomplete.
|
|
1761
|
+
>
|
|
1762
|
+
>```typescript
|
|
1763
|
+
>// Data
|
|
1764
|
+
>public tableData = [
|
|
1765
|
+
> { id: 1, offerStatus: 'listed' },
|
|
1766
|
+
> { id: 2, offerStatus: 'sold' },
|
|
1767
|
+
> { id: 3, offerStatus: 'offerAccepted' }
|
|
1768
|
+
>];
|
|
1769
|
+
>
|
|
1770
|
+
>// Column config
|
|
1771
|
+
>public tableColumns: ApexTableColumn[] = [
|
|
1772
|
+
> {
|
|
1773
|
+
> label: 'Offer Status',
|
|
1774
|
+
> value: 'offerStatus',
|
|
1775
|
+
> type: ApexTableColumnType.Status,
|
|
1776
|
+
> width: '320px',
|
|
1777
|
+
> statusSteps: [
|
|
1778
|
+
> { label: 'Listed', value: 'listed', color: '#FBD84A' },
|
|
1779
|
+
> { label: 'Receiving Offers', value: 'receivingOffers', color: '#4AC0E0' },
|
|
1780
|
+
> { label: 'Offer Accepted', value: 'offerAccepted', color: '#26D280' },
|
|
1781
|
+
> { label: 'Sold', value: 'sold', color: '#FFA753' }
|
|
1782
|
+
> ]
|
|
1783
|
+
> }
|
|
1784
|
+
>];
|
|
1785
|
+
>```
|
|
1786
|
+
|
|
1787
|
+
### Status Column CSS Variables
|
|
1788
|
+
|
|
1789
|
+
>| Variable | Default | Description |
|
|
1790
|
+
>|---|---|---|
|
|
1791
|
+
>| `--apex-table-status-gap` | `8px` | Gap between steps |
|
|
1792
|
+
>| `--apex-table-status-bar-height` | `3px` | Height of the underline bar |
|
|
1793
|
+
>| `--apex-table-status-incomplete-color` | `#E5E7EB` | Bar color for not-yet-reached steps |
|
|
1794
|
+
>| `--apex-table-status-label-color` | `#888B95` | Label color for not-yet-reached steps |
|
|
1795
|
+
>| `--apex-table-status-label-completed-color` | `#191B22` | Label color for reached steps |
|
|
1796
|
+
|
|
1720
1797
|
### Cell Icons
|
|
1721
1798
|
|
|
1722
1799
|
Cell icons allow you to display an icon next to the text in a cell. The icon can be static or mapped per value, making it useful for status indicators, engagement levels, etc.
|
|
@@ -1876,7 +1953,11 @@ Cell icons allow you to display an icon next to the text in a cell. The icon can
|
|
|
1876
1953
|
> --apex-table-action-secondary-icon-hover-fill: #5D6068;
|
|
1877
1954
|
> --apex-table-action-secondary-icon-hover-stroke: #FFFFFF00;
|
|
1878
1955
|
>
|
|
1879
|
-
> /*
|
|
1956
|
+
> /* Default color of the more actions (three dots) icon */
|
|
1957
|
+
> --apex-table-action-more-icon-default-fill: #5D6068;
|
|
1958
|
+
> --apex-table-action-more-icon-default-stroke: #FFFFFF00;
|
|
1959
|
+
>
|
|
1960
|
+
> /* Color of the more actions icon on hover / when opened */
|
|
1880
1961
|
> --apex-table-action-more-icon-fill: #F96138;
|
|
1881
1962
|
> --apex-table-action-more-icon-stroke: #FFFFFF00;
|
|
1882
1963
|
>
|
|
@@ -1892,13 +1973,19 @@ Cell icons allow you to display an icon next to the text in a cell. The icon can
|
|
|
1892
1973
|
> --apex-table-page-picker-text-color: #FFFFFF;
|
|
1893
1974
|
> --apex-table-page-picker-background: #F96138;
|
|
1894
1975
|
>
|
|
1895
|
-
> /* Chip columns color styling */
|
|
1976
|
+
> /* Chip columns color styling (used by class="primary" / class="secondary") */
|
|
1896
1977
|
> --apex-table-chip-color: #F96138;
|
|
1897
1978
|
> --apex-table-chip-background-color: #FFF2EF;
|
|
1898
1979
|
>
|
|
1899
1980
|
> --apex-table-chip-color-secondary: #0B1222;
|
|
1900
1981
|
> --apex-table-chip-background-color-secondary: #E2E2E2;
|
|
1901
1982
|
>
|
|
1983
|
+
> /* Chip colors can also be set per-value via cellOptions.color / cellOptions.backgroundColor */
|
|
1984
|
+
>
|
|
1985
|
+
> /* Cell icon color (set per-value via cellOptions.iconColor, applies to both fill and stroke SVGs) */
|
|
1986
|
+
> --apex-table-cell-icon-fill: unset;
|
|
1987
|
+
> --apex-table-cell-icon-stroke: unset;
|
|
1988
|
+
>
|
|
1902
1989
|
> /* Sticky header background when stuck */
|
|
1903
1990
|
> --apex-table-header-background-color: #FFFFFF;
|
|
1904
1991
|
>
|
|
@@ -24,6 +24,7 @@ var ApexTableColumnType;
|
|
|
24
24
|
ApexTableColumnType[ApexTableColumnType["Actions"] = 6] = "Actions";
|
|
25
25
|
ApexTableColumnType[ApexTableColumnType["Checkbox"] = 7] = "Checkbox";
|
|
26
26
|
ApexTableColumnType[ApexTableColumnType["List"] = 8] = "List";
|
|
27
|
+
ApexTableColumnType[ApexTableColumnType["Status"] = 9] = "Status";
|
|
27
28
|
})(ApexTableColumnType || (ApexTableColumnType = {}));
|
|
28
29
|
class ApexTableComponent {
|
|
29
30
|
constructor(elementRef, osService, formBuilder, scrollBlockService, injector) {
|
|
@@ -256,6 +257,8 @@ class ApexTableComponent {
|
|
|
256
257
|
return this.actionCellTpl;
|
|
257
258
|
case ApexTableColumnType.List:
|
|
258
259
|
return this.listCellTpl;
|
|
260
|
+
case ApexTableColumnType.Status:
|
|
261
|
+
return this.statusCellTpl;
|
|
259
262
|
default:
|
|
260
263
|
return this.textCellTpl;
|
|
261
264
|
}
|
|
@@ -341,17 +344,41 @@ class ApexTableComponent {
|
|
|
341
344
|
}
|
|
342
345
|
}, row);
|
|
343
346
|
}
|
|
344
|
-
|
|
345
|
-
if (!column.cellOptions?.
|
|
347
|
+
getTextColor(row, column) {
|
|
348
|
+
if (!column.cellOptions?.textColor) {
|
|
346
349
|
return null;
|
|
350
|
+
}
|
|
351
|
+
const value = this.getDescendantProp(row, column);
|
|
352
|
+
return column.cellOptions.textColor[value] || null;
|
|
353
|
+
}
|
|
354
|
+
getChipColor(row, column) {
|
|
355
|
+
if (!column.cellOptions?.chipColor) {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
347
358
|
const value = this.getDescendantProp(row, column);
|
|
348
|
-
return column.cellOptions.
|
|
359
|
+
return column.cellOptions.chipColor[value] || null;
|
|
360
|
+
}
|
|
361
|
+
getChipBackgroundColor(row, column) {
|
|
362
|
+
if (!column.cellOptions?.chipBackgroundColor) {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
const value = this.getDescendantProp(row, column);
|
|
366
|
+
return column.cellOptions.chipBackgroundColor[value] || null;
|
|
367
|
+
}
|
|
368
|
+
getCellIconColor(row, column) {
|
|
369
|
+
if (!column.cellOptions?.iconColor) {
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
const value = this.getDescendantProp(row, column);
|
|
373
|
+
return column.cellOptions.iconColor[value] || null;
|
|
349
374
|
}
|
|
350
375
|
getCellIcon(row, column) {
|
|
351
|
-
if (!column.cellOptions?.icon)
|
|
376
|
+
if (!column.cellOptions?.icon) {
|
|
352
377
|
return null;
|
|
353
|
-
|
|
378
|
+
}
|
|
379
|
+
if (typeof column.cellOptions.icon === 'string') {
|
|
354
380
|
return column.cellOptions.icon;
|
|
381
|
+
}
|
|
355
382
|
const value = this.getDescendantProp(row, column);
|
|
356
383
|
return column.cellOptions.icon[value] || null;
|
|
357
384
|
}
|
|
@@ -395,6 +422,14 @@ class ApexTableComponent {
|
|
|
395
422
|
}
|
|
396
423
|
return column.chipLabel[this.getDescendantProp(row, column)];
|
|
397
424
|
}
|
|
425
|
+
isStatusStepCompleted(row, column, stepIndex) {
|
|
426
|
+
if (!column.statusSteps?.length) {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
const currentValue = this.getDescendantProp(row, column);
|
|
430
|
+
const currentIndex = column.statusSteps.findIndex(s => s.value === currentValue);
|
|
431
|
+
return currentIndex !== -1 && stepIndex <= currentIndex;
|
|
432
|
+
}
|
|
398
433
|
getCheckboxState(row, column) {
|
|
399
434
|
let state = this.getDescendantProp(row, column);
|
|
400
435
|
if (typeof state !== 'boolean') {
|
|
@@ -748,7 +783,7 @@ class ApexTableComponent {
|
|
|
748
783
|
}
|
|
749
784
|
}
|
|
750
785
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ApexTableComponent, deps: [{ token: i0.ElementRef }, { token: i1.OSService }, { token: i2.FormBuilder }, { token: i1.ScrollBlockService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
751
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ApexTableComponent, isStandalone: true, selector: "apex-table", inputs: { data: "data", dataLength: "dataLength", columns: "columns", filter: "filter", serverSide: "serverSide", isLoading: "isLoading", sortIndex: "sortIndex", sortable: "sortable", sortDirection: "sortDirection", pageSize: "pageSize", currentPage: "currentPage", pageable: "pageable", pageSizeOptions: "pageSizeOptions", virtualScroll: "virtualScroll", tableMaxHeight: "tableMaxHeight", stickyHeader: "stickyHeader", editMode: "editMode" }, outputs: { tableChange: "tableChange", selectionChange: "selectionChange", editModeChange: "editModeChange" }, host: { listeners: { "document:click": "onClick($event)", "document:scroll": "onScroll()", "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "theadRef", first: true, predicate: ["theadRef"], descendants: true }, { propertyName: "cdkViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "DropdownElement", first: true, predicate: ["dropdownElement"], descendants: true }, { propertyName: "textCellTpl", first: true, predicate: ["textCell"], descendants: true, static: true }, { propertyName: "numberCellTpl", first: true, predicate: ["numberCell"], descendants: true, static: true }, { propertyName: "currencyCellTpl", first: true, predicate: ["currencyCell"], descendants: true, static: true }, { propertyName: "numberMathCellTpl", first: true, predicate: ["numberMathCell"], descendants: true, static: true }, { propertyName: "dateCellTpl", first: true, predicate: ["dateCell"], descendants: true, static: true }, { propertyName: "chipCellTpl", first: true, predicate: ["chipCell"], descendants: true, static: true }, { propertyName: "checkboxCellTpl", first: true, predicate: ["checkboxCell"], descendants: true, static: true }, { propertyName: "actionCellTpl", first: true, predicate: ["actionCell"], descendants: true, static: true }, { propertyName: "listCellTpl", first: true, predicate: ["listCell"], descendants: true, static: true }, { propertyName: "moreActionsList", predicate: ["moreActionsList"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" [ngClass]=\"{ 'is-loading': isLoading, 'sticky-header': stickyHeader, 'header-stuck': isHeaderStuck() }\">\n @if (virtualScroll) {\n @if (stickyHeader) {\n <table class=\"sticky-virtual-header\">\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n </table>\n }\n\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize\" class=\"cdk-table-viewport\" [ngStyle]=\"{ height: virtualViewportHeight() + 'px' }\" [style.overflow-y]=\"showViewportScroll() ? 'auto' : 'hidden'\" (scrolled)=\"onViewportScroll()\">\n <table>\n @if (!stickyHeader) {\n <thead #theadRef>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n }\n\n <tbody>\n <tr *cdkVirtualFor=\"let row of pageData(); trackBy: trackByIndex\" [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\" [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n } @else {\n <table>\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n\n <tbody>\n @for (row of pageData(); track $index) {\n <tr [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (currentActiveRow()?.isDropdown && currentActiveColumn()) {\n <ng-container *ngTemplateOutlet=\"multipleActionsDropdown; context: { row: currentActiveRow(), column: currentActiveColumn() }\"></ng-container>\n }\n\n @if (filter && filteredData() && filteredData().length === 0) {\n <div class=\"row no-data\">\n <span>No data matching the filter:</span>\n\n <span>\"{{ filter }}\"</span>\n </div>\n }\n\n @if (!filter && data && data.length === 0) {\n <div class=\"row no-data\">No data available.</div>\n }\n\n @if (pageable && pageData().length !== 0) {\n <div class=\"paging\">\n <div class=\"visible-range\">{{ visibleRange() }}</div>\n\n <ng-container *ngTemplateOutlet=\"pagePicker; context: { totalPages: totalPages() }\"></ng-container>\n\n <div class=\"page-size-option-picker\">\n <span>Items per page:</span>\n\n <apex-select class=\"table\" [options]=\"pageSizeSelectOptions\"></apex-select>\n </div>\n </div>\n }\n</div>\n\n<ng-template #textCell let-row=\"row\" let-column=\"column\" let-index=\"$index\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '', column.cellOptions?.icon ? 'has-icon' : '']\"\n [style.color]=\"getCellColor(row, column)\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition !== 'right') {\n <div class=\"cell-icon\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n <span class=\"cell-text\">{{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) }}{{ column.suffix ? column.suffix : '' }}</span>\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition === 'right') {\n <div class=\"cell-icon\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #dateCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"getClass(row, column)\">\n {{ formatDate(getDescendantProp(row, column), column.dateFormat) }}\n </div>\n</ng-template>\n\n<ng-template #currencyCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\">\n\n @if (getDescendantProp(row, column) !== undefined) {\n {{ column.prefix ? column.prefix : '' }}{{ (getDescendantProp(row, column) / 100) | number }}\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberMathCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #actionCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell actions\">\n\n @for (action of column.singleActions; track $index) {\n @if (handleActionShow(action, row, column)) {\n <div ApexTooltip (click)=\"action.execute && action.execute(row)\" [apexTooltip]=\"action.label\" [tooltipPosition]=\"tooltipPosition.Above\" class=\"action-icon-wrapper\" [ngClass]=\"{ 'disabled': action.disabled }\">\n <apex-img [src]=\" 'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n </div>\n }\n }\n\n @if (column.multipleActions) {\n <div class=\"action-icon-wrapper\" #moreActionsList [ngClass]=\"{ 'opened': row.isDropdown }\" (click)=\"toggleActionDropdown(row, column, $event)\">\n <svg class=\"multiple-action-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M10.3047 8C10.3047 8.34612 10.2021 8.68446 10.0098 8.97225C9.81747 9.26004 9.54416 9.48434 9.22438 9.61679C8.90461 9.74924 8.55275 9.7839 8.21328 9.71638C7.87381 9.64885 7.56199 9.48218 7.31725 9.23744C7.07251 8.9927 6.90584 8.68088 6.83831 8.34141C6.77079 8.00194 6.80545 7.65008 6.9379 7.33031C7.07035 7.01053 7.29465 6.73722 7.58244 6.54493C7.87023 6.35264 8.20857 6.25 8.55469 6.25C9.01868 6.25046 9.46353 6.43498 9.79162 6.76307C10.1197 7.09116 10.3042 7.53601 10.3047 8ZM8.55469 4.75C8.90081 4.75 9.23915 4.64737 9.52694 4.45507C9.81472 4.26278 10.039 3.98947 10.1715 3.6697C10.3039 3.34993 10.3386 2.99806 10.2711 2.65859C10.2035 2.31913 10.0369 2.00731 9.79213 1.76256C9.54738 1.51782 9.23556 1.35115 8.8961 1.28363C8.55663 1.2161 8.20476 1.25076 7.88499 1.38321C7.56522 1.51566 7.29191 1.73997 7.09962 2.02775C6.90732 2.31554 6.80469 2.65388 6.80469 3C6.80515 3.46399 6.98967 3.90884 7.31776 4.23693C7.64585 4.56502 8.0907 4.74954 8.55469 4.75ZM8.55469 11.25C8.20857 11.25 7.87023 11.3526 7.58244 11.5449C7.29465 11.7372 7.07035 12.0105 6.9379 12.3303C6.80545 12.6501 6.77079 13.0019 6.83831 13.3414C6.90584 13.6809 7.07251 13.9927 7.31725 14.2374C7.56199 14.4822 7.87381 14.6489 8.21328 14.7164C8.55275 14.7839 8.90461 14.7492 9.22438 14.6168C9.54416 14.4843 9.81747 14.26 10.0098 13.9722C10.2021 13.6845 10.3047 13.3461 10.3047 13C10.3042 12.536 10.1197 12.0912 9.79162 11.7631C9.46353 11.435 9.01868 11.2505 8.55469 11.25Z\" fill=\"#5D6068\"/>\n </svg>\n </div>\n }\n\n </div>\n</ng-template>\n\n<ng-template #chipCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell chip\">\n @if (getChipLabel(row, column)) {\n <apex-chip [ngClass]=\"getClass(row, column)\"> {{ getChipLabel(row, column) }}</apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #listCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell list\">\n <span class=\"list-text\">{{ getListDisplayText(row, column) }}</span>\n\n @if (getListOverflowCount(row, column) > 0) {\n <apex-chip class=\"list-overflow-badge\"\n ApexTooltip\n [apexTooltip]=\"getListTooltipContent(row, column)\"\n [tooltipPosition]=\"tooltipPosition.Below\">\n +{{ getListOverflowCount(row, column) }}\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #checkboxCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"getCheckboxState(row, column)\" [disabled]=\"true\"></apex-checkbox>\n </div>\n</ng-template>\n\n<ng-template #multipleActionsDropdown let-row=\"row\" let-column=\"column\">\n <div #multipleActionsDropdownElement #dropdownElement class=\"more-actions-dropdown\">\n @for (action of column.multipleActions; track $index) {\n\n @if (handleActionShow(action, row, column)) {\n <div class=\"dropdown-row\" (click)=\"action.execute && action.execute(row)\">\n <apex-img [src]=\"'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n\n <span>{{ action.label }}</span>\n </div>\n }\n\n }\n </div>\n</ng-template>\n\n<ng-template #pagePicker let-totalPages=\"totalPages\">\n <div class=\"page-picker\">\n <!-- If page one should be visible -->\n @if (currentPage + 1 >= 3) {\n <span (click)=\"goToPage(0)\">1</span>\n <span class=\"style-excluded\">...</span>\n }\n\n <!-- Middle part of the page-picker -->\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage - 1 } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage, class: 'highlighted' } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage + 1 } \"></ng-container>\n\n <!-- If last page should be visible -->\n @if (currentPage + 1 <= totalPages - 2) {\n <span class=\"style-excluded\">...</span>\n <span (click)=\"goToPage(totalPages - 1)\">{{ totalPages }}</span>\n }\n\n </div>\n</ng-template>\n\n<ng-template #page let-page=\"page\" let-class=\"class\">\n @if (page >= 0 && page < totalPages()) {\n <span [ngClass]=\"class\" (click)=\"goToPage(page)\">{{ page + 1 }}</span>\n }\n</ng-template>\n\n<ng-template #headerRow>\n <tr>\n @for (column of columns; track $index) {\n <th [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <div class=\"cell\">\n <span>{{ column.label }}</span>\n\n @if (column.type !== TableColumnType.Actions && sortable) {\n <div class=\"arranger\" (click)=\"sortColumn(column)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3.11445 5.50005H8.88795C9.31895 5.50005 9.54795 4.99005 9.26145 4.66755L6.37495 1.42005C6.32813 1.3672 6.27063 1.32489 6.20624 1.29591C6.14186 1.26694 6.07205 1.25195 6.00145 1.25195C5.93084 1.25195 5.86104 1.26694 5.79666 1.29591C5.73227 1.32489 5.67477 1.3672 5.62795 1.42005L2.74045 4.66755C2.45395 4.99005 2.68295 5.50005 3.11445 5.50005ZM5.62745 10.5795C5.67427 10.6324 5.73177 10.6747 5.79616 10.7037C5.86054 10.7327 5.93034 10.7476 6.00095 10.7476C6.07155 10.7476 6.14136 10.7327 6.20574 10.7037C6.27013 10.6747 6.32763 10.6324 6.37445 10.5795L9.26095 7.33205C9.54795 7.01005 9.31895 6.50005 8.88745 6.50005H3.11445C2.68345 6.50005 2.45445 7.01005 2.74095 7.33255L5.62745 10.5795Z\" fill=\"#C6C6C6\"/>\n </svg>\n </div>\n }\n </div>\n </th>\n }\n\n @if (editMode) {\n <th class=\"select-column\">\n <div class=\"cell\">\n <span class=\"select-all-btn\" (click)=\"toggleSelectAll()\">{{ allSelected() ? 'Deselect' : 'Select all' }}</span>\n </div>\n </th>\n }\n </tr>\n</ng-template>\n", styles: [":host{display:block;touch-action:manipulation}.container{width:100%;position:relative;overflow:auto;padding:24px 0}.cdk-table-viewport{width:100%;display:block;overflow:auto;scrollbar-gutter:stable}.cdk-table-viewport .cdk-virtual-scroll-content-wrapper{width:100%;display:block}table{width:100%;text-align:center;table-layout:fixed;border-collapse:collapse}thead tr{border:none}.sticky-header{overflow:visible}.sticky-header table{border-collapse:separate;border-spacing:0}.sticky-header th{position:sticky;top:0;z-index:1}.header-stuck th{background-color:var(--apex-table-header-background-color, #FFFFFF)}tr{height:42px;vertical-align:middle;border-bottom:1px solid var(--apex-table-row-bottom-border-color, #E9E9E9)}th{min-width:60px;-webkit-user-select:none;user-select:none;font-weight:500;font-size:14px;color:var(--apex-table-first-row-text-color, #5D6068)}th .cell{display:flex;justify-content:center;align-items:center}td{scrollbar-width:thin;overflow:auto;text-overflow:clip;font-size:14px}td:focus{outline:none}td .cell{text-wrap:nowrap}apex-chip{max-width:100%;--apex-chip-background-color: #FFF2EF;--apex-chip-color: #F96138}.cell.has-change{display:flex;align-items:center;justify-content:center}.cell.has-icon{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;font-weight:600;line-height:20px}.cell-icon{width:16px;height:16px;min-width:16px;display:flex;align-items:center;justify-content:center}.cell-icon apex-img{width:16px;height:16px;display:flex;align-items:center;justify-content:center}.cell.has-icon .cell-text{color:inherit}apex-chip.change-positive{--apex-chip-background-color: var(--apex-table-change-positive-background, #E6F9F0);--apex-chip-color: var(--apex-table-change-positive-color, #00B67A);margin-left:8px}apex-chip.change-negative{--apex-chip-background-color: var(--apex-table-change-negative-background, #FFF2EF);--apex-chip-color: var(--apex-table-change-negative-color, #F96138);margin-left:8px}.cell{line-height:16px;box-sizing:border-box}.cell span{margin-right:4px}.cell.checkbox{display:flex;justify-content:center;align-items:center;--apex-checkbox-disabled-opacity: 1}.select-column .cell.checkbox apex-checkbox{pointer-events:none}.cell.list{display:flex;align-items:center;justify-content:flex-start;gap:8px}.list-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}apex-chip.list-overflow-badge{--apex-chip-background-color: var(--apex-table-list-overflow-background, transparent);--apex-chip-color: var(--apex-table-list-overflow-color, #FFA753);--apex-chip-font-size: 13px;--apex-chip-height: 20px;--apex-chip-padding: 0 4px;--apex-chip-border-width: 1px;--apex-chip-border-color: var(--apex-table-list-overflow-border-color, #FFEFE1);--apex-chip-border-radius: 5px;cursor:default;flex-shrink:0;font-weight:500;line-height:20px;letter-spacing:0}.cell.actions{display:flex;justify-content:center;align-items:center;gap:4px}.cell.actions apex-img{width:16px;height:16px}.cell.chip{display:flex;justify-content:center;align-items:center}.cell.chip .primary{--apex-chip-background-color: var(--apex-table-chip-background-color);--apex-chip-color: var(--apex-table-chip-color)}.cell.chip .secondary{--apex-chip-background-color: var(--apex-table-chip-background-color-secondary);--apex-chip-color: var(--apex-table-chip-color-secondary)}.select-column{width:80px;min-width:80px;max-width:80px}.select-all-btn{cursor:pointer;font-size:var(--apex-table-select-all-font-size, 12px);font-weight:var(--apex-table-select-all-font-weight, 600);color:var(--apex-table-select-all-color, #F96138);background-color:var(--apex-table-select-all-background-color, transparent);text-wrap:nowrap}.select-all-btn:hover{color:var(--apex-table-select-all-hover-color, #E0562F)}tr.selected-row{background-color:var(--apex-table-selected-row-background-color, #FFF7F5)}.no-data{display:flex;justify-content:center;font-size:14px;margin-top:16px}.more-actions-dropdown{min-width:184px;width:fit-content;position:fixed;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);border-radius:8px;box-shadow:0 4px 8px #d6d6d659;z-index:10}.dropdown-row{height:44px;display:flex;align-items:center;justify-content:flex-start;font-size:14px;font-weight:500;box-sizing:border-box;overflow:visible;cursor:pointer;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);padding:0 12px}.dropdown-row:hover{background-color:var(--apex-table-more-actions-dropdown-hover-background-color, #F3F3F3)}.dropdown-row apex-img{width:20px;height:20px}.dropdown-row apex-img path{fill:var(--apex-table-dropdown-action-icon-fill, #5D6068);stroke:var(--apex-table-dropdown-action-icon-stroke, #FFFFFF00)}.dropdown-row:hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.dropdown-row span{margin:0 12px;text-wrap:nowrap}.is-loading{opacity:.5;pointer-events:none}.container.is-loading:after{width:0px;height:2px;content:\" \";position:sticky;top:0;left:-50%;display:block;background-color:var(--apex-table-loading-bar-color, #FF7F50);animation:lineAnimation 1s linear infinite;border-radius:20px;z-index:1}.action-icon-wrapper{width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer}.action-icon-wrapper:not(.disabled):hover{border-radius:4px;background:var(--apex-table-action-hover-background-color, #F7F8FB)}.action-icon-wrapper apex-img path{fill:var(--apex-table-action-icon-fill, #5D6068);stroke:var(--apex-table-action-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover svg path,.opened .multiple-action-icon path{fill:var(--apex-table-action-more-icon-fill, #F96138);stroke:var(--apex-table-action-more-icon-stroke, #FFFFFF00)}.action-icon-wrapper apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-fill, #F96138);stroke:var(--apex-table-action-secondary-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-hover-fill, #5D6068);stroke:var(--apex-table-action-secondary-icon-hover-stroke, #FFFFFF00)}.arranger{width:14px;height:14px;cursor:pointer}.arranger svg:hover{transform:scale(1.15)}.paging{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;-webkit-user-select:none;user-select:none;margin-top:12px}.paging .items-per-page{line-height:10px;margin-right:8px}.mobile .visible-range{margin:0 12px}.page-picker{display:flex;justify-content:center;gap:14px}.page-picker span{min-width:24px;height:24px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;border-radius:24px;gap:10px;transition:color .25s,background-color .25s}.page-picker span.highlighted,.page-picker span:hover:not(.style-excluded){cursor:pointer;color:var(--apex-table-page-picker-text-color, #FFF);background:var(--apex-table-page-picker-background, #F96138)}.page-size-option-picker{display:flex;align-items:center}.page-size-option-picker span{text-wrap:nowrap;margin-right:8px}@media(max-width:940px){.paging{flex-direction:column;row-gap:16px;margin-top:24px}.visible-range{order:1}}@keyframes lineAnimation{0%{width:0px}50%{left:20%;width:80%}to{left:100%;width:100%}}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ApexChipComponent, selector: "apex-chip", inputs: ["closeIcon", "options"], outputs: ["closeChange"] }, { kind: "component", type: ApexImageComponent, selector: "apex-img", inputs: ["src", "alt"] }, { kind: "component", type: ApexSelectComponent, selector: "apex-select", inputs: ["options"], outputs: ["selectChange", "helperTextChange"] }, { kind: "directive", type: ApexTooltipDirective, selector: "[apexTooltip]", inputs: ["apexTooltip", "tooltipPosition"] }, { kind: "component", type: ApexCheckboxComponent, selector: "apex-checkbox", inputs: ["checked", "disabled", "tooltip", "options"], outputs: ["clickChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] }); }
|
|
786
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ApexTableComponent, isStandalone: true, selector: "apex-table", inputs: { data: "data", dataLength: "dataLength", columns: "columns", filter: "filter", serverSide: "serverSide", isLoading: "isLoading", sortIndex: "sortIndex", sortable: "sortable", sortDirection: "sortDirection", pageSize: "pageSize", currentPage: "currentPage", pageable: "pageable", pageSizeOptions: "pageSizeOptions", virtualScroll: "virtualScroll", tableMaxHeight: "tableMaxHeight", stickyHeader: "stickyHeader", editMode: "editMode" }, outputs: { tableChange: "tableChange", selectionChange: "selectionChange", editModeChange: "editModeChange" }, host: { listeners: { "document:click": "onClick($event)", "document:scroll": "onScroll()", "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "theadRef", first: true, predicate: ["theadRef"], descendants: true }, { propertyName: "cdkViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "DropdownElement", first: true, predicate: ["dropdownElement"], descendants: true }, { propertyName: "textCellTpl", first: true, predicate: ["textCell"], descendants: true, static: true }, { propertyName: "numberCellTpl", first: true, predicate: ["numberCell"], descendants: true, static: true }, { propertyName: "currencyCellTpl", first: true, predicate: ["currencyCell"], descendants: true, static: true }, { propertyName: "numberMathCellTpl", first: true, predicate: ["numberMathCell"], descendants: true, static: true }, { propertyName: "dateCellTpl", first: true, predicate: ["dateCell"], descendants: true, static: true }, { propertyName: "chipCellTpl", first: true, predicate: ["chipCell"], descendants: true, static: true }, { propertyName: "checkboxCellTpl", first: true, predicate: ["checkboxCell"], descendants: true, static: true }, { propertyName: "actionCellTpl", first: true, predicate: ["actionCell"], descendants: true, static: true }, { propertyName: "listCellTpl", first: true, predicate: ["listCell"], descendants: true, static: true }, { propertyName: "statusCellTpl", first: true, predicate: ["statusCell"], descendants: true, static: true }, { propertyName: "moreActionsList", predicate: ["moreActionsList"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" [ngClass]=\"{ 'is-loading': isLoading, 'sticky-header': stickyHeader, 'header-stuck': isHeaderStuck() }\">\n @if (virtualScroll) {\n @if (stickyHeader) {\n <table class=\"sticky-virtual-header\">\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n </table>\n }\n\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize\" class=\"cdk-table-viewport\" [ngStyle]=\"{ height: virtualViewportHeight() + 'px' }\" [style.overflow-y]=\"showViewportScroll() ? 'auto' : 'hidden'\" (scrolled)=\"onViewportScroll()\">\n <table>\n @if (!stickyHeader) {\n <thead #theadRef>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n }\n\n <tbody>\n <tr *cdkVirtualFor=\"let row of pageData(); trackBy: trackByIndex\" [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\" [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n } @else {\n <table>\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n\n <tbody>\n @for (row of pageData(); track $index) {\n <tr [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (currentActiveRow()?.isDropdown && currentActiveColumn()) {\n <ng-container *ngTemplateOutlet=\"multipleActionsDropdown; context: { row: currentActiveRow(), column: currentActiveColumn() }\"></ng-container>\n }\n\n @if (filter && filteredData() && filteredData().length === 0) {\n <div class=\"row no-data\">\n <span>No data matching the filter:</span>\n\n <span>\"{{ filter }}\"</span>\n </div>\n }\n\n @if (!filter && data && data.length === 0) {\n <div class=\"row no-data\">No data available.</div>\n }\n\n @if (pageable && pageData().length !== 0) {\n <div class=\"paging\">\n <div class=\"visible-range\">{{ visibleRange() }}</div>\n\n <ng-container *ngTemplateOutlet=\"pagePicker; context: { totalPages: totalPages() }\"></ng-container>\n\n <div class=\"page-size-option-picker\">\n <span>Items per page:</span>\n\n <apex-select class=\"table\" [options]=\"pageSizeSelectOptions\"></apex-select>\n </div>\n </div>\n }\n</div>\n\n<ng-template #textCell let-row=\"row\" let-column=\"column\" let-index=\"$index\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '', column.cellOptions?.icon ? 'has-icon' : '']\"\n [style.color]=\"getTextColor(row, column)\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition !== 'right') {\n <div class=\"cell-icon\" [class.has-color]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-fill]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-stroke]=\"getCellIconColor(row, column)\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n <span class=\"cell-text\">{{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) }}{{ column.suffix ? column.suffix : '' }}</span>\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition === 'right') {\n <div class=\"cell-icon\" [class.has-color]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-fill]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-stroke]=\"getCellIconColor(row, column)\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #dateCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"getClass(row, column)\">\n {{ formatDate(getDescendantProp(row, column), column.dateFormat) }}\n </div>\n</ng-template>\n\n<ng-template #currencyCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\">\n\n @if (getDescendantProp(row, column) !== undefined) {\n {{ column.prefix ? column.prefix : '' }}{{ (getDescendantProp(row, column) / 100) | number }}\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberMathCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #actionCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell actions\">\n\n @for (action of column.singleActions; track $index) {\n @if (handleActionShow(action, row, column)) {\n <div ApexTooltip (click)=\"action.execute && action.execute(row)\" [apexTooltip]=\"action.label\" [tooltipPosition]=\"tooltipPosition.Above\" class=\"action-icon-wrapper\" [ngClass]=\"{ 'disabled': action.disabled }\">\n <apex-img [src]=\" 'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n </div>\n }\n }\n\n @if (column.multipleActions) {\n <div class=\"action-icon-wrapper\" #moreActionsList [ngClass]=\"{ 'opened': row.isDropdown }\" (click)=\"toggleActionDropdown(row, column, $event)\">\n <svg class=\"multiple-action-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M10.3047 8C10.3047 8.34612 10.2021 8.68446 10.0098 8.97225C9.81747 9.26004 9.54416 9.48434 9.22438 9.61679C8.90461 9.74924 8.55275 9.7839 8.21328 9.71638C7.87381 9.64885 7.56199 9.48218 7.31725 9.23744C7.07251 8.9927 6.90584 8.68088 6.83831 8.34141C6.77079 8.00194 6.80545 7.65008 6.9379 7.33031C7.07035 7.01053 7.29465 6.73722 7.58244 6.54493C7.87023 6.35264 8.20857 6.25 8.55469 6.25C9.01868 6.25046 9.46353 6.43498 9.79162 6.76307C10.1197 7.09116 10.3042 7.53601 10.3047 8ZM8.55469 4.75C8.90081 4.75 9.23915 4.64737 9.52694 4.45507C9.81472 4.26278 10.039 3.98947 10.1715 3.6697C10.3039 3.34993 10.3386 2.99806 10.2711 2.65859C10.2035 2.31913 10.0369 2.00731 9.79213 1.76256C9.54738 1.51782 9.23556 1.35115 8.8961 1.28363C8.55663 1.2161 8.20476 1.25076 7.88499 1.38321C7.56522 1.51566 7.29191 1.73997 7.09962 2.02775C6.90732 2.31554 6.80469 2.65388 6.80469 3C6.80515 3.46399 6.98967 3.90884 7.31776 4.23693C7.64585 4.56502 8.0907 4.74954 8.55469 4.75ZM8.55469 11.25C8.20857 11.25 7.87023 11.3526 7.58244 11.5449C7.29465 11.7372 7.07035 12.0105 6.9379 12.3303C6.80545 12.6501 6.77079 13.0019 6.83831 13.3414C6.90584 13.6809 7.07251 13.9927 7.31725 14.2374C7.56199 14.4822 7.87381 14.6489 8.21328 14.7164C8.55275 14.7839 8.90461 14.7492 9.22438 14.6168C9.54416 14.4843 9.81747 14.26 10.0098 13.9722C10.2021 13.6845 10.3047 13.3461 10.3047 13C10.3042 12.536 10.1197 12.0912 9.79162 11.7631C9.46353 11.435 9.01868 11.2505 8.55469 11.25Z\"/>\n </svg>\n </div>\n }\n\n </div>\n</ng-template>\n\n<ng-template #chipCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell chip\">\n @if (getChipLabel(row, column)) {\n <apex-chip [ngClass]=\"getClass(row, column)\"\n [style.--apex-chip-color]=\"getChipColor(row, column)\"\n [style.--apex-chip-background-color]=\"getChipBackgroundColor(row, column)\"> {{ getChipLabel(row, column) }}</apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #statusCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell status\">\n @for (step of column.statusSteps; track step.value; let i = $index) {\n <div class=\"status-step\" [class.completed]=\"isStatusStepCompleted(row, column, i)\">\n <span class=\"status-step-label\">{{ step.label }}</span>\n\n <div class=\"status-step-bar\"\n [style.background-color]=\"isStatusStepCompleted(row, column, i) ? step.color : null\">\n </div>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #listCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell list\">\n <span class=\"list-text\">{{ getListDisplayText(row, column) }}</span>\n\n @if (getListOverflowCount(row, column) > 0) {\n <apex-chip class=\"list-overflow-badge\"\n ApexTooltip\n [apexTooltip]=\"getListTooltipContent(row, column)\"\n [tooltipPosition]=\"tooltipPosition.Below\">\n +{{ getListOverflowCount(row, column) }}\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #checkboxCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"getCheckboxState(row, column)\" [disabled]=\"true\"></apex-checkbox>\n </div>\n</ng-template>\n\n<ng-template #multipleActionsDropdown let-row=\"row\" let-column=\"column\">\n <div #multipleActionsDropdownElement #dropdownElement class=\"more-actions-dropdown\">\n @for (action of column.multipleActions; track $index) {\n\n @if (handleActionShow(action, row, column)) {\n <div class=\"dropdown-row\" (click)=\"action.execute && action.execute(row)\">\n <apex-img [src]=\"'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n\n <span>{{ action.label }}</span>\n </div>\n }\n\n }\n </div>\n</ng-template>\n\n<ng-template #pagePicker let-totalPages=\"totalPages\">\n <div class=\"page-picker\">\n <!-- If page one should be visible -->\n @if (currentPage + 1 >= 3) {\n <span (click)=\"goToPage(0)\">1</span>\n <span class=\"style-excluded\">...</span>\n }\n\n <!-- Middle part of the page-picker -->\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage - 1 } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage, class: 'highlighted' } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage + 1 } \"></ng-container>\n\n <!-- If last page should be visible -->\n @if (currentPage + 1 <= totalPages - 2) {\n <span class=\"style-excluded\">...</span>\n <span (click)=\"goToPage(totalPages - 1)\">{{ totalPages }}</span>\n }\n\n </div>\n</ng-template>\n\n<ng-template #page let-page=\"page\" let-class=\"class\">\n @if (page >= 0 && page < totalPages()) {\n <span [ngClass]=\"class\" (click)=\"goToPage(page)\">{{ page + 1 }}</span>\n }\n</ng-template>\n\n<ng-template #headerRow>\n <tr>\n @for (column of columns; track $index) {\n <th [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <div class=\"cell\">\n <span>{{ column.label }}</span>\n\n @if (column.type !== TableColumnType.Actions && sortable) {\n <div class=\"arranger\" (click)=\"sortColumn(column)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3.11445 5.50005H8.88795C9.31895 5.50005 9.54795 4.99005 9.26145 4.66755L6.37495 1.42005C6.32813 1.3672 6.27063 1.32489 6.20624 1.29591C6.14186 1.26694 6.07205 1.25195 6.00145 1.25195C5.93084 1.25195 5.86104 1.26694 5.79666 1.29591C5.73227 1.32489 5.67477 1.3672 5.62795 1.42005L2.74045 4.66755C2.45395 4.99005 2.68295 5.50005 3.11445 5.50005ZM5.62745 10.5795C5.67427 10.6324 5.73177 10.6747 5.79616 10.7037C5.86054 10.7327 5.93034 10.7476 6.00095 10.7476C6.07155 10.7476 6.14136 10.7327 6.20574 10.7037C6.27013 10.6747 6.32763 10.6324 6.37445 10.5795L9.26095 7.33205C9.54795 7.01005 9.31895 6.50005 8.88745 6.50005H3.11445C2.68345 6.50005 2.45445 7.01005 2.74095 7.33255L5.62745 10.5795Z\" fill=\"#C6C6C6\"/>\n </svg>\n </div>\n }\n </div>\n </th>\n }\n\n @if (editMode) {\n <th class=\"select-column\">\n <div class=\"cell\">\n <span class=\"select-all-btn\" (click)=\"toggleSelectAll()\">{{ allSelected() ? 'Deselect' : 'Select all' }}</span>\n </div>\n </th>\n }\n </tr>\n</ng-template>\n", styles: [":host{display:block;touch-action:manipulation}.container{width:100%;position:relative;overflow:auto;padding:24px 0}.cdk-table-viewport{width:100%;display:block;overflow:auto;scrollbar-gutter:stable}.cdk-table-viewport .cdk-virtual-scroll-content-wrapper{width:100%;display:block}table{width:100%;text-align:center;table-layout:fixed;border-collapse:collapse}thead tr{border:none}.sticky-header{overflow:visible}.sticky-header table{border-collapse:separate;border-spacing:0}.sticky-header th{position:sticky;top:0;z-index:1}.header-stuck th{background-color:var(--apex-table-header-background-color, #FFFFFF)}tr{height:42px;vertical-align:middle;border-bottom:1px solid var(--apex-table-row-bottom-border-color, #E9E9E9)}th{min-width:60px;-webkit-user-select:none;user-select:none;font-weight:500;font-size:14px;color:var(--apex-table-first-row-text-color, #5D6068)}th .cell{display:flex;justify-content:center;align-items:center}td{scrollbar-width:thin;overflow:auto;text-overflow:clip;font-size:14px}td:focus{outline:none}td .cell{text-wrap:nowrap}apex-chip{max-width:100%;--apex-chip-background-color: #FFF2EF;--apex-chip-color: #F96138}.cell.has-change{display:flex;align-items:center;justify-content:center}.cell.has-icon{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;font-weight:600;line-height:20px}.cell-icon{width:16px;height:16px;min-width:16px;display:flex;align-items:center;justify-content:center}.cell-icon apex-img{width:16px;height:16px;display:flex;align-items:center;justify-content:center}.cell-icon.has-color path{fill:var(--apex-table-cell-icon-fill);stroke:var(--apex-table-cell-icon-stroke)}.cell.has-icon .cell-text{color:inherit}apex-chip.change-positive{--apex-chip-background-color: var(--apex-table-change-positive-background, #E6F9F0);--apex-chip-color: var(--apex-table-change-positive-color, #00B67A);margin-left:8px}apex-chip.change-negative{--apex-chip-background-color: var(--apex-table-change-negative-background, #FFF2EF);--apex-chip-color: var(--apex-table-change-negative-color, #F96138);margin-left:8px}.cell{line-height:16px;box-sizing:border-box}.cell span{margin-right:4px}.cell.checkbox{display:flex;justify-content:center;align-items:center;--apex-checkbox-disabled-opacity: 1}.select-column .cell.checkbox apex-checkbox{pointer-events:none}.cell.list{display:flex;align-items:center;justify-content:flex-start;gap:8px}.list-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}apex-chip.list-overflow-badge{--apex-chip-background-color: var(--apex-table-list-overflow-background, transparent);--apex-chip-color: var(--apex-table-list-overflow-color, #FFA753);--apex-chip-font-size: 13px;--apex-chip-height: 20px;--apex-chip-padding: 0 4px;--apex-chip-border-width: 1px;--apex-chip-border-color: var(--apex-table-list-overflow-border-color, #FFEFE1);--apex-chip-border-radius: 5px;cursor:default;flex-shrink:0;font-weight:500;line-height:20px;letter-spacing:0}.cell.actions{display:flex;justify-content:center;align-items:center;gap:4px}.cell.actions apex-img{width:16px;height:16px}.cell.chip{display:flex;justify-content:center;align-items:center}.cell.chip .primary{--apex-chip-background-color: var(--apex-table-chip-background-color);--apex-chip-color: var(--apex-table-chip-color)}.cell.chip .secondary{--apex-chip-background-color: var(--apex-table-chip-background-color-secondary);--apex-chip-color: var(--apex-table-chip-color-secondary)}.cell.status{display:flex;align-items:center;gap:var(--apex-table-status-gap, 8px)}.status-step{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}.status-step-label{font-size:12px;line-height:16px;color:var(--apex-table-status-label-color, #888B95);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-step.completed .status-step-label{color:var(--apex-table-status-label-completed-color, #191B22);font-weight:600}.status-step-bar{height:var(--apex-table-status-bar-height, 3px);border-radius:2px;background-color:var(--apex-table-status-incomplete-color, #E5E7EB)}.select-column{width:80px;min-width:80px;max-width:80px}.select-all-btn{cursor:pointer;font-size:var(--apex-table-select-all-font-size, 12px);font-weight:var(--apex-table-select-all-font-weight, 600);color:var(--apex-table-select-all-color, #F96138);background-color:var(--apex-table-select-all-background-color, transparent);text-wrap:nowrap}.select-all-btn:hover{color:var(--apex-table-select-all-hover-color, #E0562F)}tr.selected-row{background-color:var(--apex-table-selected-row-background-color, #FFF7F5)}.no-data{display:flex;justify-content:center;font-size:14px;margin-top:16px}.more-actions-dropdown{min-width:184px;width:fit-content;position:fixed;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);border-radius:8px;box-shadow:0 4px 8px #d6d6d659;z-index:10}.dropdown-row{height:44px;display:flex;align-items:center;justify-content:flex-start;font-size:14px;font-weight:500;box-sizing:border-box;overflow:visible;cursor:pointer;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);padding:0 12px}.dropdown-row:hover{background-color:var(--apex-table-more-actions-dropdown-hover-background-color, #F3F3F3)}.dropdown-row apex-img{width:20px;height:20px}.dropdown-row apex-img path{fill:var(--apex-table-dropdown-action-icon-fill, #5D6068);stroke:var(--apex-table-dropdown-action-icon-stroke, #FFFFFF00)}.dropdown-row:hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.dropdown-row span{margin:0 12px;text-wrap:nowrap}.is-loading{opacity:.5;pointer-events:none}.container.is-loading:after{width:0px;height:2px;content:\" \";position:sticky;top:0;left:-50%;display:block;background-color:var(--apex-table-loading-bar-color, #FF7F50);animation:lineAnimation 1s linear infinite;border-radius:20px;z-index:1}.action-icon-wrapper{width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer}.action-icon-wrapper:not(.disabled):hover{border-radius:4px;background:var(--apex-table-action-hover-background-color, #F7F8FB)}.action-icon-wrapper apex-img path{fill:var(--apex-table-action-icon-fill, #5D6068);stroke:var(--apex-table-action-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.multiple-action-icon path{fill:var(--apex-table-action-more-icon-default-fill, #5D6068);stroke:var(--apex-table-action-more-icon-default-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover svg path,.opened .multiple-action-icon path{fill:var(--apex-table-action-more-icon-fill, #F96138);stroke:var(--apex-table-action-more-icon-stroke, #FFFFFF00)}.action-icon-wrapper apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-fill, #F96138);stroke:var(--apex-table-action-secondary-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-hover-fill, #5D6068);stroke:var(--apex-table-action-secondary-icon-hover-stroke, #FFFFFF00)}.arranger{width:14px;height:14px;cursor:pointer}.arranger svg:hover{transform:scale(1.15)}.paging{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;-webkit-user-select:none;user-select:none;margin-top:12px}.paging .items-per-page{line-height:10px;margin-right:8px}.mobile .visible-range{margin:0 12px}.page-picker{display:flex;justify-content:center;gap:14px}.page-picker span{min-width:24px;height:24px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;border-radius:24px;gap:10px;transition:color .25s,background-color .25s}.page-picker span.highlighted,.page-picker span:hover:not(.style-excluded){cursor:pointer;color:var(--apex-table-page-picker-text-color, #FFF);background:var(--apex-table-page-picker-background, #F96138)}.page-size-option-picker{display:flex;align-items:center}.page-size-option-picker span{text-wrap:nowrap;margin-right:8px}@media(max-width:940px){.paging{flex-direction:column;row-gap:16px;margin-top:24px}.visible-range{order:1}}@keyframes lineAnimation{0%{width:0px}50%{left:20%;width:80%}to{left:100%;width:100%}}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ApexChipComponent, selector: "apex-chip", inputs: ["closeIcon", "options"], outputs: ["closeChange"] }, { kind: "component", type: ApexImageComponent, selector: "apex-img", inputs: ["src", "alt"] }, { kind: "component", type: ApexSelectComponent, selector: "apex-select", inputs: ["options"], outputs: ["selectChange", "helperTextChange"] }, { kind: "directive", type: ApexTooltipDirective, selector: "[apexTooltip]", inputs: ["apexTooltip", "tooltipPosition"] }, { kind: "component", type: ApexCheckboxComponent, selector: "apex-checkbox", inputs: ["checked", "disabled", "tooltip", "options"], outputs: ["clickChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] }); }
|
|
752
787
|
}
|
|
753
788
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ApexTableComponent, decorators: [{
|
|
754
789
|
type: Component,
|
|
@@ -763,7 +798,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
|
|
|
763
798
|
ApexTooltipDirective,
|
|
764
799
|
ApexCheckboxComponent,
|
|
765
800
|
ScrollingModule,
|
|
766
|
-
], template: "<div class=\"container\" [ngClass]=\"{ 'is-loading': isLoading, 'sticky-header': stickyHeader, 'header-stuck': isHeaderStuck() }\">\n @if (virtualScroll) {\n @if (stickyHeader) {\n <table class=\"sticky-virtual-header\">\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n </table>\n }\n\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize\" class=\"cdk-table-viewport\" [ngStyle]=\"{ height: virtualViewportHeight() + 'px' }\" [style.overflow-y]=\"showViewportScroll() ? 'auto' : 'hidden'\" (scrolled)=\"onViewportScroll()\">\n <table>\n @if (!stickyHeader) {\n <thead #theadRef>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n }\n\n <tbody>\n <tr *cdkVirtualFor=\"let row of pageData(); trackBy: trackByIndex\" [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\" [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n } @else {\n <table>\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n\n <tbody>\n @for (row of pageData(); track $index) {\n <tr [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (currentActiveRow()?.isDropdown && currentActiveColumn()) {\n <ng-container *ngTemplateOutlet=\"multipleActionsDropdown; context: { row: currentActiveRow(), column: currentActiveColumn() }\"></ng-container>\n }\n\n @if (filter && filteredData() && filteredData().length === 0) {\n <div class=\"row no-data\">\n <span>No data matching the filter:</span>\n\n <span>\"{{ filter }}\"</span>\n </div>\n }\n\n @if (!filter && data && data.length === 0) {\n <div class=\"row no-data\">No data available.</div>\n }\n\n @if (pageable && pageData().length !== 0) {\n <div class=\"paging\">\n <div class=\"visible-range\">{{ visibleRange() }}</div>\n\n <ng-container *ngTemplateOutlet=\"pagePicker; context: { totalPages: totalPages() }\"></ng-container>\n\n <div class=\"page-size-option-picker\">\n <span>Items per page:</span>\n\n <apex-select class=\"table\" [options]=\"pageSizeSelectOptions\"></apex-select>\n </div>\n </div>\n }\n</div>\n\n<ng-template #textCell let-row=\"row\" let-column=\"column\" let-index=\"$index\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '', column.cellOptions?.icon ? 'has-icon' : '']\"\n [style.color]=\"getCellColor(row, column)\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition !== 'right') {\n <div class=\"cell-icon\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n <span class=\"cell-text\">{{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) }}{{ column.suffix ? column.suffix : '' }}</span>\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition === 'right') {\n <div class=\"cell-icon\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #dateCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"getClass(row, column)\">\n {{ formatDate(getDescendantProp(row, column), column.dateFormat) }}\n </div>\n</ng-template>\n\n<ng-template #currencyCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\">\n\n @if (getDescendantProp(row, column) !== undefined) {\n {{ column.prefix ? column.prefix : '' }}{{ (getDescendantProp(row, column) / 100) | number }}\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberMathCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #actionCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell actions\">\n\n @for (action of column.singleActions; track $index) {\n @if (handleActionShow(action, row, column)) {\n <div ApexTooltip (click)=\"action.execute && action.execute(row)\" [apexTooltip]=\"action.label\" [tooltipPosition]=\"tooltipPosition.Above\" class=\"action-icon-wrapper\" [ngClass]=\"{ 'disabled': action.disabled }\">\n <apex-img [src]=\" 'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n </div>\n }\n }\n\n @if (column.multipleActions) {\n <div class=\"action-icon-wrapper\" #moreActionsList [ngClass]=\"{ 'opened': row.isDropdown }\" (click)=\"toggleActionDropdown(row, column, $event)\">\n <svg class=\"multiple-action-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M10.3047 8C10.3047 8.34612 10.2021 8.68446 10.0098 8.97225C9.81747 9.26004 9.54416 9.48434 9.22438 9.61679C8.90461 9.74924 8.55275 9.7839 8.21328 9.71638C7.87381 9.64885 7.56199 9.48218 7.31725 9.23744C7.07251 8.9927 6.90584 8.68088 6.83831 8.34141C6.77079 8.00194 6.80545 7.65008 6.9379 7.33031C7.07035 7.01053 7.29465 6.73722 7.58244 6.54493C7.87023 6.35264 8.20857 6.25 8.55469 6.25C9.01868 6.25046 9.46353 6.43498 9.79162 6.76307C10.1197 7.09116 10.3042 7.53601 10.3047 8ZM8.55469 4.75C8.90081 4.75 9.23915 4.64737 9.52694 4.45507C9.81472 4.26278 10.039 3.98947 10.1715 3.6697C10.3039 3.34993 10.3386 2.99806 10.2711 2.65859C10.2035 2.31913 10.0369 2.00731 9.79213 1.76256C9.54738 1.51782 9.23556 1.35115 8.8961 1.28363C8.55663 1.2161 8.20476 1.25076 7.88499 1.38321C7.56522 1.51566 7.29191 1.73997 7.09962 2.02775C6.90732 2.31554 6.80469 2.65388 6.80469 3C6.80515 3.46399 6.98967 3.90884 7.31776 4.23693C7.64585 4.56502 8.0907 4.74954 8.55469 4.75ZM8.55469 11.25C8.20857 11.25 7.87023 11.3526 7.58244 11.5449C7.29465 11.7372 7.07035 12.0105 6.9379 12.3303C6.80545 12.6501 6.77079 13.0019 6.83831 13.3414C6.90584 13.6809 7.07251 13.9927 7.31725 14.2374C7.56199 14.4822 7.87381 14.6489 8.21328 14.7164C8.55275 14.7839 8.90461 14.7492 9.22438 14.6168C9.54416 14.4843 9.81747 14.26 10.0098 13.9722C10.2021 13.6845 10.3047 13.3461 10.3047 13C10.3042 12.536 10.1197 12.0912 9.79162 11.7631C9.46353 11.435 9.01868 11.2505 8.55469 11.25Z\" fill=\"#5D6068\"/>\n </svg>\n </div>\n }\n\n </div>\n</ng-template>\n\n<ng-template #chipCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell chip\">\n @if (getChipLabel(row, column)) {\n <apex-chip [ngClass]=\"getClass(row, column)\"> {{ getChipLabel(row, column) }}</apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #listCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell list\">\n <span class=\"list-text\">{{ getListDisplayText(row, column) }}</span>\n\n @if (getListOverflowCount(row, column) > 0) {\n <apex-chip class=\"list-overflow-badge\"\n ApexTooltip\n [apexTooltip]=\"getListTooltipContent(row, column)\"\n [tooltipPosition]=\"tooltipPosition.Below\">\n +{{ getListOverflowCount(row, column) }}\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #checkboxCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"getCheckboxState(row, column)\" [disabled]=\"true\"></apex-checkbox>\n </div>\n</ng-template>\n\n<ng-template #multipleActionsDropdown let-row=\"row\" let-column=\"column\">\n <div #multipleActionsDropdownElement #dropdownElement class=\"more-actions-dropdown\">\n @for (action of column.multipleActions; track $index) {\n\n @if (handleActionShow(action, row, column)) {\n <div class=\"dropdown-row\" (click)=\"action.execute && action.execute(row)\">\n <apex-img [src]=\"'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n\n <span>{{ action.label }}</span>\n </div>\n }\n\n }\n </div>\n</ng-template>\n\n<ng-template #pagePicker let-totalPages=\"totalPages\">\n <div class=\"page-picker\">\n <!-- If page one should be visible -->\n @if (currentPage + 1 >= 3) {\n <span (click)=\"goToPage(0)\">1</span>\n <span class=\"style-excluded\">...</span>\n }\n\n <!-- Middle part of the page-picker -->\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage - 1 } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage, class: 'highlighted' } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage + 1 } \"></ng-container>\n\n <!-- If last page should be visible -->\n @if (currentPage + 1 <= totalPages - 2) {\n <span class=\"style-excluded\">...</span>\n <span (click)=\"goToPage(totalPages - 1)\">{{ totalPages }}</span>\n }\n\n </div>\n</ng-template>\n\n<ng-template #page let-page=\"page\" let-class=\"class\">\n @if (page >= 0 && page < totalPages()) {\n <span [ngClass]=\"class\" (click)=\"goToPage(page)\">{{ page + 1 }}</span>\n }\n</ng-template>\n\n<ng-template #headerRow>\n <tr>\n @for (column of columns; track $index) {\n <th [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <div class=\"cell\">\n <span>{{ column.label }}</span>\n\n @if (column.type !== TableColumnType.Actions && sortable) {\n <div class=\"arranger\" (click)=\"sortColumn(column)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3.11445 5.50005H8.88795C9.31895 5.50005 9.54795 4.99005 9.26145 4.66755L6.37495 1.42005C6.32813 1.3672 6.27063 1.32489 6.20624 1.29591C6.14186 1.26694 6.07205 1.25195 6.00145 1.25195C5.93084 1.25195 5.86104 1.26694 5.79666 1.29591C5.73227 1.32489 5.67477 1.3672 5.62795 1.42005L2.74045 4.66755C2.45395 4.99005 2.68295 5.50005 3.11445 5.50005ZM5.62745 10.5795C5.67427 10.6324 5.73177 10.6747 5.79616 10.7037C5.86054 10.7327 5.93034 10.7476 6.00095 10.7476C6.07155 10.7476 6.14136 10.7327 6.20574 10.7037C6.27013 10.6747 6.32763 10.6324 6.37445 10.5795L9.26095 7.33205C9.54795 7.01005 9.31895 6.50005 8.88745 6.50005H3.11445C2.68345 6.50005 2.45445 7.01005 2.74095 7.33255L5.62745 10.5795Z\" fill=\"#C6C6C6\"/>\n </svg>\n </div>\n }\n </div>\n </th>\n }\n\n @if (editMode) {\n <th class=\"select-column\">\n <div class=\"cell\">\n <span class=\"select-all-btn\" (click)=\"toggleSelectAll()\">{{ allSelected() ? 'Deselect' : 'Select all' }}</span>\n </div>\n </th>\n }\n </tr>\n</ng-template>\n", styles: [":host{display:block;touch-action:manipulation}.container{width:100%;position:relative;overflow:auto;padding:24px 0}.cdk-table-viewport{width:100%;display:block;overflow:auto;scrollbar-gutter:stable}.cdk-table-viewport .cdk-virtual-scroll-content-wrapper{width:100%;display:block}table{width:100%;text-align:center;table-layout:fixed;border-collapse:collapse}thead tr{border:none}.sticky-header{overflow:visible}.sticky-header table{border-collapse:separate;border-spacing:0}.sticky-header th{position:sticky;top:0;z-index:1}.header-stuck th{background-color:var(--apex-table-header-background-color, #FFFFFF)}tr{height:42px;vertical-align:middle;border-bottom:1px solid var(--apex-table-row-bottom-border-color, #E9E9E9)}th{min-width:60px;-webkit-user-select:none;user-select:none;font-weight:500;font-size:14px;color:var(--apex-table-first-row-text-color, #5D6068)}th .cell{display:flex;justify-content:center;align-items:center}td{scrollbar-width:thin;overflow:auto;text-overflow:clip;font-size:14px}td:focus{outline:none}td .cell{text-wrap:nowrap}apex-chip{max-width:100%;--apex-chip-background-color: #FFF2EF;--apex-chip-color: #F96138}.cell.has-change{display:flex;align-items:center;justify-content:center}.cell.has-icon{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;font-weight:600;line-height:20px}.cell-icon{width:16px;height:16px;min-width:16px;display:flex;align-items:center;justify-content:center}.cell-icon apex-img{width:16px;height:16px;display:flex;align-items:center;justify-content:center}.cell.has-icon .cell-text{color:inherit}apex-chip.change-positive{--apex-chip-background-color: var(--apex-table-change-positive-background, #E6F9F0);--apex-chip-color: var(--apex-table-change-positive-color, #00B67A);margin-left:8px}apex-chip.change-negative{--apex-chip-background-color: var(--apex-table-change-negative-background, #FFF2EF);--apex-chip-color: var(--apex-table-change-negative-color, #F96138);margin-left:8px}.cell{line-height:16px;box-sizing:border-box}.cell span{margin-right:4px}.cell.checkbox{display:flex;justify-content:center;align-items:center;--apex-checkbox-disabled-opacity: 1}.select-column .cell.checkbox apex-checkbox{pointer-events:none}.cell.list{display:flex;align-items:center;justify-content:flex-start;gap:8px}.list-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}apex-chip.list-overflow-badge{--apex-chip-background-color: var(--apex-table-list-overflow-background, transparent);--apex-chip-color: var(--apex-table-list-overflow-color, #FFA753);--apex-chip-font-size: 13px;--apex-chip-height: 20px;--apex-chip-padding: 0 4px;--apex-chip-border-width: 1px;--apex-chip-border-color: var(--apex-table-list-overflow-border-color, #FFEFE1);--apex-chip-border-radius: 5px;cursor:default;flex-shrink:0;font-weight:500;line-height:20px;letter-spacing:0}.cell.actions{display:flex;justify-content:center;align-items:center;gap:4px}.cell.actions apex-img{width:16px;height:16px}.cell.chip{display:flex;justify-content:center;align-items:center}.cell.chip .primary{--apex-chip-background-color: var(--apex-table-chip-background-color);--apex-chip-color: var(--apex-table-chip-color)}.cell.chip .secondary{--apex-chip-background-color: var(--apex-table-chip-background-color-secondary);--apex-chip-color: var(--apex-table-chip-color-secondary)}.select-column{width:80px;min-width:80px;max-width:80px}.select-all-btn{cursor:pointer;font-size:var(--apex-table-select-all-font-size, 12px);font-weight:var(--apex-table-select-all-font-weight, 600);color:var(--apex-table-select-all-color, #F96138);background-color:var(--apex-table-select-all-background-color, transparent);text-wrap:nowrap}.select-all-btn:hover{color:var(--apex-table-select-all-hover-color, #E0562F)}tr.selected-row{background-color:var(--apex-table-selected-row-background-color, #FFF7F5)}.no-data{display:flex;justify-content:center;font-size:14px;margin-top:16px}.more-actions-dropdown{min-width:184px;width:fit-content;position:fixed;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);border-radius:8px;box-shadow:0 4px 8px #d6d6d659;z-index:10}.dropdown-row{height:44px;display:flex;align-items:center;justify-content:flex-start;font-size:14px;font-weight:500;box-sizing:border-box;overflow:visible;cursor:pointer;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);padding:0 12px}.dropdown-row:hover{background-color:var(--apex-table-more-actions-dropdown-hover-background-color, #F3F3F3)}.dropdown-row apex-img{width:20px;height:20px}.dropdown-row apex-img path{fill:var(--apex-table-dropdown-action-icon-fill, #5D6068);stroke:var(--apex-table-dropdown-action-icon-stroke, #FFFFFF00)}.dropdown-row:hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.dropdown-row span{margin:0 12px;text-wrap:nowrap}.is-loading{opacity:.5;pointer-events:none}.container.is-loading:after{width:0px;height:2px;content:\" \";position:sticky;top:0;left:-50%;display:block;background-color:var(--apex-table-loading-bar-color, #FF7F50);animation:lineAnimation 1s linear infinite;border-radius:20px;z-index:1}.action-icon-wrapper{width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer}.action-icon-wrapper:not(.disabled):hover{border-radius:4px;background:var(--apex-table-action-hover-background-color, #F7F8FB)}.action-icon-wrapper apex-img path{fill:var(--apex-table-action-icon-fill, #5D6068);stroke:var(--apex-table-action-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover svg path,.opened .multiple-action-icon path{fill:var(--apex-table-action-more-icon-fill, #F96138);stroke:var(--apex-table-action-more-icon-stroke, #FFFFFF00)}.action-icon-wrapper apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-fill, #F96138);stroke:var(--apex-table-action-secondary-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-hover-fill, #5D6068);stroke:var(--apex-table-action-secondary-icon-hover-stroke, #FFFFFF00)}.arranger{width:14px;height:14px;cursor:pointer}.arranger svg:hover{transform:scale(1.15)}.paging{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;-webkit-user-select:none;user-select:none;margin-top:12px}.paging .items-per-page{line-height:10px;margin-right:8px}.mobile .visible-range{margin:0 12px}.page-picker{display:flex;justify-content:center;gap:14px}.page-picker span{min-width:24px;height:24px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;border-radius:24px;gap:10px;transition:color .25s,background-color .25s}.page-picker span.highlighted,.page-picker span:hover:not(.style-excluded){cursor:pointer;color:var(--apex-table-page-picker-text-color, #FFF);background:var(--apex-table-page-picker-background, #F96138)}.page-size-option-picker{display:flex;align-items:center}.page-size-option-picker span{text-wrap:nowrap;margin-right:8px}@media(max-width:940px){.paging{flex-direction:column;row-gap:16px;margin-top:24px}.visible-range{order:1}}@keyframes lineAnimation{0%{width:0px}50%{left:20%;width:80%}to{left:100%;width:100%}}\n"] }]
|
|
801
|
+
], template: "<div class=\"container\" [ngClass]=\"{ 'is-loading': isLoading, 'sticky-header': stickyHeader, 'header-stuck': isHeaderStuck() }\">\n @if (virtualScroll) {\n @if (stickyHeader) {\n <table class=\"sticky-virtual-header\">\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n </table>\n }\n\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize\" class=\"cdk-table-viewport\" [ngStyle]=\"{ height: virtualViewportHeight() + 'px' }\" [style.overflow-y]=\"showViewportScroll() ? 'auto' : 'hidden'\" (scrolled)=\"onViewportScroll()\">\n <table>\n @if (!stickyHeader) {\n <thead #theadRef>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n }\n\n <tbody>\n <tr *cdkVirtualFor=\"let row of pageData(); trackBy: trackByIndex\" [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\" [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n } @else {\n <table>\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n\n <tbody>\n @for (row of pageData(); track $index) {\n <tr [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (currentActiveRow()?.isDropdown && currentActiveColumn()) {\n <ng-container *ngTemplateOutlet=\"multipleActionsDropdown; context: { row: currentActiveRow(), column: currentActiveColumn() }\"></ng-container>\n }\n\n @if (filter && filteredData() && filteredData().length === 0) {\n <div class=\"row no-data\">\n <span>No data matching the filter:</span>\n\n <span>\"{{ filter }}\"</span>\n </div>\n }\n\n @if (!filter && data && data.length === 0) {\n <div class=\"row no-data\">No data available.</div>\n }\n\n @if (pageable && pageData().length !== 0) {\n <div class=\"paging\">\n <div class=\"visible-range\">{{ visibleRange() }}</div>\n\n <ng-container *ngTemplateOutlet=\"pagePicker; context: { totalPages: totalPages() }\"></ng-container>\n\n <div class=\"page-size-option-picker\">\n <span>Items per page:</span>\n\n <apex-select class=\"table\" [options]=\"pageSizeSelectOptions\"></apex-select>\n </div>\n </div>\n }\n</div>\n\n<ng-template #textCell let-row=\"row\" let-column=\"column\" let-index=\"$index\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '', column.cellOptions?.icon ? 'has-icon' : '']\"\n [style.color]=\"getTextColor(row, column)\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition !== 'right') {\n <div class=\"cell-icon\" [class.has-color]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-fill]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-stroke]=\"getCellIconColor(row, column)\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n <span class=\"cell-text\">{{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) }}{{ column.suffix ? column.suffix : '' }}</span>\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition === 'right') {\n <div class=\"cell-icon\" [class.has-color]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-fill]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-stroke]=\"getCellIconColor(row, column)\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #dateCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"getClass(row, column)\">\n {{ formatDate(getDescendantProp(row, column), column.dateFormat) }}\n </div>\n</ng-template>\n\n<ng-template #currencyCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\">\n\n @if (getDescendantProp(row, column) !== undefined) {\n {{ column.prefix ? column.prefix : '' }}{{ (getDescendantProp(row, column) / 100) | number }}\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberMathCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #actionCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell actions\">\n\n @for (action of column.singleActions; track $index) {\n @if (handleActionShow(action, row, column)) {\n <div ApexTooltip (click)=\"action.execute && action.execute(row)\" [apexTooltip]=\"action.label\" [tooltipPosition]=\"tooltipPosition.Above\" class=\"action-icon-wrapper\" [ngClass]=\"{ 'disabled': action.disabled }\">\n <apex-img [src]=\" 'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n </div>\n }\n }\n\n @if (column.multipleActions) {\n <div class=\"action-icon-wrapper\" #moreActionsList [ngClass]=\"{ 'opened': row.isDropdown }\" (click)=\"toggleActionDropdown(row, column, $event)\">\n <svg class=\"multiple-action-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M10.3047 8C10.3047 8.34612 10.2021 8.68446 10.0098 8.97225C9.81747 9.26004 9.54416 9.48434 9.22438 9.61679C8.90461 9.74924 8.55275 9.7839 8.21328 9.71638C7.87381 9.64885 7.56199 9.48218 7.31725 9.23744C7.07251 8.9927 6.90584 8.68088 6.83831 8.34141C6.77079 8.00194 6.80545 7.65008 6.9379 7.33031C7.07035 7.01053 7.29465 6.73722 7.58244 6.54493C7.87023 6.35264 8.20857 6.25 8.55469 6.25C9.01868 6.25046 9.46353 6.43498 9.79162 6.76307C10.1197 7.09116 10.3042 7.53601 10.3047 8ZM8.55469 4.75C8.90081 4.75 9.23915 4.64737 9.52694 4.45507C9.81472 4.26278 10.039 3.98947 10.1715 3.6697C10.3039 3.34993 10.3386 2.99806 10.2711 2.65859C10.2035 2.31913 10.0369 2.00731 9.79213 1.76256C9.54738 1.51782 9.23556 1.35115 8.8961 1.28363C8.55663 1.2161 8.20476 1.25076 7.88499 1.38321C7.56522 1.51566 7.29191 1.73997 7.09962 2.02775C6.90732 2.31554 6.80469 2.65388 6.80469 3C6.80515 3.46399 6.98967 3.90884 7.31776 4.23693C7.64585 4.56502 8.0907 4.74954 8.55469 4.75ZM8.55469 11.25C8.20857 11.25 7.87023 11.3526 7.58244 11.5449C7.29465 11.7372 7.07035 12.0105 6.9379 12.3303C6.80545 12.6501 6.77079 13.0019 6.83831 13.3414C6.90584 13.6809 7.07251 13.9927 7.31725 14.2374C7.56199 14.4822 7.87381 14.6489 8.21328 14.7164C8.55275 14.7839 8.90461 14.7492 9.22438 14.6168C9.54416 14.4843 9.81747 14.26 10.0098 13.9722C10.2021 13.6845 10.3047 13.3461 10.3047 13C10.3042 12.536 10.1197 12.0912 9.79162 11.7631C9.46353 11.435 9.01868 11.2505 8.55469 11.25Z\"/>\n </svg>\n </div>\n }\n\n </div>\n</ng-template>\n\n<ng-template #chipCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell chip\">\n @if (getChipLabel(row, column)) {\n <apex-chip [ngClass]=\"getClass(row, column)\"\n [style.--apex-chip-color]=\"getChipColor(row, column)\"\n [style.--apex-chip-background-color]=\"getChipBackgroundColor(row, column)\"> {{ getChipLabel(row, column) }}</apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #statusCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell status\">\n @for (step of column.statusSteps; track step.value; let i = $index) {\n <div class=\"status-step\" [class.completed]=\"isStatusStepCompleted(row, column, i)\">\n <span class=\"status-step-label\">{{ step.label }}</span>\n\n <div class=\"status-step-bar\"\n [style.background-color]=\"isStatusStepCompleted(row, column, i) ? step.color : null\">\n </div>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #listCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell list\">\n <span class=\"list-text\">{{ getListDisplayText(row, column) }}</span>\n\n @if (getListOverflowCount(row, column) > 0) {\n <apex-chip class=\"list-overflow-badge\"\n ApexTooltip\n [apexTooltip]=\"getListTooltipContent(row, column)\"\n [tooltipPosition]=\"tooltipPosition.Below\">\n +{{ getListOverflowCount(row, column) }}\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #checkboxCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"getCheckboxState(row, column)\" [disabled]=\"true\"></apex-checkbox>\n </div>\n</ng-template>\n\n<ng-template #multipleActionsDropdown let-row=\"row\" let-column=\"column\">\n <div #multipleActionsDropdownElement #dropdownElement class=\"more-actions-dropdown\">\n @for (action of column.multipleActions; track $index) {\n\n @if (handleActionShow(action, row, column)) {\n <div class=\"dropdown-row\" (click)=\"action.execute && action.execute(row)\">\n <apex-img [src]=\"'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n\n <span>{{ action.label }}</span>\n </div>\n }\n\n }\n </div>\n</ng-template>\n\n<ng-template #pagePicker let-totalPages=\"totalPages\">\n <div class=\"page-picker\">\n <!-- If page one should be visible -->\n @if (currentPage + 1 >= 3) {\n <span (click)=\"goToPage(0)\">1</span>\n <span class=\"style-excluded\">...</span>\n }\n\n <!-- Middle part of the page-picker -->\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage - 1 } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage, class: 'highlighted' } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage + 1 } \"></ng-container>\n\n <!-- If last page should be visible -->\n @if (currentPage + 1 <= totalPages - 2) {\n <span class=\"style-excluded\">...</span>\n <span (click)=\"goToPage(totalPages - 1)\">{{ totalPages }}</span>\n }\n\n </div>\n</ng-template>\n\n<ng-template #page let-page=\"page\" let-class=\"class\">\n @if (page >= 0 && page < totalPages()) {\n <span [ngClass]=\"class\" (click)=\"goToPage(page)\">{{ page + 1 }}</span>\n }\n</ng-template>\n\n<ng-template #headerRow>\n <tr>\n @for (column of columns; track $index) {\n <th [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <div class=\"cell\">\n <span>{{ column.label }}</span>\n\n @if (column.type !== TableColumnType.Actions && sortable) {\n <div class=\"arranger\" (click)=\"sortColumn(column)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3.11445 5.50005H8.88795C9.31895 5.50005 9.54795 4.99005 9.26145 4.66755L6.37495 1.42005C6.32813 1.3672 6.27063 1.32489 6.20624 1.29591C6.14186 1.26694 6.07205 1.25195 6.00145 1.25195C5.93084 1.25195 5.86104 1.26694 5.79666 1.29591C5.73227 1.32489 5.67477 1.3672 5.62795 1.42005L2.74045 4.66755C2.45395 4.99005 2.68295 5.50005 3.11445 5.50005ZM5.62745 10.5795C5.67427 10.6324 5.73177 10.6747 5.79616 10.7037C5.86054 10.7327 5.93034 10.7476 6.00095 10.7476C6.07155 10.7476 6.14136 10.7327 6.20574 10.7037C6.27013 10.6747 6.32763 10.6324 6.37445 10.5795L9.26095 7.33205C9.54795 7.01005 9.31895 6.50005 8.88745 6.50005H3.11445C2.68345 6.50005 2.45445 7.01005 2.74095 7.33255L5.62745 10.5795Z\" fill=\"#C6C6C6\"/>\n </svg>\n </div>\n }\n </div>\n </th>\n }\n\n @if (editMode) {\n <th class=\"select-column\">\n <div class=\"cell\">\n <span class=\"select-all-btn\" (click)=\"toggleSelectAll()\">{{ allSelected() ? 'Deselect' : 'Select all' }}</span>\n </div>\n </th>\n }\n </tr>\n</ng-template>\n", styles: [":host{display:block;touch-action:manipulation}.container{width:100%;position:relative;overflow:auto;padding:24px 0}.cdk-table-viewport{width:100%;display:block;overflow:auto;scrollbar-gutter:stable}.cdk-table-viewport .cdk-virtual-scroll-content-wrapper{width:100%;display:block}table{width:100%;text-align:center;table-layout:fixed;border-collapse:collapse}thead tr{border:none}.sticky-header{overflow:visible}.sticky-header table{border-collapse:separate;border-spacing:0}.sticky-header th{position:sticky;top:0;z-index:1}.header-stuck th{background-color:var(--apex-table-header-background-color, #FFFFFF)}tr{height:42px;vertical-align:middle;border-bottom:1px solid var(--apex-table-row-bottom-border-color, #E9E9E9)}th{min-width:60px;-webkit-user-select:none;user-select:none;font-weight:500;font-size:14px;color:var(--apex-table-first-row-text-color, #5D6068)}th .cell{display:flex;justify-content:center;align-items:center}td{scrollbar-width:thin;overflow:auto;text-overflow:clip;font-size:14px}td:focus{outline:none}td .cell{text-wrap:nowrap}apex-chip{max-width:100%;--apex-chip-background-color: #FFF2EF;--apex-chip-color: #F96138}.cell.has-change{display:flex;align-items:center;justify-content:center}.cell.has-icon{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;font-weight:600;line-height:20px}.cell-icon{width:16px;height:16px;min-width:16px;display:flex;align-items:center;justify-content:center}.cell-icon apex-img{width:16px;height:16px;display:flex;align-items:center;justify-content:center}.cell-icon.has-color path{fill:var(--apex-table-cell-icon-fill);stroke:var(--apex-table-cell-icon-stroke)}.cell.has-icon .cell-text{color:inherit}apex-chip.change-positive{--apex-chip-background-color: var(--apex-table-change-positive-background, #E6F9F0);--apex-chip-color: var(--apex-table-change-positive-color, #00B67A);margin-left:8px}apex-chip.change-negative{--apex-chip-background-color: var(--apex-table-change-negative-background, #FFF2EF);--apex-chip-color: var(--apex-table-change-negative-color, #F96138);margin-left:8px}.cell{line-height:16px;box-sizing:border-box}.cell span{margin-right:4px}.cell.checkbox{display:flex;justify-content:center;align-items:center;--apex-checkbox-disabled-opacity: 1}.select-column .cell.checkbox apex-checkbox{pointer-events:none}.cell.list{display:flex;align-items:center;justify-content:flex-start;gap:8px}.list-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}apex-chip.list-overflow-badge{--apex-chip-background-color: var(--apex-table-list-overflow-background, transparent);--apex-chip-color: var(--apex-table-list-overflow-color, #FFA753);--apex-chip-font-size: 13px;--apex-chip-height: 20px;--apex-chip-padding: 0 4px;--apex-chip-border-width: 1px;--apex-chip-border-color: var(--apex-table-list-overflow-border-color, #FFEFE1);--apex-chip-border-radius: 5px;cursor:default;flex-shrink:0;font-weight:500;line-height:20px;letter-spacing:0}.cell.actions{display:flex;justify-content:center;align-items:center;gap:4px}.cell.actions apex-img{width:16px;height:16px}.cell.chip{display:flex;justify-content:center;align-items:center}.cell.chip .primary{--apex-chip-background-color: var(--apex-table-chip-background-color);--apex-chip-color: var(--apex-table-chip-color)}.cell.chip .secondary{--apex-chip-background-color: var(--apex-table-chip-background-color-secondary);--apex-chip-color: var(--apex-table-chip-color-secondary)}.cell.status{display:flex;align-items:center;gap:var(--apex-table-status-gap, 8px)}.status-step{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}.status-step-label{font-size:12px;line-height:16px;color:var(--apex-table-status-label-color, #888B95);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-step.completed .status-step-label{color:var(--apex-table-status-label-completed-color, #191B22);font-weight:600}.status-step-bar{height:var(--apex-table-status-bar-height, 3px);border-radius:2px;background-color:var(--apex-table-status-incomplete-color, #E5E7EB)}.select-column{width:80px;min-width:80px;max-width:80px}.select-all-btn{cursor:pointer;font-size:var(--apex-table-select-all-font-size, 12px);font-weight:var(--apex-table-select-all-font-weight, 600);color:var(--apex-table-select-all-color, #F96138);background-color:var(--apex-table-select-all-background-color, transparent);text-wrap:nowrap}.select-all-btn:hover{color:var(--apex-table-select-all-hover-color, #E0562F)}tr.selected-row{background-color:var(--apex-table-selected-row-background-color, #FFF7F5)}.no-data{display:flex;justify-content:center;font-size:14px;margin-top:16px}.more-actions-dropdown{min-width:184px;width:fit-content;position:fixed;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);border-radius:8px;box-shadow:0 4px 8px #d6d6d659;z-index:10}.dropdown-row{height:44px;display:flex;align-items:center;justify-content:flex-start;font-size:14px;font-weight:500;box-sizing:border-box;overflow:visible;cursor:pointer;background-color:var(--apex-table-more-actions-dropdown-background-color, #FFFFFF);padding:0 12px}.dropdown-row:hover{background-color:var(--apex-table-more-actions-dropdown-hover-background-color, #F3F3F3)}.dropdown-row apex-img{width:20px;height:20px}.dropdown-row apex-img path{fill:var(--apex-table-dropdown-action-icon-fill, #5D6068);stroke:var(--apex-table-dropdown-action-icon-stroke, #FFFFFF00)}.dropdown-row:hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.dropdown-row span{margin:0 12px;text-wrap:nowrap}.is-loading{opacity:.5;pointer-events:none}.container.is-loading:after{width:0px;height:2px;content:\" \";position:sticky;top:0;left:-50%;display:block;background-color:var(--apex-table-loading-bar-color, #FF7F50);animation:lineAnimation 1s linear infinite;border-radius:20px;z-index:1}.action-icon-wrapper{width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer}.action-icon-wrapper:not(.disabled):hover{border-radius:4px;background:var(--apex-table-action-hover-background-color, #F7F8FB)}.action-icon-wrapper apex-img path{fill:var(--apex-table-action-icon-fill, #5D6068);stroke:var(--apex-table-action-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img path{fill:var(--apex-table-action-icon-hover-fill, #F96138);stroke:var(--apex-table-action-icon-hover-stroke, #FFFFFF00)}.multiple-action-icon path{fill:var(--apex-table-action-more-icon-default-fill, #5D6068);stroke:var(--apex-table-action-more-icon-default-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover svg path,.opened .multiple-action-icon path{fill:var(--apex-table-action-more-icon-fill, #F96138);stroke:var(--apex-table-action-more-icon-stroke, #FFFFFF00)}.action-icon-wrapper apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-fill, #F96138);stroke:var(--apex-table-action-secondary-icon-stroke, #FFFFFF00)}.action-icon-wrapper:not(.disabled):hover apex-img.secondary path{fill:var(--apex-table-action-secondary-icon-hover-fill, #5D6068);stroke:var(--apex-table-action-secondary-icon-hover-stroke, #FFFFFF00)}.arranger{width:14px;height:14px;cursor:pointer}.arranger svg:hover{transform:scale(1.15)}.paging{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;-webkit-user-select:none;user-select:none;margin-top:12px}.paging .items-per-page{line-height:10px;margin-right:8px}.mobile .visible-range{margin:0 12px}.page-picker{display:flex;justify-content:center;gap:14px}.page-picker span{min-width:24px;height:24px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;border-radius:24px;gap:10px;transition:color .25s,background-color .25s}.page-picker span.highlighted,.page-picker span:hover:not(.style-excluded){cursor:pointer;color:var(--apex-table-page-picker-text-color, #FFF);background:var(--apex-table-page-picker-background, #F96138)}.page-size-option-picker{display:flex;align-items:center}.page-size-option-picker span{text-wrap:nowrap;margin-right:8px}@media(max-width:940px){.paging{flex-direction:column;row-gap:16px;margin-top:24px}.visible-range{order:1}}@keyframes lineAnimation{0%{width:0px}50%{left:20%;width:80%}to{left:100%;width:100%}}\n"] }]
|
|
767
802
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.OSService }, { type: i2.FormBuilder }, { type: i1.ScrollBlockService }, { type: i0.Injector }], propDecorators: { theadRef: [{
|
|
768
803
|
type: ViewChild,
|
|
769
804
|
args: ['theadRef']
|
|
@@ -803,6 +838,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
|
|
|
803
838
|
}], listCellTpl: [{
|
|
804
839
|
type: ViewChild,
|
|
805
840
|
args: ['listCell', { static: true }]
|
|
841
|
+
}], statusCellTpl: [{
|
|
842
|
+
type: ViewChild,
|
|
843
|
+
args: ['statusCell', { static: true }]
|
|
806
844
|
}], data: [{
|
|
807
845
|
type: Input
|
|
808
846
|
}], dataLength: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apexara-ng-components-table.mjs","sources":["../../../../projects/apexara/ng-components/table/src/table.component.ts","../../../../projects/apexara/ng-components/table/src/table.component.html","../../../../projects/apexara/ng-components/table/apexara-ng-components-table.ts"],"sourcesContent":["import { Component, ViewChildren, QueryList, ViewChild, ElementRef, Input, Output, EventEmitter, HostListener, SimpleChanges, TemplateRef, signal, Injector, afterNextRender } from '@angular/core';\nimport { NgTemplateOutlet, NgStyle, NgClass, DecimalPipe, formatDate } from '@angular/common';\nimport { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { ApexChipComponent } from '@apexara/ng-components/chip';\nimport { ApexImageComponent } from '@apexara/ng-components/image';\nimport { ApexCheckboxComponent } from '@apexara/ng-components/checkbox';\nimport { ApexSelectComponent, ApexSelectOptions } from '@apexara/ng-components/select';\n\nimport { OSService, MobileOS, ScrollBlockService } from '@apexara/ng-components/services';\n\nimport { ApexTooltipDirective, TooltipPosition } from '@apexara/ng-components/tooltip';\n\nexport interface ApexTableColumn {\n label?: string;\n value?: string;\n type?: ApexTableColumnType;\n width?: string;\n editable?: boolean;\n prefix?: string;\n suffix?: string;\n singleActions?: Action[];\n multipleActions?: Action[];\n dateFormat?: ApexDateFormatOptions;\n chipLabel?: { [key: string]: string };\n class?: string | { [key: string]: string };\n change?: string;\n listOptions?: ApexTableListOptions;\n cellOptions?: ApexTableCellOptions;\n}\n\nexport interface ApexTableListOptions {\n label?: string;\n max?: number;\n}\n\nexport interface ApexTableCellOptions {\n icon?: string | { [key: string]: string };\n iconPosition?: 'left' | 'right';\n color?: { [key: string]: string };\n}\n\nexport enum ApexTableColumnType {\n Text,\n Date,\n Currency,\n Chip,\n Number,\n NumberMath,\n Actions,\n Checkbox,\n List,\n}\n\nexport type ActionShowType = Array<{ property: string; values: any[]; exists?: boolean; }> \n\nexport interface Action {\n icon: string;\n label: string;\n class?: string;\n showOn?: ActionShowType;\n disabled?: boolean;\n execute?: (row: any) => void;\n}\n\nexport interface ApexTableChange {\n from: number;\n to: number;\n filter?: string;\n sort?: any;\n}\n\nexport interface ApexDateFormatOptions {\n format: string;\n locale: string;\n timezone?: string;\n}\n\ninterface PageFormControls {\n pageSize: FormControl<{ label: string, value: number }>;\n}\n\n@Component({\n standalone: true,\n selector: 'apex-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.css'],\n imports: [\n NgStyle,\n NgClass,\n DecimalPipe,\n NgTemplateOutlet,\n ApexChipComponent,\n ApexImageComponent,\n ApexSelectComponent,\n ApexTooltipDirective,\n ApexCheckboxComponent,\n ScrollingModule,\n ]\n})\n\nexport class ApexTableComponent {\n\n constructor(\n private elementRef: ElementRef,\n private osService: OSService,\n private formBuilder: FormBuilder,\n private scrollBlockService: ScrollBlockService,\n private injector: Injector) {\n }\n\n @ViewChild('theadRef') theadRef?: ElementRef<HTMLElement>;\n @ViewChildren('moreActionsList') moreActionsList!: QueryList<ElementRef>;\n @ViewChild(CdkVirtualScrollViewport) cdkViewport?: CdkVirtualScrollViewport;\n @ViewChild('dropdownElement') DropdownElement: ElementRef<any> | null = null;\n\n // Cell templates (mapped by type)\n @ViewChild('textCell', { static: true }) textCellTpl!: TemplateRef<any>;\n @ViewChild('numberCell', { static: true }) numberCellTpl!: TemplateRef<any>;\n @ViewChild('currencyCell', { static: true }) currencyCellTpl!: TemplateRef<any>;\n @ViewChild('numberMathCell', { static: true }) numberMathCellTpl!: TemplateRef<any>;\n @ViewChild('dateCell', { static: true }) dateCellTpl!: TemplateRef<any>;\n @ViewChild('chipCell', { static: true }) chipCellTpl!: TemplateRef<any>;\n @ViewChild('checkboxCell', { static: true }) checkboxCellTpl!: TemplateRef<any>;\n @ViewChild('actionCell', { static: true }) actionCellTpl!: TemplateRef<any>;\n @ViewChild('listCell', { static: true }) listCellTpl!: TemplateRef<any>;\n \n\n // Data configuration\n @Input() data!: any[];\n @Input() dataLength!: number;\n @Input() columns!: ApexTableColumn[];\n @Input() filter!: string;\n\n // Data source configuration (serverSide loaded or local data)\n @Input() serverSide!: boolean;\n @Input() isLoading!: boolean;\n\n // Sorting configuration\n @Input() sortIndex = 0;\n @Input() sortable = true;\n @Input() sortDirection: 'asc' | 'desc' = 'asc';\n\n // Pagination configuration\n @Input() pageSize = 10;\n @Input() currentPage = 0;\n @Input() pageable = false;\n @Input() pageSizeOptions = [ 10, 25, 50, 100, 1000 ];\n\n // Virtual scroll configuration (optimization for large datasets)\n @Input() virtualScroll: boolean = false; // For local data only\n @Input() tableMaxHeight: number = 800;\n\n // Sticky header configuration\n @Input() stickyHeader: boolean = false;\n\n // Edit mode configuration\n @Input() editMode: boolean = false;\n\n @Output() tableChange = new EventEmitter<ApexTableChange>()\n @Output() selectionChange = new EventEmitter<any[]>()\n @Output() editModeChange = new EventEmitter<boolean>()\n\n public itemSize: number = 42; // Must match CSS table row height\n\n public tooltipPosition = TooltipPosition;\n\n public TableColumnType = ApexTableColumnType;\n\n public totalPages = signal(0);\n public visibleRange = signal('');\n\n public filteredData = signal<any[]>([]);\n public pageData = signal<any[]>([]);\n\n public pageSizeSelectOptions!: ApexSelectOptions;\n\n public currentActiveRow = signal<any>(null);\n public currentActiveColumn = signal<ApexTableColumn | null>(null);\n public isDropdown = signal(false);\n public isHeaderStuck = signal(false);\n\n public selectedRows = signal<Set<any>>(new Set());\n public allSelected = signal(false);\n public virtualViewportHeight = signal(0);\n public showViewportScroll = signal(false);\n private lastSelectedIndex: number = -1;\n\n public formGroup!: FormGroup<PageFormControls>;\n\n private _dataLength!: number;\n\n @HostListener('document:click', ['$event'])\n public onClick(event: any): void {\n // TO DO: When two tables exists the dropdown from first table is not closed\n if (event.target !== this.DropdownElement?.nativeElement && event.target) {\n const row = this.currentActiveRow();\n\n if (row) {\n row.isDropdown = false;\n this.currentActiveRow.set(null);\n this.unlockScroll();\n }\n }\n }\n\n @HostListener('document:scroll')\n public onScroll(): void {\n\n if (this.stickyHeader) {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const stuck = rect.top < 0;\n\n if (stuck !== this.isHeaderStuck()) {\n this.isHeaderStuck.set(stuck);\n }\n }\n\n for (let item of this.moreActionsList) {\n if (item.nativeElement.classList.contains('opened') && this.DropdownElement) {\n let actionPos = item.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n actionPos.y += window.visualViewport!.offsetTop;\n }\n\n this.DropdownElement.nativeElement.style.top = `${ actionPos.y + actionPos.height }px`;\n\n break;\n }\n }\n }\n\n @HostListener('window:resize')\n public onResize(): void {\n\n for (let item of this.moreActionsList) {\n if (item.nativeElement.classList.contains('opened') && this.DropdownElement) { \n let actionPos = item.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n actionPos.x += window.visualViewport!.offsetLeft;\n }\n\n const dropdownWidth = this.DropdownElement.nativeElement.offsetWidth;\n\n const left = actionPos.x + dropdownWidth / 2 < window.innerWidth - 10 ? actionPos.x : window.innerWidth - 10 - dropdownWidth;\n \n this.DropdownElement.nativeElement.style.transform = left === actionPos.x ? 'translateX(-50%)' : '';\n this.DropdownElement.nativeElement.style.left = left + 'px';\n\n break;\n }\n }\n }\n\n public ngOnInit(): void {\n }\n\n public ngAfterViewInit(): void {\n const from = this.currentPage * this.pageSize;\n const to = from + this.pageSize;\n\n if (this.serverSide && !this.data) {\n this.tableChange.emit({ from, to, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n }\n\n if (!this.serverSide) {\n this.buildPaginationSelectDependecies();\n }\n\n this.updateViewportLayout();\n\n setTimeout(() => {\n this.cdkViewport?.checkViewportSize();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['isLoading'] && changes['isLoading'].currentValue === false) {\n if (this.data) {\n this._dataLength = this.data.length;\n }\n }\n\n if (changes['data'] && changes['data'].currentValue) {\n if (this.serverSide) {\n this.filteredData.set(this.data);\n\n this.preprocessData();\n } else {\n this.filteredData.set(this.filter ? this.filterData() : this.data);\n\n this.preprocessData();\n\n setTimeout(() => {\n this.sortColumn(this.columns[this.sortIndex], false);\n })\n }\n\n this._dataLength = this.dataLength ? this.dataLength : this.filteredData().length;\n }\n\n if (changes['filter'] && !changes['filter'].firstChange) {\n // The two ways of filtering data -> local and serverSide\n if (!this.serverSide) {\n this.filteredData.set(this.filterData());\n this._dataLength = this.filteredData().length;\n\n setTimeout(() => {\n this.goToFirstPage();\n });\n\n } else {\n setTimeout(() => {\n this.currentPage = 0;\n\n this.tableChange.emit({ from: 0, to: 0 + this.pageSize, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n });\n }\n\n }\n\n if (changes['editMode']) {\n this.editModeChange.emit(changes['editMode'].currentValue);\n\n if (!changes['editMode'].currentValue) {\n this.selectedRows.set(new Set());\n this.allSelected.set(false);\n this.lastSelectedIndex = -1;\n this.selectionChange.emit([]);\n }\n }\n\n if (changes['pageable'] && changes['pageable'].currentValue !== undefined) {\n this.buildPaginationSelectDependecies();\n }\n\n const from = this.currentPage * this.pageSize;\n const to = Math.min(this._dataLength, from + this.pageSize);\n \n this.calculateTotalPages();\n this.updateVisibleRange(from, to);\n this.updatePageData();\n this.refreshLayout();\n }\n\n public updatePageData(): void {\n const data = this.filteredData();\n if (!data || !data.length) {\n this.pageData.set([]);\n return;\n }\n\n if (!this.pageable) {\n this.pageData.set(data);\n return;\n }\n\n if (!this.serverSide) {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n\n this.pageData.set(data.slice(start, end));\n return;\n }\n\n this.pageData.set(data);\n }\n\n public updateVisibleRange(start: number, end: number): void {\n this.visibleRange.set(`Showing ${ start + 1 } to ${end} of ${this._dataLength} results`);\n }\n\n public calculateTotalPages(): void {\n this.totalPages.set(Math.ceil(this._dataLength / this.pageSize));\n }\n\n public trackByIndex(index: number): number {\n return index;\n }\n\n public updateViewportLayout(): void {\n const headerHeight = this.theadRef?.nativeElement?.getBoundingClientRect().height || 0;\n\n const data = this.filteredData();\n const renderedCount = this.serverSide\n ? (data ? data.length : 0)\n : (this.pageData() ? this.pageData().length : 0);\n\n // Update viewport height\n if (renderedCount <= 0) {\n this.virtualViewportHeight.set(headerHeight);\n } else {\n const maxTotal = this.tableMaxHeight;\n const bodyCapacity = Math.max(0, maxTotal - headerHeight);\n const rowsHeight = Math.min(bodyCapacity, this.itemSize * renderedCount);\n this.virtualViewportHeight.set(Math.max(0, headerHeight + rowsHeight));\n }\n\n // Update scroll visibility\n if (!this.virtualScroll) {\n this.showViewportScroll.set(false);\n } else {\n const availableBodyHeight = Math.max(0, this.tableMaxHeight - headerHeight);\n const rowsHeight = this.itemSize * renderedCount;\n this.showViewportScroll.set(rowsHeight > availableBodyHeight);\n }\n }\n\n public getCellTemplate(column: ApexTableColumn): TemplateRef<any> {\n switch (column.type) {\n case ApexTableColumnType.Number:\n return this.numberCellTpl;\n case ApexTableColumnType.Currency:\n return this.currencyCellTpl;\n case ApexTableColumnType.NumberMath:\n return this.numberMathCellTpl;\n case ApexTableColumnType.Date:\n return this.dateCellTpl;\n case ApexTableColumnType.Chip:\n return this.chipCellTpl;\n case ApexTableColumnType.Checkbox:\n return this.checkboxCellTpl;\n case ApexTableColumnType.Actions:\n return this.actionCellTpl;\n case ApexTableColumnType.List:\n return this.listCellTpl;\n default:\n return this.textCellTpl;\n }\n }\n\n private refreshLayout(): void {\n this.updateViewportLayout();\n\n setTimeout(() => {\n this.cdkViewport?.checkViewportSize();\n });\n }\n\n public goToPage(page: number): void {\n this.currentPage = page;\n this.calculatePages();\n }\n\n public goToPreviousPage(): void {\n this.currentPage--;\n this.calculatePages();\n }\n\n public goToNextPage(): void {\n this.currentPage++;\n this.calculatePages();\n }\n\n public goToFirstPage(): void {\n this.currentPage = 0;\n this.calculatePages();\n }\n\n public goToLastPage(): void {\n this.currentPage = this.totalPages() - 1;\n this.calculatePages();\n }\n\n public cellEdit(event: KeyboardEvent, column: string, currentPageRowIndex: number): void {\n const dataIndex = currentPageRowIndex + (this.currentPage * this.pageSize);\n const filtered = this.filteredData();\n\n if (column.indexOf('.') === -1) {\n filtered[dataIndex][column] = (event.target as HTMLDivElement).innerText;\n } else { // Nested properties\n let data = filtered[dataIndex];\n const fullPath = column.split('.');\n\n for (let i = 0; i < fullPath.length; i++) {\n if (i < fullPath.length - 1) {\n data = data[fullPath[i]];\n } else {\n data[fullPath[i]] = (event.target as HTMLDivElement).innerText;\n }\n }\n }\n }\n\n public formatDate(dateAsString: string | null | undefined, formatDateOptions: ApexDateFormatOptions = { format: 'shortDate', locale: 'en-US', timezone: undefined }): string {\n if (dateAsString === null || dateAsString === undefined || dateAsString === '') {\n return '';\n }\n\n return formatDate(dateAsString, formatDateOptions.format, formatDateOptions.locale, formatDateOptions.timezone);\n }\n\n public getClass(row: any, column: ApexTableColumn): string {\n if (!column.class) {\n return '';\n }\n\n if (typeof column.class === 'string') {\n return column.class;\n }\n\n return column.class[this.getDescendantProp(row, column)] || '';\n }\n\n public getDescendantProp(row: any, column: ApexTableColumn): any {\n if (!column.value || column.value === null) {\n return column.label;\n }\n\n // Case only on preprocessing - returns any numbers that have been passed in the column.value string\n if (isFinite(Number(column.value))) {\n return parseFloat(column.value);\n }\n\n if (column.type === this.TableColumnType.NumberMath) {\n return row[column.value];\n }\n\n return column.value.split('.')\n .reduce((prev: any, curr: string) => {\n if (prev && curr in prev) {\n return prev[curr];\n } else {\n return undefined;\n }\n }, row);\n }\n\n public getCellColor(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.color) return null;\n const value = this.getDescendantProp(row, column);\n return column.cellOptions.color[value] || null;\n }\n\n public getCellIcon(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.icon) return null;\n if (typeof column.cellOptions.icon === 'string') return column.cellOptions.icon;\n const value = this.getDescendantProp(row, column);\n return column.cellOptions.icon[value] || null;\n }\n\n public getChangeValue(row: any, column: ApexTableColumn): number | null {\n if (!column.change) return null;\n\n const value = this.getDescendantProp(row, { value: column.change } as ApexTableColumn);\n\n return typeof value === 'number' ? value : parseFloat(value) || null;\n }\n\n public getListDisplayText(row: any, column: ApexTableColumn): string {\n const arr = this.getDescendantProp(row, column);\n\n if (!Array.isArray(arr) || arr.length === 0) {\n return '--';\n }\n\n const max = column.listOptions?.max ?? 3;\n const visible = arr.slice(0, max);\n const labelKey = column.listOptions?.label;\n\n return visible.map(item => labelKey ? item[labelKey] : item).join(' / ');\n }\n\n public getListOverflowCount(row: any, column: ApexTableColumn): number {\n const arr = this.getDescendantProp(row, column);\n\n if (!Array.isArray(arr)) {\n return 0;\n }\n\n const max = column.listOptions?.max ?? 3;\n\n return Math.max(0, arr.length - max);\n }\n\n public getListTooltipContent(row: any, column: ApexTableColumn): string {\n const arr = this.getDescendantProp(row, column);\n\n if (!Array.isArray(arr)) {\n return '';\n }\n\n const max = column.listOptions?.max ?? 3;\n const hidden = arr.slice(max);\n const labelKey = column.listOptions?.label;\n\n return hidden.map(item => labelKey ? item[labelKey] : item).join('<br>');\n }\n\n public getChipLabel(row: any, column: ApexTableColumn): string {\n if (!column.chipLabel) {\n return column.label ? column.label : this.getDescendantProp(row, column);\n }\n\n return column.chipLabel[this.getDescendantProp(row, column)];\n }\n\n public getCheckboxState(row: any, column: ApexTableColumn): boolean {\n let state = this.getDescendantProp(row, column);\n\n if (typeof state !== 'boolean') {\n return false;\n }\n\n return state;\n }\n\n public handleActionShow(action: Action, row: any, column?: ApexTableColumn): boolean {\n if (!action.showOn || action.showOn.length === 0) {\n return true;\n }\n\n return action.showOn.every((condition) => {\n const rowValue = this.getDescendantProp(row, { value: condition.property });\n\n const ifValueExists = !!rowValue;\n \n if (condition.exists != null && condition.exists === ifValueExists) {\n return ifValueExists;\n }\n\n return condition.values.includes(rowValue);\n });\n }\n\n public sortColumn(column: any, changeSortDirection = true): void {\n if (!this.sortable) {\n return;\n }\n\n if (!column.value) {\n return;\n }\n\n if (changeSortDirection) {\n\n if (this.sortIndex == this.columns.indexOf(column)) {\n switch (this.sortDirection) {\n case 'asc':\n this.sortDirection = 'desc';\n break;\n case 'desc':\n this.sortDirection = 'asc';\n break;\n default:\n this.sortDirection = 'asc';\n break;\n }\n } else {\n this.sortDirection = 'asc';\n this.sortIndex = this.columns.indexOf(column);\n }\n\n }\n\n if (this.serverSide) {\n this.currentPage = 0;\n\n const start = this.currentPage * this.pageSize;\n const end = Math.min(this._dataLength, start + this.pageSize);\n\n this.tableChange.emit({ from: start, to: end, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n } else {\n this.goToFirstPage();\n\n this.sortData(this.filteredData(), column);\n this.updatePageData();\n }\n\n const row = this.currentActiveRow();\n if (row) {\n row.isDropdown = false;\n this.currentActiveRow.set(null);\n this.unlockScroll();\n }\n }\n\n public toggleActionDropdown(row: any, column: ApexTableColumn, event: any): void {\n // Prevent the event to be processed by the Hostlistener\n event.stopPropagation();\n\n const prevRow = this.currentActiveRow();\n if (prevRow) {\n prevRow.isDropdown = false;\n }\n\n row.isDropdown = !row.isDropdown;\n\n this.currentActiveRow.set(row);\n this.currentActiveColumn.set(column);\n\n // Wait for Angular to render the dropdown element via @if before positioning it.\n afterNextRender(() => {\n let actionPos!: DOMRect;\n\n for (let i of this.moreActionsList) {\n if (i.nativeElement.classList.contains('opened')) {\n actionPos = i.nativeElement.getBoundingClientRect();\n }\n }\n\n if (this.DropdownElement) {\n if (this.osService.mobileOS === MobileOS.iOS) {\n actionPos.y += window.visualViewport!.offsetTop;\n actionPos.x += window.visualViewport!.offsetLeft;\n }\n\n const dropdownWidth = this.DropdownElement.nativeElement.offsetWidth;\n\n const left = actionPos.x + dropdownWidth / 2 < window.innerWidth - 10 ? actionPos.x : window.innerWidth - 10 - dropdownWidth;\n\n this.DropdownElement.nativeElement.style.transform = left === actionPos.x ? 'translateX(-50%)' : '';\n this.DropdownElement.nativeElement.style.left = left + 'px';\n this.DropdownElement.nativeElement.style.top = `${ actionPos.y + actionPos.height }px`;\n\n this.lockScroll();\n } else {\n this.unlockScroll();\n }\n }, { injector: this.injector });\n }\n\n public onViewportScroll(): void {\n // Safety net: close dropdown if scroll somehow fires while it's open\n const row = this.currentActiveRow();\n if (row) {\n row.isDropdown = false;\n this.currentActiveRow.set(null);\n this.currentActiveColumn.set(null);\n this.unlockScroll();\n }\n }\n\n public toggleRowSelection(row: any, event?: MouseEvent): void {\n const pageData = this.pageData();\n const currentIndex = pageData.indexOf(row);\n\n this.selectedRows.update(s => {\n const next = new Set(s);\n if (event?.shiftKey && this.lastSelectedIndex !== -1 && currentIndex !== -1) {\n const start = Math.min(this.lastSelectedIndex, currentIndex);\n const end = Math.max(this.lastSelectedIndex, currentIndex);\n\n for (let i = start; i <= end; i++) {\n next.add(pageData[i]);\n }\n } else {\n if (next.has(row)) {\n next.delete(row);\n } else {\n next.add(row);\n }\n }\n return next;\n });\n\n this.lastSelectedIndex = currentIndex;\n this.allSelected.set(this.selectedRows().size === pageData.length);\n this.selectionChange.emit(Array.from(this.selectedRows()));\n }\n\n public toggleSelectAll(): void {\n const pageData = this.pageData();\n\n if (this.allSelected()) {\n this.selectedRows.set(new Set());\n this.allSelected.set(false);\n } else {\n this.selectedRows.set(new Set(pageData));\n this.allSelected.set(true);\n }\n\n this.selectionChange.emit(Array.from(this.selectedRows()));\n }\n\n public isRowSelected(row: any): boolean {\n return this.selectedRows().has(row);\n }\n\n private lockScroll(): void {\n this.scrollBlockService.activate();\n\n if (this.cdkViewport) {\n this.cdkViewport.elementRef.nativeElement.style.overflow = 'hidden';\n }\n }\n\n private unlockScroll(): void {\n this.scrollBlockService.deactivate();\n\n if (this.cdkViewport) {\n this.cdkViewport.elementRef.nativeElement.style.overflow = '';\n }\n }\n\n private preprocessData(): void {\n if (!this.data || this.data.length === 0) {\n return;\n }\n\n this.columns.forEach(column => {\n if (!column.value || column.type !== this.TableColumnType.NumberMath) {\n return;\n }\n\n this.data.forEach(row => {\n const result = this.calculateNumberMathCell(row, column);\n row[column.value as any] = result;\n });\n });\n }\n\n private calculateNumberMathCell(row: any, column: any): any {\n const expression = column.value.replace(\n /([a-zA-Z_][a-zA-Z0-9_.]*|\\d*\\.?\\d+)/g,\n (match: any) => {\n let value = this.getDescendantProp(row, { value: match });\n\n return (typeof value === 'number') ? value : parseFloat(value) || 0;\n }\n );\n\n let fn = new Function(`return ${expression};`);\n let result = fn();\n\n if (Number.isFinite(result)) {\n return result;\n }\n\n return this.getDescendantProp(row, column);\n }\n\n private filterData(): any[] {\n if (!this.data || this.data.length === 0) {\n return [];\n }\n\n let arrayToReturn: any[] = [ ];\n\n for (let row of this.data) {\n for (let column of this.columns) {\n if (!column.value) { continue; }\n\n let access = row[column.value];\n\n if (column.value.indexOf('.') !== -1 && column.type !== this.TableColumnType.NumberMath) {\n access = this.getAccessIfColumnValueIsObject(row, column);\n }\n\n if (access === undefined) {\n break;\n }\n\n const rowPropAsString = JSON.stringify(access).toLowerCase();\n\n if (rowPropAsString.includes(this.filter.toLowerCase())) {\n arrayToReturn.push(row);\n\n break;\n }\n }\n }\n\n return arrayToReturn;\n }\n\n private sortData(data: any[], column: ApexTableColumn): any[] {\n if (!data || data.length === 0 || !Array.isArray(data)) {\n return [];\n }\n\n if (column) {\n this.sortByProperty(data, column);\n }\n\n return data;\n }\n\n private sortByProperty(arr: any, column: any): number | void {\n if (this.sortDirection === 'desc') {\n this.sortReverse(arr, column);\n return;\n }\n\n return arr.sort((a: any, b: any) => {\n let valueA = a[column.value];\n let valueB = b[column.value];\n\n let access = column.value;\n\n if (access.indexOf('.') !== -1 && column.type !== this.TableColumnType.NumberMath) {\n valueA = this.getAccessIfColumnValueIsObject(a, column);\n valueB = this.getAccessIfColumnValueIsObject(b, column);\n } else {\n if (typeof valueA === 'string' && valueB !== undefined) {\n valueA = valueA.toLowerCase();\n valueB = valueB.toLowerCase();\n }\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return valueA - valueB;\n }\n \n if (!valueA && valueB) return -1;\n if (valueA && !valueB) return 1;\n\n if (!valueA && !valueB) return 0;\n\n if (valueA < valueB) return -1;\n if (valueA > valueB) return 1;\n\n return 0;\n });\n }\n\n private sortReverse(arr: any, column: any) {\n return arr.sort((a: any, b: any) => {\n let valueA = a[column.value];\n let valueB = b[column.value];\n\n let access = column.value;\n\n if (access.indexOf('.') !== -1 && column.type !== this.TableColumnType.NumberMath) {\n valueA = this.getAccessIfColumnValueIsObject(a, column);\n valueB = this.getAccessIfColumnValueIsObject(b, column);\n } else {\n if (typeof valueA === 'string' && valueB !== undefined) {\n valueA = valueA.toLowerCase();\n valueB = valueB.toLowerCase();\n }\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return valueB - valueA;\n }\n\n if (!valueA && valueB) return 1;\n if (valueA && !valueB) return -1;\n\n if (!valueA && !valueB) return 0;\n\n if (valueA < valueB) return 1;\n if (valueA > valueB) return -1;\n\n return 0;\n });\n }\n\n private getAccessIfColumnValueIsObject(row: any, column: ApexTableColumn): any {\n if (!column.value || column.value === null) {\n return undefined;\n }\n\n const keys = column.value.split('.');\n\n let access = row[keys[0]];\n\n for (let i = 1; i < keys.length; i++) {\n if (access && keys[i] in access) {\n access = access[keys[i]];\n } else {\n return undefined;\n }\n }\n\n return access;\n }\n\n private buildPaginationSelectDependecies(): void {\n const formControls: PageFormControls = {\n pageSize: this.formBuilder.control({ label: this.pageSize.toString(), value: this.pageSize }, { nonNullable: true, validators: [ Validators.required ] })\n };\n\n this.formGroup = this.formBuilder.group(formControls);\n\n const selectData = this.pageSizeOptions.map(item => ({\n label: item.toString(),\n value: item\n }));\n\n this.pageSizeSelectOptions = {\n label: '',\n data: selectData,\n formGroup: this.formGroup,\n formControlName: 'pageSize'\n };\n\n this.subscribeToFormValueChanges();\n }\n\n private subscribeToFormValueChanges(): void {\n this.formGroup.controls.pageSize.valueChanges.subscribe((value) => {\n if (this.pageSize === value.value) {\n return;\n }\n\n const currentPageFirstRowIndex = this.currentPage * this.pageSize;\n this.pageSize = value.value;\n\n this.currentPage = Math.floor(currentPageFirstRowIndex / this.pageSize);\n\n const start = this.currentPage * this.pageSize;\n const end = Math.min(this._dataLength, start + this.pageSize);\n\n if (this.serverSide) {\n this.tableChange.emit({ from: start, to: end, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n }\n\n this.calculateTotalPages();\n this.updateVisibleRange(start, end);\n this.updatePageData();\n this.refreshLayout();\n });\n }\n\n private calculatePages(): void {\n const start = this.currentPage * this.pageSize;\n const end = Math.min(this._dataLength, start + this.pageSize);\n\n this.updatePageData();\n\n if (!this.serverSide) {\n this.updateVisibleRange(start, end);\n } else {\n this.tableChange.emit({ from: start, to: end, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n }\n\n }\n}\n","<div class=\"container\" [ngClass]=\"{ 'is-loading': isLoading, 'sticky-header': stickyHeader, 'header-stuck': isHeaderStuck() }\">\n @if (virtualScroll) {\n @if (stickyHeader) {\n <table class=\"sticky-virtual-header\">\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n </table>\n }\n\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize\" class=\"cdk-table-viewport\" [ngStyle]=\"{ height: virtualViewportHeight() + 'px' }\" [style.overflow-y]=\"showViewportScroll() ? 'auto' : 'hidden'\" (scrolled)=\"onViewportScroll()\">\n <table>\n @if (!stickyHeader) {\n <thead #theadRef>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n }\n\n <tbody>\n <tr *cdkVirtualFor=\"let row of pageData(); trackBy: trackByIndex\" [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\" [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n } @else {\n <table>\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n\n <tbody>\n @for (row of pageData(); track $index) {\n <tr [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (currentActiveRow()?.isDropdown && currentActiveColumn()) {\n <ng-container *ngTemplateOutlet=\"multipleActionsDropdown; context: { row: currentActiveRow(), column: currentActiveColumn() }\"></ng-container>\n }\n\n @if (filter && filteredData() && filteredData().length === 0) {\n <div class=\"row no-data\">\n <span>No data matching the filter:</span>\n\n <span>\"{{ filter }}\"</span>\n </div>\n }\n\n @if (!filter && data && data.length === 0) {\n <div class=\"row no-data\">No data available.</div>\n }\n\n @if (pageable && pageData().length !== 0) {\n <div class=\"paging\">\n <div class=\"visible-range\">{{ visibleRange() }}</div>\n\n <ng-container *ngTemplateOutlet=\"pagePicker; context: { totalPages: totalPages() }\"></ng-container>\n\n <div class=\"page-size-option-picker\">\n <span>Items per page:</span>\n\n <apex-select class=\"table\" [options]=\"pageSizeSelectOptions\"></apex-select>\n </div>\n </div>\n }\n</div>\n\n<ng-template #textCell let-row=\"row\" let-column=\"column\" let-index=\"$index\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '', column.cellOptions?.icon ? 'has-icon' : '']\"\n [style.color]=\"getCellColor(row, column)\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition !== 'right') {\n <div class=\"cell-icon\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n <span class=\"cell-text\">{{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) }}{{ column.suffix ? column.suffix : '' }}</span>\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition === 'right') {\n <div class=\"cell-icon\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #dateCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"getClass(row, column)\">\n {{ formatDate(getDescendantProp(row, column), column.dateFormat) }}\n </div>\n</ng-template>\n\n<ng-template #currencyCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\">\n\n @if (getDescendantProp(row, column) !== undefined) {\n {{ column.prefix ? column.prefix : '' }}{{ (getDescendantProp(row, column) / 100) | number }}\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberMathCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #actionCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell actions\">\n\n @for (action of column.singleActions; track $index) {\n @if (handleActionShow(action, row, column)) {\n <div ApexTooltip (click)=\"action.execute && action.execute(row)\" [apexTooltip]=\"action.label\" [tooltipPosition]=\"tooltipPosition.Above\" class=\"action-icon-wrapper\" [ngClass]=\"{ 'disabled': action.disabled }\">\n <apex-img [src]=\" 'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n </div>\n }\n }\n\n @if (column.multipleActions) {\n <div class=\"action-icon-wrapper\" #moreActionsList [ngClass]=\"{ 'opened': row.isDropdown }\" (click)=\"toggleActionDropdown(row, column, $event)\">\n <svg class=\"multiple-action-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M10.3047 8C10.3047 8.34612 10.2021 8.68446 10.0098 8.97225C9.81747 9.26004 9.54416 9.48434 9.22438 9.61679C8.90461 9.74924 8.55275 9.7839 8.21328 9.71638C7.87381 9.64885 7.56199 9.48218 7.31725 9.23744C7.07251 8.9927 6.90584 8.68088 6.83831 8.34141C6.77079 8.00194 6.80545 7.65008 6.9379 7.33031C7.07035 7.01053 7.29465 6.73722 7.58244 6.54493C7.87023 6.35264 8.20857 6.25 8.55469 6.25C9.01868 6.25046 9.46353 6.43498 9.79162 6.76307C10.1197 7.09116 10.3042 7.53601 10.3047 8ZM8.55469 4.75C8.90081 4.75 9.23915 4.64737 9.52694 4.45507C9.81472 4.26278 10.039 3.98947 10.1715 3.6697C10.3039 3.34993 10.3386 2.99806 10.2711 2.65859C10.2035 2.31913 10.0369 2.00731 9.79213 1.76256C9.54738 1.51782 9.23556 1.35115 8.8961 1.28363C8.55663 1.2161 8.20476 1.25076 7.88499 1.38321C7.56522 1.51566 7.29191 1.73997 7.09962 2.02775C6.90732 2.31554 6.80469 2.65388 6.80469 3C6.80515 3.46399 6.98967 3.90884 7.31776 4.23693C7.64585 4.56502 8.0907 4.74954 8.55469 4.75ZM8.55469 11.25C8.20857 11.25 7.87023 11.3526 7.58244 11.5449C7.29465 11.7372 7.07035 12.0105 6.9379 12.3303C6.80545 12.6501 6.77079 13.0019 6.83831 13.3414C6.90584 13.6809 7.07251 13.9927 7.31725 14.2374C7.56199 14.4822 7.87381 14.6489 8.21328 14.7164C8.55275 14.7839 8.90461 14.7492 9.22438 14.6168C9.54416 14.4843 9.81747 14.26 10.0098 13.9722C10.2021 13.6845 10.3047 13.3461 10.3047 13C10.3042 12.536 10.1197 12.0912 9.79162 11.7631C9.46353 11.435 9.01868 11.2505 8.55469 11.25Z\" fill=\"#5D6068\"/>\n </svg>\n </div>\n }\n\n </div>\n</ng-template>\n\n<ng-template #chipCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell chip\">\n @if (getChipLabel(row, column)) {\n <apex-chip [ngClass]=\"getClass(row, column)\"> {{ getChipLabel(row, column) }}</apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #listCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell list\">\n <span class=\"list-text\">{{ getListDisplayText(row, column) }}</span>\n\n @if (getListOverflowCount(row, column) > 0) {\n <apex-chip class=\"list-overflow-badge\"\n ApexTooltip\n [apexTooltip]=\"getListTooltipContent(row, column)\"\n [tooltipPosition]=\"tooltipPosition.Below\">\n +{{ getListOverflowCount(row, column) }}\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #checkboxCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"getCheckboxState(row, column)\" [disabled]=\"true\"></apex-checkbox>\n </div>\n</ng-template>\n\n<ng-template #multipleActionsDropdown let-row=\"row\" let-column=\"column\">\n <div #multipleActionsDropdownElement #dropdownElement class=\"more-actions-dropdown\">\n @for (action of column.multipleActions; track $index) {\n\n @if (handleActionShow(action, row, column)) {\n <div class=\"dropdown-row\" (click)=\"action.execute && action.execute(row)\">\n <apex-img [src]=\"'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n\n <span>{{ action.label }}</span>\n </div>\n }\n\n }\n </div>\n</ng-template>\n\n<ng-template #pagePicker let-totalPages=\"totalPages\">\n <div class=\"page-picker\">\n <!-- If page one should be visible -->\n @if (currentPage + 1 >= 3) {\n <span (click)=\"goToPage(0)\">1</span>\n <span class=\"style-excluded\">...</span>\n }\n\n <!-- Middle part of the page-picker -->\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage - 1 } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage, class: 'highlighted' } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage + 1 } \"></ng-container>\n\n <!-- If last page should be visible -->\n @if (currentPage + 1 <= totalPages - 2) {\n <span class=\"style-excluded\">...</span>\n <span (click)=\"goToPage(totalPages - 1)\">{{ totalPages }}</span>\n }\n\n </div>\n</ng-template>\n\n<ng-template #page let-page=\"page\" let-class=\"class\">\n @if (page >= 0 && page < totalPages()) {\n <span [ngClass]=\"class\" (click)=\"goToPage(page)\">{{ page + 1 }}</span>\n }\n</ng-template>\n\n<ng-template #headerRow>\n <tr>\n @for (column of columns; track $index) {\n <th [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <div class=\"cell\">\n <span>{{ column.label }}</span>\n\n @if (column.type !== TableColumnType.Actions && sortable) {\n <div class=\"arranger\" (click)=\"sortColumn(column)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3.11445 5.50005H8.88795C9.31895 5.50005 9.54795 4.99005 9.26145 4.66755L6.37495 1.42005C6.32813 1.3672 6.27063 1.32489 6.20624 1.29591C6.14186 1.26694 6.07205 1.25195 6.00145 1.25195C5.93084 1.25195 5.86104 1.26694 5.79666 1.29591C5.73227 1.32489 5.67477 1.3672 5.62795 1.42005L2.74045 4.66755C2.45395 4.99005 2.68295 5.50005 3.11445 5.50005ZM5.62745 10.5795C5.67427 10.6324 5.73177 10.6747 5.79616 10.7037C5.86054 10.7327 5.93034 10.7476 6.00095 10.7476C6.07155 10.7476 6.14136 10.7327 6.20574 10.7037C6.27013 10.6747 6.32763 10.6324 6.37445 10.5795L9.26095 7.33205C9.54795 7.01005 9.31895 6.50005 8.88745 6.50005H3.11445C2.68345 6.50005 2.45445 7.01005 2.74095 7.33255L5.62745 10.5795Z\" fill=\"#C6C6C6\"/>\n </svg>\n </div>\n }\n </div>\n </th>\n }\n\n @if (editMode) {\n <th class=\"select-column\">\n <div class=\"cell\">\n <span class=\"select-all-btn\" (click)=\"toggleSelectAll()\">{{ allSelected() ? 'Deselect' : 'Select all' }}</span>\n </div>\n </th>\n }\n </tr>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apexara-ng-components-table.mjs","sources":["../../../../projects/apexara/ng-components/table/src/table.component.ts","../../../../projects/apexara/ng-components/table/src/table.component.html","../../../../projects/apexara/ng-components/table/apexara-ng-components-table.ts"],"sourcesContent":["import { Component, ViewChildren, QueryList, ViewChild, ElementRef, Input, Output, EventEmitter, HostListener, SimpleChanges, TemplateRef, signal, Injector, afterNextRender } from '@angular/core';\nimport { NgTemplateOutlet, NgStyle, NgClass, DecimalPipe, formatDate } from '@angular/common';\nimport { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { ApexChipComponent } from '@apexara/ng-components/chip';\nimport { ApexImageComponent } from '@apexara/ng-components/image';\nimport { ApexCheckboxComponent } from '@apexara/ng-components/checkbox';\nimport { ApexSelectComponent, ApexSelectOptions } from '@apexara/ng-components/select';\n\nimport { OSService, MobileOS, ScrollBlockService } from '@apexara/ng-components/services';\n\nimport { ApexTooltipDirective, TooltipPosition } from '@apexara/ng-components/tooltip';\n\nexport interface ApexTableColumn {\n label?: string;\n value?: string;\n type?: ApexTableColumnType;\n width?: string;\n editable?: boolean;\n prefix?: string;\n suffix?: string;\n singleActions?: Action[];\n multipleActions?: Action[];\n dateFormat?: ApexDateFormatOptions;\n chipLabel?: { [key: string]: string };\n class?: string | { [key: string]: string };\n change?: string;\n listOptions?: ApexTableListOptions;\n cellOptions?: ApexTableCellOptions;\n statusSteps?: ApexTableStatusStep[];\n}\n\nexport interface ApexTableStatusStep {\n label: string;\n value: string | number | boolean;\n color: string;\n}\n\nexport interface ApexTableListOptions {\n label?: string;\n max?: number;\n}\n\nexport interface ApexTableCellOptions {\n icon?: string | { [key: string]: string };\n iconPosition?: 'left' | 'right';\n iconColor?: { [key: string]: string };\n textColor?: { [key: string]: string };\n chipColor?: { [key: string]: string };\n chipBackgroundColor?: { [key: string]: string };\n}\n\nexport enum ApexTableColumnType {\n Text,\n Date,\n Currency,\n Chip,\n Number,\n NumberMath,\n Actions,\n Checkbox,\n List,\n Status,\n}\n\nexport type ActionShowType = Array<{ property: string; values: any[]; exists?: boolean; }> \n\nexport interface Action {\n icon: string;\n label: string;\n class?: string;\n showOn?: ActionShowType;\n disabled?: boolean;\n execute?: (row: any) => void;\n}\n\nexport interface ApexTableChange {\n from: number;\n to: number;\n filter?: string;\n sort?: any;\n}\n\nexport interface ApexDateFormatOptions {\n format: string;\n locale: string;\n timezone?: string;\n}\n\ninterface PageFormControls {\n pageSize: FormControl<{ label: string, value: number }>;\n}\n\n@Component({\n standalone: true,\n selector: 'apex-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.css'],\n imports: [\n NgStyle,\n NgClass,\n DecimalPipe,\n NgTemplateOutlet,\n ApexChipComponent,\n ApexImageComponent,\n ApexSelectComponent,\n ApexTooltipDirective,\n ApexCheckboxComponent,\n ScrollingModule,\n ]\n})\n\nexport class ApexTableComponent {\n\n constructor(\n private elementRef: ElementRef,\n private osService: OSService,\n private formBuilder: FormBuilder,\n private scrollBlockService: ScrollBlockService,\n private injector: Injector) {\n }\n\n @ViewChild('theadRef') theadRef?: ElementRef<HTMLElement>;\n @ViewChildren('moreActionsList') moreActionsList!: QueryList<ElementRef>;\n @ViewChild(CdkVirtualScrollViewport) cdkViewport?: CdkVirtualScrollViewport;\n @ViewChild('dropdownElement') DropdownElement: ElementRef<any> | null = null;\n\n // Cell templates (mapped by type)\n @ViewChild('textCell', { static: true }) textCellTpl!: TemplateRef<any>;\n @ViewChild('numberCell', { static: true }) numberCellTpl!: TemplateRef<any>;\n @ViewChild('currencyCell', { static: true }) currencyCellTpl!: TemplateRef<any>;\n @ViewChild('numberMathCell', { static: true }) numberMathCellTpl!: TemplateRef<any>;\n @ViewChild('dateCell', { static: true }) dateCellTpl!: TemplateRef<any>;\n @ViewChild('chipCell', { static: true }) chipCellTpl!: TemplateRef<any>;\n @ViewChild('checkboxCell', { static: true }) checkboxCellTpl!: TemplateRef<any>;\n @ViewChild('actionCell', { static: true }) actionCellTpl!: TemplateRef<any>;\n @ViewChild('listCell', { static: true }) listCellTpl!: TemplateRef<any>;\n @ViewChild('statusCell', { static: true }) statusCellTpl!: TemplateRef<any>;\n \n\n // Data configuration\n @Input() data!: any[];\n @Input() dataLength!: number;\n @Input() columns!: ApexTableColumn[];\n @Input() filter!: string;\n\n // Data source configuration (serverSide loaded or local data)\n @Input() serverSide!: boolean;\n @Input() isLoading!: boolean;\n\n // Sorting configuration\n @Input() sortIndex = 0;\n @Input() sortable = true;\n @Input() sortDirection: 'asc' | 'desc' = 'asc';\n\n // Pagination configuration\n @Input() pageSize = 10;\n @Input() currentPage = 0;\n @Input() pageable = false;\n @Input() pageSizeOptions = [ 10, 25, 50, 100, 1000 ];\n\n // Virtual scroll configuration (optimization for large datasets)\n @Input() virtualScroll: boolean = false; // For local data only\n @Input() tableMaxHeight: number = 800;\n\n // Sticky header configuration\n @Input() stickyHeader: boolean = false;\n\n // Edit mode configuration\n @Input() editMode: boolean = false;\n\n @Output() tableChange = new EventEmitter<ApexTableChange>()\n @Output() selectionChange = new EventEmitter<any[]>()\n @Output() editModeChange = new EventEmitter<boolean>()\n\n public itemSize: number = 42; // Must match CSS table row height\n\n public tooltipPosition = TooltipPosition;\n\n public TableColumnType = ApexTableColumnType;\n\n public totalPages = signal(0);\n public visibleRange = signal('');\n\n public filteredData = signal<any[]>([]);\n public pageData = signal<any[]>([]);\n\n public pageSizeSelectOptions!: ApexSelectOptions;\n\n public currentActiveRow = signal<any>(null);\n public currentActiveColumn = signal<ApexTableColumn | null>(null);\n public isDropdown = signal(false);\n public isHeaderStuck = signal(false);\n\n public selectedRows = signal<Set<any>>(new Set());\n public allSelected = signal(false);\n public virtualViewportHeight = signal(0);\n public showViewportScroll = signal(false);\n private lastSelectedIndex: number = -1;\n\n public formGroup!: FormGroup<PageFormControls>;\n\n private _dataLength!: number;\n\n @HostListener('document:click', ['$event'])\n public onClick(event: any): void {\n // TO DO: When two tables exists the dropdown from first table is not closed\n if (event.target !== this.DropdownElement?.nativeElement && event.target) {\n const row = this.currentActiveRow();\n\n if (row) {\n row.isDropdown = false;\n this.currentActiveRow.set(null);\n this.unlockScroll();\n }\n }\n }\n\n @HostListener('document:scroll')\n public onScroll(): void {\n\n if (this.stickyHeader) {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const stuck = rect.top < 0;\n\n if (stuck !== this.isHeaderStuck()) {\n this.isHeaderStuck.set(stuck);\n }\n }\n\n for (let item of this.moreActionsList) {\n if (item.nativeElement.classList.contains('opened') && this.DropdownElement) {\n let actionPos = item.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n actionPos.y += window.visualViewport!.offsetTop;\n }\n\n this.DropdownElement.nativeElement.style.top = `${ actionPos.y + actionPos.height }px`;\n\n break;\n }\n }\n }\n\n @HostListener('window:resize')\n public onResize(): void {\n\n for (let item of this.moreActionsList) {\n if (item.nativeElement.classList.contains('opened') && this.DropdownElement) { \n let actionPos = item.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n actionPos.x += window.visualViewport!.offsetLeft;\n }\n\n const dropdownWidth = this.DropdownElement.nativeElement.offsetWidth;\n\n const left = actionPos.x + dropdownWidth / 2 < window.innerWidth - 10 ? actionPos.x : window.innerWidth - 10 - dropdownWidth;\n \n this.DropdownElement.nativeElement.style.transform = left === actionPos.x ? 'translateX(-50%)' : '';\n this.DropdownElement.nativeElement.style.left = left + 'px';\n\n break;\n }\n }\n }\n\n public ngOnInit(): void {\n }\n\n public ngAfterViewInit(): void {\n const from = this.currentPage * this.pageSize;\n const to = from + this.pageSize;\n\n if (this.serverSide && !this.data) {\n this.tableChange.emit({ from, to, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n }\n\n if (!this.serverSide) {\n this.buildPaginationSelectDependecies();\n }\n\n this.updateViewportLayout();\n\n setTimeout(() => {\n this.cdkViewport?.checkViewportSize();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['isLoading'] && changes['isLoading'].currentValue === false) {\n if (this.data) {\n this._dataLength = this.data.length;\n }\n }\n\n if (changes['data'] && changes['data'].currentValue) {\n if (this.serverSide) {\n this.filteredData.set(this.data);\n\n this.preprocessData();\n } else {\n this.filteredData.set(this.filter ? this.filterData() : this.data);\n\n this.preprocessData();\n\n setTimeout(() => {\n this.sortColumn(this.columns[this.sortIndex], false);\n })\n }\n\n this._dataLength = this.dataLength ? this.dataLength : this.filteredData().length;\n }\n\n if (changes['filter'] && !changes['filter'].firstChange) {\n // The two ways of filtering data -> local and serverSide\n if (!this.serverSide) {\n this.filteredData.set(this.filterData());\n this._dataLength = this.filteredData().length;\n\n setTimeout(() => {\n this.goToFirstPage();\n });\n\n } else {\n setTimeout(() => {\n this.currentPage = 0;\n\n this.tableChange.emit({ from: 0, to: 0 + this.pageSize, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n });\n }\n\n }\n\n if (changes['editMode']) {\n this.editModeChange.emit(changes['editMode'].currentValue);\n\n if (!changes['editMode'].currentValue) {\n this.selectedRows.set(new Set());\n this.allSelected.set(false);\n this.lastSelectedIndex = -1;\n this.selectionChange.emit([]);\n }\n }\n\n if (changes['pageable'] && changes['pageable'].currentValue !== undefined) {\n this.buildPaginationSelectDependecies();\n }\n\n const from = this.currentPage * this.pageSize;\n const to = Math.min(this._dataLength, from + this.pageSize);\n \n this.calculateTotalPages();\n this.updateVisibleRange(from, to);\n this.updatePageData();\n this.refreshLayout();\n }\n\n public updatePageData(): void {\n const data = this.filteredData();\n if (!data || !data.length) {\n this.pageData.set([]);\n return;\n }\n\n if (!this.pageable) {\n this.pageData.set(data);\n return;\n }\n\n if (!this.serverSide) {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n\n this.pageData.set(data.slice(start, end));\n return;\n }\n\n this.pageData.set(data);\n }\n\n public updateVisibleRange(start: number, end: number): void {\n this.visibleRange.set(`Showing ${ start + 1 } to ${end} of ${this._dataLength} results`);\n }\n\n public calculateTotalPages(): void {\n this.totalPages.set(Math.ceil(this._dataLength / this.pageSize));\n }\n\n public trackByIndex(index: number): number {\n return index;\n }\n\n public updateViewportLayout(): void {\n const headerHeight = this.theadRef?.nativeElement?.getBoundingClientRect().height || 0;\n\n const data = this.filteredData();\n const renderedCount = this.serverSide\n ? (data ? data.length : 0)\n : (this.pageData() ? this.pageData().length : 0);\n\n // Update viewport height\n if (renderedCount <= 0) {\n this.virtualViewportHeight.set(headerHeight);\n } else {\n const maxTotal = this.tableMaxHeight;\n const bodyCapacity = Math.max(0, maxTotal - headerHeight);\n const rowsHeight = Math.min(bodyCapacity, this.itemSize * renderedCount);\n this.virtualViewportHeight.set(Math.max(0, headerHeight + rowsHeight));\n }\n\n // Update scroll visibility\n if (!this.virtualScroll) {\n this.showViewportScroll.set(false);\n } else {\n const availableBodyHeight = Math.max(0, this.tableMaxHeight - headerHeight);\n const rowsHeight = this.itemSize * renderedCount;\n this.showViewportScroll.set(rowsHeight > availableBodyHeight);\n }\n }\n\n public getCellTemplate(column: ApexTableColumn): TemplateRef<any> {\n switch (column.type) {\n case ApexTableColumnType.Number:\n return this.numberCellTpl;\n case ApexTableColumnType.Currency:\n return this.currencyCellTpl;\n case ApexTableColumnType.NumberMath:\n return this.numberMathCellTpl;\n case ApexTableColumnType.Date:\n return this.dateCellTpl;\n case ApexTableColumnType.Chip:\n return this.chipCellTpl;\n case ApexTableColumnType.Checkbox:\n return this.checkboxCellTpl;\n case ApexTableColumnType.Actions:\n return this.actionCellTpl;\n case ApexTableColumnType.List:\n return this.listCellTpl;\n case ApexTableColumnType.Status:\n return this.statusCellTpl;\n default:\n return this.textCellTpl;\n }\n }\n\n private refreshLayout(): void {\n this.updateViewportLayout();\n\n setTimeout(() => {\n this.cdkViewport?.checkViewportSize();\n });\n }\n\n public goToPage(page: number): void {\n this.currentPage = page;\n this.calculatePages();\n }\n\n public goToPreviousPage(): void {\n this.currentPage--;\n this.calculatePages();\n }\n\n public goToNextPage(): void {\n this.currentPage++;\n this.calculatePages();\n }\n\n public goToFirstPage(): void {\n this.currentPage = 0;\n this.calculatePages();\n }\n\n public goToLastPage(): void {\n this.currentPage = this.totalPages() - 1;\n this.calculatePages();\n }\n\n public cellEdit(event: KeyboardEvent, column: string, currentPageRowIndex: number): void {\n const dataIndex = currentPageRowIndex + (this.currentPage * this.pageSize);\n const filtered = this.filteredData();\n\n if (column.indexOf('.') === -1) {\n filtered[dataIndex][column] = (event.target as HTMLDivElement).innerText;\n } else { // Nested properties\n let data = filtered[dataIndex];\n const fullPath = column.split('.');\n\n for (let i = 0; i < fullPath.length; i++) {\n if (i < fullPath.length - 1) {\n data = data[fullPath[i]];\n } else {\n data[fullPath[i]] = (event.target as HTMLDivElement).innerText;\n }\n }\n }\n }\n\n public formatDate(dateAsString: string | null | undefined, formatDateOptions: ApexDateFormatOptions = { format: 'shortDate', locale: 'en-US', timezone: undefined }): string {\n if (dateAsString === null || dateAsString === undefined || dateAsString === '') {\n return '';\n }\n\n return formatDate(dateAsString, formatDateOptions.format, formatDateOptions.locale, formatDateOptions.timezone);\n }\n\n public getClass(row: any, column: ApexTableColumn): string {\n if (!column.class) {\n return '';\n }\n\n if (typeof column.class === 'string') {\n return column.class;\n }\n\n return column.class[this.getDescendantProp(row, column)] || '';\n }\n\n public getDescendantProp(row: any, column: ApexTableColumn): any {\n if (!column.value || column.value === null) {\n return column.label;\n }\n\n // Case only on preprocessing - returns any numbers that have been passed in the column.value string\n if (isFinite(Number(column.value))) {\n return parseFloat(column.value);\n }\n\n if (column.type === this.TableColumnType.NumberMath) {\n return row[column.value];\n }\n\n return column.value.split('.')\n .reduce((prev: any, curr: string) => {\n if (prev && curr in prev) {\n return prev[curr];\n } else {\n return undefined;\n }\n }, row);\n }\n\n public getTextColor(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.textColor) {\n return null;\n }\n\n const value = this.getDescendantProp(row, column);\n\n return column.cellOptions.textColor[value] || null;\n }\n\n public getChipColor(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.chipColor) {\n return null;\n }\n\n const value = this.getDescendantProp(row, column);\n\n return column.cellOptions.chipColor[value] || null;\n }\n\n public getChipBackgroundColor(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.chipBackgroundColor) {\n return null;\n }\n\n const value = this.getDescendantProp(row, column);\n\n return column.cellOptions.chipBackgroundColor[value] || null;\n }\n\n public getCellIconColor(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.iconColor) {\n return null;\n }\n\n const value = this.getDescendantProp(row, column);\n\n return column.cellOptions.iconColor[value] || null;\n }\n\n public getCellIcon(row: any, column: ApexTableColumn): string | null {\n if (!column.cellOptions?.icon) {\n return null;\n }\n\n if (typeof column.cellOptions.icon === 'string') {\n return column.cellOptions.icon;\n }\n\n const value = this.getDescendantProp(row, column);\n return column.cellOptions.icon[value] || null;\n }\n\n public getChangeValue(row: any, column: ApexTableColumn): number | null {\n if (!column.change) return null;\n\n const value = this.getDescendantProp(row, { value: column.change } as ApexTableColumn);\n\n return typeof value === 'number' ? value : parseFloat(value) || null;\n }\n\n public getListDisplayText(row: any, column: ApexTableColumn): string {\n const arr = this.getDescendantProp(row, column);\n\n if (!Array.isArray(arr) || arr.length === 0) {\n return '--';\n }\n\n const max = column.listOptions?.max ?? 3;\n const visible = arr.slice(0, max);\n const labelKey = column.listOptions?.label;\n\n return visible.map(item => labelKey ? item[labelKey] : item).join(' / ');\n }\n\n public getListOverflowCount(row: any, column: ApexTableColumn): number {\n const arr = this.getDescendantProp(row, column);\n\n if (!Array.isArray(arr)) {\n return 0;\n }\n\n const max = column.listOptions?.max ?? 3;\n\n return Math.max(0, arr.length - max);\n }\n\n public getListTooltipContent(row: any, column: ApexTableColumn): string {\n const arr = this.getDescendantProp(row, column);\n\n if (!Array.isArray(arr)) {\n return '';\n }\n\n const max = column.listOptions?.max ?? 3;\n const hidden = arr.slice(max);\n const labelKey = column.listOptions?.label;\n\n return hidden.map(item => labelKey ? item[labelKey] : item).join('<br>');\n }\n\n public getChipLabel(row: any, column: ApexTableColumn): string {\n if (!column.chipLabel) {\n return column.label ? column.label : this.getDescendantProp(row, column);\n }\n\n return column.chipLabel[this.getDescendantProp(row, column)];\n }\n\n public isStatusStepCompleted(row: any, column: ApexTableColumn, stepIndex: number): boolean {\n if (!column.statusSteps?.length) {\n return false;\n }\n\n const currentValue = this.getDescendantProp(row, column);\n const currentIndex = column.statusSteps.findIndex(s => s.value === currentValue);\n\n return currentIndex !== -1 && stepIndex <= currentIndex;\n }\n\n public getCheckboxState(row: any, column: ApexTableColumn): boolean {\n let state = this.getDescendantProp(row, column);\n\n if (typeof state !== 'boolean') {\n return false;\n }\n\n return state;\n }\n\n public handleActionShow(action: Action, row: any, column?: ApexTableColumn): boolean {\n if (!action.showOn || action.showOn.length === 0) {\n return true;\n }\n\n return action.showOn.every((condition) => {\n const rowValue = this.getDescendantProp(row, { value: condition.property });\n\n const ifValueExists = !!rowValue;\n \n if (condition.exists != null && condition.exists === ifValueExists) {\n return ifValueExists;\n }\n\n return condition.values.includes(rowValue);\n });\n }\n\n public sortColumn(column: any, changeSortDirection = true): void {\n if (!this.sortable) {\n return;\n }\n\n if (!column.value) {\n return;\n }\n\n if (changeSortDirection) {\n\n if (this.sortIndex == this.columns.indexOf(column)) {\n switch (this.sortDirection) {\n case 'asc':\n this.sortDirection = 'desc';\n break;\n case 'desc':\n this.sortDirection = 'asc';\n break;\n default:\n this.sortDirection = 'asc';\n break;\n }\n } else {\n this.sortDirection = 'asc';\n this.sortIndex = this.columns.indexOf(column);\n }\n\n }\n\n if (this.serverSide) {\n this.currentPage = 0;\n\n const start = this.currentPage * this.pageSize;\n const end = Math.min(this._dataLength, start + this.pageSize);\n\n this.tableChange.emit({ from: start, to: end, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n } else {\n this.goToFirstPage();\n\n this.sortData(this.filteredData(), column);\n this.updatePageData();\n }\n\n const row = this.currentActiveRow();\n if (row) {\n row.isDropdown = false;\n this.currentActiveRow.set(null);\n this.unlockScroll();\n }\n }\n\n public toggleActionDropdown(row: any, column: ApexTableColumn, event: any): void {\n // Prevent the event to be processed by the Hostlistener\n event.stopPropagation();\n\n const prevRow = this.currentActiveRow();\n if (prevRow) {\n prevRow.isDropdown = false;\n }\n\n row.isDropdown = !row.isDropdown;\n\n this.currentActiveRow.set(row);\n this.currentActiveColumn.set(column);\n\n // Wait for Angular to render the dropdown element via @if before positioning it.\n afterNextRender(() => {\n let actionPos!: DOMRect;\n\n for (let i of this.moreActionsList) {\n if (i.nativeElement.classList.contains('opened')) {\n actionPos = i.nativeElement.getBoundingClientRect();\n }\n }\n\n if (this.DropdownElement) {\n if (this.osService.mobileOS === MobileOS.iOS) {\n actionPos.y += window.visualViewport!.offsetTop;\n actionPos.x += window.visualViewport!.offsetLeft;\n }\n\n const dropdownWidth = this.DropdownElement.nativeElement.offsetWidth;\n\n const left = actionPos.x + dropdownWidth / 2 < window.innerWidth - 10 ? actionPos.x : window.innerWidth - 10 - dropdownWidth;\n\n this.DropdownElement.nativeElement.style.transform = left === actionPos.x ? 'translateX(-50%)' : '';\n this.DropdownElement.nativeElement.style.left = left + 'px';\n this.DropdownElement.nativeElement.style.top = `${ actionPos.y + actionPos.height }px`;\n\n this.lockScroll();\n } else {\n this.unlockScroll();\n }\n }, { injector: this.injector });\n }\n\n public onViewportScroll(): void {\n // Safety net: close dropdown if scroll somehow fires while it's open\n const row = this.currentActiveRow();\n if (row) {\n row.isDropdown = false;\n this.currentActiveRow.set(null);\n this.currentActiveColumn.set(null);\n this.unlockScroll();\n }\n }\n\n public toggleRowSelection(row: any, event?: MouseEvent): void {\n const pageData = this.pageData();\n const currentIndex = pageData.indexOf(row);\n\n this.selectedRows.update(s => {\n const next = new Set(s);\n if (event?.shiftKey && this.lastSelectedIndex !== -1 && currentIndex !== -1) {\n const start = Math.min(this.lastSelectedIndex, currentIndex);\n const end = Math.max(this.lastSelectedIndex, currentIndex);\n\n for (let i = start; i <= end; i++) {\n next.add(pageData[i]);\n }\n } else {\n if (next.has(row)) {\n next.delete(row);\n } else {\n next.add(row);\n }\n }\n return next;\n });\n\n this.lastSelectedIndex = currentIndex;\n this.allSelected.set(this.selectedRows().size === pageData.length);\n this.selectionChange.emit(Array.from(this.selectedRows()));\n }\n\n public toggleSelectAll(): void {\n const pageData = this.pageData();\n\n if (this.allSelected()) {\n this.selectedRows.set(new Set());\n this.allSelected.set(false);\n } else {\n this.selectedRows.set(new Set(pageData));\n this.allSelected.set(true);\n }\n\n this.selectionChange.emit(Array.from(this.selectedRows()));\n }\n\n public isRowSelected(row: any): boolean {\n return this.selectedRows().has(row);\n }\n\n private lockScroll(): void {\n this.scrollBlockService.activate();\n\n if (this.cdkViewport) {\n this.cdkViewport.elementRef.nativeElement.style.overflow = 'hidden';\n }\n }\n\n private unlockScroll(): void {\n this.scrollBlockService.deactivate();\n\n if (this.cdkViewport) {\n this.cdkViewport.elementRef.nativeElement.style.overflow = '';\n }\n }\n\n private preprocessData(): void {\n if (!this.data || this.data.length === 0) {\n return;\n }\n\n this.columns.forEach(column => {\n if (!column.value || column.type !== this.TableColumnType.NumberMath) {\n return;\n }\n\n this.data.forEach(row => {\n const result = this.calculateNumberMathCell(row, column);\n row[column.value as any] = result;\n });\n });\n }\n\n private calculateNumberMathCell(row: any, column: any): any {\n const expression = column.value.replace(\n /([a-zA-Z_][a-zA-Z0-9_.]*|\\d*\\.?\\d+)/g,\n (match: any) => {\n let value = this.getDescendantProp(row, { value: match });\n\n return (typeof value === 'number') ? value : parseFloat(value) || 0;\n }\n );\n\n let fn = new Function(`return ${expression};`);\n let result = fn();\n\n if (Number.isFinite(result)) {\n return result;\n }\n\n return this.getDescendantProp(row, column);\n }\n\n private filterData(): any[] {\n if (!this.data || this.data.length === 0) {\n return [];\n }\n\n let arrayToReturn: any[] = [ ];\n\n for (let row of this.data) {\n for (let column of this.columns) {\n if (!column.value) { continue; }\n\n let access = row[column.value];\n\n if (column.value.indexOf('.') !== -1 && column.type !== this.TableColumnType.NumberMath) {\n access = this.getAccessIfColumnValueIsObject(row, column);\n }\n\n if (access === undefined) {\n break;\n }\n\n const rowPropAsString = JSON.stringify(access).toLowerCase();\n\n if (rowPropAsString.includes(this.filter.toLowerCase())) {\n arrayToReturn.push(row);\n\n break;\n }\n }\n }\n\n return arrayToReturn;\n }\n\n private sortData(data: any[], column: ApexTableColumn): any[] {\n if (!data || data.length === 0 || !Array.isArray(data)) {\n return [];\n }\n\n if (column) {\n this.sortByProperty(data, column);\n }\n\n return data;\n }\n\n private sortByProperty(arr: any, column: any): number | void {\n if (this.sortDirection === 'desc') {\n this.sortReverse(arr, column);\n return;\n }\n\n return arr.sort((a: any, b: any) => {\n let valueA = a[column.value];\n let valueB = b[column.value];\n\n let access = column.value;\n\n if (access.indexOf('.') !== -1 && column.type !== this.TableColumnType.NumberMath) {\n valueA = this.getAccessIfColumnValueIsObject(a, column);\n valueB = this.getAccessIfColumnValueIsObject(b, column);\n } else {\n if (typeof valueA === 'string' && valueB !== undefined) {\n valueA = valueA.toLowerCase();\n valueB = valueB.toLowerCase();\n }\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return valueA - valueB;\n }\n \n if (!valueA && valueB) return -1;\n if (valueA && !valueB) return 1;\n\n if (!valueA && !valueB) return 0;\n\n if (valueA < valueB) return -1;\n if (valueA > valueB) return 1;\n\n return 0;\n });\n }\n\n private sortReverse(arr: any, column: any) {\n return arr.sort((a: any, b: any) => {\n let valueA = a[column.value];\n let valueB = b[column.value];\n\n let access = column.value;\n\n if (access.indexOf('.') !== -1 && column.type !== this.TableColumnType.NumberMath) {\n valueA = this.getAccessIfColumnValueIsObject(a, column);\n valueB = this.getAccessIfColumnValueIsObject(b, column);\n } else {\n if (typeof valueA === 'string' && valueB !== undefined) {\n valueA = valueA.toLowerCase();\n valueB = valueB.toLowerCase();\n }\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return valueB - valueA;\n }\n\n if (!valueA && valueB) return 1;\n if (valueA && !valueB) return -1;\n\n if (!valueA && !valueB) return 0;\n\n if (valueA < valueB) return 1;\n if (valueA > valueB) return -1;\n\n return 0;\n });\n }\n\n private getAccessIfColumnValueIsObject(row: any, column: ApexTableColumn): any {\n if (!column.value || column.value === null) {\n return undefined;\n }\n\n const keys = column.value.split('.');\n\n let access = row[keys[0]];\n\n for (let i = 1; i < keys.length; i++) {\n if (access && keys[i] in access) {\n access = access[keys[i]];\n } else {\n return undefined;\n }\n }\n\n return access;\n }\n\n private buildPaginationSelectDependecies(): void {\n const formControls: PageFormControls = {\n pageSize: this.formBuilder.control({ label: this.pageSize.toString(), value: this.pageSize }, { nonNullable: true, validators: [ Validators.required ] })\n };\n\n this.formGroup = this.formBuilder.group(formControls);\n\n const selectData = this.pageSizeOptions.map(item => ({\n label: item.toString(),\n value: item\n }));\n\n this.pageSizeSelectOptions = {\n label: '',\n data: selectData,\n formGroup: this.formGroup,\n formControlName: 'pageSize'\n };\n\n this.subscribeToFormValueChanges();\n }\n\n private subscribeToFormValueChanges(): void {\n this.formGroup.controls.pageSize.valueChanges.subscribe((value) => {\n if (this.pageSize === value.value) {\n return;\n }\n\n const currentPageFirstRowIndex = this.currentPage * this.pageSize;\n this.pageSize = value.value;\n\n this.currentPage = Math.floor(currentPageFirstRowIndex / this.pageSize);\n\n const start = this.currentPage * this.pageSize;\n const end = Math.min(this._dataLength, start + this.pageSize);\n\n if (this.serverSide) {\n this.tableChange.emit({ from: start, to: end, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n }\n\n this.calculateTotalPages();\n this.updateVisibleRange(start, end);\n this.updatePageData();\n this.refreshLayout();\n });\n }\n\n private calculatePages(): void {\n const start = this.currentPage * this.pageSize;\n const end = Math.min(this._dataLength, start + this.pageSize);\n\n this.updatePageData();\n\n if (!this.serverSide) {\n this.updateVisibleRange(start, end);\n } else {\n this.tableChange.emit({ from: start, to: end, filter: this.filter, sort: { columnValue: this.columns[this.sortIndex].value, sortDirection: this.sortDirection } });\n }\n\n }\n}\n","<div class=\"container\" [ngClass]=\"{ 'is-loading': isLoading, 'sticky-header': stickyHeader, 'header-stuck': isHeaderStuck() }\">\n @if (virtualScroll) {\n @if (stickyHeader) {\n <table class=\"sticky-virtual-header\">\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n </table>\n }\n\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize\" class=\"cdk-table-viewport\" [ngStyle]=\"{ height: virtualViewportHeight() + 'px' }\" [style.overflow-y]=\"showViewportScroll() ? 'auto' : 'hidden'\" (scrolled)=\"onViewportScroll()\">\n <table>\n @if (!stickyHeader) {\n <thead #theadRef>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n }\n\n <tbody>\n <tr *cdkVirtualFor=\"let row of pageData(); trackBy: trackByIndex\" [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\" [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n } @else {\n <table>\n <thead>\n <ng-container *ngTemplateOutlet=\"headerRow\"></ng-container>\n </thead>\n\n <tbody>\n @for (row of pageData(); track $index) {\n <tr [ngClass]=\"{ 'selected-row': editMode && isRowSelected(row) }\">\n @for (column of columns; track $index) {\n <td tabindex=\"-1\">\n <ng-container [ngTemplateOutlet]=\"getCellTemplate(column)\"\n [ngTemplateOutletContext]=\"{ row: row, column: column, $index: $index }\">\n </ng-container>\n </td>\n }\n\n @if (editMode) {\n <td class=\"select-column\" (click)=\"toggleRowSelection(row, $event)\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"isRowSelected(row)\"></apex-checkbox>\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @if (currentActiveRow()?.isDropdown && currentActiveColumn()) {\n <ng-container *ngTemplateOutlet=\"multipleActionsDropdown; context: { row: currentActiveRow(), column: currentActiveColumn() }\"></ng-container>\n }\n\n @if (filter && filteredData() && filteredData().length === 0) {\n <div class=\"row no-data\">\n <span>No data matching the filter:</span>\n\n <span>\"{{ filter }}\"</span>\n </div>\n }\n\n @if (!filter && data && data.length === 0) {\n <div class=\"row no-data\">No data available.</div>\n }\n\n @if (pageable && pageData().length !== 0) {\n <div class=\"paging\">\n <div class=\"visible-range\">{{ visibleRange() }}</div>\n\n <ng-container *ngTemplateOutlet=\"pagePicker; context: { totalPages: totalPages() }\"></ng-container>\n\n <div class=\"page-size-option-picker\">\n <span>Items per page:</span>\n\n <apex-select class=\"table\" [options]=\"pageSizeSelectOptions\"></apex-select>\n </div>\n </div>\n }\n</div>\n\n<ng-template #textCell let-row=\"row\" let-column=\"column\" let-index=\"$index\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '', column.cellOptions?.icon ? 'has-icon' : '']\"\n [style.color]=\"getTextColor(row, column)\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition !== 'right') {\n <div class=\"cell-icon\" [class.has-color]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-fill]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-stroke]=\"getCellIconColor(row, column)\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n <span class=\"cell-text\">{{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) }}{{ column.suffix ? column.suffix : '' }}</span>\n\n @if (getCellIcon(row, column) && column.cellOptions?.iconPosition === 'right') {\n <div class=\"cell-icon\" [class.has-color]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-fill]=\"getCellIconColor(row, column)\" [style.--apex-table-cell-icon-stroke]=\"getCellIconColor(row, column)\">\n <apex-img [src]=\"'assets/img/' + getCellIcon(row, column)\" [alt]=\"'Cell icon.'\"></apex-img>\n </div>\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #dateCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"getClass(row, column)\">\n {{ formatDate(getDescendantProp(row, column), column.dateFormat) }}\n </div>\n</ng-template>\n\n<ng-template #currencyCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\">\n\n @if (getDescendantProp(row, column) !== undefined) {\n {{ column.prefix ? column.prefix : '' }}{{ (getDescendantProp(row, column) / 100) | number }}\n }\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #numberMathCell let-row=\"row\" let-column=\"column\" let-index=\"i\">\n <div class=\"cell\"\n [ngClass]=\"[getClass(row, column), column.change ? 'has-change' : '']\"\n [attr.contenteditable]=\"column.editable\"\n (keyup)=\"cellEdit($event, column.value, index)\">\n\n {{ column.prefix ? column.prefix : '' }}{{ getDescendantProp(row, column) | number}}{{ column.suffix ? column.suffix : '' }}\n\n @if (getChangeValue(row, column) !== null) {\n <apex-chip [ngClass]=\"getChangeValue(row, column)! >= 0 ? 'change-positive' : 'change-negative'\">\n {{ getChangeValue(row, column)! >= 0 ? '+' : '' }}{{ getChangeValue(row, column) }}%\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #actionCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell actions\">\n\n @for (action of column.singleActions; track $index) {\n @if (handleActionShow(action, row, column)) {\n <div ApexTooltip (click)=\"action.execute && action.execute(row)\" [apexTooltip]=\"action.label\" [tooltipPosition]=\"tooltipPosition.Above\" class=\"action-icon-wrapper\" [ngClass]=\"{ 'disabled': action.disabled }\">\n <apex-img [src]=\" 'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n </div>\n }\n }\n\n @if (column.multipleActions) {\n <div class=\"action-icon-wrapper\" #moreActionsList [ngClass]=\"{ 'opened': row.isDropdown }\" (click)=\"toggleActionDropdown(row, column, $event)\">\n <svg class=\"multiple-action-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\n <path d=\"M10.3047 8C10.3047 8.34612 10.2021 8.68446 10.0098 8.97225C9.81747 9.26004 9.54416 9.48434 9.22438 9.61679C8.90461 9.74924 8.55275 9.7839 8.21328 9.71638C7.87381 9.64885 7.56199 9.48218 7.31725 9.23744C7.07251 8.9927 6.90584 8.68088 6.83831 8.34141C6.77079 8.00194 6.80545 7.65008 6.9379 7.33031C7.07035 7.01053 7.29465 6.73722 7.58244 6.54493C7.87023 6.35264 8.20857 6.25 8.55469 6.25C9.01868 6.25046 9.46353 6.43498 9.79162 6.76307C10.1197 7.09116 10.3042 7.53601 10.3047 8ZM8.55469 4.75C8.90081 4.75 9.23915 4.64737 9.52694 4.45507C9.81472 4.26278 10.039 3.98947 10.1715 3.6697C10.3039 3.34993 10.3386 2.99806 10.2711 2.65859C10.2035 2.31913 10.0369 2.00731 9.79213 1.76256C9.54738 1.51782 9.23556 1.35115 8.8961 1.28363C8.55663 1.2161 8.20476 1.25076 7.88499 1.38321C7.56522 1.51566 7.29191 1.73997 7.09962 2.02775C6.90732 2.31554 6.80469 2.65388 6.80469 3C6.80515 3.46399 6.98967 3.90884 7.31776 4.23693C7.64585 4.56502 8.0907 4.74954 8.55469 4.75ZM8.55469 11.25C8.20857 11.25 7.87023 11.3526 7.58244 11.5449C7.29465 11.7372 7.07035 12.0105 6.9379 12.3303C6.80545 12.6501 6.77079 13.0019 6.83831 13.3414C6.90584 13.6809 7.07251 13.9927 7.31725 14.2374C7.56199 14.4822 7.87381 14.6489 8.21328 14.7164C8.55275 14.7839 8.90461 14.7492 9.22438 14.6168C9.54416 14.4843 9.81747 14.26 10.0098 13.9722C10.2021 13.6845 10.3047 13.3461 10.3047 13C10.3042 12.536 10.1197 12.0912 9.79162 11.7631C9.46353 11.435 9.01868 11.2505 8.55469 11.25Z\"/>\n </svg>\n </div>\n }\n\n </div>\n</ng-template>\n\n<ng-template #chipCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell chip\">\n @if (getChipLabel(row, column)) {\n <apex-chip [ngClass]=\"getClass(row, column)\"\n [style.--apex-chip-color]=\"getChipColor(row, column)\"\n [style.--apex-chip-background-color]=\"getChipBackgroundColor(row, column)\"> {{ getChipLabel(row, column) }}</apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #statusCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell status\">\n @for (step of column.statusSteps; track step.value; let i = $index) {\n <div class=\"status-step\" [class.completed]=\"isStatusStepCompleted(row, column, i)\">\n <span class=\"status-step-label\">{{ step.label }}</span>\n\n <div class=\"status-step-bar\"\n [style.background-color]=\"isStatusStepCompleted(row, column, i) ? step.color : null\">\n </div>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template #listCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell list\">\n <span class=\"list-text\">{{ getListDisplayText(row, column) }}</span>\n\n @if (getListOverflowCount(row, column) > 0) {\n <apex-chip class=\"list-overflow-badge\"\n ApexTooltip\n [apexTooltip]=\"getListTooltipContent(row, column)\"\n [tooltipPosition]=\"tooltipPosition.Below\">\n +{{ getListOverflowCount(row, column) }}\n </apex-chip>\n }\n </div>\n</ng-template>\n\n<ng-template #checkboxCell let-row=\"row\" let-column=\"column\">\n <div class=\"cell checkbox\">\n <apex-checkbox [checked]=\"getCheckboxState(row, column)\" [disabled]=\"true\"></apex-checkbox>\n </div>\n</ng-template>\n\n<ng-template #multipleActionsDropdown let-row=\"row\" let-column=\"column\">\n <div #multipleActionsDropdownElement #dropdownElement class=\"more-actions-dropdown\">\n @for (action of column.multipleActions; track $index) {\n\n @if (handleActionShow(action, row, column)) {\n <div class=\"dropdown-row\" (click)=\"action.execute && action.execute(row)\">\n <apex-img [src]=\"'assets/img/' + action.icon\" [ngClass]=\"action.class\" [alt]=\"'Action icon for ' + action.label\"></apex-img>\n\n <span>{{ action.label }}</span>\n </div>\n }\n\n }\n </div>\n</ng-template>\n\n<ng-template #pagePicker let-totalPages=\"totalPages\">\n <div class=\"page-picker\">\n <!-- If page one should be visible -->\n @if (currentPage + 1 >= 3) {\n <span (click)=\"goToPage(0)\">1</span>\n <span class=\"style-excluded\">...</span>\n }\n\n <!-- Middle part of the page-picker -->\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage - 1 } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage, class: 'highlighted' } \"></ng-container>\n <ng-container *ngTemplateOutlet=\"page; context: { page: currentPage + 1 } \"></ng-container>\n\n <!-- If last page should be visible -->\n @if (currentPage + 1 <= totalPages - 2) {\n <span class=\"style-excluded\">...</span>\n <span (click)=\"goToPage(totalPages - 1)\">{{ totalPages }}</span>\n }\n\n </div>\n</ng-template>\n\n<ng-template #page let-page=\"page\" let-class=\"class\">\n @if (page >= 0 && page < totalPages()) {\n <span [ngClass]=\"class\" (click)=\"goToPage(page)\">{{ page + 1 }}</span>\n }\n</ng-template>\n\n<ng-template #headerRow>\n <tr>\n @for (column of columns; track $index) {\n <th [ngStyle]=\"{ width: column.width ? column.width : '' }\">\n <div class=\"cell\">\n <span>{{ column.label }}</span>\n\n @if (column.type !== TableColumnType.Actions && sortable) {\n <div class=\"arranger\" (click)=\"sortColumn(column)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3.11445 5.50005H8.88795C9.31895 5.50005 9.54795 4.99005 9.26145 4.66755L6.37495 1.42005C6.32813 1.3672 6.27063 1.32489 6.20624 1.29591C6.14186 1.26694 6.07205 1.25195 6.00145 1.25195C5.93084 1.25195 5.86104 1.26694 5.79666 1.29591C5.73227 1.32489 5.67477 1.3672 5.62795 1.42005L2.74045 4.66755C2.45395 4.99005 2.68295 5.50005 3.11445 5.50005ZM5.62745 10.5795C5.67427 10.6324 5.73177 10.6747 5.79616 10.7037C5.86054 10.7327 5.93034 10.7476 6.00095 10.7476C6.07155 10.7476 6.14136 10.7327 6.20574 10.7037C6.27013 10.6747 6.32763 10.6324 6.37445 10.5795L9.26095 7.33205C9.54795 7.01005 9.31895 6.50005 8.88745 6.50005H3.11445C2.68345 6.50005 2.45445 7.01005 2.74095 7.33255L5.62745 10.5795Z\" fill=\"#C6C6C6\"/>\n </svg>\n </div>\n }\n </div>\n </th>\n }\n\n @if (editMode) {\n <th class=\"select-column\">\n <div class=\"cell\">\n <span class=\"select-all-btn\" (click)=\"toggleSelectAll()\">{{ allSelected() ? 'Deselect' : 'Select all' }}</span>\n </div>\n </th>\n }\n </tr>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -26,6 +26,12 @@ interface ApexTableColumn {
|
|
|
26
26
|
change?: string;
|
|
27
27
|
listOptions?: ApexTableListOptions;
|
|
28
28
|
cellOptions?: ApexTableCellOptions;
|
|
29
|
+
statusSteps?: ApexTableStatusStep[];
|
|
30
|
+
}
|
|
31
|
+
interface ApexTableStatusStep {
|
|
32
|
+
label: string;
|
|
33
|
+
value: string | number | boolean;
|
|
34
|
+
color: string;
|
|
29
35
|
}
|
|
30
36
|
interface ApexTableListOptions {
|
|
31
37
|
label?: string;
|
|
@@ -36,7 +42,16 @@ interface ApexTableCellOptions {
|
|
|
36
42
|
[key: string]: string;
|
|
37
43
|
};
|
|
38
44
|
iconPosition?: 'left' | 'right';
|
|
39
|
-
|
|
45
|
+
iconColor?: {
|
|
46
|
+
[key: string]: string;
|
|
47
|
+
};
|
|
48
|
+
textColor?: {
|
|
49
|
+
[key: string]: string;
|
|
50
|
+
};
|
|
51
|
+
chipColor?: {
|
|
52
|
+
[key: string]: string;
|
|
53
|
+
};
|
|
54
|
+
chipBackgroundColor?: {
|
|
40
55
|
[key: string]: string;
|
|
41
56
|
};
|
|
42
57
|
}
|
|
@@ -49,7 +64,8 @@ declare enum ApexTableColumnType {
|
|
|
49
64
|
NumberMath = 5,
|
|
50
65
|
Actions = 6,
|
|
51
66
|
Checkbox = 7,
|
|
52
|
-
List = 8
|
|
67
|
+
List = 8,
|
|
68
|
+
Status = 9
|
|
53
69
|
}
|
|
54
70
|
type ActionShowType = Array<{
|
|
55
71
|
property: string;
|
|
@@ -101,6 +117,7 @@ declare class ApexTableComponent {
|
|
|
101
117
|
checkboxCellTpl: TemplateRef<any>;
|
|
102
118
|
actionCellTpl: TemplateRef<any>;
|
|
103
119
|
listCellTpl: TemplateRef<any>;
|
|
120
|
+
statusCellTpl: TemplateRef<any>;
|
|
104
121
|
data: any[];
|
|
105
122
|
dataLength: number;
|
|
106
123
|
columns: ApexTableColumn[];
|
|
@@ -162,13 +179,17 @@ declare class ApexTableComponent {
|
|
|
162
179
|
formatDate(dateAsString: string | null | undefined, formatDateOptions?: ApexDateFormatOptions): string;
|
|
163
180
|
getClass(row: any, column: ApexTableColumn): string;
|
|
164
181
|
getDescendantProp(row: any, column: ApexTableColumn): any;
|
|
165
|
-
|
|
182
|
+
getTextColor(row: any, column: ApexTableColumn): string | null;
|
|
183
|
+
getChipColor(row: any, column: ApexTableColumn): string | null;
|
|
184
|
+
getChipBackgroundColor(row: any, column: ApexTableColumn): string | null;
|
|
185
|
+
getCellIconColor(row: any, column: ApexTableColumn): string | null;
|
|
166
186
|
getCellIcon(row: any, column: ApexTableColumn): string | null;
|
|
167
187
|
getChangeValue(row: any, column: ApexTableColumn): number | null;
|
|
168
188
|
getListDisplayText(row: any, column: ApexTableColumn): string;
|
|
169
189
|
getListOverflowCount(row: any, column: ApexTableColumn): number;
|
|
170
190
|
getListTooltipContent(row: any, column: ApexTableColumn): string;
|
|
171
191
|
getChipLabel(row: any, column: ApexTableColumn): string;
|
|
192
|
+
isStatusStepCompleted(row: any, column: ApexTableColumn, stepIndex: number): boolean;
|
|
172
193
|
getCheckboxState(row: any, column: ApexTableColumn): boolean;
|
|
173
194
|
handleActionShow(action: Action, row: any, column?: ApexTableColumn): boolean;
|
|
174
195
|
sortColumn(column: any, changeSortDirection?: boolean): void;
|
|
@@ -194,4 +215,4 @@ declare class ApexTableComponent {
|
|
|
194
215
|
}
|
|
195
216
|
|
|
196
217
|
export { ApexTableColumnType, ApexTableComponent };
|
|
197
|
-
export type { Action, ActionShowType, ApexDateFormatOptions, ApexTableCellOptions, ApexTableChange, ApexTableColumn, ApexTableListOptions };
|
|
218
|
+
export type { Action, ActionShowType, ApexDateFormatOptions, ApexTableCellOptions, ApexTableChange, ApexTableColumn, ApexTableListOptions, ApexTableStatusStep };
|