@reforgium/data-grid 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -1
- package/fesm2022/reforgium-data-grid-column-manager.mjs.map +0 -1
- package/fesm2022/reforgium-data-grid-paginator.mjs.map +0 -1
- package/fesm2022/reforgium-data-grid-ui.mjs.map +0 -1
- package/fesm2022/reforgium-data-grid.mjs.map +0 -1
- package/types/reforgium-data-grid-column-manager.d.ts.map +0 -1
- package/types/reforgium-data-grid-paginator.d.ts.map +0 -1
- package/types/reforgium-data-grid-ui.d.ts.map +0 -1
- package/types/reforgium-data-grid.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.0.
|
|
2
|
+
"version": "2.0.1",
|
|
3
3
|
"name": "@reforgium/data-grid",
|
|
4
4
|
"description": "reforgium DataGrid component",
|
|
5
5
|
"author": "rtommievich",
|
|
@@ -28,6 +28,14 @@
|
|
|
28
28
|
"@angular/core": ">=18.0.0",
|
|
29
29
|
"rxjs": ">=7.0.0"
|
|
30
30
|
},
|
|
31
|
+
"files": [
|
|
32
|
+
"fesm2022/*.mjs",
|
|
33
|
+
"types/*.d.ts",
|
|
34
|
+
"package.json",
|
|
35
|
+
"README.md",
|
|
36
|
+
"CHANGELOG.md",
|
|
37
|
+
"LICENSE*"
|
|
38
|
+
],
|
|
31
39
|
"module": "fesm2022/reforgium-data-grid.mjs",
|
|
32
40
|
"typings": "types/reforgium-data-grid.d.ts",
|
|
33
41
|
"exports": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid-column-manager.mjs","sources":["../../../../libs/data-grid/column-manager/src/data-grid.column-manager.utils.ts","../../../../libs/data-grid/column-manager/src/icons/cross.icon.ts","../../../../libs/data-grid/column-manager/src/icons/eye.icon.ts","../../../../libs/data-grid/column-manager/src/icons/pin.icon.ts","../../../../libs/data-grid/column-manager/src/data-grid.column-manager.component.ts","../../../../libs/data-grid/column-manager/src/reforgium-data-grid-column-manager.ts"],"sourcesContent":["import { GridColumn } from '@reforgium/data-grid';\r\n\r\n\r\nimport { GridColumnPin } from './data-grid.column-manager.models';\r\n\r\ntype RowLike = Record<string, unknown>;\r\n\r\nconst isVisible = <Data extends RowLike>(column: GridColumn<Data>) => column.visible !== false;\r\n\r\nexport function cloneColumns<Data extends RowLike>(columns: GridColumn<Data>[]): GridColumn<Data>[] {\r\n return columns.map((column) => ({ ...column }));\r\n}\r\n\r\nexport function resolvePinState<Data extends RowLike>(columns: GridColumn<Data>[], key: string): GridColumnPin {\r\n const visible = columns.filter(isVisible);\r\n const index = visible.findIndex((column) => column.key === key);\r\n\r\n if (index < 0) {\r\n return 'none';\r\n }\r\n\r\n const column = visible[index];\r\n\r\n if (!column.sticky) {\r\n return 'none';\r\n }\r\n\r\n const middleIndex = Math.floor(visible.length / 2);\r\n\r\n return index < middleIndex ? 'left' : 'right';\r\n}\r\n\r\nexport function moveColumn<Data extends RowLike>(columns: GridColumn<Data>[], fromIndex: number, toIndex: number): GridColumn<Data>[] {\r\n if (fromIndex === toIndex || fromIndex < 0 || toIndex < 0 || fromIndex >= columns.length || toIndex >= columns.length) {\r\n return columns;\r\n }\r\n\r\n const next = [...columns];\r\n const [moving] = next.splice(fromIndex, 1);\r\n\r\n next.splice(toIndex, 0, moving);\r\n\r\n return next;\r\n}\r\n\r\nexport function setColumnPin<Data extends RowLike>(\r\n columns: GridColumn<Data>[],\r\n key: string,\r\n pin: GridColumnPin,\r\n): GridColumn<Data>[] {\r\n const fromIndex = columns.findIndex((column) => column.key === key);\r\n\r\n if (fromIndex < 0) {\r\n return columns;\r\n }\r\n\r\n const next = cloneColumns(columns);\r\n next[fromIndex] = {\r\n ...next[fromIndex],\r\n sticky: pin === 'none' ? undefined : pin,\r\n };\r\n\r\n if (pin === 'none') {\r\n return next;\r\n }\r\n\r\n const toIndex = pin === 'left' ? 0 : next.length - 1;\r\n\r\n return moveColumn(next, fromIndex, toIndex);\r\n}\r\n\r\nexport function setColumnVisibility<Data extends RowLike>(\r\n columns: GridColumn<Data>[],\r\n key: string,\r\n visible: boolean,\r\n): GridColumn<Data>[] {\r\n const index = columns.findIndex((column) => column.key === key);\r\n\r\n if (index < 0) {\r\n return columns;\r\n }\r\n\r\n const visibleCount = columns.filter(isVisible).length;\r\n\r\n if (!visible && visibleCount <= 1 && isVisible(columns[index])) {\r\n return columns;\r\n }\r\n\r\n const next = cloneColumns(columns);\r\n\r\n next[index] = {\r\n ...next[index],\r\n visible,\r\n };\r\n\r\n return next;\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 're-cross-ic',\r\n template: `\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M10.1958 7.3658L14.4358 3.1258C14.5295 3.03284 14.6039 2.92223 14.6547 2.80037C14.7055 2.67852 14.7316 2.54781 14.7316 2.4158C14.7316 2.28379 14.7055 2.15308 14.6547 2.03122C14.6039 1.90936 14.5295 1.79876 14.4358 1.7058L13.0258 0.295798C12.9328 0.20207 12.8222 0.127676 12.7004 0.0769072C12.5785 0.0261385 12.4478 0 12.3158 0C12.1838 0 12.0531 0.0261385 11.9312 0.0769072C11.8094 0.127676 11.6988 0.20207 11.6058 0.295798L7.3658 4.5358L3.1258 0.295798C3.03284 0.20207 2.92223 0.127676 2.80037 0.0769072C2.67852 0.0261385 2.54781 0 2.4158 0C2.28379 0 2.15308 0.0261385 2.03122 0.0769072C1.90936 0.127676 1.79876 0.20207 1.7058 0.295798L0.295798 1.7058C0.20207 1.79876 0.127676 1.90936 0.0769072 2.03122C0.0261385 2.15308 0 2.28379 0 2.4158C0 2.54781 0.0261385 2.67852 0.0769072 2.80037C0.127676 2.92223 0.20207 3.03284 0.295798 3.1258L4.5358 7.3658L0.295798 11.6058C0.20207 11.6988 0.127676 11.8094 0.0769072 11.9312C0.0261385 12.0531 0 12.1838 0 12.3158C0 12.4478 0.0261385 12.5785 0.0769072 12.7004C0.127676 12.8222 0.20207 12.9328 0.295798 13.0258L1.7058 14.4358C1.79876 14.5295 1.90936 14.6039 2.03122 14.6547C2.15308 14.7055 2.28379 14.7316 2.4158 14.7316C2.54781 14.7316 2.67852 14.7055 2.80037 14.6547C2.92223 14.6039 3.03284 14.5295 3.1258 14.4358L7.3658 10.1958L11.6058 14.4358C11.6988 14.5295 11.8094 14.6039 11.9312 14.6547C12.0531 14.7055 12.1838 14.7316 12.3158 14.7316C12.4478 14.7316 12.5785 14.7055 12.7004 14.6547C12.8222 14.6039 12.9328 14.5295 13.0258 14.4358L14.4358 13.0258C14.5295 12.9328 14.6039 12.8222 14.6547 12.7004C14.7055 12.5785 14.7316 12.4478 14.7316 12.3158C14.7316 12.1838 14.7055 12.0531 14.6547 11.9312C14.6039 11.8094 14.5295 11.6988 14.4358 11.6058L10.1958 7.3658Z\"\r\n fill=\"var(--re-data-grid-cross-ic-surface)\"\r\n />\r\n </svg>\r\n </svg>\r\n `,\r\n styles: `\r\n :host {\r\n --re-data-grid-cross-ic-surface: currentColor;\r\n }\r\n `,\r\n})\r\nexport class CrossIcon {}\r\n","import { booleanAttribute, Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 're-eye-ic',\r\n template: `\r\n @if (open()) {\r\n <svg width=\"13.5\" height=\"13.5\" viewBox=\"0 0 20 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.85 8.56C12.85 9.12368 12.6828 9.6747 12.3697 10.1434C12.0565 10.6121 11.6114 10.9773 11.0906 11.1931C10.5699 11.4088 9.99684 11.4652 9.44399 11.3552C8.89115 11.2453 8.38333 10.9738 7.98475 10.5753C7.58617 10.1767 7.31473 9.66885 7.20476 9.11601C7.09479 8.56316 7.15123 7.99012 7.36694 7.46935C7.58265 6.94858 7.94795 6.50347 8.41663 6.19031C8.88531 5.87715 9.43632 5.71 10 5.71C10.7551 5.71264 11.4784 6.01375 12.0123 6.54766C12.5463 7.08157 12.8474 7.80494 12.85 8.56ZM20 8.56C20 12.56 15 17.12 10 17.12C5.27 17.12 0 12.32 0 8.56C0 4.62 5.27 0 10 0C14.73 0 20 4.74 20 8.56ZM14.35 8.56C14.35 7.69965 14.0949 6.85862 13.6169 6.14327C13.1389 5.42792 12.4595 4.87037 11.6647 4.54112C10.8698 4.21188 9.99517 4.12574 9.15136 4.29358C8.30754 4.46143 7.53244 4.87573 6.92409 5.48409C6.31573 6.09244 5.90143 6.86754 5.73358 7.71136C5.56574 8.55517 5.65188 9.42981 5.98112 10.2247C6.31037 11.0195 6.86792 11.6989 7.58327 12.1769C8.29862 12.6549 9.13965 12.91 10 12.91C11.1537 12.91 12.2601 12.4517 13.0759 11.6359C13.8917 10.8201 14.35 9.71369 14.35 8.56Z\"\r\n fill=\"var(--re-data-grid-eye-ic-surface)\"\r\n />\r\n </svg>\r\n } @else {\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M21.66 2.38028C21.5164 2.24158 21.3246 2.16406 21.125 2.16406C20.9254 2.16406 20.7336 2.24158 20.59 2.38028L17.21 5.75028C15.6674 4.70563 13.8618 4.11647 12 4.05028C7.27 4.05028 2 8.67028 2 12.6103C2 14.3803 3.18 16.3803 4.91 18.0003L2.35 20.5503C2.20894 20.6926 2.12979 20.8849 2.12979 21.0853C2.12979 21.2857 2.20894 21.478 2.35 21.6203C2.49233 21.7613 2.68461 21.8405 2.885 21.8405C3.08539 21.8405 3.27767 21.7613 3.42 21.6203L21.65 3.45028C21.7924 3.30927 21.8733 3.11773 21.8752 2.91734C21.8771 2.71695 21.7997 2.52392 21.66 2.38028ZM7.66 12.6103C7.65079 11.8501 7.84329 11.1011 8.21787 10.4395C8.59245 9.77798 9.13572 9.22757 9.79232 8.84438C10.4489 8.4612 11.1954 8.25894 11.9556 8.25822C12.7158 8.2575 13.4627 8.45834 14.12 8.84028L13 10.0003C12.6822 9.87139 12.3429 9.80354 12 9.80028C11.2449 9.80292 10.5216 10.104 9.98766 10.6379C9.45375 11.1718 9.15264 11.8952 9.15 12.6503C9.15367 12.9922 9.218 13.3308 9.34 13.6503L8.22 14.7003C7.85137 14.0651 7.6549 13.3447 7.65 12.6103H7.66ZM22.01 12.6103C22.01 16.6103 17.01 21.1703 12.01 21.1703C10.3603 21.1211 8.75145 20.6457 7.34 19.7903L10.48 16.6703C11.1371 16.9247 11.8464 17.0146 12.5462 16.9321C13.2459 16.8495 13.9149 16.5971 14.4947 16.1967C15.0745 15.7964 15.5476 15.2603 15.8727 14.6352C16.1979 14.01 16.3651 13.3149 16.36 12.6103C16.3566 12.0934 16.2583 11.5816 16.07 11.1003L19.55 7.63028C20.9613 8.92507 21.8355 10.7021 22 12.6103H22.01ZM11.71 15.4303L14.82 12.3403C14.8249 12.4302 14.8249 12.5203 14.82 12.6103C14.82 13.361 14.5239 14.0814 13.9959 14.615C13.4679 15.1486 12.7507 15.4524 12 15.4603C11.9029 15.4552 11.8061 15.4452 11.71 15.4303Z\"\r\n fill=\"var(--re-data-grid-eye-ic-surface)\"\r\n />\r\n </svg>\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n --re-data-grid-eye-ic-surface: var(--primary-color, currentColor);\r\n\r\n width: 16px;\r\n height: 16px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n `,\r\n})\r\nexport class EyeIcon {\r\n open = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n}\r\n","import { booleanAttribute, Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 're-pin-ic',\r\n template: `\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n [class.toRight]=\"toRight()\"\r\n >\r\n <path\r\n d=\"M19.6209 7.55125L18.9009 8.27125C18.8075 8.36959 18.695 8.44789 18.5704 8.5014C18.4457 8.55491 18.3115 8.5825 18.1759 8.5825C18.0402 8.5825 17.906 8.55491 17.7814 8.5014C17.6568 8.44789 17.5443 8.36959 17.4509 8.27125L16.7309 7.55125L13.5709 10.7113C14.0298 11.6766 14.2297 12.7448 14.1508 13.8108C14.0719 14.8768 13.717 15.904 13.1209 16.7913C12.9705 17.0138 12.7731 17.2005 12.5425 17.3382C12.3119 17.4759 12.0538 17.5611 11.7865 17.5878C11.5193 17.6145 11.2495 17.5821 10.9962 17.4928C10.7429 17.4036 10.5123 17.2596 10.3209 17.0713L2.86088 9.61125C2.67251 9.41982 2.52858 9.18928 2.4393 8.93598C2.35003 8.68268 2.31761 8.41283 2.34433 8.1456C2.37105 7.87836 2.45627 7.62028 2.59393 7.38967C2.7316 7.15907 2.91833 6.96159 3.14088 6.81125C4.02817 6.21517 5.0553 5.86024 6.12131 5.78134C7.18732 5.70244 8.25551 5.90229 9.22088 6.36125L12.3809 3.20125L11.6609 2.48125C11.5625 2.38783 11.4842 2.27538 11.4307 2.15075C11.3772 2.02611 11.3496 1.89189 11.3496 1.75625C11.3496 1.62061 11.3772 1.48639 11.4307 1.36176C11.4842 1.23712 11.5625 1.12467 11.6609 1.03125L12.3809 0.311251C12.4743 0.212914 12.5868 0.13461 12.7114 0.0811017C12.836 0.0275935 12.9702 0 13.1059 0C13.2415 0 13.3757 0.0275935 13.5004 0.0811017C13.625 0.13461 13.7375 0.212914 13.8309 0.311251L19.6209 6.10125C19.7192 6.19467 19.7975 6.30712 19.851 6.43176C19.9045 6.55639 19.9321 6.69061 19.9321 6.82625C19.9321 6.96189 19.9045 7.09611 19.851 7.22075C19.7975 7.34538 19.7192 7.45783 19.6209 7.55125ZM1.62088 15.4513C1.09342 15.9597 0.695621 16.5873 0.460884 17.2812L0.0608836 18.4713C-0.0069043 18.6664 -0.0183471 18.8768 0.0278657 19.0782C0.0740786 19.2795 0.176078 19.4638 0.322183 19.61C0.468287 19.7561 0.652588 19.8581 0.853976 19.9043C1.05536 19.9505 1.2657 19.939 1.46088 19.8713L2.65088 19.4713C3.34193 19.2452 3.96923 18.8578 4.48088 18.3413L6.96088 15.8513L4.08088 12.9713L1.62088 15.4513ZM8.07088 14.7913L5.15088 11.8913L8.07088 14.7913Z\"\r\n fill=\"var(--re-data-grid-pin-ic-surface)\"\r\n />\r\n </svg>\r\n `,\r\n styles: `\r\n :host {\r\n --re-data-grid-pin-ic-surface: currentColor;\r\n }\r\n\r\n .toRight {\r\n transform: rotate(-90deg);\r\n }\r\n `,\r\n})\r\nexport class PinIcon {\r\n toRight = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n}\r\n","// noinspection CssUnresolvedCustomProperty\r\n\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n effect,\n ElementRef,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\r\nimport { NgTemplateOutlet } from '@angular/common';\nimport { GridColumn } from '@reforgium/data-grid';\n\r\nimport { GridColumnPin } from './data-grid.column-manager.models';\r\nimport {\r\n cloneColumns,\r\n moveColumn,\r\n resolvePinState,\r\n setColumnPin,\r\n setColumnVisibility,\r\n} from './data-grid.column-manager.utils';\r\nimport { CrossIcon } from './icons/cross.icon';\r\nimport { EyeIcon } from './icons/eye.icon';\r\nimport { PinIcon } from './icons/pin.icon';\r\n\r\ntype RowLike = Record<string, unknown>;\r\n\r\n@Component({\r\n selector: 're-data-grid-column-manager',\r\n standalone: true,\r\n template: `\r\n <div class=\"re-dg-cm\" #root>\r\n <button\n type=\"button\"\n class=\"re-dg-cm__trigger\"\n [class.re-dg-cm__trigger--open]=\"opened()\"\n [attr.aria-expanded]=\"opened()\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggleOpen()\"\n >\n @if (triggerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate()!\"\n [ngTemplateOutletContext]=\"{\n $implicit: triggerLabel(),\n visible: visibleColumnsCount(),\n total: state().length\n }\"\n />\n } @else {\n <span class=\"re-dg-cm__trigger-label\">{{ triggerLabel() }}</span>\n <span class=\"re-dg-cm__trigger-count\">{{ visibleColumnsCount() }}/{{ state().length }}</span>\n }\n </button>\n\r\n @if (opened()) {\r\n <div class=\"re-dg-cm__panel\" role=\"dialog\">\r\n @let list = filteredColumns();\r\n\r\n @if (controlsVisible() && searchable()) {\r\n <label class=\"re-dg-cm__search\">\r\n <input\r\n type=\"search\"\r\n [value]=\"searchQuery()\"\r\n [placeholder]=\"searchPlaceholder()\"\r\n (input)=\"onSearch($event)\"\r\n />\r\n </label>\r\n }\r\n\r\n <div class=\"re-dg-cm__title-row\">\r\n @if (controlsVisible()) {\r\n <div class=\"re-dg-cm__tools\">\r\n <button type=\"button\" (click)=\"showAll()\">Show all</button>\r\n <button type=\"button\" (click)=\"hideOptional()\">Hide All</button>\r\n </div>\r\n } @else {\r\n <span></span>\r\n }\r\n\r\n <span class=\"re-dg-cm__meta\">{{ visibleColumnsCount() }} / {{ state().length }}</span>\r\n </div>\r\n\r\n <div class=\"re-dg-cm__list\">\r\n @for (column of list; track column.key) {\r\n @let currentPin = pin(column.key);\r\n @let disabled = !!column.disabled;\r\n @let canHideValue = canHideColumn(column.key);\r\n\r\n <div\r\n class=\"re-dg-cm__row\"\r\n [attr.draggable]=\"allowReorder() && !disabled\"\r\n [class.re-dg-cm__row--disabled]=\"disabled\"\r\n [class.re-dg-cm__row--dragging]=\"draggingKey() === column.key\"\r\n (dragstart)=\"onDragStart($event, column.key)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, column.key)\"\r\n (dragend)=\"draggingKey.set(null)\"\r\n >\r\n <span class=\"re-dg-cm__drag\" title=\"Reorder\">::</span>\r\n\r\n <label class=\"re-dg-cm__checkbox\">\r\n <button [disabled]=\"disabled || !canHideValue\" (click)=\"onVisibleChange(column.key)\">\r\n <re-eye-ic [open]=\"column.visible !== false\" />\r\n </button>\r\n <span>{{ column.header || column.key }}</span>\r\n </label>\r\n\r\n <div class=\"re-dg-cm__actions\">\r\n @if (allowPin()) {\r\n <button\r\n type=\"button\"\r\n class=\"pin-button\"\r\n [class.re-dg-cm__action--active]=\"currentPin === 'left'\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onPin(column.key, 'left')\"\r\n title=\"Pin left\"\r\n >\r\n <re-pin-ic />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"pin-button\"\r\n [class.re-dg-cm__action--active]=\"currentPin === 'none'\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onPin(column.key, 'none')\"\r\n title=\"Unpin\"\r\n >\r\n <re-cross-ic />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"pin-button\"\r\n [class.re-dg-cm__action--active]=\"currentPin === 'right'\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onPin(column.key, 'right')\"\r\n title=\"Pin right\"\r\n >\r\n <re-pin-ic toRight />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n `,\r\n host: {\r\n 'document:mousedown': 'onDocumentMouseDown($event.target)',\r\n },\r\n styles: `\r\n :host {\r\n --re-data-grid-cm-gap: 0.5rem;\r\n --re-data-grid-cm-rounded: 0.625rem;\r\n --re-data-grid-cm-border: 1px solid var(--surface-border, #dfe1e6);\r\n --re-data-grid-cm-surface: var(--surface-neutral, #fff);\r\n --re-data-grid-cm-muted: var(--text-muted, #64748b);\r\n --re-data-grid-cm-active: var(--primary-color, #2a90f4);\r\n --re-data-grid-cm-shadow: 0 12px 30px rgba(15, 23, 42, 0.18);\r\n\r\n display: inline-block;\r\n position: relative;\r\n }\r\n\r\n .re-dg-cm {\r\n position: relative;\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: var(--re-data-grid-cm-gap);\r\n }\r\n\r\n .re-dg-cm__trigger {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n height: 2.25rem;\r\n padding: 0 0.75rem;\r\n border: var(--re-data-grid-cm-border);\r\n border-radius: 999px;\r\n background: var(--re-data-grid-cm-surface);\r\n color: inherit;\r\n cursor: pointer;\r\n }\r\n\r\n .re-dg-cm__trigger--open {\r\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--re-data-grid-cm-active) 25%, transparent);\r\n }\r\n\r\n .re-dg-cm__trigger-label {\r\n font-size: 0.8125rem;\r\n font-weight: 600;\r\n }\r\n\r\n .re-dg-cm__trigger-count {\r\n font-size: 0.75rem;\r\n color: var(--re-data-grid-cm-muted);\r\n }\r\n\r\n .re-dg-cm__panel {\r\n position: absolute;\r\n top: calc(100% + 0.5rem);\r\n left: 0;\r\n z-index: 50;\r\n min-width: 18rem;\r\n width: max-content;\r\n max-width: min(24rem, 85vw);\r\n display: grid;\r\n gap: var(--re-data-grid-cm-gap);\r\n padding: 0.75rem;\r\n border: var(--re-data-grid-cm-border);\r\n border-radius: var(--re-data-grid-cm-rounded);\r\n background: var(--re-data-grid-cm-surface);\r\n box-shadow: var(--re-data-grid-cm-shadow);\r\n }\r\n\r\n .re-dg-cm__tools,\r\n .re-dg-cm__row,\r\n .re-dg-cm__actions {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .re-dg-cm__meta {\r\n color: var(--re-data-grid-cm-muted);\r\n font-size: 0.75rem;\r\n }\r\n\r\n .re-dg-cm__search input {\r\n width: 100%;\r\n height: 2rem;\r\n border-radius: 0.5rem;\r\n border: var(--re-data-grid-cm-border);\r\n padding: 0 0.625rem;\r\n background: var(--re-data-grid-cm-surface);\r\n color: inherit;\r\n }\r\n\r\n .re-dg-cm__tools {\r\n gap: 0.5rem;\r\n }\r\n\r\n .re-dg-cm__title-row {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .re-dg-cm__tools button,\r\n .re-dg-cm__actions button {\r\n color: inherit;\r\n cursor: pointer;\r\n font-size: 0.75rem;\r\n line-height: 1;\r\n }\r\n\r\n .re-dg-cm__tools button {\r\n height: 1.8rem;\r\n padding: 0 0.5rem;\r\n }\r\n\r\n .re-dg-cm__actions button {\r\n width: 1.7rem;\r\n height: 1.7rem;\r\n }\r\n\r\n .re-dg-cm__list {\r\n display: grid;\r\n gap: 0.375rem;\r\n max-height: 22rem;\r\n overflow: auto;\r\n padding-right: 0.125rem;\r\n }\r\n\r\n .re-dg-cm__row {\r\n gap: 0.5rem;\r\n padding: 0.375rem 0.5rem;\r\n border: var(--re-data-grid-cm-border);\r\n border-radius: 0.5rem;\r\n background: color-mix(in srgb, var(--re-data-grid-cm-surface) 88%, #f8fafc);\r\n }\r\n\r\n .re-dg-cm__row--dragging {\r\n opacity: 0.55;\r\n }\r\n\r\n .re-dg-cm__row--disabled {\r\n opacity: 0.6;\r\n }\r\n\r\n .re-dg-cm__drag {\r\n width: 1rem;\r\n color: var(--re-data-grid-cm-muted);\r\n cursor: grab;\r\n user-select: none;\r\n }\r\n\r\n .re-dg-cm__checkbox {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n font-size: 0.8125rem;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n\r\n .re-dg-cm__actions {\r\n gap: 0.25rem;\r\n margin-left: auto;\r\n }\r\n\r\n .re-dg-cm__action--active {\r\n color: var(--re-data-grid-cm-active) !important;\r\n font-weight: 700;\r\n }\r\n\r\n .pin-button {\r\n }\r\n `,\r\n imports: [NgTemplateOutlet, EyeIcon, CrossIcon, PinIcon],\n})\nexport class DataGridColumnManager<Data extends RowLike = RowLike> {\r\n columns = input<GridColumn<Data>[]>([]);\n\n triggerLabel = input('Columns');\n triggerTemplate = input<TemplateRef<{ $implicit: string; visible: number; total: number }> | undefined>(undefined);\n controlsVisible = input(true, { transform: booleanAttribute });\n searchable = input(true, { transform: booleanAttribute });\r\n searchPlaceholder = input('Search columns...');\r\n allowReorder = input(true, { transform: booleanAttribute });\r\n allowPin = input(true, { transform: booleanAttribute });\r\n allowVisibility = input(true, { transform: booleanAttribute });\r\n\r\n columnsChange = output<GridColumn<Data>[]>();\r\n\r\n protected state = signal<GridColumn<Data>[]>([]);\r\n protected searchQuery = signal('');\r\n protected draggingKey = signal<string | null>(null);\r\n protected opened = signal(false);\r\n\r\n private root = viewChild<ElementRef<HTMLDivElement>>('root');\r\n\r\n protected filteredColumns = computed(() => {\r\n const query = this.searchQuery().trim().toLowerCase();\r\n\r\n if (!query) {\r\n return this.state();\r\n }\r\n\r\n return this.state().filter((column) => {\r\n const key = String(column.key).toLowerCase();\r\n const header = String(column.header || '').toLowerCase();\r\n\r\n return key.includes(query) || header.includes(query);\r\n });\r\n });\r\n\r\n protected visibleColumnsCount = computed(() => this.state().filter((column) => column.visible !== false).length);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.state.set(cloneColumns(this.columns()));\r\n });\r\n }\r\n\r\n protected pin = (key: string): GridColumnPin => resolvePinState(this.state(), key);\r\n\r\n protected toggleOpen(): void {\r\n this.opened.update((current) => !current);\r\n }\r\n\r\n protected onDocumentMouseDown(target: EventTarget | null): void {\r\n if (!this.opened()) {\r\n return;\r\n }\r\n\r\n const root = this.root()?.nativeElement;\r\n\r\n if (root && target instanceof Node && !root.contains(target)) {\r\n this.opened.set(false);\r\n }\r\n }\r\n\r\n protected onSearch(event: Event): void {\r\n const target = event.target as HTMLInputElement | null;\r\n\r\n this.searchQuery.set(target?.value ?? '');\r\n }\r\n\r\n protected canHideColumn(key: string): boolean {\r\n const list = this.state();\r\n const column = list.find((item) => item.key === key);\r\n\r\n if (!column || !this.allowVisibility() || column.disabled) {\r\n return false;\r\n }\r\n\r\n if (column.visible === false) {\r\n return true;\r\n }\r\n\r\n return this.visibleColumnsCount() > 1;\r\n }\r\n\r\n protected onVisibleChange(key: string): void {\r\n if (!this.allowVisibility()) {\r\n return;\r\n }\r\n\r\n const column = this.findColumn(key);\r\n\r\n if (!column || column.disabled) {\r\n return;\r\n }\r\n\r\n const nextVisible = column.visible === false;\r\n\r\n this.commit(setColumnVisibility(this.state(), key, nextVisible));\r\n }\r\n\r\n protected onPin(key: string, pin: GridColumnPin): void {\r\n if (!this.allowPin()) {\r\n return;\r\n }\r\n\r\n const column = this.findColumn(key);\r\n\r\n if (!column || column.disabled) {\r\n return;\r\n }\r\n\r\n this.commit(setColumnPin(this.state(), key, pin));\r\n }\r\n\r\n protected move(key: string, delta: number): void {\r\n if (!this.allowReorder()) {\r\n return;\r\n }\r\n\r\n const sourceColumn = this.findColumn(key);\r\n\r\n if (!sourceColumn || sourceColumn.disabled) {\r\n return;\r\n }\r\n\r\n const list = this.filteredColumns();\r\n const index = list.findIndex((column) => column.key === key);\r\n\r\n if (index < 0) {\r\n return;\r\n }\r\n\r\n const target = list[index + delta];\r\n\r\n if (!target || target.disabled) {\r\n return;\r\n }\r\n\r\n this.reorderByKey(key, target.key);\r\n }\r\n\r\n protected showAll(): void {\r\n if (!this.allowVisibility()) {\r\n return;\r\n }\r\n\r\n this.commit(this.state().map((column) => ({ ...column, visible: true })));\r\n }\r\n\r\n protected hideOptional(): void {\r\n if (!this.allowVisibility()) {\r\n return;\r\n }\r\n\r\n const visible = this.state().filter((column) => column.visible !== false);\r\n\r\n if (visible.length <= 1) {\r\n return;\r\n }\r\n\r\n const fallback = visible.find((column) => !column.disabled) ?? visible[0];\r\n\r\n this.commit(\r\n this.state().map((column) => ({\r\n ...column,\r\n visible: column.disabled ? true : column.key === fallback.key,\r\n })),\r\n );\r\n }\r\n\r\n protected onDragStart(event: DragEvent, key: string): void {\r\n if (!this.allowReorder()) {\r\n return;\r\n }\r\n\r\n const column = this.findColumn(key);\r\n\r\n if (!column || column.disabled) {\r\n return;\r\n }\r\n\r\n this.draggingKey.set(key);\r\n\r\n if (event.dataTransfer) {\r\n event.dataTransfer.effectAllowed = 'move';\r\n event.dataTransfer.setData('text/plain', key);\r\n }\r\n }\r\n\r\n protected onDragOver(event: DragEvent): void {\r\n if (!this.allowReorder()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n\r\n protected onDrop(event: DragEvent, targetKey: string): void {\r\n if (!this.allowReorder()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const target = this.findColumn(targetKey);\r\n\r\n if (!target || target.disabled) {\r\n this.draggingKey.set(null);\r\n\r\n return;\r\n }\r\n\r\n const source = this.draggingKey() || event.dataTransfer?.getData('text/plain') || null;\r\n\r\n this.draggingKey.set(null);\r\n\r\n if (!source || source === targetKey) {\r\n return;\r\n }\r\n\r\n this.reorderByKey(source, targetKey);\r\n }\r\n\r\n private reorderByKey(sourceKey: string, targetKey: string): void {\r\n const list = this.state();\r\n const from = list.findIndex((column) => column.key === sourceKey);\r\n const to = list.findIndex((column) => column.key === targetKey);\r\n\r\n if (from < 0 || to < 0) {\r\n return;\r\n }\r\n\r\n this.commit(moveColumn(list, from, to));\r\n }\r\n\r\n private findColumn(key: string): GridColumn<Data> | undefined {\r\n return this.state().find((column) => column.key === key);\r\n }\r\n\r\n private commit(next: GridColumn<Data>[]): void {\r\n this.state.set(next);\r\n this.columnsChange.emit(cloneColumns(next));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid-paginator.mjs","sources":["../../../../libs/data-grid/paginator/src/directives/paginator.directive.ts","../../../../libs/data-grid/paginator/src/data-grid.paginator.ts","../../../../libs/data-grid/paginator/src/reforgium-data-grid-paginator.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\r\nimport { DataGridPaginatorEdgeTemplateContext, DataGridPaginatorPageTemplateContext } from '../data-grid.models';\r\n\r\n@Directive({\r\n selector: 'ng-template[reDataGridPaginatorFirst]',\r\n})\r\nexport class DataGridPaginatorFirstDirective {\r\n tpl = inject(TemplateRef<DataGridPaginatorEdgeTemplateContext>);\r\n}\r\n\r\n@Directive({\r\n selector: 'ng-template[reDataGridPaginatorLast]',\r\n})\r\nexport class DataGridPaginatorLastDirective {\r\n tpl = inject(TemplateRef<DataGridPaginatorEdgeTemplateContext>);\r\n}\r\n\r\n@Directive({\r\n selector: 'ng-template[reDataGridPaginatorPage]',\r\n})\r\nexport class DataGridPaginatorPageDirective {\r\n tpl = inject(TemplateRef<DataGridPaginatorPageTemplateContext>);\r\n}\r\n","// noinspection CssUnresolvedCustomProperty\r\n\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { booleanAttribute, Component, computed, contentChildren, input, numberAttribute, output } from '@angular/core';\r\nimport { DataGridDropdown, DataGridDropdownOption } from '@reforgium/data-grid/ui';\r\n\r\nimport {\r\n DataGridPaginatorFirstDirective,\r\n DataGridPaginatorLastDirective,\r\n DataGridPaginatorPageDirective,\r\n} from './directives/paginator.directive';\r\n\r\n@Component({\r\n selector: 're-data-grid-paginator',\r\n imports: [NgTemplateOutlet, DataGridDropdown],\r\n template: `\r\n @let total = totalPages();\r\n @let perPageOptions = normalizedPageSizeOptions();\r\n\r\n @if (showPerPage() && perPageOptions.length) {\r\n <div class=\"re-paginator-per-page\">\r\n <span class=\"re-paginator-per-page-label\">{{ perPageLabel() }}</span>\r\n\r\n <re-data-grid-dropdown\r\n [options]=\"perPageOptions\"\r\n [value]=\"pageSize()\"\r\n [placeholder]=\"''\"\r\n (selectValue)=\"onPageSizeChange($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n @if (showFirstLast() && total > 1) {\r\n @let firstDisabled = current() <= 0;\r\n\r\n <button class=\"re-paginator-edge re-paginator-edge--first\" [disabled]=\"firstDisabled\" (click)=\"goToPage(0)\">\r\n @if (firstTpl()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"firstTpl()!.tpl\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 0, current: current(), total, disabled: firstDisabled }\"\r\n />\r\n } @else {\r\n {{ firstLabel() }}\r\n }\r\n </button>\r\n }\r\n\r\n @for (page of pages(); track $index) {\r\n @if (page === -1) {\r\n <span class=\"re-paginator-gap\">...</span>\r\n } @else {\r\n <button\r\n class=\"re-paginator-page\"\r\n [class.re-paginator-page--active]=\"page === current()\"\r\n (click)=\"goToPage(page)\"\r\n >\r\n @if (pageTpl()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"pageTpl()!.tpl\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: page,\r\n page,\r\n label: page + 1,\r\n current: current(),\r\n total,\r\n active: page === current(),\r\n }\"\r\n />\r\n } @else {\r\n {{ page + 1 }}\r\n }\r\n </button>\r\n }\r\n }\r\n\r\n @if (showFirstLast() && total > 1) {\r\n @let lastPage = total - 1;\r\n @let lastDisabled = current() >= lastPage;\r\n\r\n <button class=\"re-paginator-edge re-paginator-edge--last\" [disabled]=\"lastDisabled\" (click)=\"goToPage(lastPage)\">\r\n @if (lastTpl()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lastTpl()!.tpl\"\r\n [ngTemplateOutletContext]=\"{ $implicit: lastPage, current: current(), total, disabled: lastDisabled }\"\r\n />\r\n } @else {\r\n {{ lastLabel() }}\r\n }\r\n </button>\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n --re-data-grid-paginator-gap: 0.5rem;\r\n\r\n --re-data-grid-paginator-page-size: 1.75rem;\r\n --re-data-grid-paginator-page-border: 1px solid var(--re-data-grid-paginator-separator-color, #e2e8f0);\r\n --re-data-grid-paginator-page-separator-color: var(--re-data-grid-separator-color, --border-color);\r\n --re-data-grid-paginator-page-rounded: var(--re-data-grid-rounded, --radius-md);\r\n --re-data-grid-paginator-page-surface: var(--re-data-grid-surface, white);\r\n --re-data-grid-paginator-page-color: var(--text-primary, #1e293b);\r\n --re-data-grid-paginator-page-font-size: 0.875rem;\r\n\r\n --re-data-grid-paginator-page-active-surface: var(--re-data-grid-active, #3b82f6);\r\n --re-data-grid-paginator-page-active-color: white;\r\n --re-data-grid-paginator-page-hover-surface: var(--re-data-grid-active, #3b82f6);\r\n --re-data-grid-paginator-page-hover-color: white;\r\n\r\n --re-data-grid-paginator-edge-min-width: 2.5rem;\r\n --re-data-grid-paginator-edge-height: var(--re-data-grid-paginator-page-size);\r\n --re-data-grid-paginator-edge-paddings: 0 0.625rem;\r\n --re-data-grid-paginator-edge-border: var(--re-data-grid-paginator-page-border);\r\n --re-data-grid-paginator-edge-rounded: var(--re-data-grid-paginator-page-rounded);\r\n --re-data-grid-paginator-edge-surface: var(--re-data-grid-paginator-page-surface);\r\n --re-data-grid-paginator-edge-color: var(--re-data-grid-paginator-page-color);\r\n --re-data-grid-paginator-edge-font-size: var(--re-data-grid-paginator-page-font-size);\r\n --re-data-grid-paginator-edge-hover-surface: var(--re-data-grid-paginator-page-hover-surface);\r\n --re-data-grid-paginator-edge-hover-color: var(--re-data-grid-paginator-page-hover-color);\r\n --re-data-grid-paginator-edge-disabled-opacity: 0.5;\r\n\r\n --re-data-grid-paginator-per-page-gap: 0.5rem;\r\n --re-data-grid-paginator-per-page-label-size: 0.8125rem;\r\n --re-data-grid-paginator-per-page-label-color: var(--re-data-grid-paginator-page-color);\r\n\r\n re-data-grid-dropdown {\r\n --re-data-grid-dropdown-width: 4rem;\r\n }\r\n\r\n display: flex;\r\n align-items: center;\r\n gap: var(--re-data-grid-paginator-gap);\r\n flex-wrap: wrap;\r\n }\r\n\r\n .re-paginator-per-page {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--re-data-grid-paginator-per-page-gap);\r\n margin-right: auto;\r\n }\r\n\r\n .re-paginator-per-page-label {\r\n font-size: var(--re-data-grid-paginator-per-page-label-size);\r\n color: var(--re-data-grid-paginator-per-page-label-color);\r\n }\r\n\r\n .re-paginator-page {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: var(--re-data-grid-paginator-page-size);\r\n height: var(--re-data-grid-paginator-page-size);\r\n border-radius: var(--re-data-grid-paginator-page-rounded);\r\n border: var(--re-data-grid-paginator-page-border);\r\n font-size: var(--re-data-grid-paginator-page-font-size);\r\n background: var(--re-data-grid-paginator-page-surface);\r\n color: var(--re-data-grid-paginator-page-color);\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n }\r\n\r\n .re-paginator-edge {\r\n display: inline-flex;\r\n justify-content: center;\r\n align-items: center;\r\n min-width: var(--re-data-grid-paginator-edge-min-width);\r\n height: var(--re-data-grid-paginator-edge-height);\r\n padding: var(--re-data-grid-paginator-edge-paddings);\r\n border-radius: var(--re-data-grid-paginator-edge-rounded);\r\n border: var(--re-data-grid-paginator-edge-border);\r\n font-size: var(--re-data-grid-paginator-edge-font-size);\r\n background: var(--re-data-grid-paginator-edge-surface);\r\n color: var(--re-data-grid-paginator-edge-color);\r\n cursor: pointer;\r\n white-space: nowrap;\r\n transition: all 0.2s;\r\n }\r\n\r\n .re-paginator-edge:hover:not(:disabled) {\r\n background: var(--re-data-grid-paginator-edge-hover-surface);\r\n color: var(--re-data-grid-paginator-edge-hover-color);\r\n }\r\n\r\n .re-paginator-edge:disabled {\r\n opacity: var(--re-data-grid-paginator-edge-disabled-opacity);\r\n cursor: default;\r\n }\r\n\r\n .re-paginator-page:hover:not(.re-paginator-page--active) {\r\n background: var(--re-data-grid-paginator-page-hover-surface);\r\n color: var(--re-data-grid-paginator-page-hover-color);\r\n }\r\n\r\n .re-paginator-page--active {\r\n border-color: var(--re-data-grid-paginator-active-surface);\r\n background: var(--re-data-grid-paginator-page-active-surface);\r\n color: var(--re-data-grid-paginator-page-active-color);\r\n }\r\n\r\n .re-paginator-gap {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: var(--re-data-grid-paginator-page-paddings);\r\n color: var(--re-data-grid-paginator-page-color);\r\n }\r\n `,\r\n})\r\nexport class DataGridPaginator {\r\n current = input<number, number | string | undefined>(0, { transform: numberAttribute });\r\n totalElements = input<number, number | string | undefined>(0, { transform: numberAttribute });\r\n pageSize = input<number, number | string | undefined>(0, { transform: numberAttribute });\r\n maxShowPages = input<number, number | string | undefined>(7, { transform: numberAttribute });\r\n\r\n showFirstLast = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n firstLabel = input('First');\r\n lastLabel = input('Last');\r\n\r\n showPerPage = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n perPageLabel = input('Items per page:');\r\n pageSizeOptions = input<number[]>([10, 20, 50, 100]);\r\n\r\n pageChange = output<number>();\r\n pageSizeChange = output<number>();\r\n\r\n private firstSlotRefs = contentChildren(DataGridPaginatorFirstDirective);\r\n private lastSlotRefs = contentChildren(DataGridPaginatorLastDirective);\r\n private pageSlotRefs = contentChildren(DataGridPaginatorPageDirective);\r\n\r\n protected firstTpl = computed(() => this.firstSlotRefs()?.at(0));\r\n protected lastTpl = computed(() => this.lastSlotRefs()?.at(0));\r\n protected pageTpl = computed(() => this.pageSlotRefs()?.at(0));\r\n protected normalizedPageSizeOptions = computed<DataGridDropdownOption<number>[]>(() => {\r\n const uniq = new Set(\r\n this.pageSizeOptions()\r\n .map((value) => Number(value))\r\n .filter((value) => Number.isFinite(value) && value > 0),\r\n );\r\n\r\n if (!uniq.has(this.pageSize())) {\r\n uniq.add(this.pageSize());\r\n }\r\n\r\n return [...uniq].sort((a, b) => a - b).map((value) => ({ label: `${value}`, value }));\r\n });\r\n\r\n totalPages = computed(() => {\r\n const size = this.pageSize();\r\n\r\n return size > 0 ? Math.ceil(this.totalElements() / size) : 0;\r\n });\r\n\r\n pages = computed(() => {\r\n const current = this.current();\r\n const total = this.totalPages();\r\n const max = this.maxShowPages();\r\n\r\n if (total <= max) {\r\n return Array.from({ length: total }, (_, i) => i);\r\n }\r\n\r\n const pages: number[] = [];\r\n const sidePages = Math.floor((max - 3) / 2);\r\n\r\n pages.push(0);\r\n\r\n let start = Math.max(1, current - sidePages);\r\n let end = Math.min(total - 2, current + sidePages);\r\n\r\n if (current <= sidePages + 1) {\r\n end = max - 3;\r\n } else if (current >= total - sidePages - 2) {\r\n start = total - max + 2;\r\n }\r\n\r\n if (start > 1) {\r\n pages.push(-1);\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n if (end < total - 2) {\r\n pages.push(-1);\r\n }\r\n\r\n pages.push(total - 1);\r\n\r\n return pages;\r\n });\r\n\r\n protected goToPage(page: number): void {\r\n if (!Number.isInteger(page)) {\r\n return;\r\n }\r\n\r\n const total = this.totalPages();\r\n\r\n if (page < 0 || page >= total || page === this.current()) {\r\n return;\r\n }\r\n\r\n this.pageChange.emit(page);\r\n }\r\n\r\n protected onPageSizeChange(value: string | number): void {\r\n const typedValue = Number(value);\r\n\r\n if (!Number.isFinite(typedValue) || typedValue <= 0 || value === this.pageSize()) {\r\n return;\r\n }\r\n\r\n this.pageSizeChange.emit(typedValue);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid-ui.mjs","sources":["../../../../libs/data-grid/ui/src/dropdown/data-grid-dropdown.component.ts","../../../../libs/data-grid/ui/src/reforgium-data-grid-ui.ts"],"sourcesContent":["// noinspection CssUnresolvedCustomProperty\r\n\r\nimport { NgClass } from '@angular/common';\r\nimport { Component, computed, ElementRef, input, output, signal, viewChild } from '@angular/core';\r\nimport { DataGridDropdownOption, DataGridDropdownValue } from './data-grid-dropdown.models';\r\n\r\n@Component({\r\n selector: 're-data-grid-dropdown',\r\n standalone: true,\r\n imports: [NgClass],\r\n template: `\r\n <div #root class=\"re-dg-dd\" [class.re-dg-dd--disabled]=\"disabled()\">\r\n <button\r\n class=\"re-dg-dd-trigger\"\r\n type=\"button\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-expanded]=\"opened()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n (click)=\"toggleOpen()\"\r\n >\r\n <span class=\"re-dg-dd-value\">{{ selectedLabel() }}</span>\r\n <span class=\"re-dg-dd-chevron\" [class.re-dg-dd-chevron--opened]=\"opened()\">▾</span>\r\n </button>\r\n\r\n @if (opened()) {\r\n <div class=\"re-dg-dd-menu\" role=\"listbox\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n class=\"re-dg-dd-option\"\r\n [ngClass]=\"{\r\n 're-dg-dd-option--active': option.value === value(),\r\n 're-dg-dd-option--disabled': !!option.disabled,\r\n }\"\r\n type=\"button\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"option.value === value()\"\r\n [disabled]=\"option.disabled\"\r\n (click)=\"select(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n `,\r\n styles: `\r\n :host {\r\n --re-data-grid-dropdown-width: 120px;\r\n --re-data-grid-dropdown-height: 2rem;\r\n --re-data-grid-dropdown-radius: 0.375rem;\r\n --re-data-grid-dropdown-border: 1px solid var(--border-color, --re-data-grid-paginator-separator-color, #e2e8f0);\r\n --re-data-grid-dropdown-surface: var(--surface-neutral, --re-data-grid-surface);\r\n --re-data-grid-dropdown-color: var(--text-primary, #1e293b);\r\n --re-data-grid-dropdown-menu-z-index: 30;\r\n --re-data-grid-dropdown-hover-surface: rgba(15, 23, 42, 0.05);\r\n --re-data-grid-dropdown-active-surface: rgba(15, 23, 42, 0.08);\r\n --re-data-grid-dropdown-shadow: 0 8px 20px rgba(0, 0, 0, 0.12);\r\n\r\n display: inline-flex;\r\n position: relative;\r\n min-width: var(--re-data-grid-dropdown-width);\r\n color: var(--re-data-grid-dropdown-color);\r\n }\r\n\r\n .re-dg-dd {\r\n position: relative;\r\n width: 100%;\r\n }\r\n\r\n .re-dg-dd-trigger {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 100%;\r\n height: var(--re-data-grid-dropdown-height);\r\n border-radius: var(--re-data-grid-dropdown-radius);\r\n border: var(--re-data-grid-dropdown-border);\r\n background: var(--re-data-grid-dropdown-surface);\r\n color: inherit;\r\n padding: 0 0.625rem;\r\n cursor: pointer;\r\n }\r\n\r\n .re-dg-dd-menu {\r\n position: absolute;\r\n top: calc(100% + 0.25rem);\r\n left: 0;\r\n z-index: var(--re-data-grid-dropdown-menu-z-index);\r\n width: 100%;\r\n border-radius: var(--re-data-grid-dropdown-radius);\r\n border: var(--re-data-grid-dropdown-border);\r\n background: var(--re-data-grid-dropdown-surface);\r\n box-shadow: var(--re-data-grid-dropdown-shadow);\r\n overflow: hidden;\r\n }\r\n\r\n .re-dg-dd-option {\r\n width: 100%;\r\n height: var(--re-data-grid-dropdown-height);\r\n border: 0;\r\n background: transparent;\r\n color: inherit;\r\n text-align: left;\r\n padding: 0 0.625rem;\r\n cursor: pointer;\r\n }\r\n\r\n .re-dg-dd-option:hover:not(.re-dg-dd-option--disabled) {\r\n background: var(--re-data-grid-dropdown-hover-surface);\r\n }\r\n\r\n .re-dg-dd-option--active {\r\n background: var(--re-data-grid-dropdown-active-surface);\r\n font-weight: 600;\r\n }\r\n\r\n .re-dg-dd-option--disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n\r\n .re-dg-dd-chevron {\r\n transition: transform 0.2s;\r\n }\r\n\r\n .re-dg-dd-chevron--opened {\r\n transform: rotate(180deg);\r\n }\r\n\r\n .re-dg-dd--disabled .re-dg-dd-trigger {\r\n opacity: 0.65;\r\n cursor: default;\r\n }\r\n `,\r\n host: {\r\n 'document:mousedown': 'onDocumentMouseDown($event.target)',\r\n },\r\n})\r\nexport class DataGridDropdown<T extends DataGridDropdownValue = DataGridDropdownValue> {\r\n options = input<DataGridDropdownOption<T>[]>([]);\r\n value = input<T | null>(null);\r\n disabled = input(false);\r\n placeholder = input('Select');\r\n\r\n selectValue = output<T>();\r\n\r\n private root = viewChild<ElementRef<HTMLDivElement>>('root');\r\n\r\n protected opened = signal(false);\r\n protected selectedLabel = computed(() => {\r\n const selected = this.options().find((option) => option.value === this.value());\r\n\r\n return selected?.label ?? this.placeholder();\r\n });\r\n\r\n protected toggleOpen(): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n this.opened.update((current) => !current);\r\n }\r\n\r\n protected select(value: T): void {\r\n if (value !== this.value()) {\r\n this.selectValue.emit(value);\r\n }\r\n\r\n this.opened.set(false);\r\n }\r\n\r\n protected onDocumentMouseDown(target: EventTarget | null): void {\r\n if (!this.opened()) {\r\n return;\r\n }\r\n\r\n const root = this.root()?.nativeElement;\r\n\r\n if (root && target instanceof Node && !root.contains(target)) {\r\n this.opened.set(false);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid.mjs","sources":["../../../../libs/data-grid/src/directives/type-cell.directive.ts","../../../../libs/data-grid/src/directives/data-cell.directive.ts","../../../../libs/data-grid/src/directives/header.directive.ts","../../../../libs/data-grid/src/directives/row.directive.ts","../../../../libs/data-grid/src/directives/declarative-template.directive.ts","../../../../libs/data-grid/src/directives/declarative-column.directive.ts","../../../../libs/data-grid/src/directives/placeholders.directive.ts","../../../../libs/data-grid/src/directives/sticky-row.directive.ts","../../../../libs/data-grid/src/directives/icons.directive.ts","../../../../libs/data-grid/src/providers/data-grid-config.provider.ts","../../../../libs/data-grid/src/data-grid.constants.ts","../../../../libs/data-grid/src/helpers/layout-columns/layout-columns.helper.ts","../../../../libs/data-grid/src/helpers/multi-header/multi-header.helper.ts","../../../../libs/data-grid/src/helpers/scrollbar/scrollbar.helper.ts","../../../../libs/data-grid/src/helpers/scrollbar/scroll-direction.helper.ts","../../../../libs/data-grid/src/helpers/sticky/sticky-split.helper.ts","../../../../libs/data-grid/src/data-grid.vm.ts","../../../../libs/data-grid/src/data-grid-cell.component.ts","../../../../libs/data-grid/src/helpers/declarative-columns/declarative-columns.helper.ts","../../../../libs/data-grid/src/helpers/selection/selection.helper.ts","../../../../libs/data-grid/src/icons/checkbox.icon.ts","../../../../libs/data-grid/src/icons/expand.icon.ts","../../../../libs/data-grid/src/icons/sort.icon.ts","../../../../libs/data-grid/src/data-grid.component.ts","../../../../libs/data-grid/src/data-grid.component.html","../../../../libs/data-grid/src/reforgium-data-grid.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\r\n\r\nimport { RenderTemplateData } from '../data-grid.models.columns';\r\n\r\n/**\r\n * Directive for defining type-specific cell templates in a data grid.\r\n *\r\n * This directive allows developers to create custom cell renderers for specific data types\r\n * within the data grid component. It binds a template to a type identifier, enabling\r\n * the grid to dynamically select and render the appropriate template based on a column type.\r\n *\r\n * Example usage:\r\n * ```html\r\n * <ng-template reDataGridTypeCell=\"date\" let-data>\r\n * {{ data.value | date }}\r\n * </ng-template>\r\n * ```\r\n *\r\n * The directive captures the template reference and makes it available to the parent\r\n * data grid component for rendering cells of the specified type.\r\n */\r\n@Directive({ selector: 'ng-template[reDataGridTypeCell]' })\r\nexport class DataGridTypeCellTemplateDirective {\r\n /**\r\n * The type identifier for this cell template.\r\n *\r\n * Specifies which data type this template should be used for.\r\n * When the data grid encounters a column with a matching type,\r\n * it will use this template to render cells in that column.\r\n *\r\n * @default ''\r\n */\r\n type = input<string>('', { alias: 'reDataGridTypeCell' });\r\n\r\n /**\r\n * Reference to the template defined in the directive.\r\n *\r\n * This template will be rendered for each cell of the matching type,\r\n * receiving `RenderTemplateData` as its context with cell-specific information.\r\n */\r\n public tpl = inject(TemplateRef<RenderTemplateData>);\r\n}\r\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\r\n\r\nimport { RenderTemplateData } from '../data-grid.models.columns';\r\n\r\n@Directive({ selector: 'ng-template[reDataGridCell]' })\r\nexport class DataGridCellTemplateDirective {\r\n key = input<string>('', { alias: 'reDataGridCell' });\r\n\r\n /**\r\n * The injected template reference containing the custom cell template.\r\n * The template context is of the type `DataGridCellTemplateDirective`.\r\n */\r\n public tpl = inject(TemplateRef<RenderTemplateData>);\r\n}\r\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\r\n\r\nimport { HeaderTemplateData } from '../data-grid.models.columns';\r\n\r\n/**\r\n * Directive for defining custom header templates in data grid columns.\r\n *\r\n * This directive allows you to specify a custom template for rendering column headers\r\n * in the data grid. The template is associated with a column key and receives\r\n * header-specific context data.\r\n *\r\n * @example\r\n * ```html\r\n * <ng-template reDataGridHeader=\"username\" let-header>\r\n * <div class=\"custom-header\">{{ header.label }}</div>\r\n * </ng-template>\r\n * ```\r\n */\r\n@Directive({ selector: 'ng-template[reDataGridHeader]' })\r\nexport class DataGridHeaderTemplateDirective {\r\n /**\r\n * The column key this header template is associated with.\r\n * Uses the `reDataGridHeader` directive attribute as an alias.\r\n * Defaults to an empty string if not provided.\r\n */\r\n key = input<string>('', { alias: 'reDataGridHeader' });\r\n\r\n /**\r\n * The injected template reference containing the custom header template.\r\n * The template context is of the type `HeaderTemplateData`.\r\n */\r\n public tpl = inject(TemplateRef<HeaderTemplateData>);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\nimport type { GridColumn } from '../data-grid.models.columns';\r\nimport { AnyDict } from '../utils.models';\r\n\r\nexport type DataGridRowTemplateContext<Data extends AnyDict> = {\r\n $implicit: Data;\r\n index: number;\r\n columns: GridColumn<Data>[];\r\n rowHeight: number;\r\n isSticky: boolean;\r\n};\r\n\r\n/**\r\n * Directive for providing a custom template for data grid rows.\r\n *\r\n * Used as a structural directive on `<ng-template>` elements within data grid components.\r\n * The template receives row data, index, columns, and layout helpers.\r\n *\r\n * Example:\r\n * ```html\r\n * <ng-template reDataGridRow let-row let-index=\"index\">\r\n * <div class=\"my-row\">{{ index + 1 }} - {{ row.name }}</div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * Template context:\r\n * - `$implicit: Data` — row data\r\n * - `index: number` — row index\r\n * - `columns: GridColumn<Data>[]` — visible columns\r\n * - `rowHeight: number` — row height in pixels\r\n * - `isSticky: boolean` — sticky row flag\r\n */\r\n@Directive({ selector: 'ng-template[reDataGridRow]' })\r\nexport class DataGridRowDirective<Data extends AnyDict> {\r\n public tpl = inject(TemplateRef<DataGridRowTemplateContext<Data>>);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\nimport { HeaderTemplateData, RenderTemplateData } from '../data-grid.models.columns';\r\n\r\n@Directive({ selector: 'ng-template[reHeader]' })\r\nexport class DataGridDeclarativeHeaderDirective {\r\n tpl = inject(TemplateRef<HeaderTemplateData>);\r\n}\r\n\r\n@Directive({ selector: 'ng-template[reCell]' })\r\nexport class DataGridDeclarativeCellDirective {\r\n tpl = inject(TemplateRef<RenderTemplateData>);\r\n}\r\n","import { booleanAttribute, Component, contentChild, input, numberAttribute } from '@angular/core';\r\n\r\nimport {\n DeclarativeColumnDef,\n GridCellAlign,\n GridCellRenderer,\n GridCellRendererType,\n GridStickySide,\n GridColumnTooltip,\n} from '../data-grid.models.columns';\nimport { AnyDict, AnyType, DataKey } from '../utils.models';\r\nimport { DataGridDeclarativeCellDirective, DataGridDeclarativeHeaderDirective } from './declarative-template.directive';\r\n\r\n@Component({\r\n selector: 're-dg-column',\r\n template: '<ng-content />',\r\n})\r\nexport class DataGridDeclarativeColumn<Data extends AnyDict = AnyDict> {\r\n key = input.required<DataKey<Data>>();\r\n header = input<string | undefined>(undefined);\r\n align = input<GridCellAlign | undefined>(undefined);\r\n sortKey = input<string | undefined>(undefined);\r\n sticky = input<GridStickySide | true>();\r\n expandBy = input<DataKey<Data> | undefined>(undefined);\r\n disabled = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n visible = input<boolean, boolean | string | undefined>(true, { transform: booleanAttribute });\r\n width = input<number | undefined, number | string | undefined>(undefined, { transform: toOptionalNumber });\r\n minWidth = input<number | undefined, number | string | undefined>(undefined, { transform: toOptionalNumber });\r\n maxWidth = input<number | undefined, number | string | undefined>(undefined, { transform: toOptionalNumber });\r\n flex = input<number | undefined, number | string | undefined>(undefined, { transform: toOptionalNumber });\r\n type = input<GridCellRendererType | undefined>(undefined);\r\n typeParams = input<AnyType>(undefined);\r\n defaultValue = input<AnyType>(undefined);\n value = input<GridCellRenderer<Data> | undefined>(undefined);\n track = input<((row: Data) => string) | undefined>(undefined);\n tooltip = input<GridColumnTooltip<Data> | undefined>(undefined);\n\r\n private headerTplRef = contentChild(DataGridDeclarativeHeaderDirective);\r\n private cellTplRef = contentChild(DataGridDeclarativeCellDirective);\r\n\r\n toDeclarativeColumn(): DeclarativeColumnDef<Data> {\r\n return {\r\n key: this.key(),\r\n header: this.header(),\r\n headerTemplate: this.headerTplRef()?.tpl,\r\n cellTemplate: this.cellTplRef()?.tpl,\r\n align: this.align(),\r\n sortKey: this.sortKey(),\r\n sticky: this.sticky(),\r\n expandBy: this.expandBy(),\r\n disabled: this.disabled(),\r\n visible: this.visible(),\r\n width: this.width(),\r\n minWidth: this.minWidth(),\r\n maxWidth: this.maxWidth(),\r\n flex: this.flex(),\r\n type: this.type(),\r\n typeParams: this.typeParams(),\n defaultValue: this.defaultValue(),\n value: this.value(),\n track: this.track(),\n tooltip: this.tooltip(),\n };\n }\n}\n\r\nfunction toOptionalNumber(value: number | string | undefined): number | undefined {\r\n if (value === null || value === undefined || value === '') {\r\n return undefined;\r\n }\r\n\r\n const number = numberAttribute(value);\r\n\r\n return Number.isNaN(number) ? undefined : number;\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * Directive for providing a custom template to display when the data grid has no data.\r\n *\r\n * Used as a structural directive on `<ng-template>` elements within data grid components.\r\n * The template receives a boolean context value indicating the empty state.\r\n *\r\n * Example:\r\n * ```html\r\n * <ng-template reDataGridEmpty let-isEmpty>\r\n * <div *ngIf=\"isEmpty\">No data available</div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * Template context:\r\n * - `$implicit: boolean` — indicates whether the grid is in an empty state\r\n */\r\n@Directive({ selector: 'ng-template[reDataGridEmpty]' })\r\nexport class DataGridCellEmptyDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n\r\n/**\r\n * Directive for providing a custom template to display when the data grid is loading data.\r\n *\r\n * Used as a structural directive on `<ng-template>` elements within data grid components.\r\n * The template receives a boolean context value indicating the loading state.\r\n *\r\n * Example:\r\n * ```html\r\n * <ng-template reDataGridLoading let-isLoading>\r\n * <div *ngIf=\"isLoading\">Loading...</div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * Template context:\r\n * - `$implicit: boolean` — indicates whether the grid is in loading state\r\n */\r\n@Directive({ selector: 'ng-template[reDataGridLoading]' })\r\nexport class DataGridCellLoadingDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\nexport type DataGridStickyRowTemplateContext<Data> = {\r\n $implicit: Data;\r\n index: number;\r\n};\r\n\r\n/**\r\n * Directive for providing a custom template for sticky rows.\r\n *\r\n * Used as a structural directive on `<ng-template>` elements within data grid components.\r\n * The template receives row data and its index.\r\n *\r\n * Example:\r\n * ```html\r\n * <ng-template reDataGridStickyRow let-row let-index=\"index\">\r\n * <div class=\"my-sticky-row\">{{ index }} - {{ row.name }}</div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * Template context:\r\n * - `$implicit: Data` — row data\r\n * - `index: number` — row index\r\n */\r\n@Directive({ selector: 'ng-template[reDataGridStickyRow]' })\r\nexport class DataGridStickyRowDirective<Data> {\r\n public tpl = inject(TemplateRef<DataGridStickyRowTemplateContext<Data>>);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\nimport { GridSortOrder } from '../data-grid.models';\r\n\r\n@Directive({ selector: 'ng-template[reDataGridSortIcon]' })\r\nexport class DataGridSortIconDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: GridSortOrder | undefined }>);\r\n}\r\n\r\n@Directive({ selector: 'ng-template[reDataGridExpanderIcon]' })\r\nexport class DataGridExpanderIconDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n","import { EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nimport { GridPaginationMode, GridSelection } from '../data-grid.models';\n\nexport type DataGridTranslations = {\n emptyState: string;\n itemsPerPageLabel: string;\n nextPageLabel: string;\n prevPageLabel: string;\n};\n\n/**\n * Global default configuration for all `re-data-grid` instances.\n *\n * Use this shape in `provideDataGridDefaults(...)` to override base behavior\n * (pagination mode, row sizes, buffering, labels, debounce timings, etc.)\n * application-wide or within a scoped injector.\n */\nexport type DataGridConfigProvider = {\n /** Pagination mode for the data grid. */\n mode: GridPaginationMode;\n /** Whether to display an index column with row numbers. */\n hasIndexColumn: boolean;\n /** Row selection configuration, including selection mode and behavior. */\n selection: GridSelection;\n /** Number of items to display per page. */\n pageSize: number;\n /** Height of each data row in pixels. */\n rowHeight: number;\n /** Height of the header row in pixels. */\n headerHeight: number;\n /** Grid height: a number in pixels, 'full' for 100% height, or 'default' for auto-calculated height. */\n height: number | 'full' | 'default';\n /** Number of extra rows to render above and below the visible viewport for smoother scrolling. */\n virtualBuffer: number;\n /** Loading indicator style: 'spinner' shows a loading spinner, 'skeleton' shows skeleton placeholders. */\n loadingMode: 'spinner' | 'skeleton';\n /** Whether pagination starts from page 0 (true) or page 1 (false). */\n pageStartFromZero: boolean;\n /** Text strings for UI labels and messages. */\n translations: DataGridTranslations;\n /** Debounce timings in milliseconds for resize and scroll events to optimize performance. */\n debounce: {\n resize: number;\n scroll: number;\n };\n};\n\nexport const DEFAULT_DATA_GRID_DEFAULTS: DataGridConfigProvider = {\n mode: 'pagination',\n hasIndexColumn: false,\n selection: { mode: 'none' },\n pageSize: 20,\n rowHeight: 40,\n headerHeight: 48,\n height: 'default',\n virtualBuffer: 8,\n loadingMode: 'spinner',\n pageStartFromZero: true,\n translations: {\n emptyState: 'No records found',\n itemsPerPageLabel: 'Items per page:',\n nextPageLabel: 'Next page',\n prevPageLabel: 'Previous page',\n },\n debounce: {\n resize: 100,\n scroll: 50,\n },\n};\n\nexport const DATA_GRID_CONFIG = new InjectionToken<DataGridConfigProvider>('RE_DATA_GRID_DEFAULTS', {\n providedIn: 'root',\n factory: () => DEFAULT_DATA_GRID_DEFAULTS,\n});\n\n/**\n * Provides default configuration for Data Grid, overriding base settings.\n *\n * @param config Partial configuration object to be merged with current settings.\n * @returns EnvironmentProviders for use in application or component configuration.\n */\nexport function provideDataGridDefaults(config: Partial<DataGridConfigProvider>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: DATA_GRID_CONFIG,\n useFactory: () => {\n const parent = inject(DATA_GRID_CONFIG, { optional: true, skipSelf: true });\n const base = parent ?? DEFAULT_DATA_GRID_DEFAULTS;\n\n return {\n ...base,\n ...config,\n selection: config.selection ?? base.selection,\n translations: { ...base.translations, ...config.translations },\n debounce: { ...base.debounce, ...config.debounce },\n };\n },\n },\n ]);\n}\n","// noinspection ES6PreferShortImport\r\nimport { GridColumn } from './data-grid.models.columns';\r\n\r\nexport const GRID_INDEX_COLUMN: GridColumn = {\r\n key: '_index',\r\n type: 'index',\r\n align: 'center',\r\n header: '№',\r\n width: 72,\r\n sticky: 'left',\r\n};\r\n\r\nexport const GRID_CHECKBOX_COLUMN: GridColumn = {\r\n key: '_checkbox',\r\n type: 'checkbox',\r\n align: 'center',\r\n header: 'checkbox',\r\n width: 44,\r\n sticky: 'left',\r\n};\r\n","import { ColumnLike, LayoutResult } from './layout-columns.models';\r\n\r\n/**\r\n * Calculates and distributes column widths within a container based on column configuration.\r\n *\r\n * The function implements a flexible layout algorithm that:\r\n * - Respects fixed-width columns (with `width` property set)\r\n * - Distributes remaining space among auto-sized columns based on their `flex` ratios\r\n * - Enforces `minWidth` and `maxWidth` constraints\r\n * - Uses a \"water-fill\" algorithm to grow columns proportionally\r\n * - Handles rounding errors to ensure total width matches container width\r\n *\r\n * @param columns - Array of column configuration objects with properties\r\n * like `visible`, `width`, `minWidth`, `maxWidth`, `flex`, and `key`\r\n * @param containerWidth - Available width in pixels for all columns\r\n * @param defaultCol - Default minimum width for auto-sized columns without explicit `minWidth`\r\n * @returns Layout result containing computed widths array, total width, and width lookup by column key\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = layoutColumns(\r\n * [\r\n * { key: 'id', width: 50, visible: true },\r\n * { key: 'name', minWidth: 100, flex: 2, visible: true },\r\n * { key: 'age', minWidth: 80, flex: 1, visible: true }\r\n * ],\r\n * 800,\r\n * 100\r\n * );\r\n * // result.widths = [50, 500, 250]\r\n * // result.total = 800\r\n * // result.byKey = { id: 50, name: 500, age: 250 }\r\n * ```\r\n */\r\nexport function layoutColumns(columns: ColumnLike[], containerWidth: number, defaultCol: number): LayoutResult {\r\n const idx = visibleIndexes(columns);\r\n const { fixedIdx, autoIdx } = splitFixed(columns, idx);\r\n\r\n const fixedWidths = computeFixedWidths(columns, fixedIdx);\r\n const baseAuto = computeBaseAuto(columns, autoIdx, defaultCol);\r\n\r\n const sumFixed = sum(fixedWidths);\r\n const sumBase = sum(baseAuto.map((w) => w.width));\r\n const free = Math.max(containerWidth - sumFixed - sumBase, 0);\r\n\r\n const grownAuto = distributeFree(columns, baseAuto, free); // water-fill\r\n const widths = new Array<number>(columns.length).fill(0);\r\n\r\n if (containerWidth <= 0) {\r\n const byKey: Record<string, number> = {};\r\n\r\n for (let i = 0; i < columns.length; i++) {\r\n // noinspection PointlessBooleanExpressionJS\r\n columns[i].visible !== false && (byKey[columns[i].key] = 0);\r\n }\r\n\r\n return { widths, total: 0, byKey };\r\n }\r\n\r\n for (const { index, width } of fixedWidths) {\r\n widths[index] = width;\r\n }\r\n\r\n for (const { index, width } of grownAuto) {\r\n widths[index] = width;\r\n }\r\n\r\n roundAndFix(columns, widths, fixedIdx, autoIdx, containerWidth);\r\n\r\n let total = 0;\r\n const byKey: Record<string, number> = {};\r\n\r\n for (const i of idx) {\r\n total += widths[i];\r\n byKey[columns[i].key] = widths[i];\r\n }\r\n\r\n return { widths, total, byKey };\r\n}\r\n\r\n/**\r\n * Filters and returns indexes of visible columns.\r\n *\r\n * A column is considered visible if its `visible` property is not explicitly set to `false`.\r\n *\r\n * @param cols - Array of column configurations\r\n * @returns Array of indexes for columns that should be displayed\r\n */\r\nfunction visibleIndexes(cols: ColumnLike[]): number[] {\r\n const out: number[] = [];\r\n\r\n for (let i = 0; i < cols.length; i++) {\r\n // noinspection PointlessBooleanExpressionJS\r\n cols[i].visible !== false && out.push(i);\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Splits visible column indexes into fixed-width and auto-sized groups.\r\n *\r\n * Fixed columns have an explicit `width` property defined.\r\n * Auto-sized columns have `width` as `undefined` and will grow to fill available space.\r\n *\r\n * @param cols - Array of column configurations\r\n * @param visibleIdx - Array of visible column indexes\r\n * @returns Object with `fixedIdx` (fixed-width column indexes) and `autoIdx` (auto-sized column indexes)\r\n */\r\nfunction splitFixed(cols: ColumnLike[], visibleIdx: number[]) {\r\n const fixedIdx: number[] = [];\r\n const autoIdx: number[] = [];\r\n\r\n for (const i of visibleIdx) {\r\n cols[i].width === undefined ? autoIdx.push(i) : fixedIdx.push(i);\r\n }\r\n\r\n return { fixedIdx, autoIdx };\r\n}\r\n\r\n/**\r\n * Computes actual widths for fixed-width columns, respecting min/max constraints.\r\n *\r\n * Takes the explicit `width` value and clamps it between `minWidth` and `maxWidth`.\r\n *\r\n * @param cols - Array of column configurations\r\n * @param fixedIdx - Array of fixed-width column indexes\r\n * @returns Array of objects with column index and computed width\r\n */\r\nconst computeFixedWidths = (cols: ColumnLike[], fixedIdx: number[]) =>\r\n fixedIdx.map((index) => {\r\n const col = cols[index];\r\n const width = clamp(col.width!, col.minWidth, col.maxWidth);\r\n\r\n return { index, width };\r\n });\r\n\r\n/**\r\n * Computes base (minimum) widths for auto-sized columns before distribution of free space.\r\n *\r\n * Uses column's `minWidth` if specified, otherwise falls back to the default value.\r\n * The base width is clamped between `minWidth` and `maxWidth` constraints.\r\n *\r\n * @param cols - Array of column configurations\r\n * @param autoIdx - Array of auto-sized column indexes\r\n * @param def - Default minimum width to use when column's `minWidth` is not specified\r\n * @returns Array of objects with column index and base width\r\n */\r\nconst computeBaseAuto = (cols: ColumnLike[], autoIdx: number[], def: number) =>\r\n autoIdx.map((index) => {\r\n const c = cols[index];\r\n const base = clamp(c.minWidth ?? def, c.minWidth, c.maxWidth);\r\n\r\n return { index, width: base };\r\n });\r\n\r\n/**\r\n * Distributes free space among auto-sized columns using a \"water-fill\" algorithm.\r\n *\r\n * The algorithm works iteratively:\r\n * 1. Identifies columns that can still grow (haven't reached `maxWidth`)\r\n * 2. Distributes remaining space proportionally based on each column's `flex` ratio\r\n * 3. Respects `maxWidth` constraints by capping growth\r\n * 4. Repeats until no space remains or no columns can grow further\r\n *\r\n * This ensures that columns with higher `flex` values receive proportionally more space,\r\n * while respecting all width constraints.\r\n *\r\n * @param cols - Array of column configurations\r\n * @param base - Array of column indexes with their base widths before distribution\r\n * @param free - Amount of free space (in pixels) to distribute among columns\r\n * @returns Array of objects with column index and final width after distribution\r\n */\r\nfunction distributeFree(cols: ColumnLike[], base: { index: number; width: number }[], free: number) {\r\n if (free <= 0 || base.length === 0) {\r\n return base;\r\n }\r\n\r\n const widths = base.map((b) => ({ ...b }));\r\n let remaining = free;\r\n\r\n let growable = widths.filter((w) => widthsCanGrow(cols, w.index, w.width)).map((w) => w.index);\r\n\r\n while (remaining > 0 && growable.length > 0) {\r\n const flexSum = growable.reduce((s, i) => s + (cols[i].flex ?? 1), 0) || 1;\r\n let distributed = 0;\r\n\r\n for (const i of growable) {\r\n const rec = widths.find((w) => w.index === i)!;\r\n const cap = (cols[i].maxWidth ?? Infinity) - rec.width;\r\n\r\n if (cap <= 0) {\r\n continue;\r\n }\r\n\r\n const ideal = remaining * ((cols[i].flex ?? 1) / flexSum);\r\n const add = ideal < cap ? ideal : cap;\r\n\r\n if (add > 0) {\r\n rec.width += add;\r\n distributed += add;\r\n }\r\n }\r\n\r\n if (distributed <= 1e-6) {\r\n break;\r\n }\r\n\r\n remaining -= distributed;\r\n\r\n growable = widths.filter((w) => widthsCanGrow(cols, w.index, w.width)).map((w) => w.index);\r\n }\r\n\r\n return widths;\r\n}\r\n\r\n/**\r\n * Checks whether a column can grow beyond its current width.\r\n *\r\n * A column can grow if its current width is less than its `maxWidth` constraint\r\n * (or `Infinity` if no max is specified), with a small epsilon tolerance.\r\n *\r\n * @param cols - Array of column configurations\r\n * @param i - Column index to check\r\n * @param cur - Current width of the column\r\n * @returns `true` if the column can grow, `false` otherwise\r\n */\r\nfunction widthsCanGrow(cols: ColumnLike[], i: number, cur: number) {\r\n const max = cols[i].maxWidth ?? Infinity;\r\n\r\n return cur < max - 1e-6;\r\n}\r\n\r\n/**\r\n * Rounds auto-sized column widths to integers and distributes any remaining pixels to match container width exactly.\r\n *\r\n * This function handles rounding errors that occur when distributing fractional widths:\r\n * 1. Floors all auto-sized column widths to integers\r\n * 2. Calculates how many pixels are needed to reach the exact container width\r\n * 3. Distributes remaining pixels one-by-one to columns (right-to-left) that haven't reached their `maxWidth`\r\n *\r\n * Fixed-width columns are not modified. This ensures the total width matches the container precisely.\r\n *\r\n * @param cols - Array of column configurations\r\n * @param widths - Array of column widths to be modified in place\r\n * @param fixedIdx - Array of fixed-width column indexes (not modified)\r\n * @param autoIdx - Array of auto-sized column indexes (will be rounded and adjusted)\r\n * @param containerWidth - Target total width that must be matched exactly\r\n */\r\nfunction roundAndFix(\r\n cols: ColumnLike[],\r\n widths: number[],\r\n fixedIdx: number[],\r\n autoIdx: number[],\r\n containerWidth: number,\r\n) {\r\n const sumFixed = fixedIdx.reduce((s, i) => s + widths[i], 0);\r\n let sumAuto = 0;\r\n\r\n for (const i of autoIdx) {\r\n widths[i] = Math.floor(widths[i]);\r\n sumAuto += widths[i];\r\n }\r\n\r\n let need = Math.round(Math.max(containerWidth - sumFixed - sumAuto, 0));\r\n\r\n if (need === 0) {\r\n return;\r\n }\r\n\r\n for (let k = autoIdx.length - 1; k >= 0 && need > 0; k--) {\r\n const i = autoIdx[k];\r\n const max = cols[i].maxWidth ?? Infinity;\r\n\r\n if (widths[i] + 1 <= max) {\r\n widths[i] += 1;\r\n need--;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clamps a numeric value between optional minimum and maximum bounds.\r\n *\r\n * If `min` is provided and the value is less than it, returns `min`.\r\n * If `max` is provided and the value is greater than it, returns `max`.\r\n * Otherwise, returns the original value.\r\n *\r\n * @param v - Value to clamp\r\n * @param min - Optional minimum bound\r\n * @param max - Optional maximum bound\r\n * @returns Clamped value\r\n */\r\nfunction clamp(v: number, min?: number, max?: number) {\r\n min != null && v < min && (v = min);\r\n max != null && v > max && (v = max);\r\n\r\n return v;\r\n}\r\n\r\n/**\r\n * Calculates the sum of numeric values or width properties in an array.\r\n *\r\n * Supports two input formats:\r\n * - Array of numbers: sums all numeric values\r\n * - Array of objects with `width` property: sums all `width` values\r\n *\r\n * @param items - Array of numbers or objects with `width` property\r\n * @returns Sum of all values\r\n */\r\nfunction sum(items: { width: number }[] | number[]) {\r\n if (Array.isArray(items) && typeof items[0] === 'number') {\r\n return (items as number[]).reduce((s, x) => s + x, 0);\r\n }\r\n\r\n return (items as { width: number }[]).reduce((s, x) => s + x.width, 0);\r\n}\r\n","// noinspection ES6PreferShortImport\r\n\r\nimport { GridColumn } from '../../data-grid.models.columns';\r\nimport { GridHeaderGroup, NormalizedHeader } from '../../data-grid.models.headers';\r\nimport { AnyDict } from '../../utils.models';\r\n\r\nconst DEFAULT_COLUMN_WIDTH = 140;\r\n\r\ntype HeaderRange<Data extends AnyDict = AnyDict> = {\r\n header: GridHeaderGroup<Data>;\r\n start: number;\r\n end: number;\r\n};\r\n\r\n/**\r\n * Computes and normalizes header groups based on the provided headers and columns.\r\n *\r\n * @param {GridHeaderGroup<Data>[]} headers - An array of header group objects representing the grouping information\r\n * for the grid.\r\n * @param {GridColumn<Data>[]} columns - An array of column definitions describing the columns in the grid.\r\n * @return {NormalizedHeader[]} An array of normalized header objects, where each object contains information about\r\n * the computed header ranges, widths, and keys.\r\n */\r\nexport function computeHeaderGroups<Data extends AnyDict = AnyDict>(\r\n headers: GridHeaderGroup<Data>[] = [],\r\n columns: GridColumn<Data>[] = [],\r\n): NormalizedHeader[] {\r\n if (!columns.length || !headers.length) {\r\n return [];\r\n }\r\n\r\n const keyToIndex = new Map(columns.map((col, index) => [col.key, index] as const));\r\n const columnWidths = columns.map(resolveColumnWidth);\r\n const prefix = buildWidthesPrefixSums(columnWidths);\r\n\r\n const ranges: HeaderRange<Data>[] = [];\r\n const occupied = new Set<number>();\r\n\r\n for (const header of headers) {\r\n const start = keyToIndex.get(header.from);\r\n const resolvedTo = header.to ?? header.from;\r\n const end = keyToIndex.get(resolvedTo);\r\n\r\n if (start === undefined || end === undefined) {\r\n continue;\r\n }\r\n\r\n const rangeStart = Math.min(start, end);\r\n const rangeEnd = Math.max(start, end);\r\n\r\n if (hasOverlap(rangeStart, rangeEnd, occupied)) {\r\n continue;\r\n }\r\n\r\n for (let i = rangeStart; i <= rangeEnd; i++) {\r\n occupied.add(i);\r\n }\r\n\r\n ranges.push({ header, start: rangeStart, end: rangeEnd });\r\n }\r\n\r\n const rangesByStart = new Map(ranges.map((range) => [range.start, range] as const));\r\n const normalized: NormalizedHeader[] = [];\r\n\r\n for (let index = 0; index < columns.length; ) {\r\n const range = rangesByStart.get(index);\r\n\r\n if (range) {\r\n normalized.push(normalizeRange(range, prefix, columns));\r\n index = range.end + 1;\r\n continue;\r\n }\r\n\r\n const start = index;\r\n\r\n while (index < columns.length && !rangesByStart.has(index)) {\r\n index++;\r\n }\r\n\r\n const end = index - 1;\r\n\r\n normalized.push({\r\n key: `_rest_${columns[start].key}_${columns[end].key}`,\r\n widthPx: sumByRange(prefix, start, end),\r\n startKey: columns[start]?.key,\r\n endKey: columns[end]?.key,\r\n });\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction normalizeRange<Data extends AnyDict>(\r\n range: HeaderRange<Data>,\r\n prefix: number[],\r\n columns: GridColumn<Data>[],\r\n): NormalizedHeader {\r\n const base: NormalizedHeader = {\r\n key: range.header.key,\r\n widthPx: sumByRange(prefix, range.start, range.end),\r\n startKey: columns[range.start]?.key,\r\n endKey: columns[range.end]?.key,\r\n };\r\n\r\n if ('titleTemplate' in range.header) {\r\n base.titleTemplate = range.header.titleTemplate;\r\n\r\n return base;\r\n }\r\n\r\n base.title = range.header.title;\r\n base.align = range.header.align;\r\n\r\n return base;\r\n}\r\n\r\nfunction resolveColumnWidth<Data extends AnyDict>(column: GridColumn<Data>): number {\r\n const width = asFiniteNumber(column.width);\r\n const minWidth = asFiniteNumber(column.minWidth);\r\n const maxWidth = asFiniteNumber(column.maxWidth);\r\n\r\n let result = width ?? minWidth ?? DEFAULT_COLUMN_WIDTH;\r\n\r\n if (minWidth !== null && result < minWidth) {\r\n result = minWidth;\r\n }\r\n\r\n if (maxWidth !== null && result > maxWidth) {\r\n result = maxWidth;\r\n }\r\n\r\n return Math.max(0, Math.round(result));\r\n}\r\n\r\nfunction asFiniteNumber(value: number | undefined): number | null {\r\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\r\n}\r\n\r\nfunction hasOverlap(start: number, end: number, occupied: Set<number>): boolean {\r\n for (let i = start; i <= end; i++) {\r\n if (occupied.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction buildWidthesPrefixSums(values: number[]): number[] {\r\n const prefix = new Array(values.length + 1).fill(0);\r\n\r\n for (let i = 0; i < values.length; i++) {\r\n prefix[i + 1] = prefix[i] + values[i];\r\n }\r\n\r\n return prefix;\r\n}\r\n\r\nfunction sumByRange(prefix: number[], start: number, end: number): number {\r\n return prefix[end + 1] - prefix[start];\r\n}\r\n","import { ScrollbarState } from './scrollbar.models';\r\n\r\n/**\r\n * Calculates the visual state of an overlay scrollbar. All arguments are raw DOM numbers.\r\n * Returns a state describing the visibility, size, and position of the thumb.\r\n */\r\nexport function computeScrollbarState(\r\n scrollHeight: number = 0,\r\n clientHeight: number = 0,\r\n scrollTop: number = 0,\r\n minThumb = 24,\r\n): ScrollbarState {\r\n const safeClient = toSafe(clientHeight);\r\n const safeScrollH = toSafe(scrollHeight);\r\n const safeTop = clamp(scrollTop, 0, Math.max(0, safeScrollH - safeClient));\r\n\r\n if (safeClient <= 0 || !isFinite(safeClient)) {\r\n return hiddenState();\r\n }\r\n\r\n if (safeScrollH <= safeClient + 1) {\r\n return hiddenState(safeClient);\r\n }\r\n\r\n const track = safeClient;\r\n const ratio = track / safeScrollH;\r\n const thumb = Math.max(minThumb, Math.floor(track * ratio));\r\n\r\n const maxScrollTop = Math.max(1, safeScrollH - track);\r\n const maxThumbTop = Math.max(1, track - thumb);\r\n const topRaw = Math.round((safeTop / maxScrollTop) * maxThumbTop);\r\n const thumbTop = clamp(isFinite(topRaw) ? topRaw : 0, 0, maxThumbTop);\r\n\r\n return {\r\n visible: true,\r\n thumbHeight: thumb,\r\n thumbTop,\r\n track,\r\n maxThumbTop,\r\n maxScrollTop,\r\n };\r\n}\r\n\r\n/** Converts thumb position thumbTop (0..maxThumbTop) to scroll position scrollTop (0..maxScrollTop) */\r\nexport function mapThumbTopToScrollTop(thumbTop: number, maxThumbTop: number, maxScrollTop: number): number {\r\n const mt = Math.max(1, toSafe(maxThumbTop));\r\n const ms = Math.max(1, toSafe(maxScrollTop));\r\n const tt = clamp(toSafe(thumbTop), 0, mt);\r\n\r\n return (tt / mt) * ms;\r\n}\r\n\r\n/** Clamps the new thumb position within bounds 0..maxThumbTop */\r\nexport function clampThumbTop(value: number, maxThumbTop: number): number {\r\n const mt = Math.max(1, toSafe(maxThumbTop));\r\n\r\n return clamp(toSafe(value), 0, mt);\r\n}\r\n\r\nfunction hiddenState(track = 0): ScrollbarState {\r\n return {\r\n visible: false,\r\n thumbHeight: 0,\r\n thumbTop: 0,\r\n track,\r\n maxThumbTop: 1,\r\n maxScrollTop: 1,\r\n };\r\n}\r\n\r\nfunction toSafe(n: number): number {\r\n return Number.isFinite(n) ? n : 0;\r\n}\r\n\r\nfunction clamp(v: number, min: number, max: number): number {\r\n if (v < min) {\r\n return min;\r\n }\r\n\r\n if (v > max) {\r\n return max;\r\n }\r\n\r\n return v;\r\n}\r\n","/**\r\n * Represents the direction of scroll movement.\r\n *\r\n * - `'horizontal'` — scrolling along the X-axis\r\n * - `'vertical'` — scrolling along the Y-axis\r\n * - `'none'` — no scroll movement detected\r\n */\r\nexport type ScrollDirection = 'horizontal' | 'vertical' | 'none';\r\n\r\n/**\r\n * Detects the primary scroll direction of an HTML element.\r\n *\r\n * Compares the current scroll position with the previous one to determine\r\n * whether the user is scrolling horizontally, vertically, or not at all.\r\n *\r\n * Example:\r\n * ```typescript\r\n * const detector = new ScrollDirectionDetector(scrollableDiv);\r\n *\r\n * scrollableDiv.addEventListener('scroll', () => {\r\n * const direction = detector.detect();\r\n * console.log('Scroll direction:', direction); // 'horizontal' | 'vertical' | 'none'\r\n * });\r\n * ```\r\n *\r\n * The detector stores the previous scroll position internally and updates it\r\n * on each `detect()` call to track movement deltas.\r\n */\r\nexport class ScrollDirectionDetector {\r\n /**\r\n * Previously recorded vertical scroll position (scrollTop).\r\n * @private\r\n */\r\n #prevTop = 0;\r\n /**\r\n * Previously recorded horizontal scroll position (scrollLeft).\r\n * @private\r\n */\r\n #prevLeft = 0;\r\n\r\n /**\r\n * Creates a new scroll direction detector for the given HTML element.\r\n *\r\n * @param el - The HTML element whose scroll direction will be tracked.\r\n * The element must be scrollable (have overflow content).\r\n */\r\n constructor(private readonly el: HTMLElement) {\r\n this.#prevTop = el.scrollTop;\r\n this.#prevLeft = el.scrollLeft;\r\n }\r\n\r\n /**\r\n * Detects the primary scroll direction based on position changes since the last call.\r\n *\r\n * Compares the absolute deltas of horizontal and vertical scroll positions.\r\n * The direction with the greater delta is considered the primary scroll direction.\r\n *\r\n * @returns The detected scroll direction:\r\n * - `'horizontal'` if horizontal movement is greater\r\n * - `'vertical'` if vertical movement is greater\r\n * - `'none'` if no scroll movement occurred or deltas are equal\r\n */\r\n detect(): ScrollDirection {\r\n const { scrollTop, scrollLeft } = this.el;\r\n\r\n const deltaX = Math.abs(scrollLeft - this.#prevLeft);\r\n const deltaY = Math.abs(scrollTop - this.#prevTop);\r\n\r\n this.#prevTop = scrollTop;\r\n this.#prevLeft = scrollLeft;\r\n\r\n if (deltaX === 0 && deltaY === 0) return 'none';\r\n if (deltaX > deltaY) return 'horizontal';\r\n if (deltaY > deltaX) return 'vertical';\r\n\r\n return 'none';\r\n }\r\n}\r\n","// noinspection ES6PreferShortImport\r\nimport { GridColumn } from '../../data-grid.models.columns';\r\nimport { AnyDict } from '../../utils.models';\r\n\r\n/**\r\n * Splits an array of grid columns into sticky left, sticky right, and all visible columns.\r\n *\r\n * This function filters columns by visibility, then divides them at the midpoint\r\n * to identify which sticky columns should be pinned to the left versus right side\r\n * of the data grid.\r\n *\r\n * @template Data - The data type extending `AnyDict` that the grid columns are based on.\r\n * @param cols - Array of grid columns to be split.\r\n * @returns An object containing:\r\n * - `left`: Array of sticky columns from the first half of visible columns.\r\n * - `right`: Array of sticky columns from the second half of visible columns.\r\n * - `visible`: Array of all visible columns (filtered by `visible !== false`).\r\n *\r\n * @example\r\n * ```typescript\r\n * const columns: GridColumn<User>[] = [...];\r\n * const { left, right, visible } = splitSticky(columns);\r\n * ```\r\n */\r\nexport function splitSticky<Data extends AnyDict>(cols: GridColumn<Data>[]) {\r\n const visible = cols.filter((c) => c.visible !== false);\r\n\r\n const left = visible.filter((col) => col.sticky === 'left' || col.sticky === true);\r\n const right = visible.filter((col) => col.sticky === 'right');\r\n\r\n return { left, right, visible };\r\n}\r\n","import { computed, effect, ElementRef, Injectable, signal, TemplateRef } from '@angular/core';\r\n\r\nimport { GridPinnedRow } from './data-grid.models';\r\nimport { GridCellRendererType, GridColumn } from './data-grid.models.columns';\r\nimport { GridHeaderGroup, NormalizedHeader } from './data-grid.models.headers';\r\nimport { layoutColumns } from './helpers/layout-columns';\r\nimport { computeHeaderGroups } from './helpers/multi-header';\r\nimport { computeScrollbarState } from './helpers/scrollbar';\r\nimport { splitSticky } from './helpers/sticky';\r\nimport { AnyDict } from './utils.models';\r\n\r\n/**\r\n * View model for the data grid component.\r\n *\r\n * Manages grid state including column layout, sticky positioning, scrollbar calculations,\r\n * and pinned rows. Automatically recomputes column widths based on container size and\r\n * handles sticky column offsets for left and right pinned columns.\r\n *\r\n * @template Data - Type of data objects in the grid, must extend AnyDict\r\n *\r\n * @example\r\n * ```typescript\r\n * const gridVm = inject(DataGridVm<MyDataType>);\r\n * gridVm.columns.set([{ key: 'name', title: 'Name' }]);\r\n * gridVm.containerWidth.set(800);\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DataGridVm<Data extends AnyDict> {\r\n /**\r\n * Reference to the scrollable container element.\r\n *\r\n * Used for scrollbar calculations and scroll position management.\r\n */\r\n scrollEl = signal<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n\r\n /**\r\n * Array of column configurations for the grid.\r\n *\r\n * Defines all columns including their keys, titles, sticky positioning, and widths.\r\n * Value is reactive and triggers column layout recalculation when changed.\r\n */\r\n columns = signal<GridColumn<Data>[]>([]);\r\n\r\n /**\r\n * Array of pinned row configurations.\r\n *\r\n * Defines rows that remain fixed at the top or bottom of the grid during scrolling.\r\n * Each row includes data, position ('top' or 'bottom'), and optional ordering.\r\n */\r\n pinnedRows = signal<GridPinnedRow<Data>[]>([]);\r\n headerGroups = signal<GridHeaderGroup<Data>[]>([]);\r\n\r\n /**\r\n * Current width of the grid container in pixels.\r\n *\r\n * Used for column width calculations and layout adjustments.\r\n * Value is reactive and triggers column layout recalculation when changed.\r\n */\r\n containerWidth = signal<number>(0);\r\n\r\n /**\r\n * Flag indicating whether the custom scrollbar should be visible.\r\n *\r\n * Automatically computed based on content height vs. container height.\r\n */\r\n scrollbarVisible = signal(false);\r\n\r\n /**\r\n * Height of the scrollbar thumb in pixels.\r\n *\r\n * Proportional to the ratio of visible content to total content height.\r\n */\r\n thumbHeightPx = signal(0);\r\n\r\n /**\r\n * Top position of the scrollbar thumb in pixels.\r\n *\r\n * Corresponds to the current scroll position within the scrollable area.\r\n */\r\n thumbTopPx = signal(0);\r\n\r\n /**\r\n * Flag indicating whether the user is currently dragging the scrollbar thumb.\r\n *\r\n * Used to track active scroll drag interactions.\r\n */\r\n dragging = false;\r\n\r\n /**\r\n * Map of global cell renderer templates by type.\r\n *\r\n * Stores reusable template references for different cell renderer types\r\n * that can be shared across multiple columns.\r\n */\r\n globalTypeCellTpls = new Map<GridCellRendererType, TemplateRef<Data>>();\r\n globalDataCellTpls = new Map<keyof Data | string, TemplateRef<Data>>();\r\n globalRowCellTpls = new Map<keyof Data | string, TemplateRef<Data>>();\r\n\r\n #byKey = signal<Record<string, number>>({});\r\n #defaultColWidth = 140;\r\n #stickyLeftMap = new Map<string, number>();\r\n #stickyRightMap = new Map<string, number>();\r\n #stickySplit = computed(() => splitSticky<Data>(this.columns() ?? []));\r\n pinnedTop = signal<GridPinnedRow<Data>[]>([]);\r\n pinnedBottom = signal<GridPinnedRow<Data>[]>([]);\r\n\r\n /**\r\n * Computed an array of non-sticky columns to display in the scrollable area.\r\n *\r\n * Automatically splits columns into left-sticky, visible, and right-sticky groups,\r\n * recomputes sticky offsets, and returns only the scrollable middle section.\r\n * Recalculates whenever columns or container width changes.\r\n */\r\n columnsToShow = computed<GridColumn<Data>[]>(() => {\r\n this.containerWidth();\r\n\r\n return this.#stickySplit().visible;\r\n });\r\n\r\n contentWidth = computed<number>(() => {\r\n const columns = this.columnsToShow();\r\n\r\n if (!columns.length) {\r\n return 0;\r\n }\r\n\r\n return columns.reduce((sum, col) => sum + this.widthByKey(col.key), 0);\r\n });\r\n\r\n /**\r\n * Computed array of normalized header groups with calculated widths.\r\n *\r\n * Transforms raw header group configurations into normalized structures\r\n * that include computed column widths for layout rendering. Returns an empty\r\n * array if no headers or columns are configured. Recalculates whenever\r\n * header groups or visible columns change.\r\n *\r\n * @returns Array of normalized header configurations with width calculations\r\n */\r\n normalizedHeaderGroups = computed<NormalizedHeader[]>(() => {\r\n const headers = this.headerGroups();\r\n const columns = this.columnsToShow();\r\n\r\n if (!headers.length || !columns.length) {\r\n return [];\r\n }\r\n\r\n const normalizedColumns = columns.map((col) => ({\r\n ...col,\r\n width: this.widthByKey(col.key),\r\n }));\r\n\r\n return computeHeaderGroups(headers, normalizedColumns);\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const rows = this.pinnedRows() ?? [];\r\n\r\n this.pinnedTop.set(rows.filter((r) => r.position === 'top').sort((a, b) => (a.order ?? 0) - (b.order ?? 0)));\r\n this.pinnedBottom.set(\r\n rows.filter((r) => r.position === 'bottom').sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\r\n );\r\n });\r\n\r\n effect(() => {\r\n const cols = this.columns();\r\n const width = this.containerWidth();\r\n\r\n if (!cols.length || !width) {\r\n return;\r\n }\r\n\r\n const res = layoutColumns(cols, width, this.#defaultColWidth);\r\n\r\n this.#byKey.set(res.byKey);\r\n });\r\n\r\n effect(() => {\r\n this.#byKey();\r\n\r\n const { left, right } = this.#stickySplit();\r\n\r\n this.recomputeStickyOffsets(left, right);\r\n });\r\n }\r\n\r\n /**\r\n * Returns the computed width for a column by its key.\r\n *\r\n * If the column width has not been calculated, returns the default column width.\r\n *\r\n * @param key - The unique identifier for the column\r\n * @returns Width in pixels\r\n */\r\n widthByKey = (key: string) => this.#byKey()[key] ?? this.#defaultColWidth;\r\n\r\n /**\r\n * Checks if a column is pinned to the left side of the grid.\r\n *\r\n * @param key - The unique identifier for the column\r\n * @returns `true` if the column is sticky on the left, `false` otherwise\r\n */\r\n isStickyLeft = (key: string) => this.#stickyLeftMap.has(key);\r\n\r\n /**\r\n * Checks if a column is pinned to the right side of the grid.\r\n *\r\n * @param key - The unique identifier for the column\r\n * @returns `true` if the column is sticky on the right, `false` otherwise\r\n */\r\n isStickyRight = (key: string) => this.#stickyRightMap.has(key);\r\n\r\n /**\r\n * Returns the horizontal offset for a sticky column.\r\n *\r\n * Calculates the distance from the specified edge (left or right) where the column\r\n * should be positioned. Returns `null` if the column is not sticky in the given direction.\r\n *\r\n * @param key - The unique identifier for the column\r\n * @param dir - The direction to check ('left' or 'right')\r\n * @returns Offset in pixels, or `null` if not sticky in the specified direction\r\n */\r\n stickyOffset = (key: string, dir: 'left' | 'right') =>\r\n dir === 'left' && this.isStickyLeft(key)\r\n ? (this.#stickyLeftMap.get(key) ?? null)\r\n : dir === 'right' && this.isStickyRight(key)\r\n ? (this.#stickyRightMap.get(key) ?? null)\r\n : null;\r\n\r\n /**\r\n * Calculates and updates scrollbar state based on the current scroll position.\r\n *\r\n * Computes whether the scrollbar should be visible, and if so, determines\r\n * the thumb height and position based on scroll height, client height, and scroll position.\r\n * Updates the corresponding signal properties with the calculated values.\r\n */\r\n calcScrollbar(): void {\r\n const el = this.scrollEl()?.nativeElement;\r\n\r\n if (!el) return;\r\n\r\n const state = computeScrollbarState(el.scrollHeight, el.clientHeight, el.scrollTop);\r\n\r\n if (!state.visible) {\r\n this.scrollbarVisible.set(false);\r\n this.thumbHeightPx.set(0);\r\n this.thumbTopPx.set(0);\r\n\r\n return;\r\n }\r\n\r\n this.thumbHeightPx.set(state.thumbHeight);\r\n this.thumbTopPx.set(state.thumbTop);\r\n }\r\n\r\n private recomputeStickyOffsets(leftCols: GridColumn<Data>[], rightCols: GridColumn<Data>[]): void {\r\n let acc = 0;\r\n\r\n this.#stickyLeftMap.clear();\r\n\r\n for (const col of leftCols) {\r\n this.#stickyLeftMap.set(col.key, acc);\r\n acc += this.widthByKey(col.key);\r\n }\r\n\r\n acc = 0;\r\n this.#stickyRightMap.clear();\r\n\r\n for (let i = rightCols.length - 1; i >= 0; i--) {\r\n const col = rightCols[i];\r\n\r\n this.#stickyRightMap.set(col.key, acc);\r\n acc += this.widthByKey(col.key);\r\n }\r\n }\r\n}\r\n","// noinspection ES6PreferShortImport\r\n\r\nimport { DatePipe, DecimalPipe, NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, inject, input } from '@angular/core';\r\n\r\nimport { GridColumn } from './data-grid.models.columns';\r\nimport { DataGridVm } from './data-grid.vm';\r\nimport { AnyDict } from './utils.models';\r\n\r\n/**\r\n * Component for rendering individual data grid cells.\r\n *\r\n * Handles different cell rendering strategies based on column configuration:\r\n * - Custom templates via `renderTemplate`\r\n * - Global type-specific templates registered in DataGridVm\r\n * - Built-in formatters for dates and numbers\r\n * - Index display (1-based row numbering)\r\n * - Plain text for simple values\r\n *\r\n * The component automatically determines the appropriate rendering method\r\n * based on column properties and applies Angular pipes when needed.\r\n *\r\n * @template Data - Type of data objects in the grid row\r\n *\r\n * @example\r\n * ```html\r\n * <re-data-grid-cell\r\n * [index]=\"0\"\r\n * [item]=\"rowData\"\r\n * [column]=\"columnConfig\"\r\n * />\r\n * ```\r\n */\r\n@Component({\r\n selector: 're-data-grid-cell',\r\n template: `\r\n @let row = item();\r\n @let col = $any(column());\r\n @let val = value();\r\n\r\n @switch (type()) {\r\n @case ('tpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"col.renderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col, index: index() }\"\r\n />\r\n }\r\n @case ('globalTypeTpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"vm.globalTypeCellTpls.get(col.type)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col }\"\r\n />\r\n }\r\n @case ('globalDataTpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"vm.globalDataCellTpls.get(col.key)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col }\"\r\n />\r\n }\r\n @case ('globalRowTpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"vm.globalRowCellTpls.get(col.key)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col, index: index() }\"\r\n />\r\n }\r\n @case ('date') {\r\n {{ val | date: col?.typeParams }}\r\n }\r\n @case ('number') {\r\n {{ val | number: col?.typeParams }}\r\n }\r\n @case ('index') {\r\n {{ index() + 1 }}\r\n }\r\n @default {\r\n {{ val }}\r\n }\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n width: 100%;\r\n text-align: inherit;\r\n }\r\n `,\r\n imports: [NgTemplateOutlet, DatePipe, DecimalPipe],\r\n})\r\nexport class DataGridCellComponent<Data extends AnyDict> {\r\n /**\r\n * Zero-based index of the current row in the data grid.\r\n *\r\n * Used for rendering row numbers (displayed as 1-based in 'index' type columns)\r\n * and passed to custom templates as context.\r\n */\r\n index = input.required<number>();\r\n\r\n /**\r\n * Data object for the current row.\r\n *\r\n * Contains the complete row data that can be accessed by column value functions\r\n * or custom render templates. Type-safe, according to the Data generic parameter.\r\n */\r\n item = input.required<Data>();\r\n\r\n /**\r\n * Column configuration object.\r\n *\r\n * Defines how the cell should be rendered, including key mapping, type,\r\n * custom templates, or value transformation functions.\r\n */\r\n column = input.required<GridColumn<Data>>();\r\n\r\n /**\r\n * Injected DataGridVm service instance.\r\n *\r\n * Provides access to global type-specific cell templates registered\r\n * at the grid level via the ` globalTypeCellTpls ` map.\r\n */\r\n vm = inject(DataGridVm);\r\n\r\n /**\r\n * Computed rendering strategy for the current cell.\r\n *\r\n * Determines which template block to use based on column configuration:\r\n * - `'tpl'` - Custom column template (`renderTemplate` property exists)\r\n * - `'globalTypeTpl'` - Global type template (registered in DataGridVm)\r\n * - `'date'`, `'number'`, `'index'` - Built-in formatters\r\n * - `'plain'` - Default text rendering\r\n *\r\n * The value is reactive and updates when the column configuration changes.\r\n */\r\n type = computed(() => {\r\n const col = this.column();\r\n\r\n if ('renderTemplate' in col) {\r\n return 'tpl';\r\n }\r\n\r\n if ('type' in col && this.vm.globalTypeCellTpls.has(col.type!)) {\r\n return 'globalTypeTpl';\r\n }\r\n\r\n if (this.vm.globalDataCellTpls.has(col.key)) {\r\n return 'globalDataTpl';\r\n }\r\n\r\n if (this.vm.globalRowCellTpls.has(col.key)) {\r\n return 'globalRowTpl';\r\n }\r\n\r\n return 'type' in col ? col['type'] : 'plain';\r\n });\r\n\r\n /**\r\n * Computed cell value extracted from row data.\r\n *\r\n * Returns the cell's display value by either:\r\n * - Calling the `value` function from column configuration (if defined)\r\n * - Directly accessing the row property using the column's `key`\r\n *\r\n * The value is reactive and updates when row data or column configuration changes.\r\n * Used as input for templates, pipes, and default text rendering.\r\n */\r\n value = computed(() => {\n const col = this.column();\n const row = this.item();\n const rawValue = 'value' in col ? col.value(row) : row[col.key];\n\n if ('value' in col || 'renderTemplate' in col) {\n return rawValue;\n }\n\n if (rawValue === null || rawValue === undefined) {\n return col.defaultValue ?? rawValue;\n }\n\n return rawValue;\n });\n}\n","// noinspection ES6PreferShortImport\r\n\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nimport { BaseGridColumn, DeclarativeColumnDef, GridColumns } from '../../data-grid.models.columns';\r\nimport { AnyDict, AnyType, RowKeyFn } from '../../utils.models';\r\n\r\nexport type DeclarativeColumnsResult<Data extends AnyDict = AnyDict> = {\r\n columns: GridColumns<Data>;\r\n rowCellTemplatesByKey: Map<string, TemplateRef<AnyType>>;\r\n};\r\n\r\nexport function normalizeDeclarativeColumns<Data extends AnyDict = AnyDict>(\r\n defs: DeclarativeColumnDef<Data>[] = [],\r\n rowKey?: RowKeyFn<Data>,\r\n): DeclarativeColumnsResult<Data> {\r\n const columns: GridColumns<Data> = [];\r\n const rowCellTemplatesByKey = new Map<string, TemplateRef<AnyType>>();\r\n\r\n for (const def of defs) {\r\n const key = def.key;\r\n const base: BaseGridColumn<Data> = {\n key,\n header: def.header ?? String(key),\n headerTemplate: def.headerTemplate,\n align: def.align,\n sortKey: def.sortKey,\n width: def.width,\n minWidth: def.minWidth,\n maxWidth: def.maxWidth,\n flex: def.flex,\n disabled: def.disabled,\n visible: def.visible,\n sticky: def.sticky,\n tooltip: def.tooltip,\n expandBy: def.expandBy,\n };\n\r\n if (def.cellTemplate) {\r\n rowCellTemplatesByKey.set(String(key), def.cellTemplate);\r\n }\r\n\r\n if (def.value) {\r\n columns.push({\r\n ...base,\r\n value: def.value,\r\n track: def.track ?? createDefaultTrack(key, rowKey),\r\n });\r\n continue;\r\n }\r\n\r\n columns.push({\n ...base,\n type: def.type ?? 'plain',\n typeParams: def.typeParams,\n defaultValue: def.defaultValue,\n });\n }\n\r\n return { columns, rowCellTemplatesByKey };\r\n}\r\n\r\nfunction createDefaultTrack<Data extends AnyDict = AnyDict>(\r\n key: string,\r\n rowKey?: RowKeyFn<Data>,\r\n): (row: Data) => string {\r\n return (row: Data) => {\r\n if (!rowKey) {\r\n return String(row[key]);\r\n }\r\n\r\n if (typeof rowKey === 'function') {\r\n return String(rowKey(row));\r\n }\r\n\r\n return String(row[rowKey]);\r\n };\r\n}\r\n","import { computed, signal } from '@angular/core';\r\n\r\nimport { _Selectfull, GridSelection } from '../../data-grid.models';\r\nimport { AnyDict, DataKey } from '../../utils.models';\r\n\r\n/**\r\n * Service class for managing row selection in a data grid.\r\n *\r\n * Handles selection state and operations for grid rows, supporting multiple selection modes\r\n * (none, single, multi). Provides reactive signals for tracking selected items and\r\n * computed values for selection state.\r\n *\r\n * @template Data - The type of data objects in the grid, must extend `AnyDict`.\r\n *\r\n * @example\r\n * ```typescript\r\n * const selector = new Selector<User>();\r\n * selector.data.set(users);\r\n * selector.selection.set({ mode: 'multi', key: 'id' });\r\n * selector.select(users[0]);\r\n * console.log(selector.selectedKeys()); // ['user-id']\r\n * ```\r\n */\r\nexport class Selector<Data extends AnyDict> {\r\n /**\r\n * Signal containing the full dataset of grid rows.\r\n *\r\n * This signal holds all data items that can be selected.\r\n * Defaults to an empty array.\r\n */\r\n data = signal<Data[]>([]);\r\n /**\r\n * Signal containing the current selection configuration.\r\n *\r\n * Defines the selection mode and the key property used for identifying rows.\r\n * Defaults to `{ mode: 'none' }` which disables selection.\r\n */\r\n selection = signal<GridSelection>({ mode: 'none' });\r\n\r\n /**\r\n * Signal containing the array of currently selected row keys.\r\n *\r\n * Stores the keys of all selected rows based on the key property\r\n * defined in the selection configuration.\r\n * Defaults to an empty array.\r\n */\r\n selectedKeys = signal<DataKey<Data>[]>([]);\r\n\r\n /**\r\n * Computed signal indicating the overall selection state of all rows.\r\n *\r\n * Returns:\r\n * - `true` if all rows are selected\r\n * - `false` if no rows are selected\r\n * - `'mixed'` if some but not all rows are selected\r\n *\r\n * Useful for implementing the \"select all\" checkbox with an indeterminate state.\r\n */\r\n isAllSelected = computed(() => {\r\n const selectedCount = this.selectedKeys().length;\r\n\r\n return selectedCount === this.data().length ? true : selectedCount === 0 ? false : 'mixed';\r\n });\r\n\r\n /**\r\n * Checks whether a specific row is currently selected.\r\n *\r\n * Compares the row's key value against the list of selected keys.\r\n * Returns `false` if the selection mode is 'none' or the key is not configured.\r\n *\r\n * @param row - The data row to check selection status for.\r\n * @returns `true` if the row is selected, `false` otherwise.\r\n */\r\n isSelected(row: Data) {\r\n const selection = this.selection();\r\n const selected = this.selectedKeys();\r\n\r\n return 'key' in selection ? selected.includes(row[selection.key]) : false;\r\n }\r\n\r\n /**\r\n * Toggles selection of all rows.\r\n *\r\n * If all rows are selected, deselects all.\r\n * If no rows or some rows are selected, selects all.\r\n *\r\n * This method only works in `'multi'` selection mode and throws an error\r\n * if called in any other mode.\r\n *\r\n * @returns The updated array of selected keys.\r\n * @throws {Error} If selection mode is not `'multi'`.\r\n */\r\n selectAll() {\r\n if (this.selection().mode !== 'multi') {\r\n throw new Error('Cannot select all in not \"multi\" mode');\r\n }\r\n\r\n const selection = this.selection() as _Selectfull<Data>;\r\n const state = this.isAllSelected();\r\n const nextState = state === false || state === 'mixed';\r\n\r\n this.selectedKeys.set(!nextState ? [] : this.data().map((row) => row[selection.key]));\r\n\r\n return this.selectedKeys();\r\n }\r\n\r\n /**\r\n * Selects or deselects a specific row.\r\n *\r\n * Behavior depends on the selection mode:\r\n * - In `'single'` mode: replaces current selection with the specified row.\r\n * - In `'multi'` mode: toggles the row's selection state (adds if not selected, removes if selected).\r\n * - In `'none'` mode: throws an error.\r\n *\r\n * @param row - The data row to select or deselect.\r\n * @returns The updated array of selected keys after the operation.\r\n * @throws {Error} If selection mode is `'none'`.\r\n */\r\n select(row: Data) {\r\n if (this.selection().mode === 'none') {\r\n throw new Error('Cannot select row in \"none\" mode');\r\n }\r\n\r\n const selection = this.selection() as _Selectfull<Data>;\r\n\r\n if (this.selection().mode === 'single') {\r\n const selected = [row[selection.key]];\r\n\r\n this.selectedKeys.set(selected);\r\n\r\n return selected;\r\n } else {\r\n const selectedKeys = this.selectedKeys();\r\n const has = selectedKeys.some((it) => it === row[selection.key]);\r\n const selected = has\r\n ? selectedKeys.filter((it) => it !== row[selection.key])\r\n : [...selectedKeys, row[selection.key]];\r\n\r\n this.selectedKeys.set(selected);\r\n\r\n return selected;\r\n }\r\n }\r\n}\r\n","// noinspection CssUnresolvedCustomProperty\r\n\r\nimport { ChangeDetectionStrategy, Component, effect, ElementRef, input, viewChild } from '@angular/core';\r\n\r\nexport type TriState = boolean | 'mixed';\r\n\r\n@Component({\r\n selector: 're-checkbox-ic',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <label class=\"cb\" [class.cb--disabled]=\"disabled()\">\r\n <input\r\n #box\r\n class=\"cb__input\"\r\n type=\"checkbox\"\r\n aria-hidden=\"true\"\r\n [disabled]=\"disabled()\"\r\n [checked]=\"state() === true\"\r\n [attr.data-indeterminate]=\"state() === 'mixed' ? 'true' : 'false'\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n <span class=\"cb__box\" aria-hidden=\"true\"></span>\r\n </label>\r\n `,\r\n styles: `\r\n :host {\r\n --re-data-grid-checkbox-size: 20px;\r\n --re-data-grid-checkbox-stroke: 2px;\r\n --re-data-grid-checkbox-border: var(--border-color, #9aa3af);\r\n --re-data-grid-checkbox-tick: var(--surface-neutral, #fff);\r\n --re-data-grid-checkbox-surface: var(--surface-neutral, #fff);\r\n --re-data-grid-checkbox-active-color: var(--primary-color, #2563eb);\r\n\r\n display: inline-block;\r\n width: var(--re-data-grid-checkbox-size);\r\n height: var(--re-data-grid-checkbox-size);\r\n user-select: none;\r\n }\r\n\r\n .cb {\r\n cursor: default;\r\n display: inline-block;\r\n }\r\n .cb--disabled {\r\n opacity: 0.6;\r\n }\r\n\r\n .cb__input {\r\n position: absolute;\r\n width: 0;\r\n height: 0;\r\n opacity: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .cb__box {\r\n position: relative;\r\n display: inline-block;\r\n width: var(--re-data-grid-checkbox-size);\r\n height: var(--re-data-grid-checkbox-size);\r\n border: var(--re-data-grid-checkbox-stroke) solid var(--re-data-grid-checkbox-border);\r\n border-radius: 4px;\r\n background: var(--re-data-grid-checkbox-surface);\r\n transition:\r\n background 0.25s,\r\n border-color 0.25s;\r\n }\r\n\r\n .cb__input:checked + .cb__box {\r\n border-color: var(--re-data-grid-checkbox-active-color);\r\n background: var(--re-data-grid-checkbox-active-color);\r\n }\r\n .cb__input:checked + .cb__box::after {\r\n content: '';\r\n position: absolute;\r\n inset: 0;\r\n margin: auto;\r\n width: 10px;\r\n height: 6px;\r\n border: 2px solid var(--re-data-grid-checkbox-tick);\r\n border-top: 0;\r\n border-right: 0;\r\n transform: rotate(-45deg) translate(1px, -1px) scale(0.8);\r\n opacity: 0;\r\n animation: tick 0.25s forwards ease;\r\n }\r\n\r\n /* mixed */\r\n .cb__input[data-indeterminate='true'] + .cb__box {\r\n background: var(--re-data-grid-checkbox-active-color);\r\n border-color: var(--re-data-grid-checkbox-active-color);\r\n }\r\n .cb__input[data-indeterminate='true'] + .cb__box::after {\r\n content: '';\r\n position: absolute;\r\n left: 3px;\r\n right: 3px;\r\n top: 50%;\r\n border-top: 2px solid var(--re-data-grid-checkbox-tick);\r\n transform: translateY(-50%) scaleX(0.3);\r\n opacity: 0;\r\n animation: dash 0.25s forwards ease;\r\n }\r\n\r\n @keyframes tick {\r\n to {\r\n opacity: 1;\r\n transform: rotate(-45deg) translate(1px, -1px) scale(1);\r\n }\r\n }\r\n @keyframes dash {\r\n to {\r\n opacity: 1;\r\n transform: translateY(-50%) scaleX(1);\r\n }\r\n }\r\n `,\r\n})\r\nexport class CheckboxIcon {\r\n state = input<TriState>(false);\r\n disabled = input(false);\r\n\r\n private boxRef = viewChild(ElementRef<HTMLInputElement>);\r\n\r\n constructor() {\r\n effect(() => {\r\n const el = this.boxRef()?.nativeElement;\r\n\r\n if (!el) {\r\n return;\r\n }\r\n\r\n const state = this.state();\r\n\r\n if (state === 'mixed') {\r\n el.indeterminate = true;\r\n el.checked = false;\r\n el.dataset.indeterminate = 'true';\r\n } else if (state) {\r\n el.indeterminate = false;\r\n el.checked = true;\r\n el.dataset.indeterminate = 'false';\r\n } else {\r\n el.indeterminate = false;\r\n el.checked = false;\r\n el.dataset.indeterminate = 'false';\r\n }\r\n });\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\nimport { booleanAttribute, Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 're-expand-ic',\r\n template: `\r\n @if (expanded()) {\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M15.5 8C15.5 9.48336 15.0601 10.9334 14.236 12.1668C13.4119 13.4001 12.2406 14.3614 10.8701 14.9291C9.49968 15.4968 7.99168 15.6453 6.53683 15.3559C5.08197 15.0665 3.7456 14.3522 2.6967 13.3033C1.64781 12.2544 0.933503 10.918 0.644114 9.46318C0.354725 8.00832 0.50325 6.50032 1.07091 5.12987C1.63856 3.75943 2.59986 2.58809 3.83323 1.76398C5.0666 0.939867 6.51664 0.5 8 0.5C8.98492 0.5 9.96019 0.693993 10.8701 1.0709C11.7801 1.44781 12.6069 2.00026 13.3033 2.6967C13.9997 3.39314 14.5522 4.21993 14.9291 5.12987C15.306 6.03982 15.5 7.01509 15.5 8ZM12.5 8C12.5 7.80109 12.421 7.61032 12.2803 7.46967C12.1397 7.32902 11.9489 7.25 11.75 7.25H4.25C4.05109 7.25 3.86033 7.32902 3.71967 7.46967C3.57902 7.61032 3.5 7.80109 3.5 8C3.5 8.19891 3.57902 8.38968 3.71967 8.53033C3.86033 8.67098 4.05109 8.75 4.25 8.75H11.75C11.9489 8.75 12.1397 8.67098 12.2803 8.53033C12.421 8.38968 12.5 8.19891 12.5 8Z\"\r\n fill=\"var(--re-data-grid-expander-color)\"\r\n />\r\n </svg>\r\n } @else {\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M8 0.5C6.51664 0.5 5.0666 0.939867 3.83323 1.76398C2.59986 2.58809 1.63856 3.75943 1.07091 5.12987C0.50325 6.50032 0.354725 8.00832 0.644114 9.46318C0.933503 10.918 1.64781 12.2544 2.6967 13.3033C3.7456 14.3522 5.08197 15.0665 6.53683 15.3559C7.99168 15.6453 9.49968 15.4968 10.8701 14.9291C12.2406 14.3614 13.4119 13.4001 14.236 12.1668C15.0601 10.9334 15.5 9.48336 15.5 8C15.5 7.01509 15.306 6.03982 14.9291 5.12987C14.5522 4.21993 13.9997 3.39314 13.3033 2.6967C12.6069 2.00026 11.7801 1.44781 10.8701 1.0709C9.96019 0.693993 8.98492 0.5 8 0.5ZM11.75 8.75H8.75V11.75C8.75 11.9489 8.67099 12.1397 8.53033 12.2803C8.38968 12.421 8.19892 12.5 8 12.5C7.80109 12.5 7.61033 12.421 7.46967 12.2803C7.32902 12.1397 7.25 11.9489 7.25 11.75V8.75H4.25C4.05109 8.75 3.86033 8.67098 3.71967 8.53033C3.57902 8.38968 3.5 8.19891 3.5 8C3.5 7.80109 3.57902 7.61032 3.71967 7.46967C3.86033 7.32902 4.05109 7.25 4.25 7.25H7.25V4.25C7.25 4.05109 7.32902 3.86032 7.46967 3.71967C7.61033 3.57902 7.80109 3.5 8 3.5C8.19892 3.5 8.38968 3.57902 8.53033 3.71967C8.67099 3.86032 8.75 4.05109 8.75 4.25V7.25H11.75C11.9489 7.25 12.1397 7.32902 12.2803 7.46967C12.421 7.61032 12.5 7.80109 12.5 8C12.5 8.19891 12.421 8.38968 12.2803 8.53033C12.1397 8.67098 11.9489 8.75 11.75 8.75Z\"\r\n fill=\"var(--re-data-grid-expander-color)\"\r\n />\r\n </svg>\r\n }\r\n `,\r\n styles: '',\r\n})\r\nexport class ExpandIcon {\r\n expanded = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n}\r\n","/* eslint-disable max-len */\r\nimport { Component, input } from '@angular/core';\r\n\r\nimport { GridSortOrder } from '../data-grid.models';\r\n\r\n@Component({\r\n selector: 're-sort-ic',\r\n template: `\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" class=\"{{ direction() }}\">\r\n <path\r\n d=\"M12.84 8.51259L9.66754 11.6851V4.59009C9.66754 4.39118 9.58852 4.20041 9.44787 4.05976C9.30722 3.91911 9.11645 3.84009 8.91754 3.84009C8.71863 3.84009 8.52786 3.91911 8.38721 4.05976C8.24656 4.20041 8.16754 4.39118 8.16754 4.59009V11.6851L4.99504 8.51259C4.92511 8.44266 4.84209 8.38719 4.75073 8.34934C4.65936 8.3115 4.56144 8.29202 4.46254 8.29202C4.36365 8.29202 4.26572 8.3115 4.17435 8.34934C4.08299 8.38719 3.99997 8.44266 3.93004 8.51259C3.86011 8.58252 3.80464 8.66553 3.7668 8.7569C3.72895 8.84827 3.70947 8.94619 3.70947 9.04509C3.70947 9.14398 3.72895 9.24191 3.7668 9.33327C3.80464 9.42464 3.86011 9.50766 3.93004 9.57759L8.38504 14.0251C8.45349 14.0952 8.53503 14.1513 8.62504 14.1901C8.71842 14.2256 8.81762 14.2435 8.91754 14.2426C9.01505 14.2438 9.11186 14.226 9.20254 14.1901C9.29255 14.1513 9.37409 14.0952 9.44254 14.0251L13.8975 9.57759C13.9678 9.50787 14.0236 9.42491 14.0617 9.33352C14.0998 9.24213 14.1194 9.1441 14.1194 9.04509C14.1194 8.94608 14.0998 8.84805 14.0617 8.75666C14.0236 8.66526 13.9678 8.58231 13.8975 8.51259C13.757 8.3729 13.5669 8.29449 13.3688 8.29449C13.1707 8.29449 12.9806 8.3729 12.84 8.51259Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n `,\r\n styles: `\r\n svg {\r\n transition: transform 300ms ease-in-out;\r\n\r\n &:not(.asc):not(.desc) {\r\n display: none;\r\n }\r\n }\r\n\r\n .asc {\r\n transform: rotate(-180deg);\r\n }\r\n\r\n .desc {\r\n transform: rotate(0deg);\r\n }\r\n `,\r\n})\r\nexport class SortIcon {\r\n direction = input<GridSortOrder | undefined>('asc');\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n NgZone,\r\n numberAttribute,\r\n output,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { debounceTime, fromEvent, Subject, Subscription } from 'rxjs';\r\n\r\nimport { GRID_CHECKBOX_COLUMN, GRID_INDEX_COLUMN } from './data-grid.constants';\r\nimport { GridPaginationMode, GridPinnedRow, GridSelection, GridSortOrder } from './data-grid.models';\r\nimport { GridCellRendererType, GridColumn, GridColumns, GridTooltipContext } from './data-grid.models.columns';\r\nimport {\r\n GridCellClickEvent,\r\n GridCellContextEvent,\r\n GridCellDoubleClickEvent,\r\n GridPageChangeEvent,\r\n GridRowClickEvent,\r\n GridRowContextEvent,\r\n GridRowDoubleClickEvent,\r\n GridSelectEvent,\r\n GridSortEvent,\r\n} from './data-grid.models.events';\r\nimport { GridHeaderGroup } from './data-grid.models.headers';\r\nimport { DataGridVm } from './data-grid.vm';\r\nimport { DataGridCellComponent } from './data-grid-cell.component';\r\nimport { DataGridCellTemplateDirective } from './directives/data-cell.directive';\r\nimport { DataGridDeclarativeColumn } from './directives/declarative-column.directive';\r\nimport { DataGridHeaderTemplateDirective } from './directives/header.directive';\r\nimport { DataGridExpanderIconDirective, DataGridSortIconDirective } from './directives/icons.directive';\r\nimport { DataGridCellEmptyDirective, DataGridCellLoadingDirective } from './directives/placeholders.directive';\r\nimport { DataGridRowDirective } from './directives/row.directive';\r\nimport { DataGridStickyRowDirective } from './directives/sticky-row.directive';\r\nimport { DataGridTypeCellTemplateDirective } from './directives/type-cell.directive';\r\nimport { normalizeDeclarativeColumns } from './helpers/declarative-columns';\r\nimport {\r\n clampThumbTop,\r\n computeScrollbarState,\r\n mapThumbTopToScrollTop,\r\n ScrollDirectionDetector,\r\n} from './helpers/scrollbar';\r\nimport { Selector } from './helpers/selection';\r\nimport { CheckboxIcon } from './icons/checkbox.icon';\r\nimport { ExpandIcon } from './icons/expand.icon';\r\nimport { SortIcon } from './icons/sort.icon';\r\nimport { DATA_GRID_CONFIG, DEFAULT_DATA_GRID_DEFAULTS } from './providers/data-grid-config.provider';\r\nimport { AnyDict, AnyType, DataKey, RowKeyFn } from './utils.models';\r\n\r\ntype TooltipState = {\r\n text?: string;\r\n tpl?: TemplateRef<GridTooltipContext<AnyDict>>;\r\n ctx?: GridTooltipContext<AnyDict>;\r\n x: number;\r\n y: number;\r\n visible: boolean;\r\n};\r\n\r\n/**\r\n * Data grid component with virtual scrolling, sorting, selection, and pagination support.\r\n *\r\n * Provides high-performance rendering of large datasets with features like:\r\n * - Virtual scrolling for efficient DOM management\r\n * - Column sorting and expandable columns\r\n * - Row selection (single/multiple)\r\n * - Pagination modes: none, pagination, or infinite scroll\r\n * - Pinned rows\r\n * - Custom cell and header templates\r\n *\r\n * @example\r\n * ```html\r\n * <re-data-grid\r\n * [data]=\"users\"\r\n * [columns]=\"columns\"\r\n * [selection]=\"{ mode: 'multiple' }\"\r\n * (sortChange)=\"onSort($event)\"\r\n * />\r\n * ```\r\n */\r\n@Component({\r\n selector: 're-data-grid',\r\n templateUrl: 'data-grid.component.html',\r\n styleUrl: 'data-grid.component.scss',\r\n imports: [NgTemplateOutlet, DataGridCellComponent, SortIcon, ExpandIcon, CheckboxIcon],\r\n providers: [DataGridVm],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DataGrid<Data extends AnyDict> {\r\n protected defaults = inject(DATA_GRID_CONFIG) || DEFAULT_DATA_GRID_DEFAULTS;\r\n\r\n /**\r\n * Array of data to display in the table.\r\n *\r\n * Each item represents a single row. The component will efficiently render\r\n * only visible rows using virtual scrolling.\r\n */\r\n data = input<Data[]>([]);\r\n\r\n /**\r\n * Column configuration for the table.\r\n *\r\n * Defines how each column should be rendered, sorted, and styled.\r\n * Supports custom templates, sorting keys, and expandable columns.\r\n */\r\n columns = input<GridColumns<Data>>([]);\r\n\r\n /**\r\n * Pagination mode: 'none', 'pagination', or 'infinity'.\r\n *\r\n * - `none` - No pagination, all data is rendered\r\n * - `pagination` - Classic page-based pagination with fixed page size\r\n * - `infinity` - Infinite scroll mode, loads more data as user scrolls\r\n */\r\n mode = input<GridPaginationMode>(this.defaults.mode);\r\n\r\n /**\r\n * Array of pinned rows that remain visible at the top or bottom.\r\n *\r\n * Pinned rows stay fixed while the rest of the content scrolls.\r\n * Useful for totals, summaries, or always-visible items.\r\n */\r\n pinnedRows = input<GridPinnedRow<Data>[]>([]);\r\n\r\n /**\r\n * Function to determine if a row should become sticky at the top.\r\n *\r\n * When provided, rows matching this predicate will stick to the top\r\n * of the scroll area as the user scrolls.\r\n */\r\n isRowSticky = input<((row: Data, index: number) => boolean) | undefined>(undefined);\r\n\r\n /**\r\n * Function to choose a custom template for a row.\r\n *\r\n * If it returns a template, the row will be rendered with it;\r\n * otherwise, the default row rendering is used.\r\n */\r\n getRowTemplate = input<((row: Data, index: number) => TemplateRef<Data> | undefined | null) | undefined>(undefined);\r\n\r\n /**\r\n * Whether to add an index column showing row numbers.\r\n *\r\n * When enabled, it automatically adds a column displaying sequential row numbers.\r\n */\r\n hasIndexColumn = input<boolean, boolean | string | undefined>(this.defaults.hasIndexColumn, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n /**\r\n * Row selection configuration.\r\n *\r\n * Controls whether users can select rows and in what mode:\r\n * - `{ mode: 'none' }` - No selection\r\n * - `{ mode: 'single' }` - Single row selection\r\n * - `{ mode: 'multi' }` - Multiple row selection with checkboxes\r\n *\r\n * When selection is enabled, a `key` must be provided to identify rows.\r\n */\r\n selection = input<GridSelection>(this.defaults.selection);\r\n\r\n /**\r\n * Number of items per page.\r\n *\r\n * Used in pagination and infinity scroll modes to control\r\n * how many rows are loaded at once. Default is 20.\r\n */\r\n pageSize = input<number, number | string | undefined>(this.defaults.pageSize, {\r\n transform: numberAttribute,\r\n });\r\n\r\n /**\r\n * Height of each row in pixels.\r\n *\r\n * Used for virtual scrolling calculations. Must be consistent\r\n * across all rows for accurate scrolling. Default is 40.\r\n */\r\n rowHeight = input<number, number | string | undefined>(this.defaults.rowHeight, { transform: numberAttribute });\r\n\r\n /**\r\n * Grid height configuration.\r\n *\r\n * - `number` - Fixed height in pixels\r\n * - `'full'` - Fill container height (100%), can be managed by host component style\r\n * - `'default'` - Height by CSS var (--re-data-grid-height)\r\n */\r\n height = input<number | 'full' | 'default'>(this.defaults.height);\r\n\r\n /**\r\n * Size of the virtual scroll buffer.\r\n *\r\n * Number of extra rows to render above and below the viewport\r\n * to reduce flickering during fast scrolling. Default is 8.\r\n */\r\n virtualBuffer = input(this.defaults.virtualBuffer);\r\n\r\n /**\r\n * Header group configuration for creating multi-level column headers.\r\n *\r\n * Allows grouping multiple columns under a common header label.\r\n * Each group spans from a starting column to an ending column and can have a custom alignment.\r\n *\r\n * @example\r\n * ```typescript\r\n * headerGroups = [\r\n * {\r\n * key: 'personal-info',\r\n * title: 'Personal Information',\r\n * from: 'name',\r\n * to: 'email',\r\n * align: 'center'\r\n * }\r\n * ];\r\n * ```\r\n */\r\n headerGroups = input<GridHeaderGroup<Data>[]>([]);\r\n\r\n /**\r\n * Loading state indicator.\r\n *\r\n * When true, displays loading template instead of data.\r\n * Useful during async data fetching operations.\r\n */\r\n loading = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n loadingMode = input<'spinner' | 'skeleton'>(this.defaults.loadingMode);\r\n\r\n /**\r\n * Function or property name for getting a unique row key.\r\n *\r\n * Used for efficient change detection and row tracking.\r\n * Can be a property name (string) or a function that returns a unique identifier.\r\n */\r\n rowKey = input<RowKeyFn<Data> | undefined>(undefined);\r\n\r\n /**\r\n * Whether to start a page count from 0 (true) or 1 (false).\r\n *\r\n * Controls the numbering scheme for pagination events.\r\n * Default is true (0-based indexing).\r\n */\r\n pageStartFromZero = input<boolean, boolean | string | undefined>(this.defaults.pageStartFromZero, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n /**\r\n * Event emitted when requesting data for a new page.\r\n *\r\n * Fired in pagination and infinity scroll modes when the user navigates\r\n * to a different page or scrolls near the end of current data.\r\n *\r\n * @example\r\n * ```typescript\r\n * onPageChange(event: GridPageChangeEvent) {\r\n * this.loadData(event.page, event.rows);\r\n * }\r\n * ```\r\n */\r\n pageChange = output<GridPageChangeEvent>();\r\n\r\n /**\r\n * Event emitted when sort order changes.\r\n *\r\n * Fired when a user clicks on a sortable column header.\r\n * Contains the sort key and direction (asc/desc).\r\n *\r\n * @example\r\n * ```typescript\r\n * onSortChange(event: GridSortEvent<User>) {\r\n * this.data = sortBy(this.data, event.key, event.order);\r\n * }\r\n * ```\r\n */\r\n sortChange = output<GridSortEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when selected rows change.\r\n *\r\n * Fired when a user selects or deselects rows.\r\n * Contains an array of currently selected row keys.\r\n */\r\n selectChange = output<GridSelectEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when a row is clicked.\r\n *\r\n * Contains the clicked row data and its index.\r\n */\r\n rowClick = output<GridRowClickEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when a row is right-clicked (context menu).\r\n *\r\n * Contains the clicked row data, its index, and the native mouse event.\r\n */\r\n rowContext = output<GridRowContextEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when a row is double-clicked.\r\n *\r\n * Contains the clicked row data, its index, and the native mouse event.\r\n */\r\n rowDoubleClick = output<GridRowDoubleClickEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when a cell is clicked.\r\n *\r\n * Contains the clicked row, column configuration, and row index.\r\n */\r\n cellClick = output<GridCellClickEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when a cell is right-clicked (context menu).\r\n *\r\n * Contains the clicked row, column configuration, row index, and the native mouse event.\r\n */\r\n cellContext = output<GridCellContextEvent<Data>>();\r\n\r\n /**\r\n * Event emitted when a cell is double-clicked.\r\n *\r\n * Contains the clicked row, column configuration, row index, and the native mouse event.\r\n */\r\n cellDoubleClick = output<GridCellDoubleClickEvent<Data>>();\r\n\r\n vm = inject<DataGridVm<Data>>(DataGridVm<Data>);\r\n selector = new Selector<Data>();\r\n\r\n private rootEl = viewChild<ElementRef<HTMLDivElement>>('root');\r\n private scrollEl = viewChild<ElementRef<HTMLDivElement>>('scroll');\r\n private headerEl = viewChild<ElementRef<HTMLDivElement>>('header');\r\n private ngZone = inject(NgZone);\r\n\r\n private cellTypedSlotRefs = contentChildren(DataGridTypeCellTemplateDirective);\r\n private cellDataSlotRefs = contentChildren(DataGridCellTemplateDirective);\r\n private declarativeColumnRefs = contentChildren(DataGridDeclarativeColumn);\r\n private headerSlotRefs = contentChildren(DataGridHeaderTemplateDirective);\r\n private emptySlotRefs = contentChildren(DataGridCellEmptyDirective);\r\n private loadingSlotRefs = contentChildren(DataGridCellLoadingDirective);\r\n private sortIcSlotRefs = contentChildren(DataGridSortIconDirective);\r\n private expanderIcSlotRefs = contentChildren(DataGridExpanderIconDirective);\r\n private stickyRowSlotRefs = contentChildren(DataGridStickyRowDirective);\r\n private rowSlotRefs = contentChildren(DataGridRowDirective);\r\n\r\n protected emptyTpl = computed<DataGridCellEmptyDirective | undefined>(() => this.emptySlotRefs()?.[0]);\r\n protected loadingTpl = computed(() => this.loadingSlotRefs()?.[0]);\r\n protected sortTpl = computed(() => this.sortIcSlotRefs()?.at(0));\r\n protected expanderTpl = computed(() => this.expanderIcSlotRefs()?.at(0));\r\n protected stickyRowTpl = computed(() => this.stickyRowSlotRefs()?.at(0));\r\n protected rowTpl = computed(() => this.rowSlotRefs()?.at(0));\r\n\r\n protected renderSlots = signal<number[]>([]);\r\n protected renderCount = 0;\r\n private lastStartIndex = -1;\r\n private lastEndIndex = -1;\r\n protected startIndex = 0;\r\n\r\n protected headerHeight = signal(this.defaults.headerHeight);\r\n\r\n protected stickyRowIndex = signal<number | null>(null);\r\n protected stickyRowTopPx = signal(0);\r\n\r\n protected stickyRowData = computed<Data | null>(() => {\r\n const index = this.stickyRowIndex();\r\n const rows = this.data();\r\n\r\n if (index === null || index < 0 || index >= rows.length) {\r\n return null;\r\n }\r\n\r\n return rows[index];\r\n });\r\n\r\n private stickyIndexes = signal<number[]>([]);\r\n\r\n protected expanderMap = signal<Map<DataKey<Data>, boolean>>(new Map());\r\n protected declarativeColumns = computed(() =>\r\n normalizeDeclarativeColumns(\r\n this.declarativeColumnRefs().map((columnRef) => columnRef.toDeclarativeColumn()),\r\n this.rowKey(),\r\n ),\r\n );\r\n protected sourceColumns = computed<GridColumn<Data>[]>(() => {\r\n const declarativeColumns = this.declarativeColumns().columns;\r\n\r\n return declarativeColumns.length ? declarativeColumns : this.columns();\r\n });\r\n protected extendedColumns = computed<GridColumn<Data>[]>(() => {\r\n const hasSelection = this.selection().mode !== 'none';\r\n const hasIndex = this.hasIndexColumn();\r\n\r\n const newColumns: GridColumn<Data>[] = [];\r\n\r\n hasSelection && newColumns.push(GRID_CHECKBOX_COLUMN);\r\n hasIndex && newColumns.push(GRID_INDEX_COLUMN);\r\n\r\n return [...newColumns, ...this.sourceColumns()];\r\n });\r\n /**\r\n * Computed CSS height value based on height setting.\r\n */\r\n styleHeight = computed(() => {\r\n const height = this.height();\r\n\r\n if (typeof height === 'number') {\r\n return `${height}px`;\r\n } else if (height === 'full') {\r\n return '100%';\r\n }\r\n\r\n return 'var(--re-data-grid-height)';\r\n });\r\n\r\n private hideSbTimeout?: AnyType;\r\n private scrollRafId: number | null = null;\r\n private scrollbarRafId: number | null = null;\r\n private stickyRafId: number | null = null;\r\n private lastInfinityPageRequested: number | null = null;\r\n private lastInfinityTotal = -1;\r\n\r\n currentSortField?: string;\r\n currentSortOrder: GridSortOrder = 'asc';\r\n\r\n private subscription = new Subscription();\r\n private observer: ResizeObserver;\r\n private resizeSubject = new Subject<ResizeObserverEntry[]>();\r\n private lastResizeWidth = -1;\r\n private lastResizeHeight = -1;\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n this.initRefs();\r\n this.initHeader();\r\n this.initScroll();\r\n this.initObserver();\r\n });\r\n\r\n afterRenderEffect(() => this.initSelector());\r\n\r\n afterRenderEffect(() => {\r\n this.initVm();\r\n this.initSort();\r\n this.initExpander();\r\n });\r\n\r\n effect(() => {\r\n this.data();\r\n this.rowHeight();\r\n this.pinnedRows();\r\n this.isRowSticky();\r\n this.getRowTemplate();\r\n this.loading();\r\n this.mode();\r\n this.vm.containerWidth();\r\n\r\n this.onVerticalScroll(true);\r\n });\r\n\r\n effect(() => {\r\n const total = this.data()?.length ?? 0;\r\n\r\n if (total !== this.lastInfinityTotal) {\r\n this.lastInfinityTotal = total;\r\n this.lastInfinityPageRequested = null;\r\n }\r\n });\r\n\r\n effect(() => {\r\n const selection = this.selection();\r\n\r\n if ('defaultSelected' in selection) {\r\n this.selector.selectedKeys.set(selection.defaultSelected || []);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const selection = this.selection();\r\n\r\n if (selection.mode === 'none' || !('key' in selection)) {\r\n return;\r\n }\r\n\r\n const data = this.data() ?? [];\r\n const key = selection.key;\r\n const keySet = new Set(data.map((row) => row[key]));\r\n\r\n this.selector.selectedKeys.update((prev) => prev.filter((k) => keySet.has(k)));\r\n });\r\n\r\n effect(() => {\r\n const data = this.data() ?? [];\r\n const predicate = this.isRowSticky();\r\n\r\n if (!predicate || !data.length) {\r\n this.stickyIndexes.set([]);\r\n this.updateStickyFromScroll();\r\n\r\n return;\r\n }\r\n\r\n const indexes: number[] = [];\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n if (predicate(data[i], i)) {\r\n indexes.push(i);\r\n }\r\n }\r\n\r\n this.stickyIndexes.set(indexes);\r\n this.updateStickyFromScroll();\r\n });\r\n\r\n inject(DestroyRef).onDestroy(() => {\r\n this.subscription.unsubscribe();\r\n this.observer?.disconnect();\r\n clearTimeout(this.hideSbTimeout);\r\n this.clearScrollRaf();\r\n this.clearScrollbarRaf();\r\n this.clearStickyRaf();\r\n });\r\n }\r\n\r\n protected resolvePinnedData(pr: GridPinnedRow): Partial<Data> {\r\n return typeof pr.data === 'function' ? pr.data() : (pr.data as Partial<Data>);\r\n }\r\n\r\n /**\r\n * Handles column header click for sorting.\r\n *\r\n * Toggles sort order between ascending and descending for the clicked column.\r\n * If a different column is clicked, it resets to ascending order.\r\n * Emits sortChange event with the current sort state.\r\n *\r\n * @param col - Column configuration that was clicked\r\n */\r\n protected onSort(col: GridColumn<Data>) {\r\n if (!col.sortKey) {\r\n return;\r\n }\r\n\r\n if (this.currentSortField === col.sortKey) {\r\n this.currentSortOrder = this.currentSortOrder === 'asc' ? 'desc' : 'asc';\r\n } else {\r\n this.currentSortField = col.sortKey;\r\n this.currentSortOrder = 'asc';\r\n }\r\n\r\n this.sortChange.emit({ key: this.currentSortField, order: this.currentSortOrder });\r\n }\r\n\r\n /**\r\n * Handles cell click events.\r\n *\r\n * Emits cellClick event and handles row selection if selection mode is enabled.\r\n * Updates the selection state and emits selectChange event accordingly.\r\n *\r\n * @param row - Data row that was clicked\r\n * @param col - Column configuration of the clicked cell\r\n * @param index - Row index in the dataset\r\n * @param event\r\n */\r\n protected onCellClick(row: Data, col: GridColumn<Data>, index: number, event: Event) {\r\n this.cellClick.emit({ row, col, index, event });\r\n\r\n if (this.selection().mode !== 'none') {\r\n const selected = this.selector.select(row);\r\n\r\n this.selectChange.emit({ selected });\r\n }\r\n }\r\n\r\n protected onCellContext(row: Data, col: GridColumn<Data>, index: number, event: MouseEvent) {\r\n this.cellContext.emit({ row, col, index, event });\r\n }\r\n\r\n protected onCellDoubleClick(row: Data, col: GridColumn<Data>, index: number, event: MouseEvent) {\r\n this.cellDoubleClick.emit({ row, col, index, event });\r\n }\r\n\r\n protected isExpandable(column: GridColumn<Data>) {\r\n const keys = this.expanderMap();\r\n\r\n return keys.has(column.key);\r\n }\r\n\r\n /**\r\n * Handles column expand/collapse toggle.\r\n *\r\n * Toggles the expanded state of a column and updates the visibility\r\n * of all dependent columns that reference this column via expandBy property.\r\n *\r\n * @param column - Column configuration to expand or collapse\r\n */\r\n protected onExpand(column: GridColumn<Data>) {\r\n const expanded = !this.expanderMap().get(column.key);\r\n\r\n this.expanderMap.update((prev) => {\r\n const map = new Map(prev);\r\n\r\n map.set(column.key, expanded);\r\n\r\n return map;\r\n });\r\n\r\n const columns = this.extendedColumns().map((col) =>\r\n col.expandBy === column.key ? { ...col, visible: expanded } : col,\r\n );\r\n\r\n this.vm.columns.set(columns);\r\n }\r\n\r\n /**\r\n * Handles vertical scroll events and updates visible rows.\r\n *\r\n * Implements virtual scrolling by calculating which rows should be rendered\r\n * based on the current scroll position. Also handles infinite scroll data loading\r\n * when the user scrolls near the end of available data.\r\n *\r\n * @param initial - Whether this is the initial scroll calculation\r\n */\r\n protected onVerticalScroll(initial = false): void {\r\n const el = this.scrollEl()?.nativeElement;\r\n\r\n if (!el) return;\r\n\r\n const scrollTop = el.scrollTop ?? 0;\r\n const viewportHeight = el.clientHeight ?? 0;\r\n const data = this.data() ?? [];\r\n const total = data.length ?? 0;\r\n const rowHeight = Math.max(1, this.rowHeight());\r\n const virtualBuffer = Math.max(0, this.virtualBuffer());\r\n const pinnedTopH = this.vm.pinnedTop().length * rowHeight;\r\n\r\n const limit = this.mode() === 'pagination';\r\n const cap = limit ? Math.max(1, this.pageSize()) : Number.POSITIVE_INFINITY;\r\n\r\n const viewportRows = Math.ceil(viewportHeight / rowHeight);\r\n const visibleCount = Math.min(viewportRows + virtualBuffer, cap);\r\n\r\n const start = Math.max(0, Math.floor(scrollTop / rowHeight) - Math.floor(virtualBuffer / 2));\r\n const end = Math.min(total, start + visibleCount);\r\n\r\n if (!el || viewportHeight <= 0 || !isFinite(viewportHeight) || !isFinite(rowHeight)) {\r\n const fallbackCount = Math.min(total, Math.max(1, this.pageSize()));\r\n\r\n this.renderCount = fallbackCount;\r\n this.ensureRenderSlots(fallbackCount);\r\n this.updateStickyRow(scrollTop, rowHeight, pinnedTopH);\r\n this.scheduleScrollbarUpdate();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n\r\n return;\r\n }\r\n\r\n if (start === this.lastStartIndex && end === this.lastEndIndex) {\r\n this.scheduleScrollbarUpdate();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n\r\n return;\r\n }\r\n\r\n this.lastStartIndex = start;\r\n this.lastEndIndex = end;\r\n this.startIndex = start;\r\n this.renderCount = Math.max(0, end - start);\r\n this.ensureRenderSlots(this.renderCount);\r\n this.updateStickyRow(scrollTop, rowHeight, pinnedTopH);\r\n\r\n if (!initial && this.mode() === 'infinity') {\r\n const threshold = Math.max(0, total - Math.max(1, Math.floor(visibleCount * 1.5)));\r\n const nearEnd = start + visibleCount >= threshold;\r\n\r\n if (nearEnd && !this.loading()) {\r\n const modifier = this.pageStartFromZero() ? 0 : 1;\r\n const page = Math.floor(total / this.pageSize()) + modifier;\r\n\r\n if (this.lastInfinityPageRequested === page && this.lastInfinityTotal === total) {\r\n return;\r\n }\r\n\r\n this.lastInfinityTotal = total;\r\n this.lastInfinityPageRequested = page;\r\n this.pageChange.emit({ page, rows: this.pageSize() });\r\n }\r\n }\r\n\r\n this.scheduleScrollbarUpdate();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n }\r\n\r\n protected onHorizontalScroll(): void {}\r\n\r\n /**\r\n * Handles mouse down event on scrollbar thumb for drag scrolling.\r\n *\r\n * Initiates dragging mode and sets up mouse move/up event listeners\r\n * to track thumb position and update scroll position accordingly.\r\n * Automatically cleans up listeners when dragging ends.\r\n *\r\n * @param e - Mouse down event from a scrollbar thumb element\r\n */\r\n protected onThumbDown(e: MouseEvent): void {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const el = this.scrollEl()?.nativeElement;\r\n\r\n if (!el) return;\r\n\r\n this.vm.dragging = true;\r\n this.showScrollbar();\r\n\r\n const startY = e.clientY;\r\n const startTop = this.vm.thumbTopPx();\r\n\r\n const state = computeScrollbarState(el.scrollHeight || 1, el.clientHeight || 1, el.scrollTop || 0);\r\n const maxThumbTop = state.maxThumbTop || 1;\r\n const maxScrollTop = state.maxScrollTop || 1;\r\n\r\n const onMove = (ev: MouseEvent) => {\r\n const delta = ev.clientY - startY;\r\n const newTop = clampThumbTop(startTop + delta, maxThumbTop);\r\n\r\n this.vm.thumbTopPx.set(newTop);\r\n el.scrollTop = mapThumbTopToScrollTop(newTop, maxThumbTop, maxScrollTop);\r\n\r\n this.vm.calcScrollbar();\r\n this.showScrollbar();\r\n };\r\n\r\n const onUp = () => {\r\n window.removeEventListener('mousemove', onMove);\r\n window.removeEventListener('mouseup', onUp);\r\n this.vm.dragging = false;\r\n this.hideScrollbarSoon();\r\n };\r\n\r\n window.addEventListener('mousemove', onMove);\r\n window.addEventListener('mouseup', onUp);\r\n }\r\n\r\n protected showScrollbar(): void {\r\n this.vm.scrollbarVisible.set(true);\r\n\r\n clearTimeout(this.hideSbTimeout);\r\n }\r\n\r\n protected hideScrollbarSoon(delay = 1200): void {\r\n if (this.vm.dragging) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.hideSbTimeout);\r\n this.hideSbTimeout = setTimeout(() => this.vm.scrollbarVisible.set(false), delay);\r\n }\r\n\r\n protected trackPinnedRow = (row: GridPinnedRow) => row.order;\r\n\r\n protected cellClass(col: GridColumn<Data>, row: Data): string | undefined {\r\n if (typeof col.cellClass === 'function') {\r\n return col.cellClass(row);\r\n }\r\n\r\n return col.cellClass;\r\n }\r\n\r\n protected ariaSort(col: GridColumn<Data>): 'ascending' | 'descending' | 'none' {\r\n if (this.currentSortField !== col.sortKey) {\r\n return 'none';\r\n }\r\n\r\n return this.currentSortOrder === 'asc' ? 'ascending' : 'descending';\r\n }\r\n\r\n private tooltipEl = viewChild<ElementRef<HTMLDivElement>>('tooltip');\r\n protected tooltipState = signal<TooltipState>({\r\n text: '',\r\n x: 0,\r\n y: 0,\r\n visible: false,\r\n });\r\n\r\n protected resolveTooltip(row: Data, col: GridColumn<Data>): string | TemplateRef<GridTooltipContext<AnyDict>> | null {\r\n const tooltip = col.tooltip;\r\n\r\n if (!tooltip) {\r\n return null;\r\n }\r\n\r\n if (typeof tooltip === 'function') {\r\n const value = tooltip(row);\r\n\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n if (typeof tooltip === 'string') {\r\n return tooltip === '' ? null : tooltip;\r\n }\r\n\r\n return tooltip;\r\n }\r\n\r\n protected showTooltip(event: MouseEvent, row: Data, col: GridColumn<Data>, index: number): void {\r\n const resolved = this.resolveTooltip(row, col);\r\n\r\n if (!resolved) {\r\n return;\r\n }\r\n\r\n const baseValue = 'value' in col ? col.value(row) : row[col.key];\r\n const ctx: GridTooltipContext<AnyDict> = {\r\n $implicit: row,\r\n row,\r\n col: col as GridColumn<AnyDict>,\r\n index,\r\n value: baseValue,\r\n };\r\n\r\n const offset = 12;\r\n const x = event.clientX + offset;\r\n const y = event.clientY + offset;\r\n\r\n if (typeof resolved === 'string') {\r\n this.tooltipState.set({ text: resolved, x, y, visible: true });\r\n } else {\r\n this.tooltipState.set({ tpl: resolved, ctx, x, y, visible: true });\r\n }\r\n\r\n requestAnimationFrame(() => this.positionTooltip());\r\n }\r\n\r\n protected hideTooltip(): void {\r\n if (!this.tooltipState().visible) {\r\n return;\r\n }\r\n\r\n this.tooltipState.update((prev) => ({ ...prev, visible: false }));\r\n }\r\n\r\n private positionTooltip(): void {\r\n const el = this.tooltipEl()?.nativeElement;\r\n const state = this.tooltipState();\r\n\r\n if (!el || !state.visible) {\r\n return;\r\n }\r\n\r\n const rect = el.getBoundingClientRect();\r\n const padding = 8;\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n\r\n let x = state.x;\r\n let y = state.y;\r\n\r\n if (x + rect.width + padding > vw) {\r\n x = Math.max(padding, vw - rect.width - padding);\r\n }\r\n\r\n if (y + rect.height + padding > vh) {\r\n y = Math.max(padding, vh - rect.height - padding);\r\n }\r\n\r\n if (x !== state.x || y !== state.y) {\r\n this.tooltipState.update((prev) => ({ ...prev, x, y }));\r\n }\r\n }\r\n\r\n protected isStickyRowIndex(index: number): boolean {\r\n return this.stickyRowIndex() === index;\r\n }\r\n\r\n protected resolveRowTemplate(row: Data, index: number): TemplateRef<AnyType> | null {\r\n const resolver = this.getRowTemplate();\r\n\r\n if (resolver) {\r\n const resolved = resolver(row, index);\r\n\r\n if (resolved) {\r\n return resolved;\r\n }\r\n }\r\n\r\n return this.rowTpl()?.tpl ?? null;\r\n }\r\n\r\n private initVm(): void {\r\n this.vm.scrollEl.set(this.scrollEl());\r\n this.vm.columns.set(this.extendedColumns());\r\n this.vm.pinnedRows.set(this.pinnedRows());\r\n this.vm.headerGroups.set(this.headerGroups());\r\n queueMicrotask(() => this.initHeader());\r\n }\r\n\r\n private initSelector(): void {\r\n this.selector.data.set(this.data());\r\n this.selector.selection.set(this.selection());\r\n }\r\n\r\n private initRefs(): void {\r\n this.vm.globalTypeCellTpls.clear();\r\n this.vm.globalDataCellTpls.clear();\r\n this.vm.globalRowCellTpls.clear();\r\n\r\n this.cellTypedSlotRefs()?.forEach((dir) =>\r\n this.vm.globalTypeCellTpls.set(dir.type() as GridCellRendererType, dir.tpl),\r\n );\r\n this.cellDataSlotRefs()?.forEach((dir) => this.vm.globalDataCellTpls.set(dir.key(), dir.tpl));\r\n this.declarativeColumns().rowCellTemplatesByKey.forEach((tpl, key) => this.vm.globalRowCellTpls.set(key, tpl));\r\n\r\n const headerMap = new Map<string, TemplateRef<AnyType>>();\r\n\r\n this.headerSlotRefs()?.forEach((h) => headerMap.set(h.key(), h.tpl));\r\n\r\n this.extendedColumns()?.forEach((c) => {\r\n if (!c.headerTemplate && headerMap.has(c.key)) {\r\n c.headerTemplate = headerMap.get(c.key)!;\r\n }\r\n });\r\n }\r\n\r\n private initSort() {\r\n const firstSortable = this.extendedColumns()?.find((c) => !!c.sortKey);\r\n\r\n if (firstSortable) {\r\n this.currentSortField = firstSortable.sortKey;\r\n this.currentSortOrder = 'asc';\r\n }\r\n }\r\n\r\n private initHeader() {\r\n const el = this.headerEl()?.nativeElement;\r\n\r\n if (!el) return;\r\n\r\n this.headerHeight.set(el.offsetHeight);\r\n }\r\n\r\n private initScroll() {\r\n const scrollEl = this.scrollEl()?.nativeElement;\r\n\r\n if (scrollEl) {\r\n const scrollDetector = new ScrollDirectionDetector(scrollEl);\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.subscription.add(fromEvent(scrollEl, 'scroll').subscribe(() => this.scheduleScrollTick(scrollDetector)));\r\n this.subscription.add(fromEvent(scrollEl, 'scroll').subscribe(() => this.scheduleStickyUpdate()));\r\n });\r\n }\r\n\r\n queueMicrotask(() => this.onVerticalScroll(true));\r\n }\r\n\r\n private initObserver() {\r\n const root = this.rootEl();\r\n\r\n if (!root) return;\r\n\r\n this.subscription.add(\r\n this.resizeSubject.pipe(debounceTime(this.defaults.debounce.resize)).subscribe((entries) => {\r\n const rect = entries[0].contentRect;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const widthChanged = width !== this.lastResizeWidth;\r\n const heightChanged = height !== this.lastResizeHeight;\r\n\r\n if (!widthChanged && !heightChanged) {\r\n return;\r\n }\r\n\r\n this.lastResizeWidth = width;\r\n this.lastResizeHeight = height;\r\n\r\n if (widthChanged) {\r\n this.vm.containerWidth.set(width);\r\n queueMicrotask(() => this.initHeader());\r\n }\r\n\r\n if (heightChanged) {\r\n this.onVerticalScroll(true);\r\n }\r\n }),\r\n );\r\n\r\n this.observer = new ResizeObserver((entries) => this.resizeSubject.next(entries));\r\n\r\n this.observer.observe(root.nativeElement);\r\n }\r\n\r\n private initExpander() {\r\n const map: Map<DataKey<Data>, boolean> = new Map();\r\n\r\n const columns = untracked(() =>\r\n this.vm.columns().map((col) => {\r\n col.expandBy && map.set(col.expandBy, false);\r\n\r\n return { ...col, visible: col.expandBy ? false : col.visible };\r\n }),\r\n );\r\n\r\n this.vm.columns.set(columns);\r\n this.expanderMap.set(map);\r\n }\r\n\r\n private scheduleScrollbarUpdate(): void {\r\n if (this.scrollbarRafId !== null) {\r\n return;\r\n }\r\n\r\n this.scrollbarRafId = requestAnimationFrame(() => {\r\n this.scrollbarRafId = null;\r\n this.vm.calcScrollbar();\r\n });\r\n }\r\n\r\n private scheduleScrollTick(detector: ScrollDirectionDetector): void {\r\n if (this.scrollRafId !== null) {\r\n return;\r\n }\r\n\r\n this.scrollRafId = requestAnimationFrame(() => {\r\n this.scrollRafId = null;\r\n const direction = detector.detect();\r\n\r\n this.ngZone.run(() => {\r\n direction === 'vertical' ? this.onVerticalScroll() : this.onHorizontalScroll();\r\n this.hideTooltip();\r\n });\r\n });\r\n }\r\n\r\n private clearScrollRaf(): void {\r\n if (this.scrollRafId !== null) {\r\n cancelAnimationFrame(this.scrollRafId);\r\n this.scrollRafId = null;\r\n }\r\n }\r\n\r\n private ensureRenderSlots(count: number): void {\r\n const current = this.renderSlots();\r\n\r\n if (current.length === count) {\r\n return;\r\n }\r\n\r\n const next = new Array<number>(count);\r\n\r\n for (let i = 0; i < count; i++) {\r\n next[i] = i;\r\n }\r\n\r\n this.renderSlots.set(next);\r\n }\r\n\r\n private clearScrollbarRaf(): void {\r\n if (this.scrollbarRafId !== null) {\r\n cancelAnimationFrame(this.scrollbarRafId);\r\n this.scrollbarRafId = null;\r\n }\r\n }\r\n\r\n private scheduleStickyUpdate(): void {\r\n if (this.stickyRafId !== null) {\r\n return;\r\n }\r\n\r\n this.stickyRafId = requestAnimationFrame(() => {\r\n this.stickyRafId = null;\r\n this.ngZone.run(() => this.updateStickyFromScroll());\r\n });\r\n }\r\n\r\n private clearStickyRaf(): void {\r\n if (this.stickyRafId !== null) {\r\n cancelAnimationFrame(this.stickyRafId);\r\n this.stickyRafId = null;\r\n }\r\n }\r\n\r\n private updateStickyRow(scrollTop: number, rowHeight: number, pinnedTopH: number): void {\r\n const indexes = this.stickyIndexes();\r\n\r\n if (!indexes.length) {\r\n this.stickyRowIndex.set(null);\r\n\r\n return;\r\n }\r\n\r\n const scrollRowIndex = Math.max(0, Math.floor(scrollTop / rowHeight));\r\n const currentIndex = this.findStickyIndexBefore(indexes, scrollRowIndex);\r\n\r\n if (currentIndex === null) {\r\n this.stickyRowIndex.set(null);\r\n\r\n return;\r\n }\r\n\r\n let activeIndex = currentIndex;\r\n const prevIndex = this.stickyRowIndex();\r\n const hysteresisPx = Math.max(1, rowHeight * 0.5);\r\n\r\n if (prevIndex !== null && prevIndex !== currentIndex) {\r\n const boundaryPx = currentIndex * rowHeight;\r\n const delta = Math.abs(scrollTop - boundaryPx);\r\n\r\n if (delta < hysteresisPx) {\r\n activeIndex = prevIndex;\r\n }\r\n }\r\n\r\n const stickyTop = this.headerHeight() + pinnedTopH;\r\n let topPx = scrollTop + stickyTop;\r\n\r\n // Keep the sticky row fixed at the sticky top until the next sticky row replaces it.\r\n topPx = Math.max(topPx, scrollTop + stickyTop);\r\n\r\n this.stickyRowIndex.set(activeIndex);\r\n this.stickyRowTopPx.set(topPx);\r\n }\r\n\r\n private updateStickyFromScroll(): void {\r\n const el = this.scrollEl()?.nativeElement;\r\n\r\n if (!el) return;\r\n\r\n const scrollTop = el.scrollTop ?? 0;\r\n const rowHeight = Math.max(1, this.rowHeight());\r\n const pinnedTopH = this.vm.pinnedTop().length * rowHeight;\r\n\r\n this.updateStickyRow(scrollTop, rowHeight, pinnedTopH);\r\n }\r\n\r\n private findStickyIndexBefore(indexes: number[], index: number): number | null {\r\n let low = 0;\r\n let high = indexes.length - 1;\r\n let result = -1;\r\n\r\n while (low <= high) {\r\n const mid = (low + high) >>> 1;\r\n const value = indexes[mid];\r\n\r\n if (value <= index) {\r\n result = value;\r\n low = mid + 1;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n return result === -1 ? null : result;\r\n }\r\n}\r\n","@let items = data();\r\n@let empty = !loading() && !items?.length;\r\n@let notEmpty = !!items?.length;\r\n@let skeletonRowsCount = 4;\r\n@let skeletonMode = loadingMode() === 'skeleton';\r\n@let spinnerMode = loadingMode() === 'spinner';\r\n@let showInfinitySkeleton = loading() && skeletonMode && mode() === 'infinity';\r\n@let showPaginationSkeleton = loading() && skeletonMode && mode() === 'pagination' && !notEmpty;\r\n@let showSpinnerLoading = loading() && spinnerMode;\r\n@let extraInfinitySkeletonRows = showInfinitySkeleton ? skeletonRowsCount : 0;\r\n\r\n@let pinnedTopH = vm.pinnedTop().length * rowHeight();\r\n@let pinnedBottomH = vm.pinnedBottom().length * rowHeight();\r\n@let rowH = rowHeight();\r\n@let contentW = vm.contentWidth();\r\n@let cols = vm.columnsToShow();\r\n@let stickyTop = pinnedTopH + headerHeight();\r\n@let normalizedHeaderGroups = vm.normalizedHeaderGroups();\r\n@let stickyRow = stickyRowData();\r\n@let stickyIndex = stickyRowIndex();\r\n\r\n<div\r\n #root\r\n class=\"re-dg-root\"\r\n [class.loading]=\"showSpinnerLoading\"\r\n [style.height]=\"styleHeight()\"\r\n role=\"table\"\r\n>\r\n @if (showSpinnerLoading) {\r\n <div class=\"re-dg-loader\">\r\n @let loadingTemplate = loadingTpl();\r\n\r\n @if (loadingTemplate?.tpl) {\r\n <ng-container [ngTemplateOutlet]=\"loadingTemplate!.tpl\" />\r\n } @else {\r\n <span class=\"re-dg-loader-spinner\" aria-label=\"Loading\"></span>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n #scroll\r\n class=\"re-dg-body\"\r\n role=\"rowgroup\"\r\n (mouseenter)=\"showScrollbar()\"\r\n (mouseleave)=\"hideScrollbarSoon()\"\r\n >\r\n <div class=\"re-dg-header\" role=\"rowgroup\">\r\n <div #header class=\"re-dg-header-rows\">\r\n @if (normalizedHeaderGroups.length) {\r\n <div class=\"re-dg-row re-dg-header-group-row\" role=\"row\" [style.width.px]=\"vm.contentWidth()\" [style.min-width.%]=\"100\">\r\n @for (group of normalizedHeaderGroups; track group.key) {\r\n @let groupStickyLeft = !!group.startKey && !!group.endKey && vm.isStickyLeft(group.startKey) && vm.isStickyLeft(group.endKey);\r\n @let groupStickyRight = !!group.startKey && !!group.endKey && vm.isStickyRight(group.startKey) && vm.isStickyRight(group.endKey);\r\n\r\n <div\r\n class=\"re-dg-header-cell re-dg-header-group-cell\"\r\n role=\"columnheader\"\r\n [class.sticky-left]=\"groupStickyLeft\"\r\n [class.sticky-right]=\"groupStickyRight\"\r\n [style.left.px]=\"groupStickyLeft && group.startKey ? vm.stickyOffset(group.startKey, 'left') : null\"\r\n [style.right.px]=\"groupStickyRight && group.endKey ? vm.stickyOffset(group.endKey, 'right') : null\"\r\n [style.width.px]=\"group.widthPx\"\r\n [style.justify-content]=\"group.align || 'left'\"\r\n [title]=\"group.title || ''\"\r\n >\r\n @if (group.titleTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"group.titleTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: group.title || '' }\"\r\n />\r\n } @else {\r\n <span class=\"re-dg-header-text\">{{ group.title || '' }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"re-dg-row re-dg-header-row\" role=\"row\" [style.width.px]=\"vm.contentWidth()\" [style.min-width.%]=\"100\">\r\n @for (col of vm.columnsToShow(); track col.key) {\r\n <div\r\n class=\"re-dg-header-cell\"\r\n role=\"columnheader\"\r\n [class.sortable]=\"!!col.sortKey\"\r\n [class.active-sort]=\"currentSortField && (currentSortField === col.sortKey)\"\r\n [class.sticky-left]=\"vm.isStickyLeft(col.key)\"\r\n [class.sticky-right]=\"vm.isStickyRight(col.key)\"\r\n [style.left.px]=\"vm.stickyOffset(col.key, 'left')\"\r\n [style.right.px]=\"vm.stickyOffset(col.key, 'right')\"\r\n [style.width.px]=\"vm.widthByKey(col.key)\"\r\n [style.min-width.px]=\"col.minWidth || null\"\r\n [style.max-width.px]=\"col.maxWidth || null\"\r\n [style.justify-content]=\"col.align || 'left'\"\r\n [attr.aria-sort]=\"ariaSort(col)\"\r\n [attr.tabindex]=\"col.sortKey ? 0 : -1\"\r\n [title]=\"col.header\"\r\n (click)=\"col.sortKey && onSort(col)\"\r\n (keydown.enter)=\"col.sortKey && onSort(col)\"\r\n >\r\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\r\n @let isMultiSelect = selection().mode === 'multi';\r\n\r\n @if (isCheckbox && isMultiSelect) {\r\n <re-checkbox-ic [state]=\"selector.isAllSelected()\" (click)=\"selector.selectAll()\" />\r\n } @else {\r\n @if (col.headerTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"col.headerTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: col.header }\"\r\n />\r\n } @else {\r\n <span class=\"re-dg-header-text\">{{ col.header }}</span>\r\n }\r\n }\r\n\r\n @if (col.sortKey) {\r\n <span class=\"re-dg-sort-ind\">\r\n @let direction = currentSortField === col.sortKey ? currentSortOrder : undefined;\r\n\r\n @if (sortTpl()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"sortTpl()!.tpl\"\r\n [ngTemplateOutletContext]=\"{ $implicit: direction }\"\r\n />\r\n } @else {\r\n <re-sort-ic [direction]=\"direction\" />\r\n }\r\n </span>\r\n }\r\n\r\n @if (isExpandable(col)) {\r\n <button (click)=\"$event.stopPropagation(); onExpand(col)\">\r\n @let expanded = expanderMap().get(col.key);\r\n\r\n @if (expanderTpl()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"expanderTpl()!.tpl\"\r\n [ngTemplateOutletContext]=\"{ $implicit: expanded }\" />\r\n } @else {\r\n <re-expand-ic [expanded]=\"expanded\" />\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- PINNED TOP ROWS -->\r\n @if (notEmpty) {\r\n @for (pr of vm.pinnedTop(); track trackPinnedRow(pr)) {\r\n <div class=\"re-dg-row re-dg-pinned re-dg-top\" role=\"row\" [style.width.px]=\"contentW\" [style.min-width.%]=\"100\">\r\n @if (pr.rowTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"pr.rowTemplate!\"\r\n [ngTemplateOutletContext]=\"{ $implicit: resolvePinnedData(pr) }\"\r\n />\r\n } @else {\r\n @for (col of cols; track col.key) {\r\n @let stickyLeft = vm.stickyOffset(col.key, 'left');\r\n @let stickyRight = vm.stickyOffset(col.key, 'right');\r\n @let isLeft = vm.isStickyLeft(col.key);\r\n @let isRight = vm.isStickyRight(col.key);\r\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\n [class.sticky-left]=\"isLeft\"\n [class.sticky-right]=\"isRight\"\n [style.left.px]=\"stickyLeft\"\n [style.right.px]=\"stickyRight\"\n [style.justify-items]=\"col.align || 'left'\"\n [style.height.px]=\"rowH\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n (mouseenter)=\"showTooltip($event, $any(resolvePinnedData(pr)), col, -1)\"\n (mouseleave)=\"hideTooltip()\"\n >\n {{ resolvePinnedData(pr)[col.key] ?? '' }}\n </div>\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- STICKY ROW -->\r\n @if (stickyRow && stickyIndex !== null) {\r\n <div\r\n class=\"re-dg-row re-dg-data-row re-dg-sticky-row\"\r\n role=\"row\"\r\n [style.width.px]=\"vm.contentWidth()\"\r\n [style.min-width.%]=\"100\"\r\n [style.height.px]=\"rowHeight()\"\r\n [style.top.px]=\"stickyRowTopPx()\"\r\n [attr.tabindex]=\"0\"\r\n (click)=\"$event.stopPropagation(); rowClick.emit({ row: stickyRow, index: stickyIndex, event: $event })\"\r\n (contextmenu)=\"$event.stopPropagation(); rowContext.emit({ row: stickyRow, index: stickyIndex, event: $event })\"\r\n (dblclick)=\"$event.stopPropagation(); rowDoubleClick.emit({ row: stickyRow, index: stickyIndex, event: $event })\"\r\n (keydown.enter)=\"$event.stopPropagation(); rowClick.emit({ row: stickyRow, index: stickyIndex, event: $event })\"\r\n >\r\n @let stickyTemplate = stickyRowTpl();\r\n @let rowTemplate = resolveRowTemplate(stickyRow, stickyIndex);\r\n\r\n @if (stickyTemplate?.tpl) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"stickyTemplate!.tpl\"\r\n [ngTemplateOutletContext]=\"{ $implicit: stickyRow, index: stickyIndex }\"\r\n />\r\n } @else if (rowTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: stickyRow,\r\n index: stickyIndex,\r\n columns: vm.columnsToShow(),\r\n rowHeight: rowHeight(),\r\n isSticky: true\r\n }\"\r\n />\r\n } @else {\r\n @for (col of vm.columnsToShow(); track col.key) {\r\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\n [class.expanded]=\"!!col.expandBy\"\n [class]=\"cellClass(col, stickyRow)\"\n [class.sticky-left]=\"vm.isStickyLeft(col.key)\"\n [class.sticky-right]=\"vm.isStickyRight(col.key)\"\n [style.left.px]=\"vm.stickyOffset(col.key, 'left')\"\n [style.right.px]=\"vm.stickyOffset(col.key, 'right')\"\n [style.justify-items]=\"col.align || 'left'\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n [attr.tabindex]=\"0\"\n (mouseenter)=\"showTooltip($event, stickyRow, col, stickyIndex)\"\n (mouseleave)=\"hideTooltip()\"\n (click)=\"onCellClick(stickyRow, col, stickyIndex, $event);\"\n (contextmenu)=\"onCellContext(stickyRow, col, stickyIndex, $event)\"\n (dblclick)=\"onCellDoubleClick(stickyRow, col, stickyIndex, $event)\"\n (keydown.enter)=\"onCellClick(stickyRow, col, stickyIndex, $event)\"\n >\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\r\n\r\n @if (isCheckbox) {\r\n <re-checkbox-ic [state]=\"selector.isSelected(stickyRow)\" />\r\n } @else {\r\n <re-data-grid-cell [index]=\"stickyIndex\" [item]=\"stickyRow\" [column]=\"col\" />\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @if (empty) {\r\n @let emptyTemplate = emptyTpl()?.tpl;\r\n\r\n <div class=\"re-dg-empty\">\r\n @if (emptyTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\" />\r\n } @else {\r\n <span class=\"re-dg-empty-text\">{{ defaults.translations.emptyState }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Content -->\r\n @if (notEmpty) {\r\n <div\r\n class=\"re-dg-spacer\"\r\n [style.width.px]=\"contentW\"\r\n [style.height.px]=\"(items.length + extraInfinitySkeletonRows) * rowH - pinnedBottomH\"></div>\r\n\r\n @for (slot of renderSlots(); track slot) {\r\n @let rowIndex = startIndex + slot;\r\n @let row = items[rowIndex];\r\n @let rowTemplate = row ? resolveRowTemplate(row, rowIndex) : null;\r\n\r\n @if (row && !isStickyRowIndex(rowIndex)) {\r\n <div\r\n class=\"re-dg-row re-dg-data-row\"\r\n role=\"row\"\r\n [style.width.px]=\"contentW\"\r\n [style.min-width.%]=\"100\"\r\n [style.height.px]=\"rowH\"\r\n [style.transform]=\"'translateY(' + (rowIndex * rowH + stickyTop) + 'px)'\"\r\n [attr.tabindex]=\"0\"\r\n (click)=\"$event.stopPropagation(); rowClick.emit({ row, index: rowIndex, event: $event })\"\r\n (contextmenu)=\"$event.stopPropagation(); rowContext.emit({ row, index: rowIndex, event: $event })\"\r\n (dblclick)=\"$event.stopPropagation(); rowDoubleClick.emit({ row, index: rowIndex, event: $event })\"\r\n (keydown.enter)=\"$event.stopPropagation(); rowClick.emit({ row, index: rowIndex, event: $event })\"\r\n >\r\n @if (rowTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: row,\r\n index: rowIndex,\r\n columns: vm.columnsToShow(),\r\n rowHeight: rowHeight(),\r\n isSticky: false\r\n }\"\r\n />\r\n } @else {\r\n @for (col of cols; track col.key) {\r\n @let stickyLeft = vm.stickyOffset(col.key, 'left');\r\n @let stickyRight = vm.stickyOffset(col.key, 'right');\r\n @let isLeft = vm.isStickyLeft(col.key);\r\n @let isRight = vm.isStickyRight(col.key);\r\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\n [class.expanded]=\"!!col.expandBy\"\n [class]=\"cellClass(col, row)\"\n [class.sticky-left]=\"isLeft\"\n [class.sticky-right]=\"isRight\"\n [style.left.px]=\"stickyLeft\"\n [style.right.px]=\"stickyRight\"\n [style.justify-items]=\"col.align || 'left'\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n [attr.tabindex]=\"0\"\n (mouseenter)=\"showTooltip($event, row, col, rowIndex)\"\n (mouseleave)=\"hideTooltip()\"\n (click)=\"onCellClick(row, col, rowIndex, $event);\"\n (contextmenu)=\"onCellContext(row, col, rowIndex, $event)\"\n (dblclick)=\"onCellDoubleClick(row, col, rowIndex, $event)\"\n (keydown.enter)=\"onCellClick(row, col, rowIndex, $event)\"\n >\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\r\n\r\n @if (isCheckbox) {\r\n <re-checkbox-ic [state]=\"selector.isSelected(row)\" />\r\n } @else {\r\n <re-data-grid-cell [index]=\"rowIndex\" [item]=\"row\" [column]=\"col\" />\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n }\r\n\r\n @if (showInfinitySkeleton || showPaginationSkeleton) {\r\n @let loadingTemplate = loadingTpl();\r\n\r\n @if (loadingTemplate?.tpl) {\r\n <ng-container [ngTemplateOutlet]=\"loadingTemplate!.tpl\" />\r\n } @else {\r\n @for (si of [0, 1, 2, 3]; track si) {\r\n <div\r\n class=\"re-dg-row re-dg-data-row re-dg-skeleton-row\"\r\n role=\"row\"\r\n [style.width.px]=\"contentW\"\r\n [style.min-width.%]=\"100\"\r\n [style.height.px]=\"rowH\"\r\n [style.transform]=\"'translateY(' + (((showInfinitySkeleton ? items.length : 0) + si) * rowH + stickyTop) + 'px)'\"\r\n >\r\n <span class=\"re-dg-skeleton-row-line\"></span>\r\n </div>\r\n }\r\n }\r\n }\r\n\r\n <!-- PINNED BOTTOM ROWS -->\r\n @if (notEmpty) {\r\n <div class=\"re-dg-footer\" role=\"rowgroup\">\r\n @for (pr of vm.pinnedBottom(); track trackPinnedRow(pr)) {\r\n <div class=\"re-dg-row re-dg-pinned re-dg-bottom\" role=\"row\" [style.width.px]=\"contentW\" [style.min-width.%]=\"100\">\r\n @if (pr.rowTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"pr.rowTemplate!\"\r\n [ngTemplateOutletContext]=\"{ $implicit: resolvePinnedData(pr) }\"\r\n />\r\n } @else {\r\n @for (col of cols; track col.key) {\r\n @let stickyLeft = vm.stickyOffset(col.key, 'left');\r\n @let stickyRight = vm.stickyOffset(col.key, 'right');\r\n @let isLeft = vm.isStickyLeft(col.key);\r\n @let isRight = vm.isStickyRight(col.key);\r\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\n [class.sticky-left]=\"isLeft\"\n [class.sticky-right]=\"isRight\"\n [style.left.px]=\"stickyLeft\"\n [style.right.px]=\"stickyRight\"\n [style.justify-items]=\"col.align || 'left'\"\n [style.height.px]=\"rowH\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n (mouseenter)=\"showTooltip($event, $any(resolvePinnedData(pr)), col, -1)\"\n (mouseleave)=\"hideTooltip()\"\n >\n {{ resolvePinnedData(pr)[col.key] ?? '' }}\n </div>\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @let tooltipStateValue = tooltipState();\n <div\n class=\"re-dg-tooltip\"\n #tooltip\n [class.visible]=\"tooltipStateValue.visible\"\n [style.left.px]=\"tooltipStateValue.x\"\n [style.top.px]=\"tooltipStateValue.y\"\n >\n @if (tooltipStateValue.tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tooltipStateValue.tpl\"\n [ngTemplateOutletContext]=\"tooltipStateValue.ctx\"\n />\n } @else {\n {{ tooltipStateValue.text }}\n }\n </div>\n\n <!-- Overlay scrollbar -->\n <div class=\"re-dg-scrollbar\" [class.visible]=\"vm.scrollbarVisible()\">\n <div\r\n class=\"re-dg-scrollbar-thumb\"\r\n role=\"scrollbar\"\r\n aria-orientation=\"vertical\"\r\n aria-hidden=\"false\"\r\n [style.height.px]=\"vm.thumbHeightPx()\"\r\n [style.transform]=\"'translateY(' + vm.thumbTopPx() + 'px)'\"\r\n (mousedown)=\"onThumbDown($event)\"\r\n ></div>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["clamp"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid-column-manager.d.ts","sources":["../../../../libs/data-grid/column-manager/src/data-grid.column-manager.models.ts","../../../../libs/data-grid/column-manager/src/data-grid.column-manager.component.ts"],"sourcesContent":[null,null],"names":[],"mappings":";;;;AAAM;;AC8BN;AAEA;AA4SE;AAEA;;;;;AACmH;AACnH;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;AAgCA;;;AAkBA;AAMA;AAeA;;;;;;AAyGA;;AAkCA;AAYA;AAIA;;;AAID;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid-paginator.d.ts","sources":["../../../../libs/data-grid/paginator/src/directives/paginator.directive.ts","../../../../libs/data-grid/paginator/src/data-grid.paginator.ts","../../../../libs/data-grid/paginator/src/data-grid.models.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;AAGA;AAIE;;;AACD;AAED;AAIE;;;AACD;AAED;AAIE;;;AACD;;ACVD;AAqME;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;;AAuBA;AAMA;AAwCA;;;;AAuBD;;AC3TK;;;;;;AAOA;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid-ui.d.ts","sources":["../../../../libs/data-grid/ui/src/dropdown/data-grid-dropdown.models.ts","../../../../libs/data-grid/ui/src/dropdown/data-grid-dropdown.component.ts"],"sourcesContent":[null,null],"names":[],"mappings":";;;AAEM;;;;;;ACIN;AAsIE;AACA;AACA;AACA;AAEA;;;;;AAmBA;;;;AAmBD;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid.d.ts","sources":["../../../../libs/data-grid/src/directives/type-cell.directive.ts","../../../../libs/data-grid/src/directives/data-cell.directive.ts","../../../../libs/data-grid/src/directives/header.directive.ts","../../../../libs/data-grid/src/utils.models.ts","../../../../libs/data-grid/src/data-grid.models.columns.ts","../../../../libs/data-grid/src/directives/row.directive.ts","../../../../libs/data-grid/src/directives/declarative-column.directive.ts","../../../../libs/data-grid/src/directives/declarative-template.directive.ts","../../../../libs/data-grid/src/directives/placeholders.directive.ts","../../../../libs/data-grid/src/directives/sticky-row.directive.ts","../../../../libs/data-grid/src/directives/icons.directive.ts","../../../../libs/data-grid/src/data-grid.models.ts","../../../../libs/data-grid/src/providers/data-grid-config.provider.ts","../../../../libs/data-grid/src/helpers/declarative-columns/declarative-columns.helper.ts","../../../../libs/data-grid/src/data-grid.models.events.ts","../../../../libs/data-grid/src/data-grid.models.headers.ts","../../../../libs/data-grid/src/data-grid.vm.ts","../../../../libs/data-grid/src/helpers/selection/selection.helper.ts","../../../../libs/data-grid/src/data-grid.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|