@reforgium/data-grid 1.0.0 → 1.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-data-grid.mjs","sources":["../../../../libs/data-grid/src/directives/type-cell.directive.ts","../../../../libs/data-grid/src/directives/header.directive.ts","../../../../libs/data-grid/src/directives/placeholders.directive.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/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/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';\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridTypeCell]' })\r\nexport class DataGridTypeCellTemplateDirective {\r\n type = input<string>('', { alias: 'ssDataGridTypeCell' });\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';\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridHeader]' })\r\nexport class DataGridHeaderTemplateDirective {\r\n key = input<string>('', { alias: 'ssDataGridHeader' });\r\n\r\n public tpl = inject(TemplateRef<HeaderTemplateData>);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridEmpty]' })\r\nexport class DataGridCellEmptyDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridLoading]' })\r\nexport class DataGridCellLoadingDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n","import { GridColumn } from './data-grid.models';\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: true,\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: true,\r\n};\r\n","import { ColumnLike, LayoutResult } from './layout-columns.models';\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\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\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\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\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\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\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\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\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\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","import { ScrollbarState } from './scrollbar.models';\r\n\r\n/**\r\n * Вычисляет визуальное состояние оверлейного скроллбара. Все аргументы - сырые DOM-числа.\r\n * Возвращает состояние, описывающее видимость, размер и позицию ползунка.\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/** Преобразует позицию ползунка thumbTop (0..maxThumbTop) в позицию прокрутки 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/** Ограничивает новую позицию ползунка в пределах 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) return min;\r\n if (v > max) return max;\r\n\r\n return v;\r\n}\r\n","export type ScrollDirection = 'horizontal' | 'vertical' | 'none';\r\n\r\nexport class ScrollDirectionDetector {\r\n #prevTop = 0;\r\n #prevLeft = 0;\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 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","import { GridColumn } from '../../data-grid.models';\r\nimport { AnyDict } from '../../utils.models';\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 middleIndex = Math.floor(visible.length / 2);\r\n const left = visible.slice(0, middleIndex).filter((col) => col.sticky);\r\n const right = visible.slice(middleIndex, visible.length).filter((col) => col.sticky);\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 { GridCellRendererType, GridColumn, GridPinnedRow } from './data-grid.models';\r\nimport { layoutColumns } from './helpers/layout-columns';\r\nimport { computeScrollbarState } from './helpers/scrollbar';\r\nimport { splitSticky } from './helpers/sticky';\r\nimport { AnyDict } from './utils.models';\r\n\r\n@Injectable()\r\nexport class DataGridVm<Data extends AnyDict> {\r\n scrollEl = signal<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n columns = signal<GridColumn<Data>[]>([]);\r\n pinnedRows = signal<GridPinnedRow<Data>[]>([]);\r\n\r\n containerWidth = signal<number>(0);\r\n scrollbarVisible = signal(false);\r\n thumbHeightPx = signal(0);\r\n thumbTopPx = signal(0);\r\n dragging = false;\r\n\r\n globalTypeCellTpls = new Map<GridCellRendererType, 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\r\n columnsToShow = computed<GridColumn<Data>[]>(() => {\r\n this.containerWidth();\r\n\r\n const cols = this.columns() ?? [];\r\n const { left, visible, right } = splitSticky<Data>(cols);\r\n\r\n this.recomputeStickyOffsets(left, right);\r\n\r\n return visible;\r\n });\r\n\r\n pinnedTop = computed<GridPinnedRow<Data>[]>(() =>\r\n (this.pinnedRows() ?? []).filter((r) => r.position === 'top').sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\r\n );\r\n\r\n pinnedBottom = computed<GridPinnedRow<Data>[]>(() =>\r\n (this.pinnedRows() ?? []).filter((r) => r.position === 'bottom').sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\r\n );\r\n\r\n constructor() {\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\r\n widthByKey = (key: string) => this.#byKey()[key] ?? this.#defaultColWidth;\r\n isStickyLeft = (key: string) => this.#stickyLeftMap.has(key);\r\n isStickyRight = (key: string) => this.#stickyRightMap.has(key);\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 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","import { DatePipe, DecimalPipe, NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, inject, input } from '@angular/core';\r\n\r\nimport { GridColumn } from './data-grid.models';\r\nimport { DataGridVm } from './data-grid.vm';\r\nimport { AnyDict } from './utils.models';\r\n\r\n@Component({\r\n selector: 're-data-grid-cell',\r\n template: `\r\n @let row = item();\r\n @let col = column();\r\n @let val = value();\r\n\r\n @switch (type()) {\r\n @case ('tpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"$any(col).renderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col, index }\"\r\n />\r\n }\r\n @case ('globalTypeTpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"vm.globalTypeCellTpls.get($any(col).type)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col }\"\r\n />\r\n }\r\n @case ('date') {\r\n {{ val | date }}\r\n }\r\n @case ('number') {\r\n {{ val | number }}\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 index = input.required<number>();\r\n item = input.required<Data>();\r\n column = input.required<GridColumn<Data>>();\r\n\r\n vm = inject(DataGridVm);\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 return 'type' in col ? col['type'] : 'plain';\r\n });\r\n\r\n value = computed(() => {\r\n const col = this.column();\r\n const row = this.item();\r\n\r\n return 'value' in col ? col.value(row) : row[col.key];\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\nexport class Selector<Data extends AnyDict> {\r\n data = signal<Data[]>([]);\r\n selection = signal<GridSelection>({ mode: 'none' });\r\n\r\n selectedKeys = signal<DataKey<Data>[]>([]);\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 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 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 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(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 Component,\r\n computed,\r\n contentChildren,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\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 { auditTime, fromEvent, Subscription } from 'rxjs';\r\n\r\nimport { GRID_CHECKBOX_COLUMN, GRID_INDEX_COLUMN } from './data-grid.constants';\r\nimport {\r\n GridCellClickEvent,\r\n GridPageChangeEvent,\r\n GridRowClickEvent,\r\n GridSelectEvent,\r\n GridSortEvent,\r\n} from './data-grid.events.models';\r\nimport {\r\n GridCellRendererType,\r\n GridColumn,\r\n GridPaginationMode,\r\n GridPinnedRow,\r\n GridSelection,\r\n GridSortOrder,\r\n} from './data-grid.models';\r\nimport { DataGridVm } from './data-grid.vm';\r\nimport { DataGridCellComponent } from './data-grid-cell.component';\r\nimport { DataGridHeaderTemplateDirective } from './directives/header.directive';\r\nimport { DataGridCellEmptyDirective, DataGridCellLoadingDirective } from './directives/placeholders.directive';\r\nimport { DataGridTypeCellTemplateDirective } from './directives/type-cell.directive';\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 { AnyDict, AnyType, DataKey, RowKeyFn } from './utils.models';\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})\r\nexport class DataGrid<Data extends AnyDict> {\r\n /** Массив данных для отображения в таблице */\r\n data = input<Data[]>([]);\r\n /** Конфигурация колонок таблицы */\r\n columns = input<GridColumn<Data>[]>([]);\r\n /** Режим пагинации: 'none', 'pagination' или 'infinity' */\r\n mode = input<GridPaginationMode>('none');\r\n\r\n /** Массив закрепленных строк */\r\n pinnedRows = input<GridPinnedRow<Data>[]>([]);\r\n\r\n /** Добавить ли номерную колонку */\r\n hasIndexColumn = input<boolean, string>(false, { transform: booleanAttribute });\r\n\r\n /** Поддержка выбора строк */\r\n selection = input<GridSelection>({ mode: 'none' });\r\n\r\n /** Количество элементов на странице */\r\n pageSize = input<number, string>(20, { transform: numberAttribute });\r\n /** Высота строки в пикселях */\r\n rowHeight = input<number, string>(40, { transform: numberAttribute });\r\n /** Заполнять ли доступную высоту */\r\n fillHeight = input<boolean, string>(true, { transform: booleanAttribute });\r\n /** Размер буфера виртуального скролла */\r\n virtualBuffer = input(6);\r\n\r\n /** Состояние загрузки данных */\r\n loading = input<boolean, string>(false, { transform: booleanAttribute });\r\n /** Функция или имя свойства для получения уникального ключа строки */\r\n rowKey = input<RowKeyFn<Data> | undefined>(undefined);\r\n /** Начинать отсчёт пагинации с 1 (false) или 0 (true) */\r\n pageStartFromZero = input<boolean, string>(true, { transform: booleanAttribute });\r\n\r\n /** Событие запроса данных */\r\n pageChange = output<GridPageChangeEvent>();\r\n /** Событие изменения сортировки */\r\n sortChange = output<GridSortEvent<Data>>();\r\n /** Событие изменения выбранных строк */\r\n selectChange = output<GridSelectEvent<Data>>();\r\n /** Событие клика по строке */\r\n rowClick = output<GridRowClickEvent<Data>>();\r\n /** Событие клика по ячейке */\r\n cellClick = output<GridCellClickEvent<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\r\n private cellSlotRefs = contentChildren(DataGridTypeCellTemplateDirective);\r\n private headerSlotRefs = contentChildren(DataGridHeaderTemplateDirective);\r\n private emptySlotRefs = contentChildren(DataGridCellEmptyDirective);\r\n private loadingSlotRefs = contentChildren(DataGridCellLoadingDirective);\r\n\r\n protected emptyTpl = computed<DataGridCellEmptyDirective | null>(() => this.emptySlotRefs()?.[0]);\r\n protected loadingTpl = computed<DataGridCellLoadingDirective | null>(() => this.loadingSlotRefs()?.[0]);\r\n\r\n protected visibleRows = signal<Data[]>([]);\r\n protected startIndex = 0;\r\n\r\n protected headerHeight = signal(40);\r\n\r\n protected expanderMap = signal<Map<DataKey<Data>, boolean>>(new Map());\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.columns()];\r\n });\r\n\r\n private hideSbTimeout?: AnyType;\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\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.vm.containerWidth();\r\n\r\n this.onVerticalScroll(true);\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 inject(DestroyRef).onDestroy(() => {\r\n this.subscription.unsubscribe();\r\n this.observer?.disconnect();\r\n clearTimeout(this.hideSbTimeout);\r\n });\r\n }\r\n\r\n protected get styleHeight(): string | null {\r\n return this.fillHeight() ? null : 'auto';\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 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 protected onCellClick(row: Data, col: GridColumn<Data>, index: number) {\r\n this.cellClick.emit({ row, col, index });\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 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 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 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\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 this.visibleRows.set(data);\r\n this.vm.calcScrollbar();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n\r\n return;\r\n }\r\n\r\n this.startIndex = start;\r\n this.visibleRows.set(data.slice(start, end));\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 this.pageChange.emit({ page, rows: this.pageSize() });\r\n }\r\n }\r\n\r\n this.vm.calcScrollbar();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n }\r\n\r\n protected onHorizontalScroll(): void {}\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 // todo\r\n protected trackPinnedRow = (row: GridPinnedRow) => row.order;\r\n\r\n protected trackByRow = (row: Data) => {\r\n const rowKey = this.rowKey();\r\n\r\n if (!rowKey) {\r\n return row;\r\n }\r\n\r\n return typeof rowKey === 'function' ? rowKey(row) : row[rowKey];\r\n };\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 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 }\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.cellSlotRefs()?.forEach((dir) => this.vm.globalTypeCellTpls.set(dir.type() as GridCellRendererType, dir.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.subscription = fromEvent(scrollEl, 'scroll')\r\n .pipe(auditTime(16))\r\n .subscribe(() => {\r\n const direction = scrollDetector.detect();\r\n\r\n direction === 'vertical' ? this.onVerticalScroll() : this.onHorizontalScroll();\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.observer = new ResizeObserver((entries) => {\r\n const width = entries[0].contentRect.width;\r\n\r\n this.onVerticalScroll(true);\r\n this.onHorizontalScroll();\r\n this.vm.calcScrollbar();\r\n this.vm.containerWidth.set(width);\r\n });\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","@let items = data();\n@let empty = !loading() && !items?.length;\n@let notEmpty = !!items?.length;\n\n@let pinnedTopH = vm.pinnedTop().length * rowHeight();\n@let pinnedBottomH = vm.pinnedBottom().length * rowHeight();\n\n<div\n #root\n class=\"re-dg-root\"\n [class.fill]=\"fillHeight()\"\n [class.loading]=\"loading()\"\n [style.height]=\"styleHeight\"\n role=\"table\"\n>\n @if (loading()) {\n <div class=\"re-dg-loader\">\n @let loadingTemplate = loadingTpl();\n\n @if (loadingTemplate?.tpl) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate!.tpl\" />\n } @else {\n <span class=\"re-dg-loader-text\">Загрузка…</span>\n }\n </div>\n }\n\n <div\n #scroll\n class=\"re-dg-body\"\n role=\"rowgroup\"\n (mouseenter)=\"showScrollbar()\"\n (mouseleave)=\"hideScrollbarSoon()\"\n >\n <div class=\"re-dg-header\" role=\"rowgroup\">\n <div #header class=\"re-dg-row re-dg-header-row\" role=\"row\">\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-header-cell\"\n role=\"columnheader\"\n [class.sortable]=\"!!col.sortKey\"\n [class.active-sort]=\"currentSortField && (currentSortField === col.sortKey)\"\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.width.px]=\"vm.widthByKey(col.key)\"\n [style.min-width.px]=\"col.minWidth || null\"\n [style.max-width.px]=\"col.maxWidth || null\"\n [style.justify-content]=\"col.align || 'left'\"\n [attr.aria-sort]=\"ariaSort(col)\"\n [attr.tabindex]=\"col.sortKey ? 0 : -1\"\n [title]=\"col.header\"\n (click)=\"col.sortKey && onSort(col)\"\n (keydown.enter)=\"col.sortKey && onSort(col)\"\n >\n {{currentSortField }} {{ col.sortKey}}\n @if (col.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col.header }\"\n />\n } @else {\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\n @let isMultiSelect = selection().mode === 'multi';\n\n @if (isCheckbox && isMultiSelect) {\n <re-checkbox-ic mixable [state]=\"selector.isAllSelected()\" (click)=\"selector.selectAll()\" />\n } @else {\n <span class=\"re-dg-header-text\">{{ col.header }}</span>\n }\n\n @if (col.sortKey) {\n <span class=\"re-dg-sort-ind\">\n <re-sort-ic [direction]=\"currentSortField === col.sortKey ? currentSortOrder : 'desc'\" />\n </span>\n }\n\n @if (isExpandable(col)) {\n <button (click)=\"$event.stopPropagation(); onExpand(col)\">\n <re-expand-ic [expanded]=\"expanderMap().get(col.key)\" />\n </button>\n }\n }\n </div>\n }\n </div>\n\n <!-- PINNED TOP ROWS -->\n @if (notEmpty) {\n @for (pr of vm.pinnedTop(); track trackPinnedRow(pr)) {\n <div class=\"re-dg-row re-dg-pinned re-dg-top\" role=\"row\">\n @if (pr.rowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"pr.rowTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: resolvePinnedData(pr) }\"\n />\n } @else {\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\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.height.px]=\"rowHeight()\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n >\n {{ resolvePinnedData(pr)[col.key] ?? '' }}\n </div>\n }\n }\n </div>\n }\n }\n </div>\n\n @if (empty) {\n @let emptyTemplate = emptyTpl()?.tpl;\n\n <div class=\"re-dg-empty\">\n @if (emptyTemplate) {\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\" />\n } @else {\n <span class=\"re-dg-empty-text\">Нет данных</span>\n }\n </div>\n }\n\n <!-- Content -->\n @if (notEmpty) {\n <div class=\"re-dg-spacer\" [style.height.px]=\"items.length * rowHeight() - pinnedBottomH\"></div>\n\n @for (row of visibleRows(); track trackByRow(row); let vi = $index) {\n <div\n class=\"re-dg-row re-dg-data-row\"\n role=\"row\"\n [style.height.px]=\"rowHeight()\"\n [style.top.px]=\"(startIndex + vi) * rowHeight() + pinnedTopH + headerHeight()\"\n [attr.tabindex]=\"0\"\n (click)=\"$event.stopPropagation(); rowClick.emit({ row, index: startIndex + vi })\"\n (keydown.enter)=\"$event.stopPropagation(); rowClick.emit({ row, index: startIndex + vi })\"\n >\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\n [class]=\"cellClass(col, row)\"\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 (click)=\"onCellClick(row, col, startIndex + vi);\"\n (keydown.enter)=\"onCellClick(row, col, startIndex + vi)\"\n >\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\n\n @if (isCheckbox) {\n <re-checkbox-ic mixable=\"false\" [state]=\"selector.isSelected(row)\" />\n } @else {\n <re-data-grid-cell [index]=\"startIndex + vi\" [item]=\"row\" [column]=\"col\" />\n }\n </div>\n }\n </div>\n }\n }\n\n <!-- PINNED BOTTOM ROWS -->\n @if (notEmpty) {\n <div class=\"re-dg-footer\" role=\"rowgroup\">\n @for (pr of vm.pinnedBottom(); track trackPinnedRow(pr)) {\n <div class=\"re-dg-row re-dg-pinned re-dg-bottom\" role=\"row\">\n @if (pr.rowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"pr.rowTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: resolvePinnedData(pr) }\"\n />\n } @else {\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\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.height.px]=\"rowHeight()\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n >\n {{ resolvePinnedData(pr)[col.key] ?? '' }}\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Overlay scrollbar -->\n <div class=\"re-dg-scrollbar\" [class.visible]=\"vm.scrollbarVisible()\">\n <div\n class=\"re-dg-scrollbar-thumb\"\n role=\"scrollbar\"\n aria-orientation=\"vertical\"\n aria-hidden=\"false\"\n [style.height.px]=\"vm.thumbHeightPx()\"\n [style.transform]=\"'translateY(' + vm.thumbTopPx() + 'px)'\"\n (mousedown)=\"onThumbDown($event)\"\n ></div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["clamp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reforgium-data-grid.mjs","sources":["../../../../libs/data-grid/src/directives/type-cell.directive.ts","../../../../libs/data-grid/src/directives/header.directive.ts","../../../../libs/data-grid/src/directives/placeholders.directive.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/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/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';\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridTypeCell]' })\r\nexport class DataGridTypeCellTemplateDirective {\r\n type = input<string>('', { alias: 'ssDataGridTypeCell' });\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';\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridHeader]' })\r\nexport class DataGridHeaderTemplateDirective {\r\n key = input<string>('', { alias: 'ssDataGridHeader' });\r\n\r\n public tpl = inject(TemplateRef<HeaderTemplateData>);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridEmpty]' })\r\nexport class DataGridCellEmptyDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n\r\n@Directive({ selector: 'ng-template[ssDataGridLoading]' })\r\nexport class DataGridCellLoadingDirective {\r\n public tpl = inject(TemplateRef<{ $implicit: boolean }>);\r\n}\r\n","import { GridColumn } from './data-grid.models';\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: true,\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: true,\r\n};\r\n","import { ColumnLike, LayoutResult } from './layout-columns.models';\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\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\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\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\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\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\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\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\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\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","import { ScrollbarState } from './scrollbar.models';\r\n\r\n/**\r\n * Вычисляет визуальное состояние оверлейного скроллбара. Все аргументы - сырые DOM-числа.\r\n * Возвращает состояние, описывающее видимость, размер и позицию ползунка.\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/** Преобразует позицию ползунка thumbTop (0..maxThumbTop) в позицию прокрутки 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/** Ограничивает новую позицию ползунка в пределах 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) return min;\r\n if (v > max) return max;\r\n\r\n return v;\r\n}\r\n","export type ScrollDirection = 'horizontal' | 'vertical' | 'none';\r\n\r\nexport class ScrollDirectionDetector {\r\n #prevTop = 0;\r\n #prevLeft = 0;\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 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","import { GridColumn } from '../../data-grid.models';\r\nimport { AnyDict } from '../../utils.models';\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 middleIndex = Math.floor(visible.length / 2);\r\n const left = visible.slice(0, middleIndex).filter((col) => col.sticky);\r\n const right = visible.slice(middleIndex, visible.length).filter((col) => col.sticky);\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 { GridCellRendererType, GridColumn, GridPinnedRow } from './data-grid.models';\r\nimport { layoutColumns } from './helpers/layout-columns';\r\nimport { computeScrollbarState } from './helpers/scrollbar';\r\nimport { splitSticky } from './helpers/sticky';\r\nimport { AnyDict } from './utils.models';\r\n\r\n@Injectable()\r\nexport class DataGridVm<Data extends AnyDict> {\r\n scrollEl = signal<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n columns = signal<GridColumn<Data>[]>([]);\r\n pinnedRows = signal<GridPinnedRow<Data>[]>([]);\r\n\r\n containerWidth = signal<number>(0);\r\n scrollbarVisible = signal(false);\r\n thumbHeightPx = signal(0);\r\n thumbTopPx = signal(0);\r\n dragging = false;\r\n\r\n globalTypeCellTpls = new Map<GridCellRendererType, 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\r\n columnsToShow = computed<GridColumn<Data>[]>(() => {\r\n this.containerWidth();\r\n\r\n const cols = this.columns() ?? [];\r\n const { left, visible, right } = splitSticky<Data>(cols);\r\n\r\n this.recomputeStickyOffsets(left, right);\r\n\r\n return visible;\r\n });\r\n\r\n pinnedTop = computed<GridPinnedRow<Data>[]>(() =>\r\n (this.pinnedRows() ?? []).filter((r) => r.position === 'top').sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\r\n );\r\n\r\n pinnedBottom = computed<GridPinnedRow<Data>[]>(() =>\r\n (this.pinnedRows() ?? []).filter((r) => r.position === 'bottom').sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\r\n );\r\n\r\n constructor() {\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\r\n widthByKey = (key: string) => this.#byKey()[key] ?? this.#defaultColWidth;\r\n isStickyLeft = (key: string) => this.#stickyLeftMap.has(key);\r\n isStickyRight = (key: string) => this.#stickyRightMap.has(key);\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 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","import { DatePipe, DecimalPipe, NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, inject, input } from '@angular/core';\r\n\r\nimport { GridColumn } from './data-grid.models';\r\nimport { DataGridVm } from './data-grid.vm';\r\nimport { AnyDict } from './utils.models';\r\n\r\n@Component({\r\n selector: 're-data-grid-cell',\r\n template: `\r\n @let row = item();\r\n @let col = column();\r\n @let val = value();\r\n\r\n @switch (type()) {\r\n @case ('tpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"$any(col).renderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col, index }\"\r\n />\r\n }\r\n @case ('globalTypeTpl') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"vm.globalTypeCellTpls.get($any(col).type)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: val, value: val, row, col }\"\r\n />\r\n }\r\n @case ('date') {\r\n {{ val | date }}\r\n }\r\n @case ('number') {\r\n {{ val | number }}\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 index = input.required<number>();\r\n item = input.required<Data>();\r\n column = input.required<GridColumn<Data>>();\r\n\r\n vm = inject(DataGridVm);\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 return 'type' in col ? col['type'] : 'plain';\r\n });\r\n\r\n value = computed(() => {\r\n const col = this.column();\r\n const row = this.item();\r\n\r\n return 'value' in col ? col.value(row) : row[col.key];\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\nexport class Selector<Data extends AnyDict> {\r\n data = signal<Data[]>([]);\r\n selection = signal<GridSelection>({ mode: 'none' });\r\n\r\n selectedKeys = signal<DataKey<Data>[]>([]);\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 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 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 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 Component,\r\n computed,\r\n contentChildren,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\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 { auditTime, fromEvent, Subscription } from 'rxjs';\r\n\r\nimport { GRID_CHECKBOX_COLUMN, GRID_INDEX_COLUMN } from './data-grid.constants';\r\nimport {\r\n GridCellClickEvent,\r\n GridPageChangeEvent,\r\n GridRowClickEvent,\r\n GridSelectEvent,\r\n GridSortEvent,\r\n} from './data-grid.events.models';\r\nimport {\r\n GridCellRendererType,\r\n GridColumn,\r\n GridPaginationMode,\r\n GridPinnedRow,\r\n GridSelection,\r\n GridSortOrder,\r\n} from './data-grid.models';\r\nimport { DataGridVm } from './data-grid.vm';\r\nimport { DataGridCellComponent } from './data-grid-cell.component';\r\nimport { DataGridHeaderTemplateDirective } from './directives/header.directive';\r\nimport { DataGridCellEmptyDirective, DataGridCellLoadingDirective } from './directives/placeholders.directive';\r\nimport { DataGridTypeCellTemplateDirective } from './directives/type-cell.directive';\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 { AnyDict, AnyType, DataKey, RowKeyFn } from './utils.models';\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})\r\nexport class DataGrid<Data extends AnyDict> {\r\n /** Массив данных для отображения в таблице */\r\n data = input<Data[]>([]);\r\n /** Конфигурация колонок таблицы */\r\n columns = input<GridColumn<Data>[]>([]);\r\n /** Режим пагинации: 'none', 'pagination' или 'infinity' */\r\n mode = input<GridPaginationMode>('none');\r\n\r\n /** Массив закрепленных строк */\r\n pinnedRows = input<GridPinnedRow<Data>[]>([]);\r\n\r\n /** Добавить ли номерную колонку */\r\n hasIndexColumn = input<boolean, number | string | undefined>(false, { transform: booleanAttribute });\r\n\r\n /** Поддержка выбора строк */\r\n selection = input<GridSelection>({ mode: 'none' });\r\n\r\n /** Количество элементов на странице */\r\n pageSize = input<number, number | string | undefined>(20, { transform: numberAttribute });\r\n /** Высота строки в пикселях */\r\n rowHeight = input<number, number | string | undefined>(40, { transform: numberAttribute });\r\n /** Заполнять ли доступную высоту */\r\n fillHeight = input<boolean, boolean | string | undefined>(true, { transform: booleanAttribute });\r\n /** Размер буфера виртуального скролла */\r\n virtualBuffer = input(6);\r\n\r\n /** Состояние загрузки данных */\r\n loading = input<boolean, boolean | string | undefined>(false, { transform: booleanAttribute });\r\n /** Функция или имя свойства для получения уникального ключа строки */\r\n rowKey = input<RowKeyFn<Data> | undefined>(undefined);\r\n /** Начинать отсчёт пагинации с 1 (false) или 0 (true) */\r\n pageStartFromZero = input<boolean, boolean | string | undefined>(true, { transform: booleanAttribute });\r\n\r\n /** Событие запроса данных */\r\n pageChange = output<GridPageChangeEvent>();\r\n /** Событие изменения сортировки */\r\n sortChange = output<GridSortEvent<Data>>();\r\n /** Событие изменения выбранных строк */\r\n selectChange = output<GridSelectEvent<Data>>();\r\n /** Событие клика по строке */\r\n rowClick = output<GridRowClickEvent<Data>>();\r\n /** Событие клика по ячейке */\r\n cellClick = output<GridCellClickEvent<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\r\n private cellSlotRefs = contentChildren(DataGridTypeCellTemplateDirective);\r\n private headerSlotRefs = contentChildren(DataGridHeaderTemplateDirective);\r\n private emptySlotRefs = contentChildren(DataGridCellEmptyDirective);\r\n private loadingSlotRefs = contentChildren(DataGridCellLoadingDirective);\r\n\r\n protected emptyTpl = computed<DataGridCellEmptyDirective | null>(() => this.emptySlotRefs()?.[0]);\r\n protected loadingTpl = computed<DataGridCellLoadingDirective | null>(() => this.loadingSlotRefs()?.[0]);\r\n\r\n protected visibleRows = signal<Data[]>([]);\r\n protected startIndex = 0;\r\n\r\n protected headerHeight = signal(40);\r\n\r\n protected expanderMap = signal<Map<DataKey<Data>, boolean>>(new Map());\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.columns()];\r\n });\r\n\r\n private hideSbTimeout?: AnyType;\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\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.vm.containerWidth();\r\n\r\n this.onVerticalScroll(true);\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 inject(DestroyRef).onDestroy(() => {\r\n this.subscription.unsubscribe();\r\n this.observer?.disconnect();\r\n clearTimeout(this.hideSbTimeout);\r\n });\r\n }\r\n\r\n protected get styleHeight(): string | null {\r\n return this.fillHeight() ? null : 'auto';\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 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 protected onCellClick(row: Data, col: GridColumn<Data>, index: number) {\r\n this.cellClick.emit({ row, col, index });\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 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 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 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\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 this.visibleRows.set(data);\r\n this.vm.calcScrollbar();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n\r\n return;\r\n }\r\n\r\n this.startIndex = start;\r\n this.visibleRows.set(data.slice(start, end));\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 this.pageChange.emit({ page, rows: this.pageSize() });\r\n }\r\n }\r\n\r\n this.vm.calcScrollbar();\r\n this.showScrollbar();\r\n this.hideScrollbarSoon();\r\n }\r\n\r\n protected onHorizontalScroll(): void {}\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 // todo\r\n protected trackPinnedRow = (row: GridPinnedRow) => row.order;\r\n\r\n protected trackByRow = (row: Data) => {\r\n const rowKey = this.rowKey();\r\n\r\n if (!rowKey) {\r\n return row;\r\n }\r\n\r\n return typeof rowKey === 'function' ? rowKey(row) : row[rowKey];\r\n };\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 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 }\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.cellSlotRefs()?.forEach((dir) => this.vm.globalTypeCellTpls.set(dir.type() as GridCellRendererType, dir.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.subscription = fromEvent(scrollEl, 'scroll')\r\n .pipe(auditTime(16))\r\n .subscribe(() => {\r\n const direction = scrollDetector.detect();\r\n\r\n direction === 'vertical' ? this.onVerticalScroll() : this.onHorizontalScroll();\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.observer = new ResizeObserver((entries) => {\r\n const width = entries[0].contentRect.width;\r\n\r\n this.onVerticalScroll(true);\r\n this.onHorizontalScroll();\r\n this.vm.calcScrollbar();\r\n this.vm.containerWidth.set(width);\r\n });\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","@let items = data();\n@let empty = !loading() && !items?.length;\n@let notEmpty = !!items?.length;\n\n@let pinnedTopH = vm.pinnedTop().length * rowHeight();\n@let pinnedBottomH = vm.pinnedBottom().length * rowHeight();\n\n<div\n #root\n class=\"re-dg-root\"\n [class.fill]=\"fillHeight()\"\n [class.loading]=\"loading()\"\n [style.height]=\"styleHeight\"\n role=\"table\"\n>\n @if (loading()) {\n <div class=\"re-dg-loader\">\n @let loadingTemplate = loadingTpl();\n\n @if (loadingTemplate?.tpl) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate!.tpl\" />\n } @else {\n <span class=\"re-dg-loader-text\">Загрузка…</span>\n }\n </div>\n }\n\n <div\n #scroll\n class=\"re-dg-body\"\n role=\"rowgroup\"\n (mouseenter)=\"showScrollbar()\"\n (mouseleave)=\"hideScrollbarSoon()\"\n >\n <div class=\"re-dg-header\" role=\"rowgroup\">\n <div #header class=\"re-dg-row re-dg-header-row\" role=\"row\">\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-header-cell\"\n role=\"columnheader\"\n [class.sortable]=\"!!col.sortKey\"\n [class.active-sort]=\"currentSortField && (currentSortField === col.sortKey)\"\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.width.px]=\"vm.widthByKey(col.key)\"\n [style.min-width.px]=\"col.minWidth || null\"\n [style.max-width.px]=\"col.maxWidth || null\"\n [style.justify-content]=\"col.align || 'left'\"\n [attr.aria-sort]=\"ariaSort(col)\"\n [attr.tabindex]=\"col.sortKey ? 0 : -1\"\n [title]=\"col.header\"\n (click)=\"col.sortKey && onSort(col)\"\n (keydown.enter)=\"col.sortKey && onSort(col)\"\n >\n {{currentSortField }} {{ col.sortKey}}\n @if (col.headerTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col.header }\"\n />\n } @else {\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\n @let isMultiSelect = selection().mode === 'multi';\n\n @if (isCheckbox && isMultiSelect) {\n <re-checkbox-ic mixable [state]=\"selector.isAllSelected()\" (click)=\"selector.selectAll()\" />\n } @else {\n <span class=\"re-dg-header-text\">{{ col.header }}</span>\n }\n\n @if (col.sortKey) {\n <span class=\"re-dg-sort-ind\">\n <re-sort-ic [direction]=\"currentSortField === col.sortKey ? currentSortOrder : 'desc'\" />\n </span>\n }\n\n @if (isExpandable(col)) {\n <button (click)=\"$event.stopPropagation(); onExpand(col)\">\n <re-expand-ic [expanded]=\"expanderMap().get(col.key)\" />\n </button>\n }\n }\n </div>\n }\n </div>\n\n <!-- PINNED TOP ROWS -->\n @if (notEmpty) {\n @for (pr of vm.pinnedTop(); track trackPinnedRow(pr)) {\n <div class=\"re-dg-row re-dg-pinned re-dg-top\" role=\"row\">\n @if (pr.rowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"pr.rowTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: resolvePinnedData(pr) }\"\n />\n } @else {\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\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.height.px]=\"rowHeight()\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n >\n {{ resolvePinnedData(pr)[col.key] ?? '' }}\n </div>\n }\n }\n </div>\n }\n }\n </div>\n\n @if (empty) {\n @let emptyTemplate = emptyTpl()?.tpl;\n\n <div class=\"re-dg-empty\">\n @if (emptyTemplate) {\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\" />\n } @else {\n <span class=\"re-dg-empty-text\">Нет данных</span>\n }\n </div>\n }\n\n <!-- Content -->\n @if (notEmpty) {\n <div class=\"re-dg-spacer\" [style.height.px]=\"items.length * rowHeight() - pinnedBottomH\"></div>\n\n @for (row of visibleRows(); track trackByRow(row); let vi = $index) {\n <div\n class=\"re-dg-row re-dg-data-row\"\n role=\"row\"\n [style.height.px]=\"rowHeight()\"\n [style.top.px]=\"(startIndex + vi) * rowHeight() + pinnedTopH + headerHeight()\"\n [attr.tabindex]=\"0\"\n (click)=\"$event.stopPropagation(); rowClick.emit({ row, index: startIndex + vi })\"\n (keydown.enter)=\"$event.stopPropagation(); rowClick.emit({ row, index: startIndex + vi })\"\n >\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\n [class]=\"cellClass(col, row)\"\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 (click)=\"onCellClick(row, col, startIndex + vi);\"\n (keydown.enter)=\"onCellClick(row, col, startIndex + vi)\"\n >\n @let isCheckbox = 'type' in col && col.type === 'checkbox';\n\n @if (isCheckbox) {\n <re-checkbox-ic mixable=\"false\" [state]=\"selector.isSelected(row)\" />\n } @else {\n <re-data-grid-cell [index]=\"startIndex + vi\" [item]=\"row\" [column]=\"col\" />\n }\n </div>\n }\n </div>\n }\n }\n\n <!-- PINNED BOTTOM ROWS -->\n @if (notEmpty) {\n <div class=\"re-dg-footer\" role=\"rowgroup\">\n @for (pr of vm.pinnedBottom(); track trackPinnedRow(pr)) {\n <div class=\"re-dg-row re-dg-pinned re-dg-bottom\" role=\"row\">\n @if (pr.rowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"pr.rowTemplate!\"\n [ngTemplateOutletContext]=\"{ $implicit: resolvePinnedData(pr) }\"\n />\n } @else {\n @for (col of vm.columnsToShow(); track col.key) {\n <div\n class=\"re-dg-cell\"\n role=\"cell\"\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.height.px]=\"rowHeight()\"\n [style.width.px]=\"vm.widthByKey(col.key)\"\n >\n {{ resolvePinnedData(pr)[col.key] ?? '' }}\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Overlay scrollbar -->\n <div class=\"re-dg-scrollbar\" [class.visible]=\"vm.scrollbarVisible()\">\n <div\n class=\"re-dg-scrollbar-thumb\"\n role=\"scrollbar\"\n aria-orientation=\"vertical\"\n aria-hidden=\"false\"\n [style.height.px]=\"vm.thumbHeightPx()\"\n [style.transform]=\"'translateY(' + vm.thumbTopPx() + 'px)'\"\n (mousedown)=\"onThumbDown($event)\"\n ></div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["clamp"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
2
|
+
"version": "1.0.1",
|
|
3
3
|
"name": "@reforgium/data-grid",
|
|
4
4
|
"description": "reforgium DataGrid component",
|
|
5
5
|
"author": "rtommievich",
|
|
@@ -23,8 +23,9 @@
|
|
|
23
23
|
"tslib": "^2.8.1"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@angular/common": ">=
|
|
27
|
-
"@angular/core": ">=
|
|
26
|
+
"@angular/common": ">=18.0.0",
|
|
27
|
+
"@angular/core": ">=18.0.0",
|
|
28
|
+
"rxjs": ">=7.0.0"
|
|
28
29
|
},
|
|
29
30
|
"module": "fesm2022/reforgium-data-grid.mjs",
|
|
30
31
|
"typings": "types/reforgium-data-grid.d.ts",
|
|
@@ -168,23 +168,23 @@ declare class DataGrid<Data extends AnyDict> {
|
|
|
168
168
|
/** Массив закрепленных строк */
|
|
169
169
|
pinnedRows: _angular_core.InputSignal<GridPinnedRow<Data>[]>;
|
|
170
170
|
/** Добавить ли номерную колонку */
|
|
171
|
-
hasIndexColumn: _angular_core.InputSignalWithTransform<boolean, string>;
|
|
171
|
+
hasIndexColumn: _angular_core.InputSignalWithTransform<boolean, string | number | undefined>;
|
|
172
172
|
/** Поддержка выбора строк */
|
|
173
173
|
selection: _angular_core.InputSignal<GridSelection>;
|
|
174
174
|
/** Количество элементов на странице */
|
|
175
|
-
pageSize: _angular_core.InputSignalWithTransform<number, string>;
|
|
175
|
+
pageSize: _angular_core.InputSignalWithTransform<number, string | number | undefined>;
|
|
176
176
|
/** Высота строки в пикселях */
|
|
177
|
-
rowHeight: _angular_core.InputSignalWithTransform<number, string>;
|
|
177
|
+
rowHeight: _angular_core.InputSignalWithTransform<number, string | number | undefined>;
|
|
178
178
|
/** Заполнять ли доступную высоту */
|
|
179
|
-
fillHeight: _angular_core.InputSignalWithTransform<boolean, string>;
|
|
179
|
+
fillHeight: _angular_core.InputSignalWithTransform<boolean, string | boolean | undefined>;
|
|
180
180
|
/** Размер буфера виртуального скролла */
|
|
181
181
|
virtualBuffer: _angular_core.InputSignal<number>;
|
|
182
182
|
/** Состояние загрузки данных */
|
|
183
|
-
loading: _angular_core.InputSignalWithTransform<boolean, string>;
|
|
183
|
+
loading: _angular_core.InputSignalWithTransform<boolean, string | boolean | undefined>;
|
|
184
184
|
/** Функция или имя свойства для получения уникального ключа строки */
|
|
185
185
|
rowKey: _angular_core.InputSignal<RowKeyFn<Data> | undefined>;
|
|
186
186
|
/** Начинать отсчёт пагинации с 1 (false) или 0 (true) */
|
|
187
|
-
pageStartFromZero: _angular_core.InputSignalWithTransform<boolean, string>;
|
|
187
|
+
pageStartFromZero: _angular_core.InputSignalWithTransform<boolean, string | boolean | undefined>;
|
|
188
188
|
/** Событие запроса данных */
|
|
189
189
|
pageChange: _angular_core.OutputEmitterRef<GridPageChangeEvent>;
|
|
190
190
|
/** Событие изменения сортировки */
|