@scion/components 22.4.0 → 22.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/_index.scss +32 -88
  2. package/fesm2022/scion-components-common.mjs +179 -5
  3. package/fesm2022/scion-components-common.mjs.map +1 -1
  4. package/fesm2022/scion-components-dimension.mjs +3 -3
  5. package/fesm2022/scion-components-dimension.mjs.map +1 -1
  6. package/fesm2022/scion-components-icon.mjs +134 -98
  7. package/fesm2022/scion-components-icon.mjs.map +1 -1
  8. package/fesm2022/scion-components-menu.mjs +61 -60
  9. package/fesm2022/scion-components-menu.mjs.map +1 -1
  10. package/fesm2022/scion-components-sashbox.mjs +1 -1
  11. package/fesm2022/scion-components-sashbox.mjs.map +1 -1
  12. package/fesm2022/scion-components-splitter.mjs +2 -2
  13. package/fesm2022/scion-components-splitter.mjs.map +1 -1
  14. package/fesm2022/scion-components-table.mjs +584 -182
  15. package/fesm2022/scion-components-table.mjs.map +1 -1
  16. package/fesm2022/scion-components-text.mjs +83 -40
  17. package/fesm2022/scion-components-text.mjs.map +1 -1
  18. package/fesm2022/scion-components-throbber.mjs +1 -1
  19. package/fesm2022/scion-components-throbber.mjs.map +1 -1
  20. package/fesm2022/scion-components-viewport.mjs +31 -18
  21. package/fesm2022/scion-components-viewport.mjs.map +1 -1
  22. package/package.json +2 -2
  23. package/types/scion-components-common.d.ts +125 -4
  24. package/types/scion-components-icon.d.ts +42 -15
  25. package/types/scion-components-menu.d.ts +7 -2
  26. package/types/scion-components-sashbox.d.ts +1 -1
  27. package/types/scion-components-splitter.d.ts +1 -1
  28. package/types/scion-components-table.d.ts +772 -69
  29. package/types/scion-components-text.d.ts +6 -5
  30. package/types/scion-components-throbber.d.ts +1 -1
  31. package/types/scion-components-viewport.d.ts +20 -11
  32. package/viewport/scrollbar/_scrollbar.scss +12 -0
  33. package/design/icons/_scion-icon-font.scss +0 -50
@@ -1 +1 @@
1
- {"version":3,"file":"scion-components-table.mjs","sources":["../../../../projects/scion/components/table/src/ɵtable-column.factory.ts","../../../../projects/scion/components/table/src/common.ts","../../../../projects/scion/components/table/src/table-storage.ts","../../../../projects/scion/components/table/src/ɵtable-array-datasource.ts","../../../../projects/scion/components/table/src/table.cache.ts","../../../../projects/scion/components/table/src/table-row-binding.ts","../../../../projects/scion/components/table/src/ɵtable.model.ts","../../../../projects/scion/components/table/src/table-datasource.ts","../../../../projects/scion/components/table/src/table.factory.ts","../../../../projects/scion/components/table/src/table-selection.service.ts","../../../../projects/scion/components/table/src/table-cell/table-cell.component.ts","../../../../projects/scion/components/table/src/table-cell/table-cell.component.html","../../../../projects/scion/components/table/src/table-row/table-row.component.ts","../../../../projects/scion/components/table/src/table-row/table-row.component.html","../../../../projects/scion/components/table/src/table-keyboard-navigator.directive.ts","../../../../projects/scion/components/table/src/table-column/table-column.service.ts","../../../../projects/scion/components/table/src/table-column/table-column.component.ts","../../../../projects/scion/components/table/src/table-columns/table-columns.component.ts","../../../../projects/scion/components/table/src/table-columns/table-columns.component.html","../../../../projects/scion/components/table/src/table-viewport.component.ts","../../../../projects/scion/components/table/src/table-grid.component.ts","../../../../projects/scion/components/table/src/table-body.component.ts","../../../../projects/scion/components/table/src/column-header/column-header.component.ts","../../../../projects/scion/components/table/src/column-header/column-header.component.html","../../../../projects/scion/components/table/src/column-filter/column-filter-boolean-label.pipe.ts","../../../../projects/scion/components/table/src/column-filter/column-filter.component.ts","../../../../projects/scion/components/table/src/column-filter/column-filter.component.html","../../../../projects/scion/components/table/src/table-header/table-header.component.ts","../../../../projects/scion/components/table/src/table-header/table-header.component.html","../../../../projects/scion/components/table/src/table.component.ts","../../../../projects/scion/components/table/src/table.component.html","../../../../projects/scion/components/table/src/public_api.ts","../../../../projects/scion/components/table/src/scion-components-table.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciBooleanColumnDescriptor, SciComponentColumnDescriptor, SciNumberColumnDescriptor, SciStringColumnDescriptor, SciTableColumnDescriptorLike, SciTableColumnFactory, SciTemplateColumnDescriptor} from './table-column.factory';\nimport {SciBooleanColumn, SciComponentColumn, SciNumberColumn, SciStringColumn, SciTableColumn, SciTableColumnLike, SciTemplateColumn} from './table.model';\nimport {computed, signal} from '@angular/core';\nimport {ɵSciTable} from './ɵtable.model';\nimport {coerceSignal} from '@scion/components/common';\n\nexport class ɵSciTableColumnFactory<T> implements SciTableColumnFactory<T> {\n\n public readonly columns = new Array<SciTableColumnLike<T>>();\n\n constructor(private readonly _table: ɵSciTable<T>) {\n }\n\n public addStringColumn(value: (item: T) => string): this;\n public addStringColumn(header: string, value: (item: T) => string): this;\n public addStringColumn(descriptor: SciStringColumnDescriptor<T>): this;\n public addStringColumn(descriptorLike: ((item: T) => string) | string | SciStringColumnDescriptor<T>, value?: (item: T) => string): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n const column = this.mapToColumn(descriptor);\n const sortable = descriptor.sortable ?? true;\n const filterable = descriptor.filterable ?? true;\n\n this.columns.push({\n ...column,\n type: 'string',\n value: descriptor.value,\n sortable: computed(() => this._table.sortable() && !!sortable),\n filterable: computed(() => this._table.filterable() && !!filterable),\n compare: typeof sortable === 'object' ? sortable.comparator : (a, b) => a.value.localeCompare(b.value),\n matches: typeof filterable === 'object' ? filterable.matcher : (text, context) => context.value.toLowerCase().includes(text.toLowerCase()),\n } satisfies SciStringColumn<T>);\n\n return this;\n }\n\n public addNumberColumn(value: (item: T) => number): this;\n public addNumberColumn(header: string, value: (item: T) => number): this;\n public addNumberColumn(descriptor: SciNumberColumnDescriptor<T>): this;\n public addNumberColumn(descriptorLike: ((item: T) => number) | string | SciNumberColumnDescriptor<T>, value?: (item: T) => number): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n const column = this.mapToColumn(descriptor);\n\n this.columns.push({\n ...column,\n type: 'number',\n value: descriptor.value,\n sortable: computed(() => this._table.sortable() && (descriptor.sortable ?? true)),\n filterable: computed(() => this._table.filterable() && (descriptor.filterable ?? true)),\n compare: (a, b) => a.value - b.value,\n matches: (text, context) => context.value === text,\n } satisfies SciNumberColumn<T>);\n\n return this;\n }\n\n public addBooleanColumn(value: (item: T) => boolean): this;\n public addBooleanColumn(header: string, value: (item: T) => boolean): this;\n public addBooleanColumn(descriptor: SciBooleanColumnDescriptor<T>): this;\n public addBooleanColumn(descriptorLike: ((item: T) => boolean) | string | SciBooleanColumnDescriptor<T>, value?: (item: T) => boolean): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n const column = this.mapToColumn(descriptor);\n\n this.columns.push({\n ...column,\n type: 'boolean',\n value: descriptor.value,\n sortable: computed(() => this._table.sortable() && (descriptor.sortable ?? true)),\n filterable: computed(() => this._table.filterable() && (descriptor.filterable ?? true)),\n compare: (a, b) => a.value === b.value ? 0 : (a.value ? 1 : -1),\n matches: (text, context) => context.value === text,\n } satisfies SciBooleanColumn<T>);\n\n return this;\n }\n\n public addComponentColumn(descriptor: SciComponentColumnDescriptor<T>): this {\n // Require a filter matcher if filterable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.filterable === true) {\n throw Error('[ColumnDefinitionError] Component column requires a filter matcher in order to be filterable.');\n }\n\n // Require a sort comparator if sortable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.sortable === true) {\n throw Error('[ColumnDefinitionError] Component column requires a sort comparator in order to be sortable.');\n }\n\n const column = this.mapToColumn(descriptor);\n this.columns.push({\n ...column,\n type: 'component',\n component: descriptor.component,\n sortable: computed(() => this._table.sortable() && !!descriptor.sortable),\n filterable: computed(() => this._table.filterable() && !!descriptor.filterable),\n compare: typeof descriptor.sortable === 'object' ? descriptor.sortable.comparator : () => 0,\n matches: typeof descriptor.filterable === 'object' ? descriptor.filterable.matcher : () => true,\n padding: descriptor.padding ?? true,\n } satisfies SciComponentColumn<T>);\n\n return this;\n }\n\n public addTemplateColumn(descriptor: SciTemplateColumnDescriptor<T>): this {\n // Require a filter matcher if filterable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.filterable === true) {\n throw Error('[ColumnDefinitionError] Template column requires a filter matcher in order to be filterable.');\n }\n\n // Require a sort comparator if sortable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.sortable === true) {\n throw Error('[ColumnDefinitionError] Template column requires a sort comparator in order to be sortable.');\n }\n\n const column = this.mapToColumn(descriptor);\n this.columns.push({\n ...column,\n type: 'template',\n template: descriptor.template,\n sortable: computed(() => this._table.sortable() && !!descriptor.sortable),\n filterable: computed(() => this._table.filterable() && !!descriptor.filterable),\n compare: typeof descriptor.sortable === 'object' ? descriptor.sortable.comparator : () => 0,\n matches: typeof descriptor.filterable === 'object' ? descriptor.filterable.matcher : () => true,\n padding: descriptor.padding ?? true,\n } satisfies SciTemplateColumn<T>);\n\n return this;\n }\n\n /**\n * Maps given column descriptor to a {@link SciTableColumn}.\n */\n private mapToColumn(descriptor: SciTableColumnDescriptorLike<T>): Omit<SciTableColumn, 'type' | 'sortable' | 'filterable' | 'compare' | 'matches'> {\n // Require a unique column name.\n const name = descriptor.name ?? `column:${this.columns.length}`;\n if (this.columns.find(column => column.name === name)) {\n throw Error(`[ColumnDefinitionError] Column names must be unique. \"${name}\" is defined more than once.`);\n }\n\n // Disallow a filter matcher if using a custom datasource.\n if (!this._table.isArrayDatasource() && typeof descriptor.filterable === 'object') {\n throw Error('[ColumnDefinitionError] Configuring a filter matcher is not supported for tables using a datasource. Filtering must be done by the datasource.');\n }\n\n // Disallow a sort comparator if using a custom datasource.\n if (!this._table.isArrayDatasource() && typeof descriptor.sortable === 'object') {\n throw Error('[ColumnDefinitionError] Configuring a sort comparator is not supported for tables using a datasource. Sorting must be done by the datasource.');\n }\n\n return {\n name: name,\n header: coerceSignal(descriptor.header ?? ''),\n resizable: computed(() => this._table.resizable() && (descriptor.resizable ?? true)),\n width: computed(() => {\n const userSettings = this._table.userSettings().columns?.find(column => column.name === name);\n return userSettings?.width ? `${userSettings.width}px` : descriptor.width ?? '1fr';\n }),\n minWidth: descriptor.minWidth ?? 100,\n resizing: signal(false),\n padding: true,\n location: {x: 0, width: 0}, // set in `SciTableColumnComponent`\n };\n }\n}\n\n/**\n * Coerces given column factory arguments to a {@link SciTableColumnDescriptorLike}.\n */\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => string) | string | SciStringColumnDescriptor<T>, value?: (item: T) => string): SciStringColumnDescriptor<T>;\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => number) | string | SciNumberColumnDescriptor<T>, value?: (item: T) => number): SciNumberColumnDescriptor<T>;\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => boolean) | string | SciBooleanColumnDescriptor<T>, value?: (item: T) => boolean): SciBooleanColumnDescriptor<T>;\nfunction coerceColumnDescriptor(argument1: unknown, argument2?: unknown): unknown {\n switch (typeof argument1) {\n case 'string':\n return {header: argument1, value: argument2};\n case 'function':\n return {value: argument1};\n default:\n return argument1;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Observable} from 'rxjs';\n\nexport type MaybeAsync<T> = T | Promise<T> | Observable<T>;\n\n/**\n * Creates a range of integers starting at `start` and ending at `end` (including `end`).\n */\nexport function rangeInclusive(start: number, end: number): number[] {\n const range: number[] = [];\n for (let i = start; i <= end; i++) {\n range.push(i);\n }\n return range;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type} from '@angular/core';\n\n/**\n * Provides persistent storage for the sci-table.\n */\nexport interface SciTableStorage {\n\n /**\n * Method invoked to load a value from persisted storage.\n */\n load(name: `scion.components.table:${string}`): Promise<string | null> | string | null;\n\n /**\n * Method invoked to write a value to persisted storage.\n */\n store(name: `scion.components.table:${string}`, value: string): Promise<void> | void;\n}\n\nexport const SCI_TABLE_STORAGE = new InjectionToken<SciTableStorage>('SCI_TABLE_STORAGE', {factory: () => ({\n load: (name: `scion.components.table:${string}`) => localStorage.getItem(name),\n store: (name: `scion.components.table:${string}`, value: string) => localStorage.setItem(name, value),\n})});\n\n/**\n * Defaults to localStorage persistence.\n * @param storage\n */\nexport function provideTableStorage(storage: Type<SciTableStorage>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {provide: SCI_TABLE_STORAGE, useClass: storage},\n ]);\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciTableColumnFilter, SciTableDataLoaderFn, SciTablePageRequest, SciTablePageResponse, SciTableSortCriterion} from './table-datasource';\nimport {SciTableColumn, SciTableColumnLike, SciTableColumnType} from './table.model';\nimport {computed, signal, Signal, untracked} from '@angular/core';\nimport {coerceSignal} from '@scion/components/common';\nimport {Observable} from 'rxjs';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {Objects} from '@scion/toolkit/util';\n\nexport function arrayDatasource<T>(data: Signal<T[]>, columns: Signal<SciTableColumnLike<T>[]>): SciTableDataLoaderFn<T> {\n const dataset = new Dataset(data, columns);\n\n return markAsArrayDatasource((request: SciTablePageRequest): Observable<SciTablePageResponse<T>> => {\n dataset.columnFilters.set(request.columnFilters);\n dataset.tableFilter.set(request.tableFilter);\n dataset.sortCriteria.set(request.sortCriteria);\n\n const totalCount = dataset.count;\n const items = dataset.slice(request.start, request.end);\n\n return toObservable(computed(() => ({\n totalCount: totalCount(),\n items: items(),\n })));\n });\n}\n\n/**\n * Provides a filtered and sorted view on given data.\n */\nclass Dataset<T> {\n\n private readonly _dataview: Signal<DatasetRow<T>[]>;\n\n public readonly columnFilters = signal<SciTableColumnFilter[]>([], {equal: Objects.isEqual});\n public readonly sortCriteria = signal<SciTableSortCriterion[]>([], {equal: Objects.isEqual});\n public readonly tableFilter = signal<string | undefined>(undefined);\n\n /**\n * Returns the total count of items matching the current filters and search criteria.\n */\n public readonly count = computed(() => this._dataview().length);\n\n constructor(data: Signal<T[]>, columns: Signal<SciTableColumnLike<T>[]>) {\n const dataset = computed((): DatasetRow<T>[] => data().map(item => ({\n item,\n cells: columns().reduce((cells, column) => cells.set(column.name, {\n column: column as SciTableColumn,\n value: 'value' in column ? coerceSignal(untracked(() => column.value(item)), {coerceUndefined: true})() : undefined,\n }), new Map<`column:${string}`, DatasetCell>()),\n })));\n\n // Memoize filtered/sorted view; recomputes only when dataset or criteria change, not when scrolling through the view, as sorting is an expensive operation.\n this._dataview = computed(() => {\n const rows = dataset();\n const columnFilters = this.columnFilters();\n const tableFilter = this.tableFilter();\n const sortCriteria = this.sortCriteria();\n\n // PERF: Do not track signals inside `Array.sort` to avoid Angular signal tracking overhead as the comparator runs repeatedly, degrading performance otherwise.\n return untracked(() => rows\n .filter(row => matchesRow(row, columnFilters) && matchesGlobalFilter(row, tableFilter ?? undefined))\n .sort((a, b) => compareRows(a, b, sortCriteria)));\n });\n }\n\n /**\n * Returns a slice of the filtered and sorted data within the given range (start inclusive, end exclusive).\n */\n public slice(start: number, end: number): Signal<T[]> {\n return computed(() => this._dataview().slice(start, end).map(row => row.item));\n }\n}\n\ninterface DatasetRow<T> {\n item: T;\n cells: Map<`column:${string}`, DatasetCell>;\n}\n\ninterface DatasetCell {\n column: SciTableColumn;\n value: string | number | boolean | undefined;\n}\n\n/**\n * Tests whether a row matches the given global filter.\n */\nfunction matchesGlobalFilter<T>(row: DatasetRow<T>, filter?: string): boolean {\n if (!filter?.trim()) {\n return true;\n }\n\n for (const cell of row.cells.values()) {\n const text = coerceFilterText(filter, {to: cell.column.type});\n if (text === undefined) {\n continue;\n }\n\n if (matchesRow(row, [{text, columnName: cell.column.name} satisfies SciTableColumnFilter])) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Tests whether a row matches the given column filters.\n */\nfunction matchesRow<T>(row: DatasetRow<T>, columnFilters: SciTableColumnFilter[]): boolean {\n if (!columnFilters.length) {\n return true;\n }\n\n for (const columnFilter of columnFilters) {\n const cell = row.cells.get(columnFilter.columnName)!;\n if (!cell.column.matches(columnFilter.text, {item: row.item, value: cell.value})) { // component and template columns have no value\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Compares two rows based on the given sort criteria.\n */\nfunction compareRows<T>(row1: DatasetRow<T>, row2: DatasetRow<T>, sortCriteria: SciTableSortCriterion[]): number {\n if (!sortCriteria.length) {\n return 0;\n }\n\n for (const criterion of sortCriteria) {\n const cell1 = row1.cells.get(criterion.columnName)!;\n const cell2 = row2.cells.get(criterion.columnName)!;\n\n const comparison = cell1.column.compare({item: row1.item, value: cell1.value}, {item: row2.item, value: cell2.value});\n if (comparison !== 0) {\n const signum = criterion.direction === 'asc' ? 1 : -1;\n return signum * comparison;\n }\n }\n\n return 0;\n}\n\n/**\n * Checks whether given {@link SciTableDataLoaderFn} represents an {@link arrayDatasource}.\n */\nexport function isArrayDatasource(loader: SciTableDataLoaderFn<unknown>): boolean {\n return ARRAY_DATASOURCE_MARKER in loader;\n}\n\n/**\n * Marks given {@link SciTableDataLoaderFn} as an array data source.\n */\nfunction markAsArrayDatasource<TABLE_DATA_LOADER extends SciTableDataLoaderFn<unknown>>(loader: TABLE_DATA_LOADER): TABLE_DATA_LOADER {\n Object.defineProperty(loader, ARRAY_DATASOURCE_MARKER, {value: true, writable: false, enumerable: false, configurable: false});\n return loader;\n}\n\n/**\n * Identifies a {@link SciTableDataLoaderFn} as an {@link arrayDatasource}.\n */\nconst ARRAY_DATASOURCE_MARKER = Symbol('ARRAY_DATASOURCE_HINT');\n\n/**\n * Coerces the given filter text into the specified column data type.\n */\nfunction coerceFilterText(text: string, options: {to: SciTableColumnType}): string | number | boolean | undefined {\n switch (options.to) {\n case 'number': {\n const number = Number.parseFloat(text);\n return !Number.isNaN(number) ? number : undefined;\n }\n case 'boolean': {\n if (text === 'true' || text === '1') {\n return true;\n }\n if (text === 'false' || text === '0') {\n return false;\n }\n return undefined;\n }\n default: {\n return text;\n }\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, ResourceRef, signal, Signal} from '@angular/core';\nimport {SciTableRow} from './table.model';\nimport {Objects} from '@scion/toolkit/util';\n\nexport class SciTableCache<T> {\n\n private readonly _cache = signal(new Map<SciTableCacheKey, SciTableCacheEntry<T>>());\n\n public readonly loading: Signal<boolean> = computed(() => this.values().some(entry => entry.rows.isLoading()));\n public readonly error: Signal<Error | undefined> = computed(() => this.values().find(entry => entry.rows.error())?.rows.error());\n public readonly values: Signal<SciTableCacheEntry<T>[]> = computed(() => [...this._cache().values()]);\n\n public readonly rowsByIndex: Signal<Map<number, SciTableRow<T>>> = computed(() => this.values()\n .flatMap(page => page.rows.value())\n .reduce((acc, row) => acc.set(row.index, row), new Map<number, SciTableRow<T>>()), {equal: Objects.isEqual});\n\n public readonly rowsById: Signal<Map<unknown, SciTableRow<T>>> = computed(() => this.values()\n .flatMap(page => page.rows.value())\n .reduce((acc, row) => row.id !== undefined ? acc.set(row.id, row) : acc, new Map<unknown, SciTableRow<T>>()), {equal: Objects.isEqual});\n\n public has(key: SciTableCacheKey): boolean {\n return this._cache().has(key);\n }\n\n public get(key: SciTableCacheKey): SciTableCacheEntry<T> | undefined {\n return this._cache().get(key);\n }\n\n public set(key: SciTableCacheKey, entry: SciTableCacheEntry<T>): void {\n this._cache.update(cache => {\n const cacheCopy = new Map(cache);\n const existing = cacheCopy.get(key);\n if (existing) {\n cacheCopy.delete(key);\n existing.dispose();\n }\n\n cacheCopy.set(key, entry);\n return cacheCopy;\n });\n }\n\n /**\n * Deletes the specified page from the cache, but only if still loading.\n */\n public deleteIfLoading(key: SciTableCacheKey): void {\n const cacheEntry = this._cache().get(key);\n if (!cacheEntry?.rows.isLoading()) {\n return;\n }\n\n this._cache.update(cache => {\n const cacheCopy = new Map(cache);\n cacheCopy.delete(key);\n cacheEntry.dispose();\n return cacheCopy;\n });\n }\n\n public clear(): void {\n this._cache.update(cache => {\n for (const entry of cache.values()) {\n entry.dispose();\n }\n return new Map();\n });\n }\n}\n\nexport interface SciTableCacheEntry<T> {\n rows: ResourceRef<SciTableRow<T>[]>;\n start: number;\n end: number;\n dispose: () => void;\n}\n\ntype SciTableCacheKey = `${number}-${number}`;\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, InjectionToken, Provider, Signal} from '@angular/core';\nimport {Objects} from '@scion/toolkit/util';\n\nexport function provideTableRowBinding<T = unknown>(bindings: SciTableRowBindingFactoryFn<T>): Provider {\n return {\n provide: SCI_TABLE_ROW_BINDING,\n useValue: bindings,\n multi: true,\n };\n}\n\nexport type SciTableRowBindingFactoryFn<T> = (bindings: SciTableRowBindingFactory, item: T, index: number) => void;\n\nexport interface SciTableRowBindingFactory {\n addAttributeBinding(name: string, value: unknown | undefined): this;\n\n addClassBinding(name: string | undefined): this;\n\n /**\n * Adds the specified values as part attributes to the row, enabling for custom styling of the row, e.g., based on a condition.\n *\n * Example usage:\n * ```ts\n * table({\n * datasource: data,\n * rowBindings: (bindings, item, index) => bindings\n * .addPartBinding(index % 2 === 0 ? 'row:even' : 'row:odd')\n * .addPartBinding(item.active ? 'row:active' : undefined),\n * columns: table => ...,\n * });\n * ```\n *\n * ```scss\n * sci-table::part(row\\:even) {\n * background-color: lightgray;\n * }\n *\n * sci-table::part(row\\:active) {\n * background-color: green;\n * }\n * ```\n */\n addPartBinding(name: `row:${string}` | undefined): this;\n}\n\nclass ɵSciTableRowBindingFactory implements SciTableRowBindingFactory {\n\n public readonly attributeBindings = new Array<[string, unknown]>();\n public readonly classBindings = new Array<string>();\n public readonly partBindings = new Array<`row:${string}`>();\n\n public addAttributeBinding(name: string, value: unknown | undefined): this {\n if (value !== undefined) {\n this.attributeBindings.push([name, value]);\n }\n return this;\n }\n\n public addClassBinding(name: string | undefined): this {\n if (name) {\n this.classBindings.push(name);\n }\n return this;\n }\n\n public addPartBinding(name: `row:${string}` | undefined): this {\n if (name) {\n this.partBindings.push(name);\n }\n return this;\n }\n}\n\nexport function coerceTableRowBindings<T>(bindingsFn: SciTableRowBindingFactoryFn<T>[], item: T, index: number): SciTableRowBindings {\n const factory = computed(() => {\n const factory = new ɵSciTableRowBindingFactory();\n bindingsFn.forEach(fn => fn(factory, item, index));\n return factory;\n });\n\n return {\n attributes: computed(() => Object.fromEntries(factory().attributeBindings), {equal: Objects.isEqual}),\n cssClass: computed(() => factory().classBindings, {equal: Objects.isEqual}),\n part: computed(() => factory().partBindings, {equal: Objects.isEqual}),\n };\n}\n\nexport interface SciTableRowBindings {\n cssClass: Signal<string[]>;\n attributes: Signal<{[name: string]: unknown}>;\n part: Signal<`row:${string}`[]>;\n}\n\nexport const SCI_TABLE_ROW_BINDING = new InjectionToken<SciTableRowBindingFactory[]>('SCI_TABLE_ROW_BINDING');\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, DestroyableInjector, effect, inject, InjectionToken, Injector, isSignal, linkedSignal, NgZone, resource, runInInjectionContext, signal, Signal, untracked, WritableSignal} from '@angular/core';\nimport {SciTableColumnFilter, SciTableDataLoaderFn, SciTableSortCriterion} from './table-datasource';\nimport {SciTable, SciTableCellLike, SciTableColumnLike, SciTableDescriptor, SciTableRow, SciTableRowActionFactoryFn} from './table.model';\nimport {ɵSciTableColumnFactory} from './ɵtable-column.factory';\nimport {rangeInclusive} from './common';\nimport {SCI_TABLE_STORAGE} from './table-storage';\nimport {coerceSignal, createDestroyableInjector, toLazyObservable} from '@scion/components/common';\nimport {arrayDatasource, isArrayDatasource} from './ɵtable-array-datasource';\nimport {SciTableCache, SciTableCacheEntry} from './table.cache';\nimport {rxResource, takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {concat, defaultIfEmpty, firstValueFrom, fromEvent, of, skip, switchMap, throwError, timer} from 'rxjs';\nimport {coerceTableRowBindings, SCI_TABLE_ROW_BINDING, SciTableRowBindingFactoryFn} from './table-row-binding';\nimport {clamp, Objects, Observables, runSafe} from '@scion/toolkit/util';\nimport {first, map, startWith} from 'rxjs/operators';\nimport {subscribeIn} from '@scion/toolkit/operators';\n\nexport class ɵSciTable<T = unknown> implements SciTable<T> {\n\n private readonly _tableStorage = inject(SCI_TABLE_STORAGE);\n private readonly _injector = inject(Injector);\n\n public readonly name = signal<`table:${string}` | undefined>(undefined);\n public readonly columns: Signal<SciTableColumnLike<T>[]>;\n public readonly rowActions?: SciTableRowActionFactoryFn<T>;\n\n private readonly _rowBindings: SciTableRowBindingFactoryFn<T>[];\n private readonly _dataLoaderFn: SciTableDataLoaderFn<T>;\n private readonly _trackBy?: (item: T) => unknown;\n\n public readonly tableViewRef = signal<SciTableViewRef | undefined>(undefined);\n public readonly userSettings: WritableSignal<SciTableUserSettings>;\n public readonly bufferSize: number;\n public readonly pageSize: number;\n public readonly filterable: WritableSignal<boolean>;\n public readonly showHeader: WritableSignal<boolean>;\n public readonly wrapHeader: WritableSignal<boolean>;\n public readonly sortable: WritableSignal<boolean>;\n public readonly resizable: WritableSignal<boolean>;\n public readonly selectable: WritableSignal<'single' | 'multi' | false>;\n\n public readonly scrollRange: Signal<SciScrollRange | undefined>;\n public readonly scrollTop: Signal<number>;\n public readonly virtualScrollOffset: Signal<{top: number; bottom: number}>;\n public readonly viewportPageSize: Signal<number>;\n\n public readonly scrolling: Signal<boolean>;\n public readonly resizing = computed(() => this.columns().some(column => column.resizing()));\n\n public readonly sortCriteria = linkedSignal<SciTableColumnLike<T>[], SciTableSortCriterion[]>({\n source: () => this.columns(), // Discard stale criteria on column change.\n computation: (columns, previous) => previous?.value.filter(criteria => columns.some(column => column.name === criteria.columnName)) ?? [],\n equal: Objects.isEqual,\n });\n\n public readonly filterCriteria = linkedSignal<SciTableColumnLike<T>[], SciTableColumnFilter[]>({\n source: () => this.columns(), // Discard stale criteria on column change.\n computation: (columns, previous) => previous?.value.filter(criteria => columns.some(column => column.name === criteria.columnName)) ?? [],\n equal: Objects.isEqual,\n });\n\n private readonly _cache = new SciTableCache<T>();\n private readonly _tableFilter = signal<string | null>(null);\n private readonly _selectedItems = signal(new Map<unknown, T>());\n\n // Reset total count on criteria change to show skeletons instead of stale data while loading.\n public readonly totalCount = linkedSignal({\n source: () => this.criteria(),\n computation: () => undefined as number | undefined,\n });\n\n public readonly activeItem = linkedSignal({\n source: () => this.criteria(),\n computation: () => undefined as T | undefined,\n });\n\n public readonly hoveredIndex = linkedSignal({\n source: () => {\n this.criteria(); // reset on criteria change\n this.scrolling(); // reset when start scrolling\n },\n computation: () => -1,\n });\n\n public readonly criteria = computed(() => ({sort: this.sortCriteria(), filter: this.filterCriteria(), tableFilter: this._tableFilter()}));\n public readonly loading = this._cache.loading;\n public readonly error = this._cache.error;\n public readonly activeRow: Signal<SciTableRow<T> | undefined>;\n public readonly hoveredRow = computed(() => this.rowsByIndex().get(this.hoveredIndex()));\n public readonly selectedItems = computed(() => [...this._selectedItems().values()]);\n public readonly selectedIds = computed(() => new Set([...this._selectedItems().keys()]));\n public readonly rowsByIndex = this._cache.rowsByIndex;\n public readonly rows = this.computeRows();\n\n constructor(descriptor: SciTableDescriptor<T>) {\n // TODO [table] Remove after datasource is final. See ɵillegaldatasource.\n descriptor = {...descriptor, ɵdatasource: descriptor.ɵdatasource ?? descriptor.datasource};\n\n this.bufferSize = descriptor.bufferSize ?? 10;\n this.pageSize = descriptor.pageSize ?? 50;\n this.sortable = signal(descriptor.sortable ?? true);\n this.filterable = signal(descriptor.filterable ?? false);\n this.showHeader = signal(descriptor.showHeader ?? true);\n this.wrapHeader = signal(descriptor.wrapHeader ?? false);\n this.resizable = signal(descriptor.resizable ?? true);\n this.selectable = signal(descriptor.selectable ?? 'multi');\n this.userSettings = this.computeUserSettings();\n this.scrollRange = this.computeScrollRange();\n this.scrollTop = this.computeScrollTop();\n this.scrolling = this.computeScrolling();\n this.virtualScrollOffset = this.computeVirtualScrollOffset();\n this.viewportPageSize = this.computeViewportPageSize();\n this.activeRow = this.computeActiveRow();\n this.columns = this.computeColumns(descriptor);\n\n this.rowActions = descriptor.rowActions;\n this._rowBindings = [\n ...descriptor.rowBindings ? [descriptor.rowBindings] : [],\n ...inject<SciTableRowBindingFactoryFn<T>[]>(SCI_TABLE_ROW_BINDING, {optional: true}) ?? [],\n ];\n this._trackBy = descriptor.trackBy;\n this._dataLoaderFn = isSignal(descriptor.ɵdatasource) ? arrayDatasource(descriptor.ɵdatasource, this.columns) : descriptor.ɵdatasource!;\n\n this.installCriteriaWatcher();\n this.installPageLoader();\n }\n\n /**\n * Connects {@link SciTableComponent} to the model.\n */\n public connect(name: `table:${string}`, viewRef: SciTableViewRef): void {\n this.name.set(name);\n this.tableViewRef.set(viewRef);\n }\n\n public disconnect(): void {\n this.name.set(undefined);\n this.tableViewRef.set(undefined);\n }\n\n private computeColumns(descriptor: SciTableDescriptor<T>): Signal<SciTableColumnLike<T>[]> {\n // Create separate injection context per factory invocation to clean up allocated resources, like RxJS subscriptions.\n let injector: DestroyableInjector | undefined;\n return computed(() => {\n injector?.destroy();\n injector = createDestroyableInjector({parent: this._injector});\n\n return runInInjectionContext(injector, () => {\n const tableColumnFactory = new ɵSciTableColumnFactory<T>(this);\n descriptor.columns(tableColumnFactory);\n return tableColumnFactory.columns;\n });\n });\n }\n\n /**\n * Computes the rows currently visible in the viewport (+buffer).\n */\n private computeRows(): Signal<SciTableRow<T>[]> {\n return computed(() => {\n const scrollRange = this.scrollRange();\n if (!scrollRange) {\n return [];\n }\n\n const rowsByIndex = this.rowsByIndex();\n const rowCount = scrollRange.end - scrollRange.start;\n\n // Populate rows with cached rows in the range window, fallback to row shell to show skeleton.\n return untracked(() => Array.from({length: rowCount}, (_, i) => rowsByIndex.get(scrollRange.start + i) ?? createSyntheticRow(i)));\n });\n\n function createSyntheticRow(index: number): SciTableRow<T> {\n return {\n index,\n loading: true,\n active: signal(false).asReadonly(),\n selected: signal(false).asReadonly(),\n hovered: signal(false).asReadonly(),\n };\n }\n }\n\n /**\n * Computes the visible row count based on the viewport size.\n */\n private computeScrollRange(): Signal<SciScrollRange | undefined> {\n return computed(() => {\n const tableViewRef = this.tableViewRef();\n if (!tableViewRef) {\n return undefined;\n }\n\n const viewportHeight = tableViewRef.viewportHeight();\n const itemHeight = tableViewRef.itemHeight();\n const scrollTop = this.scrollTop();\n\n const start = Math.floor(scrollTop / itemHeight);\n const viewportRowCount = Math.ceil(viewportHeight / itemHeight);\n const end = Math.min(start + viewportRowCount);\n\n const totalCount = this.totalCount() ?? viewportRowCount; // fill viewport if no data loaded yet\n\n return {\n start: clamp(start - this.bufferSize, {min: 0, max: Math.max(0, totalCount - viewportRowCount)}),\n end: clamp(end + this.bufferSize, {max: totalCount}),\n };\n }, {equal: Objects.isEqual});\n }\n\n private computeVirtualScrollOffset(): Signal<{top: number; bottom: number}> {\n return computed(() => {\n const itemHeight = this.tableViewRef()?.itemHeight() ?? 0;\n const totalCount = this.totalCount() ?? 0;\n const rangeEnd = Math.min(this.scrollRange()?.end ?? 0, this.totalCount() ?? 0);\n\n return {\n top: (this.scrollRange()?.start ?? 0) * itemHeight,\n bottom: (totalCount - rangeEnd) * itemHeight,\n };\n }, {equal: Objects.isEqual});\n }\n\n private computeViewportPageSize(): Signal<number> {\n return computed(() => {\n const itemHeight = this.tableViewRef()?.itemHeight() ?? 0;\n const viewportHeight = this.tableViewRef()?.viewportHeight() ?? 0;\n return Math.ceil(viewportHeight / itemHeight);\n });\n }\n\n /**\n * Tracks {@link HTMLElement.scrollTop} of the viewport.\n */\n private computeScrollTop(): Signal<number> {\n const zone = inject(NgZone);\n\n return rxResource({\n defaultValue: 0,\n params: () => this.tableViewRef()?.viewport,\n stream: ({params: viewport}) => fromEvent(viewport, 'scroll', {passive: true})\n .pipe(\n map(() => viewport.scrollTop),\n startWith(viewport.scrollTop),\n subscribeIn(fn => zone.runOutsideAngular(fn)),\n ),\n }).value;\n }\n\n /**\n * Tracks whether currently scrolling the viewport.\n */\n private computeScrolling(): Signal<boolean> {\n const zone = inject(NgZone);\n\n return rxResource({\n defaultValue: false,\n params: () => this.tableViewRef()?.viewport,\n stream: ({params: viewport}) => fromEvent(viewport, 'scroll', {passive: true})\n .pipe(\n switchMap(() => concat(of(true), timer(150).pipe(map(() => false)))),\n startWith(false),\n subscribeIn(fn => zone.runOutsideAngular(fn)),\n ),\n }).value;\n }\n\n /**\n * Loads a range of rows, based on the current sort and filter criteria, into the cache.\n */\n public async loadRange(start: number, end: number): Promise<void> {\n const sortCriteria = this.sortCriteria();\n const columnFilters = this.filterCriteria();\n const tableFilter = this._tableFilter() ?? undefined;\n\n // Calculate pages based on row indices and page size.\n const pages = pagesByRange(start, end, this.pageSize);\n if (!pages) {\n return;\n }\n\n // Load pages and wait until completed loading.\n await Promise.all(pages\n .map(page => this.loadPage({page, pageSize: this.pageSize, columnFilters, tableFilter, sortCriteria}))\n .map(page => firstValueFrom(toLazyObservable(page.loading, {injector: this._injector}).pipe(first(loading => !loading), defaultIfEmpty(true)))));\n }\n\n /**\n * Loads the requested page from the cache or datasource and returns its loading state with a cancelation handler.\n */\n private loadPage({page, pageSize, sortCriteria, columnFilters, tableFilter}: {page: number; pageSize: number; sortCriteria: SciTableSortCriterion[]; columnFilters: SciTableColumnFilter[]; tableFilter?: string}): {loading: Signal<boolean>; cancel: () => void} {\n const pageStart = page * pageSize;\n const pageEnd = pageStart + pageSize;\n const cacheKey = `${pageStart}-${pageEnd}` as const;\n\n if (this._cache.has(cacheKey)) {\n return {\n loading: this._cache.get(cacheKey)!.rows.isLoading,\n cancel: () => this._cache.deleteIfLoading(cacheKey),\n };\n }\n\n const cacheEntryInjector = createDestroyableInjector({parent: this._injector});\n const cacheEntry: SciTableCacheEntry<T> = {\n rows: runInInjectionContext(cacheEntryInjector, () => {\n // Fetch data.\n const tableResponse$ = runSafe(\n () => Observables.coerce(this._dataLoaderFn({\n start: pageStart,\n end: pageEnd,\n pageSize,\n page,\n sortCriteria,\n tableFilter,\n columnFilters,\n })),\n error => throwError(() => error));\n\n // Create a resource to track loading and error states.\n const tableResponse = rxResource({stream: () => tableResponse$});\n\n // Create a derived resource mapping the response to rows. Must be done in a separate resource to not fetch data anew on column change.\n const rows = resource({\n params: ({chain}) => {\n const items = chain(tableResponse)?.items;\n return items && {items, columns: this.columns()};\n },\n loader: async ({params}) => this.mapItemsToRow(params.items, params.columns, pageStart),\n defaultValue: [],\n });\n\n // Synchronize total row count based on resource state.\n effect(() => {\n switch (rows.status()) {\n case 'resolved': {\n // Update count only after rows resolve to prevent premature scroll invalidation.\n this.totalCount.set(tableResponse.value()?.totalCount);\n break;\n }\n case 'error': {\n console.error(rows.error()!.cause);\n // Reset count to scroll to the top so the user sees the error.\n this.totalCount.set(0);\n break;\n }\n }\n });\n\n return rows;\n }),\n dispose: () => cacheEntryInjector.destroy(),\n start: pageStart,\n end: pageEnd,\n };\n\n this._cache.set(cacheKey, cacheEntry);\n\n return {\n loading: cacheEntry.rows.isLoading,\n cancel: () => this._cache.deleteIfLoading(cacheKey),\n };\n }\n\n /**\n * Toggles sort on a column. ASC -> DESC -> No sort\n *\n * TODO [ego] Revisit API, do we really want a three-state and implicit toggling logic?\n */\n public sort(columnName: `column:${string}`, multi: boolean): void {\n // Scroll to the top as soon as sort changes.\n // Done here explicitly to avoid race-conditions and pages being loaded unnecessarily.\n this.tableViewRef()?.scrollToTop();\n\n this.sortCriteria.update(sortCriteria => {\n const column = this.columns().find(column => column.name === columnName);\n if (!column) {\n throw Error(`[NullColumnError] Column '${columnName}' not found in table '${this.name()}'.`);\n }\n\n const currentSortCriterion = sortCriteria.find(sortCriterion => sortCriterion.columnName === column.name);\n const otherSortCriteria = sortCriteria.filter(sortCriterion => sortCriterion !== currentSortCriterion);\n\n const direction = currentSortCriterion ? (currentSortCriterion.direction === 'asc' ? 'desc' : undefined) : 'asc';\n if (!direction) {\n return multi ? otherSortCriteria : [];\n }\n\n const newSortCriterion = {columnName: column.name, direction} satisfies SciTableSortCriterion;\n return multi ? [...otherSortCriteria, newSortCriterion] : [newSortCriterion];\n });\n }\n\n /**\n * Applies a filter, either via global filter or on a specific column.\n */\n public filter(text: string | null): void;\n public filter(text: string | number | boolean | null, options: {columnName: `column:${string}`}): void;\n public filter(text: string | number | boolean | null, options?: {columnName: `column:${string}`}): void {\n // Scroll to the top as soon as filter changes.\n // Done here explicitly to avoid race-conditions and pages being loaded unnecessarily.\n this.tableViewRef()?.scrollToTop();\n\n if (!options) {\n this._tableFilter.set(text as string);\n return;\n }\n\n const column = this.columns().find(column => column.name === options.columnName);\n if (!column) {\n throw Error(`[NullColumnError] Column '${options.columnName}' not found in table '${this.name()}'.`);\n }\n\n this.filterCriteria.update(filterCriterion => {\n const otherFilterCriteria = filterCriterion.filter(filterCriterion => filterCriterion.columnName !== options.columnName);\n if (text === null) {\n return otherFilterCriteria;\n }\n\n return otherFilterCriteria.concat({columnName: column.name, text});\n });\n }\n\n public updateSelectedItems(updateFn: (ids: Map<unknown, T>) => Map<unknown, T>): void {\n this._selectedItems.update(updateFn);\n }\n\n /**\n * Indicates whether the built-in array datasource is used.\n *\n * Supports out-of-the-box filtering and sorting for built-in table columns.\n */\n public isArrayDatasource(): boolean {\n return isArrayDatasource(this._dataLoaderFn);\n }\n\n public reset(): void {\n this._cache.clear();\n this.totalCount.set(undefined);\n }\n\n public dispose(): void {\n this._cache.clear();\n this.disconnect();\n }\n\n /**\n * Loads a set of pages on criteria or viewport changes.\n */\n private installPageLoader(): void {\n effect(onCleanup => {\n const scrollRange = this.scrollRange();\n const sortCriteria = this.sortCriteria();\n const columnFilters = this.filterCriteria();\n const tableFilter = this._tableFilter() ?? undefined;\n\n if (!scrollRange) {\n return;\n }\n\n untracked(() => {\n // Fall back to load the initial page if range is empty. Otherwise, if the table grows with its content,\n // no data would ever load because the scroll range remains 0.\n const pages = pagesByRange(scrollRange.start, scrollRange.end, this.pageSize) ?? [0];\n\n pages.forEach(page => {\n const pageRef = this.loadPage({\n pageSize: this.pageSize,\n page,\n sortCriteria,\n tableFilter,\n columnFilters,\n });\n onCleanup(() => pageRef.cancel());\n });\n });\n });\n }\n\n /**\n * Resets cache on criteria changes.\n */\n private installCriteriaWatcher(): void {\n toObservable(this.criteria).pipe(\n skip(1), // skip first emission to avoid race condition with loader on initialization.\n takeUntilDestroyed(),\n ).subscribe(() => {\n this._cache.clear();\n });\n }\n\n private mapItemsToRow(items: T[], columns: SciTableColumnLike<T>[], pageStart: number): SciTableRow<T>[] {\n return items.map((item, i) => {\n const id = this.trackBy(item);\n const index = pageStart + i;\n\n return {\n id,\n index,\n item,\n loading: false,\n active: computed(() => item === this.activeItem()),\n selected: computed(() => this.selectedIds().has(id)),\n hovered: computed(() => this.hoveredRow()?.index === index),\n bindings: coerceTableRowBindings(this._rowBindings, item, pageStart + i),\n cells: columns.map(column => ({\n value: column.type !== 'component' && column.type !== 'template' ? coerceSignal(column.value(item)) : undefined,\n component: column.type === 'component' ? column.component(item) : undefined,\n template: column.type === 'template' ? column.template(item) : undefined,\n type: column.type,\n column,\n } as SciTableCellLike)),\n };\n });\n }\n\n /**\n * Creates a signal to read and write table user settings.\n */\n private computeUserSettings(): WritableSignal<SciTableUserSettings> {\n // Load user settings from storage.\n const userSettings = resource({\n params: () => this.name(),\n loader: async ({params: tableName}) => {\n try {\n const serialized = await this._tableStorage.load(`scion.components.${tableName}`);\n return serialized ? JSON.parse(serialized) as SciTableUserSettings : {columns: []};\n }\n catch (error) {\n console.warn(`[SciTable] Failed to load user settings for '${tableName}'.`, error);\n return {columns: []};\n }\n },\n defaultValue: {columns: []},\n });\n\n // Persist settings to storage.\n effect(() => {\n if (userSettings.status() === 'local' && this.name()) {\n untracked(() => void this._tableStorage.store(`scion.components.${this.name()!}`, JSON.stringify(userSettings.value())));\n }\n });\n\n return userSettings.value;\n }\n\n /**\n * Call trackBy function or fallback to track by object reference.\n */\n public trackBy(item: T): unknown {\n return this._trackBy?.(item) ?? item;\n }\n\n private computeActiveRow(): Signal<SciTableRow<T> | undefined> {\n return computed(() => {\n const activeItem = this.activeItem();\n if (activeItem === undefined) {\n return undefined;\n }\n\n const id = this.trackBy(activeItem);\n if (id === undefined) {\n return undefined;\n }\n\n return this._cache.rowsById().get(id);\n });\n }\n}\n\nexport interface SciScrollRange {\n /** incluse */\n start: number;\n /** exclusive */\n end: number;\n}\n\n/**\n * Gets pages by range and page size, or `null` if empty. End is exclusive.\n */\nfunction pagesByRange(start: number, end: number, pageSize: number): number[] | null {\n const startPage = Math.floor(start / pageSize);\n const endPage = Math.floor((end - 1) / pageSize); // `end` is exclusive, so use the last included index (`end - 1`) for page calculation.\n const pages = rangeInclusive(startPage, endPage);\n return pages.length ? pages : null;\n}\n\nexport interface SciTableUserSettings {\n columns?: {name: string; width?: number}[];\n}\n\nexport const ɵSCI_TABLE = new InjectionToken<Signal<ɵSciTable>>('ɵSciTable');\n\nexport interface SciTableViewRef {\n viewport: HTMLElement;\n viewportHeight: Signal<number>;\n viewportWidth: Signal<number>;\n viewportClientHeight: Signal<number>;\n viewportClientWidth: Signal<number>;\n headerHeight: Signal<number>;\n cellPadding: Signal<number>;\n itemHeight: Signal<number>;\n scrollToTop: () => void;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {MaybeAsync} from './common';\nimport {computed, Signal} from '@angular/core';\n\nexport interface SciTableColumnFilter {\n columnName: `column:${string}`;\n text: string | boolean | number;\n}\n\nexport interface SciTableSortCriterion {\n columnName: `column:${string}`;\n direction: 'asc' | 'desc';\n}\n\nexport interface SciTablePageRequest {\n page: number; // TODO [ego] Should page be 1-based?\n pageSize: number;\n start: number; // Inclusive\n end: number; // Exclusive\n sortCriteria: SciTableSortCriterion[];\n columnFilters: SciTableColumnFilter[];\n tableFilter?: string;\n}\n\nexport interface SciTablePageResponse<T> {\n /**\n * Items of the requested page.\n */\n items: T[];\n\n /**\n * Total count of the source data, used to calculate the scroll size.\n */\n totalCount: number;\n}\n\n/**\n * @docs-private Not public API. For internal use only.\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\nexport type SciTableDataLoaderFn<T> = (request: SciTablePageRequest) => MaybeAsync<SciTablePageResponse<T>>;\n\n/**\n * TODO [table] Remove after datasource is final.\n *\n * @docs-private Not public API. For internal use only.\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\nexport function ɵillegaldatasource<T>(): Signal<T[]> {\n return computed(() => {\n throw Error('[SciTableError] Illegal state. ɵillegaldatasource should not be used.');\n });\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {assertInInjectionContext, assertNotInReactiveContext, DestroyRef, inject, Injector, isSignal, runInInjectionContext, Signal} from '@angular/core';\nimport {SciTable, SciTableDescriptor} from './table.model';\nimport {SciTableColumnFactory} from './table-column.factory';\nimport {ɵSciTable} from './ɵtable.model';\nimport {ɵillegaldatasource} from './table-datasource';\n\nexport type SciTableColumnFactoryFn<T> = (table: SciTableColumnFactory<T>) => void;\n\n// Do not change order for better IntelliSense.\n\n/** @experimental since 22.3.0; API and behavior may change in any version without notice. */\nexport function table<T>(descriptor: SciTableDescriptor<T>): SciTable<T>;\n/** @experimental since 22.3.0; API and behavior may change in any version without notice. */\nexport function table<T>(data: Signal<T[]>, columnFactoryFn: SciTableColumnFactoryFn<T>, options?: {injector?: Injector}): SciTable<T>;\nexport function table<T>(dataOrDescriptor: Signal<T[]> | SciTableDescriptor<T>, columnFactoryFn?: SciTableColumnFactoryFn<T>, options?: {injector?: Injector}): SciTable<T> {\n assertNotInReactiveContext(table, 'Call table in a non-reactive (non-tracking) context, such as within the untracked() function.');\n\n const descriptor = isSignal(dataOrDescriptor) ? ({ɵdatasource: dataOrDescriptor, datasource: ɵillegaldatasource(), columns: columnFactoryFn!, injector: options?.injector}) satisfies SciTableDescriptor<T> : dataOrDescriptor;\n if (!descriptor.injector) {\n assertInInjectionContext(table);\n }\n\n const injector = descriptor.injector ?? inject(Injector);\n const sciTable = runInInjectionContext(injector, () => new ɵSciTable(descriptor));\n injector.get(DestroyRef).onDestroy(() => sciTable.dispose());\n return sciTable;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {inject, Injectable, Signal} from '@angular/core';\nimport {ɵSCI_TABLE, ɵSciTable} from './ɵtable.model';\nimport {rangeInclusive} from './common';\nimport {firstValueFrom, timer} from 'rxjs';\nimport {SciTableRow} from './table.model';\n\n@Injectable()\nexport class SciTableSelectionService<T> {\n\n private readonly _table = inject<Signal<ɵSciTable<T>>>(ɵSCI_TABLE);\n\n public async onRowClick(index: number, event: {ctrlKey: boolean; shiftKey: boolean; metaKey: boolean}): Promise<void> {\n const table = this._table();\n const rowsByIndex = table.rowsByIndex();\n const row = rowsByIndex.get(index);\n const item = rowsByIndex.get(index)?.item;\n const previousFocusedIndex = table.activeRow()?.index ?? -1;\n\n table.activeItem.set(item);\n\n if (item === undefined || !table.selectable()) {\n return;\n }\n\n if (table.selectable() === 'single') {\n table.updateSelectedItems(() => new Map<unknown, T>().set(row!.id, item));\n return;\n }\n\n if (event.shiftKey && previousFocusedIndex >= 0) {\n const start = Math.min(previousFocusedIndex, index);\n const end = Math.max(previousFocusedIndex, index);\n await this.selectItems(start, end, {add: true});\n }\n else if (event.ctrlKey || event.metaKey) {\n this.toggleSelectedItem(item);\n }\n else {\n // If no modifier is pressed set the selection to the clicked row.\n table.updateSelectedItems(() => new Map<unknown, T>().set(row!.id, item));\n }\n }\n\n public async onArrowUp(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex <= 0) {\n return;\n }\n\n // Set active item.\n const startIndex = activeIndex - 1;\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onArrowDown(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n const endIndex = Math.min(activeIndex + 1, table.totalCount()! - 1);\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public async onPageUp(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex === 0) {\n return;\n }\n\n // Set active item.\n const startIndex = Math.max(activeIndex - table.viewportPageSize() + 1, 0);\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onPageDown(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n const endIndex = Math.min(activeIndex + table.viewportPageSize() - 1, table.totalCount()! - 1);\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public async onHome(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex <= 0) {\n return;\n }\n\n // Set active item.\n const startIndex = 0;\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onEnd(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n const endIndex = table.totalCount()! - 1;\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // TODO [mmu] should active item be set before selection? this way, further methods cant rely on table.activeItem.\n // But otherwise, loading and setting the active item needs to be done for each case, or once at the end.\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public onSpace(event: Event): void {\n event.preventDefault();\n\n const table = this._table();\n if (!table.selectable()) {\n return;\n }\n\n const activeItem = table.activeItem();\n if (!activeItem) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n const activeItemId = table.trackBy(activeItem);\n\n if (ctrlOrMeta) {\n this.toggleSelectedItem(activeItem);\n }\n else {\n table.updateSelectedItems(() => new Map<unknown, T>().set(activeItemId, activeItem));\n }\n }\n\n public async onControlA(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const totalCount = table.totalCount() ?? 0;\n\n if (table.selectable() === 'multi' && totalCount >= 0) {\n await this.selectItems(0, totalCount - 1);\n }\n }\n\n // TODO [mmu] Should we add overloads for all variants for better readability, but same logic?\n // shiftArrowDown\n // shiftPageDown\n // ShiftEnd\n private async shiftDown(options: {endIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n const selectedIds = table.selectedIds();\n const activeIndex = options.activeIndex;\n\n const startIndex = activeIndex;\n const endIndex = options.endIndex;\n\n const activeItem = table.rowsByIndex().get(activeIndex)!.item!;\n const activeItemId = table.trackBy(activeItem)!;\n\n if (table.selectable() === 'single') {\n await this.selectItems(endIndex, endIndex);\n return;\n }\n\n if (!selectedIds.has(activeItemId)) {\n await this.selectItems(startIndex, endIndex);\n return;\n }\n\n if (this.isSelectionAtBlockStart(activeIndex)) {\n await this.selectFromBlockStart(startIndex, endIndex);\n return;\n }\n\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n\n private async ctrlShiftDown(options: {endIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n\n const startIndex = options.activeIndex;\n const endIndex = options.endIndex;\n\n if (table.selectable() === 'single') {\n await this.selectItems(endIndex, endIndex);\n }\n else {\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n }\n\n private async shiftUp(options: {startIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n const selectedIds = table.selectedIds();\n const activeIndex = options.activeIndex;\n\n const startIndex = options.startIndex;\n const endIndex = activeIndex;\n\n const activeItem = table.rowsByIndex().get(activeIndex)!.item!;\n const activeItemId = table.trackBy(activeItem)!;\n\n if (table.selectable() === 'single') {\n await this.selectItems(startIndex, startIndex);\n return;\n }\n\n if (!selectedIds.has(activeItemId)) {\n await this.selectItems(startIndex, endIndex);\n return;\n }\n\n if (this.isSelectionAtBlockEnd(activeIndex)) {\n await this.selectFromBlockEnd(startIndex, endIndex);\n return;\n }\n\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n\n private async ctrlShiftUp(options: {startIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n\n const startIndex = options.startIndex;\n const endIndex = options.activeIndex;\n\n if (table.selectable() === 'single') {\n await this.selectItems(startIndex, startIndex);\n }\n else {\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n }\n\n private isSelectionAtBlockStart(activeIndex: number): boolean {\n const table = this._table();\n const selectedIds = table.selectedIds();\n\n const previousItem = table.rowsByIndex().get(activeIndex - 1)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n const nextItem = table.rowsByIndex().get(activeIndex + 1)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n return !selectedIds.has(previousItemId) && selectedIds.has(nextItemId);\n }\n\n private isSelectionAtBlockEnd(activeIndex: number): boolean {\n const table = this._table();\n const selectedIds = table.selectedIds();\n\n const previousItem = table.rowsByIndex().get(activeIndex - 1)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n const nextItem = table.rowsByIndex().get(activeIndex + 1)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n return selectedIds.has(previousItemId) && !selectedIds.has(nextItemId);\n }\n\n private async loadMissingItems(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n const indices = rangeInclusive(startIndex, endIndex + 1);\n const rows = indices.map(i => table.rowsByIndex().get(i));\n if (rows.some(row => row?.id === undefined)) {\n await Promise.race([\n table.loadRange(startIndex, endIndex + 1),\n firstValueFrom(timer(5_000)),\n ]);\n }\n }\n\n private async selectItems(startIndex: number, endIndex: number, options?: {add: boolean}): Promise<void> {\n const table = this._table();\n const indices = rangeInclusive(startIndex, endIndex);\n const add = options?.add ?? false;\n let rows = indices.map(i => table.rowsByIndex().get(i));\n\n if (rows.some(row => row?.id === undefined)) {\n // If not all id's could be found load the missing items.\n await Promise.race([\n table.loadRange(startIndex, endIndex),\n firstValueFrom(timer(5_000)),\n ]);\n rows = indices.map(i => table.rowsByIndex().get(i));\n }\n\n table.updateSelectedItems(existing => new Map<unknown, T>([\n ...(add ? existing : []),\n ...rows\n .filter((row): row is Required<SciTableRow<T>> => row?.id !== undefined && row.item !== undefined)\n .map((row): [unknown, T] => [row.id, row.item]),\n ]));\n }\n\n private async selectFromBlockStart(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n\n await this.loadMissingItems(startIndex, endIndex);\n const indices = rangeInclusive(startIndex, endIndex);\n\n table.updateSelectedItems(selection => {\n const newSelection = new Map(selection);\n\n for (let i = 0; i < indices.length; i++) {\n const currentIndex = indices[i]!;\n const nextIndex = indices[i + 1]!;\n\n const item = table.rowsByIndex().get(currentIndex)?.item;\n if (!item) {\n continue;\n }\n\n const itemId = table.trackBy(item);\n const nextItem = table.rowsByIndex().get(nextIndex)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n if (selection.has(nextItemId)) {\n newSelection.delete(itemId);\n }\n else {\n newSelection.set(itemId, item);\n }\n }\n return newSelection;\n });\n }\n\n private async selectFromBlockEnd(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n\n await this.loadMissingItems(startIndex, endIndex);\n const indices = rangeInclusive(startIndex, endIndex);\n\n table.updateSelectedItems(selection => {\n const newSelection = new Map(selection);\n\n for (let i = indices.length - 1; i >= 0; i--) {\n const currentIndex = indices[i]!;\n const previousIndex = indices[i - 1]!;\n\n const item = table.rowsByIndex().get(currentIndex)?.item;\n if (!item) {\n continue;\n }\n\n const itemId = table.trackBy(item);\n const previousItem = table.rowsByIndex().get(previousIndex)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n if (selection.has(previousItemId)) {\n newSelection.delete(itemId);\n }\n else {\n newSelection.set(itemId, item);\n }\n }\n return newSelection;\n });\n }\n\n private toggleSelectedItem(item: T): void {\n const table = this._table();\n const id = table.trackBy(item);\n\n table.updateSelectedItems(selection => {\n const next = new Map(selection);\n if (next.has(id)) {\n next.delete(id);\n }\n else {\n if (table.selectable() === 'single') {\n next.clear();\n }\n next.set(id, item);\n }\n return next;\n });\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, input, Signal, TemplateRef} from '@angular/core';\nimport {SciTableCellLike, SciTableRow} from '../table.model';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {coerceSignal, SciComponentOutletDirective} from '@scion/components/common';\nimport {Arrays, Objects} from '@scion/toolkit/util';\nimport {SciIconComponent} from '@scion/components/icon';\n\n@Component({\n selector: 'sci-table-cell',\n templateUrl: './table-cell.component.html',\n styleUrl: './table-cell.component.scss',\n host: {\n '[attr.data-type]': 'cell().column.type',\n '[attr.data-column]': 'cell().column.name',\n '[attr.data-padding]': '!cell().column.padding ? false : null',\n '[attr.part]': 'row().selected() ? null : partAttribute()', // prevent styling selected rows\n },\n imports: [\n NgTemplateOutlet,\n SciIconComponent,\n SciComponentOutletDirective,\n ],\n})\nexport class SciTableCellComponent<T> {\n\n public readonly cell = input.required<SciTableCellLike>();\n public readonly row = input.required<SciTableRow<T>>();\n\n protected readonly template = this.computeTemplate();\n protected readonly templateContext = this.computeTemplateContext();\n protected readonly partAttribute = this.computePartAttribute();\n\n private computeTemplate(): Signal<TemplateRef<unknown> | null> {\n return computed(() => {\n const cell = this.cell();\n\n if (cell.type !== 'template') {\n return null;\n }\n\n return coerceSignal(cell.template.template)();\n });\n }\n\n private computeTemplateContext(): Signal<{$implicit: NonNullable<T>} | null> {\n return computed(() => {\n const cell = this.cell();\n const item = this.row().item!;\n\n if (cell.type !== 'template') {\n return null;\n }\n\n return {\n $implicit: item,\n ...Objects.entries(cell.template.context ?? {}).reduce((context, [key, value]) => ({\n ...context,\n [key]: coerceSignal(value)?.(), // eslint-disable-line @typescript-eslint/no-unnecessary-condition\n }), {}),\n };\n });\n }\n\n private computePartAttribute(): Signal<string> {\n return computed(() => {\n return [\n ...Arrays.coerce(this.row().bindings?.part()),\n this.cell().column.name,\n ].join(' ');\n });\n }\n}\n","@let cell = this.cell();\n\n@switch (cell.type) {\n @case ('template') {\n <ng-template *ngTemplateOutlet=\"template(); context: templateContext()\"/>\n }\n @case ('component') {\n <ng-container *sciComponentOutlet=\"cell.component\"/>\n }\n @case ('boolean') {\n <!-- TODO [dwi] Use another ligature for icon scion.clear -->\n <sci-icon class=\"checkbox\">{{cell.value() ? 'scion.checkmark' : 'scion.clear'}}</sci-icon>\n }\n @default {\n {{cell.value()}}\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject, input, output, viewChild} from '@angular/core';\nimport {SciTableEvent, SciTableRow} from '../table.model';\nimport {SciTableCellComponent} from '../table-cell/table-cell.component';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciTableSelectionService} from '../table-selection.service';\nimport {contributeMenu, SciToolbarComponent} from '@scion/components/menu';\nimport {UUID} from '@scion/toolkit/uuid';\n\n@Component({\n selector: 'sci-table-row',\n templateUrl: './table-row.component.html',\n styleUrl: './table-row.component.scss',\n imports: [\n SciTableCellComponent,\n SciToolbarComponent,\n ],\n host: {\n '[attr.data-active]': `row().active() ? '' : null`,\n '[attr.data-selected]': `row().selected() ? '' : null`,\n '[attr.data-hovered]': `row().hovered() ? '' : null`,\n '[class]': 'row().bindings?.cssClass?.()',\n '(click)': 'onRowClick($event)',\n '(dblclick)': 'onRowDblClick($event)',\n '(mouseenter)': 'onRowMouseEnter()',\n '(mouseleave)': 'onRowMouseLeave($event)',\n },\n})\nexport class SciTableRowComponent<T> {\n\n public readonly row = input.required<SciTableRow<T>>();\n public readonly primaryAction = output<SciTableEvent<T>>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly rowActionToolbar = viewChild(SciToolbarComponent);\n protected readonly rowActionsToolbarName = `toolbar:${UUID.randomUUID()}` as const;\n\n private readonly _selectionService = inject(SciTableSelectionService);\n\n constructor() {\n this.contributeRowActions();\n }\n\n protected onRowClick(event: PointerEvent): void {\n if (this.row().loading) {\n return;\n }\n void this._selectionService.onRowClick(this.row().index, event);\n }\n\n protected onRowDblClick(event: MouseEvent): void {\n if (this.row().loading) {\n return;\n }\n this.primaryAction.emit({sourceEvent: event, items: [this.row().item!]});\n }\n\n protected onRowMouseEnter(): void {\n this.table().hoveredIndex.set(this.row().index);\n }\n\n protected onRowMouseLeave(event: MouseEvent): void {\n const next = event.relatedTarget;\n // Do not unset hovered row when hovering a column resize splitter.\n if (next instanceof Element && next.closest('sci-splitter')) {\n return;\n }\n\n this.table().hoveredIndex.set(-1);\n }\n\n protected onActionToolbarClick(event: PointerEvent): void {\n event.stopPropagation(); // prevent selecting the row\n this.table().activeItem.set(this.row().item);\n }\n\n private contributeRowActions(): void {\n contributeMenu(this.rowActionsToolbarName, toolbar => {\n const rowActionsFactoryFn = this.table().rowActions;\n if (!this.row().loading && rowActionsFactoryFn) {\n rowActionsFactoryFn(toolbar, this.row().item, this.row().index);\n }\n });\n }\n}\n","@let row = this.row();\n@for (cell of row.cells; track cell.column.name) {\n <sci-table-cell [cell]=\"cell\" [row]=\"row\"/>\n} @empty {\n @for (column of table().columns(); track column.name) {\n <div class=\"skeleton e2e-skeleton\" [attr.data-column]=\"column.name\"></div>\n }\n}\n\n@let hasRowActions = !!table().rowActions;\n@let isRowHovered = table().hoveredRow() === row;\n@let isRowActionMenuOpen = rowActionToolbar()?.menuOpen();\n\n@if (hasRowActions && (isRowHovered || isRowActionMenuOpen)) {\n <!--eslint-disable-next-line @angular-eslint/template/click-events-have-key-events,@angular-eslint/template/interactive-supports-focus -->\n <sci-toolbar [name]=\"rowActionsToolbarName\" (click)=\"onActionToolbarClick($event)\" class=\"row-actions\"/>\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, inject} from '@angular/core';\nimport {SciTableSelectionService} from './table-selection.service';\n\n@Directive({\n selector: '[sciTableKeyboardNavigator]',\n host: {\n '[attr.tabindex]': '0', // required for keyboard navigation\n\n '(keydown.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.control.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.meta.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.control.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.meta.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n\n '(keydown.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.control.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.meta.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.control.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.meta.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n\n '(keydown.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n '(keydown.control.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n '(keydown.meta.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n\n '(keydown.control.a)': 'isFromInput($event) || selectionService.onControlA($event)',\n '(keydown.meta.a)': 'isFromInput($event) || selectionService.onControlA($event)',\n\n '(keydown.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.shift.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.control.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.shift.control.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n\n '(keydown.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.shift.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.control.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.shift.control.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n\n '(keydown.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.shift.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.control.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.shift.control.home)': 'isFromInput($event) || selectionService.onHome($event)',\n\n '(keydown.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.shift.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.control.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.shift.control.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n },\n})\nexport class SciTableKeyboardNavigatorDirective {\n\n protected readonly selectionService = inject(SciTableSelectionService);\n\n /**\n * Indicates whether the given keyboard event was triggered from an input element.\n */\n protected isFromInput(event: Event): boolean {\n if (event.target instanceof Element && event.target.closest('input, textarea, select') !== null) {\n return true;\n }\n if (event.target instanceof HTMLElement && event.target.isContentEditable) {\n return true;\n }\n return false;\n }\n\n /**\n * Indicates whether the given keyboard event was triggered from a button.\n */\n protected isFromButton(event: Event): boolean {\n return event.target instanceof Element && event.target.closest('button') !== null;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciTableColumnLike} from '../table.model';\nimport {afterNextRender, computed, inject, Injectable, Injector, Signal, signal, WritableSignal} from '@angular/core';\nimport {clamp} from '@scion/toolkit/util';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\n\n@Injectable()\nexport class SciTableColumnService {\n\n private readonly _table = inject(ɵSCI_TABLE);\n private readonly _injector = inject(Injector);\n\n /**\n * State while resizing a column.\n */\n private readonly _resizingState = signal<ColumnResizingState | undefined>(undefined);\n\n /**\n * Provides the calculated CSS `grid-template-columns` value based on configured and resized column widths.\n */\n public readonly gridTemplateColumns = this.computeGridTemplateColumns();\n\n /**\n * Computes the CSS `grid-template-columns` value.\n *\n * Columns are layed out according to their configured widths. While resizing a column, absolute pixel widths are used.\n */\n private computeGridTemplateColumns(): Signal<string> {\n return computed(() => {\n return this._table().columns()\n .map(column => {\n const width = this._resizingState()?.columnWidths()?.get(column.name) ?? column.width();\n if (typeof width === 'number') {\n return `${width}px`;\n }\n if (width.endsWith('fr')) {\n return cssMinmax({min: column.minWidth, max: width});\n }\n return width;\n })\n .join(' ') || '100%'; // fill full width if no column\n });\n }\n\n public startResize(column: SciTableColumnLike): void {\n column.resizing.set(true);\n this._resizingState.set({column, columnWidths: signal(undefined)});\n }\n\n public resize(columnWidth: number | 'min-content'): void {\n const state = this._resizingState()!;\n const clampedWidth = typeof columnWidth === 'number' ? clamp(columnWidth, {min: state.column.minWidth}) : columnWidth;\n\n if (clampedWidth !== state.columnWidths()?.get(state.column.name)) {\n const columnWidths = this.calculateColumnWidths(state.column, clampedWidth);\n state.columnWidths.set(columnWidths);\n }\n }\n\n public endResize(): void {\n const {column} = this._resizingState()!;\n\n // Run on next render to update user settings with effective column widths read from the DOM.\n afterNextRender(() => {\n this.updateUserSettings(column);\n column.resizing.set(false);\n this._resizingState.set(undefined);\n }, {injector: this._injector});\n }\n\n /**\n * Updates user settings with current column widths.\n */\n private updateUserSettings(resizedColumn: SciTableColumnLike): void {\n const resizedColumnIndex = this._table().columns().indexOf(resizedColumn);\n this._table().userSettings.update(userSettings => ({\n ...userSettings,\n columns: this._table().columns().flatMap((column, index) => {\n const columnSettings = userSettings.columns?.find(it => it.name === column.name);\n // Store the width of the resized column and all columns to its left.\n if (index <= resizedColumnIndex) {\n return {\n ...columnSettings ?? {name: column.name},\n width: column.location.width,\n };\n }\n\n return columnSettings ?? [];\n }),\n }));\n }\n\n /**\n * Calculates absolute column widths based on the resized column's new width.\n *\n * Any remaining viewport space is distributed proportionally among flex-sized columns using their current width ratio.\n */\n private calculateColumnWidths(columnToResize: SciTableColumnLike, newColumnWidth: number | 'min-content'): Map<`column:${string}`, number | 'min-content'> {\n const columns = this._table().columns();\n const columnIndex = columns.indexOf(columnToResize);\n\n return columns.reduce((map, column, index) => {\n if (index < columnIndex) {\n return map.set(column.name, column.location.width); // columns to the left are fixed\n }\n if (index === columnIndex) {\n return map.set(column.name, newColumnWidth);\n }\n return map;\n }, new Map<`column:${string}`, number | 'min-content'>());\n }\n}\n\n/**\n * State of an active column resize operation.\n */\ninterface ColumnResizingState {\n /**\n * Column being resized.\n */\n column: SciTableColumnLike;\n /**\n * Map of column names to their pixel widths.\n */\n columnWidths: WritableSignal<Map<`column:${string}`, number | 'min-content'> | undefined>;\n}\n\n/**\n * Creates a minmax() CSS function with the given min/max for use in a CSS grid.\n */\nfunction cssMinmax(minmax: {min: number; max: number | string}): string {\n const min = `${minmax.min}px`;\n const max = typeof minmax.max === 'number' ? `${minmax.max}px` : minmax.max;\n return `minmax(${min}, ${max})`;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, effect, ElementRef, inject, input, untracked} from '@angular/core';\nimport {SciTableColumnLike} from '../table.model';\n\n@Component({\n selector: 'sci-table-column',\n template: '',\n host: {\n '[attr.data-column]': 'column().name',\n '[style.min-width.px]': 'column().minWidth', // required when resizing the column to its preferred size to not drop below min-width.\n },\n})\nexport class SciTableColumnComponent {\n\n public readonly column = input.required<SciTableColumnLike>();\n\n constructor() {\n this.injectLocationToColumn();\n }\n\n private injectLocationToColumn(): void {\n const element = inject(ElementRef).nativeElement as HTMLElement;\n\n effect(onCleanup => {\n const column = this.column();\n\n untracked(() => {\n const location = column.location = {\n get x(): number {\n return element.getBoundingClientRect().left;\n },\n get width(): number {\n return element.offsetWidth;\n },\n };\n onCleanup(() => {\n if (column.location === location) {\n column.location = {x: 0, width: 0};\n }\n });\n });\n });\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject, input, signal} from '@angular/core';\nimport {SciSplitterComponent, SplitterMoveEvent} from '@scion/components/splitter';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciTableColumnLike} from '../table.model';\nimport {SciTableRowComponent} from '../table-row/table-row.component';\nimport {SciTableColumnService} from '../table-column/table-column.service';\nimport {SciTableColumnComponent} from '../table-column/table-column.component';\n\n@Component({\n selector: 'sci-table-columns',\n templateUrl: './table-columns.component.html',\n styleUrl: './table-columns.component.scss',\n imports: [\n SciSplitterComponent,\n SciTableColumnComponent,\n ],\n})\nexport class SciTableColumnsComponent<T> {\n\n public readonly rows = input.required<readonly SciTableRowComponent<unknown>[]>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n\n private readonly _hovered = signal(false);\n private readonly _columnService = inject(SciTableColumnService);\n\n protected onResizeStart(column: SciTableColumnLike): void {\n this._columnService.startResize(column);\n }\n\n protected onResize(column: SciTableColumnLike<T>, event: SplitterMoveEvent): void {\n const pointerPosition = event.position.clientPos; // TODO [dwi] Change to screen coordinates to work with microfrontends\n const columnStart = column.location.x - 1; // -1 because splitters are positioned at the end of cell content\n const newColumnWidth = pointerPosition - columnStart;\n this._columnService.resize(newColumnWidth);\n }\n\n protected onResizeEnd(): void {\n this._columnService.endResize();\n\n // Clear the hovered row when resizing ends outside the splitter (for example, above or below it).\n if (!this._hovered()) {\n this.table().hoveredIndex.set(-1);\n }\n }\n\n /**\n * Resizes the column to its preferred size.\n */\n protected onPack(column: SciTableColumnLike): void {\n this._columnService.startResize(column);\n this._columnService.resize('min-content');\n this._columnService.endResize();\n }\n\n protected onMouseEnter(): void {\n this._hovered.set(true);\n }\n\n protected onMouseLeave(): void {\n this._hovered.set(false);\n\n // Do not clear the hovered row while dragging the resize handle, or quick movements will accidentally clear it.\n // If the mouse leaves the splitter during drag (above or below), the hovered row is unset when resizing ends.\n if (!this.table().resizing()) {\n this.table().hoveredIndex.set(-1);\n }\n }\n}\n","<!-- Render a resize splitter per resizable column. -->\n@for (column of table().columns(); track column.name; let i = $index) {\n @if (column.resizable()) {\n <sci-splitter orientation=\"vertical\"\n [class.resizing]=\"column.resizing()\"\n [attr.data-column]=\"column.name\"\n [style.grid-column]=\"i + 1\"\n (start)=\"onResizeStart(column)\"\n (move)=\"onResize(column, $event)\"\n (end)=\"onResizeEnd()\"\n (reset)=\"onPack(column)\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"/>\n }\n}\n\n<!-- Render an invisible synthetic column per column to read current widths and set minimum widths. -->\n@for (column of table().columns(); track column.name; let i = $index) {\n <sci-table-column [column]=\"column\" [style.grid-column]=\"i + 1\"/>\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, ElementRef, inject} from '@angular/core';\nimport {ɵSCI_TABLE} from './ɵtable.model';\n\n/**\n * Represents a semantic element for the table viewport provided as slotted content.\n */\n@Component({\n selector: 'sci-table-viewport',\n template: '<ng-content/>',\n host: {\n '[style.--ɵsci-table-viewport-width]': '`${table().tableViewRef()?.viewportWidth() ?? 0}px`',\n '[style.--ɵsci-table-viewport-height]': '`${viewportHeight() ?? 0}px`',\n '[style.--ɵsci-table-viewport-client-width]': '`${table().tableViewRef()?.viewportClientWidth() ?? 0}px`',\n '[style.--ɵsci-table-viewport-client-height]': '`${table().tableViewRef()?.viewportClientHeight() ?? 0}px`',\n '[style.--ɵsci-table-header-height]': '`${table().tableViewRef()?.headerHeight() ?? 0}px`',\n '[style.--ɵsci-table-cell-padding-inline]': '`${table().tableViewRef()?.cellPadding() ?? 0}px`',\n '[style.--ɵsci-table-row-height]': '`${table().tableViewRef()?.itemHeight() ?? 0}px`',\n },\n})\nexport class SciTableViewportComponent {\n\n public readonly host = inject(ElementRef).nativeElement as HTMLElement;\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly viewportHeight = computed(() => {\n const viewportHeight = this.table().tableViewRef()?.viewportHeight() ?? 0;\n const headerHeight = this.table().tableViewRef()?.headerHeight() ?? 0;\n return viewportHeight + headerHeight;\n });\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject} from '@angular/core';\nimport {SciTableColumnService} from './table-column/table-column.service';\nimport {ɵSCI_TABLE} from './ɵtable.model';\n\n/**\n * Represents a semantic element for the table body provided as slotted content.\n */\n@Component({\n selector: 'sci-table-grid',\n template: '<ng-content/>',\n providers: [\n SciTableColumnService,\n ],\n host: {\n '[style.--ɵsci-table-columns]': 'gridTemplateColumns()',\n '[style.--ɵsci-table-virtual-scroll-offset-top]': '`${table().virtualScrollOffset().top}px`',\n '[style.--ɵsci-table-virtual-scroll-offset-bottom]': '`${table().virtualScrollOffset().bottom}px`',\n },\n})\nexport class SciTableGridComponent {\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly gridTemplateColumns = inject(SciTableColumnService).gridTemplateColumns;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component} from '@angular/core';\n\n/**\n * Represents a semantic element for the table body provided as slotted content.\n */\n@Component({\n selector: 'sci-table-body',\n template: '<ng-content/>',\n})\nexport class SciTableBodyComponent {\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, inject, input} from '@angular/core';\nimport {SciTableColumnLike} from '../table.model';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {text} from '@scion/components/text';\nimport {NgTemplateOutlet} from '@angular/common';\n\n@Component({\n selector: 'sci-column-header',\n imports: [\n SciIconComponent,\n NgTemplateOutlet,\n ],\n templateUrl: './column-header.component.html',\n styleUrl: './column-header.component.scss',\n host: {\n '[attr.data-column]': 'column().name',\n '[attr.title]': 'header()',\n },\n})\nexport class SciColumnHeaderComponent<T> {\n\n public readonly column = input.required<SciTableColumnLike<T>>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly header = text(computed(() => this.column().header()));\n protected readonly sortDirection = computed(() => this.table().sortCriteria().find(criteria => criteria.columnName === this.column().name)?.direction);\n\n protected onSort(event: PointerEvent): void {\n this.table().sort(this.column().name, event.ctrlKey || event.metaKey);\n }\n}\n","@if (column().sortable()) {\n <button class=\"sort e2e-sort\"\n [attr.data-sort-direction]=\"sortDirection()\"\n (click)=\"onSort($event)\">\n <!-- Header -->\n <ng-container *ngTemplateOutlet=\"header_template\"/>\n\n <!-- Sort Indicator -->\n @switch (sortDirection()) {\n @case ('asc') {\n <sci-icon>scion.sort_ascending</sci-icon>\n }\n @case ('desc') {\n <sci-icon>scion.sort_descending</sci-icon>\n }\n @default {\n <sci-icon class=\"no-sort\">scion.sort_indicator</sci-icon>\n }\n }\n </button>\n} @else {\n <ng-container *ngTemplateOutlet=\"header_template\"/>\n}\n\n<ng-template #header_template>\n <span class=\"header e2e-header\" [class.wrap]=\"table().wrapHeader()\">{{header()}}</span>\n</ng-template>\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'sciColumnFilterBooleanLabel'})\nexport class SciColumnFilterBooleanLabelPipe implements PipeTransform {\n\n public transform(value: unknown | null): string | null {\n if (value === true) {\n return '%scion.components.yes.value';\n }\n if (value === false) {\n return '%scion.components.no.value';\n }\n return null;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, debounced, effect, ElementRef, inject, Injector, input, runInInjectionContext, signal, untracked, viewChild} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {SciTableColumnLike} from '../table.model';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {firstValueFrom, skip, timer} from 'rxjs';\nimport {contributeMenu, SciMenuRef, ɵSciMenuService} from '@scion/components/menu';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {SciTextPipe} from '@scion/components/text';\nimport {createDestroyableInjector} from '@scion/components/common';\nimport {SciColumnFilterBooleanLabelPipe} from './column-filter-boolean-label.pipe';\n\n@Component({\n selector: 'sci-column-filter',\n templateUrl: './column-filter.component.html',\n styleUrl: './column-filter.component.scss',\n imports: [\n FormsModule,\n SciIconComponent,\n SciTextPipe,\n SciColumnFilterBooleanLabelPipe,\n ],\n host: {\n '[attr.data-column]': 'column().name',\n '[attr.data-disabled]': `!column().filterable() ? '' : null`,\n '(click)': 'column().filterable() && onFilterClick()',\n },\n})\nexport class SciColumnFilterComponent<T> {\n\n public readonly column = input.required<SciTableColumnLike<T>>();\n\n protected readonly filter = signal<string | boolean | number | null>(null);\n protected readonly input = viewChild<ElementRef<HTMLElement>>('input');\n\n private readonly _table = inject(ɵSCI_TABLE);\n private readonly _menuService = inject(ɵSciMenuService);\n private readonly _injector = inject(Injector);\n private readonly _host = inject(ElementRef).nativeElement as HTMLElement;\n\n private _menu: SciMenuRef | undefined;\n\n constructor() {\n this.bindToModel();\n }\n\n protected onFilterClick(): void {\n if (this.column().type === 'boolean') {\n this.toggleBooleanMenu();\n }\n this.input()!.nativeElement.focus();\n }\n\n protected onReset(event: PointerEvent): void {\n this.filter.set(null);\n this.input()!.nativeElement.focus();\n event.stopPropagation(); // prevent opening menu\n }\n\n private bindToModel(): void {\n const filterDebounced = debounced(computed(() => trim(this.filter())), async value => {\n // Debounce only if not empty.\n if (value !== null && typeof value !== 'boolean') {\n await firstValueFrom(timer(200));\n }\n });\n\n effect(() => {\n const filter = filterDebounced.value();\n const table = this._table();\n const column = this.column();\n\n untracked(() => {\n table.filter(filter, {columnName: column.name});\n });\n });\n }\n\n private toggleBooleanMenu(): void {\n // Close menu if already opened.\n if (this._menu) {\n this._menu.close();\n return;\n }\n\n const injector = createDestroyableInjector({parent: this._injector});\n runInInjectionContext(injector, () => {\n // Contribute menu items.\n contributeMenu('menu:column-filter', menu => menu\n .addMenuItem({label: '%scion.components.yes.value', attributes: {'data-option': 'true'}, onSelect: () => this.filter.set(true)})\n .addMenuItem({label: '%scion.components.no.value', attributes: {'data-option': 'false'}, onSelect: () => this.filter.set(false)}),\n );\n\n // Open menu.\n this._menu = this._menuService.open('menu:column-filter', {\n anchor: this._host,\n minWidth: `${this._host.offsetWidth}px`,\n offset: {y: -1},\n });\n\n // Close menu when start resizing a column. By default, closes the menu only on mouse up.\n toObservable(this._table().resizing)\n .pipe(skip(1))\n .subscribe(() => this._menu?.close());\n\n this._menu.onClose(() => {\n injector.destroy();\n // Restore focus manually as it is not restored automatically since opening the popover inside Shadow DOM.\n // TODO [menu] Consider restore focus manually in Menu API due to restriction in shadow DOM.\n this.input()!.nativeElement.focus();\n this._menu = undefined;\n });\n });\n }\n}\n\nfunction trim(value: string | number | boolean | null): string | number | boolean | null {\n return typeof value === 'string' ? value.trim() || null : value;\n}\n","@if (column().filterable()) {\n @let active = filter() !== null && filter() !== '';\n\n <sci-icon class=\"filter e2e-filter\" [class.active]=\"active\">scion.filter</sci-icon>\n\n @switch (column().type) {\n @case ('number') {\n <input [(ngModel)]=\"filter\" type=\"number\" #input/>\n }\n @case ('boolean') {\n <input [ngModel]=\"(filter() | sciColumnFilterBooleanLabel | sciText)()\" type=\"button\" #input>\n <sci-icon class=\"chevron\">scion.chevron_down</sci-icon>\n }\n @default {\n <input [(ngModel)]=\"filter\" type=\"text\" #input/>\n }\n }\n\n @if (active) {\n <button class=\"clear e2e-clear\" (click)=\"onReset($event)\">\n <sci-icon>scion.clear</sci-icon>\n </button>\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject} from '@angular/core';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciColumnHeaderComponent} from '../column-header/column-header.component';\nimport {SciColumnFilterComponent} from '../column-filter/column-filter.component';\n\n@Component({\n selector: 'sci-table-header',\n templateUrl: './table-header.component.html',\n styleUrl: './table-header.component.scss',\n host: {\n '(wheel)': 'onMouseWheel($event)',\n },\n imports: [\n SciColumnHeaderComponent,\n SciColumnFilterComponent,\n ],\n})\nexport class SciTableHeaderComponent {\n\n protected readonly table = inject(ɵSCI_TABLE);\n\n protected onMouseWheel(event: WheelEvent): void {\n // Prevent vertical scrolling on header, but not horizontal scrolling.\n if (!event.shiftKey) {\n event.preventDefault();\n }\n }\n}\n","@let table = this.table();\n\n@if (table.showHeader()) {\n @for (column of table.columns(); track column.name) {\n <sci-column-header [column]=\"column\"/>\n }\n}\n@if (table.filterable()) {\n @for (column of table.columns(); track column.name) {\n <sci-column-filter [column]=\"column\"/>\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, effect, ElementRef, inject, input, output, Provider, untracked, viewChild, viewChildren, ViewEncapsulation} from '@angular/core';\nimport {SciTable, SciTableEvent} from './table.model';\nimport {ɵSCI_TABLE, ɵSciTable} from './ɵtable.model';\nimport {SciScrollbarComponent} from '@scion/components/viewport';\nimport {dimension} from '@scion/components/dimension';\nimport {SciTableSelectionService} from './table-selection.service';\nimport {SciTableRowComponent} from './table-row/table-row.component';\nimport {SciTableKeyboardNavigatorDirective} from './table-keyboard-navigator.directive';\nimport {SciTableColumnsComponent} from './table-columns/table-columns.component';\nimport {SciTextPipe} from '@scion/components/text';\nimport {SciThrobberComponent} from '@scion/components/throbber';\nimport {SciTableViewportComponent} from './table-viewport.component';\nimport {SciTableGridComponent} from './table-grid.component';\nimport {SciTableBodyComponent} from './table-body.component';\nimport {SciTableHeaderComponent} from './table-header/table-header.component';\nimport {SciAttributesDirective} from '@scion/components/common';\nimport {SciIconComponent} from '@scion/components/icon';\n\n/**\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\n@Component({\n selector: 'sci-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[attr.name]': 'name()', // Public API: Enables selecting the table by name in CSS (also if the table has a dynamic name input binding)\n '[style.--ɵsci-table-scrolling]': 'table().scrolling() ? `true` : null',\n '[style.--ɵsci-table-resizing]': 'table().resizing() ? `true` : null',\n },\n imports: [\n SciTableViewportComponent,\n SciTableHeaderComponent,\n SciTableGridComponent,\n SciTableBodyComponent,\n SciTableRowComponent,\n SciTableColumnsComponent,\n SciTableKeyboardNavigatorDirective,\n SciAttributesDirective,\n SciScrollbarComponent,\n SciTextPipe,\n SciThrobberComponent,\n SciIconComponent,\n ],\n providers: [\n provideSciTable(),\n SciTableSelectionService,\n ],\n})\nexport class SciTableComponent<T = unknown> {\n\n /**\n * Specifies a unique table identifier, used as the key for storing user preferences.\n */\n public readonly name = input.required<`table:${string}`>();\n\n /**\n * Specifies the table definition and datasource.\n */\n public readonly table = input.required({transform: (table: SciTable<T>) => table as ɵSciTable<T>});\n\n /**\n * Emits when the user double-clicks a row or presses `Enter` on selected rows.\n */\n public readonly primaryAction = output<SciTableEvent<T>>();\n\n private readonly _viewport = viewChild.required(SciTableViewportComponent, {read: ElementRef});\n private readonly _viewportClient = viewChild.required(SciTableGridComponent, {read: ElementRef});\n private readonly _tableHeader = viewChild(SciTableHeaderComponent, {read: ElementRef});\n private readonly _tableBody = viewChild.required(SciTableBodyComponent, {read: ElementRef});\n private readonly _itemSizeSyntheticElement = viewChild.required<ElementRef<HTMLElement>>('item_size_synthetic_element');\n private readonly _cellPaddingSyntheticElement = viewChild.required<ElementRef<HTMLElement>>('cell_padding_synthetic_element');\n\n protected readonly rows = viewChildren(SciTableRowComponent);\n\n constructor() {\n this.connectToModel();\n this.scrollActiveRowIntoViewport();\n }\n\n protected onRowPrimaryAction(event: SciTableEvent<T>): void {\n this.primaryAction.emit(event);\n }\n\n protected onRetry(): void {\n this.table().reset();\n }\n\n private connectToModel(): void {\n const viewportDimension = dimension(this._viewport);\n const viewportClientDimension = dimension(this._viewportClient);\n const tableHeaderDimension = dimension(this._tableHeader);\n const tableBodyDimension = dimension(this._tableBody);\n const cellPadding = dimension(this._cellPaddingSyntheticElement);\n const itemSizeDimension = dimension(this._itemSizeSyntheticElement);\n\n effect(onCleanup => {\n const name = this.name();\n const table = this.table();\n const viewport = this._viewport().nativeElement as HTMLElement;\n\n untracked(() => {\n table.connect(name, {\n viewport: viewport,\n viewportHeight: computed(() => viewportDimension().clientHeight - (tableHeaderDimension()?.offsetHeight ?? 0)),\n viewportWidth: computed(() => viewportDimension().clientWidth),\n viewportClientHeight: computed(() => viewportClientDimension().offsetHeight),\n viewportClientWidth: computed(() => tableBodyDimension().offsetWidth), // Use `table-body` instead of `table-grid` because `table-grid` has `min-width: 100%`, thus never shrinking below viewport width.\n cellPadding: computed(() => cellPadding().clientWidth),\n headerHeight: computed(() => tableHeaderDimension()?.offsetHeight ?? 0),\n itemHeight: computed(() => itemSizeDimension().offsetHeight),\n scrollToTop: () => viewport.scrollTo({top: 0}),\n });\n onCleanup(() => table.disconnect());\n });\n });\n }\n\n private scrollActiveRowIntoViewport(): void {\n effect(() => {\n const activeRow = this.table().activeRow();\n if (!activeRow) {\n return;\n }\n\n untracked(() => {\n const viewport = this._viewport().nativeElement as HTMLElement;\n const viewportHeight = this.table().tableViewRef()?.viewportHeight() ?? 0;\n const itemHeight = this.table().tableViewRef()?.itemHeight() ?? 0;\n const activeRowTop = activeRow.index * itemHeight;\n const activeRowBottom = activeRowTop + itemHeight;\n const scrollTop = viewport.scrollTop;\n const scrollBottom = scrollTop + viewportHeight;\n\n if (activeRowTop < scrollTop) {\n viewport.scrollTop = activeRowTop;\n }\n else if (activeRowBottom > scrollBottom) {\n viewport.scrollTop = activeRowBottom - viewportHeight;\n }\n });\n });\n }\n}\n\nfunction provideSciTable(): Provider {\n return {\n provide: ɵSCI_TABLE,\n useFactory: () => inject(SciTableComponent).table,\n };\n}\n","@let table = this.table();\n\n<sci-table-viewport #viewport>\n <sci-table-grid>\n <!-- Table header -->\n @if (table.showHeader() || table.filterable()) {\n <sci-table-header/>\n }\n\n <!-- Table body -->\n <sci-table-body sciTableKeyboardNavigator>\n @if (!table.error()) {\n <!-- Track index to reuse the table row elements -->\n @for (row of table.rows(); track $index) {\n <sci-table-row [row]=\"row\" (primaryAction)=\"onRowPrimaryAction($event)\" [sciAttributes]=\"row.bindings?.attributes()\"/>\n } @empty {\n <span class=\"message e2e-no-data\">{{('%scion.components.no_items.message' | sciText)()}}</span>\n }\n } @else {\n <span class=\"message e2e-datasource\">\n {{('%scion.components.datasource_error.message' | sciText)()}}\n\n <button (click)=\"onRetry()\" class=\"action e2e-datasource-retry\">\n <!-- TODO [dwi] Replace with SCION icon -->\n <sci-icon>refresh</sci-icon>\n <span>{{('%scion.components.retry.label' | sciText)()}}</span>\n </button>\n </span>\n }\n\n <!-- Render active row outline separately to preserve row border-radius within block selection. -->\n @if (table.activeRow()) {\n <div class=\"active-row-outline e2e-active-row-outline\"></div>\n }\n </sci-table-body>\n\n <!-- Render column splitters. -->\n <sci-table-columns [rows]=\"rows()\"/>\n </sci-table-grid>\n</sci-table-viewport>\n\n<!-- Scrollbars -->\n<sci-scrollbar direction=\"hscroll\" [viewport]=\"viewport.host\"/>\n<sci-scrollbar direction=\"vscroll\" [viewport]=\"viewport.host\"/>\n\n@if (table.loading()) {\n <sci-throbber type=\"spinner\"/>\n}\n\n<!-- Synthetic element to compute the absolute pixel value of the `--sci-table-row-height`, relative to the table's font size if em-based. -->\n<div class=\"synthetic item-size\" #item_size_synthetic_element></div>\n\n<!-- Synthetic element to compute the absolute pixel value of the `--sci-table-cell-padding-inline`, relative to the table's font size if em-based. -->\n<div class=\"synthetic cell-padding\" #cell_padding_synthetic_element></div>\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nexport {table, type SciTableColumnFactoryFn} from './table.factory';\nexport {SciTableComponent} from './table.component';\nexport {type SciTableCellContext, type SciTable, type SciTableDescriptor, type SciTableRowActionFactoryFn, type SciTableColumnType, type SciTableEvent} from './table.model';\nexport {type SciTableRowBindingFactoryFn, type SciTableRowBindingFactory, provideTableRowBinding} from './table-row-binding';\nexport {type SciTableDataLoaderFn, type SciTablePageResponse, type SciTablePageRequest, type SciTableColumnFilter, type SciTableSortCriterion, ɵillegaldatasource} from './table-datasource';\nexport {type SciTableColumnFactory, type SciTableColumnDescriptor, type SciStringColumnDescriptor, type SciNumberColumnDescriptor, type SciBooleanColumnDescriptor, type SciComponentColumnDescriptor, type SciTemplateColumnDescriptor, type SciTableColumnSortComparatorFn, type SciTableColumnFilterMatcherFn} from './table-column.factory';\nexport {type SciTableStorage, provideTableStorage} from './table-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵSciMenuService"],"mappings":"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"}
1
+ {"version":3,"file":"scion-components-table.mjs","sources":["../../../../projects/scion/components/table/src/table-date-column.model.ts","../../../../projects/scion/components/table/src/table-enum-column.model.ts","../../../../projects/scion/components/table/src/ɵtable-column.factory.ts","../../../../projects/scion/components/table/src/common.ts","../../../../projects/scion/components/table/src/table-storage.ts","../../../../projects/scion/components/table/src/ɵtable-cell-value-preloader.ts","../../../../projects/scion/components/table/src/table-cell-value-preloader.ts","../../../../projects/scion/components/table/src/ɵtable-array-datasource.ts","../../../../projects/scion/components/table/src/table.cache.ts","../../../../projects/scion/components/table/src/table-row-binding.ts","../../../../projects/scion/components/table/src/ɵtable.model.ts","../../../../projects/scion/components/table/src/table-datasource.ts","../../../../projects/scion/components/table/src/table.factory.ts","../../../../projects/scion/components/table/src/table-selection.service.ts","../../../../projects/scion/components/table/src/table-cell/number.pipe.ts","../../../../projects/scion/components/table/src/table-cell/table-cell.component.ts","../../../../projects/scion/components/table/src/table-cell/table-cell.component.html","../../../../projects/scion/components/table/src/table-row/table-row.component.ts","../../../../projects/scion/components/table/src/table-row/table-row.component.html","../../../../projects/scion/components/table/src/table-keyboard-navigator.directive.ts","../../../../projects/scion/components/table/src/table-column/table-column.service.ts","../../../../projects/scion/components/table/src/table-column/table-column.component.ts","../../../../projects/scion/components/table/src/table-columns/table-columns.component.ts","../../../../projects/scion/components/table/src/table-columns/table-columns.component.html","../../../../projects/scion/components/table/src/table-viewport.component.ts","../../../../projects/scion/components/table/src/table-grid.component.ts","../../../../projects/scion/components/table/src/table-body.component.ts","../../../../projects/scion/components/table/src/column-header/column-header.component.ts","../../../../projects/scion/components/table/src/column-header/column-header.component.html","../../../../projects/scion/components/table/src/column-filter/enum-label.pipe.ts","../../../../projects/scion/components/table/src/column-filter/column-filter.component.ts","../../../../projects/scion/components/table/src/column-filter/column-filter.component.html","../../../../projects/scion/components/table/src/table-header/table-header.component.ts","../../../../projects/scion/components/table/src/table-header/table-header.component.html","../../../../projects/scion/components/table/src/table.component.ts","../../../../projects/scion/components/table/src/table.component.html","../../../../projects/scion/components/table/src/public_api.ts","../../../../projects/scion/components/table/src/scion-components-table.ts"],"sourcesContent":["import {formatDate} from '@angular/common';\nimport {SciDateLike} from './table.model';\n\n/**\n * Creates a {@link SciDateValue} from the given date-like input.\n *\n * Calling this function is expensive due to date parsing and formatting.\n */\nexport function coerceDateValue(dateLike: SciDateLike | undefined, options: {format: string; locale: string; timezone?: string}): SciDateValue | undefined {\n const {format, locale, timezone} = options;\n\n switch (typeof dateLike) {\n case 'string': {\n const isoString = ensureIso8601DatePrefix(dateLike);\n return {\n isoString,\n millis: new Date(isoString).getTime(),\n formatted: formatDate(isoString, format, locale, timezone),\n };\n }\n case 'number': {\n const millis = dateLike;\n const isoString = new Date(millis).toISOString();\n return {\n isoString,\n millis,\n formatted: formatDate(isoString, format, locale, timezone),\n };\n }\n case 'object': {\n const date = dateLike;\n const isoString = date.toISOString();\n return {\n isoString,\n millis: date.getTime(),\n formatted: formatDate(isoString, format, locale, timezone),\n };\n }\n case 'undefined': {\n return undefined;\n }\n }\n}\n\n/**\n * Prepends '1970-01-01' if the date prefix is missing, as required by {@link formatDate}.\n *\n * Uses fast ASCII character code checks (`-`, `T`, `t`) to avoid string allocation.\n */\nfunction ensureIso8601DatePrefix(isoDate: string): string {\n // Check if iso string already starts with a full year date (YYYY-MM-DD)\n if (isoDate.charCodeAt(4) === 45) { // '-'\n return isoDate;\n }\n\n // Prepend epoch, adding 'T' separator if missing.\n switch (isoDate.charCodeAt(0)) {\n case 84: // 'T'\n case 116: // 't'\n return '1970-01-01' + isoDate;\n default:\n return '1970-01-01T' + isoDate;\n }\n}\n\n/**\n * Represents the internal value of {@link SciDateColumn}.\n */\nexport interface SciDateValue {\n /**\n * Full ISO 8601 date/time string.\n */\n isoString: string;\n /**\n * Milliseconds since UTC epoch.\n */\n millis: number;\n /**\n * Human-readable formatted date and time string.\n */\n formatted: string;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, inject, Injector, Signal} from '@angular/core';\nimport {text} from '@scion/components/text';\nimport {SciEnumColumn, SciEnumColumnValues, SciEnumValueLike} from './table.model';\nimport {coerceSignal, MaybeSignal} from '@scion/components/common';\n\n/**\n * Creates a {@link SciEnumValue} from the given enum-like input.\n */\nexport function coerceEnumValue(enumLike: MaybeSignal<SciEnumValueLike | undefined>, options: {enumeration: MaybeSignal<SciEnumColumnValues>; format: SciEnumColumn['format']; injector?: Injector}): Signal<SciEnumValue | undefined> {\n const value = coerceSignal(enumLike, {coerceUndefined: true});\n const enumeration = coerceSignal(options.enumeration);\n const enumEntry = computed(() => value() !== undefined ? enumeration().find(entry => entry.value === value()) : undefined);\n const label = text(computed(() => enumEntry()?.label), {injector: options.injector ?? inject(Injector)});\n const tooltip = text(computed(() => enumEntry()?.tooltip), {injector: options.injector ?? inject(Injector)});\n\n return computed(() => {\n if (!enumEntry()) {\n return undefined;\n }\n\n return {\n value: enumEntry()!.value,\n label: label()!,\n icon: enumEntry()!.icon,\n // Use tooltip if provided, or fall back to label, but only if it is not configured for display.\n tooltip: tooltip() ?? (tooltip() === null || options.format.label ? undefined : label()),\n } satisfies SciEnumValue;\n });\n}\n\n/**\n * Represents the internal value of {@link SciEnumColumn}.\n */\nexport interface SciEnumValue {\n value: SciEnumValueLike;\n /** localized text */\n label: string;\n /** localized tooltip */\n tooltip?: string;\n icon?: string;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciBooleanColumnDescriptor, SciComponentColumnDescriptor, SciDateColumnDescriptor, SciEnumColumnDescriptor, SciIconColumnDescriptor, SciNumberColumnDescriptor, SciStringColumnDescriptor, SciTableColumnDescriptorLike, SciTableColumnFactory, SciTemplateColumnDescriptor} from './table-column.factory';\nimport {SciColumnHeaderLike, SciComponentColumn, SciDateColumn, SciDateLike, SciEnumColumn, SciEnumValueLike, SciNumberColumn, SciStringColumn, SciTableColumn, SciTableColumnLike, SciTemplateColumn} from './table.model';\nimport {computed, DEFAULT_CURRENCY_CODE, inject, signal, untracked} from '@angular/core';\nimport {ɵSciTable} from './ɵtable.model';\nimport {coerceSignal, MaybeSignal, SCI_LOCALE} from '@scion/components/common';\nimport {coerceDateValue} from './table-date-column.model';\nimport {DATE_PIPE_DEFAULT_OPTIONS} from '@angular/common';\nimport {coerceEnumValue} from './table-enum-column.model';\nimport {text, Translatable} from '@scion/components/text';\n\nexport class ɵSciTableColumnFactory<T> implements SciTableColumnFactory<T> {\n\n public readonly columns = new Array<SciTableColumnLike<T>>();\n\n constructor(private readonly _table: ɵSciTable<T>) {\n }\n\n public addStringColumn(value: (item: T) => MaybeSignal<Translatable | undefined>): this;\n public addStringColumn(header: SciColumnHeaderLike, value: (item: T) => MaybeSignal<Translatable | undefined>): this;\n public addStringColumn(descriptor: SciStringColumnDescriptor<T>): this;\n public addStringColumn(descriptorLike: ((item: T) => MaybeSignal<string | undefined>) | SciColumnHeaderLike | SciStringColumnDescriptor<T>, value?: (item: T) => MaybeSignal<Translatable | undefined>): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n const column = this.mapToColumn(descriptor);\n const sortable = descriptor.sortable ?? true;\n const filterable = descriptor.filterable ?? true;\n\n this.columns.push({\n ...column,\n type: 'string',\n value: item => text(descriptor.value(item)),\n sortable: computed(() => this._table.sortable() && !!sortable),\n filterable: computed(() => this._table.filterable() && !!filterable),\n compare: typeof sortable === 'object' ? sortable.comparator : (a, b) => a.value.localeCompare(b.value),\n matches: typeof filterable === 'object' ? filterable.matcher : (text, context) => context.value.toLowerCase().includes(text.toLowerCase()),\n } satisfies SciStringColumn<T>);\n\n return this;\n }\n\n public addNumberColumn(value: (item: T) => MaybeSignal<number | undefined>): this;\n public addNumberColumn(header: SciColumnHeaderLike, value: (item: T) => MaybeSignal<number | undefined>): this;\n public addNumberColumn(descriptor: SciNumberColumnDescriptor<T>): this;\n public addNumberColumn(descriptorLike: ((item: T) => MaybeSignal<number | undefined>) | SciColumnHeaderLike | SciNumberColumnDescriptor<T>, value?: (item: T) => MaybeSignal<number | undefined>): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n const column = this.mapToColumn(descriptor);\n\n const locale = coerceSignal(descriptor.locale ?? inject(SCI_LOCALE));\n const currency = inject(DEFAULT_CURRENCY_CODE, {optional: true}) ?? 'USD';\n this.columns.push({\n ...column,\n type: 'number',\n value: item => coerceSignal(descriptor.value(item), {coerceUndefined: true}),\n sortable: computed(() => this._table.sortable() && (descriptor.sortable ?? true)),\n filterable: computed(() => this._table.filterable() && (descriptor.filterable ?? true)),\n compare: (a, b) => a.value - b.value,\n matches: (text, context) => context.value === text,\n format: computed(() => new Intl.NumberFormat(locale(), {currency, ...descriptor.format})),\n } satisfies SciNumberColumn<T>);\n\n return this;\n }\n\n public addBooleanColumn(value: (item: T) => MaybeSignal<boolean | undefined>): this;\n public addBooleanColumn(header: SciColumnHeaderLike, value: (item: T) => MaybeSignal<boolean | undefined>): this;\n public addBooleanColumn(descriptor: SciBooleanColumnDescriptor<T>): this;\n public addBooleanColumn(descriptorLike: ((item: T) => MaybeSignal<boolean | undefined>) | SciColumnHeaderLike | SciBooleanColumnDescriptor<T>, value?: (item: T) => MaybeSignal<boolean | undefined>): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n\n this.addEnumColumn({\n ...descriptor,\n value: item => coerceSignal(descriptor.value(item), {coerceUndefined: true}),\n values: [\n {value: true, icon: 'scion:true', label: '%scion:components:yes.value', tooltip: null},\n {value: false, icon: 'scion:false', label: '%scion:components:no.value', tooltip: null},\n ],\n format: {icon: true},\n filterable: descriptor.filterable === false ? false : 'single',\n referenceType: 'boolean',\n });\n return this;\n }\n\n public addDateColumn(value: (item: T) => MaybeSignal<SciDateLike | undefined>): this;\n public addDateColumn(header: SciColumnHeaderLike, value: (item: T) => MaybeSignal<SciDateLike | undefined>): this;\n public addDateColumn(descriptor: SciDateColumnDescriptor<T>): this;\n public addDateColumn(descriptorLike: ((item: T) => MaybeSignal<SciDateLike | undefined>) | SciColumnHeaderLike | SciDateColumnDescriptor<T>, value?: (item: T) => MaybeSignal<SciDateLike | undefined>): this {\n const descriptor = coerceColumnDescriptor(descriptorLike, value);\n const column = this.mapToColumn(descriptor);\n\n const defaults = inject(DATE_PIPE_DEFAULT_OPTIONS, {optional: true});\n const locale = coerceSignal(descriptor.locale ?? inject(SCI_LOCALE));\n const format = descriptor.format ?? defaults?.dateFormat ?? 'mediumDate';\n const timezone = descriptor.timezone ?? defaults?.timezone;\n\n this.columns.push({\n ...column,\n type: 'date',\n value: item => {\n const dateLike = coerceSignal(descriptor.value(item), {coerceUndefined: true});\n return computed(() => coerceDateValue(dateLike(), {locale: locale(), format, timezone}));\n },\n sortable: computed(() => this._table.sortable() && (descriptor.sortable ?? true)),\n filterable: computed(() => this._table.filterable() && (descriptor.filterable ?? true)),\n compare: (a, b) => a.value.millis - b.value.millis,\n matches: (text, context) => context.value.formatted.toLowerCase().includes(text.toLowerCase()),\n } satisfies SciDateColumn<T>);\n\n return this;\n }\n\n public addEnumColumn(descriptor: SciEnumColumnDescriptor<T>): this {\n const column = this.mapToColumn(descriptor);\n const enumeration = coerceSignal(descriptor.values);\n const positionByEnumValue = computed(() => enumeration().reduce((acc, entry, index) => acc.set(entry.value, index), new Map<SciEnumValueLike, number>()));\n const format: SciEnumColumn['format'] = descriptor.format\n ? {icon: descriptor.format.icon ?? false, label: descriptor.format.label ?? false, filter: {icon: descriptor.format.filter?.icon ?? false}} // eslint-disable-line @stylistic/operator-linebreak\n : {icon: false, label: true, filter: {icon: true}}; // eslint-disable-line @stylistic/operator-linebreak\n\n this.columns.push({\n ...column,\n type: 'enum',\n referenceType: descriptor.referenceType,\n value: item => coerceEnumValue(descriptor.value(item), {enumeration, format}),\n sortable: computed(() => this._table.sortable() && (descriptor.sortable ?? true)),\n filterable: computed(() => this._table.filterable() && (descriptor.filterable ?? 'multi')),\n enumeration,\n compare: (a, b) => untracked(() => (positionByEnumValue().get(a.value.value) ?? 0) - (positionByEnumValue().get(b.value.value) ?? 0)),\n matches: (filter, context) => {\n if (typeof filter === 'string') { // table filter\n return context.value.label.toLowerCase().includes(filter.toLowerCase());\n }\n else {\n return filter.includes(context.value.value); // column filter\n }\n },\n format,\n } satisfies SciEnumColumn<T>);\n\n return this;\n }\n\n public addIconColumn(descriptor: SciIconColumnDescriptor<T>): this {\n const resizable = typeof descriptor.header === 'string' || !!descriptor.header?.label?.length;\n\n this.addEnumColumn({\n ...descriptor,\n value: item => coerceSignal(descriptor.value(item), {coerceUndefined: true}),\n format: {icon: true, filter: {icon: true}},\n resizable: descriptor.resizable ?? resizable,\n width: descriptor.width ?? (resizable ? undefined : 'max-content'), // adapt width to intrinsic size\n minWidth: descriptor.minWidth ?? (resizable ? undefined : 32),\n referenceType: 'icon',\n });\n return this;\n }\n\n public addComponentColumn(descriptor: SciComponentColumnDescriptor<T>): this {\n // Require a filter matcher if filterable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.filterable === true) {\n throw Error('[ColumnDefinitionError] Component column requires a filter matcher in order to be filterable.');\n }\n\n // Require a sort comparator if sortable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.sortable === true) {\n throw Error('[ColumnDefinitionError] Component column requires a sort comparator in order to be sortable.');\n }\n\n const column = this.mapToColumn(descriptor);\n this.columns.push({\n ...column,\n type: 'component',\n component: descriptor.component,\n sortable: computed(() => this._table.sortable() && !!descriptor.sortable),\n filterable: computed(() => this._table.filterable() && !!descriptor.filterable),\n compare: typeof descriptor.sortable === 'object' ? descriptor.sortable.comparator : () => 0,\n matches: typeof descriptor.filterable === 'object' ? descriptor.filterable.matcher : () => false,\n padding: descriptor.padding ?? true,\n } satisfies SciComponentColumn<T>);\n\n return this;\n }\n\n public addTemplateColumn(descriptor: SciTemplateColumnDescriptor<T>): this {\n // Require a filter matcher if filterable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.filterable === true) {\n throw Error('[ColumnDefinitionError] Template column requires a filter matcher in order to be filterable.');\n }\n\n // Require a sort comparator if sortable on an array datasource.\n if (this._table.isArrayDatasource() && descriptor.sortable === true) {\n throw Error('[ColumnDefinitionError] Template column requires a sort comparator in order to be sortable.');\n }\n\n const column = this.mapToColumn(descriptor);\n this.columns.push({\n ...column,\n type: 'template',\n template: descriptor.template,\n sortable: computed(() => this._table.sortable() && !!descriptor.sortable),\n filterable: computed(() => this._table.filterable() && !!descriptor.filterable),\n compare: typeof descriptor.sortable === 'object' ? descriptor.sortable.comparator : () => 0,\n matches: typeof descriptor.filterable === 'object' ? descriptor.filterable.matcher : () => false,\n padding: descriptor.padding ?? true,\n } satisfies SciTemplateColumn<T>);\n\n return this;\n }\n\n /**\n * Maps given column descriptor to a {@link SciTableColumn}.\n */\n private mapToColumn(descriptor: SciTableColumnDescriptorLike<T>): Omit<SciTableColumn, 'type' | 'sortable' | 'filterable' | 'compare' | 'matches'> {\n // Require a unique column name.\n const name = descriptor.name ?? `column:${this.columns.length}`;\n if (this.columns.find(column => column.name === name)) {\n throw Error(`[ColumnDefinitionError] Column names must be unique. \"${name}\" is defined more than once.`);\n }\n\n // Disallow a filter matcher if using a custom datasource.\n if (!this._table.isArrayDatasource() && typeof descriptor.filterable === 'object') {\n throw Error('[ColumnDefinitionError] Configuring a filter matcher is not supported for tables using a datasource. Filtering must be done by the datasource.');\n }\n\n // Disallow a sort comparator if using a custom datasource.\n if (!this._table.isArrayDatasource() && typeof descriptor.sortable === 'object') {\n throw Error('[ColumnDefinitionError] Configuring a sort comparator is not supported for tables using a datasource. Sorting must be done by the datasource.');\n }\n\n return {\n name: name,\n header: untracked(() => {\n if (typeof descriptor.header === 'string') {\n return {label: text(descriptor.header), icon: undefined, tooltip: undefined};\n }\n return {\n label: descriptor.header?.label !== undefined ? text(descriptor.header.label) : undefined,\n icon: descriptor.header?.icon,\n tooltip: descriptor.header?.tooltip !== undefined ? text(descriptor.header.tooltip) : undefined,\n };\n }),\n resizable: computed(() => this._table.resizable() && (descriptor.resizable ?? true)),\n width: computed(() => {\n const userSettings = this._table.userSettings().columns?.find(column => column.name === name);\n return userSettings?.width ? `${userSettings.width}px` : descriptor.width ?? '1fr';\n }),\n minWidth: descriptor.minWidth ?? 100,\n resizing: signal(false),\n padding: true,\n location: {x: 0, width: 0}, // set in `SciTableColumnComponent`\n };\n }\n}\n\n/**\n * Coerces given column factory arguments to a {@link SciTableColumnDescriptorLike}.\n */\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => MaybeSignal<string | undefined>) | SciColumnHeaderLike | SciStringColumnDescriptor<T>, value?: (item: T) => MaybeSignal<string | undefined>): SciStringColumnDescriptor<T>;\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => MaybeSignal<number | undefined>) | SciColumnHeaderLike | SciNumberColumnDescriptor<T>, value?: (item: T) => MaybeSignal<number | undefined>): SciNumberColumnDescriptor<T>;\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => MaybeSignal<boolean | undefined>) | SciColumnHeaderLike | SciBooleanColumnDescriptor<T>, value?: (item: T) => MaybeSignal<boolean | undefined>): SciBooleanColumnDescriptor<T>;\nfunction coerceColumnDescriptor<T>(descriptorLike: ((item: T) => MaybeSignal<SciDateLike | undefined>) | SciColumnHeaderLike | SciDateColumnDescriptor<T>, value?: (item: T) => MaybeSignal<SciDateLike | undefined>): SciDateColumnDescriptor<T>;\nfunction coerceColumnDescriptor(argument1: unknown, argument2?: unknown): unknown {\n if (argument2 === undefined) {\n return typeof argument1 === 'function' ? {value: argument1} : argument1;\n }\n return {\n header: argument1,\n value: argument2,\n };\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Observable} from 'rxjs';\n\nexport type MaybeAsync<T> = T | Promise<T> | Observable<T>;\n\n/**\n * Creates a range of integers starting at `start` and ending at `end` (including `end`).\n */\nexport function rangeInclusive(start: number, end: number): number[] {\n const range: number[] = [];\n for (let i = start; i <= end; i++) {\n range.push(i);\n }\n return range;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type} from '@angular/core';\n\n/**\n * Provides persistent storage for the sci-table.\n */\nexport interface SciTableStorage {\n\n /**\n * Method invoked to load a value from persisted storage.\n */\n load(name: `scion.components.table:${string}`): Promise<string | null> | string | null;\n\n /**\n * Method invoked to write a value to persisted storage.\n */\n store(name: `scion.components.table:${string}`, value: string): Promise<void> | void;\n}\n\nexport const SCI_TABLE_STORAGE = new InjectionToken<SciTableStorage>('SCI_TABLE_STORAGE', {factory: () => ({\n load: (name: `scion.components.table:${string}`) => localStorage.getItem(name),\n store: (name: `scion.components.table:${string}`, value: string) => localStorage.setItem(name, value),\n})});\n\n/**\n * Defaults to localStorage persistence.\n * @param storage\n */\nexport function provideTableStorage(storage: Type<SciTableStorage>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {provide: SCI_TABLE_STORAGE, useClass: storage},\n ]);\n}\n","import {computed, DestroyRef, inject, Injectable, Injector, onIdle, runInInjectionContext, signal} from '@angular/core';\nimport {LatestTaskExecutor} from '@scion/toolkit/common';\nimport {SciTableCellValuePreloader} from './table-cell-value-preloader';\n\n/** @inheritDoc */\n@Injectable()\nexport class ɵSciTableCellValuePreloader implements SciTableCellValuePreloader {\n\n private readonly _executor = new LatestTaskExecutor();\n private readonly _queue = new Array<() => void>(); // PERF: Do not change to signal to avoid array re-allocation on enqueue (expensive); queue size is tracked via a separate signal.\n private readonly _queueSize = signal(0);\n private readonly _injector = inject(Injector);\n\n /** @inheritDoc */\n public readonly loading = computed(() => this._queueSize() > 0);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this._executor.destroy();\n this._queue.length = 0;\n this._queueSize.set(0);\n });\n }\n\n /** @inheritDoc */\n public queue(cellValueFn: () => void): void {\n this._queue.push(cellValueFn);\n this._queueSize.update(size => size + 1);\n\n this._executor.submit(() => this.whenIdle().then(() => this.preloadQueuedBatch(PRELOAD_BATCH_SIZE)));\n }\n\n /**\n * Preloads the next batch of queued cell values, FIFO, then, if the queue is not empty, schedules the next batch.\n */\n private async preloadQueuedBatch(batchSize: number): Promise<void> {\n this._queue.splice(0, batchSize).forEach(fn => fn());\n this._queueSize.set(this._queue.length);\n\n // Preload next batch when idle again.\n if (this._queue.length) {\n this._executor.submit(() => this.whenIdle().then(() => this.preloadQueuedBatch(PRELOAD_BATCH_SIZE)));\n }\n }\n\n /**\n * Resolves when the browser becomes idle.\n *\n * @see onIdle\n */\n private whenIdle(): Promise<void> {\n return runInInjectionContext(this._injector, onIdle);\n }\n}\n\nconst PRELOAD_BATCH_SIZE = 50_000;\n","import {Injectable, Signal} from '@angular/core';\nimport {ɵSciTableCellValuePreloader} from './ɵtable-cell-value-preloader';\n\n/**\n * Preloads cell values in the background when the browser is idle. This prevents lag with large datasets, in particular\n * for expensive computations like formatting dates and generating ISO 8601 strings, providing faster sort and filter performance.\n *\n * If a cell's value is requested before background preloading finishes, it is computed synchronously.\n */\n@Injectable({providedIn: 'root', useClass: ɵSciTableCellValuePreloader})\nexport abstract class SciTableCellValuePreloader {\n\n /**\n * Indicates whether cell values are currently preloading.\n */\n public abstract readonly loading: Signal<boolean>;\n\n /**\n * Queues specified cell value provider function for execution in the background the next time the browser is idle.\n */\n public abstract queue(cellValueFn: () => void): void;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciTableColumnFilter, SciTableDataLoaderFn, SciTablePageRequest, SciTablePageResponse, SciTableSortCriterion} from './table-datasource';\nimport {SciTableColumn, SciTableColumnLike} from './table.model';\nimport {computed, inject, runInInjectionContext, signal, Signal, untracked} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {Arrays, Objects} from '@scion/toolkit/util';\nimport {SciTableCellValuePreloader} from './table-cell-value-preloader';\nimport {SciDateValue} from './table-date-column.model';\nimport {SciEnumValue} from './table-enum-column.model';\nimport {ɵSingleActiveInjectorFactory} from '@scion/components/common';\n\nexport function arrayDatasource<T>(data: Signal<T[]>, columns: Signal<SciTableColumnLike<T>[]>): SciTableDataLoaderFn<T> {\n const dataset = new Dataset(data, columns);\n\n return markAsArrayDatasource((request: SciTablePageRequest): Observable<SciTablePageResponse<T>> => {\n dataset.columnFilters.set(request.columnFilters);\n dataset.tableFilter.set(request.tableFilter);\n dataset.sortCriteria.set(request.sortCriteria);\n\n const totalCount = dataset.count;\n const items = dataset.slice(request.start, request.end);\n\n return toObservable(computed(() => ({\n totalCount: totalCount(),\n items: items(),\n })));\n });\n}\n\n/**\n * Provides a filtered and sorted view on given data.\n */\nclass Dataset<T> {\n\n private readonly _dataview: Signal<T[]>;\n\n public readonly columnFilters = signal<SciTableColumnFilter[]>([], {equal: Objects.isEqual});\n public readonly sortCriteria = signal<SciTableSortCriterion[]>([], {equal: Objects.isEqual});\n public readonly tableFilter = signal<string | undefined>(undefined);\n\n /**\n * Returns the total count of items matching the current filters and search criteria.\n */\n public readonly count = computed(() => this._dataview().length);\n\n constructor(data: Signal<T[]>, columns: Signal<SciTableColumnLike<T>[]>) {\n const tableCellValuePreloader = inject(SciTableCellValuePreloader);\n\n // Create a factory to instantiate a new injector per dataset run, releasing resources allocated in column value functions.\n const injectorFactory = new ɵSingleActiveInjectorFactory();\n\n const dataset = computed((): DatasetRow<T>[] => {\n const injector = injectorFactory.create();\n return data().map(item => ({\n item,\n cells: columns().reduce((cells, column) => untracked(() => {\n // PERF: Cell values are computed lazily (on idle or first use) to defer expensive computations like date formatting.\n const tableCellValue = 'value' in column ? new eSciTableCellValue(tableCellValuePreloader, () => runInInjectionContext(injector, () => column.value(item)())) : undefined;\n return cells.set(column.name, {\n column: column as SciTableColumn,\n value: () => tableCellValue?.value(),\n });\n }), new Map<`column:${string}`, DatasetCell>()),\n }));\n });\n\n // Memoize filtered/sorted view; recomputes only when dataset or criteria change, not when scrolling through the view, as sorting is an expensive operation.\n this._dataview = computed(() => {\n const rows = dataset();\n const columnFilters = this.columnFilters();\n const tableFilter = this.tableFilter();\n const sortCriteria = this.sortCriteria();\n\n // PERF: Do not track signals inside `Array.sort` to avoid Angular signal tracking overhead as the comparator runs repeatedly, degrading performance otherwise.\n return untracked(() => rows\n .filter(row => matchesRow(row, columnFilters, {coerceEnumValueToArray: true}) && matchesGlobalFilter(row, tableFilter, {coerceEnumValueToArray: false}))\n .sort((a, b) => compareRows(a, b, sortCriteria))\n .map(row => row.item));\n });\n }\n\n /**\n * Returns a slice of the filtered and sorted data within the given range (start inclusive, end exclusive).\n */\n public slice(start: number, end: number): Signal<T[]> {\n return computed(() => this._dataview().slice(start, end));\n }\n}\n\ninterface DatasetRow<T> {\n item: T;\n cells: Map<`column:${string}`, DatasetCell>;\n}\n\ninterface DatasetCell {\n column: SciTableColumn;\n value: () => string | number | boolean | SciDateValue | SciEnumValue | undefined;\n}\n\n/**\n * Tests whether a row matches the given global filter.\n */\nfunction matchesGlobalFilter<T>(row: DatasetRow<T>, filter: string | undefined, options: {coerceEnumValueToArray: boolean}): boolean {\n if (!filter?.trim()) {\n return true;\n }\n\n for (const cell of row.cells.values()) {\n const text = cell.column.type === 'number' ? toNumber(filter) : filter;\n if (text === undefined) {\n continue;\n }\n\n if (matchesRow(row, [{text, columnName: cell.column.name} satisfies SciTableColumnFilter], options)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Tests whether a row matches the given column filters.\n */\nfunction matchesRow<T>(row: DatasetRow<T>, columnFilters: SciTableColumnFilter[], options: {coerceEnumValueToArray: boolean}): boolean {\n if (!columnFilters.length) {\n return true;\n }\n\n for (const columnFilter of columnFilters) {\n const cell = row.cells.get(columnFilter.columnName)!;\n if ('value' in cell.column && cell.value() === undefined) { // Component and template columns have no value.\n return false;\n }\n\n const filter = cell.column.type === 'enum' && options.coerceEnumValueToArray ? Arrays.coerce(columnFilter.text) : columnFilter.text;\n if (!cell.column.matches(filter, {item: row.item, value: cell.value()})) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Compares two rows based on the given sort criteria.\n */\nfunction compareRows<T>(row1: DatasetRow<T>, row2: DatasetRow<T>, sortCriteria: SciTableSortCriterion[]): number {\n if (!sortCriteria.length) {\n return 0;\n }\n\n for (const criterion of sortCriteria) {\n const cell1 = row1.cells.get(criterion.columnName)!;\n const cell2 = row2.cells.get(criterion.columnName)!;\n const value1 = cell1.value();\n const value2 = cell2.value();\n\n // Always place `undefined` values at the end, independent of the sort direction. Note that component and template columns have no value.\n if (value1 === undefined && value2 !== undefined) {\n return 1;\n }\n if (value2 === undefined && value1 !== undefined) {\n return -1;\n }\n\n // Prevent calling comparator for value columns where both values are undefined. Note that component and template columns have no value.\n if (value1 === undefined && value2 === undefined && 'value' in cell1.column) {\n return 0;\n }\n\n const comparison = cell1.column.compare({item: row1.item, value: value1}, {item: row2.item, value: value2});\n if (comparison !== 0) {\n return criterion.direction === 'asc' ? comparison : -comparison;\n }\n }\n\n return 0;\n}\n\n/**\n * Checks whether given {@link SciTableDataLoaderFn} represents an {@link arrayDatasource}.\n */\nexport function isArrayDatasource(loader: SciTableDataLoaderFn<unknown>): boolean {\n return ARRAY_DATASOURCE_MARKER in loader;\n}\n\n/**\n * Marks given {@link SciTableDataLoaderFn} as an array data source.\n */\nfunction markAsArrayDatasource<TABLE_DATA_LOADER extends SciTableDataLoaderFn<unknown>>(loader: TABLE_DATA_LOADER): TABLE_DATA_LOADER {\n Object.defineProperty(loader, ARRAY_DATASOURCE_MARKER, {value: true, writable: false, enumerable: false, configurable: false});\n return loader;\n}\n\n/**\n * Identifies a {@link SciTableDataLoaderFn} as an {@link arrayDatasource}.\n */\nconst ARRAY_DATASOURCE_MARKER = Symbol('ARRAY_DATASOURCE_HINT');\n\n/**\n * Converts the given string to a number, or `undefined` if it cannot be parsed.\n */\nfunction toNumber(numberLike: string): number | undefined {\n const number = Number.parseFloat(numberLike);\n return !Number.isNaN(number) ? number : undefined;\n}\n\n/**\n * Provides lazy loading for the cell's value, preloading it when idle for better sort/filter performance.\n *\n * The value is computed at most once, whether it gets preloaded during idle time or requested synchronously via {@link value()}.\n */\nclass eSciTableCellValue<V> {\n\n private _value: V | undefined;\n\n constructor(preloader: SciTableCellValuePreloader, private _valueFn: () => V) {\n preloader.queue(() => {\n this._value ??= this._valueFn();\n });\n }\n\n public value(): V {\n return this._value ??= untracked(() => this._valueFn());\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, ResourceRef, signal, Signal} from '@angular/core';\nimport {SciTableRow} from './table.model';\nimport {Objects} from '@scion/toolkit/util';\n\nexport class SciTableCache<T> {\n\n private readonly _cache = signal(new Map<SciTableCacheKey, SciTableCacheEntry<T>>());\n\n public readonly loading: Signal<boolean> = computed(() => this.values().some(entry => entry.rows.isLoading()));\n public readonly error: Signal<Error | undefined> = computed(() => this.values().find(entry => entry.rows.error())?.rows.error());\n public readonly values: Signal<SciTableCacheEntry<T>[]> = computed(() => [...this._cache().values()]);\n\n public readonly rowsByIndex: Signal<Map<number, SciTableRow<T>>> = computed(() => this.values()\n .flatMap(page => page.rows.value())\n .reduce((acc, row) => acc.set(row.index, row), new Map<number, SciTableRow<T>>()), {equal: Objects.isEqual});\n\n public readonly rowsById: Signal<Map<unknown, SciTableRow<T>>> = computed(() => this.values()\n .flatMap(page => page.rows.value())\n .reduce((acc, row) => row.id !== undefined ? acc.set(row.id, row) : acc, new Map<unknown, SciTableRow<T>>()), {equal: Objects.isEqual});\n\n public has(key: SciTableCacheKey): boolean {\n return this._cache().has(key);\n }\n\n public get(key: SciTableCacheKey): SciTableCacheEntry<T> | undefined {\n return this._cache().get(key);\n }\n\n public set(key: SciTableCacheKey, entry: SciTableCacheEntry<T>): void {\n this._cache.update(cache => {\n const cacheCopy = new Map(cache);\n const existing = cacheCopy.get(key);\n if (existing) {\n cacheCopy.delete(key);\n existing.dispose();\n }\n\n cacheCopy.set(key, entry);\n return cacheCopy;\n });\n }\n\n /**\n * Deletes the specified page from the cache, but only if still loading.\n */\n public deleteIfLoading(key: SciTableCacheKey): void {\n const cacheEntry = this._cache().get(key);\n if (!cacheEntry?.rows.isLoading()) {\n return;\n }\n\n this._cache.update(cache => {\n const cacheCopy = new Map(cache);\n cacheCopy.delete(key);\n cacheEntry.dispose();\n return cacheCopy;\n });\n }\n\n public clear(): void {\n this._cache.update(cache => {\n for (const entry of cache.values()) {\n entry.dispose();\n }\n return new Map();\n });\n }\n}\n\nexport interface SciTableCacheEntry<T> {\n rows: ResourceRef<SciTableRow<T>[]>;\n start: number;\n end: number;\n dispose: () => void;\n}\n\ntype SciTableCacheKey = `${number}-${number}`;\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, inject, InjectionToken, Provider, Signal} from '@angular/core';\nimport {Objects} from '@scion/toolkit/util';\n\n/**\n * Provides row bindings to tables in the scope of the injector providing the bindings.\n *\n * Multiple providers can be registered. Providers at different injector tree levels form a hierarchy.\n */\nexport function provideTableRowBinding<T = unknown>(bindings: SciTableRowBindingFactoryFn<T>): Provider[] {\n return [\n {\n provide: SCI_TABLE_ROW_BINDING,\n useValue: bindings,\n multi: true,\n },\n {\n provide: SCI_TABLE_ROW_BINDINGS,\n useFactory: (): SciTableRowBindingFactoryFn<unknown>[] => {\n return [\n // Collect bindings registered in parent injectors.\n ...inject<SciTableRowBindingFactoryFn<unknown>[]>(SCI_TABLE_ROW_BINDINGS, {skipSelf: true, optional: true}) ?? [],\n // Collect bindings registered in this injector.\n ...inject<SciTableRowBindingFactoryFn<unknown>[]>(SCI_TABLE_ROW_BINDING),\n ];\n },\n },\n ];\n}\n\n/**\n * Signature of a function to configure row bindings.\n *\n * Called per item with a {@link SciTableRowBindingFactory} to register bindings.\n *\n * The function:\n * - Runs in a reactive context and re-evaluates when tracked signals change.\n * - Can call `inject` to get required dependencies.\n */\nexport type SciTableRowBindingFactoryFn<T> = (row: SciTableRowBindingFactory, item: T, index: number) => void;\n\n/**\n * Factory for configuring row bindings.\n *\n * Row bindings enable associating metadata and icons with a row. Metadata includes CSS shadow parts, CSS classes, and HTML attributes.\n */\nexport interface SciTableRowBindingFactory {\n /**\n * Binds an icon to the row, displayed in the first column.\n *\n * ```ts\n * import {table} from '@scion/components/table';\n *\n * table({\n * datasource: data,\n * columns: table => ...,\n * rowBindings: bindings => bindings.addIconBinding('account_circle'),\n * });\n * ```\n *\n * SCION uses icon providers to render icons. An icon provider can be registered using {@link provideIconProvider}.\n *\n * Defaults to a Material icon provider if the application has not registered an icon provider, interpreting the icon as a Material Icon font ligature.\n * Refer to https://fonts.google.com/icons for available Material icons and instructions on including the Material icon font.\n */\n addIconBinding(icon: string): this;\n\n /**\n * Binds a CSS shadow part to the row for custom row/cell styling using the `::part()` CSS pseudo-element selector.\n *\n * Example usage:\n * ```ts\n * import {table} from '@scion/components/table';\n *\n * table({\n * datasource: data,\n * columns: table => ...,\n * rowBindings: (bindings, item, index) => bindings\n * .addPartBinding(index % 2 === 0 ? 'row:even' : 'row:odd')\n * .addPartBinding(item.active ? 'row:active' : undefined),\n * });\n * ```\n *\n * ```scss\n * sci-table::part(row\\:even row\\:not\\:selected) {\n * background-color: lightgray;\n * }\n *\n * sci-table::part(row\\:active row\\:not\\:selected) {\n * background-color: green;\n * }\n * ```\n */\n addPartBinding(name: `row:${string}` | undefined): this;\n\n /**\n * Binds an HTML attribute to the row.\n *\n * Useful for end-to-end testing, such as associating a row with an item's primary key.\n *\n * ```ts\n * import {table} from '@scion/components/table';\n *\n * table({\n * datasource: data,\n * columns: table => ...,\n * rowBindings: (bindings, item) => bindings.addAttributeBinding('data-id', item.id),\n * });\n * ```\n */\n addAttributeBinding(name: string, value: unknown | undefined): this;\n\n /**\n * Binds a CSS class to the row.\n */\n addClassBinding(name: string | undefined): this;\n}\n\nclass ɵSciTableRowBindingFactory implements SciTableRowBindingFactory {\n\n public readonly icons = new Array<string>();\n public readonly parts = new Array<`row:${string}`>();\n public readonly attributes = new Array<[string, unknown]>();\n public readonly classes = new Array<string>();\n\n public addIconBinding(icon: string | undefined): this {\n if (icon) {\n this.icons.push(icon);\n }\n return this;\n }\n\n public addPartBinding(name: `row:${string}` | undefined): this {\n if (name) {\n this.parts.push(name);\n }\n return this;\n }\n\n public addAttributeBinding(name: string, value: unknown | undefined): this {\n if (value !== undefined) {\n this.attributes.push([name, value]);\n }\n return this;\n }\n\n public addClassBinding(name: string | undefined): this {\n if (name) {\n this.classes.push(name);\n }\n return this;\n }\n}\n\nexport function coerceTableRowBindings<T>(bindingsFn: SciTableRowBindingFactoryFn<T>[], item: T, index: number): SciTableRowBindings {\n const factory = computed(() => {\n const factory = new ɵSciTableRowBindingFactory();\n bindingsFn.forEach(fn => fn(factory, item, index));\n return factory;\n });\n\n return {\n icons: computed(() => factory().icons, {equal: Objects.isEqual}),\n parts: computed(() => factory().parts, {equal: Objects.isEqual}),\n attributes: computed(() => Object.fromEntries(factory().attributes), {equal: Objects.isEqual}),\n classes: computed(() => factory().classes, {equal: Objects.isEqual}),\n };\n}\n\nexport interface SciTableRowBindings {\n icons: Signal<string[]>;\n parts: Signal<`row:${string}`[]>;\n attributes: Signal<{[name: string]: unknown}>;\n classes: Signal<string[]>;\n}\n\n/**\n * Multi-DI token for registering a {@link SciTableRowBindingFactory}.\n */\nexport const SCI_TABLE_ROW_BINDING = new InjectionToken<SciTableRowBindingFactory[]>('SCI_TABLE_ROW_BINDING');\n\n/**\n * DI token to inject {@link SciTableRowBindingFactory} functions provided in the current and parent injectors.\n */\nexport const SCI_TABLE_ROW_BINDINGS = new InjectionToken<SciTableRowBindingFactory[]>('SCI_TABLE_ROW_BINDINGS');\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, effect, inject, InjectionToken, Injector, isSignal, linkedSignal, NgZone, resource, runInInjectionContext, signal, Signal, untracked, WritableSignal} from '@angular/core';\nimport {SciTableColumnFilter, SciTableDataLoaderFn, SciTableSortCriterion} from './table-datasource';\nimport {SciEnumValueLike, SciTable, SciTableCellLike, SciTableColumnLike, SciTableDescriptor, SciTableRow, SciTableRowActionFactoryFn} from './table.model';\nimport {ɵSciTableColumnFactory} from './ɵtable-column.factory';\nimport {rangeInclusive} from './common';\nimport {SCI_TABLE_STORAGE} from './table-storage';\nimport {toLazyObservable, ɵcreateDestroyableInjector, ɵSingleActiveInjectorFactory} from '@scion/components/common';\nimport {arrayDatasource, isArrayDatasource} from './ɵtable-array-datasource';\nimport {SciTableCache, SciTableCacheEntry} from './table.cache';\nimport {rxResource, takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {combineLatestWith, concat, defaultIfEmpty, firstValueFrom, fromEvent, of, skip, switchMap, tap, throwError, timer} from 'rxjs';\nimport {coerceTableRowBindings, SCI_TABLE_ROW_BINDINGS, SciTableRowBindingFactoryFn} from './table-row-binding';\nimport {clamp, Objects, Observables, runSafe} from '@scion/toolkit/util';\nimport {first, map, startWith} from 'rxjs/operators';\nimport {subscribeIn} from '@scion/toolkit/operators';\nimport {SciTableCellValuePreloader} from './table-cell-value-preloader';\n\nexport class ɵSciTable<T = unknown> implements SciTable<T> {\n\n private readonly _tableStorage = inject(SCI_TABLE_STORAGE);\n private readonly _injector = inject(Injector);\n\n public readonly name = signal<`table:${string}` | undefined>(undefined);\n public readonly columns: Signal<SciTableColumnLike<T>[]>;\n public readonly rowActions?: SciTableRowActionFactoryFn<T>;\n\n private readonly _rowBindings: SciTableRowBindingFactoryFn<T>[];\n private readonly _dataLoaderFn: SciTableDataLoaderFn<T>;\n private readonly _trackBy?: (item: T) => unknown;\n\n public readonly tableViewRef = signal<SciTableViewRef | undefined>(undefined);\n public readonly userSettings: WritableSignal<SciTableUserSettings>;\n public readonly bufferSize: number;\n public readonly pageSize: number;\n public readonly filterable: WritableSignal<boolean>;\n public readonly showHeader: WritableSignal<boolean>;\n public readonly wrapHeader: WritableSignal<boolean>;\n public readonly sortable: WritableSignal<boolean>;\n public readonly resizable: WritableSignal<boolean>;\n public readonly selectable: WritableSignal<'single' | 'multi' | false>;\n\n public readonly scrollRange: Signal<SciScrollRange | undefined>;\n public readonly scrollTop: Signal<number>;\n public readonly virtualScrollOffset: Signal<{top: number; bottom: number}>;\n public readonly viewportPageSize: Signal<number>;\n\n public readonly scrolling: Signal<boolean>;\n public readonly resizing = computed(() => this.columns().some(column => column.resizing()));\n\n public readonly sortCriteria = linkedSignal<SciTableColumnLike<T>[], SciTableSortCriterion[]>({\n source: () => this.columns(), // Discard stale criteria on column change.\n computation: (columns, previous) => previous?.value.filter(criteria => columns.some(column => column.name === criteria.columnName)) ?? [],\n equal: Objects.isEqual,\n });\n\n public readonly filterCriteria = linkedSignal<SciTableColumnLike<T>[], SciTableColumnFilter[]>({\n source: () => this.columns(), // Discard stale criteria on column change.\n computation: (columns, previous) => previous?.value.filter(criteria => columns.some(column => column.name === criteria.columnName)) ?? [],\n equal: Objects.isEqual,\n });\n\n private readonly _cache = new SciTableCache<T>();\n private readonly _tableCellValuePreloader = inject(SciTableCellValuePreloader);\n private readonly _tableFilter = signal<string | null>(null);\n private readonly _selectedItems = signal(new Map<unknown, T>());\n\n // Reset total count on criteria change to show skeletons instead of stale data while loading.\n public readonly totalCount = linkedSignal({\n source: () => this.criteria(),\n computation: () => undefined as number | undefined,\n });\n\n public readonly activeItem = linkedSignal({\n source: () => this.criteria(),\n computation: () => undefined as T | undefined,\n });\n\n public readonly hoveredIndex = linkedSignal({\n source: () => {\n this.criteria(); // reset on criteria change\n this.scrolling(); // reset when start scrolling\n },\n computation: () => -1,\n });\n\n public readonly criteria = computed(() => ({sort: this.sortCriteria(), filter: this.filterCriteria(), tableFilter: this._tableFilter()}));\n public readonly loading = computed(() => this._cache.loading() || this._tableCellValuePreloader.loading());\n public readonly error = this._cache.error;\n public readonly activeRow: Signal<SciTableRow<T> | undefined>;\n public readonly hoveredRow = computed(() => this.rowsByIndex().get(this.hoveredIndex()));\n public readonly selectedItems = computed(() => [...this._selectedItems().values()]);\n public readonly selectedIds = computed(() => new Set([...this._selectedItems().keys()]));\n public readonly rowsByIndex = this._cache.rowsByIndex;\n public readonly rows = this.computeRows();\n\n constructor(descriptor: SciTableDescriptor<T>) {\n // TODO [table] Remove after datasource is final. See ɵillegaldatasource.\n descriptor = {...descriptor, ɵdatasource: descriptor.ɵdatasource ?? descriptor.datasource};\n\n this.bufferSize = descriptor.bufferSize ?? 10;\n this.pageSize = descriptor.pageSize ?? 50;\n this.sortable = signal(descriptor.sortable ?? true);\n this.filterable = signal(descriptor.filterable ?? false);\n this.showHeader = signal(descriptor.showHeader ?? true);\n this.wrapHeader = signal(descriptor.wrapHeader ?? false);\n this.resizable = signal(descriptor.resizable ?? true);\n this.selectable = signal(descriptor.selectable ?? 'multi');\n this.userSettings = this.computeUserSettings();\n this.scrollRange = this.computeScrollRange();\n this.scrollTop = this.computeScrollTop();\n this.scrolling = this.computeScrolling();\n this.virtualScrollOffset = this.computeVirtualScrollOffset();\n this.viewportPageSize = this.computeViewportPageSize();\n this.activeRow = this.computeActiveRow();\n this.columns = this.computeColumns(descriptor);\n\n this.rowActions = descriptor.rowActions;\n this._rowBindings = [\n ...descriptor.rowBindings ? [descriptor.rowBindings] : [],\n ...inject<SciTableRowBindingFactoryFn<T>[]>(SCI_TABLE_ROW_BINDINGS, {optional: true}) ?? [],\n ];\n this._trackBy = descriptor.trackBy;\n this._dataLoaderFn = isSignal(descriptor.ɵdatasource) ? arrayDatasource(descriptor.ɵdatasource, this.columns) : descriptor.ɵdatasource!;\n\n this.installCriteriaWatcher();\n this.installPageLoader();\n }\n\n /**\n * Connects {@link SciTableComponent} to the model.\n */\n public connect(name: `table:${string}`, viewRef: SciTableViewRef): void {\n this.name.set(name);\n this.tableViewRef.set(viewRef);\n }\n\n public disconnect(): void {\n this.name.set(undefined);\n this.tableViewRef.set(undefined);\n }\n\n private computeColumns(descriptor: SciTableDescriptor<T>): Signal<SciTableColumnLike<T>[]> {\n // Create a factory to instantiate a new injector per column factory execution, releasing resources allocated in the previous execution.\n const injectorFactory = new ɵSingleActiveInjectorFactory();\n\n return computed(() => runInInjectionContext(injectorFactory.create(), () => {\n const tableColumnFactory = new ɵSciTableColumnFactory<T>(this);\n descriptor.columns(tableColumnFactory);\n return tableColumnFactory.columns;\n }));\n }\n\n /**\n * Computes the rows currently visible in the viewport (+buffer).\n */\n private computeRows(): Signal<SciTableRow<T>[]> {\n return computed(() => {\n const scrollRange = this.scrollRange();\n if (!scrollRange) {\n return [];\n }\n\n const rowsByIndex = this.rowsByIndex();\n const rowCount = scrollRange.end - scrollRange.start;\n\n // Populate rows with cached rows in the range window, fallback to row shell to show skeleton.\n return untracked(() => Array.from({length: rowCount}, (_, i) => rowsByIndex.get(scrollRange.start + i) ?? createSyntheticRow(i)));\n });\n\n function createSyntheticRow(index: number): SciTableRow<T> {\n return {\n index,\n loading: true,\n active: signal(false).asReadonly(),\n selected: signal(false).asReadonly(),\n hovered: signal(false).asReadonly(),\n };\n }\n }\n\n /**\n * Computes the visible row count based on the viewport size.\n */\n private computeScrollRange(): Signal<SciScrollRange | undefined> {\n return computed(() => {\n const tableViewRef = this.tableViewRef();\n if (!tableViewRef) {\n return undefined;\n }\n\n const viewportHeight = tableViewRef.viewportHeight();\n const itemHeight = tableViewRef.itemHeight();\n const scrollTop = this.scrollTop();\n\n const start = Math.floor(scrollTop / itemHeight);\n const viewportRowCount = Math.ceil(viewportHeight / itemHeight);\n const end = Math.min(start + viewportRowCount);\n\n const totalCount = this.totalCount() ?? viewportRowCount; // fill viewport if no data loaded yet\n\n return {\n start: clamp(start - this.bufferSize, {min: 0, max: Math.max(0, totalCount - viewportRowCount)}),\n end: clamp(end + this.bufferSize, {max: totalCount}),\n };\n }, {equal: Objects.isEqual});\n }\n\n private computeVirtualScrollOffset(): Signal<{top: number; bottom: number}> {\n return computed(() => {\n const itemHeight = this.tableViewRef()?.itemHeight() ?? 0;\n const totalCount = this.totalCount() ?? 0;\n const rangeEnd = Math.min(this.scrollRange()?.end ?? 0, this.totalCount() ?? 0);\n\n return {\n top: (this.scrollRange()?.start ?? 0) * itemHeight,\n bottom: (totalCount - rangeEnd) * itemHeight,\n };\n }, {equal: Objects.isEqual});\n }\n\n private computeViewportPageSize(): Signal<number> {\n return computed(() => {\n const itemHeight = this.tableViewRef()?.itemHeight() ?? 0;\n const viewportHeight = this.tableViewRef()?.viewportHeight() ?? 0;\n return Math.ceil(viewportHeight / itemHeight);\n });\n }\n\n /**\n * Tracks {@link HTMLElement.scrollTop} of the viewport.\n */\n private computeScrollTop(): Signal<number> {\n const zone = inject(NgZone);\n\n return rxResource({\n defaultValue: 0,\n params: () => this.tableViewRef()?.viewport,\n stream: ({params: viewport}) => fromEvent(viewport, 'scroll', {passive: true})\n .pipe(\n map(() => viewport.scrollTop),\n startWith(viewport.scrollTop),\n subscribeIn(fn => zone.runOutsideAngular(fn)),\n ),\n }).value;\n }\n\n /**\n * Tracks whether currently scrolling the viewport.\n */\n private computeScrolling(): Signal<boolean> {\n const zone = inject(NgZone);\n\n return rxResource({\n defaultValue: false,\n params: () => this.tableViewRef()?.viewport,\n stream: ({params: viewport}) => fromEvent(viewport, 'scroll', {passive: true})\n .pipe(\n switchMap(() => concat(of(true), timer(150).pipe(map(() => false)))),\n startWith(false),\n subscribeIn(fn => zone.runOutsideAngular(fn)),\n ),\n }).value;\n }\n\n /**\n * Loads a range of rows, based on the current sort and filter criteria, into the cache.\n */\n public async loadRange(start: number, end: number): Promise<void> {\n const sortCriteria = this.sortCriteria();\n const columnFilters = this.filterCriteria();\n const tableFilter = this._tableFilter() ?? undefined;\n\n // Calculate pages based on row indices and page size.\n const pages = pagesByRange(start, end, this.pageSize);\n if (!pages) {\n return;\n }\n\n // Load pages and wait until completed loading.\n await Promise.all(pages\n .map(page => this.loadPage({page, pageSize: this.pageSize, columnFilters, tableFilter, sortCriteria}))\n .map(page => firstValueFrom(toLazyObservable(page.loading, {injector: this._injector}).pipe(first(loading => !loading), defaultIfEmpty(true)))));\n }\n\n /**\n * Loads the requested page from the cache or datasource and returns its loading state with a cancelation handler.\n */\n private loadPage({page, pageSize, sortCriteria, columnFilters, tableFilter}: {page: number; pageSize: number; sortCriteria: SciTableSortCriterion[]; columnFilters: SciTableColumnFilter[]; tableFilter?: string}): {loading: Signal<boolean>; cancel: () => void} {\n const pageStart = page * pageSize;\n const pageEnd = pageStart + pageSize;\n const cacheKey = `${pageStart}-${pageEnd}` as const;\n\n if (this._cache.has(cacheKey)) {\n return {\n loading: this._cache.get(cacheKey)!.rows.isLoading,\n cancel: () => this._cache.deleteIfLoading(cacheKey),\n };\n }\n\n const cacheEntryInjector = ɵcreateDestroyableInjector({parent: this._injector});\n const cacheEntry: SciTableCacheEntry<T> = {\n rows: runInInjectionContext(cacheEntryInjector, () => {\n // Fetch data.\n const tableResponse$ = runSafe(\n () => Observables.coerce(this._dataLoaderFn({\n start: pageStart,\n end: pageEnd,\n pageSize,\n page,\n sortCriteria,\n tableFilter,\n columnFilters,\n })),\n error => throwError(() => error));\n\n const columns$ = toObservable(this.columns);\n const injectorFactory = new ɵSingleActiveInjectorFactory();\n\n // Create a resource to track loading and error states.\n return rxResource({\n stream: () => tableResponse$.pipe(\n combineLatestWith(columns$),\n map(([response, columns]) => ({\n rows: runInInjectionContext(injectorFactory.create(), () => this.mapItemsToRow(response.items, columns, pageStart)),\n totalCount: response.totalCount,\n })),\n tap({\n next: ({totalCount}) => this.totalCount.set(totalCount),\n error: error => {\n console.error(error);\n // Reset count to scroll to the top so the user sees the error.\n this.totalCount.set(0);\n },\n }),\n map(({rows}) => rows),\n ),\n defaultValue: [],\n });\n }),\n dispose: () => cacheEntryInjector.destroy(),\n start: pageStart,\n end: pageEnd,\n };\n\n this._cache.set(cacheKey, cacheEntry);\n\n return {\n loading: cacheEntry.rows.isLoading,\n cancel: () => this._cache.deleteIfLoading(cacheKey),\n };\n }\n\n /**\n * Toggles sort on a column. ASC -> DESC -> No sort\n *\n * TODO [ego] Revisit API, do we really want a three-state and implicit toggling logic?\n */\n public sort(columnName: `column:${string}`, multi: boolean): void {\n // Scroll to the top as soon as sort changes.\n // Done here explicitly to avoid race-conditions and pages being loaded unnecessarily.\n this.tableViewRef()?.scrollToTop();\n\n this.sortCriteria.update(sortCriteria => {\n const column = this.columns().find(column => column.name === columnName);\n if (!column) {\n throw Error(`[NullColumnError] Column '${columnName}' not found in table '${this.name()}'.`);\n }\n\n const currentSortCriterion = sortCriteria.find(sortCriterion => sortCriterion.columnName === column.name);\n const otherSortCriteria = sortCriteria.filter(sortCriterion => sortCriterion !== currentSortCriterion);\n\n const direction = currentSortCriterion ? (currentSortCriterion.direction === 'asc' ? 'desc' : undefined) : 'asc';\n if (!direction) {\n return multi ? otherSortCriteria : [];\n }\n\n const newSortCriterion = {columnName: column.name, direction} satisfies SciTableSortCriterion;\n return multi ? [...otherSortCriteria, newSortCriterion] : [newSortCriterion];\n });\n }\n\n /**\n * Applies a filter, either via global filter or on a specific column.\n */\n public filter(text: string | null): void;\n public filter(text: string | number | boolean | SciEnumValueLike | SciEnumValueLike[] | null, options: {columnName: `column:${string}`}): void;\n public filter(text: string | number | boolean | SciEnumValueLike | SciEnumValueLike[] | null, options?: {columnName: `column:${string}`}): void {\n // Scroll to the top as soon as filter changes.\n // Done here explicitly to avoid race-conditions and pages being loaded unnecessarily.\n this.tableViewRef()?.scrollToTop();\n\n if (!options) {\n this._tableFilter.set(text as string | null);\n return;\n }\n\n const column = this.columns().find(column => column.name === options.columnName);\n if (!column) {\n throw Error(`[NullColumnError] Column '${options.columnName}' not found in table '${this.name()}'.`);\n }\n\n this.filterCriteria.update(filterCriteria => {\n const newFilterCriteria = filterCriteria.filter(filterCriterion => filterCriterion.columnName !== options.columnName);\n return text === null ? newFilterCriteria : newFilterCriteria.concat({columnName: column.name, text});\n });\n }\n\n public updateSelectedItems(updateFn: (ids: Map<unknown, T>) => Map<unknown, T>): void {\n this._selectedItems.update(updateFn);\n }\n\n /**\n * Indicates whether the built-in array datasource is used.\n *\n * Supports out-of-the-box filtering and sorting for built-in table columns.\n */\n public isArrayDatasource(): boolean {\n return isArrayDatasource(this._dataLoaderFn);\n }\n\n public reset(): void {\n this._cache.clear();\n this.totalCount.set(undefined);\n }\n\n public dispose(): void {\n this._cache.clear();\n this.disconnect();\n }\n\n /**\n * Loads a set of pages on criteria or viewport changes.\n */\n private installPageLoader(): void {\n effect(onCleanup => {\n const scrollRange = this.scrollRange();\n const sortCriteria = this.sortCriteria();\n const columnFilters = this.filterCriteria();\n const tableFilter = this._tableFilter() ?? undefined;\n\n if (!scrollRange) {\n return;\n }\n\n untracked(() => {\n // Fall back to load the initial page if range is empty. Otherwise, if the table grows with its content,\n // no data would ever load because the scroll range remains 0.\n const pages = pagesByRange(scrollRange.start, scrollRange.end, this.pageSize) ?? [0];\n\n pages.forEach(page => {\n const pageRef = this.loadPage({\n pageSize: this.pageSize,\n page,\n sortCriteria,\n tableFilter,\n columnFilters,\n });\n onCleanup(() => pageRef.cancel());\n });\n });\n });\n }\n\n /**\n * Resets cache on criteria changes.\n */\n private installCriteriaWatcher(): void {\n toObservable(this.criteria).pipe(\n skip(1), // skip first emission to avoid race condition with loader on initialization.\n takeUntilDestroyed(),\n ).subscribe(() => {\n this._cache.clear();\n });\n }\n\n private mapItemsToRow(items: T[], columns: SciTableColumnLike<T>[], pageStart: number): SciTableRow<T>[] {\n return items.map((item, i) => {\n const id = this.trackBy(item);\n const index = pageStart + i;\n\n return {\n id,\n index,\n item,\n loading: false,\n active: computed(() => item === this.activeItem()),\n selected: computed(() => this.selectedIds().has(id)),\n hovered: computed(() => this.hoveredRow()?.index === index),\n bindings: coerceTableRowBindings(this._rowBindings, item, pageStart + i),\n cells: columns.map(column => ({\n value: 'value' in column ? column.value(item) : undefined,\n component: column.type === 'component' ? column.component(item) : undefined,\n template: column.type === 'template' ? column.template(item) : undefined,\n type: column.type,\n column,\n } as SciTableCellLike)),\n };\n });\n }\n\n /**\n * Creates a signal to read and write table user settings.\n */\n private computeUserSettings(): WritableSignal<SciTableUserSettings> {\n // Load user settings from storage.\n const userSettings = resource({\n params: () => this.name(),\n loader: async ({params: tableName}) => {\n try {\n const serialized = await this._tableStorage.load(`scion.components.${tableName}`);\n return serialized ? JSON.parse(serialized) as SciTableUserSettings : {columns: []};\n }\n catch (error) {\n console.warn(`[SciTable] Failed to load user settings for '${tableName}'.`, error);\n return {columns: []};\n }\n },\n defaultValue: {columns: []},\n });\n\n // Persist settings to storage.\n effect(() => {\n if (userSettings.status() === 'local' && this.name()) {\n untracked(() => void this._tableStorage.store(`scion.components.${this.name()!}`, JSON.stringify(userSettings.value())));\n }\n });\n\n return userSettings.value;\n }\n\n /**\n * Call trackBy function or fallback to track by object reference.\n */\n public trackBy(item: T): unknown {\n return this._trackBy?.(item) ?? item;\n }\n\n private computeActiveRow(): Signal<SciTableRow<T> | undefined> {\n return computed(() => {\n const activeItem = this.activeItem();\n if (activeItem === undefined) {\n return undefined;\n }\n\n const id = this.trackBy(activeItem);\n if (id === undefined) {\n return undefined;\n }\n\n return this._cache.rowsById().get(id);\n });\n }\n}\n\nexport interface SciScrollRange {\n /** incluse */\n start: number;\n /** exclusive */\n end: number;\n}\n\n/**\n * Gets pages by range and page size, or `null` if empty. End is exclusive.\n */\nfunction pagesByRange(start: number, end: number, pageSize: number): number[] | null {\n const startPage = Math.floor(start / pageSize);\n const endPage = Math.floor((end - 1) / pageSize); // `end` is exclusive, so use the last included index (`end - 1`) for page calculation.\n const pages = rangeInclusive(startPage, endPage);\n return pages.length ? pages : null;\n}\n\nexport interface SciTableUserSettings {\n columns?: {name: string; width?: number}[];\n}\n\nexport const ɵSCI_TABLE = new InjectionToken<Signal<ɵSciTable>>('ɵSciTable');\n\nexport interface SciTableViewRef {\n viewport: HTMLElement;\n viewportHeight: Signal<number>;\n viewportWidth: Signal<number>;\n viewportClientHeight: Signal<number>;\n viewportClientWidth: Signal<number>;\n headerHeight: Signal<number>;\n cellPadding: Signal<number>;\n itemHeight: Signal<number>;\n scrollToTop: () => void;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {MaybeAsync} from './common';\nimport {computed, Signal} from '@angular/core';\nimport {SciEnumValueLike} from './table.model';\n\nexport interface SciTableColumnFilter {\n columnName: `column:${string}`;\n text: string | number | boolean | SciEnumValueLike | SciEnumValueLike[];\n}\n\nexport interface SciTableSortCriterion {\n columnName: `column:${string}`;\n direction: 'asc' | 'desc';\n}\n\nexport interface SciTablePageRequest {\n page: number; // TODO [ego] Should page be 1-based?\n pageSize: number;\n start: number; // Inclusive\n end: number; // Exclusive\n sortCriteria: SciTableSortCriterion[];\n columnFilters: SciTableColumnFilter[];\n tableFilter?: string;\n}\n\nexport interface SciTablePageResponse<T> {\n /**\n * Items of the requested page.\n */\n items: T[];\n\n /**\n * Total count of the source data, used to calculate the scroll size.\n */\n totalCount: number;\n}\n\n/**\n * @docs-private Not public API. For internal use only.\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\nexport type SciTableDataLoaderFn<T> = (request: SciTablePageRequest) => MaybeAsync<SciTablePageResponse<T>>;\n\n/**\n * TODO [table] Remove after datasource is final.\n *\n * @docs-private Not public API. For internal use only.\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\nexport function ɵillegaldatasource<T>(): Signal<T[]> {\n return computed(() => {\n throw Error('[SciTableError] Illegal state. ɵillegaldatasource should not be used.');\n });\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {assertInInjectionContext, assertNotInReactiveContext, DestroyRef, inject, Injector, isSignal, runInInjectionContext, Signal} from '@angular/core';\nimport {SciTable, SciTableDescriptor} from './table.model';\nimport {SciTableColumnFactory} from './table-column.factory';\nimport {ɵSciTable} from './ɵtable.model';\nimport {ɵillegaldatasource} from './table-datasource';\n\nexport type SciTableColumnFactoryFn<T> = (table: SciTableColumnFactory<T>) => void;\n\n// Do not change order for better IntelliSense.\n\n/** @experimental since 22.3.0; API and behavior may change in any version without notice. */\nexport function table<T>(descriptor: SciTableDescriptor<T>): SciTable<T>;\n/** @experimental since 22.3.0; API and behavior may change in any version without notice. */\nexport function table<T>(data: Signal<T[]>, columnFactoryFn: SciTableColumnFactoryFn<T>, options?: {injector?: Injector}): SciTable<T>;\nexport function table<T>(dataOrDescriptor: Signal<T[]> | SciTableDescriptor<T>, columnFactoryFn?: SciTableColumnFactoryFn<T>, options?: {injector?: Injector}): SciTable<T> {\n assertNotInReactiveContext(table, 'Call table in a non-reactive (non-tracking) context, such as within the untracked() function.');\n\n const descriptor = isSignal(dataOrDescriptor) ? ({ɵdatasource: dataOrDescriptor, datasource: ɵillegaldatasource(), columns: columnFactoryFn!, injector: options?.injector}) satisfies SciTableDescriptor<T> : dataOrDescriptor;\n if (!descriptor.injector) {\n assertInInjectionContext(table);\n }\n\n const injector = descriptor.injector ?? inject(Injector);\n const sciTable = runInInjectionContext(injector, () => new ɵSciTable(descriptor));\n injector.get(DestroyRef).onDestroy(() => sciTable.dispose());\n return sciTable;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {inject, Injectable, Signal} from '@angular/core';\nimport {ɵSCI_TABLE, ɵSciTable} from './ɵtable.model';\nimport {rangeInclusive} from './common';\nimport {firstValueFrom, timer} from 'rxjs';\nimport {SciTableRow} from './table.model';\n\n@Injectable()\nexport class SciTableSelectionService<T> {\n\n private readonly _table = inject<Signal<ɵSciTable<T>>>(ɵSCI_TABLE);\n\n public async onRowClick(index: number, event: {ctrlKey: boolean; shiftKey: boolean; metaKey: boolean}): Promise<void> {\n const table = this._table();\n const rowsByIndex = table.rowsByIndex();\n const row = rowsByIndex.get(index);\n const item = rowsByIndex.get(index)?.item;\n const previousFocusedIndex = table.activeRow()?.index ?? -1;\n\n table.activeItem.set(item);\n\n if (item === undefined || !table.selectable()) {\n return;\n }\n\n if (table.selectable() === 'single') {\n table.updateSelectedItems(() => new Map<unknown, T>().set(row!.id, item));\n return;\n }\n\n if (event.shiftKey && previousFocusedIndex >= 0) {\n const start = Math.min(previousFocusedIndex, index);\n const end = Math.max(previousFocusedIndex, index);\n await this.selectItems(start, end, {add: true});\n }\n else if (event.ctrlKey || event.metaKey) {\n this.toggleSelectedItem(item);\n }\n else {\n // If no modifier is pressed set the selection to the clicked row.\n table.updateSelectedItems(() => new Map<unknown, T>().set(row!.id, item));\n }\n }\n\n public async onArrowUp(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex <= 0) {\n return;\n }\n\n // Set active item.\n const startIndex = activeIndex - 1;\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onArrowDown(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n const endIndex = Math.min(activeIndex + 1, table.totalCount()! - 1);\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public async onPageUp(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex === 0) {\n return;\n }\n\n // Set active item.\n const startIndex = Math.max(activeIndex - table.viewportPageSize() + 1, 0);\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onPageDown(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n const endIndex = Math.min(activeIndex + table.viewportPageSize() - 1, table.totalCount()! - 1);\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public async onHome(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n if (activeIndex <= 0) {\n return;\n }\n\n // Set active item.\n const startIndex = 0;\n await this.loadMissingItems(startIndex, startIndex);\n const startItem = table.rowsByIndex().get(startIndex)?.item;\n table.activeItem.set(startItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftUp({startIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftUp({startIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(startIndex, startIndex);\n }\n }\n\n public async onEnd(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const activeIndex = this._table().activeRow()?.index ?? -1;\n\n const endIndex = table.totalCount()! - 1;\n\n if (endIndex === activeIndex) {\n return;\n }\n\n // TODO [mmu] should active item be set before selection? this way, further methods cant rely on table.activeItem.\n // But otherwise, loading and setting the active item needs to be done for each case, or once at the end.\n\n // Set active item.\n await this.loadMissingItems(endIndex, endIndex);\n const endItem = table.rowsByIndex().get(endIndex)?.item;\n table.activeItem.set(endItem);\n\n if (!table.selectable()) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const shift = keyboardEvent.shiftKey;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\n if (shift && ctrlOrMeta) {\n await this.ctrlShiftDown({endIndex, activeIndex});\n }\n else if (shift) {\n await this.shiftDown({endIndex, activeIndex});\n }\n else if (ctrlOrMeta) {\n // Selection remains unchanged.\n }\n else {\n await this.selectItems(endIndex, endIndex);\n }\n }\n\n public onSpace(event: Event): void {\n event.preventDefault();\n\n const table = this._table();\n if (!table.selectable()) {\n return;\n }\n\n const activeItem = table.activeItem();\n if (!activeItem) {\n return;\n }\n\n const keyboardEvent = event as KeyboardEvent;\n const ctrlOrMeta = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n const activeItemId = table.trackBy(activeItem);\n\n if (ctrlOrMeta) {\n this.toggleSelectedItem(activeItem);\n }\n else {\n table.updateSelectedItems(() => new Map<unknown, T>().set(activeItemId, activeItem));\n }\n }\n\n public async onControlA(event: Event): Promise<void> {\n event.preventDefault();\n\n const table = this._table();\n const totalCount = table.totalCount() ?? 0;\n\n if (table.selectable() === 'multi' && totalCount >= 0) {\n await this.selectItems(0, totalCount - 1);\n }\n }\n\n // TODO [mmu] Should we add overloads for all variants for better readability, but same logic?\n // shiftArrowDown\n // shiftPageDown\n // ShiftEnd\n private async shiftDown(options: {endIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n const selectedIds = table.selectedIds();\n const activeIndex = options.activeIndex;\n\n const startIndex = activeIndex;\n const endIndex = options.endIndex;\n\n const activeItem = table.rowsByIndex().get(activeIndex)!.item!;\n const activeItemId = table.trackBy(activeItem)!;\n\n if (table.selectable() === 'single') {\n await this.selectItems(endIndex, endIndex);\n return;\n }\n\n if (!selectedIds.has(activeItemId)) {\n await this.selectItems(startIndex, endIndex);\n return;\n }\n\n if (this.isSelectionAtBlockStart(activeIndex)) {\n await this.selectFromBlockStart(startIndex, endIndex);\n return;\n }\n\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n\n private async ctrlShiftDown(options: {endIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n\n const startIndex = options.activeIndex;\n const endIndex = options.endIndex;\n\n if (table.selectable() === 'single') {\n await this.selectItems(endIndex, endIndex);\n }\n else {\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n }\n\n private async shiftUp(options: {startIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n const selectedIds = table.selectedIds();\n const activeIndex = options.activeIndex;\n\n const startIndex = options.startIndex;\n const endIndex = activeIndex;\n\n const activeItem = table.rowsByIndex().get(activeIndex)!.item!;\n const activeItemId = table.trackBy(activeItem)!;\n\n if (table.selectable() === 'single') {\n await this.selectItems(startIndex, startIndex);\n return;\n }\n\n if (!selectedIds.has(activeItemId)) {\n await this.selectItems(startIndex, endIndex);\n return;\n }\n\n if (this.isSelectionAtBlockEnd(activeIndex)) {\n await this.selectFromBlockEnd(startIndex, endIndex);\n return;\n }\n\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n\n private async ctrlShiftUp(options: {startIndex: number; activeIndex: number}): Promise<void> {\n const table = this._table();\n\n const startIndex = options.startIndex;\n const endIndex = options.activeIndex;\n\n if (table.selectable() === 'single') {\n await this.selectItems(startIndex, startIndex);\n }\n else {\n await this.selectItems(startIndex, endIndex, {add: true});\n }\n }\n\n private isSelectionAtBlockStart(activeIndex: number): boolean {\n const table = this._table();\n const selectedIds = table.selectedIds();\n\n const previousItem = table.rowsByIndex().get(activeIndex - 1)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n const nextItem = table.rowsByIndex().get(activeIndex + 1)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n return !selectedIds.has(previousItemId) && selectedIds.has(nextItemId);\n }\n\n private isSelectionAtBlockEnd(activeIndex: number): boolean {\n const table = this._table();\n const selectedIds = table.selectedIds();\n\n const previousItem = table.rowsByIndex().get(activeIndex - 1)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n const nextItem = table.rowsByIndex().get(activeIndex + 1)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n return selectedIds.has(previousItemId) && !selectedIds.has(nextItemId);\n }\n\n private async loadMissingItems(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n const indices = rangeInclusive(startIndex, endIndex + 1);\n const rows = indices.map(i => table.rowsByIndex().get(i));\n if (rows.some(row => row?.id === undefined)) {\n await Promise.race([\n table.loadRange(startIndex, endIndex + 1),\n firstValueFrom(timer(5_000)),\n ]);\n }\n }\n\n private async selectItems(startIndex: number, endIndex: number, options?: {add: boolean}): Promise<void> {\n const table = this._table();\n const indices = rangeInclusive(startIndex, endIndex);\n const add = options?.add ?? false;\n let rows = indices.map(i => table.rowsByIndex().get(i));\n\n if (rows.some(row => row?.id === undefined)) {\n // If not all id's could be found load the missing items.\n await Promise.race([\n table.loadRange(startIndex, endIndex),\n firstValueFrom(timer(5_000)),\n ]);\n rows = indices.map(i => table.rowsByIndex().get(i));\n }\n\n table.updateSelectedItems(existing => new Map<unknown, T>([\n ...(add ? existing : []),\n ...rows\n .filter((row): row is Required<SciTableRow<T>> => row?.id !== undefined && row.item !== undefined)\n .map((row): [unknown, T] => [row.id, row.item]),\n ]));\n }\n\n private async selectFromBlockStart(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n\n await this.loadMissingItems(startIndex, endIndex);\n const indices = rangeInclusive(startIndex, endIndex);\n\n table.updateSelectedItems(selection => {\n const newSelection = new Map(selection);\n\n for (let i = 0; i < indices.length; i++) {\n const currentIndex = indices[i]!;\n const nextIndex = indices[i + 1]!;\n\n const item = table.rowsByIndex().get(currentIndex)?.item;\n if (!item) {\n continue;\n }\n\n const itemId = table.trackBy(item);\n const nextItem = table.rowsByIndex().get(nextIndex)?.item;\n const nextItemId = nextItem ? table.trackBy(nextItem) : undefined;\n\n if (selection.has(nextItemId)) {\n newSelection.delete(itemId);\n }\n else {\n newSelection.set(itemId, item);\n }\n }\n return newSelection;\n });\n }\n\n private async selectFromBlockEnd(startIndex: number, endIndex: number): Promise<void> {\n const table = this._table();\n\n await this.loadMissingItems(startIndex, endIndex);\n const indices = rangeInclusive(startIndex, endIndex);\n\n table.updateSelectedItems(selection => {\n const newSelection = new Map(selection);\n\n for (let i = indices.length - 1; i >= 0; i--) {\n const currentIndex = indices[i]!;\n const previousIndex = indices[i - 1]!;\n\n const item = table.rowsByIndex().get(currentIndex)?.item;\n if (!item) {\n continue;\n }\n\n const itemId = table.trackBy(item);\n const previousItem = table.rowsByIndex().get(previousIndex)?.item;\n const previousItemId = previousItem ? table.trackBy(previousItem) : undefined;\n\n if (selection.has(previousItemId)) {\n newSelection.delete(itemId);\n }\n else {\n newSelection.set(itemId, item);\n }\n }\n return newSelection;\n });\n }\n\n private toggleSelectedItem(item: T): void {\n const table = this._table();\n const id = table.trackBy(item);\n\n table.updateSelectedItems(selection => {\n const next = new Map(selection);\n if (next.has(id)) {\n next.delete(id);\n }\n else {\n if (table.selectable() === 'single') {\n next.clear();\n }\n next.set(id, item);\n }\n return next;\n });\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Pipe, PipeTransform} from '@angular/core';\n\n/**\n * Formats a given number based on the provided {@link Intl.NumberFormat}.\n */\n@Pipe({name: 'sciNumber'})\nexport class SciNumberPipe implements PipeTransform {\n\n public transform(number: number | undefined, format: Intl.NumberFormat): string | undefined {\n return number !== undefined ? format.format(number) : undefined;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, input, Signal, TemplateRef} from '@angular/core';\nimport {SciTableCellLike, SciTableRow} from '../table.model';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {coerceSignal, SciComponentOutletDirective, SciTooltipOnOverflowDirective} from '@scion/components/common';\nimport {Arrays, Objects} from '@scion/toolkit/util';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {SciNumberPipe} from './number.pipe';\n\n@Component({\n selector: 'sci-table-cell',\n templateUrl: './table-cell.component.html',\n styleUrl: './table-cell.component.scss',\n host: {\n '[attr.data-type]': 'cell().column.type',\n '[attr.data-column]': 'cell().column.name',\n '[attr.data-value]': 'value()',\n '[attr.data-padding]': '!cell().column.padding ? false : null',\n '[attr.part]': 'partAttribute()',\n },\n imports: [\n NgTemplateOutlet,\n SciIconComponent,\n SciComponentOutletDirective,\n SciNumberPipe,\n ],\n hostDirectives: [\n SciTooltipOnOverflowDirective,\n ],\n})\nexport class SciTableCellComponent<T> {\n\n public readonly cell = input.required<SciTableCellLike>();\n public readonly row = input.required<SciTableRow<T>>();\n\n protected readonly template = this.computeTemplate();\n protected readonly templateContext = this.computeTemplateContext();\n protected readonly partAttribute = this.computePartAttribute();\n protected readonly value = this.computeValueAttribute();\n\n private computeTemplate(): Signal<TemplateRef<unknown> | null> {\n return computed(() => {\n const cell = this.cell();\n\n if (cell.type !== 'template') {\n return null;\n }\n\n return coerceSignal(cell.template.template)();\n });\n }\n\n private computeTemplateContext(): Signal<{$implicit: NonNullable<T>} | null> {\n return computed(() => {\n const cell = this.cell();\n const item = this.row().item!;\n\n if (cell.type !== 'template') {\n return null;\n }\n\n return {\n $implicit: item,\n ...Objects.entries(cell.template.context ?? {}).reduce((context, [key, value]) => ({\n ...context,\n [key]: coerceSignal(value)?.(), // eslint-disable-line @typescript-eslint/no-unnecessary-condition\n }), {}),\n };\n });\n }\n\n private computePartAttribute(): Signal<string> {\n return computed(() => {\n const cell = this.cell();\n const referenceType = cell.type === 'enum' ? cell.column.referenceType : undefined;\n\n return Arrays.distinct([\n // Enable column styling based on column type. For enum columns, resolves to the reference type, if any, i.e., boolean or icon.\n `column:${referenceType ?? cell.column.type}`,\n // Enable column styling based on column name.\n cell.column.name,\n // Enable row styling based on selection state.\n this.row().selected() ? 'row:selected' : 'row:not:selected',\n // Enable row styling based on active state.\n this.row().active() ? 'row:active' : 'row:not:active',\n // Enable row styling based on row bindings.\n ...Arrays.coerce(this.row().bindings?.parts()),\n ]).join(' ');\n });\n }\n\n private computeValueAttribute(): Signal<string | undefined> {\n return computed(() => {\n const cell = this.cell();\n const value = (() => {\n switch (cell.type) {\n case 'string':\n case 'number':\n return cell.value();\n case 'enum':\n return cell.value()?.value;\n case 'date':\n return cell.value()?.isoString;\n default:\n return undefined;\n }\n })();\n return value !== undefined ? `${value}` : undefined;\n });\n }\n}\n","@let cell = this.cell();\n\n@switch (cell.type) {\n @case ('template') {\n <ng-template *ngTemplateOutlet=\"template(); context: templateContext()\"/>\n }\n @case ('component') {\n <ng-container *sciComponentOutlet=\"cell.component\"/>\n }\n @case ('date') {\n {{cell.value()?.formatted}}\n }\n @case ('number') {\n {{cell.value() | sciNumber:cell.column.format()}}\n }\n @case ('enum') {\n @let value = cell.value();\n @if (value !== undefined) {\n @if (cell.column.format.icon && value.icon !== undefined) {\n <sci-icon [attr.title]=\"value.tooltip\">{{value.icon}}</sci-icon>\n }\n @if (cell.column.format.label) {\n <span>{{value.label}}</span>\n }\n }\n }\n @default {\n {{cell.value()}}\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject, input, output, viewChild} from '@angular/core';\nimport {SciTableEvent, SciTableRow} from '../table.model';\nimport {SciTableCellComponent} from '../table-cell/table-cell.component';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciTableSelectionService} from '../table-selection.service';\nimport {contributeMenu, SciToolbarComponent} from '@scion/components/menu';\nimport {UUID} from '@scion/toolkit/uuid';\nimport {SciIconComponent} from '@scion/components/icon';\n\n@Component({\n selector: 'sci-table-row',\n templateUrl: './table-row.component.html',\n styleUrl: './table-row.component.scss',\n imports: [\n SciTableCellComponent,\n SciToolbarComponent,\n SciIconComponent,\n ],\n host: {\n '[attr.data-active]': `row().active() ? '' : null`,\n '[attr.data-selected]': `row().selected() ? '' : null`,\n '[attr.data-hovered]': `row().hovered() ? '' : null`,\n '(click)': 'onRowClick($event)',\n '(dblclick)': 'onRowDblClick($event)',\n '(mouseenter)': 'onRowMouseEnter()',\n '(mouseleave)': 'onRowMouseLeave($event)',\n },\n})\nexport class SciTableRowComponent<T> {\n\n public readonly row = input.required<SciTableRow<T>>();\n public readonly primaryAction = output<SciTableEvent<T>>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly rowActionToolbar = viewChild(SciToolbarComponent);\n protected readonly rowActionsToolbarName = `toolbar:${UUID.randomUUID()}` as const;\n\n private readonly _selectionService = inject(SciTableSelectionService);\n\n constructor() {\n this.contributeRowActions();\n }\n\n protected onRowClick(event: PointerEvent): void {\n if (this.row().loading) {\n return;\n }\n void this._selectionService.onRowClick(this.row().index, event);\n }\n\n protected onRowDblClick(event: MouseEvent): void {\n if (this.row().loading) {\n return;\n }\n this.primaryAction.emit({sourceEvent: event, items: [this.row().item!]});\n }\n\n protected onRowMouseEnter(): void {\n this.table().hoveredIndex.set(this.row().index);\n }\n\n protected onRowMouseLeave(event: MouseEvent): void {\n const next = event.relatedTarget;\n // Do not unset hovered row when hovering a column resize splitter.\n if (next instanceof Element && next.closest('sci-splitter')) {\n return;\n }\n\n this.table().hoveredIndex.set(-1);\n }\n\n protected onActionToolbarClick(event: PointerEvent): void {\n event.stopPropagation(); // prevent selecting the row\n this.table().activeItem.set(this.row().item);\n }\n\n private contributeRowActions(): void {\n contributeMenu(this.rowActionsToolbarName, toolbar => {\n if (!this.row().loading) {\n this.table().rowActions?.(toolbar, this.row().item, this.row().index);\n }\n });\n }\n}\n","@let row = this.row();\n\n<!-- Row Icons -->\n@if (row.cells?.length) {\n @for (icon of row.bindings?.icons(); track $index) {\n <sci-icon>{{icon}}</sci-icon>\n }\n}\n\n<!-- Table Cells -->\n@for (cell of row.cells; track cell.column.name) {\n <sci-table-cell [cell]=\"cell\" [row]=\"row\"/>\n} @empty {\n @for (column of table().columns(); track column.name) {\n <div class=\"skeleton e2e-skeleton\" [attr.data-column]=\"column.name\"></div>\n }\n}\n\n<!--Row Actions -->\n@let hasRowActions = !!table().rowActions;\n@let isRowHovered = table().hoveredRow() === row;\n@let isRowActionMenuOpen = rowActionToolbar()?.menuOpen();\n\n@if (hasRowActions && (isRowHovered || isRowActionMenuOpen)) {\n <sci-toolbar [name]=\"rowActionsToolbarName\" (click)=\"onActionToolbarClick($event)\" class=\"row-actions\"/>\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, inject} from '@angular/core';\nimport {SciTableSelectionService} from './table-selection.service';\n\n@Directive({\n selector: '[sciTableKeyboardNavigator]',\n host: {\n '[attr.tabindex]': '0', // required for keyboard navigation\n\n '(keydown.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.control.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.meta.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.control.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n '(keydown.shift.meta.arrowUp)': 'isFromInput($event) || selectionService.onArrowUp($event)',\n\n '(keydown.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.control.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.meta.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.control.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n '(keydown.shift.meta.arrowDown)': 'isFromInput($event) || selectionService.onArrowDown($event)',\n\n '(keydown.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n '(keydown.control.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n '(keydown.meta.space)': 'isFromInput($event) || isFromButton($event) || selectionService.onSpace($event)',\n\n '(keydown.control.a)': 'isFromInput($event) || selectionService.onControlA($event)',\n '(keydown.meta.a)': 'isFromInput($event) || selectionService.onControlA($event)',\n\n '(keydown.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.shift.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.control.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n '(keydown.shift.control.pageUp)': 'isFromInput($event) || selectionService.onPageUp($event)',\n\n '(keydown.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.shift.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.control.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n '(keydown.shift.control.pageDown)': 'isFromInput($event) || selectionService.onPageDown($event)',\n\n '(keydown.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.shift.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.control.home)': 'isFromInput($event) || selectionService.onHome($event)',\n '(keydown.shift.control.home)': 'isFromInput($event) || selectionService.onHome($event)',\n\n '(keydown.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.shift.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.control.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n '(keydown.shift.control.end)': 'isFromInput($event) || selectionService.onEnd($event)',\n },\n})\nexport class SciTableKeyboardNavigatorDirective {\n\n protected readonly selectionService = inject(SciTableSelectionService);\n\n /**\n * Indicates whether the given keyboard event was triggered from an input element.\n */\n protected isFromInput(event: Event): boolean {\n if (event.target instanceof Element && event.target.closest('input, textarea, select') !== null) {\n return true;\n }\n if (event.target instanceof HTMLElement && event.target.isContentEditable) {\n return true;\n }\n return false;\n }\n\n /**\n * Indicates whether the given keyboard event was triggered from a button.\n */\n protected isFromButton(event: Event): boolean {\n return event.target instanceof Element && event.target.closest('button') !== null;\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {SciTableColumnLike} from '../table.model';\nimport {afterNextRender, computed, inject, Injectable, Injector, Signal, signal, WritableSignal} from '@angular/core';\nimport {clamp} from '@scion/toolkit/util';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\n\n@Injectable()\nexport class SciTableColumnService {\n\n private readonly _table = inject(ɵSCI_TABLE);\n private readonly _injector = inject(Injector);\n\n /**\n * State while resizing a column.\n */\n private readonly _resizingState = signal<ColumnResizingState | undefined>(undefined);\n\n /**\n * Provides the calculated CSS `grid-template-columns` value based on configured and resized column widths.\n */\n public readonly gridTemplateColumns = this.computeGridTemplateColumns();\n\n /**\n * Computes the CSS `grid-template-columns` value.\n *\n * Columns are layed out according to their configured widths. While resizing a column, absolute pixel widths are used.\n */\n private computeGridTemplateColumns(): Signal<string> {\n return computed(() => {\n return this._table().columns()\n .map(column => {\n const width = this._resizingState()?.columnWidths()?.get(column.name) ?? column.width();\n if (typeof width === 'number') {\n return `${width}px`;\n }\n if (width.endsWith('fr')) {\n return cssMinmax({min: column.minWidth, max: width});\n }\n return width;\n })\n .join(' ') || '100%'; // fill full width if no column\n });\n }\n\n public startResize(column: SciTableColumnLike): void {\n column.resizing.set(true);\n this._resizingState.set({column, columnWidths: signal(undefined)});\n }\n\n public resize(columnWidth: number | 'min-content'): void {\n const state = this._resizingState()!;\n const clampedWidth = typeof columnWidth === 'number' ? clamp(columnWidth, {min: state.column.minWidth}) : columnWidth;\n\n if (clampedWidth !== state.columnWidths()?.get(state.column.name)) {\n const columnWidths = this.calculateColumnWidths(state.column, clampedWidth);\n state.columnWidths.set(columnWidths);\n }\n }\n\n public endResize(): void {\n const {column} = this._resizingState()!;\n\n // Run on next render to update user settings with effective column widths read from the DOM.\n afterNextRender(() => {\n this.updateUserSettings(column);\n column.resizing.set(false);\n this._resizingState.set(undefined);\n }, {injector: this._injector});\n }\n\n /**\n * Updates user settings with current column widths.\n */\n private updateUserSettings(resizedColumn: SciTableColumnLike): void {\n const resizedColumnIndex = this._table().columns().indexOf(resizedColumn);\n this._table().userSettings.update(userSettings => ({\n ...userSettings,\n columns: this._table().columns().flatMap((column, index) => {\n const columnSettings = userSettings.columns?.find(it => it.name === column.name);\n // Store the width of the resized column and all columns to its left.\n if (index <= resizedColumnIndex) {\n return {\n ...columnSettings ?? {name: column.name},\n width: column.location.width,\n };\n }\n\n return columnSettings ?? [];\n }),\n }));\n }\n\n /**\n * Calculates absolute column widths based on the resized column's new width.\n *\n * Any remaining viewport space is distributed proportionally among flex-sized columns using their current width ratio.\n */\n private calculateColumnWidths(columnToResize: SciTableColumnLike, newColumnWidth: number | 'min-content'): Map<`column:${string}`, number | 'min-content'> {\n const columns = this._table().columns();\n const columnIndex = columns.indexOf(columnToResize);\n\n return columns.reduce((map, column, index) => {\n if (index < columnIndex) {\n return map.set(column.name, column.location.width); // columns to the left are fixed\n }\n if (index === columnIndex) {\n return map.set(column.name, newColumnWidth);\n }\n return map;\n }, new Map<`column:${string}`, number | 'min-content'>());\n }\n}\n\n/**\n * State of an active column resize operation.\n */\ninterface ColumnResizingState {\n /**\n * Column being resized.\n */\n column: SciTableColumnLike;\n /**\n * Map of column names to their pixel widths.\n */\n columnWidths: WritableSignal<Map<`column:${string}`, number | 'min-content'> | undefined>;\n}\n\n/**\n * Creates a minmax() CSS function with the given min/max for use in a CSS grid.\n */\nfunction cssMinmax(minmax: {min: number; max: number | string}): string {\n const min = `${minmax.min}px`;\n const max = typeof minmax.max === 'number' ? `${minmax.max}px` : minmax.max;\n return `minmax(${min}, ${max})`;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, effect, ElementRef, inject, input, untracked} from '@angular/core';\nimport {SciTableColumnLike} from '../table.model';\n\n@Component({\n selector: 'sci-table-column',\n template: '',\n host: {\n '[attr.data-column]': 'column().name',\n '[style.min-width.px]': 'column().minWidth', // required when resizing the column to its preferred size to not drop below min-width.\n },\n})\nexport class SciTableColumnComponent {\n\n public readonly column = input.required<SciTableColumnLike>();\n\n constructor() {\n this.injectLocationToColumn();\n }\n\n private injectLocationToColumn(): void {\n const element = inject(ElementRef).nativeElement as HTMLElement;\n\n effect(onCleanup => {\n const column = this.column();\n\n untracked(() => {\n const location = column.location = {\n get x(): number {\n return element.getBoundingClientRect().left;\n },\n get width(): number {\n return element.offsetWidth;\n },\n };\n onCleanup(() => {\n if (column.location === location) {\n column.location = {x: 0, width: 0};\n }\n });\n });\n });\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject, input, signal} from '@angular/core';\nimport {SciSplitterComponent, SplitterMoveEvent} from '@scion/components/splitter';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciTableColumnLike} from '../table.model';\nimport {SciTableRowComponent} from '../table-row/table-row.component';\nimport {SciTableColumnService} from '../table-column/table-column.service';\nimport {SciTableColumnComponent} from '../table-column/table-column.component';\n\n@Component({\n selector: 'sci-table-columns',\n templateUrl: './table-columns.component.html',\n styleUrl: './table-columns.component.scss',\n imports: [\n SciSplitterComponent,\n SciTableColumnComponent,\n ],\n})\nexport class SciTableColumnsComponent<T> {\n\n public readonly rows = input.required<readonly SciTableRowComponent<unknown>[]>();\n\n protected readonly table = inject(ɵSCI_TABLE);\n\n private readonly _hovered = signal(false);\n private readonly _columnService = inject(SciTableColumnService);\n\n protected onResizeStart(column: SciTableColumnLike): void {\n this._columnService.startResize(column);\n }\n\n protected onResize(column: SciTableColumnLike<T>, event: SplitterMoveEvent): void {\n const pointerPosition = event.position.clientPos; // TODO [dwi] Change to screen coordinates to work with microfrontends\n const columnStart = column.location.x - 1; // -1 because splitters are positioned at the end of cell content\n const newColumnWidth = pointerPosition - columnStart;\n this._columnService.resize(newColumnWidth);\n }\n\n protected onResizeEnd(): void {\n this._columnService.endResize();\n\n // Clear the hovered row when resizing ends outside the splitter (for example, above or below it).\n if (!this._hovered()) {\n this.table().hoveredIndex.set(-1);\n }\n }\n\n /**\n * Resizes the column to its preferred size.\n */\n protected onPack(column: SciTableColumnLike): void {\n this._columnService.startResize(column);\n this._columnService.resize('min-content');\n this._columnService.endResize();\n }\n\n protected onMouseEnter(): void {\n this._hovered.set(true);\n }\n\n protected onMouseLeave(): void {\n this._hovered.set(false);\n\n // Do not clear the hovered row while dragging the resize handle, or quick movements will accidentally clear it.\n // If the mouse leaves the splitter during drag (above or below), the hovered row is unset when resizing ends.\n if (!this.table().resizing()) {\n this.table().hoveredIndex.set(-1);\n }\n }\n}\n","<!-- Render splitters, also for non-resizable columns, as non-interactive column header dividers. -->\n@for (column of table().columns(); track column.name; let i = $index) {\n <sci-splitter orientation=\"vertical\"\n [class.resizing]=\"column.resizing()\"\n [attr.data-column]=\"column.name\"\n [attr.data-non-interactive]=\"!column.resizable() ? '' : null\"\n [style.grid-column]=\"i + 1\"\n (start)=\"onResizeStart(column)\"\n (move)=\"onResize(column, $event)\"\n (end)=\"onResizeEnd()\"\n (reset)=\"onPack(column)\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"/>\n}\n\n<!-- Render an invisible synthetic column per column to read current widths and set minimum widths. -->\n@for (column of table().columns(); track column.name; let i = $index) {\n <sci-table-column [column]=\"column\" [style.grid-column]=\"i + 1\"/>\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, ElementRef, inject} from '@angular/core';\nimport {ɵSCI_TABLE} from './ɵtable.model';\n\n/**\n * Represents a semantic element for the table viewport provided as slotted content.\n */\n@Component({\n selector: 'sci-table-viewport',\n template: '<ng-content/>',\n host: {\n '[style.--ɵsci-table-viewport-width]': '`${table().tableViewRef()?.viewportWidth() ?? 0}px`',\n '[style.--ɵsci-table-viewport-height]': '`${viewportHeight() ?? 0}px`',\n '[style.--ɵsci-table-viewport-client-width]': '`${table().tableViewRef()?.viewportClientWidth() ?? 0}px`',\n '[style.--ɵsci-table-viewport-client-height]': '`${table().tableViewRef()?.viewportClientHeight() ?? 0}px`',\n '[style.--ɵsci-table-header-height]': '`${table().tableViewRef()?.headerHeight() ?? 0}px`',\n '[style.--ɵsci-table-cell-padding-inline]': '`${table().tableViewRef()?.cellPadding() ?? 0}px`',\n '[style.--ɵsci-table-row-height]': '`${table().tableViewRef()?.itemHeight() ?? 0}px`',\n },\n})\nexport class SciTableViewportComponent {\n\n public readonly host = inject(ElementRef).nativeElement as HTMLElement;\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly viewportHeight = computed(() => {\n const viewportHeight = this.table().tableViewRef()?.viewportHeight() ?? 0;\n const headerHeight = this.table().tableViewRef()?.headerHeight() ?? 0;\n return viewportHeight + headerHeight;\n });\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject} from '@angular/core';\nimport {SciTableColumnService} from './table-column/table-column.service';\nimport {ɵSCI_TABLE} from './ɵtable.model';\n\n/**\n * Represents a semantic element for the table body provided as slotted content.\n */\n@Component({\n selector: 'sci-table-grid',\n template: '<ng-content/>',\n providers: [\n SciTableColumnService,\n ],\n host: {\n '[style.--ɵsci-table-columns]': 'gridTemplateColumns()',\n '[style.--ɵsci-table-virtual-scroll-offset-top]': '`${table().virtualScrollOffset().top}px`',\n '[style.--ɵsci-table-virtual-scroll-offset-bottom]': '`${table().virtualScrollOffset().bottom}px`',\n },\n})\nexport class SciTableGridComponent {\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly gridTemplateColumns = inject(SciTableColumnService).gridTemplateColumns;\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component} from '@angular/core';\n\n/**\n * Represents a semantic element for the table body provided as slotted content.\n */\n@Component({\n selector: 'sci-table-body',\n template: '<ng-content/>',\n})\nexport class SciTableBodyComponent {\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, ElementRef, inject, input, Provider, viewChild} from '@angular/core';\nimport {SciTableColumnLike} from '../table.model';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {SciTooltipOnOverflowDirective, TOOLTIP_ON_OVERFLOW_DIRECTIVE_ADDITIONAL_TEXT, TOOLTIP_ON_OVERFLOW_DIRECTIVE_SOURCE_ELEMENT} from '@scion/components/common';\n\n@Component({\n selector: 'sci-column-header',\n imports: [\n SciIconComponent,\n NgTemplateOutlet,\n ],\n templateUrl: './column-header.component.html',\n styleUrl: './column-header.component.scss',\n host: {\n '[attr.data-column]': 'column().name',\n },\n hostDirectives: [\n SciTooltipOnOverflowDirective,\n ],\n providers: [\n configureTooltip(),\n ],\n})\nexport class SciColumnHeaderComponent<T> {\n\n public readonly column = input.required<SciTableColumnLike<T>>();\n public readonly labelElement = viewChild<ElementRef<HTMLElement>>('label'); // public visibility required to be accessible in `configureTooltip` function\n\n protected readonly table = inject(ɵSCI_TABLE);\n protected readonly sortDirection = computed(() => this.table().sortCriteria().find(criteria => criteria.columnName === this.column().name)?.direction);\n\n protected onSort(event: PointerEvent): void {\n this.table().sort(this.column().name, event.ctrlKey || event.metaKey);\n }\n}\n\nfunction configureTooltip(): Provider[] {\n return [\n {\n provide: TOOLTIP_ON_OVERFLOW_DIRECTIVE_ADDITIONAL_TEXT,\n useFactory: () => {\n const host = inject(SciColumnHeaderComponent);\n return computed(() => host.column().header.tooltip?.());\n },\n },\n {\n provide: TOOLTIP_ON_OVERFLOW_DIRECTIVE_SOURCE_ELEMENT,\n useFactory: () => inject(SciColumnHeaderComponent).labelElement,\n },\n ];\n}\n","@if (column().sortable()) {\n <button class=\"sort e2e-sort\"\n [attr.data-sort-direction]=\"sortDirection()\"\n (click)=\"onSort($event)\">\n <!-- Header -->\n <ng-container *ngTemplateOutlet=\"header_template\"/>\n\n <!-- Sort Indicator -->\n @switch (sortDirection()) {\n @case ('asc') {\n <sci-icon>scion:sort_ascending</sci-icon>\n }\n @case ('desc') {\n <sci-icon>scion:sort_descending</sci-icon>\n }\n @default {\n <sci-icon class=\"no-sort\">scion:sort_indicator</sci-icon>\n }\n }\n </button>\n} @else {\n <ng-container *ngTemplateOutlet=\"header_template\"/>\n}\n\n<ng-template #header_template>\n @if (column().header.icon) {\n <sci-icon class=\"icon e2e-icon\">{{column().header.icon}}</sci-icon>\n }\n\n @if (column().header.label) {\n <span [class.wrap]=\"table().wrapHeader()\" class=\"label\" #label>\n {{column().header.label!()}}\n </span>\n }\n</ng-template>\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {computed, inject, Injector, Pipe, PipeTransform, Signal, untracked} from '@angular/core';\nimport {text} from '@scion/components/text';\nimport {SciEnumColumnValues, SciEnumValueLike} from '../table.model';\nimport {Arrays} from '@scion/toolkit/util';\n\n/**\n * Creates a comma-separated string with localized labels of the given enum values.\n */\n@Pipe({name: 'sciEnumLabel'})\nexport class SciEnumLabelPipe implements PipeTransform {\n\n private readonly _injector = inject(Injector);\n\n public transform(values: SciEnumValueLike | SciEnumValueLike[] | null, enumeration: SciEnumColumnValues): Signal<string | undefined> {\n return computed(() => Arrays.coerce(values)\n .map(value => enumeration.find(entry => entry.value === value)?.label)\n .map(label => untracked(() => text(label, {injector: this._injector}))())\n .filter(Boolean)\n .join(', ') || undefined);\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, debounced, effect, ElementRef, inject, Injector, input, Provider, runInInjectionContext, signal, untracked, viewChild} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {SciEnumColumn, SciEnumValueLike, SciTableColumnLike} from '../table.model';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciIconComponent} from '@scion/components/icon';\nimport {firstValueFrom, skip, timer} from 'rxjs';\nimport {contributeMenu, SciMenuRef, ɵSciMenuService} from '@scion/components/menu';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {SciTooltipOnOverflowDirective, TOOLTIP_ON_OVERFLOW_DIRECTIVE_SOURCE_ELEMENT, ɵcreateDestroyableInjector} from '@scion/components/common';\nimport {SciEnumLabelPipe} from './enum-label.pipe';\nimport {UUID} from '@scion/toolkit/uuid';\nimport {SciTextPipe} from '@scion/components/text';\nimport {dimension} from '@scion/components/dimension';\n\n@Component({\n selector: 'sci-column-filter',\n templateUrl: './column-filter.component.html',\n styleUrl: './column-filter.component.scss',\n imports: [\n FormsModule,\n SciIconComponent,\n SciEnumLabelPipe,\n SciTextPipe,\n ],\n hostDirectives: [\n SciTooltipOnOverflowDirective,\n ],\n host: {\n '[attr.data-column]': 'column().name',\n '[attr.data-disabled]': `!column().filterable() ? '' : null`,\n '[class.collapsed]': 'dimension().clientWidth < 50',\n '(click)': 'column().filterable() && onFilterClick()',\n },\n providers: [\n configureTooltip(),\n ],\n})\nexport class SciColumnFilterComponent<T> {\n\n public readonly column = input.required<SciTableColumnLike<T>>();\n public readonly inputElement = viewChild<ElementRef<HTMLElement>>('input'); // public visibility required to be accessible in `configureTooltip` function\n\n protected readonly filter = signal<string | number | boolean | SciEnumValueLike | SciEnumValueLike[] | null>(null);\n protected readonly dimension = dimension(inject(ElementRef));\n\n private readonly _table = inject(ɵSCI_TABLE);\n private readonly _menuService = inject(ɵSciMenuService);\n private readonly _injector = inject(Injector);\n private readonly _host = inject(ElementRef).nativeElement as HTMLElement;\n\n protected menu: SciMenuRef | undefined;\n\n constructor() {\n this.bindToModel();\n }\n\n protected onFilterClick(): void {\n if (this.column().type === 'enum') {\n this.toggleEnumChooser();\n }\n else {\n this.inputElement()!.nativeElement.focus();\n }\n }\n\n protected onReset(event: PointerEvent): void {\n this.filter.set(null);\n this.inputElement()!.nativeElement.focus();\n event.stopPropagation(); // prevent opening menu\n }\n\n private bindToModel(): void {\n const filterDebounced = debounced(computed(() => trim(this.filter())), async value => {\n // Debounce only if not empty and not an enum.\n if (value !== null && this.column().type !== 'enum') {\n await firstValueFrom(timer(200));\n }\n });\n\n effect(() => {\n const filter = filterDebounced.value();\n const table = this._table();\n const column = this.column();\n\n untracked(() => {\n table.filter(filter, {columnName: column.name});\n });\n });\n }\n\n private toggleEnumChooser(): void {\n // Close menu if already opened.\n if (this.menu) {\n this.menu.close();\n return;\n }\n\n const column = this.column() as SciEnumColumn;\n const injector = ɵcreateDestroyableInjector({parent: this._injector});\n\n runInInjectionContext(injector, () => {\n const menuId = `menu:column-filter-${UUID.randomUUID()}` as const;\n\n // Contribute menu items.\n contributeMenu(menuId, menu => {\n const multi = column.filterable() === 'multi';\n\n column.enumeration().forEach(entry => menu.addMenuItem({\n label: entry.label,\n checked: multi ? computed(() => (this.filter() as SciEnumValueLike[] | null)?.includes(entry.value) ?? false) : undefined,\n icon: column.format.filter.icon ? entry.icon : undefined,\n attributes: {'data-option': `${entry.value}`},\n onSelect: () => this.filter.update(filter => {\n if (multi) {\n const values = new Set<SciEnumValueLike>(filter as SciEnumValueLike[] | null ?? []);\n values.has(entry.value) ? values.delete(entry.value) : values.add(entry.value);\n return values.size ? Array.from(values) : null;\n }\n else {\n return entry.value;\n }\n }),\n }));\n });\n\n // Open menu.\n this.menu = this._menuService.open(menuId, {\n anchor: this._host,\n minWidth: `${this._host.offsetWidth}px`,\n maxHeight: '300px',\n cssClass: 'e2e-filter',\n filter: column.enumeration().length >= 8 ? {focus: true} : false,\n maxWidth: `max(300px, ${this._host.offsetWidth}px)`, // overflow long enumeration labels\n offset: {y: -1},\n });\n\n // Close menu when start resizing a column. By default, closes the menu only on mouse up.\n toObservable(this._table().resizing)\n .pipe(skip(1))\n .subscribe(() => this.menu?.close());\n\n this.menu.onClose(() => {\n injector.destroy();\n // Restore focus manually as it is not restored automatically since opening the popover inside Shadow DOM.\n // TODO [menu] Consider restore focus manually in Menu API due to restriction in shadow DOM.\n this.inputElement()!.nativeElement.focus();\n this.menu = undefined;\n });\n });\n }\n}\n\nfunction trim(value: string | number | boolean | SciEnumValueLike | SciEnumValueLike[] | null): string | number | boolean | SciEnumValueLike | SciEnumValueLike[] | null {\n return typeof value === 'string' ? value.trim() || null : value;\n}\n\nfunction configureTooltip(): Provider[] {\n return [\n {\n provide: TOOLTIP_ON_OVERFLOW_DIRECTIVE_SOURCE_ELEMENT,\n useFactory: () => inject(SciColumnFilterComponent).inputElement,\n },\n ];\n}\n","@let column = this.column();\n@if (column.filterable()) {\n @let active = filter() !== null && filter() !== '';\n\n <sci-icon class=\"filter e2e-filter\" [class.active]=\"active\">scion:filter</sci-icon>\n\n @switch (column.type) {\n @case ('number') {\n <input [(ngModel)]=\"filter\" type=\"number\" #input/>\n }\n @case ('enum') {\n <input [ngModel]=\"(filter() | sciEnumLabel:column.enumeration())()\" type=\"button\" #input>\n <sci-icon class=\"chevron\">{{menu ? 'scion:chevron_up' : 'scion:chevron_down'}}</sci-icon>\n }\n @default {\n <input [(ngModel)]=\"filter\" type=\"text\" #input/>\n }\n }\n\n @if (active) {\n <button class=\"clear e2e-clear\" (click)=\"onReset($event)\" [attr.title]=\"('%scion:components:clear.tooltip' | sciText)()\">\n <sci-icon>scion:clear</sci-icon>\n </button>\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, inject} from '@angular/core';\nimport {ɵSCI_TABLE} from '../ɵtable.model';\nimport {SciColumnHeaderComponent} from '../column-header/column-header.component';\nimport {SciColumnFilterComponent} from '../column-filter/column-filter.component';\n\n@Component({\n selector: 'sci-table-header',\n templateUrl: './table-header.component.html',\n styleUrl: './table-header.component.scss',\n host: {\n '(wheel)': 'onMouseWheel($event)',\n },\n imports: [\n SciColumnHeaderComponent,\n SciColumnFilterComponent,\n ],\n})\nexport class SciTableHeaderComponent {\n\n protected readonly table = inject(ɵSCI_TABLE);\n\n protected onMouseWheel(event: WheelEvent): void {\n // Prevent vertical scrolling on header, but not horizontal scrolling.\n if (!event.shiftKey) {\n event.preventDefault();\n }\n }\n}\n","@let table = this.table();\n\n@if (table.showHeader()) {\n @for (column of table.columns(); track column.name) {\n <sci-column-header [column]=\"column\"/>\n }\n}\n@if (table.filterable()) {\n @for (column of table.columns(); track column.name) {\n <sci-column-filter [column]=\"column\"/>\n }\n}\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, computed, effect, ElementRef, inject, input, output, Provider, untracked, viewChild, viewChildren, ViewEncapsulation} from '@angular/core';\nimport {SciTable, SciTableEvent} from './table.model';\nimport {ɵSCI_TABLE, ɵSciTable} from './ɵtable.model';\nimport {SciScrollbarComponent} from '@scion/components/viewport';\nimport {dimension} from '@scion/components/dimension';\nimport {SciTableSelectionService} from './table-selection.service';\nimport {SciTableRowComponent} from './table-row/table-row.component';\nimport {SciTableKeyboardNavigatorDirective} from './table-keyboard-navigator.directive';\nimport {SciTableColumnsComponent} from './table-columns/table-columns.component';\nimport {SciTextPipe} from '@scion/components/text';\nimport {SciThrobberComponent} from '@scion/components/throbber';\nimport {SciTableViewportComponent} from './table-viewport.component';\nimport {SciTableGridComponent} from './table-grid.component';\nimport {SciTableBodyComponent} from './table-body.component';\nimport {SciTableHeaderComponent} from './table-header/table-header.component';\nimport {SciAttributesDirective} from '@scion/components/common';\nimport {SciIconComponent} from '@scion/components/icon';\n\n/**\n * @experimental since 22.3.0; API and behavior may change in any version without notice.\n */\n@Component({\n selector: 'sci-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n '[attr.name]': 'name()', // Public API: Enables selecting the table by name in CSS (also if the table has a dynamic name input binding)\n '[style.--ɵsci-table-scrolling]': 'table().scrolling() ? `true` : null',\n '[style.--ɵsci-table-resizing]': 'table().resizing() ? `true` : null',\n },\n imports: [\n SciTableViewportComponent,\n SciTableHeaderComponent,\n SciTableGridComponent,\n SciTableBodyComponent,\n SciTableRowComponent,\n SciTableColumnsComponent,\n SciTableKeyboardNavigatorDirective,\n SciAttributesDirective,\n SciScrollbarComponent,\n SciTextPipe,\n SciThrobberComponent,\n SciIconComponent,\n ],\n providers: [\n provideSciTable(),\n SciTableSelectionService,\n ],\n})\nexport class SciTableComponent<T = unknown> {\n\n /**\n * Specifies a unique table identifier, used as the key for storing user preferences.\n */\n public readonly name = input.required<`table:${string}`>();\n\n /**\n * Specifies the table definition and datasource.\n */\n public readonly table = input.required({transform: (table: SciTable<T>) => table as ɵSciTable<T>});\n\n /**\n * Emits when the user double-clicks a row or presses `Enter` on selected rows.\n */\n public readonly primaryAction = output<SciTableEvent<T>>();\n\n private readonly _viewport = viewChild.required(SciTableViewportComponent, {read: ElementRef});\n private readonly _viewportClient = viewChild.required(SciTableGridComponent, {read: ElementRef});\n private readonly _tableHeader = viewChild(SciTableHeaderComponent, {read: ElementRef});\n private readonly _tableBody = viewChild.required(SciTableBodyComponent, {read: ElementRef});\n private readonly _itemSizeSyntheticElement = viewChild.required<ElementRef<HTMLElement>>('item_size_synthetic_element');\n private readonly _cellPaddingSyntheticElement = viewChild.required<ElementRef<HTMLElement>>('cell_padding_synthetic_element');\n\n protected readonly rows = viewChildren(SciTableRowComponent);\n\n constructor() {\n this.connectToModel();\n this.scrollActiveRowIntoViewport();\n }\n\n protected onRowPrimaryAction(event: SciTableEvent<T>): void {\n this.primaryAction.emit(event);\n }\n\n protected onRetry(): void {\n this.table().reset();\n }\n\n private connectToModel(): void {\n const viewportDimension = dimension(this._viewport);\n const viewportClientDimension = dimension(this._viewportClient);\n const tableHeaderDimension = dimension(this._tableHeader);\n const tableBodyDimension = dimension(this._tableBody);\n const cellPadding = dimension(this._cellPaddingSyntheticElement);\n const itemSizeDimension = dimension(this._itemSizeSyntheticElement);\n\n effect(onCleanup => {\n const name = this.name();\n const table = this.table();\n const viewport = this._viewport().nativeElement as HTMLElement;\n\n untracked(() => {\n table.connect(name, {\n viewport: viewport,\n viewportHeight: computed(() => viewportDimension().clientHeight - (tableHeaderDimension()?.offsetHeight ?? 0)),\n viewportWidth: computed(() => viewportDimension().clientWidth),\n viewportClientHeight: computed(() => viewportClientDimension().offsetHeight),\n viewportClientWidth: computed(() => tableBodyDimension().offsetWidth), // Use `table-body` instead of `table-grid` because `table-grid` has `min-width: 100%`, thus never shrinking below viewport width.\n cellPadding: computed(() => cellPadding().clientWidth),\n headerHeight: computed(() => tableHeaderDimension()?.offsetHeight ?? 0),\n itemHeight: computed(() => itemSizeDimension().offsetHeight),\n scrollToTop: () => viewport.scrollTo({top: 0}),\n });\n onCleanup(() => table.disconnect());\n });\n });\n }\n\n private scrollActiveRowIntoViewport(): void {\n effect(() => {\n const activeRow = this.table().activeRow();\n if (!activeRow) {\n return;\n }\n\n untracked(() => {\n const viewport = this._viewport().nativeElement as HTMLElement;\n const viewportHeight = this.table().tableViewRef()?.viewportHeight() ?? 0;\n const itemHeight = this.table().tableViewRef()?.itemHeight() ?? 0;\n const activeRowTop = activeRow.index * itemHeight;\n const activeRowBottom = activeRowTop + itemHeight;\n const scrollTop = viewport.scrollTop;\n const scrollBottom = scrollTop + viewportHeight;\n\n if (activeRowTop < scrollTop) {\n viewport.scrollTop = activeRowTop;\n }\n else if (activeRowBottom > scrollBottom) {\n viewport.scrollTop = activeRowBottom - viewportHeight;\n }\n });\n });\n }\n}\n\nfunction provideSciTable(): Provider {\n return {\n provide: ɵSCI_TABLE,\n useFactory: () => inject(SciTableComponent).table,\n };\n}\n","@let table = this.table();\n\n<!-- TODO [#384] Replace with sci-viewport -->\n<sci-table-viewport #viewport>\n <sci-table-grid>\n <!-- Table header -->\n @if (table.showHeader() || table.filterable()) {\n <sci-table-header/>\n }\n\n <!-- Table body -->\n <sci-table-body sciTableKeyboardNavigator>\n @if (!table.error()) {\n <!-- Track index to reuse the table row elements -->\n @for (row of table.rows(); track $index) {\n <sci-table-row [row]=\"row\" [sciAttributes]=\"row.bindings?.attributes()\" [class]=\"row.bindings?.classes?.()\" (primaryAction)=\"onRowPrimaryAction($event)\"/>\n } @empty {\n <span class=\"message e2e-no-data\">{{('%scion:components:no_items.message' | sciText)()}}</span>\n }\n } @else {\n <span class=\"message e2e-datasource\">\n {{('%scion:components:datasource_error.message' | sciText)()}}\n\n <button (click)=\"onRetry()\" class=\"action e2e-datasource-retry\">\n <sci-icon>scion:reload</sci-icon>\n <span>{{('%scion:components:retry.action' | sciText)()}}</span>\n </button>\n </span>\n }\n\n <!-- Render active row outline separately to preserve row border-radius within block selection. -->\n @if (table.activeRow()) {\n <div class=\"active-row-outline e2e-active-row-outline\"></div>\n }\n </sci-table-body>\n\n <!-- Render column splitters. -->\n <sci-table-columns [rows]=\"rows()\"/>\n </sci-table-grid>\n</sci-table-viewport>\n\n<!-- Scrollbars -->\n<sci-scrollbar direction=\"hscroll\" [viewport]=\"viewport.host\"/>\n<sci-scrollbar direction=\"vscroll\" [viewport]=\"viewport.host\"/>\n\n@if (table.loading()) {\n <sci-throbber type=\"spinner\" class=\"loading-indicator e2e-loading-indicator\"/>\n}\n\n<!-- Synthetic element to compute the absolute pixel value of the `--sci-table-row-height`, relative to the table's font size if em-based. -->\n<div class=\"synthetic item-size\" #item_size_synthetic_element></div>\n\n<!-- Synthetic element to compute the absolute pixel value of the `--sci-table-cell-padding-inline`, relative to the table's font size if em-based. -->\n<div class=\"synthetic cell-padding\" #cell_padding_synthetic_element></div>\n","/*\n * Copyright (c) 2018-2026 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nexport {table, type SciTableColumnFactoryFn} from './table.factory';\nexport {SciTableComponent} from './table.component';\nexport {type SciTable, type SciTableDescriptor, type SciTableRowActionFactoryFn, type SciTableColumnType, type SciTableEvent, type SciTableCellContext, type SciColumnHeaderLike, type SciDateLike, type SciEnumValueLike, type SciEnumColumnValues, type SciIconColumnValues} from './table.model';\nexport {type SciTableRowBindingFactoryFn, type SciTableRowBindingFactory, provideTableRowBinding} from './table-row-binding';\nexport {type SciTableDataLoaderFn, type SciTablePageResponse, type SciTablePageRequest, type SciTableColumnFilter, type SciTableSortCriterion, ɵillegaldatasource} from './table-datasource';\nexport {type SciTableColumnFactory, type SciTableColumnDescriptor, type SciStringColumnDescriptor, type SciNumberColumnDescriptor, type SciBooleanColumnDescriptor, type SciDateColumnDescriptor, type SciEnumColumnDescriptor, type SciIconColumnDescriptor, type SciComponentColumnDescriptor, type SciTemplateColumnDescriptor, type SciTableColumnSortComparatorFn, type SciTableColumnFilterMatcherFn} from './table-column.factory';\nexport {type SciTableStorage, provideTableStorage} from './table-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵSingleActiveInjectorFactory","ɵcreateDestroyableInjector","configureTooltip","ɵSciMenuService"],"mappings":"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"}