@slotted/angular 0.1.0-beta.6 → 0.1.0-beta.8

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 (70) hide show
  1. package/docs/calendar.json +1 -1
  2. package/docs/menu.json +12 -0
  3. package/docs/menu.md +2 -0
  4. package/docs/side-navigation.json +1 -0
  5. package/docs/side-navigation.md +1 -1
  6. package/docs/table.examples.md +2 -2
  7. package/docs/table.json +2 -2
  8. package/fesm2022/slotted-angular-action-bar.mjs +1 -1
  9. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
  10. package/fesm2022/slotted-angular-app-shell.mjs +2 -2
  11. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  12. package/fesm2022/slotted-angular-button.mjs +12 -12
  13. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  14. package/fesm2022/slotted-angular-calendar.mjs +14 -4
  15. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  16. package/fesm2022/slotted-angular-chart.mjs +2 -2
  17. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  18. package/fesm2022/slotted-angular-color-picker.mjs +1 -1
  19. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
  20. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  21. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  22. package/fesm2022/slotted-angular-command-palette.mjs +22 -3
  23. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
  24. package/fesm2022/slotted-angular-dashboard-grid.mjs +1 -1
  25. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  26. package/fesm2022/slotted-angular-data-grid.mjs +2 -2
  27. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  28. package/fesm2022/slotted-angular-data-list.mjs +1 -1
  29. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  30. package/fesm2022/slotted-angular-date-field.mjs +2 -2
  31. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  32. package/fesm2022/slotted-angular-datetime-field.mjs +2 -2
  33. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
  34. package/fesm2022/slotted-angular-dialog.mjs +26 -4
  35. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  36. package/fesm2022/slotted-angular-drawer.mjs +6 -2
  37. package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
  38. package/fesm2022/slotted-angular-event-calendar.mjs +1 -1
  39. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  40. package/fesm2022/slotted-angular-filter-bar.mjs +1 -1
  41. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  42. package/fesm2022/slotted-angular-kbd.mjs +4 -4
  43. package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
  44. package/fesm2022/slotted-angular-menu.mjs +12 -4
  45. package/fesm2022/slotted-angular-menu.mjs.map +1 -1
  46. package/fesm2022/slotted-angular-saved-views.mjs +1 -1
  47. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  48. package/fesm2022/slotted-angular-side-navigation.mjs +2 -2
  49. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
  50. package/fesm2022/slotted-angular-split-button.mjs +4 -4
  51. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  52. package/fesm2022/slotted-angular-table.mjs +3 -1
  53. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  54. package/fesm2022/slotted-angular-tabs.mjs +2 -2
  55. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  56. package/fesm2022/slotted-angular-time-field.mjs +2 -2
  57. package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
  58. package/fesm2022/slotted-angular-toolbar.mjs +1 -1
  59. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
  60. package/package.json +3 -3
  61. package/types/slotted-angular-calendar.d.ts +2 -0
  62. package/types/slotted-angular-calendar.d.ts.map +1 -1
  63. package/types/slotted-angular-command-palette.d.ts +10 -1
  64. package/types/slotted-angular-command-palette.d.ts.map +1 -1
  65. package/types/slotted-angular-dialog.d.ts.map +1 -1
  66. package/types/slotted-angular-drawer.d.ts.map +1 -1
  67. package/types/slotted-angular-menu.d.ts +11 -2
  68. package/types/slotted-angular-menu.d.ts.map +1 -1
  69. package/types/slotted-angular-table.d.ts +3 -1
  70. package/types/slotted-angular-table.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-data-grid.mjs","sources":["../../data-grid/src/data-grid-controls.ts","../../data-grid/src/data-grid-defaults.ts","../../data-grid/src/data-grid-templates.ts","../../data-grid/src/data-grid.ts","../../data-grid/src/persisted-grid-view.ts","../../data-grid/src/slotted-angular-data-grid.ts"],"sourcesContent":["import {\n isPlainDate,\n isPlainDateTime,\n isPlainTime,\n parseISODate,\n parseISODateTime,\n parseISOTime,\n toISODate,\n toISODateTime,\n toISOTime,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainDateTime, PlainTime } from '@slotted/core/date';\nimport {\n defaultOperator,\n describeFilter,\n emptyFilter,\n isConditionActive,\n isFilterActive,\n normalizeFilter,\n operandCount,\n operatorsFor,\n serializeFilter,\n withCondition,\n withJoin,\n} from '@slotted/core/filter';\nimport type { DataGridMessages, FamilyTranslator } from '@slotted/core/i18n';\nimport type {\n FilterCondition,\n FilterDescriptor,\n FilterJoin,\n FilterKind,\n FilterOperator,\n} from '@slotted/core/filter';\nimport type { GridColumn, ResolvedGridColumn } from '@slotted/core/grid';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { TemplateRef } from '@angular/core';\n\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCheckbox } from '@slotted/angular/checkbox';\nimport { SlDateField } from '@slotted/angular/date-field';\nimport { SlDatePicker } from '@slotted/angular/date-picker';\nimport { SlDateRangePicker } from '@slotted/angular/date-range-picker';\nimport { SlDateTimeField } from '@slotted/angular/datetime-field';\nimport { SlDateTimePicker } from '@slotted/angular/datetime-picker';\nimport { SlDateTimeRangePicker } from '@slotted/angular/datetime-range-picker';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport { SlNumberField, SlNumberFieldInput } from '@slotted/angular/number-field';\nimport { SlSegment, SlSegmentedControl } from '@slotted/angular/segmented-control';\nimport { SlMultiSelect, SlMultiSelectItem } from '@slotted/angular/multi-select';\nimport { SlSelect, SlSelectItem } from '@slotted/angular/select';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\nimport { SlTimeField } from '@slotted/angular/time-field';\nimport { SlTimePicker } from '@slotted/angular/time-picker';\nimport { SlTimeRangePicker } from '@slotted/angular/time-range-picker';\nimport type { DataGridFilterOperandContext } from './data-grid-defaults';\n\ntype Condition = FilterCondition<string, unknown>;\n\nconst FILTER_KINDS: readonly string[] = [\n 'text',\n 'number',\n 'date',\n 'time',\n 'datetime',\n 'boolean',\n 'set',\n];\n\nexport function filterKindOf(kind: string): FilterKind | null {\n return FILTER_KINDS.includes(kind) ? (kind as FilterKind) : null;\n}\n\nexport function timeOf(text: unknown): PlainTime | null {\n if (!text) return null;\n const written = String(text);\n return parseISOTime(/^\\d{2}$/.test(written) ? `${written}:00` : written);\n}\n\nexport function dateTimeOf(text: unknown): PlainDateTime | null {\n if (!text) return null;\n const written = String(text);\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(written)) return parseISODateTime(`${written}T00:00`);\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}$/.test(written)) return parseISODateTime(`${written}:00`);\n return parseISODateTime(written);\n}\n\nexport function dateOf(text: unknown): PlainDate | null {\n return text ? parseISODate(String(text)) : null;\n}\n\nfunction sameFilter(a: FilterDescriptor | null, b: FilterDescriptor | null) {\n return serializeFilter(a) === serializeFilter(b);\n}\n\n/**\n * The control an operand of a kind is edited in: one family per kind, all at\n * `sm`; `plain` in the filter row and `outline` in the panel. A date, a time\n * and a date-time are pickers — the field with the control that opens the\n * calendar or the list beside it — because a reader who does not type dates\n * still has to filter by one.\n */\n@Component({\n selector: 'sl-data-grid-operand',\n standalone: true,\n imports: [\n SlDatePicker,\n SlDateTimePicker,\n SlMultiSelect,\n SlMultiSelectItem,\n SlNumberField,\n SlNumberFieldInput,\n SlSelect,\n SlSelectItem,\n SlTextField,\n SlTextFieldInput,\n SlTimePicker,\n ],\n template: `\n @switch (kind()) {\n @case ('number') {\n <div slNumberField size=\"sm\" stepper=\"none\" [variant]=\"variant()\">\n <input\n slNumberFieldInput\n [value]=\"numberValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n [attr.placeholder]=\"placeholder() ?? label()\"\n (valueChange)=\"valueChange.emit($event.value)\"\n (keydown.enter)=\"applyRequest.emit()\"\n />\n </div>\n }\n @case ('date') {\n <div\n slDatePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [value]=\"dateValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n (valueChange)=\"valueChange.emit(isoDay($event.value))\"\n (keydown.enter)=\"applyRequest.emit()\"\n ></div>\n }\n @case ('time') {\n <div\n slTimePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [value]=\"timeValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n (valueChange)=\"valueChange.emit(isoTime($event.value))\"\n (keydown.enter)=\"applyRequest.emit()\"\n ></div>\n }\n @case ('datetime') {\n <div\n slDateTimePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [value]=\"dateTimeValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n (valueChange)=\"valueChange.emit(isoDateTime($event.value))\"\n (keydown.enter)=\"applyRequest.emit()\"\n ></div>\n }\n @case ('boolean') {\n <sl-select\n size=\"sm\"\n width=\"content\"\n [variant]=\"variant()\"\n [fullWidth]=\"true\"\n [items]=\"truths()\"\n [placeholder]=\"t()('filterAny')\"\n [aria-label]=\"label()\"\n [value]=\"value() === true ? 'true' : value() === false ? 'false' : null\"\n (valueChange)=\"\n valueChange.emit($event === 'true' ? true : $event === 'false' ? false : null)\n \"\n >\n <sl-select-item value=\"true\">{{ t()('filterYes') }}</sl-select-item>\n <sl-select-item value=\"false\">{{ t()('filterNo') }}</sl-select-item>\n </sl-select>\n }\n @case ('set') {\n <sl-multi-select\n size=\"sm\"\n width=\"content\"\n overflow=\"collapse\"\n [variant]=\"variant()\"\n [fullWidth]=\"true\"\n [items]=\"setItems()\"\n [locale]=\"locale()\"\n [placeholder]=\"t()('filterAny')\"\n [aria-label]=\"label()\"\n [value]=\"setValue()\"\n (valueChange)=\"valueChange.emit([...$event])\"\n >\n @for (option of setOptions(); track option.value) {\n <sl-multi-select-item\n [value]=\"option.value\"\n [label]=\"option.label + countOf(option.value)\"\n />\n }\n </sl-multi-select>\n }\n @default {\n <div slTextField size=\"sm\" [variant]=\"variant()\">\n <input\n slTextFieldInput\n [value]=\"textValue()\"\n [attr.aria-label]=\"label()\"\n [attr.placeholder]=\"placeholder() ?? label()\"\n (input)=\"valueChange.emit($any($event.target).value)\"\n (keydown.enter)=\"applyRequest.emit()\"\n />\n </div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridOperand {\n readonly kind = input.required<FilterKind>();\n readonly column = input.required<GridColumn<unknown>>();\n readonly value = input<unknown>(null);\n readonly label = input.required<string>();\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly variant = input<'plain' | 'outline'>('outline');\n readonly locale = input<string | undefined>(undefined);\n readonly counts = input<ReadonlyMap<string, number> | undefined>(undefined);\n readonly placeholder = input<string | undefined>(undefined);\n readonly valueChange = output<unknown>();\n readonly applyRequest = output<void>();\n\n protected readonly numberValue = computed(() =>\n typeof this.value() === 'number' ? (this.value() as number) : null,\n );\n protected readonly textValue = computed(() => {\n const value = this.value();\n return value === null || value === undefined ? '' : String(value);\n });\n protected readonly dateValue = computed(() => dateOf(this.value()));\n protected readonly timeValue = computed(() => timeOf(this.value()));\n protected readonly dateTimeValue = computed(() => dateTimeOf(this.value()));\n protected readonly truths = computed(() => [\n { label: this.t()('filterYes'), value: 'true' },\n { label: this.t()('filterNo'), value: 'false' },\n ]);\n protected readonly setOptions = computed(() => {\n const known = this.column().options ?? [];\n const seen = new Set(known.map((option) => option.value));\n const counts = this.counts();\n const extra = counts\n ? [...counts.keys()]\n .filter((key) => !seen.has(key))\n .map((key) => ({ value: key, label: key }))\n : [];\n return [...known, ...extra];\n });\n protected readonly setItems = computed(() =>\n this.setOptions().map((option) => ({ label: option.label, value: option.value })),\n );\n protected readonly setValue = computed(() =>\n Array.isArray(this.value()) ? (this.value() as readonly string[]) : [],\n );\n\n protected countOf(value: string) {\n const count = this.counts()?.get(value);\n return count === undefined ? '' : ` (${count})`;\n }\n protected asList(value: unknown) {\n return Array.isArray(value) ? value : value === null ? [] : [value];\n }\n protected isoDay(value: unknown) {\n return isPlainDate(value) ? toISODate(value) : null;\n }\n protected isoTime(value: unknown) {\n return isPlainTime(value) ? toISOTime(value, 'minute') : null;\n }\n protected isoDateTime(value: unknown) {\n return isPlainDateTime(value) ? toISODateTime(value) : null;\n }\n}\n\n/** The kinds whose `between` is one range picker rather than two fields. */\nconst RANGE_PICKER_KINDS: readonly string[] = ['date', 'time', 'datetime'];\n\n/** Whether the operator's two operands are edited in one control. */\nexport function isRangeOperand(kind: FilterKind, operator: string) {\n return operandCount(operator as FilterOperator) === 2 && RANGE_PICKER_KINDS.includes(kind);\n}\n\n/**\n * A `between` on a date, a time or a date-time is one range picker: one\n * frame that says the run while it is drawn, takes the ends in either order\n * and fits a column's width, where two fields side by side broke into two\n * lines at the widths a filter row has. The rule `table` took in its second\n * reopening. The descriptor is unchanged: two ISO operands.\n */\n@Component({\n selector: 'sl-data-grid-range-operand',\n standalone: true,\n imports: [SlDateRangePicker, SlDateTimeRangePicker, SlTimeRangePicker],\n template: `\n @switch (kind()) {\n @case ('time') {\n <div\n slTimeRangePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [locale]=\"locale()\"\n [messages]=\"{ start: t()('filterFrom'), end: t()('filterTo') }\"\n [value]=\"timeRange()\"\n (valueChange)=\"\n rangeChange.emit({\n start: isoTime($event.value?.start),\n end: isoTime($event.value?.end),\n })\n \"\n ></div>\n }\n @case ('datetime') {\n <div\n slDateTimeRangePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [locale]=\"locale()\"\n [messages]=\"{ start: t()('filterFrom'), end: t()('filterTo') }\"\n [value]=\"dateTimeRange()\"\n (valueChange)=\"\n rangeChange.emit({\n start: isoDateTime($event.value?.start),\n end: isoDateTime($event.value?.end),\n })\n \"\n ></div>\n }\n @default {\n <div\n slDateRangePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [locale]=\"locale()\"\n [messages]=\"{ start: t()('filterFrom'), end: t()('filterTo') }\"\n [value]=\"dateRange()\"\n (valueChange)=\"\n rangeChange.emit({ start: isoDay($event.value?.start), end: isoDay($event.value?.end) })\n \"\n ></div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridRangeOperand {\n readonly kind = input.required<FilterKind>();\n readonly start = input<unknown>(null);\n readonly end = input<unknown>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly variant = input<'plain' | 'outline'>('outline');\n readonly locale = input<string | undefined>(undefined);\n readonly rangeChange = output<{ start: string | null; end: string | null }>();\n\n protected readonly dateRange = computed(() => ({\n start: dateOf(this.start()),\n end: dateOf(this.end()),\n }));\n protected readonly timeRange = computed(() => ({\n start: timeOf(this.start()),\n end: timeOf(this.end()),\n }));\n protected readonly dateTimeRange = computed(() => ({\n start: dateTimeOf(this.start()),\n end: dateTimeOf(this.end()),\n }));\n\n protected isoDay(value: unknown) {\n return isPlainDate(value) ? toISODate(value) : null;\n }\n protected isoTime(value: unknown) {\n return isPlainTime(value) ? toISOTime(value, 'minute') : null;\n }\n protected isoDateTime(value: unknown) {\n return isPlainDateTime(value) ? toISODateTime(value) : null;\n }\n}\n\n/**\n * The compact panel: one line per condition, the join as two words on the\n * second, Clear and Apply at the end. It edits a draft; nothing reaches the\n * grid until Apply.\n */\n@Component({\n selector: 'sl-data-grid-filter-panel',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlDataGridOperand,\n SlDataGridRangeOperand,\n SlSegment,\n SlSegmentedControl,\n SlSelect,\n SlSelectItem,\n ],\n template: `\n <div data-ui=\"data-grid\" data-part=\"filter-panel\" [attr.data-kind]=\"kind()\">\n @for (index of lines(); track index) {\n <div data-part=\"filter-condition\" [attr.data-operands]=\"operandsOf(index)\">\n @if (index === 1) {\n <div data-part=\"filter-join\">\n <div\n slSegmentedControl\n size=\"sm\"\n [value]=\"draft().join\"\n [attr.aria-label]=\"t()('filterJoin')\"\n (valueChange)=\"setJoin($event.value ?? 'and')\"\n >\n <label slSegment value=\"and\">{{ joinName('and') }}</label>\n <label slSegment value=\"or\">{{ joinName('or') }}</label>\n </div>\n </div>\n }\n <div data-part=\"filter-operator\">\n <sl-select\n size=\"sm\"\n width=\"content\"\n [fullWidth]=\"true\"\n [items]=\"operatorItems()\"\n [attr.aria-label]=\"t()('filterOperator')\"\n [value]=\"conditionAt(index).operator\"\n (valueChange)=\"setOperator(index, $any($event))\"\n >\n @for (operator of operators(); track operator) {\n <sl-select-item [value]=\"operator\">{{ operatorName(operator) }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div\n data-part=\"filter-operand\"\n [attr.data-kind]=\"kind()\"\n [attr.data-range]=\"operandsOf(index) === 2 && !rangeAt(index) ? '' : null\"\n >\n @if (rangeAt(index) && !customTemplate()) {\n <sl-data-grid-range-operand\n [kind]=\"kind()\"\n [start]=\"operandOf(index, 0)\"\n [end]=\"operandOf(index, 1)\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n variant=\"outline\"\n (rangeChange)=\"setOperands(index, $event.start, $event.end)\"\n />\n } @else {\n @for (slot of slotsOf(index); track slot) {\n @if (customTemplate(); as custom) {\n <span>\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"context(index, slot)\"\n />\n </span>\n } @else {\n <sl-data-grid-operand\n [kind]=\"kind()\"\n [column]=\"column().column\"\n [value]=\"operandOf(index, slot)\"\n [label]=\"operandLabel(index, slot)\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n [counts]=\"counts()\"\n variant=\"outline\"\n (valueChange)=\"setOperand(index, slot, $event)\"\n (applyRequest)=\"apply('keyboard')\"\n />\n }\n }\n }\n </div>\n </div>\n }\n <div data-part=\"filter-actions\">\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n [disabled]=\"!clearable()\"\n (click)=\"clear()\"\n >\n {{ t()('filterClear') }}\n </button>\n <button slButton type=\"button\" size=\"sm\" (click)=\"apply('pointer')\">\n {{ t()('filterApply') }}\n </button>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridFilterPanel {\n readonly column = input.required<ResolvedGridColumn<unknown>>();\n readonly kind = input.required<FilterKind>();\n readonly committed = input<FilterDescriptor | null>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly locale = input<string | undefined>(undefined);\n readonly counts = input<ReadonlyMap<string, number> | undefined>(undefined);\n readonly customTemplate = input<TemplateRef<DataGridFilterOperandContext> | null>(null);\n /** The normalised descriptor, or null, with how it was applied. */\n readonly applyRequest = output<{\n filter: FilterDescriptor | null;\n reason: 'pointer' | 'keyboard' | 'clear';\n said: string;\n }>();\n\n /** Written by the effect below before the first read: the inputs are not set at construction. */\n readonly draft = signal<FilterDescriptor>(emptyFilter('text') as FilterDescriptor);\n\n constructor() {\n /* The draft starts from what is committed, every time the panel opens. */\n effect(() => {\n const committed = this.committed();\n this.draft.set(committed ?? this.blank());\n });\n }\n\n private blank(): FilterDescriptor {\n return emptyFilter(this.kind()) as FilterDescriptor;\n }\n\n protected readonly operators = computed(() => operatorsFor(this.kind()) as readonly string[]);\n protected readonly operatorItems = computed(() =>\n this.operators().map((operator) => ({ label: this.operatorName(operator), value: operator })),\n );\n protected readonly lines = computed<readonly (0 | 1)[]>(() => {\n if (this.kind() === 'set') return [0];\n return isConditionActive(this.kind(), this.conditionAt(0)) ? [0, 1] : [0];\n });\n protected readonly clearable = computed(\n () => isFilterActive(this.draft()) || this.committed() !== null,\n );\n\n protected conditionAt(index: number): Condition {\n return this.draft().conditions[index] ?? { operator: defaultOperator(this.kind()) as string };\n }\n protected operandsOf(index: number) {\n return operandCount(this.conditionAt(index).operator as FilterOperator);\n }\n protected slotsOf(index: number): readonly (0 | 1)[] {\n const operands = this.operandsOf(index);\n return operands === 0 ? [] : operands === 1 ? [0] : [0, 1];\n }\n protected operandOf(index: number, slot: 0 | 1) {\n const condition = this.conditionAt(index);\n return (slot === 0 ? condition.value : condition.end) ?? null;\n }\n protected operandLabel(index: number, slot: 0 | 1) {\n const t = this.t();\n return this.operandsOf(index) === 2\n ? slot === 0\n ? t('filterFrom')\n : t('filterTo')\n : t('filterValue');\n }\n protected operatorName(operator: string) {\n return this.t()(`filterOperators.${operator as FilterOperator}`);\n }\n protected joinName(join: FilterJoin) {\n return this.t()(`filterJoins.${join}`);\n }\n protected context(index: number, slot: 0 | 1): DataGridFilterOperandContext {\n const value = this.operandOf(index, slot);\n return {\n $implicit: value,\n column: this.column().id,\n operator: this.conditionAt(index).operator,\n value,\n setValue: (next) => this.setOperand(index, slot, next),\n apply: () => this.apply('keyboard'),\n label: this.operandLabel(index, slot),\n };\n }\n protected setJoin(join: string) {\n this.draft.set(withJoin(this.draft(), join as FilterJoin));\n }\n protected setOperator(index: number, operator: string) {\n const condition = this.conditionAt(index);\n const before = operandCount(condition.operator as FilterOperator);\n const after = operandCount(operator as FilterOperator);\n const next: Condition = {\n operator,\n ...(after >= 1 && before >= 1 ? { value: condition.value } : {}),\n ...(after === 2 && before === 2 ? { end: condition.end } : {}),\n };\n this.draft.set(withCondition(this.draft(), index, next as never));\n }\n protected setOperand(index: number, slot: 0 | 1, operand: unknown) {\n const condition = this.conditionAt(index);\n const next: Condition =\n slot === 0 ? { ...condition, value: operand } : { ...condition, end: operand };\n this.draft.set(withCondition(this.draft(), index, next as never));\n }\n protected setOperands(index: number, start: unknown, end: unknown) {\n const next: Condition = { ...this.conditionAt(index), value: start, end };\n this.draft.set(withCondition(this.draft(), index, next as never));\n }\n protected rangeAt(index: number) {\n return isRangeOperand(this.kind(), this.conditionAt(index).operator);\n }\n protected apply(reason: 'pointer' | 'keyboard') {\n const next = normalizeFilter(this.draft());\n const t = this.t();\n const name = this.column().column.label;\n const format = {\n join: (join: FilterJoin) => this.joinName(join),\n operator: (operator: FilterOperator) => this.operatorName(operator),\n };\n const said = next\n ? t('filterApplied', { column: name, filter: describeFilter(next, format) })\n : t('filterCleared', { column: name });\n this.applyRequest.emit({\n filter: sameFilter(next, this.committed()) ? this.committed() : next,\n reason,\n said,\n });\n }\n protected clear() {\n this.draft.set(this.blank());\n const t = this.t();\n this.applyRequest.emit({\n filter: null,\n reason: 'clear',\n said: t('filterCleared', { column: this.column().column.label }),\n });\n }\n}\n\n/**\n * The operand of the filter row: the kind's control, `plain`, filling the\n * cell, with the operator as a symbol button at its start. Text and number\n * apply after the debounce and on Enter; the others on change.\n */\n@Component({\n selector: 'sl-data-grid-filter-row-operand',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlDataGridOperand,\n SlDataGridRangeOperand,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n ],\n template: `\n <div\n data-part=\"filter-operand\"\n [attr.data-kind]=\"kind()\"\n [attr.data-range]=\"operands() === 2 && !range() ? '' : null\"\n >\n <div data-part=\"filter-operator\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [slMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"t()('filterOperatorChosen', { operator: operatorName(operator()) })\"\n [attr.title]=\"operatorName(operator())\"\n >\n {{ symbol() }}\n </button>\n <sl-menu #menu size=\"sm\">\n @for (entry of operators(); track entry) {\n <button slMenuItem (select)=\"chooseOperator(entry)\">{{ operatorName(entry) }}</button>\n }\n </sl-menu>\n </div>\n @if (range() && !customTemplate()) {\n <sl-data-grid-range-operand\n [kind]=\"kind()\"\n [start]=\"draft().value\"\n [end]=\"draft().end\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n variant=\"plain\"\n (rangeChange)=\"writeBoth($event.start, $event.end)\"\n />\n } @else {\n @for (slot of slots(); track slot) {\n @if (customTemplate(); as custom) {\n <span>\n <ng-container [ngTemplateOutlet]=\"custom\" [ngTemplateOutletContext]=\"context(slot)\" />\n </span>\n } @else {\n <sl-data-grid-operand\n [kind]=\"kind()\"\n [column]=\"column().column\"\n [value]=\"slot === 0 ? draft().value : draft().end\"\n [label]=\"operandLabel(slot)\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n [counts]=\"counts()\"\n [placeholder]=\"rowPlaceholder(slot)\"\n variant=\"plain\"\n (valueChange)=\"write(slot, $event)\"\n (applyRequest)=\"applyNow()\"\n />\n }\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridFilterRowOperand {\n readonly column = input.required<ResolvedGridColumn<unknown>>();\n readonly kind = input.required<FilterKind>();\n readonly committed = input<FilterDescriptor | null>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly locale = input<string | undefined>(undefined);\n readonly counts = input<ReadonlyMap<string, number> | undefined>(undefined);\n readonly debounce = input<number>(300);\n readonly customTemplate = input<TemplateRef<DataGridFilterOperandContext> | null>(null);\n readonly filterChange = output<{\n filter: FilterDescriptor | null;\n reason: 'pointer' | 'keyboard';\n }>();\n\n readonly operator = signal<string>('contains');\n readonly draft = signal<{ value: unknown; end: unknown }>({ value: null, end: null });\n private timer: ReturnType<typeof setTimeout> | undefined;\n private seen = '';\n\n constructor() {\n effect(() => {\n const committed = this.committed();\n const text = serializeFilter(committed);\n if (text === this.seen) return;\n this.seen = text;\n const condition = committed?.conditions[0];\n this.operator.set(condition?.operator ?? (defaultOperator(this.kind()) as string));\n this.draft.set({ value: condition?.value ?? null, end: condition?.end ?? null });\n });\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n protected readonly operators = computed(() => operatorsFor(this.kind()) as readonly string[]);\n protected readonly operands = computed(() => operandCount(this.operator() as FilterOperator));\n protected readonly slots = computed<readonly (0 | 1)[]>(() => {\n const operands = this.operands();\n return operands === 0 ? [] : operands === 1 ? [0] : [0, 1];\n });\n protected readonly symbol = computed(() =>\n this.t()(`filterSymbols.${this.operator() as FilterOperator}`),\n );\n protected readonly range = computed(() => isRangeOperand(this.kind(), this.operator()));\n\n protected operatorName(operator: string) {\n return this.t()(`filterOperators.${operator as FilterOperator}`);\n }\n /* An amount in a filter is typed, never spun (`stepper=\"none\"` above): the\n steppers took a third of a filter cell and a `between` had room for one\n digit. The two ends of a `between` are named From and To. */\n protected rowPlaceholder(slot: 0 | 1) {\n const t = this.t();\n return this.operands() === 2 ? (slot === 0 ? t('filterFrom') : t('filterTo')) : t('filter');\n }\n protected operandLabel(slot: 0 | 1) {\n const t = this.t();\n const column = this.column().column.label;\n return this.operands() === 2\n ? t('filterRange', { bound: slot === 0 ? 'from' : 'to', column })\n : t('filterColumn', { column });\n }\n protected context(slot: 0 | 1): DataGridFilterOperandContext {\n const value = slot === 0 ? this.draft().value : this.draft().end;\n return {\n $implicit: value,\n column: this.column().id,\n operator: this.operator(),\n value,\n setValue: (next) => this.write(slot, next, true),\n apply: () => this.applyNow(),\n label: this.operandLabel(slot),\n };\n }\n private commit(\n operator: string,\n draft: { value: unknown; end: unknown },\n reason: 'pointer' | 'keyboard',\n ) {\n const descriptor = normalizeFilter({\n kind: this.kind(),\n join: 'and',\n conditions: [{ operator, value: draft.value, end: draft.end }],\n } as FilterDescriptor);\n if (sameFilter(descriptor, this.committed())) return;\n this.seen = serializeFilter(descriptor);\n this.filterChange.emit({ filter: descriptor, reason });\n }\n protected write(slot: 0 | 1, next: unknown, immediate = false) {\n const draft = slot === 0 ? { ...this.draft(), value: next } : { ...this.draft(), end: next };\n this.draft.set(draft);\n clearTimeout(this.timer);\n const run = () => this.commit(this.operator(), draft, 'keyboard');\n const kind = this.kind();\n if (immediate || (kind !== 'text' && kind !== 'number')) run();\n else this.timer = setTimeout(run, this.debounce());\n }\n protected writeBoth(start: unknown, end: unknown) {\n const draft = { value: start, end };\n this.draft.set(draft);\n clearTimeout(this.timer);\n this.commit(this.operator(), draft, 'keyboard');\n }\n protected applyNow() {\n clearTimeout(this.timer);\n this.commit(this.operator(), this.draft(), 'keyboard');\n }\n protected chooseOperator(next: string) {\n this.operator.set(next);\n const after = operandCount(next as FilterOperator);\n const kept = {\n value: after >= 1 ? this.draft().value : null,\n end: after === 2 ? this.draft().end : null,\n };\n this.draft.set(kept);\n this.commit(next, kept, 'pointer');\n }\n}\n\n/**\n * The editor a kind implies: the field family of that kind, `plain` and `sm`,\n * filling the cell. The draft is the domain value.\n */\n@Component({\n selector: 'sl-data-grid-editor',\n standalone: true,\n imports: [\n SlCheckbox,\n SlDateField,\n SlDateTimeField,\n SlNumberField,\n SlNumberFieldInput,\n SlSelect,\n SlSelectItem,\n SlTextField,\n SlTextFieldInput,\n SlTimeField,\n ],\n template: `\n @switch (kind()) {\n @case ('number') {\n <div slNumberField size=\"sm\" variant=\"plain\">\n <input\n slNumberFieldInput\n autofocus\n [invalid]=\"invalid() || undefined\"\n [value]=\"numberValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"column().label\"\n [attr.title]=\"message()\"\n (valueChange)=\"draftChange.emit($event.value)\"\n />\n </div>\n }\n @case ('boolean') {\n <span\n slCheckbox\n [checked]=\"draft() === true\"\n (checkedChange)=\"draftChange.emit($event.value)\"\n >\n <span data-ui=\"visually-hidden\" data-part=\"root\">{{ column().label }}</span>\n </span>\n }\n @case ('date') {\n <div\n slDateField\n size=\"sm\"\n variant=\"plain\"\n [value]=\"dateValue()\"\n [locale]=\"locale()\"\n [invalid]=\"invalid() || undefined\"\n [attr.aria-label]=\"column().label\"\n (valueChange)=\"draftChange.emit(isoDay($event.value))\"\n ></div>\n }\n @case ('time') {\n <div\n slTimeField\n size=\"sm\"\n variant=\"plain\"\n [value]=\"timeValue()\"\n [locale]=\"locale()\"\n [invalid]=\"invalid() || undefined\"\n [attr.aria-label]=\"column().label\"\n (valueChange)=\"draftChange.emit(isoTime($event.value))\"\n ></div>\n }\n @case ('datetime') {\n <div\n slDateTimeField\n size=\"sm\"\n variant=\"plain\"\n [value]=\"dateTimeValue()\"\n [locale]=\"locale()\"\n [invalid]=\"invalid() || undefined\"\n [attr.aria-label]=\"column().label\"\n (valueChange)=\"draftChange.emit(isoDateTime($event.value))\"\n ></div>\n }\n @case ('set') {\n <sl-select\n size=\"sm\"\n variant=\"plain\"\n [fullWidth]=\"true\"\n [multiple]=\"multiple()\"\n [items]=\"setItems()\"\n [placeholder]=\"t()('filterAny')\"\n [attr.aria-label]=\"column().label\"\n [value]=\"setValue()\"\n (valueChange)=\"draftChange.emit($event)\"\n >\n @for (option of column().options ?? []; track option.value) {\n <sl-select-item [value]=\"option.value\">{{ option.label }}</sl-select-item>\n }\n </sl-select>\n }\n @default {\n <div slTextField size=\"sm\" variant=\"plain\">\n <input\n slTextFieldInput\n autofocus\n [invalid]=\"invalid() || undefined\"\n [value]=\"textValue()\"\n [attr.aria-label]=\"column().label\"\n [attr.title]=\"message()\"\n (input)=\"draftChange.emit($any($event.target).value)\"\n />\n </div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridEditor {\n readonly column = input.required<GridColumn<unknown>>();\n readonly draft = input<unknown>(null);\n readonly value = input<unknown>(null);\n readonly invalid = input(false);\n readonly message = input<string | null>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly locale = input<string | undefined>(undefined);\n readonly draftChange = output<unknown>();\n\n protected readonly kind = computed(() => this.column().kind ?? 'text');\n protected readonly multiple = computed(() => Array.isArray(this.value()));\n protected readonly numberValue = computed(() =>\n typeof this.draft() === 'number' ? (this.draft() as number) : null,\n );\n protected readonly textValue = computed(() => {\n const draft = this.draft();\n return draft === null || draft === undefined ? '' : String(draft);\n });\n protected readonly dateValue = computed(() => dateOf(this.draft()));\n protected readonly timeValue = computed(() => timeOf(this.draft()));\n protected readonly dateTimeValue = computed(() => dateTimeOf(this.draft()));\n protected readonly setItems = computed(() =>\n (this.column().options ?? []).map((option) => ({ label: option.label, value: option.value })),\n );\n protected readonly setValue = computed(() => {\n const draft = this.draft();\n if (this.multiple()) return (draft as readonly string[] | null) ?? [];\n return draft === null || draft === undefined ? null : String(draft);\n });\n\n protected isoDay(value: unknown) {\n return isPlainDate(value) ? toISODate(value) : null;\n }\n protected isoTime(value: unknown) {\n return isPlainTime(value) ? toISOTime(value, 'minute') : null;\n }\n protected isoDateTime(value: unknown) {\n return isPlainDateTime(value) ? toISODateTime(value) : null;\n }\n}\n","import type {\n CsvOptions,\n GridCell,\n GridColumn,\n GridColumnOverflow,\n GridColumnState,\n GridColumnStateChange,\n GridNode,\n GridQuery,\n GridQueryChange,\n GridRange,\n ResolvedGridColumn,\n} from '@slotted/core/grid';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport type DataGridVariant = 'plain' | 'ruled' | 'framed';\nexport type DataGridStickyTo = 'scroll' | 'page';\nexport type DataGridSelectionMode = 'none' | 'single' | 'multiple' | 'range';\nexport type DataGridEditMode = 'cell' | 'row';\nexport type DataGridMode = 'client' | 'server';\nexport type DataGridVirtualize = 'auto' | boolean;\nexport type DataGridRowHeight = number | 'auto';\n/**\n * What a frame too narrow for the template does: moves columns into the row's\n * pop-in, scrolls, or — `auto` — pops in on a phone-wide or a touch frame\n * narrower than a desktop and scrolls elsewhere.\n */\nexport type DataGridColumnOverflow = GridColumnOverflow;\nexport type DataGridReason = 'pointer' | 'keyboard' | 'clear' | 'select' | 'programmatic';\nexport type DataGridExpandedGroups = readonly string[] | 'all';\nexport type DataGridSelection = string | readonly string[] | null;\n\nexport interface DataGridDataSourceResult<Row> {\n readonly rows: readonly Row[];\n /** The whole set's size, when known. */\n readonly total?: number | undefined;\n /** Whether a page past this one exists, when the total is not known. */\n readonly hasMore?: boolean | undefined;\n}\n\nexport interface DataGridDataSource<Row> {\n getRows(\n query: GridQuery,\n options: { readonly signal: AbortSignal },\n ): Promise<DataGridDataSourceResult<Row>>;\n /** Answers kept, by query. Default 20; 0 keeps none. */\n readonly cacheSize?: number | undefined;\n}\n\nexport interface DataGridPinnedRows {\n readonly top?: readonly string[] | undefined;\n readonly bottom?: readonly string[] | undefined;\n}\n\nexport interface DataGridRowsReorderEvent {\n readonly key: string;\n /** The row's index in `rows`. */\n readonly from: number;\n /** The index the row takes in `rows` once moved. */\n readonly to: number;\n readonly reason: 'pointer' | 'keyboard';\n readonly event?: Event | undefined;\n}\n\nexport interface DataGridExportOptions extends Omit<CsvOptions, 'booleans'> {\n /** What a boolean writes in the file. Default: the grid's own words, `filterYes` and `filterNo`. */\n readonly booleans?: CsvOptions['booleans'] | undefined;\n /** Default `export.csv`. */\n readonly filename?: string | undefined;\n /** `visible`: the rows the query left (every page in client mode; the received page in server mode). `selected`: the selected rows, in the grid's order. Default `visible`. */\n readonly rows?: 'visible' | 'selected' | undefined;\n /** `visible`: the columns not hidden, in the reader's order. `all`: every column the model declares. Default `visible`. */\n readonly columns?: 'visible' | 'all' | undefined;\n}\n\n/** The request a query change carries: the value, plus which part of it moved. */\nexport interface DataGridQueryRequest extends ChangeRequest<GridQuery> {\n readonly change: GridQueryChange;\n}\n\nexport interface DataGridColumnStateRequest extends ChangeRequest<GridColumnState> {\n readonly change: GridColumnStateChange;\n}\n\nexport interface DataGridEditCommit<Row = unknown> {\n readonly key: string;\n readonly column: string;\n readonly value: unknown;\n readonly previous: unknown;\n readonly row: Row;\n readonly reason: 'keyboard' | 'pointer' | 'blur' | 'programmatic';\n readonly changes: Readonly<Record<string, unknown>>;\n /** A promise the consumer hands back keeps the cell pending until it settles. */\n wait(promise: Promise<void>): void;\n}\n\nexport interface DataGridActivateEvent {\n readonly key: string;\n readonly reason: 'pointer' | 'keyboard';\n readonly event: unknown;\n}\n\n/** What a projected cell template is handed. */\nexport interface DataGridCellContext<Row = unknown> {\n readonly $implicit: Row;\n readonly row: Row;\n readonly key: string;\n readonly column: GridColumn<Row>;\n readonly value: unknown;\n readonly text: string;\n readonly current: boolean;\n readonly selected: boolean;\n}\n\nexport interface DataGridEditorContext<Row = unknown> extends DataGridCellContext<Row> {\n readonly draft: unknown;\n readonly setDraft: (draft: unknown) => void;\n readonly commit: () => void;\n readonly cancel: () => void;\n readonly invalid: boolean;\n readonly message: string | null;\n}\n\nexport interface DataGridHeaderContext<Row = unknown> {\n readonly $implicit: GridColumn<Row>;\n readonly column: GridColumn<Row>;\n readonly resolved: ResolvedGridColumn<Row>;\n readonly sorted: 'ascending' | 'descending' | null;\n readonly sortIndex: number | null;\n readonly filtered: boolean;\n}\n\nexport interface DataGridGroupContext<Row = unknown> {\n readonly $implicit: Extract<GridNode<Row>, { kind: 'group' }>;\n readonly node: Extract<GridNode<Row>, { kind: 'group' }>;\n readonly column: GridColumn<Row>;\n readonly toggle: () => void;\n}\n\nexport interface DataGridFilterOperandContext {\n readonly $implicit: unknown;\n readonly column: string;\n readonly operator: string;\n readonly value: unknown;\n readonly setValue: (value: unknown) => void;\n readonly apply: () => void;\n readonly label: string;\n}\n\nexport type { GridCell, GridRange };\n\nexport interface DataGridDefaults {\n variant: DataGridVariant;\n striped: boolean;\n stickyHeader: boolean;\n stickyTo: DataGridStickyTo;\n selectionMode: DataGridSelectionMode;\n editMode: DataGridEditMode;\n filterRow: boolean;\n virtualize: DataGridVirtualize;\n rowHeight: DataGridRowHeight | undefined;\n columnOverflow: DataGridColumnOverflow;\n overscan: number;\n pageSizes: readonly number[];\n filterDebounce: number;\n loadMoreThreshold: number;\n skeletonRows: number;\n}\n\nconst FALLBACK: DataGridDefaults = {\n variant: 'ruled',\n striped: false,\n stickyHeader: true,\n stickyTo: 'scroll',\n selectionMode: 'none',\n editMode: 'cell',\n filterRow: false,\n virtualize: 'auto',\n rowHeight: undefined,\n columnOverflow: 'auto',\n overscan: 6,\n pageSizes: [25, 50, 100],\n filterDebounce: 300,\n loadMoreThreshold: 20,\n skeletonRows: 8,\n};\n\nexport const DATA_GRID_DEFAULTS = new InjectionToken<DataGridDefaults>(\n 'slotted data-grid defaults',\n {\n providedIn: 'root',\n factory: () => FALLBACK,\n },\n);\n\n/**\n * An application decides once how its grids are framed, how they select and\n * how they edit. A grid that states any of them itself still wins. Its words\n * and its locale come from the language in force (`provideSlotted`).\n */\nexport function provideDataGridDefaults(defaults: Partial<DataGridDefaults>) {\n return {\n provide: DATA_GRID_DEFAULTS,\n useFactory: (): DataGridDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectDataGridDefaults(): DataGridDefaults {\n return inject(DATA_GRID_DEFAULTS);\n}\n\n/** Application-scoped, so the server and the client produce the same sequence. */\n@Injectable({ providedIn: 'root' })\nexport class SlDataGridIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-data-grid-${this.count}`;\n }\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * The surfaces a consumer replaces, each an `ng-template` the grid reads\n * through `contentChildren` and renders only for the cells it mounts. A\n * column-scoped template names the column; one with no name serves every\n * column that has none of its own.\n */\n@Directive({ selector: 'ng-template[slDataGridCell]', standalone: true })\nexport class SlDataGridCellTemplate {\n /** The column id, or empty for every column. */\n readonly slDataGridCell = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridEditor]', standalone: true })\nexport class SlDataGridEditorTemplate {\n readonly slDataGridEditor = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridHeader]', standalone: true })\nexport class SlDataGridHeaderTemplate {\n readonly slDataGridHeader = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n/**\n * A column's help, opened from its column-help button in a popover under the\n * column's `description`. Named by column: a help for every column is a\n * description, and `GridColumn.description` already says that.\n */\n@Directive({ selector: 'ng-template[slDataGridColumnHelp]', standalone: true })\nexport class SlDataGridColumnHelp {\n /** The column id. */\n readonly slDataGridColumnHelp = input.required<string>();\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridFilter]', standalone: true })\nexport class SlDataGridFilterTemplate {\n readonly slDataGridFilter = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n/** A row's detail; its presence draws the expander column. */\n@Directive({ selector: 'ng-template[slDataGridDetail]', standalone: true })\nexport class SlDataGridDetailTemplate {\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridGroup]', standalone: true })\nexport class SlDataGridGroupTemplate {\n readonly template = inject(TemplateRef);\n}\n\n/** The empty, no-results or error state in place of the family's result-state. */\n@Directive({ selector: 'ng-template[slDataGridEmpty]', standalone: true })\nexport class SlDataGridEmptyTemplate {\n readonly template = inject(TemplateRef);\n}\n\n/** What stands in the bar under the grid: pagination, a count. */\n@Directive({ selector: '[slDataGridFooter]', standalone: true })\nexport class SlDataGridFooter {}\n","import { writeToClipboard } from '@slotted/core/clipboard';\nimport { createRowMetrics, nextSelection, virtualWindow } from '@slotted/core/collection';\nimport { createDragController, type DragController } from '@slotted/core/drag';\nimport { createFilterGroupPredicate, ruleFor, withoutRuleFor } from '@slotted/core/filter';\nimport type { FilterDescriptor, FilterKind } from '@slotted/core/filter';\nimport {\n applyQuery,\n cellText,\n columnsOutOfSpace,\n cellValue,\n serializeQuery,\n toCsv,\n columnRange,\n columnTemplate,\n emptyQuery,\n FILTER_ROW,\n GROUP_ROW_PREFIX,\n HEADER_ROW,\n isGroupCursorRow,\n moveCursor,\n normalizeColumnState,\n POPIN_COLUMN_ID,\n rangeBounds,\n rangeCells,\n rangeEdges,\n rangeToText,\n RESIZE_STEP,\n resolveColumnOverflow,\n resolveColumns,\n rowRange,\n sameCell,\n settleCursor,\n SUMMARY_ROW,\n wholeRange,\n withColumnFilter,\n withColumnHidden,\n withColumnMoved,\n withColumnPinned,\n withColumnWidth,\n withoutFilters,\n withSort,\n withSortPress,\n zoneOf,\n type CursorGrid,\n type CursorIntent,\n type GridCell,\n type GridColumn,\n type GridColumnGroup,\n type GridColumnState,\n type GridDensity,\n type GridNode,\n type GridOutOfSpace,\n type GridQuery,\n type GridRange,\n type ResolvedGridColumn,\n type SortDirection,\n type GridTree,\n} from '@slotted/core/grid';\nimport {\n dataGridMessages,\n dragMessages,\n type DataGridMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createScrollAffordance } from '@slotted/core/overflow';\nimport type { PositionerAnchor } from '@slotted/core/positioner';\nimport { createControllable, type ChangeReason, type ChangeRequest } from '@slotted/core/state';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n numberAttribute,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\n\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCheckbox } from '@slotted/angular/checkbox';\nimport { SlMenu, SlMenuItem, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverAnchor,\n SlPopoverBody,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n} from '@slotted/angular/popover';\nimport {\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n} from '@slotted/angular/result-state';\nimport { SlSkeleton } from '@slotted/angular/skeleton';\nimport {\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n SlTooltipTrigger,\n} from '@slotted/angular/tooltip';\nimport {\n filterKindOf,\n SlDataGridEditor,\n SlDataGridFilterPanel,\n SlDataGridFilterRowOperand,\n} from './data-grid-controls';\nimport {\n injectDataGridDefaults,\n SlDataGridIdFactory,\n type DataGridActivateEvent,\n type DataGridCellContext,\n type DataGridColumnOverflow,\n type DataGridColumnStateRequest,\n type DataGridEditCommit,\n type DataGridEditMode,\n type DataGridEditorContext,\n type DataGridDataSource,\n type DataGridDataSourceResult,\n type DataGridExportOptions,\n type DataGridPinnedRows,\n type DataGridRowsReorderEvent,\n type DataGridExpandedGroups,\n type DataGridGroupContext,\n type DataGridHeaderContext,\n type DataGridMode,\n type DataGridQueryRequest,\n type DataGridReason,\n type DataGridRowHeight,\n type DataGridSelection,\n type DataGridSelectionMode,\n type DataGridStickyTo,\n type DataGridVariant,\n type DataGridVirtualize,\n} from './data-grid-defaults';\nimport {\n SlDataGridCellTemplate,\n SlDataGridColumnHelp,\n SlDataGridDetailTemplate,\n SlDataGridEditorTemplate,\n SlDataGridEmptyTemplate,\n SlDataGridFilterTemplate,\n SlDataGridFooter,\n SlDataGridGroupTemplate,\n SlDataGridHeaderTemplate,\n} from './data-grid-templates';\n\nexport const SELECTION_COLUMN = '__selection';\nexport const EXPANDER_COLUMN = '__expander';\n/** The reserved column that carries a row's drag handle. */\nexport const DRAG_COLUMN = '__drag';\nconst SELECTION_WIDTH = 48;\nconst EXPANDER_WIDTH = 40;\nconst DRAG_WIDTH = 40;\nconst DEFAULT_ROW_HEIGHT = 34;\n/** Milliseconds a changed cell stays marked when `highlightChanges` is `true`. */\nconst DEFAULT_CHANGED_DURATION = 1200;\n/** Answers a data source keeps, by query. */\nconst DEFAULT_CACHE_SIZE = 20;\nconst EMPTY_ROWS: readonly never[] = [];\n/** The out-of-space set of a frame not measured yet, or of a grid that scrolls instead. */\nconst NONE_OUT: GridOutOfSpace = { popin: [], hidden: [] };\nconst VIRTUALIZE_ROWS_FROM = 100;\nconst VIRTUALIZE_COLUMNS_FROM = 20;\n/** The viewport assumed until the scroller is measured. */\nconst PROVISIONAL_VIEWPORT = 600;\nconst COLUMN_OVERSCAN_PX = 400;\nconst SIMPLE_WIDGET =\n 'a[href], button, input[type=\"checkbox\"], input[type=\"radio\"], [role=\"switch\"], [role=\"button\"], [role=\"checkbox\"]';\n/** What an editor's focus lands on: its field, before any control beside it. */\nconst EDITOR_FIELD =\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([disabled]), textarea:not([disabled]), [role=\"combobox\"]:not([disabled]), [role=\"spinbutton\"]:not([disabled]), [role=\"checkbox\"], [role=\"switch\"]';\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]';\n/** Where a secondary press is the field's own: the browser's menu cuts, copies and pastes. */\nconst EDITABLE = 'input, textarea, select, [contenteditable]:not([contenteditable=\"false\"])';\n/**\n * The window after a keyboard opening of a column menu in which a\n * `contextmenu` is the one Windows fires for the key, not a second press:\n * `context-menu-trigger.ts`'s technique.\n */\nconst KEYBOARD_ECHO = 300;\n/** Milliseconds after a touch activation in which the `dblclick` the browser adds is ignored. */\nconst TOUCH_ECHO = 500;\n\n/** A rectangle with no size at the point the reader pressed. */\nfunction pointAnchor(x: number, y: number): PositionerAnchor {\n const rect = new DOMRect(x, y, 0, 0);\n return { getBoundingClientRect: () => rect };\n}\n\n/**\n * Whether a pointer event landed on a widget inside the cell — a link, a\n * button, a field — rather than on the cell itself. Asked of the cell and not\n * of the document: the scroller is focusable while the grid overflows, and\n * `closest` walked up to it from every value, so a press on a header's name\n * sorted nothing and only the cell's own padding answered. A press outside\n * the cell — on the menu it opened — is not its own either.\n */\nfunction insideWidget(event: Event) {\n const cell = event.currentTarget as HTMLElement;\n const target = event.target as HTMLElement | null;\n /* An event from a layer the cell owns — React bubbles a portal's events\n through the tree — is not the cell's own press either. */\n if (!target || !cell.contains(target)) return true;\n const widget = target.closest(FOCUSABLE);\n return widget !== null && widget !== cell && cell.contains(widget);\n}\n\ninterface EditSession {\n readonly cell: GridCell;\n readonly columns: readonly string[];\n readonly drafts: Readonly<Record<string, unknown>>;\n readonly originals: Readonly<Record<string, unknown>>;\n readonly status: 'editing' | 'pending' | 'invalid';\n readonly messages: Readonly<Record<string, string>>;\n}\n\ntype GroupNode = Extract<GridNode<unknown>, { kind: 'group' }>;\ntype RowNode = Extract<GridNode<unknown>, { kind: 'row' }>;\n\nfunction sameKeys(a: readonly string[] | 'all', b: readonly string[] | 'all') {\n if (a === 'all' || b === 'all') return a === b;\n return a.length === b.length && a.every((key, index) => key === b[index]);\n}\nfunction sameSelection(a: DataGridSelection, b: DataGridSelection) {\n if (Array.isArray(a) && Array.isArray(b)) return sameKeys(a, b);\n return a === b;\n}\nfunction sameRange(a: GridRange | null, b: GridRange | null) {\n if (!a || !b) return a === b;\n return sameCell(a.anchor, b.anchor) && sameCell(a.focus, b.focus);\n}\n/**\n * Where a drop at a boundary of the whole row lands inside the source's zone:\n * the index among the zone's members, or `null` when the column would not\n * move. A boundary past the zone's edge lands on that edge.\n */\nfunction zoneIndex<Row>(\n list: readonly ResolvedGridColumn<Row>[],\n zone: readonly string[],\n columnId: string,\n boundary: number,\n): number | null {\n const first = list.findIndex((column) => column.id === zone[0]);\n const clamped = Math.max(first, Math.min(first + zone.length, boundary));\n const from = zone.indexOf(columnId);\n const to = clamped - first;\n const settled = to > from ? to - 1 : to;\n return settled === from ? null : settled;\n}\n\nfunction isBodyRow(row: string) {\n return row !== HEADER_ROW && row !== FILTER_ROW && row !== SUMMARY_ROW && !isGroupCursorRow(row);\n}\n\n/**\n * A grid of data: the composite widget `table` declined to be. It owns the\n * rows, applies the query, walks the cells with one cursor, edits in place,\n * and lets the reader arrange the columns. Its selection is a form value.\n */\n/** The room a cell's content asks for: the value's laid-out width, the boxes beside it, the gaps, the padding and the border. */\nfunction contentWidth(cell: HTMLElement): number {\n const style = getComputedStyle(cell);\n const frame =\n cell.offsetWidth -\n cell.clientWidth +\n parseFloat(style.paddingInlineStart) +\n parseFloat(style.paddingInlineEnd);\n const gap = parseFloat(style.columnGap) || 0;\n let width = 0;\n let count = 0;\n for (const child of cell.children) {\n if (!(child instanceof HTMLElement) || getComputedStyle(child).display === 'none') continue;\n /* The description is read, not drawn: it asks for no room. */\n if (child.dataset['part'] === 'column-description') continue;\n count += 1;\n if (count === 1 && child.dataset['ui'] === undefined) {\n const range = cell.ownerDocument.createRange();\n range.selectNodeContents(child);\n width += range.getBoundingClientRect().width;\n } else {\n width += child.getBoundingClientRect().width;\n }\n }\n return width + Math.max(0, count - 1) * gap + frame;\n}\n\n@Component({\n selector: 'sl-data-grid',\n standalone: true,\n exportAs: 'slDataGrid',\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlCheckbox,\n SlDataGridEditor,\n SlDataGridFilterPanel,\n SlDataGridFilterRowOperand,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlPopover,\n SlPopoverAnchor,\n SlPopoverBody,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n SlSkeleton,\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n SlTooltipTrigger,\n ],\n styleUrls: [\n '../../../styles/src/data-grid/data-grid.css',\n '../../../styles/src/checkbox/checkbox.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n template: `\n <div #scroll data-part=\"scroll\">\n <div data-part=\"head\" role=\"rowgroup\">\n @if (hasGroups()) {\n <div data-part=\"header-row\" role=\"row\" aria-rowindex=\"1\">\n @for (cell of groupCells(); track cell.key) {\n <div\n data-part=\"column-group\"\n role=\"columnheader\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"cell.first\"\n [attr.aria-colspan]=\"cell.span\"\n [attr.data-pinned]=\"cell.pinned\"\n [style.--slotted-data-grid-column]=\"cell.first + ' / ' + (cell.first + cell.span)\"\n [style.--slotted-data-grid-pin-offset]=\"cell.pinned ? cell.pinOffset + 'px' : null\"\n >\n <span>{{ cell.label }}</span>\n </div>\n }\n </div>\n }\n <div\n data-part=\"header-row\"\n role=\"row\"\n [attr.data-row]=\"HEADER\"\n [attr.aria-rowindex]=\"hasGroups() ? 2 : 1\"\n >\n @if (hasSelectionColumn()) {\n <div\n data-part=\"selection\"\n role=\"gridcell\"\n aria-colindex=\"1\"\n [attr.data-column]=\"SELECTION\"\n [attr.tabindex]=\"isTabStop(HEADER, SELECTION) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(HEADER, SELECTION) ? '' : null\"\n [style.--slotted-data-grid-column]=\"1\"\n (focus)=\"onCellFocus({ row: HEADER, column: SELECTION }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: HEADER, column: SELECTION })\"\n (pointerdown)=\"onCellPointerDown($event, { row: HEADER, column: SELECTION })\"\n >\n @if (resolvedSelectionMode() === 'multiple') {\n <span\n slCheckbox\n [checked]=\"allState() === 'all'\"\n [indeterminate]=\"allState() === 'some'\"\n [tabIndex]=\"isCurrent(HEADER, SELECTION) ? 0 : -1\"\n (checkedChange)=\"toggleAll($event.source)\"\n >\n <span data-ui=\"visually-hidden\" data-part=\"root\">{{ selectAllName() }}</span>\n </span>\n }\n </div>\n }\n @if (hasDragColumn()) {\n <div\n data-part=\"column-header\"\n role=\"columnheader\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"dragIndex()\"\n [attr.data-column]=\"DRAG\"\n [style.--slotted-data-grid-column]=\"dragIndex()\"\n >\n <span></span>\n </div>\n }\n @if (hasExpanderColumn()) {\n <div\n data-part=\"column-header\"\n role=\"columnheader\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"expanderIndex()\"\n [attr.data-column]=\"EXPANDER\"\n [style.--slotted-data-grid-column]=\"expanderIndex()\"\n >\n <span></span>\n </div>\n }\n @for (column of mountedColumns(); track column.id) {\n <ng-container\n slPopover\n side=\"bottom\"\n align=\"start\"\n size=\"sm\"\n [open]=\"filterOpen() === column.id && filterKind(column) !== null\"\n (openChange)=\"onFilterOpenChange(column.id, $event)\"\n >\n <div\n slPopoverAnchor\n data-part=\"column-header\"\n role=\"columnheader\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.aria-sort]=\"ariaSort(column.id)\"\n [attr.aria-describedby]=\"\n column.column.description ? descriptionId(column.id) : null\n \"\n [attr.data-column]=\"column.id\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.data-sortable]=\"column.sortable ? '' : null\"\n [attr.data-sorted]=\"sortOf(column.id)?.direction ?? null\"\n [attr.data-filtered]=\"filterOf(column.id) ? '' : null\"\n [attr.data-current]=\"isCurrent(HEADER, column.id) ? '' : null\"\n [attr.data-dragging]=\"dragState().dragging === column.id ? '' : null\"\n [attr.data-drop-target]=\"dragState().target === column.id ? '' : null\"\n [attr.data-resizing]=\"resizing() === column.id ? '' : null\"\n [attr.tabindex]=\"isTabStop(HEADER, column.id) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (click)=\"onHeaderClick($event, column)\"\n (contextmenu)=\"onHeaderContextMenu($event, column.id)\"\n (focus)=\"onCellFocus({ row: HEADER, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: HEADER, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: HEADER, column: column.id })\"\n >\n <ng-container slTooltip whenClipped describes=\"none\" openOn=\"hover\" side=\"bottom\">\n <span slTooltipTrigger>\n @if (headerTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"headerContext(column)\"\n />\n } @else {\n {{ column.column.label }}\n }\n </span>\n <ng-template slTooltipLayer>\n <div slTooltipContent>{{ column.column.label }}</div>\n </ng-template>\n </ng-container>\n @if (sortOf(column.id); as sort) {\n <span\n data-part=\"sort\"\n aria-hidden=\"true\"\n [attr.data-index]=\"query().sort.length > 1 ? sort.index : null\"\n >\n <!-- The stylesheet turns the chevron over for ascending; the\n index of a key past the first is its own text before it. -->\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </span>\n }\n @if (column.column.description; as description) {\n <span\n data-part=\"column-description\"\n aria-hidden=\"true\"\n [id]=\"descriptionId(column.id)\"\n >{{ description }}</span\n >\n }\n <span data-part=\"column-actions\">\n @if (hasHelp(column)) {\n <ng-container slPopover side=\"bottom\" align=\"start\" size=\"sm\">\n <button\n slPopoverTrigger\n data-part=\"column-help\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"helpLabel(column)\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n >\n <span slIcon><svg slGlyph name=\"circle-question\"></svg></span>\n </button>\n <ng-template slPopoverLayer>\n <div slPopoverContent [attr.aria-label]=\"helpLabel(column)\">\n <div slPopoverBody>\n @if (column.column.description; as description) {\n <div>{{ description }}</div>\n }\n @if (helpTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"headerContext(column)\"\n />\n }\n </div>\n </div>\n </ng-template>\n </ng-container>\n }\n @if (column.filterable && (filterOf(column.id) || filterOpen() === column.id)) {\n <button\n data-part=\"filter\"\n type=\"button\"\n tabindex=\"-1\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"filterOpen() === column.id\"\n [attr.aria-label]=\"t('filterColumn', { column: column.column.label })\"\n [attr.data-filtered]=\"filterOf(column.id) ? '' : null\"\n [attr.data-open]=\"filterOpen() === column.id ? '' : null\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation(); toggleFilterPanel(column.id)\"\n >\n <span slIcon><svg slGlyph name=\"funnel\"></svg></span>\n </button>\n }\n <button\n data-part=\"column-menu\"\n type=\"button\"\n tabindex=\"-1\"\n [slMenuTriggerFor]=\"columnMenu\"\n [attr.data-menu-for]=\"column.id\"\n [attr.aria-label]=\"t('columnMenu', { column: column.column.label })\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation(); anchorToButton(columnMenu)\"\n >\n <span slIcon><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu\n #columnMenu\n size=\"sm\"\n [sideOffset]=\"MENU_OFFSET\"\n [attr.aria-label]=\"t('columnMenu', { column: column.column.label })\"\n [aria-describedby]=\"\n column.column.description ? descriptionId(column.id) : undefined\n \"\n >\n @if (column.column.description; as description) {\n <div data-part=\"column-menu-description\" aria-hidden=\"true\">\n {{ description }}\n </div>\n }\n @if (column.sortable) {\n <button\n slMenuItem\n [disabled]=\"isSortedAlone(column.id, 'ascending')\"\n (select)=\"setSort(column.id, 'ascending', $event)\"\n >\n {{ t('sortAscendingAction') }}\n </button>\n <button\n slMenuItem\n [disabled]=\"isSortedAlone(column.id, 'descending')\"\n (select)=\"setSort(column.id, 'descending', $event)\"\n >\n {{ t('sortDescendingAction') }}\n </button>\n <button\n slMenuItem\n [disabled]=\"sortOf(column.id) === null\"\n (select)=\"setSort(column.id, null, $event)\"\n >\n {{ t('sortClearAction') }}\n </button>\n <hr slMenuSeparator />\n }\n @if (column.filterable && filterKind(column) !== null) {\n <button slMenuItem (select)=\"filterOpen.set(column.id)\">\n {{ t('filterMenu') }}\n </button>\n }\n <button\n slMenuItem\n [disabled]=\"column.pinned === 'start'\"\n (select)=\"pin(column.id, 'start', $event)\"\n >\n {{ t('pinStart') }}\n </button>\n <button\n slMenuItem\n [disabled]=\"column.pinned === 'end'\"\n (select)=\"pin(column.id, 'end', $event)\"\n >\n {{ t('pinEnd') }}\n </button>\n @if (column.pinned) {\n <button slMenuItem (select)=\"pin(column.id, null, $event)\">\n {{ t('unpin') }}\n </button>\n }\n <hr slMenuSeparator />\n @if (column.resizable) {\n <button slMenuItem (select)=\"fit(column.id, $event.reason, $event)\">\n {{ t('autofit') }}\n </button>\n <button slMenuItem (select)=\"fit(null, $event.reason, $event)\">\n {{ t('autofitAll') }}\n </button>\n }\n @if (column.hideable) {\n <button slMenuItem (select)=\"hide(column.id, $event, $event.reason)\">\n {{ t('hide') }}\n </button>\n }\n @if (manageable()) {\n <button slMenuItem (select)=\"manageColumns.emit()\">\n {{ t('manageColumns') }}\n </button>\n }\n </sl-menu>\n </span>\n @if (column.resizable) {\n <div\n data-part=\"resizer\"\n aria-hidden=\"true\"\n [attr.title]=\"t('resize')\"\n [attr.data-resizing]=\"resizing() === column.id ? '' : null\"\n (pointerdown)=\"beginResize($event, column)\"\n (pointermove)=\"moveResize($event, column)\"\n (pointerup)=\"endResize($event)\"\n (pointercancel)=\"endResize($event)\"\n (click)=\"$event.stopPropagation()\"\n (dblclick)=\"\n $event.stopPropagation();\n fit($event.shiftKey ? null : column.id, 'pointer', $event)\n \"\n ></div>\n }\n </div>\n <ng-template slPopoverLayer>\n <div\n slPopoverContent\n [attr.aria-label]=\"t('filterColumn', { column: column.column.label })\"\n >\n <sl-data-grid-filter-panel\n [column]=\"$any(column)\"\n [kind]=\"filterKind(column)!\"\n [committed]=\"filterOf(column.id)\"\n [t]=\"t\"\n [locale]=\"resolvedLocale()\"\n [counts]=\"filterKind(column) === 'set' ? countsFor(column.id) : undefined\"\n [customTemplate]=\"filterTemplate(column.id)\"\n (applyRequest)=\"applyPanel(column.id, $event)\"\n />\n </div>\n </ng-template>\n </ng-container>\n }\n @if (hasPopin()) {\n <!-- The pop-in's column, named for a reader and given no track. -->\n <div\n data-part=\"popin-header\"\n role=\"columnheader\"\n [attr.aria-colindex]=\"popinIndex()\"\n [attr.data-column]=\"POPIN\"\n >\n {{ t('popinHeader') }}\n </div>\n }\n </div>\n @if (resolvedFilterRow()) {\n <div\n data-part=\"filter-row\"\n role=\"row\"\n [attr.data-row]=\"FILTER\"\n [attr.aria-rowindex]=\"headerRowCount()\"\n >\n @if (hasSelectionColumn()) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n aria-colindex=\"1\"\n tabindex=\"-1\"\n [attr.data-column]=\"SELECTION\"\n [style.--slotted-data-grid-column]=\"1\"\n ></div>\n }\n @if (hasDragColumn()) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"dragIndex()\"\n [attr.data-column]=\"DRAG\"\n [style.--slotted-data-grid-column]=\"dragIndex()\"\n ></div>\n }\n @if (hasExpanderColumn()) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"expanderIndex()\"\n [attr.data-column]=\"EXPANDER\"\n [style.--slotted-data-grid-column]=\"expanderIndex()\"\n ></div>\n }\n @for (column of mountedColumns(); track column.id) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.data-column]=\"column.id\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.data-filtered]=\"filterOf(column.id) ? '' : null\"\n [attr.data-current]=\"isCurrent(FILTER, column.id) ? '' : null\"\n [attr.tabindex]=\"isCurrent(FILTER, column.id) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (focus)=\"onCellFocus({ row: FILTER, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: FILTER, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: FILTER, column: column.id })\"\n >\n @if (column.filterable && filterKind(column); as kind) {\n <sl-data-grid-filter-row-operand\n [column]=\"$any(column)\"\n [kind]=\"kind\"\n [committed]=\"filterOf(column.id)\"\n [t]=\"t\"\n [locale]=\"resolvedLocale()\"\n [counts]=\"kind === 'set' ? countsFor(column.id) : undefined\"\n [debounce]=\"resolvedDebounce()\"\n [customTemplate]=\"filterTemplate(column.id)\"\n (filterChange)=\"setFilter(column.id, $event.filter, $event.reason)\"\n />\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- One row of the body, drawn here and in the held groups at the edges. -->\n <ng-template #bodyRow let-entry>\n <div\n data-part=\"row\"\n role=\"row\"\n [attr.data-row]=\"entry.node.key\"\n [attr.aria-rowindex]=\"entry.rowIndex\"\n [attr.aria-selected]=\"rowSelectable() ? isSelected(entry.node.key) : null\"\n [attr.data-selected]=\"isSelected(entry.node.key) ? '' : null\"\n [attr.data-current]=\"current()?.row === entry.node.key ? '' : null\"\n [attr.data-expanded]=\"detailOpen(entry.node) ? '' : null\"\n [attr.aria-level]=\"tree() ? entry.node.level : null\"\n [attr.aria-expanded]=\"\n tree() &&\n (entry.node.childCount > 0 || entry.node.open || isLoadingChildren(entry.node.key))\n ? entry.node.open\n : null\n \"\n [attr.data-loading]=\"isLoadingChildren(entry.node.key) ? '' : null\"\n [attr.data-dragging]=\"rowDragState().dragging === entry.node.key ? '' : null\"\n [attr.data-disabled]=\"isDisabled(entry.node.key) ? '' : null\"\n [attr.data-editing]=\"edit()?.cell?.row === entry.node.key ? '' : null\"\n [attr.data-index]=\"entry.index\"\n >\n @if (hasSelectionColumn()) {\n <div\n data-part=\"selection\"\n role=\"gridcell\"\n aria-colindex=\"1\"\n [attr.data-column]=\"SELECTION\"\n [attr.tabindex]=\"isCurrent(entry.node.key, SELECTION) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(entry.node.key, SELECTION) ? '' : null\"\n [style.--slotted-data-grid-column]=\"1\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: SELECTION }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: SELECTION })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: SELECTION })\"\n >\n <span\n slCheckbox\n [checked]=\"isSelected(entry.node.key)\"\n [disabled]=\"isDisabled(entry.node.key) || undefined\"\n [tabIndex]=\"isCurrent(entry.node.key, SELECTION) ? 0 : -1\"\n (checkedChange)=\"\n toggleSelected(entry.node.key, {\n range: shiftHeld($event.source),\n source: $event.source,\n })\n \"\n >\n <span data-ui=\"visually-hidden\" data-part=\"root\">{{\n t('selectRow', { row: entry.node.key })\n }}</span>\n </span>\n </div>\n }\n @if (hasDragColumn()) {\n <div\n data-part=\"cell\"\n role=\"gridcell\"\n data-kind=\"drag\"\n [attr.aria-colindex]=\"dragIndex()\"\n [attr.data-column]=\"DRAG\"\n [attr.tabindex]=\"isCurrent(entry.node.key, DRAG) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(entry.node.key, DRAG) ? '' : null\"\n [style.--slotted-data-grid-column]=\"dragIndex()\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: DRAG }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: DRAG })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: DRAG })\"\n >\n <button\n data-part=\"row-handle\"\n type=\"button\"\n [attr.tabindex]=\"isCurrent(entry.node.key, DRAG) ? 0 : -1\"\n [attr.aria-disabled]=\"rowsReorderableNow() ? null : 'true'\"\n [attr.data-disabled]=\"rowsReorderableNow() ? null : ''\"\n [attr.aria-label]=\"rowHandleLabel(entry.node.key)\"\n >\n <span slIcon><svg slGlyph name=\"grip-vertical\"></svg></span>\n </button>\n </div>\n }\n @if (hasExpanderColumn()) {\n <div\n data-part=\"cell\"\n data-kind=\"expander\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"expanderIndex()\"\n [attr.data-column]=\"EXPANDER\"\n [attr.tabindex]=\"isCurrent(entry.node.key, EXPANDER) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(entry.node.key, EXPANDER) ? '' : null\"\n [style.--slotted-data-grid-column]=\"expanderIndex()\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: EXPANDER }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: EXPANDER })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: EXPANDER })\"\n >\n @if (isExpandable(entry.node.row)) {\n <button\n data-part=\"expander\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpanded(entry.node.key)\"\n [attr.aria-controls]=\"\n isExpanded(entry.node.key) ? detailId(entry.node.key) : null\n \"\n [attr.aria-label]=\"isExpanded(entry.node.key) ? t('collapse') : t('expand')\"\n (click)=\"toggleExpanded(entry.node.key, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n }\n </div>\n }\n @for (column of mountedColumns(); track column.id) {\n @let cell = cellState(entry.node, column);\n <div\n [attr.data-part]=\"column.column.rowHeader ? 'row-header' : 'cell'\"\n [attr.role]=\"column.column.rowHeader ? 'rowheader' : 'gridcell'\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.aria-readonly]=\"cell.readonly ? 'true' : null\"\n [attr.aria-selected]=\"\n resolvedSelectionMode() === 'range' && cell.inRange ? 'true' : null\n \"\n [attr.aria-invalid]=\"cell.invalid ? 'true' : null\"\n [attr.data-column]=\"column.id\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-text]=\"column.text\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.data-current]=\"cell.current ? '' : null\"\n [attr.data-in-range]=\"cell.inRange ? '' : null\"\n [attr.data-range-edge]=\"cell.edges.length > 0 ? cell.edges.join(' ') : null\"\n [attr.data-editing]=\"cell.editing ? '' : null\"\n [attr.data-invalid]=\"cell.invalid ? '' : null\"\n [attr.data-loading]=\"cell.pending ? '' : null\"\n [attr.data-readonly]=\"cell.readonly ? '' : null\"\n [attr.data-changed]=\"cell.changed\"\n [attr.tabindex]=\"cell.current ? 0 : -1\"\n [attr.title]=\"cell.invalid ? cell.message : null\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (click)=\"onBodyCellClick($event, { row: entry.node.key, column: column.id })\"\n (dblclick)=\"onCellDoubleClick($event, { row: entry.node.key, column: column.id })\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: column.id })\"\n (pointerenter)=\"\n onCellPointerEnter($event, { row: entry.node.key, column: column.id })\n \"\n [attr.data-tree]=\"cell.tree\"\n [style.--slotted-data-grid-level]=\"cell.tree ? entry.node.level : null\"\n >\n @if (cell.tree === 'branch') {\n <button\n data-part=\"tree-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"entry.node.open\"\n [attr.aria-label]=\"entry.node.open ? t('collapse') : t('expand')\"\n [attr.data-loading]=\"isLoadingChildren(entry.node.key) ? '' : null\"\n (click)=\"$event.stopPropagation(); toggleBranch(entry.node.key, $event)\"\n (pointerdown)=\"$event.stopPropagation()\"\n >\n <!-- A row waiting for its children turns the chevron into the\n loader's ring, which the stylesheet spins. -->\n <span slIcon\n ><svg\n slGlyph\n [name]=\"isLoadingChildren(entry.node.key) ? 'loader-circle' : 'chevron-right'\"\n ></svg\n ></span>\n </button>\n } @else if (cell.tree === 'leaf') {\n <span data-part=\"tree-toggle\" data-empty aria-hidden=\"true\"></span>\n }\n @if (cell.editing) {\n <div data-part=\"editor\">\n @if (editorTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"editorContext(entry.node, column, cell)\"\n />\n } @else {\n <sl-data-grid-editor\n [column]=\"$any(column.column)\"\n [draft]=\"edit()?.drafts?.[column.id]\"\n [value]=\"cell.value\"\n [invalid]=\"cell.invalid\"\n [message]=\"cell.message\"\n [t]=\"t\"\n [locale]=\"resolvedLocale()\"\n (draftChange)=\"setDraft(column.id, $event)\"\n />\n }\n </div>\n } @else if (cellTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"cellContext(entry.node, column, cell)\"\n />\n } @else {\n <span [attr.title]=\"cell.text\">{{ cell.text }}</span>\n }\n </div>\n }\n @if (hasPopin()) {\n <div\n data-part=\"popin\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"popinIndex()\"\n [attr.data-column]=\"POPIN\"\n [attr.data-current]=\"isCurrent(entry.node.key, POPIN) ? '' : null\"\n [attr.tabindex]=\"isCurrent(entry.node.key, POPIN) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"'1 / -1'\"\n (click)=\"onBodyCellClick($event, { row: entry.node.key, column: POPIN })\"\n (dblclick)=\"onCellDoubleClick($event, { row: entry.node.key, column: POPIN })\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: POPIN }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: POPIN })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: POPIN })\"\n >\n @for (column of popinColumns(); track column.id) {\n @let cell = cellState(entry.node, column);\n <div data-part=\"popin-field\" [attr.data-field]=\"column.id\">\n @if (column.column.label) {\n <span data-part=\"popin-label\">{{ column.column.label }}</span>\n }\n <!-- Read only: an edit happens in a visible cell, the detail or the record. -->\n <div data-part=\"popin-value\" [attr.data-text]=\"column.text\">\n @if (cellTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"cellContext(entry.node, column, cell)\"\n />\n } @else {\n <span [attr.title]=\"cell.text\">{{ cell.text }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (detailOpen(entry.node) && detailTemplate(); as template) {\n <div\n data-part=\"detail\"\n role=\"row\"\n [attr.data-row]=\"entry.node.key + ':detail'\"\n [attr.id]=\"detailId(entry.node.key)\"\n [attr.aria-rowindex]=\"entry.rowIndex + 1\"\n >\n <div\n role=\"gridcell\"\n aria-colindex=\"1\"\n tabindex=\"-1\"\n [attr.aria-colspan]=\"ariaColCount()\"\n [style.--slotted-data-grid-column]=\"'1 / -1'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"template.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: entry.node.row,\n row: entry.node.row,\n key: entry.node.key,\n }\"\n />\n </div>\n </div>\n }\n </ng-template>\n @if (pinned().top.length > 0) {\n <div data-part=\"pinned-rows\" data-edge=\"top\" role=\"rowgroup\">\n @for (entry of pinnedTopEntries(); track entry.node.key) {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n </div>\n }\n @if (status() === 'loading') {\n <div\n data-part=\"loader\"\n role=\"rowgroup\"\n aria-hidden=\"true\"\n [style.--slotted-data-grid-loader-row-size]=\"rowSize() + 'px'\"\n >\n @for (row of skeletonRowsList(); track row) {\n <div data-part=\"row\" role=\"row\">\n @for (columnId of columnIds(); track columnId; let index = $index) {\n <div role=\"gridcell\" [style.--slotted-data-grid-column]=\"index + 1\">\n <!-- The gutters reserve their width and draw nothing: what\n stands in them is a chooser, a handle and a toggle, and\n an outline of a control nobody can press yet is a\n control that lies. The lengths follow the value\n columns, so a gutter does not shift the sequence. -->\n @if (index >= gutterCount()) {\n <span slSkeleton [inlineSize]=\"skeletonWidth(index - gutterCount())\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div\n data-part=\"body\"\n role=\"rowgroup\"\n [style.--slotted-data-grid-window-total]=\"\n windowsRows() ? rowWindow().totalSize + 'px' : null\n \"\n [style.--slotted-data-grid-window-start]=\"\n windowsRows() ? rowWindow().startOffset + 'px' : null\n \"\n >\n @for (entry of mountedEntries(); track entry.node.key) {\n @if (entry.node.kind === 'group') {\n <div\n data-part=\"group-row\"\n role=\"row\"\n [attr.data-row]=\"GROUP_PREFIX + entry.node.key\"\n [attr.aria-rowindex]=\"entry.rowIndex\"\n [attr.aria-level]=\"entry.node.level\"\n [attr.aria-expanded]=\"entry.node.expanded\"\n [attr.data-current]=\"current()?.row === GROUP_PREFIX + entry.node.key ? '' : null\"\n [style.--slotted-data-grid-level]=\"entry.node.level\"\n >\n <div\n role=\"gridcell\"\n aria-colindex=\"1\"\n [attr.aria-colspan]=\"firstAggregateIndex() - 1\"\n [attr.data-column]=\"columnIds()[0]\"\n [attr.tabindex]=\"\n isCurrent(GROUP_PREFIX + entry.node.key, columnIds()[0]!) ? 0 : -1\n \"\n [attr.data-current]=\"\n isCurrent(GROUP_PREFIX + entry.node.key, columnIds()[0]!) ? '' : null\n \"\n [style.--slotted-data-grid-column]=\"'1 / ' + firstAggregateIndex()\"\n (click)=\"toggleGroup(entry.node.key, $event)\"\n (focus)=\"\n onCellFocus(\n { row: GROUP_PREFIX + entry.node.key, column: columnIds()[0]! },\n $event\n )\n \"\n (keydown)=\"\n onCellKeyDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: columnIds()[0]!,\n })\n \"\n (pointerdown)=\"\n onCellPointerDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: columnIds()[0]!,\n })\n \"\n >\n <button\n data-part=\"group-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"entry.node.expanded\"\n [attr.aria-label]=\"\n t(entry.node.expanded ? 'collapseGroup' : 'expandGroup', {\n group: entry.node.text,\n })\n \"\n (click)=\"$event.stopPropagation(); toggleGroup(entry.node.key, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n @if (groupTemplate(); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template.template\"\n [ngTemplateOutletContext]=\"groupContext(entry.node)\"\n />\n } @else {\n <span>{{ entry.node.text }}</span>\n <span data-count=\"\">{{ groupCount(entry.node) }}</span>\n }\n </div>\n @for (column of aggregated(); track column.id) {\n <div\n role=\"gridcell\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.data-column]=\"column.id\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.tabindex]=\"isCurrent(GROUP_PREFIX + entry.node.key, column.id) ? 0 : -1\"\n [attr.data-current]=\"\n isCurrent(GROUP_PREFIX + entry.node.key, column.id) ? '' : null\n \"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (focus)=\"\n onCellFocus({ row: GROUP_PREFIX + entry.node.key, column: column.id }, $event)\n \"\n (keydown)=\"\n onCellKeyDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: column.id,\n })\n \"\n (pointerdown)=\"\n onCellPointerDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: column.id,\n })\n \"\n >\n <span data-aggregate=\"\">{{\n aggregateText(column, entry.node.aggregates[column.id])\n }}</span>\n </div>\n }\n </div>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n }\n </div>\n }\n\n @if (status() !== 'rows' && status() !== 'loading') {\n <div data-part=\"empty\">\n @if (emptyTemplate(); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template.template\"\n [ngTemplateOutletContext]=\"{ $implicit: status(), status: status() }\"\n />\n } @else {\n <section slResultState reach=\"section\" tabindex=\"-1\" [status]=\"resultStatus()\">\n <div slResultStateContent>\n <div slResultStateTitle>{{ emptyTitle() }}</div>\n @if (status() === 'error' && error()) {\n <p slResultStateDescription>{{ error() }}</p>\n }\n </div>\n @if (status() === 'no-results') {\n <div slResultStateActions>\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"clearFilters($event)\"\n >\n {{ t('clearFilters') }}\n </button>\n </div>\n } @else if (status() === 'error') {\n <div slResultStateActions>\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"onRetry()\"\n >\n {{ t('retry') }}\n </button>\n </div>\n }\n </section>\n }\n </div>\n }\n @if (pinned().bottom.length > 0) {\n <div data-part=\"pinned-rows\" data-edge=\"bottom\" role=\"rowgroup\">\n @for (entry of pinnedBottomEntries(); track entry.node.key) {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n </div>\n }\n @if (hasSummary() && status() === 'rows') {\n <div data-part=\"summary\" role=\"rowgroup\">\n <div role=\"row\" [attr.data-row]=\"SUMMARY\" [attr.aria-rowindex]=\"summaryRowIndex()\">\n @for (columnId of gutterIds(); track columnId; let index = $index) {\n <div\n data-part=\"summary-cell\"\n role=\"gridcell\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"index + 1\"\n [attr.data-column]=\"columnId\"\n [style.--slotted-data-grid-column]=\"index + 1\"\n ></div>\n }\n @for (column of mountedColumns(); track column.id) {\n <div\n data-part=\"summary-cell\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.data-column]=\"column.id\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.tabindex]=\"isCurrent(SUMMARY, column.id) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(SUMMARY, column.id) ? '' : null\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (focus)=\"onCellFocus({ row: SUMMARY, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: SUMMARY, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: SUMMARY, column: column.id })\"\n >\n <span>{{ aggregateText(column, applied().aggregates[column.id]) }}</span>\n </div>\n }\n @if (hasPopinCell(SUMMARY)) {\n <div\n data-part=\"popin\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"popinIndex()\"\n [attr.data-column]=\"POPIN\"\n [attr.data-current]=\"isCurrent(SUMMARY, POPIN) ? '' : null\"\n [attr.tabindex]=\"isCurrent(SUMMARY, POPIN) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"'1 / -1'\"\n (focus)=\"onCellFocus({ row: SUMMARY, column: POPIN }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: SUMMARY, column: POPIN })\"\n (pointerdown)=\"onCellPointerDown($event, { row: SUMMARY, column: POPIN })\"\n >\n @for (column of popinAggregated(); track column.id) {\n <div data-part=\"popin-field\" [attr.data-field]=\"column.id\">\n @if (column.column.label) {\n <span data-part=\"popin-label\">{{ column.column.label }}</span>\n }\n <div data-part=\"popin-value\">\n <span>{{ aggregateText(column, applied().aggregates[column.id]) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (dragState().offset !== null) {\n <div\n data-part=\"drop-indicator\"\n aria-hidden=\"true\"\n [style.--slotted-data-grid-drop-offset]=\"dragState().offset + 'px'\"\n [style.--slotted-data-grid-drop-scroll]=\"dragState().scrollTop + 'px'\"\n ></div>\n }\n @if (rowDragState().offset !== null) {\n <div\n data-part=\"drop-indicator\"\n data-axis=\"row\"\n aria-hidden=\"true\"\n [style.--slotted-data-grid-drop-offset]=\"rowDragState().offset + 'px'\"\n [style.--slotted-data-grid-drop-scroll]=\"rowDragState().scrollLeft + 'px'\"\n ></div>\n }\n </div>\n @if (showsFooter()) {\n <div data-part=\"footer\">\n @if (rangeText(); as text) {\n <span data-range=\"\">{{ text }}</span>\n }\n <ng-content select=\"[slDataGridFooter]\" />\n @if (hasMore() && !hasFooterContent()) {\n <div>\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n [disabled]=\"loading()\"\n (click)=\"loadMore.emit()\"\n >\n {{ t('loadMore') }}\n </button>\n </div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlDataGrid), multi: true },\n ],\n host: {\n 'data-ui': 'data-grid',\n 'data-part': 'root',\n '[attr.role]': \"tree() ? 'treegrid' : 'grid'\",\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'labelledBy() ?? null',\n '[attr.aria-rowcount]': 'ariaRowCount()',\n '[attr.aria-colcount]': 'ariaColCount()',\n '[attr.aria-multiselectable]':\n \"resolvedSelectionMode() === 'multiple' || resolvedSelectionMode() === 'range' ? 'true' : null\",\n '[attr.aria-busy]': \"loading() && rows().length > 0 ? 'true' : null\",\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-striped]': \"resolvedStriped() ? '' : null\",\n '[attr.data-sticky-header]': \"resolvedStickyHeader() ? '' : null\",\n '[attr.data-sticky-to]': \"resolvedStickyTo() === 'page' ? 'page' : null\",\n '[attr.data-selection]': \"resolvedSelectionMode() === 'none' ? null : resolvedSelectionMode()\",\n '[attr.data-filter-row]': \"resolvedFilterRow() ? '' : null\",\n '[attr.data-rows]': \"autoRows() ? 'auto' : 'fixed'\",\n '[attr.data-slotted-density]': 'density() ?? null',\n '[attr.data-popin]': 'hasPopin() ? outOfSpace().popin.length : null',\n '[style.--slotted-data-grid-template]': 'template()',\n '[style.--slotted-data-grid-block-size]': 'blockSize()',\n '[style.--slotted-data-grid-row-block-size]': 'rowBlockSize()',\n '[style.--slotted-data-grid-leading]': \"hasPopin() ? leading() + 'px' : null\",\n '[style.--slotted-data-grid-changed-duration]': 'changedDuration()',\n '(keydown)': 'onRootKeyDown($event)',\n '(focusout)': 'onRootFocusOut($event)',\n },\n})\nexport class SlDataGrid<Row = unknown> implements ControlValueAccessor {\n protected readonly HEADER = HEADER_ROW;\n protected readonly FILTER = FILTER_ROW;\n protected readonly SUMMARY = SUMMARY_ROW;\n protected readonly GROUP_PREFIX = GROUP_ROW_PREFIX;\n protected readonly SELECTION = SELECTION_COLUMN;\n protected readonly EXPANDER = EXPANDER_COLUMN;\n protected readonly DRAG = DRAG_COLUMN;\n protected readonly POPIN = POPIN_COLUMN_ID;\n /** The room between the header and the menu it opens: one space step. */\n protected readonly MENU_OFFSET = 4;\n\n /* ── Data ───────────────────────────────────────────────────────────── */\n /** The rows, or nothing when a `dataSource` answers for them. */\n readonly rowsInput = input<readonly Row[] | undefined>(undefined, { alias: 'rows' });\n /**\n * The grid asks for its own rows: `getRows` is called with the query on\n * every change, the request before it aborted, and the answer is kept by\n * the query's text. The grid is in `server` mode, with the loading and the\n * error states of its own; `reload()` drops the cache.\n */\n readonly dataSource = input<DataGridDataSource<Row> | undefined>(undefined);\n readonly rowKey = input.required<keyof Row | ((row: Row) => string)>();\n readonly columns = input.required<readonly GridColumn<Row>[]>();\n readonly columnGroups = input<readonly GridColumnGroup[] | undefined>(undefined);\n readonly mode = input<DataGridMode | undefined>(undefined);\n readonly totalCountInput = input<number | undefined, number | string | undefined>(undefined, {\n alias: 'totalCount',\n transform: (value) => (value === undefined ? undefined : numberAttribute(value)),\n });\n readonly hasMoreInput = input<boolean | undefined, boolean | string | undefined>(undefined, {\n alias: 'hasMore',\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly loadingInput = input(false, { alias: 'loading', transform: booleanAttribute });\n readonly errorInput = input<string | null | undefined>(undefined, { alias: 'error' });\n /* With a source the grid asks for its rows itself; what the consumer gave\n for rows, total, loading and error is what the source answered. */\n private readonly sourced = signal<{\n result: DataGridDataSourceResult<Row> | null;\n loading: boolean;\n error: string | null;\n }>({ result: null, loading: false, error: null });\n protected readonly rows = computed<readonly Row[]>(() =>\n this.dataSource()\n ? (this.sourced().result?.rows ?? EMPTY_ROWS)\n : (this.rowsInput() ?? EMPTY_ROWS),\n );\n protected readonly totalCount = computed(() =>\n this.dataSource() ? this.sourced().result?.total : this.totalCountInput(),\n );\n protected readonly hasMore = computed(() =>\n this.dataSource() ? this.sourced().result?.hasMore : this.hasMoreInput(),\n );\n protected readonly loading = computed(() =>\n this.dataSource() ? this.sourced().loading : this.loadingInput(),\n );\n protected readonly error = computed(() =>\n this.dataSource() ? this.sourced().error : this.errorInput(),\n );\n readonly disabledKeys = input<readonly string[]>([]);\n /**\n * Marks a mounted cell whose value changed between two `rows`, for the\n * stated milliseconds (`true` is 1200). A row that arrived is not a change.\n */\n readonly highlightChanges = input<boolean | number | undefined>(undefined);\n\n /* ── Models ─────────────────────────────────────────────────────────── */\n readonly query = model<GridQuery>(emptyQuery());\n readonly columnState = model<Partial<GridColumnState> | undefined>(undefined);\n readonly value = model<DataGridSelection>(null);\n readonly range = model<GridRange | null>(null);\n readonly current = model<GridCell | null>(null);\n readonly expanded = model<readonly string[]>([]);\n readonly expandedGroups = model<DataGridExpandedGroups>('all');\n\n readonly queryChangeRequest = output<DataGridQueryRequest>();\n readonly columnStateChangeRequest = output<DataGridColumnStateRequest>();\n readonly valueChangeRequest = output<ChangeRequest<DataGridSelection>>();\n readonly rangeChangeRequest = output<ChangeRequest<GridRange | null>>();\n readonly currentChangeRequest = output<ChangeRequest<GridCell | null>>();\n readonly expandedChangeRequest = output<ChangeRequest<readonly string[]>>();\n readonly expandedGroupsChangeRequest = output<ChangeRequest<DataGridExpandedGroups>>();\n\n readonly editStart = output<GridCell>();\n readonly editCommit = output<DataGridEditCommit<Row>>();\n readonly editCancel = output<GridCell>();\n readonly activate = output<DataGridActivateEvent>();\n readonly loadMore = output<void>();\n /** A branch `hasChildren` says has children opened and none are in `rows`. */\n readonly loadChildren = output<{ key: string; row: Row }>();\n readonly rowsReorder = output<DataGridRowsReorderEvent>();\n readonly retry = output<void>();\n readonly manageColumns = output<void>();\n /** The columns a narrow frame has taken out by their `priority`, each time either set changes. */\n readonly outOfSpaceChange = output<GridOutOfSpace>();\n\n /* ── Axes ───────────────────────────────────────────────────────────── */\n readonly variant = input<DataGridVariant | undefined>(undefined);\n /**\n * The density of this grid alone, written as `data-slotted-density` on the\n * root; absent or `null`, the grid takes the page's. The layers it opens\n * are portals and stay at the page's density.\n */\n readonly density = input<GridDensity | null | undefined>(undefined);\n readonly striped = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly stickyHeader = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly stickyTo = input<DataGridStickyTo | undefined>(undefined);\n readonly selectionMode = input<DataGridSelectionMode | undefined>(undefined);\n readonly editMode = input<DataGridEditMode | undefined>(undefined);\n readonly filterRow = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly virtualize = input<DataGridVirtualize | undefined>(undefined);\n readonly rowHeight = input<DataGridRowHeight | undefined>(undefined);\n /**\n * What a frame too narrow for the template does. `popin` moves the columns\n * of least `priority` into a pop-in at the foot of each row, as labelled\n * values; `scroll` keeps every column and scrolls sideways; `auto`, the\n * default, pops in on a frame under 600px, or under 1024px when the main\n * pointer is coarse, and scrolls elsewhere.\n */\n readonly columnOverflow = input<DataGridColumnOverflow | undefined>(undefined);\n readonly overscan = input<number | undefined>(undefined);\n readonly filterDebounce = input<number | undefined>(undefined);\n readonly loadMoreThreshold = input<number | undefined>(undefined);\n readonly skeletonRows = input<number | undefined>(undefined);\n readonly activatable = input(false, { transform: booleanAttribute });\n /**\n * Whether the column menu offers Manage columns. The grid has no manager of\n * its own — `column-manager` edits `columnState` — so the item is drawn only\n * for an application that answers `manageColumns`, the way React draws it\n * only when `onManageColumns` is given.\n */\n readonly manageable = input(false, { transform: booleanAttribute });\n readonly expandable = input<boolean | ((row: Row) => boolean) | undefined>(undefined);\n /**\n * Rows as a tree: each row names its parent by key. The open branches are\n * `expanded`; `query.group` is ignored. The root is a `treegrid`.\n */\n readonly tree = input<GridTree<Row> | undefined>(undefined);\n /**\n * A handle per row, dragged with the pointer or moved with Alt and the\n * vertical arrows. The grid keeps no order of its own: `rowsReorder` says\n * where the row goes in `rows` and the consumer moves it. Only while the\n * query is at rest — no sort, filter, search or group — and without a\n * tree; elsewhere the handle is disabled.\n */\n readonly rowsReorderable = input(false, { transform: booleanAttribute });\n /**\n * Rows held at the top or the bottom of the body, by key, in the stated\n * order: out of the query — never sorted, filtered or paged — and always on\n * screen, under the head and over the summary.\n */\n readonly pinnedRows = input<DataGridPinnedRows | undefined>(undefined);\n readonly height = input<string | number | undefined>(undefined);\n /** The id of the element that names the grid; a static `aria-label` names it directly. */\n readonly labelledBy = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * grid's name (`grid`), every control, state and announcement.\n */\n readonly messages = input<PartialMessages<DataGridMessages> | undefined>(undefined);\n /** The locale cells, numbers and dates are written in. Default: the language in force. */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n readonly showRange = input<boolean | undefined>(undefined);\n\n /* ── Templates ──────────────────────────────────────────────────────── */\n private readonly cellTemplates = contentChildren(SlDataGridCellTemplate);\n private readonly editorTemplates = contentChildren(SlDataGridEditorTemplate);\n private readonly headerTemplates = contentChildren(SlDataGridHeaderTemplate);\n private readonly filterTemplates = contentChildren(SlDataGridFilterTemplate);\n private readonly helpTemplates = contentChildren(SlDataGridColumnHelp);\n protected readonly detailTemplate = contentChild(SlDataGridDetailTemplate);\n protected readonly groupTemplate = contentChild(SlDataGridGroupTemplate);\n protected readonly emptyTemplate = contentChild(SlDataGridEmptyTemplate);\n private readonly footerContent = contentChild(SlDataGridFooter);\n\n private readonly scrollRef = viewChild<ElementRef<HTMLDivElement>>('scroll');\n private readonly columnMenus = viewChildren(SlMenu);\n private readonly defaults = injectDataGridDefaults();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n readonly id = inject(SlDataGridIdFactory).next();\n\n /* ── Resolution ─────────────────────────────────────────────────────── */\n /** The family's words in the language in force, with this grid's `messages` laid over them. */\n readonly t = injectMessages(dataGridMessages, this.messages);\n /** What a drag of a column or a row says, in the language in force. */\n private readonly dragT = injectMessages(dragMessages);\n private readonly providedLocale = injectLocale();\n private readonly ownLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n protected readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n protected readonly resolvedStriped = computed(() => this.striped() ?? this.defaults.striped);\n protected readonly resolvedStickyHeader = computed(\n () => this.stickyHeader() ?? this.defaults.stickyHeader,\n );\n protected readonly resolvedStickyTo = computed(() => this.stickyTo() ?? this.defaults.stickyTo);\n protected readonly resolvedSelectionMode = computed(\n () => this.selectionMode() ?? this.defaults.selectionMode,\n );\n protected readonly resolvedEditMode = computed(() => this.editMode() ?? this.defaults.editMode);\n protected readonly resolvedFilterRow = computed(\n () => this.filterRow() ?? this.defaults.filterRow,\n );\n protected readonly resolvedVirtualize = computed(\n () => this.virtualize() ?? this.defaults.virtualize,\n );\n protected readonly resolvedRowHeight = computed(\n () => this.rowHeight() ?? this.defaults.rowHeight,\n );\n protected readonly resolvedColumnOverflow = computed(\n () => this.columnOverflow() ?? this.defaults.columnOverflow,\n );\n protected readonly resolvedOverscan = computed(() => this.overscan() ?? this.defaults.overscan);\n protected readonly resolvedDebounce = computed(\n () => this.filterDebounce() ?? this.defaults.filterDebounce,\n );\n protected readonly resolvedThreshold = computed(\n () => this.loadMoreThreshold() ?? this.defaults.loadMoreThreshold,\n );\n protected readonly resolvedSkeleton = computed(\n () => this.skeletonRows() ?? this.defaults.skeletonRows,\n );\n protected readonly resolvedLocale = computed(() => this.locale() ?? this.providedLocale());\n protected readonly resolvedMode = computed<DataGridMode>(\n () =>\n this.mode() ??\n (this.dataSource() || this.totalCount() !== undefined || this.hasMore() !== undefined\n ? 'server'\n : 'client'),\n );\n protected readonly ariaLabel = computed(\n () => this.ownLabel ?? (this.labelledBy() ? null : this.t('grid')),\n );\n protected readonly blockSize = computed(() => {\n const height = this.height();\n return height === undefined ? null : typeof height === 'number' ? `${height}px` : height;\n });\n /* A stated row height is the drawn row as well as the windowed one: the\n window's offsets are computed from it, and a row drawn at the density's\n height under a taller estimate drifted away from its own place. */\n protected readonly rowBlockSize = computed(() => {\n const height = this.resolvedRowHeight();\n return typeof height === 'number' ? `${height}px` : null;\n });\n /* A row with a pop-in is as tall as its fields, whatever the stated\n height: it is measured one by one, as an `auto` row is. */\n protected readonly autoRows = computed(\n () => this.resolvedRowHeight() === 'auto' || this.hasPopin(),\n );\n\n private readonly formatOptions = computed(() => ({\n locale: this.resolvedLocale(),\n timeZone: this.timeZone(),\n booleans: { true: this.t('filterYes'), false: this.t('filterNo') },\n }));\n\n rowKeyOf(row: Row): string {\n const key = this.rowKey();\n return typeof key === 'function' ? key(row) : String((row as Record<keyof Row, unknown>)[key]);\n }\n textOf(column: GridColumn<Row>, row: Row): string {\n return cellText(column, row, this.formatOptions());\n }\n private readonly disabledSet = computed(() => new Set(this.disabledKeys()));\n isDisabled(key: string) {\n return this.disabledSet().has(key);\n }\n isEditable(column: GridColumn<Row>, row: Row) {\n if (this.disabledSet().has(this.rowKeyOf(row))) return false;\n const editable = column.editable;\n return typeof editable === 'function' ? editable(row) : editable === true;\n }\n private readonly anyEditable = computed(() => this.columns().some((column) => column.editable));\n isExpandable(row: Row) {\n if (!this.detailTemplate()) return false;\n const expandable = this.expandable();\n if (expandable === undefined) return true;\n return typeof expandable === 'function' ? expandable(row) : expandable;\n }\n\n /* ── Columns ────────────────────────────────────────────────────────── */\n private readonly effectiveState = computed(() =>\n normalizeColumnState(this.columnState(), this.columns()),\n );\n /** The gutters' width, before the first data column; where a pop-in's fields start. */\n protected readonly leading = computed(() =>\n this.gutters().reduce((sum, width) => sum + width, 0),\n );\n /** Every column the reader has not hidden, before the frame's width is asked. */\n private readonly layout = computed(() =>\n resolveColumns(this.columns(), this.effectiveState(), { leading: this.leading() }),\n );\n /** The scroller's inner width; 0 until it is measured, and nothing is taken out before. */\n private readonly frameWidth = signal(0);\n /** Whether the main pointer is coarse — a finger. A render without `matchMedia` reads a fine one. */\n private readonly coarsePointer = signal(false);\n /** The policy the frame's width and the pointer settle `auto` to. */\n private readonly effectiveColumnOverflow = computed(() =>\n resolveColumnOverflow(this.resolvedColumnOverflow(), this.frameWidth(), this.coarsePointer()),\n );\n /**\n * The columns a frame too narrow for the template has taken out, by their\n * `priority`: those drawn in each row's pop-in, and those that declined it\n * with `popin: false`. Read from the frame's width, which neither set\n * changes, so the measure never loops. Never in `columnState`. Empty while\n * `columnOverflow` settles to `scroll`.\n *\n * The width is read first: an unmeasured frame takes nothing out and reads\n * no input, so a template that reads the set before the grid's inputs are\n * bound — a column manager written before the grid — gets an empty set.\n */\n readonly outOfSpace: Signal<GridOutOfSpace> = computed(\n () => {\n const available = this.frameWidth();\n if (available <= 0 || this.effectiveColumnOverflow() === 'scroll') return NONE_OUT;\n return columnsOutOfSpace(this.layout(), available, { leading: this.leading() });\n },\n { equal: (a, b) => sameKeys(a.popin, b.popin) && sameKeys(a.hidden, b.hidden) },\n );\n protected readonly resolved = computed(() => {\n const out = this.outOfSpace();\n if (out.popin.length === 0 && out.hidden.length === 0) return this.layout();\n const state = this.effectiveState();\n return resolveColumns(\n this.columns(),\n { ...state, hidden: [...state.hidden, ...out.popin, ...out.hidden] },\n { leading: this.leading() },\n );\n });\n /** The columns drawn in each row's pop-in, in the order of the resolved columns. */\n protected readonly popinColumns = computed(() => {\n const popin = this.outOfSpace().popin;\n return popin.length === 0 ? [] : this.layout().filter((column) => popin.includes(column.id));\n });\n protected readonly hasPopin = computed(() => this.outOfSpace().popin.length > 0);\n private readonly resolvedById = computed(\n () => new Map(this.resolved().map((column) => [column.id, column])),\n );\n protected readonly hasSelectionColumn = computed(\n () => this.resolvedSelectionMode() === 'single' || this.resolvedSelectionMode() === 'multiple',\n );\n protected readonly hasExpanderColumn = computed(() => this.detailTemplate() !== undefined);\n protected readonly rowSelectable = this.hasSelectionColumn;\n protected readonly hasDragColumn = computed(() => this.rowsReorderable());\n private readonly gutters = computed(() => [\n ...(this.hasSelectionColumn() ? [SELECTION_WIDTH] : []),\n ...(this.hasDragColumn() ? [DRAG_WIDTH] : []),\n ...(this.hasExpanderColumn() ? [EXPANDER_WIDTH] : []),\n ]);\n protected readonly gutterIds = computed(() => [\n ...(this.hasSelectionColumn() ? [SELECTION_COLUMN] : []),\n ...(this.hasDragColumn() ? [DRAG_COLUMN] : []),\n ...(this.hasExpanderColumn() ? [EXPANDER_COLUMN] : []),\n ]);\n protected readonly columnIds = computed(() => [\n ...this.gutterIds(),\n ...this.resolved().map((column) => column.id),\n ]);\n protected readonly gutterCount = computed(() => this.gutterIds().length);\n /** The pop-in is one more column for a reader, after every visible one, with no track. */\n protected readonly ariaColCount = computed(\n () => this.columnIds().length + (this.hasPopin() ? 1 : 0),\n );\n protected readonly popinIndex = computed(() => this.columnIds().length + 1);\n /** The columns the cursor walks: the visible ones, then the pop-in's. */\n private readonly cursorColumns = computed(() =>\n this.hasPopin() ? [...this.columnIds(), POPIN_COLUMN_ID] : this.columnIds(),\n );\n protected readonly expanderIndex = computed(() => this.columnIds().indexOf(EXPANDER_COLUMN) + 1);\n protected readonly dragIndex = computed(() => this.columnIds().indexOf(DRAG_COLUMN) + 1);\n protected readonly template = computed(() => columnTemplate(this.resolved(), this.gutters()));\n protected readonly hasGroups = computed(() => (this.columnGroups()?.length ?? 0) > 0);\n protected readonly headerRowCount = computed(\n () => 1 + (this.hasGroups() ? 1 : 0) + (this.resolvedFilterRow() ? 1 : 0),\n );\n protected indexOf(columnId: string) {\n return this.columnIds().indexOf(columnId) + 1;\n }\n protected filterKind(column: ResolvedGridColumn<Row>): FilterKind | null {\n return filterKindOf(column.kind);\n }\n\n /* ── The applied query ──────────────────────────────────────────────── */\n /* Held rows leave the query: what is sorted, filtered and paged is the\n rest. Each becomes a node of its own, outside the body's count. */\n protected readonly pinned = computed(() => {\n const held = this.pinnedRows();\n const top = held?.top ?? [];\n const bottom = held?.bottom ?? [];\n if (top.length === 0 && bottom.length === 0) {\n return {\n top: [] as RowNode[],\n bottom: [] as RowNode[],\n keys: null as ReadonlySet<string> | null,\n };\n }\n const byKey = new Map<string, Row>();\n for (const row of this.rows()) byKey.set(this.rowKeyOf(row), row);\n const nodesOf = (keys: readonly string[]) =>\n keys.flatMap((key): RowNode[] => {\n const row = byKey.get(key);\n return row === undefined\n ? []\n : [\n {\n kind: 'row',\n key,\n row,\n index: -1,\n groups: [],\n level: 1,\n parent: null,\n childCount: 0,\n open: false,\n },\n ];\n });\n return { top: nodesOf(top), bottom: nodesOf(bottom), keys: new Set([...top, ...bottom]) };\n });\n private readonly bodyRows = computed(() => {\n const keys = this.pinned().keys;\n return keys ? this.rows().filter((row) => !keys.has(this.rowKeyOf(row))) : this.rows();\n });\n protected readonly pinnedTopEntries = computed(() => {\n const first = this.headerRowCount() + 1;\n return this.pinned().top.map((node, offset) => ({ node, index: -1, rowIndex: first + offset }));\n });\n protected readonly pinnedBottomEntries = computed(() => {\n const first =\n this.headerRowCount() + this.pinned().top.length + (this.total() ?? this.nodes().length) + 1;\n return this.pinned().bottom.map((node, offset) => ({\n node,\n index: -1,\n rowIndex: first + offset,\n }));\n });\n protected readonly applied = computed(() => {\n const rows = this.bodyRows();\n const query = this.query();\n if (this.resolvedMode() === 'server') {\n const offset = query.page && 'index' in query.page ? query.page.index * query.page.size : 0;\n const nodes: GridNode<Row>[] = rows.map((row, index) => ({\n kind: 'row',\n key: this.rowKeyOf(row),\n row,\n index: offset + index,\n groups: [],\n level: 1,\n parent: null,\n childCount: 0,\n open: false,\n }));\n return {\n nodes,\n rows,\n total: this.totalCount() ?? null,\n hasMore: this.hasMore() ?? false,\n aggregates: {} as Record<string, unknown>,\n };\n }\n const applied = applyQuery(rows, this.columns(), query, {\n rowKey: (row) => this.rowKeyOf(row),\n expandedGroups: this.expandedGroups(),\n tree: this.tree(),\n expanded: this.tree() ? this.expanded() : undefined,\n ...this.formatOptions(),\n });\n return { ...applied, total: applied.total as number | null };\n });\n protected readonly nodes = computed(() => this.applied().nodes);\n protected readonly total = computed(() => this.applied().total);\n protected readonly aggregated = computed(() =>\n this.resolved().filter((column) => column.column.aggregate !== undefined),\n );\n /** The aggregating columns in the pop-in: the summary row draws their totals in its own. */\n protected readonly popinAggregated = computed(() =>\n this.popinColumns().filter((column) => column.column.aggregate !== undefined),\n );\n protected readonly hasSummary = computed(\n () =>\n this.aggregated().length + this.popinAggregated().length > 0 &&\n this.resolvedMode() === 'client',\n );\n protected readonly firstAggregateIndex = computed(() => {\n const aggregated = this.aggregated();\n return aggregated.length === 0\n ? this.columnIds().length + 1\n : Math.min(...aggregated.map((column) => this.indexOf(column.id)));\n });\n protected readonly status = computed<'rows' | 'empty' | 'no-results' | 'error' | 'loading'>(\n () => {\n if (this.error()) return 'error';\n if (this.loading() && this.rows().length === 0) return 'loading';\n if (this.nodes().length > 0) return 'rows';\n const query = this.query();\n return query.filter || query.search.trim() ? 'no-results' : 'empty';\n },\n );\n protected readonly resultStatus = computed<'empty' | 'no-results' | 'error'>(() => {\n const status = this.status();\n return status === 'error' || status === 'no-results' ? status : 'empty';\n });\n protected readonly emptyTitle = computed(() => {\n const status = this.status();\n return this.t(status === 'error' ? 'error' : status === 'no-results' ? 'noResults' : 'empty');\n });\n protected readonly ariaRowCount = computed(\n () =>\n (this.total() === null ? -1 : (this.total() as number)) +\n this.pinned().top.length +\n this.pinned().bottom.length +\n this.headerRowCount() +\n (this.hasSummary() ? 1 : 0),\n );\n protected readonly summaryRowIndex = computed(\n () =>\n this.headerRowCount() +\n this.pinned().top.length +\n (this.total() ?? this.nodes().length) +\n this.pinned().bottom.length +\n 1,\n );\n /* A first load draws as many skeleton rows as the frame shows, capped at\n the page the query asks for: eight rows in a frame of twenty-five left\n the rest of the frame empty and the page that arrived was a different\n picture. An unmeasured frame draws the stated count. */\n protected readonly skeletonRowsList = computed(() => {\n const page = this.query().page?.size;\n const height = this.viewport().height;\n const count =\n height === 0\n ? this.resolvedSkeleton()\n : Math.max(1, Math.min(page ?? Infinity, Math.ceil(height / this.rowSize())));\n return Array.from({ length: count }, (_unused, index) => index);\n });\n protected skeletonWidth(index: number) {\n return `${[70, 55, 80, 40, 60][index % 5]}%`;\n }\n\n /* ── Cursor axis ────────────────────────────────────────────────────── */\n private readonly cursorRows = computed(() => {\n const list = [HEADER_ROW];\n if (this.resolvedFilterRow()) list.push(FILTER_ROW);\n for (const node of this.pinned().top) list.push(node.key);\n for (const node of this.nodes())\n list.push(node.kind === 'group' ? `${GROUP_ROW_PREFIX}${node.key}` : node.key);\n for (const node of this.pinned().bottom) list.push(node.key);\n if (this.hasSummary()) list.push(SUMMARY_ROW);\n return list;\n });\n private readonly bodyStart = computed(() => 1 + (this.resolvedFilterRow() ? 1 : 0));\n private readonly bodyEnd = computed(\n () =>\n this.bodyStart() +\n this.pinned().top.length +\n this.nodes().length +\n this.pinned().bottom.length,\n );\n\n /* ── Virtual rows ───────────────────────────────────────────────────── */\n private readonly scrollTop = signal(0);\n private readonly scrollLeft = signal(0);\n private readonly viewport = signal({ width: 0, height: 0 });\n private readonly measuredRow = signal<number | null>(null);\n private readonly rowSizes = signal<ReadonlyMap<number, number>>(new Map());\n /** The body row's height: stated, or measured from the rows drawn, or the default. */\n protected readonly rowSize = computed(() => {\n const stated = this.resolvedRowHeight();\n return typeof stated === 'number' ? stated : (this.measuredRow() ?? DEFAULT_ROW_HEIGHT);\n });\n protected readonly windowsRows = computed(() => {\n const mode = this.resolvedVirtualize();\n return mode === true || (mode === 'auto' && this.nodes().length > VIRTUALIZE_ROWS_FROM);\n });\n private readonly metrics = computed(() => {\n if (!this.autoRows()) return undefined;\n const sizes = this.rowSizes();\n const size = this.rowSize();\n return createRowMetrics(this.nodes().map((_node, index) => sizes.get(index) ?? size));\n });\n protected readonly rowWindow = computed(() => {\n const count = this.nodes().length;\n if (!this.windowsRows())\n return { startIndex: 0, endIndex: count, startOffset: 0, totalSize: 0 };\n /* Before the scroller is measured the window is provisional — a screen's\n worth of rows — rather than the whole set. */\n const win = virtualWindow({\n itemCount: count,\n itemSize: this.rowSize(),\n metrics: this.metrics(),\n overscan: this.resolvedOverscan(),\n scrollOffset: Math.max(0, this.scrollTop()),\n viewportSize: this.viewport().height || PROVISIONAL_VIEWPORT,\n });\n return {\n startIndex: win.startIndex,\n endIndex: win.endIndex,\n startOffset: win.startOffset,\n totalSize: win.totalSize,\n };\n });\n private readonly heldRows = signal<readonly string[]>([]);\n protected readonly mountedEntries = computed(() => {\n const nodes = this.nodes();\n const window_ = this.rowWindow();\n const mounted = this.windowsRows() ? nodes.slice(window_.startIndex, window_.endIndex) : nodes;\n const extra = this.heldRows()\n .map((key) => nodes.find((node) => node.key === key))\n .filter((node): node is GridNode<Row> => node !== undefined && !mounted.includes(node));\n const headerRows = this.headerRowCount() + this.pinned().top.length;\n const first = this.windowsRows() ? window_.startIndex : 0;\n return [...mounted, ...extra].map((node, offset) => {\n const index = first + offset;\n return { node, index, rowIndex: headerRows + 1 + (node.kind === 'row' ? node.index : index) };\n });\n });\n\n /* ── Virtual columns ────────────────────────────────────────────────── */\n private readonly middle = computed(() =>\n this.resolved().filter((column) => column.pinned === null),\n );\n private readonly windowsColumns = computed(() => {\n const mode = this.resolvedVirtualize();\n return mode === true || (mode === 'auto' && this.middle().length > VIRTUALIZE_COLUMNS_FROM);\n });\n protected readonly mountedColumns = computed(() => {\n const resolved = this.resolved();\n if (!this.windowsColumns() || this.viewport().width === 0) return resolved;\n const gutterWidth = this.gutters().reduce((sum, width) => sum + width, 0);\n const startZone = resolved\n .filter((column) => column.pinned === 'start')\n .reduce((sum, column) => sum + column.width, 0);\n const endZone = resolved\n .filter((column) => column.pinned === 'end')\n .reduce((sum, column) => sum + column.width, 0);\n const from = this.scrollLeft() - COLUMN_OVERSCAN_PX;\n const to = this.scrollLeft() + this.viewport().width - endZone + COLUMN_OVERSCAN_PX;\n let offset = gutterWidth + startZone;\n const kept = new Set<string>();\n for (const column of this.middle()) {\n const end = offset + column.width;\n if (end >= from && offset <= to) kept.add(column.id);\n offset = end;\n }\n const current = this.current();\n return resolved.filter(\n (column) => column.pinned !== null || kept.has(column.id) || current?.column === column.id,\n );\n });\n\n /* ── Selection ──────────────────────────────────────────────────────── */\n private readonly selectableKeys = computed(() => {\n const source = this.resolvedMode() === 'client' ? this.applied().rows : this.bodyRows();\n const pinned = this.pinned();\n return [\n ...pinned.top.map((node) => node.key),\n ...source.map((row) => this.rowKeyOf(row)),\n ...pinned.bottom.map((node) => node.key),\n ].filter((key) => !this.disabledSet().has(key));\n });\n private readonly selectedList = computed<readonly string[]>(() => {\n const value = this.value();\n return Array.isArray(value)\n ? value\n : value === null || value === undefined\n ? []\n : [value as string];\n });\n private readonly selectedSet = computed(() => new Set(this.selectedList()));\n private anchor: string | undefined;\n isSelected(key: string) {\n return this.selectedSet().has(key);\n }\n private readonly selectableSet = computed(() => new Set(this.selectableKeys()));\n /* A set on both sides: `includes` over ten thousand keys for each of ten\n thousand chosen ones was a hundred million steps on select-all. */\n protected readonly selectedCount = computed(\n () => this.selectedList().filter((key) => this.selectableSet().has(key)).length,\n );\n protected readonly allState = computed<'none' | 'some' | 'all'>(() => {\n const count = this.selectedCount();\n return count === 0 ? 'none' : count >= this.selectableKeys().length ? 'all' : 'some';\n });\n protected readonly selectAllName = computed(() => {\n const total = this.total();\n const count = this.selectableKeys().length;\n return this.t(total !== null && total > count ? 'selectAllPage' : 'selectAllFiltered', {\n count,\n });\n });\n\n private touched: (() => void) | undefined;\n private notify: ((value: DataGridSelection) => void) | undefined;\n private readonly formDisabled = signal(false);\n\n private requestValue(next: DataGridSelection, reason: DataGridReason, source?: unknown) {\n const state = createControllable<DataGridSelection>({\n initial: this.value(),\n equals: sameSelection,\n onRequest: (request) => this.valueChangeRequest.emit(request),\n });\n if (!state.request(next, reason, source)) return;\n this.value.set(next);\n this.notify?.(next);\n this.touched?.();\n }\n private commitSelection(selected: readonly string[], reason: DataGridReason, source?: unknown) {\n const next = this.resolvedSelectionMode() === 'multiple' ? selected : (selected[0] ?? null);\n this.requestValue(next, reason, source);\n }\n toggleSelected(\n key: string,\n options: { range?: boolean; source?: unknown; reason?: DataGridReason },\n ) {\n const mode = this.resolvedSelectionMode();\n if (mode === 'none' || mode === 'range' || this.disabledSet().has(key) || this.formDisabled())\n return;\n const outcome = nextSelection({\n action: options.range ? 'range' : 'toggle',\n mode,\n selected: this.selectedList(),\n keys: this.selectableKeys(),\n key,\n anchor: this.anchor,\n disabled: (candidate) => this.disabledSet().has(candidate),\n });\n if (!options.range) this.anchor = key;\n if (outcome.changed)\n this.commitSelection(outcome.selected, options.reason ?? 'pointer', options.source);\n }\n protected shiftHeld(source: unknown) {\n return source instanceof MouseEvent && source.shiftKey;\n }\n toggleAll(source?: unknown) {\n if (this.resolvedSelectionMode() !== 'multiple') return;\n const outcome = nextSelection({\n action: 'all',\n mode: 'multiple',\n selected: this.selectedList(),\n keys: this.selectableKeys(),\n });\n if (outcome.changed) this.commitSelection(outcome.selected, 'select', source);\n }\n selectAll() {\n this.commitSelection(this.selectableKeys(), 'programmatic');\n }\n clearSelection() {\n this.commitSelection([], 'programmatic');\n }\n\n /* ── Cursor grid and range ──────────────────────────────────────────── */\n private readonly cursorGrid = computed<CursorGrid>(() => ({\n rows: this.cursorRows(),\n columns: this.cursorColumns(),\n pageSize: Math.max(1, Math.floor((this.viewport().height || 400) / this.rowSize()) - 1),\n bodyStart: this.bodyStart(),\n bodyEnd: this.bodyEnd(),\n }));\n private readonly bounds = computed(() =>\n this.resolvedSelectionMode() === 'range' ? rangeBounds(this.cursorGrid(), this.range()) : null,\n );\n private readonly rangeDragging = signal(false);\n private rangeAnchor: GridCell | null = null;\n\n private requestRange(next: GridRange | null, reason: ChangeReason, source?: unknown) {\n const state = createControllable<GridRange | null>({\n initial: this.range(),\n equals: sameRange,\n onRequest: (request) => this.rangeChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.range.set(next);\n }\n private beginRange(cell: GridCell, extend: boolean, source: unknown) {\n if (this.resolvedSelectionMode() !== 'range' || !isBodyRow(cell.row)) return;\n const from = extend && this.range() ? this.range()!.anchor : cell;\n this.rangeAnchor = from;\n this.requestRange({ anchor: from, focus: cell }, 'pointer', source);\n }\n private extendRange(cell: GridCell, source: unknown) {\n if (this.resolvedSelectionMode() !== 'range' || !isBodyRow(cell.row)) return;\n const from = this.rangeAnchor ?? this.range()?.anchor ?? cell;\n this.requestRange({ anchor: from, focus: cell }, 'pointer', source);\n }\n\n /* ── Cursor ─────────────────────────────────────────────────────────── */\n private readonly focused = signal(false);\n private pendingFocus: GridCell | null = null;\n private lastRowIndex = 0;\n\n isCurrent(row: string, column: string) {\n const current = this.current();\n return current !== null && current.row === row && current.column === column;\n }\n /* One tab stop always, as the pattern requires of a grid: the current cell\n while there is one, and the header's first cell until the reader has been\n anywhere — without it a grid nobody had entered had no way in from the\n keyboard and no focusable content for its scroller. */\n protected isTabStop(row: string, column: string) {\n if (this.current() !== null) return this.isCurrent(row, column);\n return row === HEADER_ROW && column === this.columnIds()[0];\n }\n /**\n * Whether a row draws a pop-in: a record's row, held or not, and the\n * summary while a column in the pop-in has a total to show there.\n */\n protected hasPopinCell(row: string) {\n if (!this.hasPopin()) return false;\n if (row === SUMMARY_ROW) return this.popinAggregated().length > 0;\n return isBodyRow(row);\n }\n /** The pop-in's column on a row that draws none is that row's last visible column. */\n private landOn(cell: GridCell): GridCell {\n if (cell.column !== POPIN_COLUMN_ID || this.hasPopinCell(cell.row)) return cell;\n const columns = this.columnIds();\n return { row: cell.row, column: columns[columns.length - 1]! };\n }\n private requestCurrent(next: GridCell | null, reason: ChangeReason, source?: unknown) {\n const state = createControllable<GridCell | null>({\n initial: this.current(),\n equals: sameCell,\n onRequest: (request) => this.currentChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.current.set(next);\n }\n private focusCellNow(cell: GridCell): boolean {\n const element = this.host.nativeElement.querySelector<HTMLElement>(\n `[data-row=\"${CSS.escape(cell.row)}\"] [data-column=\"${CSS.escape(cell.column)}\"]`,\n );\n if (!element) return false;\n const structural =\n element.matches('[data-part=\"column-header\"], [data-part=\"filter-cell\"]') ||\n element.querySelector('[data-part=\"group-toggle\"]') !== null;\n /* A cell in edit hands the focus to its editor's field — the input, the\n select's trigger, the picker's first segment — never to a stepper or a\n calendar button beside it, and never to the cell: Enter on a numeric\n cell opened the editor and left the focus on the cell because the field\n and its two steppers were three widgets, not one. */\n const editor = element.querySelector<HTMLElement>('[data-part=\"editor\"]');\n if (editor) {\n const field =\n editor.querySelector<HTMLElement>(EDITOR_FIELD) ??\n editor.querySelector<HTMLElement>(FOCUSABLE);\n (field ?? element).focus();\n return true;\n }\n const widgets = structural ? [] : [...element.querySelectorAll<HTMLElement>(FOCUSABLE)];\n const single = widgets.length === 1 && widgets[0]!.matches(SIMPLE_WIDGET) ? widgets[0]! : null;\n (single ?? element).focus();\n return true;\n }\n setCurrent(cell: GridCell, reason: DataGridReason, source?: unknown) {\n if (!sameCell(cell, this.current())) this.requestCurrent(cell, reason, source);\n this.pendingFocus = cell;\n const index = this.cursorRows().indexOf(cell.row) - this.bodyStart();\n const window_ = this.rowWindow();\n if (\n this.windowsRows() &&\n index >= 0 &&\n (index < window_.startIndex || index >= window_.endIndex)\n ) {\n this.heldRows.set([cell.row]);\n const metrics = this.metrics();\n const offset = metrics ? metrics.offsetOf(index) : index * this.rowSize();\n this.scrollRef()?.nativeElement.scrollTo({\n top: offset - this.viewport().height / 2 + this.rowSize(),\n });\n }\n this.flushFocus();\n }\n private flushFocus() {\n afterNextRender(\n () => {\n const cell = this.pendingFocus;\n if (cell && this.focusCellNow(cell)) this.pendingFocus = null;\n },\n { injector: this.injector },\n );\n }\n focusCell(cell: GridCell) {\n this.setCurrent(cell, 'programmatic');\n }\n\n /* ── Sorting and filtering ──────────────────────────────────────────── */\n protected readonly filterOpen = signal<string | null>(null);\n protected readonly resizing = signal<string | null>(null);\n\n sortOf(columnId: string) {\n const index = this.query().sort.findIndex((key) => key.column === columnId);\n if (index === -1) return null;\n return { direction: this.query().sort[index]!.direction, index: index + 1 };\n }\n protected ariaSort(columnId: string) {\n const sort = this.sortOf(columnId);\n return sort && sort.index === 1 ? sort.direction : null;\n }\n protected isSortedAlone(columnId: string, direction: SortDirection) {\n const sort = this.sortOf(columnId);\n return sort?.direction === direction && sort.index === 1 && this.query().sort.length === 1;\n }\n filterOf(columnId: string): FilterDescriptor | null {\n return ruleFor(this.query().filter, columnId) ?? null;\n }\n private requestQuery(next: GridQuery, change: string, reason: ChangeReason, source?: unknown) {\n const state = createControllable<GridQuery>({\n initial: this.query(),\n equals: (a, b) => JSON.stringify(a) === JSON.stringify(b),\n onRequest: (request) =>\n this.queryChangeRequest.emit(Object.assign(request, { change }) as DataGridQueryRequest),\n });\n if (state.request(next, reason, source)) this.query.set(next);\n }\n private labelOf(columnId: string) {\n return this.resolvedById().get(columnId)?.column.label ?? columnId;\n }\n private announceSort(next: GridQuery) {\n if (next.sort.length === 0) {\n this.announce(this.t('sortCleared'));\n return;\n }\n const order = next.sort\n .map((key) =>\n this.t(key.direction === 'ascending' ? 'sortAscending' : 'sortDescending', {\n column: this.labelOf(key.column),\n }),\n )\n .join(', ');\n this.announce(this.t('sortedBy', { order }));\n }\n pressSort(\n columnId: string,\n append: boolean,\n source?: unknown,\n reason: DataGridReason = 'pointer',\n ) {\n const column = this.resolvedById().get(columnId);\n if (!column || !column.sortable) return;\n const move = withSortPress(this.query(), columnId, append);\n this.requestQuery(move.query, move.change, reason, source);\n this.announceSort(move.query);\n }\n setSort(columnId: string, direction: SortDirection | null, source?: unknown) {\n const move = withSort(this.query(), columnId, direction);\n this.requestQuery(move.query, move.change, 'pointer', source);\n this.announceSort(move.query);\n }\n setFilter(\n columnId: string,\n filter: FilterDescriptor | null,\n reason: DataGridReason,\n source?: unknown,\n ) {\n const move = withColumnFilter(this.query(), columnId, filter);\n this.requestQuery(move.query, move.change, reason, source);\n }\n protected applyPanel(\n columnId: string,\n event: {\n filter: FilterDescriptor | null;\n reason: 'pointer' | 'keyboard' | 'clear';\n said: string;\n },\n ) {\n this.setFilter(columnId, event.filter, event.reason);\n this.announce(event.said);\n this.filterOpen.set(null);\n }\n protected onFilterOpenChange(columnId: string, open: boolean) {\n if (!open && this.filterOpen() === columnId) {\n this.filterOpen.set(null);\n this.pendingFocus = { row: HEADER_ROW, column: columnId };\n this.flushFocus();\n }\n }\n protected toggleFilterPanel(columnId: string) {\n this.filterOpen.set(this.filterOpen() === columnId ? null : columnId);\n }\n protected clearFilters(source?: unknown) {\n const move = withoutFilters(this.query());\n this.requestQuery(move.query, move.change, 'clear', source);\n }\n private countsCache = new Map<string, ReadonlyMap<string, number>>();\n countsFor(columnId: string): ReadonlyMap<string, number> {\n const query = this.query();\n const rows = this.rows();\n const key = `${columnId}|${JSON.stringify(query.filter)}|${rows.length}`;\n const cached = this.countsCache.get(key);\n if (cached) return cached;\n const columns = this.columns();\n const column = columns.find((entry) => entry.id === columnId);\n const counts = new Map<string, number>();\n if (column) {\n const rest = withoutRuleFor(query.filter, columnId);\n const read = (row: Row, field: string) => {\n const target = columns.find((entry) => entry.id === field);\n return target ? cellValue(target, row) : undefined;\n };\n const match = createFilterGroupPredicate<Row>(rest.rules.length ? rest : null, read, {\n locale: this.resolvedLocale(),\n });\n for (const row of rows) {\n if (!match(row)) continue;\n const raw = cellValue(column, row);\n for (const entry of Array.isArray(raw) ? raw : [raw]) {\n if (entry === null || entry === undefined || entry === '') continue;\n const text = String(entry);\n counts.set(text, (counts.get(text) ?? 0) + 1);\n }\n }\n }\n this.countsCache = new Map([[key, counts]]);\n return counts;\n }\n\n /* ── Column moves ───────────────────────────────────────────────────── */\n private requestState(\n next: GridColumnState,\n change: string,\n reason: DataGridReason,\n source?: unknown,\n ) {\n const state = createControllable<GridColumnState>({\n initial: this.effectiveState(),\n equals: (a, b) => JSON.stringify(a) === JSON.stringify(b),\n onRequest: (request) =>\n this.columnStateChangeRequest.emit(\n Object.assign(request, { change }) as DataGridColumnStateRequest,\n ),\n });\n if (state.request(next, reason, source)) this.columnState.set(next);\n }\n pin(columnId: string, zone: 'start' | 'end' | null, source?: unknown) {\n this.requestState(\n withColumnPinned(this.effectiveState(), columnId, zone),\n 'pinned',\n 'pointer',\n source,\n );\n }\n /** Hides a column and announces it; the undo is the application's, from the request's `previous`. */\n hide(columnId: string, source?: unknown, reason: DataGridReason = 'programmatic') {\n const state = this.effectiveState();\n const column = this.columns().find((entry) => entry.id === columnId);\n if (!column || state.hidden.includes(columnId)) return;\n this.requestState(withColumnHidden(state, columnId, true), 'hidden', reason, source);\n this.announce(this.t('columnHidden', { column: column.label }));\n }\n resizeTo(columnId: string, width: number, reason: DataGridReason, source?: unknown) {\n const column = this.columns().find((entry) => entry.id === columnId);\n if (!column) return;\n const next = withColumnWidth(this.effectiveState(), column, width);\n this.requestState(next, 'width', reason, source);\n if (reason === 'keyboard') {\n this.announce(\n this.t('resized', {\n column: column.label,\n width: String(next.widths[columnId] ?? width),\n }),\n );\n }\n }\n resizeBy(columnId: string, delta: number, source?: unknown) {\n const column = this.resolvedById().get(columnId);\n if (!column || !column.resizable) return;\n this.resizeTo(columnId, column.width + delta, 'keyboard', source);\n }\n /* The widest content the column has on screen, plus the cell's own padding\n and border. The content is measured by a Range over the value, never by\n `scrollWidth`: a value that truncates lays its text out at full width\n under the clip, and one that does not fills its cell — `scrollWidth` gave\n the cell's box either way, so a column only ever grew. A header is its\n name plus what sits beside it (the sort mark, the actions slot) and the\n gaps between. `null` for a column with nothing mounted. */\n private measureFit(columnId: string): number | null {\n let widest = 0;\n for (const cell of this.host.nativeElement.querySelectorAll<HTMLElement>(\n `[data-column=\"${CSS.escape(columnId)}\"]`,\n )) {\n widest = Math.max(widest, contentWidth(cell));\n }\n return widest > 0 ? Math.ceil(widest) : null;\n }\n /** One column to its content; without an id, every resizable column at once, as one request. */\n autofit(columnId?: string, source?: unknown) {\n this.fit(columnId ?? null, 'programmatic', source);\n }\n /** The fit behind the resizer, the menu, the keyboard and `autofit()`, each with its own reason. */\n protected fit(columnId: string | null, reason: DataGridReason, source?: unknown) {\n if (columnId !== null) {\n if (!this.resolvedById().has(columnId)) return;\n const width = this.measureFit(columnId);\n if (width !== null) this.resizeTo(columnId, width, reason, source);\n return;\n }\n const state = this.effectiveState();\n let next = state;\n for (const column of this.resolved()) {\n if (!column.resizable) continue;\n const width = this.measureFit(column.id);\n if (width !== null) next = withColumnWidth(next, column.column, width);\n }\n if (next !== state) this.requestState(next, 'width', reason, source);\n }\n moveColumn(columnId: string, direction: -1 | 1, source?: unknown) {\n const column = this.resolvedById().get(columnId);\n if (!column || !column.reorderable) return;\n const zone = zoneOf(this.resolved(), columnId);\n const target = zone.indexOf(columnId) + direction;\n if (target < 0 || target >= zone.length) return;\n this.requestState(\n withColumnMoved(this.effectiveState(), columnId, target, zone),\n 'order',\n 'keyboard',\n source,\n );\n }\n\n private resizeSession: {\n column: string;\n startX: number;\n startWidth: number;\n rtl: boolean;\n } | null = null;\n protected beginResize(event: PointerEvent, column: ResolvedGridColumn<Row>) {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n const handle = event.currentTarget as HTMLElement;\n handle.setPointerCapture(event.pointerId);\n /* The header's own box and not the column's stated width: a flex column\n is as wide as the room left over, and a drag that started from the\n stated width jumped to it on the first move. */\n const header = handle.closest('[data-part=\"column-header\"]');\n this.resizeSession = {\n column: column.id,\n startX: event.clientX,\n startWidth: header ? Math.round(header.getBoundingClientRect().width) : column.width,\n rtl: getComputedStyle(this.host.nativeElement).direction === 'rtl',\n };\n this.resizing.set(column.id);\n }\n protected moveResize(event: PointerEvent, column: ResolvedGridColumn<Row>) {\n const session = this.resizeSession;\n if (!session || session.column !== column.id) return;\n const delta = (event.clientX - session.startX) * (session.rtl ? -1 : 1);\n this.resizeTo(column.id, session.startWidth + delta, 'pointer', event);\n }\n protected endResize(event: PointerEvent) {\n if (!this.resizeSession) return;\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\n this.resizeSession = null;\n this.resizing.set(null);\n }\n\n /* ── Reordering by drag ─────────────────────────────────────────────── */\n protected readonly dragState = signal<{\n dragging: string | null;\n target: string | null;\n offset: number | null;\n /** Where the scroller stood at the last move: the line follows the viewport, not the content. */\n scrollTop: number;\n }>({\n dragging: null,\n target: null,\n offset: null,\n scrollTop: 0,\n });\n private drag: DragController | null = null;\n private readonly draggables = new Map<string, () => void>();\n private readonly draggableNodes = new Map<string, HTMLElement>();\n\n /* ── Expansion ──────────────────────────────────────────────────────── */\n private readonly expandedSet = computed(() => new Set(this.expanded()));\n /* ── Tree ───────────────────────────────────────────────────────────── */\n protected readonly treeColumn = computed(() => {\n const tree = this.tree();\n if (!tree) return null;\n if (tree.column && this.resolvedById().has(tree.column)) return tree.column;\n return this.resolved()[0]?.id ?? null;\n });\n private readonly nodeByKey = computed(() => {\n const map = new Map<string, RowNode>();\n for (const node of this.pinned().top) map.set(node.key, node);\n for (const node of this.nodes()) if (node.kind === 'row') map.set(node.key, node);\n for (const node of this.pinned().bottom) map.set(node.key, node);\n return map;\n });\n /* A row opened with children still to come: asked for once, marked until\n a child of hers is in `rows` or she is closed. */\n private readonly loadingChildren = signal<ReadonlySet<string>>(new Set());\n protected isLoadingChildren(key: string) {\n return this.loadingChildren().has(key);\n }\n /** In a tree, `expanded` is the branch; the detail is a leaf's alone. */\n protected detailOpen(node: RowNode) {\n return this.isExpanded(node.key) && (this.tree() === undefined || node.childCount === 0);\n }\n protected treeKind(node: RowNode, column: string): 'branch' | 'leaf' | null {\n if (this.treeColumn() !== column) return null;\n const branch =\n node.childCount > 0 ||\n node.open ||\n this.isLoadingChildren(node.key) ||\n this.tree()?.hasChildren?.(node.row as Row) === true;\n return branch ? 'branch' : 'leaf';\n }\n toggleBranch(key: string, source?: unknown, reason: DataGridReason = 'pointer') {\n const node = this.nodeByKey().get(key);\n if (!node) return;\n const opening = !this.expandedSet().has(key);\n this.toggleExpanded(key, source, reason);\n if (opening && node.childCount === 0 && this.tree()?.hasChildren?.(node.row as Row)) {\n this.loadingChildren.update((current) => new Set(current).add(key));\n this.loadChildren.emit({ key, row: node.row as Row });\n }\n }\n\n isExpanded(key: string) {\n return this.expandedSet().has(key);\n }\n toggleExpanded(key: string, source?: unknown, reason: DataGridReason = 'pointer') {\n const held = this.expanded();\n const next = this.expandedSet().has(key)\n ? held.filter((entry) => entry !== key)\n : [...held, key];\n const state = createControllable<readonly string[]>({\n initial: held,\n equals: sameKeys,\n onRequest: (request) => this.expandedChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.expanded.set(next);\n }\n toggleGroup(key: string, source?: unknown, reason: DataGridReason = 'pointer') {\n const held = this.expandedGroups();\n const open = held === 'all' || held.includes(key);\n let next: DataGridExpandedGroups;\n if (held === 'all') {\n next = this.nodes()\n .filter((node) => node.kind === 'group')\n .map((node) => node.key)\n .filter((entry) => entry !== key && !entry.startsWith(`${key}/`));\n } else {\n next = open ? held.filter((entry) => entry !== key) : [...held, key];\n }\n const state = createControllable<DataGridExpandedGroups>({\n initial: held,\n equals: sameKeys,\n onRequest: (request) => this.expandedGroupsChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.expandedGroups.set(next);\n }\n protected detailId(key: string) {\n return `${this.id}-detail-${key}`;\n }\n protected groupCount(node: GroupNode) {\n return this.t('groupCount', { count: node.count });\n }\n protected groupContext(node: GroupNode): DataGridGroupContext<Row> {\n const column = this.columns().find((entry) => entry.id === node.column)!;\n return {\n $implicit: node as never,\n node: node as never,\n column,\n toggle: () => this.toggleGroup(node.key),\n };\n }\n protected aggregateText(column: ResolvedGridColumn<Row>, value: unknown) {\n if (value === null || value === undefined) return '';\n return cellText({ ...column.column, accessor: () => value }, {} as Row, this.formatOptions());\n }\n\n /* ── Editing ────────────────────────────────────────────────────────── */\n readonly edit = signal<EditSession | null>(null);\n private rowOf(key: string): Row | undefined {\n return this.nodeByKey().get(key)?.row as Row | undefined;\n }\n startEdit(cell: GridCell, seed: string | null = null) {\n const row = this.rowOf(cell.row);\n const column = this.columns().find((entry) => entry.id === cell.column);\n if (!row || !column || !this.isEditable(column, row)) return;\n const editing =\n this.resolvedEditMode() === 'row'\n ? this.columns()\n .filter((entry) => this.isEditable(entry, row))\n .map((entry) => entry.id)\n : [cell.column];\n const originals: Record<string, unknown> = {};\n for (const columnId of editing) {\n const target = this.columns().find((entry) => entry.id === columnId)!;\n originals[columnId] = cellValue(target, row);\n }\n const drafts = { ...originals };\n if (seed !== null) drafts[cell.column] = column.kind === 'number' ? Number(seed) : seed;\n this.edit.set({ cell, columns: editing, drafts, originals, status: 'editing', messages: {} });\n this.editStart.emit(cell);\n this.pendingFocus = cell;\n this.flushFocus();\n }\n setDraft(columnId: string, draft: unknown) {\n const session = this.edit();\n if (session)\n this.edit.set({\n ...session,\n drafts: { ...session.drafts, [columnId]: draft },\n status: 'editing',\n });\n }\n cancelEdit() {\n const session = this.edit();\n if (!session) return;\n this.edit.set(null);\n this.editCancel.emit(session.cell);\n this.pendingFocus = session.cell;\n this.flushFocus();\n }\n private nextEditableCell(cell: GridCell, move: 'down' | 'next' | 'previous'): GridCell | null {\n if (move === 'down') {\n const next = moveCursor(this.cursorGrid(), cell, 'down');\n return sameCell(next, cell) || !isBodyRow(next.row) ? null : next;\n }\n const row = this.rowOf(cell.row);\n if (!row) return null;\n const editable = this.columnIds().filter((columnId) => {\n const column = this.columns().find((entry) => entry.id === columnId);\n return column !== undefined && this.isEditable(column, row);\n });\n const index = editable.indexOf(cell.column);\n const target = editable[index + (move === 'next' ? 1 : -1)];\n return target ? { row: cell.row, column: target } : null;\n }\n commitEdit(\n reason: 'keyboard' | 'pointer' | 'blur' | 'programmatic',\n options: { move?: 'down' | 'next' | 'previous' | 'stay' } = {},\n ) {\n const session = this.edit();\n if (!session || session.status === 'pending') return;\n const row = this.rowOf(session.cell.row);\n if (!row) {\n this.edit.set(null);\n return;\n }\n const changes: Record<string, unknown> = {};\n for (const columnId of session.columns) {\n if (!Object.is(session.drafts[columnId], session.originals[columnId]))\n changes[columnId] = session.drafts[columnId];\n }\n const after = () => {\n const move = options.move ?? 'stay';\n const target = move === 'stay' ? null : this.nextEditableCell(session.cell, move);\n this.edit.set(null);\n if (target) {\n this.setCurrent(target, 'keyboard');\n if (this.resolvedEditMode() === 'cell' && move !== 'down') this.startEdit(target);\n } else {\n this.pendingFocus = session.cell;\n this.flushFocus();\n }\n };\n if (Object.keys(changes).length === 0) {\n after();\n return;\n }\n const run = async () => {\n this.edit.update((state) => (state ? { ...state, status: 'pending' } : state));\n const messages: Record<string, string> = {};\n for (const columnId of Object.keys(changes)) {\n const column = this.columns().find((entry) => entry.id === columnId)!;\n const parsed = column.parse ? column.parse(changes[columnId], row) : changes[columnId];\n changes[columnId] = parsed;\n const message = column.validate ? await column.validate(parsed, row) : null;\n if (message) messages[columnId] = message;\n }\n if (Object.keys(messages).length > 0) {\n this.edit.update((state) => (state ? { ...state, status: 'invalid', messages } : state));\n this.pendingFocus = session.cell;\n this.flushFocus();\n return;\n }\n const primary =\n session.cell.column in changes ? session.cell.column : Object.keys(changes)[0]!;\n let waited: Promise<void> | null = null;\n this.editCommit.emit({\n key: session.cell.row,\n column: primary,\n value: changes[primary],\n previous: session.originals[primary],\n row,\n reason,\n changes,\n wait: (promise) => {\n waited = promise;\n },\n });\n try {\n if (waited) await waited;\n after();\n } catch (failure) {\n const message =\n failure instanceof Error && failure.message ? failure.message : this.t('editFailed');\n this.edit.update((state) =>\n state ? { ...state, status: 'invalid', messages: { [primary]: message } } : state,\n );\n this.pendingFocus = session.cell;\n this.flushFocus();\n }\n };\n void run();\n }\n stopEdit(options?: { commit?: boolean }) {\n if (options?.commit === false) this.cancelEdit();\n else this.commitEdit('programmatic');\n }\n protected cellState(node: RowNode, column: ResolvedGridColumn<Row>) {\n const key = node.key;\n const session = this.edit();\n const editing =\n session !== null && session.cell.row === key && session.columns.includes(column.id);\n const message = editing ? (session.messages[column.id] ?? null) : null;\n const invalid = editing && session.status === 'invalid' && message !== null;\n const row = node.row as Row;\n const range = rangeEdges(this.cursorGrid(), this.bounds(), { row: key, column: column.id });\n const editable = this.isEditable(column.column, row);\n return {\n value: cellValue(column.column, row),\n text: this.textOf(column.column, row),\n current: this.isCurrent(key, column.id),\n selected: this.isSelected(key),\n editing,\n invalid,\n message,\n pending: editing && session.status === 'pending',\n inRange: range.inside,\n edges: range.edges,\n readonly: this.anyEditable() && !editable && column.kind !== 'actions',\n changed: this.changedOf(key, column.id),\n tree: this.treeKind(node, column.id),\n };\n }\n protected cellContext(\n node: RowNode,\n column: ResolvedGridColumn<Row>,\n cell: ReturnType<SlDataGrid<Row>['cellState']>,\n ): DataGridCellContext<Row> {\n return {\n $implicit: node.row as Row,\n row: node.row as Row,\n key: node.key,\n column: column.column,\n value: cell.value,\n text: cell.text,\n current: cell.current,\n selected: cell.selected,\n };\n }\n protected editorContext(\n node: RowNode,\n column: ResolvedGridColumn<Row>,\n cell: ReturnType<SlDataGrid<Row>['cellState']>,\n ): DataGridEditorContext<Row> {\n return {\n ...this.cellContext(node, column, cell),\n draft: this.edit()?.drafts[column.id],\n setDraft: (draft) => this.setDraft(column.id, draft),\n commit: () => this.commitEdit('programmatic'),\n cancel: () => this.cancelEdit(),\n invalid: cell.invalid,\n message: cell.message,\n };\n }\n protected headerContext(column: ResolvedGridColumn<Row>): DataGridHeaderContext<Row> {\n const sort = this.sortOf(column.id);\n return {\n $implicit: column.column,\n column: column.column,\n resolved: column,\n sorted: sort?.direction ?? null,\n sortIndex: sort?.index ?? null,\n filtered: this.filterOf(column.id) !== null,\n };\n }\n private templateFor<T extends { template: unknown }>(\n list: readonly T[],\n read: (entry: T) => string,\n columnId: string,\n ) {\n return (\n (list.find((entry) => read(entry) === columnId) ?? list.find((entry) => read(entry) === ''))\n ?.template ?? null\n );\n }\n protected cellTemplate(columnId: string) {\n return this.templateFor(\n this.cellTemplates(),\n (entry) => entry.slDataGridCell(),\n columnId,\n ) as never;\n }\n protected editorTemplate(columnId: string) {\n return this.templateFor(\n this.editorTemplates(),\n (entry) => entry.slDataGridEditor(),\n columnId,\n ) as never;\n }\n protected headerTemplate(columnId: string) {\n return this.templateFor(\n this.headerTemplates(),\n (entry) => entry.slDataGridHeader(),\n columnId,\n ) as never;\n }\n protected helpTemplate(columnId: string) {\n return (this.helpTemplates().find((entry) => entry.slDataGridColumnHelp() === columnId)\n ?.template ?? null) as never;\n }\n protected hasHelp(column: ResolvedGridColumn<Row>) {\n return (\n Boolean(column.column.description) ||\n this.helpTemplates().some((entry) => entry.slDataGridColumnHelp() === column.id)\n );\n }\n protected helpLabel(column: ResolvedGridColumn<Row>) {\n return this.t('columnHelp', { column: column.column.label });\n }\n protected descriptionId(columnId: string) {\n return `${this.id}-description-${columnId}`;\n }\n protected filterTemplate(columnId: string) {\n return this.templateFor(\n this.filterTemplates(),\n (entry) => entry.slDataGridFilter(),\n columnId,\n ) as never;\n }\n protected readonly hasFooterContent = computed(() => this.footerContent() !== undefined);\n protected readonly showsFooter = computed(\n () => this.hasFooterContent() || this.rangeText() !== null || this.hasMore() === true,\n );\n protected readonly rangeText = computed(() => {\n const query = this.query();\n if (this.showRange() === false || !query.page || this.nodes().length === 0) return null;\n const start = ('index' in query.page ? query.page.index * query.page.size : 0) + 1;\n const shown =\n this.resolvedMode() === 'client'\n ? this.nodes().filter((node) => node.kind === 'row').length\n : this.rows().length;\n const last = start + shown - 1;\n const total = this.total();\n return total === null || total < 0\n ? this.t('rangeUnknown', { start, end: last })\n : this.t('range', { start, end: last, total });\n });\n\n /* ── Groups ─────────────────────────────────────────────────────────── */\n protected readonly groupCells = computed(() => {\n const groups = this.columnGroups() ?? [];\n const columns = this.mountedColumns();\n const offset = this.gutterIds().length;\n const cells: {\n key: string;\n first: number;\n span: number;\n label: string;\n pinned: 'start' | 'end' | null;\n pinOffset: number;\n }[] = [];\n let index = 0;\n while (index < columns.length) {\n const column = columns[index]!;\n const group = groups.find((entry) => entry.columns.includes(column.id));\n let span = 1;\n if (group)\n while (index + span < columns.length && group.columns.includes(columns[index + span]!.id))\n span += 1;\n cells.push({\n key: group ? `${group.id}:${column.id}` : column.id,\n first: column.index + offset,\n span,\n label: group?.label ?? '',\n pinned: column.pinned,\n pinOffset: column.pinOffset,\n });\n index += span;\n }\n return cells;\n });\n\n /* ── Changed cells ──────────────────────────────────────────────────── */\n private readonly changedFor = computed(() => {\n const stated = this.highlightChanges();\n return stated === true ? DEFAULT_CHANGED_DURATION : stated || 0;\n });\n protected readonly changedDuration = computed(() => {\n const ms = this.changedFor();\n return ms > 0 ? `${ms}ms` : null;\n });\n /* One mark per changed cell, with the generation it was marked in: the\n generation's parity is the attribute's value, so a cell changed twice in\n a row restarts its paint. The map is read through its version. */\n private readonly changedCells = new Map<string, { until: number; generation: number }>();\n private changedGeneration = 0;\n private readonly changedVersion = signal(0);\n private changedTimer: ReturnType<typeof setTimeout> | null = null;\n private previousRows: { rows: readonly Row[]; byKey: Map<string, Row> } | null = null;\n private changedOf(key: string, column: string): 'a' | 'b' | null {\n this.changedVersion();\n const mark = this.changedCells.get(`${key}\\u0000${column}`);\n return mark ? (mark.generation % 2 === 0 ? 'a' : 'b') : null;\n }\n private markChanges(rows: readonly Row[]) {\n const changedFor = untracked(() => this.changedFor());\n if (changedFor <= 0) {\n this.previousRows = null;\n return;\n }\n const previous = this.previousRows;\n const byKey = new Map<string, Row>();\n for (const row of rows) byKey.set(this.rowKeyOf(row), row);\n this.previousRows = { rows, byKey };\n if (!previous || previous.rows === rows) return;\n const now = Date.now();\n let marked = false;\n const columns = untracked(() => this.resolved());\n const pinned = untracked(() => this.pinned());\n const mounted = untracked(() => this.mountedEntries()).map((entry) => entry.node);\n for (const node of [...pinned.top, ...mounted, ...pinned.bottom]) {\n if (node.kind !== 'row') continue;\n const before = previous.byKey.get(node.key);\n if (before === undefined || before === node.row) continue;\n for (const column of columns) {\n if (Object.is(cellValue(column.column, before), cellValue(column.column, node.row as Row)))\n continue;\n this.changedCells.set(`${node.key}\\u0000${column.id}`, {\n until: now + changedFor,\n generation: this.changedGeneration + 1,\n });\n marked = true;\n }\n }\n if (!marked) return;\n this.changedGeneration += 1;\n this.changedVersion.update((version) => version + 1);\n if (this.changedTimer === null)\n this.changedTimer = setTimeout(() => this.sweepChanges(), changedFor);\n }\n private sweepChanges() {\n this.changedTimer = null;\n const at = Date.now();\n let next = Number.POSITIVE_INFINITY;\n for (const [key, mark] of this.changedCells) {\n if (mark.until <= at) this.changedCells.delete(key);\n else next = Math.min(next, mark.until);\n }\n this.changedVersion.update((version) => version + 1);\n if (next !== Number.POSITIVE_INFINITY)\n this.changedTimer = setTimeout(() => this.sweepChanges(), Math.max(16, next - at));\n }\n\n /* ── Lifecycle ──────────────────────────────────────────────────────── */\n constructor() {\n const destroy = inject(DestroyRef);\n destroy.onDestroy(() => {\n if (this.changedTimer !== null) clearTimeout(this.changedTimer);\n this.sourceController?.abort();\n });\n /* One request per query, and per retry or reload. */\n effect(() => {\n const source = this.dataSource();\n const query = this.query();\n this.sourceAttempt();\n if (!source) return;\n untracked(() => this.fetchFromSource(source, query));\n });\n /* A wait ends when a child arrived, or the row closed. */\n effect(() => {\n const waiting = this.loadingChildren();\n if (waiting.size === 0) return;\n const byKey = this.nodeByKey();\n const open = this.expandedSet();\n const next = new Set(waiting);\n for (const key of waiting) {\n const node = byKey.get(key);\n if (!node || !open.has(key) || node.childCount > 0) next.delete(key);\n }\n if (next.size !== waiting.size) this.loadingChildren.set(next);\n });\n /* The main pointer, read again when it changes: a tablet docked to a\n mouse leaves the pop-in for the sideways scroll. */\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n const query = window.matchMedia('(pointer: coarse)');\n const read = () => this.coarsePointer.set(query.matches);\n read();\n query.addEventListener('change', read);\n destroy.onDestroy(() => query.removeEventListener('change', read));\n }\n /* The sets a narrow frame took out, reported when either changes. */\n let spaced: GridOutOfSpace = NONE_OUT;\n effect(() => {\n const next = this.outOfSpace();\n if (sameKeys(next.popin, spaced.popin) && sameKeys(next.hidden, spaced.hidden)) return;\n spaced = next;\n untracked(() => this.outOfSpaceChange.emit(next));\n });\n /* Two consecutive `rows` are compared once the new nodes are known. */\n effect(() => {\n const rows = this.rows();\n this.nodes();\n untracked(() => this.markChanges(rows));\n });\n\n /* The scroller: the window, the viewport and the overflow affordance. */\n afterNextRender(\n () => {\n const scroller = this.scrollRef()?.nativeElement;\n if (!scroller) return;\n let frame = 0;\n const read = () => {\n frame = 0;\n this.scrollTop.set(scroller.scrollTop);\n this.scrollLeft.set(Math.abs(scroller.scrollLeft));\n };\n const onScroll = () => {\n if (frame === 0) frame = requestAnimationFrame(read);\n };\n scroller.addEventListener('scroll', onScroll, { passive: true });\n const observer =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n this.viewport.set({ width: scroller.clientWidth, height: scroller.clientHeight });\n this.frameWidth.set(scroller.clientWidth);\n this.measureEdges?.();\n });\n /* The head's and the summary's heights, for the rows held under one\n and over the other: written on the scroller as the offsets the held\n rows stick at. */\n const edges = () => {\n const head = scroller.querySelector<HTMLElement>(':scope > [data-part=\"head\"]');\n const summary = scroller.querySelector<HTMLElement>(':scope > [data-part=\"summary\"]');\n scroller.style.setProperty(\n '--slotted-data-grid-pinned-top-offset',\n `${head?.offsetHeight ?? 0}px`,\n );\n scroller.style.setProperty(\n '--slotted-data-grid-pinned-bottom-offset',\n `${summary?.offsetHeight ?? 0}px`,\n );\n };\n observer?.observe(scroller);\n for (const part of scroller.querySelectorAll(\n ':scope > [data-part=\"head\"], :scope > [data-part=\"summary\"]',\n ))\n observer?.observe(part);\n edges();\n this.measureEdges = edges;\n this.viewport.set({ width: scroller.clientWidth, height: scroller.clientHeight });\n if (observer) this.frameWidth.set(scroller.clientWidth);\n const affordance = createScrollAffordance(scroller, {\n orientation: () => 'horizontal',\n onChange: (state) => {\n scroller.toggleAttribute('data-overflowing', state.overflowing);\n scroller.toggleAttribute('data-at-start', state.overflowing && state.atStart);\n scroller.toggleAttribute('data-at-end', state.overflowing && state.atEnd);\n },\n });\n destroy.onDestroy(() => {\n scroller.removeEventListener('scroll', onScroll);\n if (frame) cancelAnimationFrame(frame);\n observer?.disconnect();\n affordance.destroy();\n });\n this.wireDrag();\n },\n { injector: this.injector },\n );\n\n /* The row height, read once from the first mounted row; every row when\n auto. A row with a pop-in changes height with the columns in it and\n with the frame's width, which reflows its fields, so both are read. */\n effect(() => {\n this.mountedEntries();\n this.outOfSpace();\n if (this.hasPopin()) this.frameWidth();\n afterNextRender(\n () => {\n const rows = this.host.nativeElement.querySelectorAll<HTMLElement>(\n '[data-part=\"body\"] > [data-part=\"row\"]',\n );\n const first = rows[0];\n if (!first) return;\n if (\n typeof untracked(() => this.resolvedRowHeight()) !== 'number' &&\n untracked(() => this.measuredRow()) === null\n ) {\n const height = first.getBoundingClientRect().height;\n if (height > 0) this.measuredRow.set(Math.round(height));\n }\n if (untracked(() => this.autoRows())) {\n const sizes = new Map(untracked(() => this.rowSizes()));\n let changed = false;\n for (const row of rows) {\n const index = Number(row.getAttribute('data-index'));\n const height = row.getBoundingClientRect().height;\n if (!Number.isNaN(index) && height > 0 && sizes.get(index) !== height) {\n sizes.set(index, height);\n changed = true;\n }\n }\n if (changed) this.rowSizes.set(sizes);\n }\n },\n { injector: this.injector },\n );\n });\n\n /* The cursor survives its row leaving: same index, same column. A column\n that moved into the pop-in takes the cursor with it. */\n effect(() => {\n const current = this.current();\n const rows = this.cursorRows();\n const columns = this.cursorColumns();\n if (current && rows.includes(current.row)) {\n this.lastRowIndex = rows.indexOf(current.row);\n if (columns.includes(current.column)) return;\n }\n if (!current) return;\n const popped =\n rows.includes(current.row) &&\n this.outOfSpace().popin.includes(current.column) &&\n this.hasPopinCell(current.row);\n const settled = popped\n ? { row: current.row, column: POPIN_COLUMN_ID }\n : settleCursor(\n untracked(() => this.cursorGrid()),\n current,\n this.lastRowIndex,\n );\n untracked(() => {\n if (settled && !sameCell(settled, current)) {\n this.requestCurrent(settled, 'programmatic');\n if (this.focused()) {\n this.pendingFocus = settled;\n this.flushFocus();\n }\n } else if (!settled && this.focused()) {\n this.host.nativeElement\n .querySelector<HTMLElement>('[data-part=\"empty\"] [tabindex]')\n ?.focus();\n }\n });\n });\n\n /* A row that changes under an open editor is a conflict, not a refresh. */\n effect(() => {\n this.rows();\n const session = untracked(() => this.edit());\n if (!session || session.status === 'pending') return;\n const row = untracked(() => this.rowOf(session.cell.row));\n if (!row) return;\n const conflicts: Record<string, string> = {};\n for (const columnId of session.columns) {\n const column = this.columns().find((entry) => entry.id === columnId);\n if (column && !Object.is(cellValue(column, row), session.originals[columnId])) {\n conflicts[columnId] = this.t('editConflict');\n }\n }\n if (Object.keys(conflicts).length > 0) {\n untracked(() =>\n this.edit.set({\n ...session,\n status: 'invalid',\n messages: { ...session.messages, ...conflicts },\n }),\n );\n }\n });\n\n /* Load more when the window nears the end. */\n effect(() => {\n if (this.hasMore() !== true || this.loading()) return;\n const remaining = this.nodes().length - this.rowWindow().endIndex;\n const scroller = this.scrollRef()?.nativeElement;\n const near = this.windowsRows()\n ? remaining <= this.resolvedThreshold()\n : this.scrollTop() + this.viewport().height >=\n (scroller?.scrollHeight ?? 0) - this.rowSize() * this.resolvedThreshold();\n if (near && this.viewport().height > 0) untracked(() => this.loadMore.emit());\n });\n\n /* The drag session's state, drawn on the headers. */\n destroy.onDestroy(() => {\n for (const detach of this.draggables.values()) detach();\n this.draggables.clear();\n this.drag?.destroy();\n });\n\n /* The headers as draggables, re-attached when the mounted set changes. */\n effect(() => {\n this.mountedColumns();\n afterNextRender(() => this.attachDraggables(), { injector: this.injector });\n });\n /* The mounted rows as draggables, the same way. */\n effect(() => {\n this.mountedEntries();\n this.hasDragColumn();\n afterNextRender(() => this.attachRowDraggables(), { injector: this.injector });\n });\n\n /* A range drag ends on the document. */\n effect((onCleanup) => {\n if (!this.rangeDragging()) return;\n const doc = this.host.nativeElement.ownerDocument;\n const end = () => this.rangeDragging.set(false);\n doc.addEventListener('pointerup', end);\n doc.addEventListener('pointercancel', end);\n onCleanup(() => {\n doc.removeEventListener('pointerup', end);\n doc.removeEventListener('pointercancel', end);\n });\n });\n }\n\n private wireDrag() {\n const element = this.host.nativeElement;\n /* One container for the whole header row: the three pin zones share the\n row's box, and three containers registered over the same element\n claimed the pointer in turn — the last one, an empty end zone, took\n every drop as its root. The zone is enforced at the drop instead: a\n column never leaves its zone, so a target past the zone's edge lands on\n the edge. */\n const controller = createDragController({\n document: element.ownerDocument,\n t: this.dragT,\n preview: false,\n /* The scroller moves sideways when a header is dragged to its edge, so a\n column can reach a place past the viewport; never up or down — the\n pointer is at the scroller's top edge for the whole drag. */\n autoScroll: { axis: 'x' },\n onDrop: ({ items, target, reason, event }) => {\n if (target.kind !== 'between') return;\n const columnId = items[0]!;\n const list = this.resolved();\n const zone = zoneOf(list, columnId);\n const to = zoneIndex(list, zone, columnId, target.index);\n if (to === null) return;\n this.requestState(\n withColumnMoved(this.effectiveState(), columnId, to, zone),\n 'order',\n reason === 'keyboard' ? 'keyboard' : 'pointer',\n event,\n );\n },\n });\n const allItems = () => this.resolved().map((column) => column.id);\n const headerOf = (columnId: string) =>\n element.querySelector(`[data-part=\"column-header\"][data-column=\"${CSS.escape(columnId)}\"]`);\n controller.registerContainer({\n key: 'columns',\n items: allItems,\n orientation: 'horizontal',\n element: () =>\n element.querySelector('[data-part=\"head\"] > [data-part=\"header-row\"]:last-of-type'),\n itemElement: headerOf,\n label: () => this.t('dragColumns'),\n itemLabel: (columnId) => this.labelOf(columnId),\n });\n let wasDragging = false;\n controller.subscribe((state) => {\n if (state.status !== 'dragging') {\n /* The click the browser fires after a drop is the drag's, not a press\n on the header: read live, a reordered column came back sorted. */\n if (wasDragging) this.swallowClick = true;\n wasDragging = false;\n this.dragState.set({ dragging: null, target: null, offset: null, scrollTop: 0 });\n return;\n }\n wasDragging = true;\n const dragging = state.items[0] ?? null;\n const target = state.target && state.target.kind === 'between' ? state.target : null;\n let offset: number | null = null;\n let scrollTop = 0;\n let over: string | null = null;\n if (target && dragging) {\n const list = this.resolved();\n const zone = zoneOf(list, dragging);\n const first = list.find((column) => column.id === zone[0]);\n const last = list.find((column) => column.id === zone[zone.length - 1]);\n /* The indicator is drawn where the drop would land: inside the zone. */\n const boundary = Math.max(\n first ? first.index - 1 : 0,\n Math.min(last ? last.index : list.length, target.index),\n );\n const scroller = this.scrollRef()?.nativeElement;\n const ids = allItems();\n const atEnd = boundary >= ids.length;\n const anchor = ids[atEnd ? ids.length - 1 : boundary];\n const header = anchor ? headerOf(anchor) : null;\n if (header && scroller) {\n const box = header.getBoundingClientRect();\n const origin = scroller.getBoundingClientRect();\n const rtl = getComputedStyle(scroller).direction === 'rtl';\n const edge = atEnd !== rtl ? box.right : box.left;\n /* Content coordinates: the indicator is positioned in the\n scroller's box at scroll zero, so the scrolled distance is added\n back. `scrollLeft` is negative once an rtl scroller has moved. */\n offset = rtl\n ? origin.right - edge - scroller.scrollLeft\n : edge - origin.left + scroller.scrollLeft;\n scrollTop = scroller.scrollTop;\n over = ids[boundary] ?? null;\n }\n }\n this.dragState.set({ dragging, target: over, offset, scrollTop });\n });\n this.drag = controller;\n this.attachDraggables();\n this.wireRowDrag();\n }\n\n /* ── The data source ───────────────────────────────────────────────── */\n private readonly sourceCache = new Map<string, DataGridDataSourceResult<Row>>();\n private sourceController: AbortController | null = null;\n private readonly sourceAttempt = signal(0);\n /** The same query again, after a failure; with a source, else `retry` is emitted. */\n protected onRetry() {\n if (this.dataSource()) this.sourceAttempt.update((count) => count + 1);\n else this.retry.emit();\n }\n /** Drops the data source's cache and asks the query again. */\n reload() {\n this.sourceCache.clear();\n this.sourceAttempt.update((count) => count + 1);\n }\n private fetchFromSource(source: DataGridDataSource<Row>, query: GridQuery) {\n const key = serializeQuery(query);\n const cached = this.sourceCache.get(key);\n if (cached) {\n this.sourced.set({ result: cached, loading: false, error: null });\n return;\n }\n this.sourceController?.abort();\n const own = new AbortController();\n this.sourceController = own;\n this.sourced.update((current) => ({ ...current, loading: true, error: null }));\n source.getRows(query, { signal: own.signal }).then(\n (result) => {\n if (own.signal.aborted) return;\n const size = source.cacheSize ?? DEFAULT_CACHE_SIZE;\n if (size > 0) {\n this.sourceCache.set(key, result);\n while (this.sourceCache.size > size) {\n const oldest = this.sourceCache.keys().next().value;\n if (oldest === undefined) break;\n this.sourceCache.delete(oldest);\n }\n }\n this.sourced.set({ result, loading: false, error: null });\n },\n (reason: unknown) => {\n if (own.signal.aborted) return;\n const message = reason instanceof Error ? reason.message : String(reason);\n this.sourced.update((current) => ({ ...current, loading: false, error: message }));\n },\n );\n }\n\n /* ── Reordering rows ────────────────────────────────────────────────── */\n /* Rows move only while the query is at rest and there is no tree: sorted,\n filtered, searched or grouped, the position on screen is not the\n position in `rows`. A page is fine — a node's index is its place in\n `rows` across pages. */\n protected readonly rowsReorderableNow = computed(() => {\n const query = this.query();\n return (\n this.hasDragColumn() &&\n this.tree() === undefined &&\n this.resolvedMode() === 'client' &&\n query.sort.length === 0 &&\n query.filter === null &&\n query.search.trim() === '' &&\n query.group.length === 0\n );\n });\n protected readonly rowDragState = signal<{\n dragging: string | null;\n offset: number | null;\n scrollLeft: number;\n }>({ dragging: null, offset: null, scrollLeft: 0 });\n private rowDrag: DragController | null = null;\n private measureEdges: (() => void) | null = null;\n private readonly rowDraggables = new Map<string, () => void>();\n private readonly rowDraggableNodes = new Map<string, HTMLElement>();\n protected rowHandleLabel(key: string) {\n return this.t('reorderRow', { row: this.rowLabelOf(key) });\n }\n /** What a row is called: its row header's text, else its key. */\n private rowLabelOf(key: string) {\n const node = this.nodeByKey().get(key);\n const header = this.columns().find((column) => column.rowHeader);\n return node && header ? cellText(header, node.row as Row, this.formatOptions()) : key;\n }\n private mountedRowKeys() {\n return this.mountedEntries().flatMap(({ node }) => (node.kind === 'row' ? [node.key] : []));\n }\n /** Where a row lands in `rows` when dropped before the visible item at `index`. */\n private rowMove(key: string, index: number): DataGridRowsReorderEvent | null {\n const node = this.nodeByKey().get(key);\n if (!node) return null;\n const items = this.mountedEntries().flatMap(({ node: entry }) =>\n entry.kind === 'row' ? [entry] : [],\n );\n const last = items[items.length - 1];\n const before = items[index];\n const target = before ? before.index : last ? last.index + 1 : 0;\n /* Removing the row first shifts everything after it up by one. */\n const to = node.index < target ? target - 1 : target;\n if (to === node.index) return null;\n return { key, from: node.index, to, reason: 'pointer' };\n }\n private moveRow(key: string, direction: -1 | 1, source?: unknown) {\n if (!this.rowsReorderableNow()) return;\n const keys = this.mountedRowKeys();\n const at = keys.indexOf(key);\n if (at < 0) return;\n const index = direction > 0 ? at + 2 : at - 1;\n if (index < 0) return;\n const move = this.rowMove(key, index);\n if (!move) return;\n this.rowsReorder.emit({ ...move, reason: 'keyboard', event: source as Event | undefined });\n this.announce(this.t('rowMoved', { row: this.rowLabelOf(key), position: move.to + 1 }));\n }\n private wireRowDrag() {\n const element = this.host.nativeElement;\n const controller = createDragController({\n document: element.ownerDocument,\n t: this.dragT,\n preview: false,\n autoScroll: { axis: 'y' },\n onDrop: ({ items, target, reason, event }) => {\n if (target.kind !== 'between') return;\n const move = this.rowMove(items[0]!, target.index);\n if (move)\n this.rowsReorder.emit({\n ...move,\n reason: reason === 'keyboard' ? 'keyboard' : 'pointer',\n event,\n });\n },\n });\n const rowOf = (key: string) =>\n element.querySelector(\n `[data-part=\"body\"] > [data-part=\"row\"][data-row=\"${CSS.escape(key)}\"]`,\n );\n controller.registerContainer({\n key: 'rows',\n items: () => this.mountedRowKeys(),\n orientation: 'vertical',\n element: () => element.querySelector('[data-part=\"body\"]'),\n itemElement: rowOf,\n label: () => this.t('dragRows'),\n itemLabel: (key) => this.rowLabelOf(key),\n });\n controller.subscribe((state) => {\n if (state.status !== 'dragging') {\n this.rowDragState.set({ dragging: null, offset: null, scrollLeft: 0 });\n return;\n }\n const dragging = state.items[0] ?? null;\n const target = state.target && state.target.kind === 'between' ? state.target : null;\n let offset: number | null = null;\n let scrollLeft = 0;\n const scroller = this.scrollRef()?.nativeElement;\n if (target && scroller) {\n const keys = this.mountedRowKeys();\n const atEnd = target.index >= keys.length;\n const anchor = keys[atEnd ? keys.length - 1 : target.index];\n const row = anchor ? rowOf(anchor) : null;\n if (row) {\n const box = row.getBoundingClientRect();\n const origin = scroller.getBoundingClientRect();\n offset = (atEnd ? box.bottom : box.top) - origin.top + scroller.scrollTop;\n scrollLeft = Math.abs(scroller.scrollLeft);\n }\n }\n this.rowDragState.set({ dragging, offset, scrollLeft });\n });\n this.rowDrag = controller;\n this.attachRowDraggables();\n }\n private attachRowDraggables() {\n const controller = this.rowDrag;\n if (!controller) return;\n const element = this.host.nativeElement;\n const seen = new Set<string>();\n if (this.hasDragColumn()) {\n for (const key of this.mountedRowKeys()) {\n const node = element.querySelector<HTMLElement>(\n `[data-part=\"body\"] > [data-part=\"row\"][data-row=\"${CSS.escape(key)}\"]`,\n );\n if (!node) continue;\n seen.add(key);\n const previous = this.rowDraggables.get(key);\n if (previous && this.rowDraggableNodes.get(key) === node) continue;\n previous?.();\n const detach = controller.attachDraggable(node, {\n container: 'rows',\n key,\n handle: () => node.querySelector('[data-part=\"row-handle\"]'),\n disabled: () => !this.rowsReorderableNow(),\n distance: 6,\n });\n this.rowDraggableNodes.set(key, node);\n this.rowDraggables.set(key, detach);\n }\n }\n for (const [key, detach] of this.rowDraggables) {\n if (!seen.has(key)) {\n detach();\n this.rowDraggables.delete(key);\n this.rowDraggableNodes.delete(key);\n }\n }\n }\n private attachDraggables() {\n const controller = this.drag;\n if (!controller) return;\n const element = this.host.nativeElement;\n const seen = new Set<string>();\n for (const column of this.resolved()) {\n const node = element.querySelector<HTMLElement>(\n `[data-part=\"column-header\"][data-column=\"${CSS.escape(column.id)}\"]`,\n );\n if (!node || !column.reorderable) continue;\n seen.add(column.id);\n /* A node already attached stays attached: detaching it between two\n renders would throw away a press in progress. */\n const previous = this.draggables.get(column.id);\n if (previous && this.draggableNodes.get(column.id) === node) continue;\n previous?.();\n const detach = controller.attachDraggable(node, {\n container: 'columns',\n key: column.id,\n handle: () => node,\n /* A press on the resize handle is a resize: the controller's own\n listener sits on the header and fires before the handle's, so\n the handle cannot stop it. */\n canDrag: (event) =>\n !(event.target instanceof Element && event.target.closest('[data-part=\"resizer\"]')),\n distance: 6,\n });\n this.draggableNodes.set(column.id, node);\n this.draggables.set(column.id, detach);\n }\n for (const [columnId, detach] of this.draggables) {\n if (!seen.has(columnId)) {\n detach();\n this.draggables.delete(columnId);\n this.draggableNodes.delete(columnId);\n }\n }\n }\n\n /* ── Events ─────────────────────────────────────────────────────────── */\n announce(message: string) {\n getLiveAnnouncer(this.host.nativeElement.ownerDocument).announce(message);\n }\n private rtl() {\n return getComputedStyle(this.host.nativeElement).direction === 'rtl';\n }\n protected onCellFocus(cell: GridCell, event: FocusEvent) {\n if (event.target !== event.currentTarget) return;\n this.focused.set(true);\n if (!sameCell(cell, this.current())) this.requestCurrent(cell, 'programmatic');\n }\n protected onRootFocusOut(event: FocusEvent) {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.host.nativeElement.contains(next)) {\n this.focused.set(false);\n const session = this.edit();\n if (session && session.status === 'editing') this.commitEdit('blur', { move: 'stay' });\n }\n }\n protected onRootKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n if (this.drag?.handleKeydown(event)) return;\n this.rowDrag?.handleKeydown(event);\n }\n private swallowClick = false;\n /** The pointer of the last press on a cell: `touch` and `pen` activate on one press. */\n private pressedWith = '';\n private touchActivatedAt = Number.NEGATIVE_INFINITY;\n private keyboardMenuAt = Number.NEGATIVE_INFINITY;\n private columnMenuFor(columnId: string) {\n return this.columnMenus().find(\n (menu) => menu.trigger()?.getAttribute('data-menu-for') === columnId,\n );\n }\n /**\n * Opens a column's menu against an anchor other than its button: the point\n * a context menu was opened at, or the header cell. Focus returns to the\n * header cell, which is where the reader was.\n */\n private openColumnMenu(\n columnId: string,\n anchor: PositionerAnchor,\n reason: 'pointer' | 'keyboard',\n event: Event,\n header: HTMLElement,\n ): boolean {\n const menu = this.columnMenuFor(columnId);\n if (!menu || menu.resolvedDisabled()) return false;\n menu.finalFocus.set(header);\n menu.anchor.set(anchor);\n menu.entry.current = 'first';\n menu.toggle(true, reason, event);\n return true;\n }\n /** The button opens the menu where it always did: under itself, focus returning to it. */\n protected anchorToButton(menu: SlMenu) {\n menu.anchor.set(null);\n menu.finalFocus.set(null);\n }\n /**\n * A secondary press on a data column's header opens its menu at the press.\n * The browser keeps its own menu under Shift, and over a field, where cut,\n * copy and paste are the reader's; a `contextmenu` just after Shift+F10 or\n * the Menu key opened the menu from the keyboard is that key's echo.\n */\n protected onHeaderContextMenu(event: MouseEvent, columnId: string) {\n if (event.shiftKey) return;\n if (event.target instanceof Element && event.target.closest(EDITABLE)) return;\n if (Date.now() - this.keyboardMenuAt < KEYBOARD_ECHO) {\n event.preventDefault();\n return;\n }\n const header = event.currentTarget as HTMLElement;\n const anchor = pointAnchor(event.clientX, event.clientY);\n if (this.openColumnMenu(columnId, anchor, 'pointer', event, header)) event.preventDefault();\n }\n protected onHeaderClick(event: MouseEvent, column: ResolvedGridColumn<Row>) {\n if (this.swallowClick) {\n this.swallowClick = false;\n return;\n }\n if (insideWidget(event)) return;\n if (column.sortable) this.pressSort(column.id, event.shiftKey, event, 'pointer');\n }\n protected onBodyCellClick(event: MouseEvent, cell: GridCell) {\n const pointer = this.pressedWith;\n this.pressedWith = '';\n if (insideWidget(event)) return;\n if (this.resolvedSelectionMode() === 'single' && !this.disabledSet().has(cell.row)) {\n this.toggleSelected(cell.row, { range: false, source: event });\n }\n /* On a touch screen one press opens the record: a double tap is a zoom,\n not the gesture of opening. A cell in edit keeps the press for its\n editor. */\n const session = this.edit();\n const editing =\n session !== null && session.cell.row === cell.row && session.columns.includes(cell.column);\n if (this.activatable() && (pointer === 'touch' || pointer === 'pen') && !editing) {\n this.touchActivatedAt = Date.now();\n this.activate.emit({ key: cell.row, reason: 'pointer', event });\n }\n }\n protected onCellDoubleClick(event: MouseEvent, cell: GridCell) {\n if (insideWidget(event)) return;\n /* The second tap of a touch that already activated the row. */\n if (Date.now() - this.touchActivatedAt < TOUCH_ECHO) return;\n const row = this.rowOf(cell.row);\n const column = this.columns().find((entry) => entry.id === cell.column);\n if (!row) return;\n if (column && this.isEditable(column, row) && !this.activatable()) {\n this.startEdit(cell);\n return;\n }\n if (this.activatable()) this.activate.emit({ key: cell.row, reason: 'pointer', event });\n else if (column && this.isEditable(column, row)) this.startEdit(cell);\n }\n protected onCellPointerDown(event: PointerEvent, cell: GridCell) {\n this.pressedWith = event.pointerType ?? '';\n if (event.button !== 0) return;\n this.swallowClick = false;\n const session = this.edit();\n if (\n session &&\n !sameCell(session.cell, cell) &&\n !(session.cell.row === cell.row && session.columns.includes(cell.column))\n ) {\n this.commitEdit('blur', { move: 'stay' });\n }\n if (!sameCell(cell, this.current())) this.requestCurrent(cell, 'pointer', event);\n if (this.resolvedSelectionMode() === 'range' && isBodyRow(cell.row)) {\n if (!insideWidget(event)) {\n this.beginRange(cell, event.shiftKey, event);\n this.rangeDragging.set(true);\n }\n }\n }\n protected onCellPointerEnter(event: PointerEvent, cell: GridCell) {\n if (this.rangeDragging() && event.buttons === 1) this.extendRange(cell, event);\n }\n\n private async copyRange(cell: GridCell) {\n const bounds = this.bounds();\n const cells = bounds ? rangeCells(this.cursorGrid(), bounds) : [[cell]];\n const text = rangeToText(cells, (target) => {\n const row = this.rowOf(target.row);\n const column = this.columns().find((entry) => entry.id === target.column);\n return row && column ? this.textOf(column, row) : '';\n });\n const outcome = await writeToClipboard(text, this.host.nativeElement.ownerDocument);\n if (outcome !== 'refused') {\n this.announce(this.t('copied', { count: cells.reduce((sum, line) => sum + line.length, 0) }));\n }\n }\n\n protected onCellKeyDown(event: KeyboardEvent, cell: GridCell) {\n if (event.defaultPrevented) return;\n const session = this.edit();\n const target = event.target as HTMLElement;\n const cellElement = event.currentTarget as HTMLElement;\n const insideWidget = target !== cellElement;\n const key = event.key;\n const mirror = this.rtl();\n const ctrl = event.ctrlKey || event.metaKey;\n\n if (session && sameCell(session.cell, cell)) {\n if (key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.cancelEdit();\n } else if (key === 'Enter') {\n event.preventDefault();\n this.commitEdit('keyboard', { move: this.resolvedEditMode() === 'cell' ? 'down' : 'stay' });\n } else if (key === 'Tab') {\n const next = this.nextEditableCell(cell, event.shiftKey ? 'previous' : 'next');\n if (next) {\n event.preventDefault();\n this.commitEdit('keyboard', { move: event.shiftKey ? 'previous' : 'next' });\n } else this.commitEdit('keyboard', { move: 'stay' });\n } else if (key === 'F2') {\n event.preventDefault();\n this.commitEdit('keyboard', { move: 'stay' });\n }\n return;\n }\n if (session && session.columns.includes(cell.column) && session.cell.row === cell.row) {\n if (key === 'Escape') {\n event.preventDefault();\n this.cancelEdit();\n } else if (key === 'Enter') {\n event.preventDefault();\n this.commitEdit('keyboard', { move: 'stay' });\n }\n return;\n }\n /* A widget of a header cell: Escape and F2 return to the cell, Tab cycles\n the cell's widgets without leaving it. */\n if (\n insideWidget &&\n cell.row === HEADER_ROW &&\n target.closest('[data-part=\"column-actions\"]') !== null\n ) {\n if (key === 'Escape' || key === 'F2') {\n event.preventDefault();\n cellElement.focus();\n return;\n }\n if (key === 'Tab') {\n const widgets = [\n ...cellElement.querySelectorAll<HTMLElement>(\n '[data-part=\"column-actions\"] button:not([disabled])',\n ),\n ];\n const index = widgets.indexOf(target);\n event.preventDefault();\n widgets[(index + (event.shiftKey ? -1 : 1) + widgets.length) % widgets.length]?.focus();\n return;\n }\n }\n if (insideWidget && !target.matches(SIMPLE_WIDGET)) {\n if (key === 'Escape') {\n event.preventDefault();\n cellElement.focus();\n } else if (key === 'Tab') {\n const widgets = [...cellElement.querySelectorAll<HTMLElement>(FOCUSABLE)];\n if (widgets.length > 1) {\n const index = widgets.indexOf(target);\n event.preventDefault();\n widgets[(index + (event.shiftKey ? -1 : 1) + widgets.length) % widgets.length]?.focus();\n }\n }\n return;\n }\n\n const header = cell.row === HEADER_ROW;\n const column = this.resolvedById().get(cell.column);\n const row = isBodyRow(cell.row) ? this.rowOf(cell.row) : undefined;\n const grid = this.cursorGrid();\n const mode = this.resolvedSelectionMode();\n\n if (header && column) {\n /* Shift+F10 and the Menu key open the column menu on the header cell. */\n if (\n (key === 'ContextMenu' || (key === 'F10' && event.shiftKey)) &&\n !target.closest(EDITABLE)\n ) {\n if (this.openColumnMenu(cell.column, cellElement, 'keyboard', event, cellElement)) {\n event.preventDefault();\n this.keyboardMenuAt = Date.now();\n }\n return;\n }\n if (ctrl && event.shiftKey && (key === 'ArrowLeft' || key === 'ArrowRight')) {\n event.preventDefault();\n this.resizeBy(\n cell.column,\n (key === 'ArrowRight') !== mirror ? RESIZE_STEP : -RESIZE_STEP,\n event,\n );\n return;\n }\n if (ctrl && event.shiftKey && key === 'Enter') {\n event.preventDefault();\n this.fit(cell.column, 'keyboard', event);\n return;\n }\n /* F2 enters the header cell: its widgets are the column's help, its\n filter and its menu, and a reader reaches them without a pointer. */\n if (key === 'F2' && !insideWidget) {\n const first = cellElement.querySelector<HTMLElement>(\n '[data-part=\"column-actions\"] button:not([disabled])',\n );\n if (first) {\n event.preventDefault();\n first.focus();\n }\n return;\n }\n if (event.altKey && (key === 'ArrowLeft' || key === 'ArrowRight')) {\n event.preventDefault();\n this.moveColumn(cell.column, (key === 'ArrowRight') !== mirror ? 1 : -1, event);\n this.pendingFocus = cell;\n this.flushFocus();\n return;\n }\n if (ctrl && key === 'Enter') {\n event.preventDefault();\n cellElement.querySelector<HTMLElement>('[data-part=\"column-menu\"]')?.click();\n return;\n }\n if ((key === 'Enter' || key === ' ') && !insideWidget) {\n event.preventDefault();\n this.pressSort(cell.column, event.shiftKey, event, 'keyboard');\n return;\n }\n }\n\n if (\n isGroupCursorRow(cell.row) &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n !event.shiftKey\n ) {\n const groupKey = cell.row.slice(GROUP_ROW_PREFIX.length);\n const held = this.expandedGroups();\n const open = held === 'all' || held.includes(groupKey);\n if (((key === 'ArrowRight') !== mirror) !== open) {\n event.preventDefault();\n this.toggleGroup(groupKey, event, 'keyboard');\n return;\n }\n }\n /* Alt with the vertical arrows moves the row, as Alt with the\n horizontal ones moves the column. */\n if (row && event.altKey && (key === 'ArrowUp' || key === 'ArrowDown')) {\n event.preventDefault();\n this.moveRow(cell.row, key === 'ArrowDown' ? 1 : -1, event);\n this.pendingFocus = cell;\n return;\n }\n\n /* In the tree column, the horizontal arrows open a closed branch, close\n an open one, and climb to the parent from a closed row or a leaf. */\n const treeColumn = this.treeColumn();\n if (\n row &&\n treeColumn !== null &&\n cell.column === treeColumn &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n !event.shiftKey\n ) {\n const node = this.nodeByKey().get(cell.row);\n const branch =\n node !== undefined && (node.childCount > 0 || this.tree()?.hasChildren?.(row) === true);\n const opening = (key === 'ArrowRight') !== mirror;\n if (node && branch && opening !== node.open) {\n event.preventDefault();\n this.toggleBranch(cell.row, event, 'keyboard');\n return;\n }\n if (node && !opening && node.parent !== null) {\n event.preventDefault();\n this.setCurrent({ row: node.parent, column: cell.column }, 'keyboard', event);\n return;\n }\n }\n if (\n row &&\n cell.column === EXPANDER_COLUMN &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n !event.shiftKey &&\n this.isExpandable(row)\n ) {\n const open = this.expandedSet().has(cell.row);\n if (((key === 'ArrowRight') !== mirror) !== open) {\n event.preventDefault();\n this.toggleExpanded(cell.row, event, 'keyboard');\n return;\n }\n }\n\n if (key === ' ' && event.shiftKey && row) {\n event.preventDefault();\n if (mode === 'range') {\n const line = rowRange(grid, cell.row);\n if (line) this.requestRange(line, 'keyboard', event);\n } else this.toggleSelected(cell.row, { range: false, source: event, reason: 'keyboard' });\n return;\n }\n if (key === ' ' && ctrl && mode === 'range' && column) {\n event.preventDefault();\n const line = columnRange(grid, cell.column);\n if (line) this.requestRange(line, 'keyboard', event);\n return;\n }\n if ((key === 'a' || key === 'A') && ctrl && !insideWidget) {\n if (mode === 'multiple') {\n event.preventDefault();\n this.commitSelection(this.selectableKeys(), 'select', event);\n return;\n }\n if (mode === 'range') {\n event.preventDefault();\n const all = wholeRange(grid);\n if (all) this.requestRange(all, 'keyboard', event);\n return;\n }\n }\n if ((key === 'c' || key === 'C') && ctrl && !insideWidget) {\n const selection = cellElement.ownerDocument.getSelection();\n if (selection && selection.toString().length > 0) return;\n event.preventDefault();\n void this.copyRange(cell);\n return;\n }\n if (key === 'Escape' && mode === 'range' && this.range()) {\n event.preventDefault();\n this.requestRange(null, 'clear', event);\n return;\n }\n\n /* The pop-in is a cell of the row: it edits nothing, and Enter enters its\n widgets or activates the row as any other cell does. */\n if (row && (column || cell.column === POPIN_COLUMN_ID) && (key === 'Enter' || key === 'F2')) {\n const editable = column !== undefined && this.isEditable(column.column, row);\n if (editable && !insideWidget) {\n event.preventDefault();\n this.startEdit(cell);\n return;\n }\n const widgets = cellElement.querySelectorAll<HTMLElement>(FOCUSABLE);\n if (!insideWidget && widgets.length > 0) {\n event.preventDefault();\n widgets[0]!.focus();\n return;\n }\n if (key === 'Enter' && this.activatable() && !insideWidget) {\n event.preventDefault();\n this.activate.emit({ key: cell.row, reason: 'keyboard', event });\n return;\n }\n }\n if (\n row &&\n column &&\n !insideWidget &&\n key.length === 1 &&\n !ctrl &&\n !event.altKey &&\n (column.kind === 'text' || column.kind === 'number') &&\n this.isEditable(column.column, row)\n ) {\n if (column.kind === 'number' && !/[0-9.,-]/.test(key)) return;\n event.preventDefault();\n this.startEdit(cell, key);\n return;\n }\n\n const intents: Record<string, CursorIntent> = {\n ArrowUp: 'up',\n ArrowDown: 'down',\n ArrowLeft: mirror ? 'end' : 'start',\n ArrowRight: mirror ? 'start' : 'end',\n Home: ctrl ? 'first' : 'rowStart',\n End: ctrl ? 'last' : 'rowEnd',\n PageUp: 'pageUp',\n PageDown: 'pageDown',\n };\n const intent = intents[key];\n if (!intent) return;\n if (\n insideWidget &&\n (key === 'ArrowLeft' || key === 'ArrowRight' || key === 'Home' || key === 'End') &&\n target.matches('input:not([type=\"checkbox\"]):not([type=\"radio\"]), textarea')\n ) {\n return;\n }\n event.preventDefault();\n const next = this.landOn(moveCursor(grid, cell, intent));\n if (event.shiftKey && key.startsWith('Arrow')) {\n if (mode === 'range' && isBodyRow(next.row)) {\n this.requestRange({ anchor: this.range()?.anchor ?? cell, focus: next }, 'keyboard', event);\n } else if (\n mode === 'multiple' &&\n (key === 'ArrowUp' || key === 'ArrowDown') &&\n isBodyRow(next.row)\n ) {\n this.toggleSelected(next.row, { range: true, source: event, reason: 'keyboard' });\n }\n }\n if (!sameCell(next, cell)) this.setCurrent(next, 'keyboard', event);\n }\n\n /* ── Imperative surface ─────────────────────────────────────────────── */\n scrollToRow(key: string, align: 'start' | 'center' | 'end' | 'nearest' = 'nearest') {\n const index = this.nodes().findIndex((node) => node.key === key);\n const scroller = this.scrollRef()?.nativeElement;\n if (index === -1 || !scroller) return;\n const metrics = this.metrics();\n const size = this.rowSize();\n const offset = metrics ? metrics.offsetOf(index) : index * size;\n const head = scroller.querySelector<HTMLElement>('[data-part=\"head\"]')?.offsetHeight ?? 0;\n const height = this.viewport().height;\n let top = offset;\n if (align === 'center') top = offset - height / 2 + size;\n else if (align === 'end') top = offset - height + size + head;\n else if (align === 'nearest') {\n const visibleTop = scroller.scrollTop;\n const visibleBottom = visibleTop + height - head;\n if (offset >= visibleTop && offset + size <= visibleBottom) return;\n top = offset < visibleTop ? offset : offset - height + size + head;\n }\n scroller.scrollTo({ top: Math.max(0, top) });\n if (this.windowsRows()) this.heldRows.set([key]);\n }\n scrollToColumn(columnId: string) {\n const scroller = this.scrollRef()?.nativeElement;\n const column = this.resolvedById().get(columnId);\n if (!scroller || !column || column.pinned) return;\n const gutters = this.gutters().reduce((sum, width) => sum + width, 0);\n let offset = gutters;\n for (const entry of this.resolved()) {\n if (entry.id === columnId) break;\n if (entry.pinned === null || entry.pinned === 'start') offset += entry.width;\n }\n const startZone =\n this.resolved()\n .filter((entry) => entry.pinned === 'start')\n .reduce((sum, entry) => sum + entry.width, 0) + gutters;\n const endZone = this.resolved()\n .filter((entry) => entry.pinned === 'end')\n .reduce((sum, entry) => sum + entry.width, 0);\n const left = Math.abs(scroller.scrollLeft);\n const width = this.viewport().width;\n if (offset < left + startZone) scroller.scrollTo({ left: offset - startZone });\n else if (offset + column.width > left + width - endZone)\n scroller.scrollTo({ left: offset + column.width - width + endZone });\n }\n scrollToCell(cell: GridCell) {\n this.scrollToRow(cell.row);\n this.scrollToColumn(cell.column);\n }\n getVisibleRows(): readonly Row[] {\n return this.resolvedMode() === 'client' ? this.applied().rows : this.rows();\n }\n /** The file's text, by `toCsv`, for the consumer who sends it elsewhere. */\n toCsv(options: DataGridExportOptions = {}): string {\n const { filename: _filename, rows: which, columns: whichColumns, ...csv } = options;\n const visible = this.getVisibleRows();\n const selected = this.selectedSet();\n const chosen =\n which === 'selected' ? visible.filter((row) => selected.has(this.rowKeyOf(row))) : visible;\n const model =\n whichColumns === 'all' ? this.columns() : this.resolved().map((column) => column.column);\n return toCsv(chosen, model, {\n ...this.formatOptions(),\n ...csv,\n booleans: csv.booleans ?? this.formatOptions().booleans,\n });\n }\n /**\n * Builds the file and hands it to the browser as a download: an anchor is\n * the one way a browser saves a file without a permission prompt, and the\n * URL is revoked as soon as the click has taken it.\n */\n exportCsv(options: DataGridExportOptions = {}) {\n const text = this.toCsv(options);\n const doc = this.host.nativeElement.ownerDocument;\n const url = URL.createObjectURL(new Blob([text], { type: 'text/csv;charset=utf-8' }));\n const link = doc.createElement('a');\n link.href = url;\n link.download = options.filename ?? 'export.csv';\n link.click();\n URL.revokeObjectURL(url);\n }\n\n /* ── Forms ──────────────────────────────────────────────────────────── */\n writeValue(value: DataGridSelection | undefined) {\n this.value.set(value ?? (this.resolvedSelectionMode() === 'multiple' ? [] : null));\n }\n registerOnChange(fn: (value: DataGridSelection) => void) {\n this.notify = fn;\n }\n registerOnTouched(fn: () => void) {\n this.touched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n emptyGridView,\n normalizeColumnState,\n parseGridView,\n serializeGridView,\n type GridColumn,\n type GridColumnState,\n type GridDensity,\n type GridQuery,\n type GridView,\n type GridViewOptions,\n type GridViewStorage,\n} from '@slotted/core/grid';\n\nexport type { GridViewStorage } from '@slotted/core/grid';\n\nexport interface PersistedGridViewOptions<Row> extends GridViewOptions {\n /** The entry the view is kept under. */\n readonly key: string;\n /** The model, so a column it no longer has is dropped on read. */\n readonly columns: readonly GridColumn<Row>[];\n /** Default `window.localStorage`; `null` keeps the view in memory only. */\n readonly storage?: GridViewStorage | null | undefined;\n /** What the view is before anything was saved, and after `reset`. */\n readonly defaultQuery?: GridQuery | undefined;\n readonly defaultColumnState?: Partial<GridColumnState> | undefined;\n /** The density before anything was saved, and after `reset`. Default `null`: the page's. */\n readonly defaultDensity?: GridDensity | null | undefined;\n /** Required outside an injection context. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedGridView {\n /** Bind with `[(query)]`. */\n readonly query: WritableSignal<GridQuery>;\n /** Bind with `[(columnState)]`. */\n readonly columnState: WritableSignal<GridColumnState>;\n /** Bind with `[density]`; `null` inherits the page's density. */\n readonly density: WritableSignal<GridDensity | null>;\n /** Back to the defaults, and the entry removed. */\n reset(): void;\n}\n\nfunction defaultStorage(): GridViewStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * The reader's view of a grid, kept across visits: the column state, the\n * query and the density, read once from the store and written after every change. Three\n * writable signals for the grid's bindings. The store is reached\n * inside `try` both ways — a private window that refuses, a quota that is\n * full and a server that has no window all leave the view in memory.\n */\nexport function persistedGridView<Row>({\n key,\n columns,\n storage,\n defaultQuery,\n defaultColumnState,\n defaultDensity,\n injector,\n ...options\n}: PersistedGridViewOptions<Row>): PersistedGridView {\n const store = storage === undefined ? defaultStorage() : storage;\n const defaults: GridView = {\n columns: normalizeColumnState(defaultColumnState ?? null, columns),\n query: defaultQuery ?? emptyGridView(options.defaultPageSize).query,\n density: defaultDensity ?? null,\n };\n let text: string | null;\n try {\n text = store?.getItem(key) ?? null;\n } catch {\n text = null;\n }\n let initial = defaults;\n if (text !== null && text !== '') {\n const saved = parseGridView(text, columns, options);\n initial = {\n columns: saved.columns,\n /* A saved query with no page keeps the default's page: the page size is\n the application's, and an older entry may predate paging. */\n query:\n saved.query.page === null ? { ...saved.query, page: defaults.query.page } : saved.query,\n density: saved.density ?? defaults.density,\n };\n }\n const query = signal<GridQuery>(initial.query);\n const columnState = signal<GridColumnState>(initial.columns);\n const density = signal<GridDensity | null>(initial.density);\n\n /* The first run is the read; every run after is a change to write, except\n the one a reset causes. */\n let settled = false;\n let skip = false;\n effect(\n () => {\n const view: GridView = { query: query(), columns: columnState(), density: density() };\n if (!settled || skip) {\n settled = true;\n skip = false;\n return;\n }\n untracked(() => {\n if (!store) return;\n try {\n const next = serializeGridView(view, columns, options);\n if (next === '') store.removeItem(key);\n else store.setItem(key, next);\n } catch {\n /* The store refused; the view stays in memory. */\n }\n });\n },\n injector ? { injector } : undefined,\n );\n\n return {\n query,\n columnState,\n density,\n /* The defaults are what an empty store means, so the entry goes rather\n than being rewritten as the defaults. */\n reset: () => {\n /* A signal set to the object it holds notifies nothing, so the skip is\n armed only when the effect will run. */\n skip =\n query() !== defaults.query ||\n columnState() !== defaults.columns ||\n density() !== defaults.density;\n query.set(defaults.query);\n columnState.set(defaults.columns);\n density.set(defaults.density);\n try {\n store?.removeItem(key);\n } catch {\n /* The store refused; nothing was kept in it either way. */\n }\n },\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-data-grid.mjs","sources":["../../data-grid/src/data-grid-controls.ts","../../data-grid/src/data-grid-defaults.ts","../../data-grid/src/data-grid-templates.ts","../../data-grid/src/data-grid.ts","../../data-grid/src/persisted-grid-view.ts","../../data-grid/src/slotted-angular-data-grid.ts"],"sourcesContent":["import {\n isPlainDate,\n isPlainDateTime,\n isPlainTime,\n parseISODate,\n parseISODateTime,\n parseISOTime,\n toISODate,\n toISODateTime,\n toISOTime,\n} from '@slotted/core/date';\nimport type { PlainDate, PlainDateTime, PlainTime } from '@slotted/core/date';\nimport {\n defaultOperator,\n describeFilter,\n emptyFilter,\n isConditionActive,\n isFilterActive,\n normalizeFilter,\n operandCount,\n operatorsFor,\n serializeFilter,\n withCondition,\n withJoin,\n} from '@slotted/core/filter';\nimport type { DataGridMessages, FamilyTranslator } from '@slotted/core/i18n';\nimport type {\n FilterCondition,\n FilterDescriptor,\n FilterJoin,\n FilterKind,\n FilterOperator,\n} from '@slotted/core/filter';\nimport type { GridColumn, ResolvedGridColumn } from '@slotted/core/grid';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { TemplateRef } from '@angular/core';\n\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCheckbox } from '@slotted/angular/checkbox';\nimport { SlDateField } from '@slotted/angular/date-field';\nimport { SlDatePicker } from '@slotted/angular/date-picker';\nimport { SlDateRangePicker } from '@slotted/angular/date-range-picker';\nimport { SlDateTimeField } from '@slotted/angular/datetime-field';\nimport { SlDateTimePicker } from '@slotted/angular/datetime-picker';\nimport { SlDateTimeRangePicker } from '@slotted/angular/datetime-range-picker';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport { SlNumberField, SlNumberFieldInput } from '@slotted/angular/number-field';\nimport { SlSegment, SlSegmentedControl } from '@slotted/angular/segmented-control';\nimport { SlMultiSelect, SlMultiSelectItem } from '@slotted/angular/multi-select';\nimport { SlSelect, SlSelectItem } from '@slotted/angular/select';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\nimport { SlTimeField } from '@slotted/angular/time-field';\nimport { SlTimePicker } from '@slotted/angular/time-picker';\nimport { SlTimeRangePicker } from '@slotted/angular/time-range-picker';\nimport type { DataGridFilterOperandContext } from './data-grid-defaults';\n\ntype Condition = FilterCondition<string, unknown>;\n\nconst FILTER_KINDS: readonly string[] = [\n 'text',\n 'number',\n 'date',\n 'time',\n 'datetime',\n 'boolean',\n 'set',\n];\n\nexport function filterKindOf(kind: string): FilterKind | null {\n return FILTER_KINDS.includes(kind) ? (kind as FilterKind) : null;\n}\n\nexport function timeOf(text: unknown): PlainTime | null {\n if (!text) return null;\n const written = String(text);\n return parseISOTime(/^\\d{2}$/.test(written) ? `${written}:00` : written);\n}\n\nexport function dateTimeOf(text: unknown): PlainDateTime | null {\n if (!text) return null;\n const written = String(text);\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(written)) return parseISODateTime(`${written}T00:00`);\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}$/.test(written)) return parseISODateTime(`${written}:00`);\n return parseISODateTime(written);\n}\n\nexport function dateOf(text: unknown): PlainDate | null {\n return text ? parseISODate(String(text)) : null;\n}\n\nfunction sameFilter(a: FilterDescriptor | null, b: FilterDescriptor | null) {\n return serializeFilter(a) === serializeFilter(b);\n}\n\n/**\n * The control an operand of a kind is edited in: one family per kind, all at\n * `sm`; `plain` in the filter row and `outline` in the panel. A date, a time\n * and a date-time are pickers — the field with the control that opens the\n * calendar or the list beside it — because a reader who does not type dates\n * still has to filter by one.\n */\n@Component({\n selector: 'sl-data-grid-operand',\n standalone: true,\n imports: [\n SlDatePicker,\n SlDateTimePicker,\n SlMultiSelect,\n SlMultiSelectItem,\n SlNumberField,\n SlNumberFieldInput,\n SlSelect,\n SlSelectItem,\n SlTextField,\n SlTextFieldInput,\n SlTimePicker,\n ],\n template: `\n @switch (kind()) {\n @case ('number') {\n <div slNumberField size=\"sm\" stepper=\"none\" [variant]=\"variant()\">\n <input\n slNumberFieldInput\n [value]=\"numberValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n [attr.placeholder]=\"placeholder() ?? label()\"\n (valueChange)=\"valueChange.emit($event.value)\"\n (keydown.enter)=\"applyRequest.emit()\"\n />\n </div>\n }\n @case ('date') {\n <div\n slDatePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [value]=\"dateValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n (valueChange)=\"valueChange.emit(isoDay($event.value))\"\n (keydown.enter)=\"applyRequest.emit()\"\n ></div>\n }\n @case ('time') {\n <div\n slTimePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [value]=\"timeValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n (valueChange)=\"valueChange.emit(isoTime($event.value))\"\n (keydown.enter)=\"applyRequest.emit()\"\n ></div>\n }\n @case ('datetime') {\n <div\n slDateTimePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [value]=\"dateTimeValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"label()\"\n (valueChange)=\"valueChange.emit(isoDateTime($event.value))\"\n (keydown.enter)=\"applyRequest.emit()\"\n ></div>\n }\n @case ('boolean') {\n <sl-select\n size=\"sm\"\n width=\"content\"\n [variant]=\"variant()\"\n [fullWidth]=\"true\"\n [items]=\"truths()\"\n [placeholder]=\"t()('filterAny')\"\n [aria-label]=\"label()\"\n [value]=\"value() === true ? 'true' : value() === false ? 'false' : null\"\n (valueChange)=\"\n valueChange.emit($event === 'true' ? true : $event === 'false' ? false : null)\n \"\n >\n <sl-select-item value=\"true\">{{ t()('filterYes') }}</sl-select-item>\n <sl-select-item value=\"false\">{{ t()('filterNo') }}</sl-select-item>\n </sl-select>\n }\n @case ('set') {\n <sl-multi-select\n size=\"sm\"\n width=\"content\"\n overflow=\"collapse\"\n [variant]=\"variant()\"\n [fullWidth]=\"true\"\n [items]=\"setItems()\"\n [locale]=\"locale()\"\n [placeholder]=\"t()('filterAny')\"\n [aria-label]=\"label()\"\n [value]=\"setValue()\"\n (valueChange)=\"valueChange.emit([...$event])\"\n >\n @for (option of setOptions(); track option.value) {\n <sl-multi-select-item\n [value]=\"option.value\"\n [label]=\"option.label + countOf(option.value)\"\n />\n }\n </sl-multi-select>\n }\n @default {\n <div slTextField size=\"sm\" [variant]=\"variant()\">\n <input\n slTextFieldInput\n [value]=\"textValue()\"\n [attr.aria-label]=\"label()\"\n [attr.placeholder]=\"placeholder() ?? label()\"\n (input)=\"valueChange.emit($any($event.target).value)\"\n (keydown.enter)=\"applyRequest.emit()\"\n />\n </div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridOperand {\n readonly kind = input.required<FilterKind>();\n readonly column = input.required<GridColumn<unknown>>();\n readonly value = input<unknown>(null);\n readonly label = input.required<string>();\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly variant = input<'plain' | 'outline'>('outline');\n readonly locale = input<string | undefined>(undefined);\n readonly counts = input<ReadonlyMap<string, number> | undefined>(undefined);\n readonly placeholder = input<string | undefined>(undefined);\n readonly valueChange = output<unknown>();\n readonly applyRequest = output<void>();\n\n protected readonly numberValue = computed(() =>\n typeof this.value() === 'number' ? (this.value() as number) : null,\n );\n protected readonly textValue = computed(() => {\n const value = this.value();\n return value === null || value === undefined ? '' : String(value);\n });\n protected readonly dateValue = computed(() => dateOf(this.value()));\n protected readonly timeValue = computed(() => timeOf(this.value()));\n protected readonly dateTimeValue = computed(() => dateTimeOf(this.value()));\n protected readonly truths = computed(() => [\n { label: this.t()('filterYes'), value: 'true' },\n { label: this.t()('filterNo'), value: 'false' },\n ]);\n protected readonly setOptions = computed(() => {\n const known = this.column().options ?? [];\n const seen = new Set(known.map((option) => option.value));\n const counts = this.counts();\n const extra = counts\n ? [...counts.keys()]\n .filter((key) => !seen.has(key))\n .map((key) => ({ value: key, label: key }))\n : [];\n return [...known, ...extra];\n });\n protected readonly setItems = computed(() =>\n this.setOptions().map((option) => ({ label: option.label, value: option.value })),\n );\n protected readonly setValue = computed(() =>\n Array.isArray(this.value()) ? (this.value() as readonly string[]) : [],\n );\n\n protected countOf(value: string) {\n const count = this.counts()?.get(value);\n return count === undefined ? '' : ` (${count})`;\n }\n protected asList(value: unknown) {\n return Array.isArray(value) ? value : value === null ? [] : [value];\n }\n protected isoDay(value: unknown) {\n return isPlainDate(value) ? toISODate(value) : null;\n }\n protected isoTime(value: unknown) {\n return isPlainTime(value) ? toISOTime(value, 'minute') : null;\n }\n protected isoDateTime(value: unknown) {\n return isPlainDateTime(value) ? toISODateTime(value) : null;\n }\n}\n\n/** The kinds whose `between` is one range picker rather than two fields. */\nconst RANGE_PICKER_KINDS: readonly string[] = ['date', 'time', 'datetime'];\n\n/** Whether the operator's two operands are edited in one control. */\nexport function isRangeOperand(kind: FilterKind, operator: string) {\n return operandCount(operator as FilterOperator) === 2 && RANGE_PICKER_KINDS.includes(kind);\n}\n\n/**\n * A `between` on a date, a time or a date-time is one range picker: one\n * frame that says the run while it is drawn, takes the ends in either order\n * and fits a column's width, where two fields side by side broke into two\n * lines at the widths a filter row has. The rule `table` took in its second\n * reopening. The descriptor is unchanged: two ISO operands.\n */\n@Component({\n selector: 'sl-data-grid-range-operand',\n standalone: true,\n imports: [SlDateRangePicker, SlDateTimeRangePicker, SlTimeRangePicker],\n template: `\n @switch (kind()) {\n @case ('time') {\n <div\n slTimeRangePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [locale]=\"locale()\"\n [messages]=\"{ start: t()('filterFrom'), end: t()('filterTo') }\"\n [value]=\"timeRange()\"\n (valueChange)=\"\n rangeChange.emit({\n start: isoTime($event.value?.start),\n end: isoTime($event.value?.end),\n })\n \"\n ></div>\n }\n @case ('datetime') {\n <div\n slDateTimeRangePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [locale]=\"locale()\"\n [messages]=\"{ start: t()('filterFrom'), end: t()('filterTo') }\"\n [value]=\"dateTimeRange()\"\n (valueChange)=\"\n rangeChange.emit({\n start: isoDateTime($event.value?.start),\n end: isoDateTime($event.value?.end),\n })\n \"\n ></div>\n }\n @default {\n <div\n slDateRangePicker\n size=\"sm\"\n [variant]=\"variant()\"\n [locale]=\"locale()\"\n [messages]=\"{ start: t()('filterFrom'), end: t()('filterTo') }\"\n [value]=\"dateRange()\"\n (valueChange)=\"\n rangeChange.emit({ start: isoDay($event.value?.start), end: isoDay($event.value?.end) })\n \"\n ></div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridRangeOperand {\n readonly kind = input.required<FilterKind>();\n readonly start = input<unknown>(null);\n readonly end = input<unknown>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly variant = input<'plain' | 'outline'>('outline');\n readonly locale = input<string | undefined>(undefined);\n readonly rangeChange = output<{ start: string | null; end: string | null }>();\n\n protected readonly dateRange = computed(() => ({\n start: dateOf(this.start()),\n end: dateOf(this.end()),\n }));\n protected readonly timeRange = computed(() => ({\n start: timeOf(this.start()),\n end: timeOf(this.end()),\n }));\n protected readonly dateTimeRange = computed(() => ({\n start: dateTimeOf(this.start()),\n end: dateTimeOf(this.end()),\n }));\n\n protected isoDay(value: unknown) {\n return isPlainDate(value) ? toISODate(value) : null;\n }\n protected isoTime(value: unknown) {\n return isPlainTime(value) ? toISOTime(value, 'minute') : null;\n }\n protected isoDateTime(value: unknown) {\n return isPlainDateTime(value) ? toISODateTime(value) : null;\n }\n}\n\n/**\n * The compact panel: one line per condition, the join as two words on the\n * second, Clear and Apply at the end. It edits a draft; nothing reaches the\n * grid until Apply.\n */\n@Component({\n selector: 'sl-data-grid-filter-panel',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlDataGridOperand,\n SlDataGridRangeOperand,\n SlSegment,\n SlSegmentedControl,\n SlSelect,\n SlSelectItem,\n ],\n template: `\n <div data-ui=\"data-grid\" data-part=\"filter-panel\" [attr.data-kind]=\"kind()\">\n @for (index of lines(); track index) {\n <div data-part=\"filter-condition\" [attr.data-operands]=\"operandsOf(index)\">\n @if (index === 1) {\n <div data-part=\"filter-join\">\n <div\n slSegmentedControl\n size=\"sm\"\n [value]=\"draft().join\"\n [attr.aria-label]=\"t()('filterJoin')\"\n (valueChange)=\"setJoin($event.value ?? 'and')\"\n >\n <label slSegment value=\"and\">{{ joinName('and') }}</label>\n <label slSegment value=\"or\">{{ joinName('or') }}</label>\n </div>\n </div>\n }\n <div data-part=\"filter-operator\">\n <sl-select\n size=\"sm\"\n width=\"content\"\n [fullWidth]=\"true\"\n [items]=\"operatorItems()\"\n [attr.aria-label]=\"t()('filterOperator')\"\n [value]=\"conditionAt(index).operator\"\n (valueChange)=\"setOperator(index, $any($event))\"\n >\n @for (operator of operators(); track operator) {\n <sl-select-item [value]=\"operator\">{{ operatorName(operator) }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div\n data-part=\"filter-operand\"\n [attr.data-kind]=\"kind()\"\n [attr.data-range]=\"operandsOf(index) === 2 && !rangeAt(index) ? '' : null\"\n >\n @if (rangeAt(index) && !customTemplate()) {\n <sl-data-grid-range-operand\n [kind]=\"kind()\"\n [start]=\"operandOf(index, 0)\"\n [end]=\"operandOf(index, 1)\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n variant=\"outline\"\n (rangeChange)=\"setOperands(index, $event.start, $event.end)\"\n />\n } @else {\n @for (slot of slotsOf(index); track slot) {\n @if (customTemplate(); as custom) {\n <span>\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"context(index, slot)\"\n />\n </span>\n } @else {\n <sl-data-grid-operand\n [kind]=\"kind()\"\n [column]=\"column().column\"\n [value]=\"operandOf(index, slot)\"\n [label]=\"operandLabel(index, slot)\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n [counts]=\"counts()\"\n variant=\"outline\"\n (valueChange)=\"setOperand(index, slot, $event)\"\n (applyRequest)=\"apply('keyboard')\"\n />\n }\n }\n }\n </div>\n </div>\n }\n <div data-part=\"filter-actions\">\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"ghost\"\n [disabled]=\"!clearable()\"\n (click)=\"clear()\"\n >\n {{ t()('filterClear') }}\n </button>\n <button slButton type=\"button\" size=\"sm\" (click)=\"apply('pointer')\">\n {{ t()('filterApply') }}\n </button>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridFilterPanel {\n readonly column = input.required<ResolvedGridColumn<unknown>>();\n readonly kind = input.required<FilterKind>();\n readonly committed = input<FilterDescriptor | null>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly locale = input<string | undefined>(undefined);\n readonly counts = input<ReadonlyMap<string, number> | undefined>(undefined);\n readonly customTemplate = input<TemplateRef<DataGridFilterOperandContext> | null>(null);\n /** The normalised descriptor, or null, with how it was applied. */\n readonly applyRequest = output<{\n filter: FilterDescriptor | null;\n reason: 'pointer' | 'keyboard' | 'clear';\n said: string;\n }>();\n\n /** Written by the effect below before the first read: the inputs are not set at construction. */\n readonly draft = signal<FilterDescriptor>(emptyFilter('text') as FilterDescriptor);\n\n constructor() {\n /* The draft starts from what is committed, every time the panel opens. */\n effect(() => {\n const committed = this.committed();\n this.draft.set(committed ?? this.blank());\n });\n }\n\n private blank(): FilterDescriptor {\n return emptyFilter(this.kind()) as FilterDescriptor;\n }\n\n protected readonly operators = computed(() => operatorsFor(this.kind()) as readonly string[]);\n protected readonly operatorItems = computed(() =>\n this.operators().map((operator) => ({ label: this.operatorName(operator), value: operator })),\n );\n protected readonly lines = computed<readonly (0 | 1)[]>(() => {\n if (this.kind() === 'set') return [0];\n return isConditionActive(this.kind(), this.conditionAt(0)) ? [0, 1] : [0];\n });\n protected readonly clearable = computed(\n () => isFilterActive(this.draft()) || this.committed() !== null,\n );\n\n protected conditionAt(index: number): Condition {\n return this.draft().conditions[index] ?? { operator: defaultOperator(this.kind()) as string };\n }\n protected operandsOf(index: number) {\n return operandCount(this.conditionAt(index).operator as FilterOperator);\n }\n protected slotsOf(index: number): readonly (0 | 1)[] {\n const operands = this.operandsOf(index);\n return operands === 0 ? [] : operands === 1 ? [0] : [0, 1];\n }\n protected operandOf(index: number, slot: 0 | 1) {\n const condition = this.conditionAt(index);\n return (slot === 0 ? condition.value : condition.end) ?? null;\n }\n protected operandLabel(index: number, slot: 0 | 1) {\n const t = this.t();\n return this.operandsOf(index) === 2\n ? slot === 0\n ? t('filterFrom')\n : t('filterTo')\n : t('filterValue');\n }\n protected operatorName(operator: string) {\n return this.t()(`filterOperators.${operator as FilterOperator}`);\n }\n protected joinName(join: FilterJoin) {\n return this.t()(`filterJoins.${join}`);\n }\n protected context(index: number, slot: 0 | 1): DataGridFilterOperandContext {\n const value = this.operandOf(index, slot);\n return {\n $implicit: value,\n column: this.column().id,\n operator: this.conditionAt(index).operator,\n value,\n setValue: (next) => this.setOperand(index, slot, next),\n apply: () => this.apply('keyboard'),\n label: this.operandLabel(index, slot),\n };\n }\n protected setJoin(join: string) {\n this.draft.set(withJoin(this.draft(), join as FilterJoin));\n }\n protected setOperator(index: number, operator: string) {\n const condition = this.conditionAt(index);\n const before = operandCount(condition.operator as FilterOperator);\n const after = operandCount(operator as FilterOperator);\n const next: Condition = {\n operator,\n ...(after >= 1 && before >= 1 ? { value: condition.value } : {}),\n ...(after === 2 && before === 2 ? { end: condition.end } : {}),\n };\n this.draft.set(withCondition(this.draft(), index, next as never));\n }\n protected setOperand(index: number, slot: 0 | 1, operand: unknown) {\n const condition = this.conditionAt(index);\n const next: Condition =\n slot === 0 ? { ...condition, value: operand } : { ...condition, end: operand };\n this.draft.set(withCondition(this.draft(), index, next as never));\n }\n protected setOperands(index: number, start: unknown, end: unknown) {\n const next: Condition = { ...this.conditionAt(index), value: start, end };\n this.draft.set(withCondition(this.draft(), index, next as never));\n }\n protected rangeAt(index: number) {\n return isRangeOperand(this.kind(), this.conditionAt(index).operator);\n }\n protected apply(reason: 'pointer' | 'keyboard') {\n const next = normalizeFilter(this.draft());\n const t = this.t();\n const name = this.column().column.label;\n const format = {\n join: (join: FilterJoin) => this.joinName(join),\n operator: (operator: FilterOperator) => this.operatorName(operator),\n };\n const said = next\n ? t('filterApplied', { column: name, filter: describeFilter(next, format) })\n : t('filterCleared', { column: name });\n this.applyRequest.emit({\n filter: sameFilter(next, this.committed()) ? this.committed() : next,\n reason,\n said,\n });\n }\n protected clear() {\n this.draft.set(this.blank());\n const t = this.t();\n this.applyRequest.emit({\n filter: null,\n reason: 'clear',\n said: t('filterCleared', { column: this.column().column.label }),\n });\n }\n}\n\n/**\n * The operand of the filter row: the kind's control, `plain`, filling the\n * cell, with the operator as a symbol button at its start. Text and number\n * apply after the debounce and on Enter; the others on change.\n */\n@Component({\n selector: 'sl-data-grid-filter-row-operand',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n SlDataGridOperand,\n SlDataGridRangeOperand,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n ],\n template: `\n <div\n data-part=\"filter-operand\"\n [attr.data-kind]=\"kind()\"\n [attr.data-range]=\"operands() === 2 && !range() ? '' : null\"\n >\n <div data-part=\"filter-operator\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [slMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"t()('filterOperatorChosen', { operator: operatorName(operator()) })\"\n [attr.title]=\"operatorName(operator())\"\n >\n {{ symbol() }}\n </button>\n <sl-menu #menu size=\"sm\">\n @for (entry of operators(); track entry) {\n <button slMenuItem (select)=\"chooseOperator(entry)\">{{ operatorName(entry) }}</button>\n }\n </sl-menu>\n </div>\n @if (range() && !customTemplate()) {\n <sl-data-grid-range-operand\n [kind]=\"kind()\"\n [start]=\"draft().value\"\n [end]=\"draft().end\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n variant=\"plain\"\n (rangeChange)=\"writeBoth($event.start, $event.end)\"\n />\n } @else {\n @for (slot of slots(); track slot) {\n @if (customTemplate(); as custom) {\n <span>\n <ng-container [ngTemplateOutlet]=\"custom\" [ngTemplateOutletContext]=\"context(slot)\" />\n </span>\n } @else {\n <sl-data-grid-operand\n [kind]=\"kind()\"\n [column]=\"column().column\"\n [value]=\"slot === 0 ? draft().value : draft().end\"\n [label]=\"operandLabel(slot)\"\n [t]=\"t()\"\n [locale]=\"locale()\"\n [counts]=\"counts()\"\n [placeholder]=\"rowPlaceholder(slot)\"\n variant=\"plain\"\n (valueChange)=\"write(slot, $event)\"\n (applyRequest)=\"applyNow()\"\n />\n }\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridFilterRowOperand {\n readonly column = input.required<ResolvedGridColumn<unknown>>();\n readonly kind = input.required<FilterKind>();\n readonly committed = input<FilterDescriptor | null>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly locale = input<string | undefined>(undefined);\n readonly counts = input<ReadonlyMap<string, number> | undefined>(undefined);\n readonly debounce = input<number>(300);\n readonly customTemplate = input<TemplateRef<DataGridFilterOperandContext> | null>(null);\n readonly filterChange = output<{\n filter: FilterDescriptor | null;\n reason: 'pointer' | 'keyboard';\n }>();\n\n readonly operator = signal<string>('contains');\n readonly draft = signal<{ value: unknown; end: unknown }>({ value: null, end: null });\n private timer: ReturnType<typeof setTimeout> | undefined;\n private seen = '';\n\n constructor() {\n effect(() => {\n const committed = this.committed();\n const text = serializeFilter(committed);\n if (text === this.seen) return;\n this.seen = text;\n const condition = committed?.conditions[0];\n this.operator.set(condition?.operator ?? (defaultOperator(this.kind()) as string));\n this.draft.set({ value: condition?.value ?? null, end: condition?.end ?? null });\n });\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n protected readonly operators = computed(() => operatorsFor(this.kind()) as readonly string[]);\n protected readonly operands = computed(() => operandCount(this.operator() as FilterOperator));\n protected readonly slots = computed<readonly (0 | 1)[]>(() => {\n const operands = this.operands();\n return operands === 0 ? [] : operands === 1 ? [0] : [0, 1];\n });\n protected readonly symbol = computed(() =>\n this.t()(`filterSymbols.${this.operator() as FilterOperator}`),\n );\n protected readonly range = computed(() => isRangeOperand(this.kind(), this.operator()));\n\n protected operatorName(operator: string) {\n return this.t()(`filterOperators.${operator as FilterOperator}`);\n }\n /* An amount in a filter is typed, never spun (`stepper=\"none\"` above): the\n steppers took a third of a filter cell and a `between` had room for one\n digit. The two ends of a `between` are named From and To. */\n protected rowPlaceholder(slot: 0 | 1) {\n const t = this.t();\n return this.operands() === 2 ? (slot === 0 ? t('filterFrom') : t('filterTo')) : t('filter');\n }\n protected operandLabel(slot: 0 | 1) {\n const t = this.t();\n const column = this.column().column.label;\n return this.operands() === 2\n ? t('filterRange', { bound: slot === 0 ? 'from' : 'to', column })\n : t('filterColumn', { column });\n }\n protected context(slot: 0 | 1): DataGridFilterOperandContext {\n const value = slot === 0 ? this.draft().value : this.draft().end;\n return {\n $implicit: value,\n column: this.column().id,\n operator: this.operator(),\n value,\n setValue: (next) => this.write(slot, next, true),\n apply: () => this.applyNow(),\n label: this.operandLabel(slot),\n };\n }\n private commit(\n operator: string,\n draft: { value: unknown; end: unknown },\n reason: 'pointer' | 'keyboard',\n ) {\n const descriptor = normalizeFilter({\n kind: this.kind(),\n join: 'and',\n conditions: [{ operator, value: draft.value, end: draft.end }],\n } as FilterDescriptor);\n if (sameFilter(descriptor, this.committed())) return;\n this.seen = serializeFilter(descriptor);\n this.filterChange.emit({ filter: descriptor, reason });\n }\n protected write(slot: 0 | 1, next: unknown, immediate = false) {\n const draft = slot === 0 ? { ...this.draft(), value: next } : { ...this.draft(), end: next };\n this.draft.set(draft);\n clearTimeout(this.timer);\n const run = () => this.commit(this.operator(), draft, 'keyboard');\n const kind = this.kind();\n if (immediate || (kind !== 'text' && kind !== 'number')) run();\n else this.timer = setTimeout(run, this.debounce());\n }\n protected writeBoth(start: unknown, end: unknown) {\n const draft = { value: start, end };\n this.draft.set(draft);\n clearTimeout(this.timer);\n this.commit(this.operator(), draft, 'keyboard');\n }\n protected applyNow() {\n clearTimeout(this.timer);\n this.commit(this.operator(), this.draft(), 'keyboard');\n }\n protected chooseOperator(next: string) {\n this.operator.set(next);\n const after = operandCount(next as FilterOperator);\n const kept = {\n value: after >= 1 ? this.draft().value : null,\n end: after === 2 ? this.draft().end : null,\n };\n this.draft.set(kept);\n this.commit(next, kept, 'pointer');\n }\n}\n\n/**\n * The editor a kind implies: the field family of that kind, `plain` and `sm`,\n * filling the cell. The draft is the domain value.\n */\n@Component({\n selector: 'sl-data-grid-editor',\n standalone: true,\n imports: [\n SlCheckbox,\n SlDateField,\n SlDateTimeField,\n SlNumberField,\n SlNumberFieldInput,\n SlSelect,\n SlSelectItem,\n SlTextField,\n SlTextFieldInput,\n SlTimeField,\n ],\n template: `\n @switch (kind()) {\n @case ('number') {\n <div slNumberField size=\"sm\" variant=\"plain\">\n <input\n slNumberFieldInput\n autofocus\n [invalid]=\"invalid() || undefined\"\n [value]=\"numberValue()\"\n [locale]=\"locale()\"\n [attr.aria-label]=\"column().label\"\n [attr.title]=\"message()\"\n (valueChange)=\"draftChange.emit($event.value)\"\n />\n </div>\n }\n @case ('boolean') {\n <span\n slCheckbox\n [checked]=\"draft() === true\"\n (checkedChange)=\"draftChange.emit($event.value)\"\n >\n <span data-ui=\"visually-hidden\" data-part=\"root\">{{ column().label }}</span>\n </span>\n }\n @case ('date') {\n <div\n slDateField\n size=\"sm\"\n variant=\"plain\"\n [value]=\"dateValue()\"\n [locale]=\"locale()\"\n [invalid]=\"invalid() || undefined\"\n [attr.aria-label]=\"column().label\"\n (valueChange)=\"draftChange.emit(isoDay($event.value))\"\n ></div>\n }\n @case ('time') {\n <div\n slTimeField\n size=\"sm\"\n variant=\"plain\"\n [value]=\"timeValue()\"\n [locale]=\"locale()\"\n [invalid]=\"invalid() || undefined\"\n [attr.aria-label]=\"column().label\"\n (valueChange)=\"draftChange.emit(isoTime($event.value))\"\n ></div>\n }\n @case ('datetime') {\n <div\n slDateTimeField\n size=\"sm\"\n variant=\"plain\"\n [value]=\"dateTimeValue()\"\n [locale]=\"locale()\"\n [invalid]=\"invalid() || undefined\"\n [attr.aria-label]=\"column().label\"\n (valueChange)=\"draftChange.emit(isoDateTime($event.value))\"\n ></div>\n }\n @case ('set') {\n <sl-select\n size=\"sm\"\n variant=\"plain\"\n [fullWidth]=\"true\"\n [multiple]=\"multiple()\"\n [items]=\"setItems()\"\n [placeholder]=\"t()('filterAny')\"\n [attr.aria-label]=\"column().label\"\n [value]=\"setValue()\"\n (valueChange)=\"draftChange.emit($event)\"\n >\n @for (option of column().options ?? []; track option.value) {\n <sl-select-item [value]=\"option.value\">{{ option.label }}</sl-select-item>\n }\n </sl-select>\n }\n @default {\n <div slTextField size=\"sm\" variant=\"plain\">\n <input\n slTextFieldInput\n autofocus\n [invalid]=\"invalid() || undefined\"\n [value]=\"textValue()\"\n [attr.aria-label]=\"column().label\"\n [attr.title]=\"message()\"\n (input)=\"draftChange.emit($any($event.target).value)\"\n />\n </div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { style: 'display: contents' },\n})\nexport class SlDataGridEditor {\n readonly column = input.required<GridColumn<unknown>>();\n readonly draft = input<unknown>(null);\n readonly value = input<unknown>(null);\n readonly invalid = input(false);\n readonly message = input<string | null>(null);\n /** The grid's words, in the language in force. */\n readonly t = input.required<FamilyTranslator<DataGridMessages>>();\n readonly locale = input<string | undefined>(undefined);\n readonly draftChange = output<unknown>();\n\n protected readonly kind = computed(() => this.column().kind ?? 'text');\n protected readonly multiple = computed(() => Array.isArray(this.value()));\n protected readonly numberValue = computed(() =>\n typeof this.draft() === 'number' ? (this.draft() as number) : null,\n );\n protected readonly textValue = computed(() => {\n const draft = this.draft();\n return draft === null || draft === undefined ? '' : String(draft);\n });\n protected readonly dateValue = computed(() => dateOf(this.draft()));\n protected readonly timeValue = computed(() => timeOf(this.draft()));\n protected readonly dateTimeValue = computed(() => dateTimeOf(this.draft()));\n protected readonly setItems = computed(() =>\n (this.column().options ?? []).map((option) => ({ label: option.label, value: option.value })),\n );\n protected readonly setValue = computed(() => {\n const draft = this.draft();\n if (this.multiple()) return (draft as readonly string[] | null) ?? [];\n return draft === null || draft === undefined ? null : String(draft);\n });\n\n protected isoDay(value: unknown) {\n return isPlainDate(value) ? toISODate(value) : null;\n }\n protected isoTime(value: unknown) {\n return isPlainTime(value) ? toISOTime(value, 'minute') : null;\n }\n protected isoDateTime(value: unknown) {\n return isPlainDateTime(value) ? toISODateTime(value) : null;\n }\n}\n","import type {\n CsvOptions,\n GridCell,\n GridColumn,\n GridColumnOverflow,\n GridColumnState,\n GridColumnStateChange,\n GridNode,\n GridQuery,\n GridQueryChange,\n GridRange,\n ResolvedGridColumn,\n} from '@slotted/core/grid';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport type DataGridVariant = 'plain' | 'ruled' | 'framed';\nexport type DataGridStickyTo = 'scroll' | 'page';\nexport type DataGridSelectionMode = 'none' | 'single' | 'multiple' | 'range';\nexport type DataGridEditMode = 'cell' | 'row';\nexport type DataGridMode = 'client' | 'server';\nexport type DataGridVirtualize = 'auto' | boolean;\nexport type DataGridRowHeight = number | 'auto';\n/**\n * What a frame too narrow for the template does: moves columns into the row's\n * pop-in, scrolls, or — `auto` — pops in on a phone-wide or a touch frame\n * narrower than a desktop and scrolls elsewhere.\n */\nexport type DataGridColumnOverflow = GridColumnOverflow;\nexport type DataGridReason = 'pointer' | 'keyboard' | 'clear' | 'select' | 'programmatic';\nexport type DataGridExpandedGroups = readonly string[] | 'all';\nexport type DataGridSelection = string | readonly string[] | null;\n\nexport interface DataGridDataSourceResult<Row> {\n readonly rows: readonly Row[];\n /** The whole set's size, when known. */\n readonly total?: number | undefined;\n /** Whether a page past this one exists, when the total is not known. */\n readonly hasMore?: boolean | undefined;\n}\n\nexport interface DataGridDataSource<Row> {\n getRows(\n query: GridQuery,\n options: { readonly signal: AbortSignal },\n ): Promise<DataGridDataSourceResult<Row>>;\n /** Answers kept, by query. Default 20; 0 keeps none. */\n readonly cacheSize?: number | undefined;\n}\n\nexport interface DataGridPinnedRows {\n readonly top?: readonly string[] | undefined;\n readonly bottom?: readonly string[] | undefined;\n}\n\nexport interface DataGridRowsReorderEvent {\n readonly key: string;\n /** The row's index in `rows`. */\n readonly from: number;\n /** The index the row takes in `rows` once moved. */\n readonly to: number;\n readonly reason: 'pointer' | 'keyboard';\n readonly event?: Event | undefined;\n}\n\nexport interface DataGridExportOptions extends Omit<CsvOptions, 'booleans'> {\n /** What a boolean writes in the file. Default: the grid's own words, `filterYes` and `filterNo`. */\n readonly booleans?: CsvOptions['booleans'] | undefined;\n /** Default `export.csv`. */\n readonly filename?: string | undefined;\n /** `visible`: the rows the query left (every page in client mode; the received page in server mode). `selected`: the selected rows, in the grid's order. Default `visible`. */\n readonly rows?: 'visible' | 'selected' | undefined;\n /** `visible`: the columns not hidden, in the reader's order. `all`: every column the model declares. Default `visible`. */\n readonly columns?: 'visible' | 'all' | undefined;\n}\n\n/** The request a query change carries: the value, plus which part of it moved. */\nexport interface DataGridQueryRequest extends ChangeRequest<GridQuery> {\n readonly change: GridQueryChange;\n}\n\nexport interface DataGridColumnStateRequest extends ChangeRequest<GridColumnState> {\n readonly change: GridColumnStateChange;\n}\n\nexport interface DataGridEditCommit<Row = unknown> {\n readonly key: string;\n readonly column: string;\n readonly value: unknown;\n readonly previous: unknown;\n readonly row: Row;\n readonly reason: 'keyboard' | 'pointer' | 'blur' | 'programmatic';\n readonly changes: Readonly<Record<string, unknown>>;\n /** A promise the consumer hands back keeps the cell pending until it settles. */\n wait(promise: Promise<void>): void;\n}\n\nexport interface DataGridActivateEvent {\n readonly key: string;\n readonly reason: 'pointer' | 'keyboard';\n readonly event: unknown;\n}\n\n/** What a projected cell template is handed. */\nexport interface DataGridCellContext<Row = unknown> {\n readonly $implicit: Row;\n readonly row: Row;\n readonly key: string;\n readonly column: GridColumn<Row>;\n readonly value: unknown;\n readonly text: string;\n readonly current: boolean;\n readonly selected: boolean;\n}\n\nexport interface DataGridEditorContext<Row = unknown> extends DataGridCellContext<Row> {\n readonly draft: unknown;\n readonly setDraft: (draft: unknown) => void;\n readonly commit: () => void;\n readonly cancel: () => void;\n readonly invalid: boolean;\n readonly message: string | null;\n}\n\nexport interface DataGridHeaderContext<Row = unknown> {\n readonly $implicit: GridColumn<Row>;\n readonly column: GridColumn<Row>;\n readonly resolved: ResolvedGridColumn<Row>;\n readonly sorted: 'ascending' | 'descending' | null;\n readonly sortIndex: number | null;\n readonly filtered: boolean;\n}\n\nexport interface DataGridGroupContext<Row = unknown> {\n readonly $implicit: Extract<GridNode<Row>, { kind: 'group' }>;\n readonly node: Extract<GridNode<Row>, { kind: 'group' }>;\n readonly column: GridColumn<Row>;\n readonly toggle: () => void;\n}\n\nexport interface DataGridFilterOperandContext {\n readonly $implicit: unknown;\n readonly column: string;\n readonly operator: string;\n readonly value: unknown;\n readonly setValue: (value: unknown) => void;\n readonly apply: () => void;\n readonly label: string;\n}\n\nexport type { GridCell, GridRange };\n\nexport interface DataGridDefaults {\n variant: DataGridVariant;\n striped: boolean;\n stickyHeader: boolean;\n stickyTo: DataGridStickyTo;\n selectionMode: DataGridSelectionMode;\n editMode: DataGridEditMode;\n filterRow: boolean;\n virtualize: DataGridVirtualize;\n rowHeight: DataGridRowHeight | undefined;\n columnOverflow: DataGridColumnOverflow;\n overscan: number;\n pageSizes: readonly number[];\n filterDebounce: number;\n loadMoreThreshold: number;\n skeletonRows: number;\n}\n\nconst FALLBACK: DataGridDefaults = {\n variant: 'ruled',\n striped: false,\n stickyHeader: true,\n stickyTo: 'scroll',\n selectionMode: 'none',\n editMode: 'cell',\n filterRow: false,\n virtualize: 'auto',\n rowHeight: undefined,\n columnOverflow: 'auto',\n overscan: 6,\n pageSizes: [25, 50, 100],\n filterDebounce: 300,\n loadMoreThreshold: 20,\n skeletonRows: 8,\n};\n\nexport const DATA_GRID_DEFAULTS = new InjectionToken<DataGridDefaults>(\n 'slotted data-grid defaults',\n {\n providedIn: 'root',\n factory: () => FALLBACK,\n },\n);\n\n/**\n * An application decides once how its grids are framed, how they select and\n * how they edit. A grid that states any of them itself still wins. Its words\n * and its locale come from the language in force (`provideSlotted`).\n */\nexport function provideDataGridDefaults(defaults: Partial<DataGridDefaults>) {\n return {\n provide: DATA_GRID_DEFAULTS,\n useFactory: (): DataGridDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\nexport function injectDataGridDefaults(): DataGridDefaults {\n return inject(DATA_GRID_DEFAULTS);\n}\n\n/** Application-scoped, so the server and the client produce the same sequence. */\n@Injectable({ providedIn: 'root' })\nexport class SlDataGridIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-data-grid-${this.count}`;\n }\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * The surfaces a consumer replaces, each an `ng-template` the grid reads\n * through `contentChildren` and renders only for the cells it mounts. A\n * column-scoped template names the column; one with no name serves every\n * column that has none of its own.\n */\n@Directive({ selector: 'ng-template[slDataGridCell]', standalone: true })\nexport class SlDataGridCellTemplate {\n /** The column id, or empty for every column. */\n readonly slDataGridCell = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridEditor]', standalone: true })\nexport class SlDataGridEditorTemplate {\n readonly slDataGridEditor = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridHeader]', standalone: true })\nexport class SlDataGridHeaderTemplate {\n readonly slDataGridHeader = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n/**\n * A column's help, opened from its column-help button in a popover under the\n * column's `description`. Named by column: a help for every column is a\n * description, and `GridColumn.description` already says that.\n */\n@Directive({ selector: 'ng-template[slDataGridColumnHelp]', standalone: true })\nexport class SlDataGridColumnHelp {\n /** The column id. */\n readonly slDataGridColumnHelp = input.required<string>();\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridFilter]', standalone: true })\nexport class SlDataGridFilterTemplate {\n readonly slDataGridFilter = input<string>('');\n readonly template = inject(TemplateRef);\n}\n\n/** A row's detail; its presence draws the expander column. */\n@Directive({ selector: 'ng-template[slDataGridDetail]', standalone: true })\nexport class SlDataGridDetailTemplate {\n readonly template = inject(TemplateRef);\n}\n\n@Directive({ selector: 'ng-template[slDataGridGroup]', standalone: true })\nexport class SlDataGridGroupTemplate {\n readonly template = inject(TemplateRef);\n}\n\n/** The empty, no-results or error state in place of the family's result-state. */\n@Directive({ selector: 'ng-template[slDataGridEmpty]', standalone: true })\nexport class SlDataGridEmptyTemplate {\n readonly template = inject(TemplateRef);\n}\n\n/** What stands in the bar under the grid: pagination, a count. */\n@Directive({ selector: '[slDataGridFooter]', standalone: true })\nexport class SlDataGridFooter {}\n","import { writeToClipboard } from '@slotted/core/clipboard';\nimport { createRowMetrics, nextSelection, virtualWindow } from '@slotted/core/collection';\nimport { createDragController, type DragController } from '@slotted/core/drag';\nimport { createFilterGroupPredicate, ruleFor, withoutRuleFor } from '@slotted/core/filter';\nimport type { FilterDescriptor, FilterKind } from '@slotted/core/filter';\nimport {\n applyQuery,\n cellText,\n columnsOutOfSpace,\n cellValue,\n serializeQuery,\n toCsv,\n columnRange,\n columnTemplate,\n emptyQuery,\n FILTER_ROW,\n GROUP_ROW_PREFIX,\n HEADER_ROW,\n isGroupCursorRow,\n moveCursor,\n normalizeColumnState,\n POPIN_COLUMN_ID,\n rangeBounds,\n rangeCells,\n rangeEdges,\n rangeToText,\n RESIZE_STEP,\n resolveColumnOverflow,\n resolveColumns,\n rowRange,\n sameCell,\n settleCursor,\n SUMMARY_ROW,\n wholeRange,\n withColumnFilter,\n withColumnHidden,\n withColumnMoved,\n withColumnPinned,\n withColumnWidth,\n withoutFilters,\n withSort,\n withSortPress,\n zoneOf,\n type CursorGrid,\n type CursorIntent,\n type GridCell,\n type GridColumn,\n type GridColumnGroup,\n type GridColumnState,\n type GridDensity,\n type GridNode,\n type GridOutOfSpace,\n type GridQuery,\n type GridRange,\n type ResolvedGridColumn,\n type SortDirection,\n type GridTree,\n} from '@slotted/core/grid';\nimport {\n dataGridMessages,\n dragMessages,\n type DataGridMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { createScrollAffordance } from '@slotted/core/overflow';\nimport type { PositionerAnchor } from '@slotted/core/positioner';\nimport { createControllable, type ChangeReason, type ChangeRequest } from '@slotted/core/state';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n Injector,\n input,\n model,\n numberAttribute,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\n\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCheckbox } from '@slotted/angular/checkbox';\nimport { SlMenu, SlMenuItem, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlPopover,\n SlPopoverAnchor,\n SlPopoverBody,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n} from '@slotted/angular/popover';\nimport {\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n} from '@slotted/angular/result-state';\nimport { SlSkeleton } from '@slotted/angular/skeleton';\nimport {\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n SlTooltipTrigger,\n} from '@slotted/angular/tooltip';\nimport {\n filterKindOf,\n SlDataGridEditor,\n SlDataGridFilterPanel,\n SlDataGridFilterRowOperand,\n} from './data-grid-controls';\nimport {\n injectDataGridDefaults,\n SlDataGridIdFactory,\n type DataGridActivateEvent,\n type DataGridCellContext,\n type DataGridColumnOverflow,\n type DataGridColumnStateRequest,\n type DataGridEditCommit,\n type DataGridEditMode,\n type DataGridEditorContext,\n type DataGridDataSource,\n type DataGridDataSourceResult,\n type DataGridExportOptions,\n type DataGridPinnedRows,\n type DataGridRowsReorderEvent,\n type DataGridExpandedGroups,\n type DataGridGroupContext,\n type DataGridHeaderContext,\n type DataGridMode,\n type DataGridQueryRequest,\n type DataGridReason,\n type DataGridRowHeight,\n type DataGridSelection,\n type DataGridSelectionMode,\n type DataGridStickyTo,\n type DataGridVariant,\n type DataGridVirtualize,\n} from './data-grid-defaults';\nimport {\n SlDataGridCellTemplate,\n SlDataGridColumnHelp,\n SlDataGridDetailTemplate,\n SlDataGridEditorTemplate,\n SlDataGridEmptyTemplate,\n SlDataGridFilterTemplate,\n SlDataGridFooter,\n SlDataGridGroupTemplate,\n SlDataGridHeaderTemplate,\n} from './data-grid-templates';\n\nexport const SELECTION_COLUMN = '__selection';\nexport const EXPANDER_COLUMN = '__expander';\n/** The reserved column that carries a row's drag handle. */\nexport const DRAG_COLUMN = '__drag';\nconst SELECTION_WIDTH = 48;\nconst EXPANDER_WIDTH = 40;\nconst DRAG_WIDTH = 40;\nconst DEFAULT_ROW_HEIGHT = 34;\n/** Milliseconds a changed cell stays marked when `highlightChanges` is `true`. */\nconst DEFAULT_CHANGED_DURATION = 1200;\n/** Answers a data source keeps, by query. */\nconst DEFAULT_CACHE_SIZE = 20;\nconst EMPTY_ROWS: readonly never[] = [];\n/** The out-of-space set of a frame not measured yet, or of a grid that scrolls instead. */\nconst NONE_OUT: GridOutOfSpace = { popin: [], hidden: [] };\nconst VIRTUALIZE_ROWS_FROM = 100;\nconst VIRTUALIZE_COLUMNS_FROM = 20;\n/** The viewport assumed until the scroller is measured. */\nconst PROVISIONAL_VIEWPORT = 600;\nconst COLUMN_OVERSCAN_PX = 400;\nconst SIMPLE_WIDGET =\n 'a[href], button, input[type=\"checkbox\"], input[type=\"radio\"], [role=\"switch\"], [role=\"button\"], [role=\"checkbox\"]';\n/** What an editor's focus lands on: its field, before any control beside it. */\nconst EDITOR_FIELD =\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([disabled]), textarea:not([disabled]), [role=\"combobox\"]:not([disabled]), [role=\"spinbutton\"]:not([disabled]), [role=\"checkbox\"], [role=\"switch\"]';\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]';\n/** Where a secondary press is the field's own: the browser's menu cuts, copies and pastes. */\nconst EDITABLE = 'input, textarea, select, [contenteditable]:not([contenteditable=\"false\"])';\n/**\n * The window after a keyboard opening of a column menu in which a\n * `contextmenu` is the one Windows fires for the key, not a second press:\n * `context-menu-trigger.ts`'s technique.\n */\nconst KEYBOARD_ECHO = 300;\n/** Milliseconds after a touch activation in which the `dblclick` the browser adds is ignored. */\nconst TOUCH_ECHO = 500;\n\n/** A rectangle with no size at the point the reader pressed. */\nfunction pointAnchor(x: number, y: number): PositionerAnchor {\n const rect = new DOMRect(x, y, 0, 0);\n return { getBoundingClientRect: () => rect };\n}\n\n/**\n * Whether a pointer event landed on a widget inside the cell — a link, a\n * button, a field — rather than on the cell itself. Asked of the cell and not\n * of the document: the scroller is focusable while the grid overflows, and\n * `closest` walked up to it from every value, so a press on a header's name\n * sorted nothing and only the cell's own padding answered. A press outside\n * the cell — on the menu it opened — is not its own either.\n */\nfunction insideWidget(event: Event) {\n const cell = event.currentTarget as HTMLElement;\n const target = event.target as HTMLElement | null;\n /* An event from a layer the cell owns — React bubbles a portal's events\n through the tree — is not the cell's own press either. */\n if (!target || !cell.contains(target)) return true;\n const widget = target.closest(FOCUSABLE);\n return widget !== null && widget !== cell && cell.contains(widget);\n}\n\ninterface EditSession {\n readonly cell: GridCell;\n readonly columns: readonly string[];\n readonly drafts: Readonly<Record<string, unknown>>;\n readonly originals: Readonly<Record<string, unknown>>;\n readonly status: 'editing' | 'pending' | 'invalid';\n readonly messages: Readonly<Record<string, string>>;\n}\n\ntype GroupNode = Extract<GridNode<unknown>, { kind: 'group' }>;\ntype RowNode = Extract<GridNode<unknown>, { kind: 'row' }>;\n\nfunction sameKeys(a: readonly string[] | 'all', b: readonly string[] | 'all') {\n if (a === 'all' || b === 'all') return a === b;\n return a.length === b.length && a.every((key, index) => key === b[index]);\n}\nfunction sameSelection(a: DataGridSelection, b: DataGridSelection) {\n if (Array.isArray(a) && Array.isArray(b)) return sameKeys(a, b);\n return a === b;\n}\nfunction sameRange(a: GridRange | null, b: GridRange | null) {\n if (!a || !b) return a === b;\n return sameCell(a.anchor, b.anchor) && sameCell(a.focus, b.focus);\n}\n/**\n * Where a drop at a boundary of the whole row lands inside the source's zone:\n * the index among the zone's members, or `null` when the column would not\n * move. A boundary past the zone's edge lands on that edge.\n */\nfunction zoneIndex<Row>(\n list: readonly ResolvedGridColumn<Row>[],\n zone: readonly string[],\n columnId: string,\n boundary: number,\n): number | null {\n const first = list.findIndex((column) => column.id === zone[0]);\n const clamped = Math.max(first, Math.min(first + zone.length, boundary));\n const from = zone.indexOf(columnId);\n const to = clamped - first;\n const settled = to > from ? to - 1 : to;\n return settled === from ? null : settled;\n}\n\nfunction isBodyRow(row: string) {\n return row !== HEADER_ROW && row !== FILTER_ROW && row !== SUMMARY_ROW && !isGroupCursorRow(row);\n}\n\n/**\n * A grid of data: the composite widget `table` declined to be. It owns the\n * rows, applies the query, walks the cells with one cursor, edits in place,\n * and lets the reader arrange the columns. Its selection is a form value.\n */\n/** The room a cell's content asks for: the value's laid-out width, the boxes beside it, the gaps, the padding and the border. */\nfunction contentWidth(cell: HTMLElement): number {\n const style = getComputedStyle(cell);\n const frame =\n cell.offsetWidth -\n cell.clientWidth +\n parseFloat(style.paddingInlineStart) +\n parseFloat(style.paddingInlineEnd);\n const gap = parseFloat(style.columnGap) || 0;\n let width = 0;\n let count = 0;\n for (const child of cell.children) {\n if (!(child instanceof HTMLElement) || getComputedStyle(child).display === 'none') continue;\n /* The description is read, not drawn: it asks for no room. */\n if (child.dataset['part'] === 'column-description') continue;\n count += 1;\n if (count === 1 && child.dataset['ui'] === undefined) {\n const range = cell.ownerDocument.createRange();\n range.selectNodeContents(child);\n width += range.getBoundingClientRect().width;\n } else {\n width += child.getBoundingClientRect().width;\n }\n }\n return width + Math.max(0, count - 1) * gap + frame;\n}\n\n@Component({\n selector: 'sl-data-grid',\n standalone: true,\n exportAs: 'slDataGrid',\n imports: [\n NgTemplateOutlet,\n SlButton,\n SlCheckbox,\n SlDataGridEditor,\n SlDataGridFilterPanel,\n SlDataGridFilterRowOperand,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlPopover,\n SlPopoverAnchor,\n SlPopoverBody,\n SlPopoverContent,\n SlPopoverLayer,\n SlPopoverTrigger,\n SlResultState,\n SlResultStateActions,\n SlResultStateContent,\n SlResultStateDescription,\n SlResultStateTitle,\n SlSkeleton,\n SlTooltip,\n SlTooltipContent,\n SlTooltipLayer,\n SlTooltipTrigger,\n ],\n styleUrls: [\n '../../../styles/src/data-grid/data-grid.css',\n '../../../styles/src/checkbox/checkbox.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n template: `\n <div #scroll data-part=\"scroll\">\n <div data-part=\"head\" role=\"rowgroup\">\n @if (hasGroups()) {\n <div data-part=\"header-row\" role=\"row\" aria-rowindex=\"1\">\n @for (cell of groupCells(); track cell.key) {\n <div\n data-part=\"column-group\"\n role=\"columnheader\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"cell.first\"\n [attr.aria-colspan]=\"cell.span\"\n [attr.data-pinned]=\"cell.pinned\"\n [style.--slotted-data-grid-column]=\"cell.first + ' / ' + (cell.first + cell.span)\"\n [style.--slotted-data-grid-pin-offset]=\"cell.pinned ? cell.pinOffset + 'px' : null\"\n >\n <span>{{ cell.label }}</span>\n </div>\n }\n </div>\n }\n <div\n data-part=\"header-row\"\n role=\"row\"\n [attr.data-row]=\"HEADER\"\n [attr.aria-rowindex]=\"hasGroups() ? 2 : 1\"\n >\n @if (hasSelectionColumn()) {\n <div\n data-part=\"selection\"\n role=\"gridcell\"\n aria-colindex=\"1\"\n [attr.data-column]=\"SELECTION\"\n [attr.tabindex]=\"isTabStop(HEADER, SELECTION) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(HEADER, SELECTION) ? '' : null\"\n [style.--slotted-data-grid-column]=\"1\"\n (focus)=\"onCellFocus({ row: HEADER, column: SELECTION }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: HEADER, column: SELECTION })\"\n (pointerdown)=\"onCellPointerDown($event, { row: HEADER, column: SELECTION })\"\n >\n @if (resolvedSelectionMode() === 'multiple') {\n <span\n slCheckbox\n [checked]=\"allState() === 'all'\"\n [indeterminate]=\"allState() === 'some'\"\n [tabIndex]=\"isCurrent(HEADER, SELECTION) ? 0 : -1\"\n (checkedChange)=\"toggleAll($event.source)\"\n >\n <span data-ui=\"visually-hidden\" data-part=\"root\">{{ selectAllName() }}</span>\n </span>\n }\n </div>\n }\n @if (hasDragColumn()) {\n <div\n data-part=\"column-header\"\n role=\"columnheader\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"dragIndex()\"\n [attr.data-column]=\"DRAG\"\n [style.--slotted-data-grid-column]=\"dragIndex()\"\n >\n <span></span>\n </div>\n }\n @if (hasExpanderColumn()) {\n <div\n data-part=\"column-header\"\n role=\"columnheader\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"expanderIndex()\"\n [attr.data-column]=\"EXPANDER\"\n [style.--slotted-data-grid-column]=\"expanderIndex()\"\n >\n <span></span>\n </div>\n }\n @for (column of mountedColumns(); track column.id) {\n <ng-container\n slPopover\n side=\"bottom\"\n align=\"start\"\n size=\"sm\"\n [open]=\"filterOpen() === column.id && filterKind(column) !== null\"\n (openChange)=\"onFilterOpenChange(column.id, $event)\"\n >\n <div\n slPopoverAnchor\n data-part=\"column-header\"\n role=\"columnheader\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.aria-sort]=\"ariaSort(column.id)\"\n [attr.aria-describedby]=\"\n column.column.description ? descriptionId(column.id) : null\n \"\n [attr.data-column]=\"column.id\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.data-sortable]=\"column.sortable ? '' : null\"\n [attr.data-sorted]=\"sortOf(column.id)?.direction ?? null\"\n [attr.data-filtered]=\"filterOf(column.id) ? '' : null\"\n [attr.data-current]=\"isCurrent(HEADER, column.id) ? '' : null\"\n [attr.data-dragging]=\"dragState().dragging === column.id ? '' : null\"\n [attr.data-drop-target]=\"dragState().target === column.id ? '' : null\"\n [attr.data-resizing]=\"resizing() === column.id ? '' : null\"\n [attr.tabindex]=\"isTabStop(HEADER, column.id) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (click)=\"onHeaderClick($event, column)\"\n (contextmenu)=\"onHeaderContextMenu($event, column.id)\"\n (focus)=\"onCellFocus({ row: HEADER, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: HEADER, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: HEADER, column: column.id })\"\n >\n <ng-container slTooltip whenClipped describes=\"none\" openOn=\"hover\" side=\"bottom\">\n <span slTooltipTrigger>\n @if (headerTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"headerContext(column)\"\n />\n } @else {\n {{ column.column.label }}\n }\n </span>\n <ng-template slTooltipLayer>\n <div slTooltipContent>{{ column.column.label }}</div>\n </ng-template>\n </ng-container>\n @if (sortOf(column.id); as sort) {\n <span\n data-part=\"sort\"\n aria-hidden=\"true\"\n [attr.data-index]=\"query().sort.length > 1 ? sort.index : null\"\n >\n <!-- The stylesheet turns the chevron over for ascending; the\n index of a key past the first is its own text before it. -->\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </span>\n }\n @if (column.column.description; as description) {\n <span\n data-part=\"column-description\"\n aria-hidden=\"true\"\n [id]=\"descriptionId(column.id)\"\n >{{ description }}</span\n >\n }\n <span data-part=\"column-actions\">\n @if (hasHelp(column)) {\n <ng-container slPopover side=\"bottom\" align=\"start\" size=\"sm\">\n <button\n slPopoverTrigger\n data-part=\"column-help\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"helpLabel(column)\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation()\"\n >\n <span slIcon><svg slGlyph name=\"circle-question\"></svg></span>\n </button>\n <ng-template slPopoverLayer>\n <div slPopoverContent [attr.aria-label]=\"helpLabel(column)\">\n <div slPopoverBody>\n @if (column.column.description; as description) {\n <div>{{ description }}</div>\n }\n @if (helpTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"headerContext(column)\"\n />\n }\n </div>\n </div>\n </ng-template>\n </ng-container>\n }\n @if (column.filterable && (filterOf(column.id) || filterOpen() === column.id)) {\n <button\n data-part=\"filter\"\n type=\"button\"\n tabindex=\"-1\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"filterOpen() === column.id\"\n [attr.aria-label]=\"t('filterColumn', { column: column.column.label })\"\n [attr.data-filtered]=\"filterOf(column.id) ? '' : null\"\n [attr.data-open]=\"filterOpen() === column.id ? '' : null\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation(); toggleFilterPanel(column.id)\"\n >\n <span slIcon><svg slGlyph name=\"funnel\"></svg></span>\n </button>\n }\n <button\n data-part=\"column-menu\"\n type=\"button\"\n tabindex=\"-1\"\n [slMenuTriggerFor]=\"columnMenu\"\n [attr.data-menu-for]=\"column.id\"\n [attr.aria-label]=\"t('columnMenu', { column: column.column.label })\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"$event.stopPropagation(); anchorToButton(columnMenu)\"\n >\n <span slIcon><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <sl-menu\n #columnMenu\n size=\"sm\"\n [sideOffset]=\"MENU_OFFSET\"\n [attr.aria-label]=\"t('columnMenu', { column: column.column.label })\"\n [aria-describedby]=\"\n column.column.description ? descriptionId(column.id) : undefined\n \"\n >\n @if (column.column.description; as description) {\n <div data-part=\"column-menu-description\" aria-hidden=\"true\">\n {{ description }}\n </div>\n }\n @if (column.sortable) {\n <button\n slMenuItem\n [disabled]=\"isSortedAlone(column.id, 'ascending')\"\n (select)=\"setSort(column.id, 'ascending', $event)\"\n >\n {{ t('sortAscendingAction') }}\n </button>\n <button\n slMenuItem\n [disabled]=\"isSortedAlone(column.id, 'descending')\"\n (select)=\"setSort(column.id, 'descending', $event)\"\n >\n {{ t('sortDescendingAction') }}\n </button>\n <button\n slMenuItem\n [disabled]=\"sortOf(column.id) === null\"\n (select)=\"setSort(column.id, null, $event)\"\n >\n {{ t('sortClearAction') }}\n </button>\n <hr slMenuSeparator />\n }\n @if (column.filterable && filterKind(column) !== null) {\n <button slMenuItem (select)=\"filterOpen.set(column.id)\">\n {{ t('filterMenu') }}\n </button>\n }\n <button\n slMenuItem\n [disabled]=\"column.pinned === 'start'\"\n (select)=\"pin(column.id, 'start', $event)\"\n >\n {{ t('pinStart') }}\n </button>\n <button\n slMenuItem\n [disabled]=\"column.pinned === 'end'\"\n (select)=\"pin(column.id, 'end', $event)\"\n >\n {{ t('pinEnd') }}\n </button>\n @if (column.pinned) {\n <button slMenuItem (select)=\"pin(column.id, null, $event)\">\n {{ t('unpin') }}\n </button>\n }\n <hr slMenuSeparator />\n @if (column.resizable) {\n <button slMenuItem (select)=\"fit(column.id, $event.reason, $event)\">\n {{ t('autofit') }}\n </button>\n <button slMenuItem (select)=\"fit(null, $event.reason, $event)\">\n {{ t('autofitAll') }}\n </button>\n }\n @if (column.hideable) {\n <button slMenuItem (select)=\"hide(column.id, $event, $event.reason)\">\n {{ t('hide') }}\n </button>\n }\n @if (manageable()) {\n <button slMenuItem (select)=\"manageColumns.emit()\">\n {{ t('manageColumns') }}\n </button>\n }\n </sl-menu>\n </span>\n @if (column.resizable) {\n <div\n data-part=\"resizer\"\n aria-hidden=\"true\"\n [attr.title]=\"t('resize')\"\n [attr.data-resizing]=\"resizing() === column.id ? '' : null\"\n (pointerdown)=\"beginResize($event, column)\"\n (pointermove)=\"moveResize($event, column)\"\n (pointerup)=\"endResize($event)\"\n (pointercancel)=\"endResize($event)\"\n (click)=\"$event.stopPropagation()\"\n (dblclick)=\"\n $event.stopPropagation();\n fit($event.shiftKey ? null : column.id, 'pointer', $event)\n \"\n ></div>\n }\n </div>\n <ng-template slPopoverLayer>\n <div\n slPopoverContent\n [attr.aria-label]=\"t('filterColumn', { column: column.column.label })\"\n >\n <sl-data-grid-filter-panel\n [column]=\"$any(column)\"\n [kind]=\"filterKind(column)!\"\n [committed]=\"filterOf(column.id)\"\n [t]=\"t\"\n [locale]=\"resolvedLocale()\"\n [counts]=\"filterKind(column) === 'set' ? countsFor(column.id) : undefined\"\n [customTemplate]=\"filterTemplate(column.id)\"\n (applyRequest)=\"applyPanel(column.id, $event)\"\n />\n </div>\n </ng-template>\n </ng-container>\n }\n @if (hasPopin()) {\n <!-- The pop-in's column, named for a reader and given no track. -->\n <div\n data-part=\"popin-header\"\n role=\"columnheader\"\n [attr.aria-colindex]=\"popinIndex()\"\n [attr.data-column]=\"POPIN\"\n >\n {{ t('popinHeader') }}\n </div>\n }\n </div>\n @if (resolvedFilterRow()) {\n <div\n data-part=\"filter-row\"\n role=\"row\"\n [attr.data-row]=\"FILTER\"\n [attr.aria-rowindex]=\"headerRowCount()\"\n >\n @if (hasSelectionColumn()) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n aria-colindex=\"1\"\n tabindex=\"-1\"\n [attr.data-column]=\"SELECTION\"\n [style.--slotted-data-grid-column]=\"1\"\n ></div>\n }\n @if (hasDragColumn()) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"dragIndex()\"\n [attr.data-column]=\"DRAG\"\n [style.--slotted-data-grid-column]=\"dragIndex()\"\n ></div>\n }\n @if (hasExpanderColumn()) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"expanderIndex()\"\n [attr.data-column]=\"EXPANDER\"\n [style.--slotted-data-grid-column]=\"expanderIndex()\"\n ></div>\n }\n @for (column of mountedColumns(); track column.id) {\n <div\n data-part=\"filter-cell\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.data-column]=\"column.id\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.data-filtered]=\"filterOf(column.id) ? '' : null\"\n [attr.data-current]=\"isCurrent(FILTER, column.id) ? '' : null\"\n [attr.tabindex]=\"isCurrent(FILTER, column.id) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (focus)=\"onCellFocus({ row: FILTER, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: FILTER, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: FILTER, column: column.id })\"\n >\n @if (column.filterable && filterKind(column); as kind) {\n <sl-data-grid-filter-row-operand\n [column]=\"$any(column)\"\n [kind]=\"kind\"\n [committed]=\"filterOf(column.id)\"\n [t]=\"t\"\n [locale]=\"resolvedLocale()\"\n [counts]=\"kind === 'set' ? countsFor(column.id) : undefined\"\n [debounce]=\"resolvedDebounce()\"\n [customTemplate]=\"filterTemplate(column.id)\"\n (filterChange)=\"setFilter(column.id, $event.filter, $event.reason)\"\n />\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- One row of the body, drawn here and in the held groups at the edges. -->\n <ng-template #bodyRow let-entry>\n <div\n data-part=\"row\"\n role=\"row\"\n [attr.data-row]=\"entry.node.key\"\n [attr.aria-rowindex]=\"entry.rowIndex\"\n [attr.aria-selected]=\"rowSelectable() ? isSelected(entry.node.key) : null\"\n [attr.data-selected]=\"isSelected(entry.node.key) ? '' : null\"\n [attr.data-current]=\"current()?.row === entry.node.key ? '' : null\"\n [attr.data-expanded]=\"detailOpen(entry.node) ? '' : null\"\n [attr.aria-level]=\"tree() ? entry.node.level : null\"\n [attr.aria-expanded]=\"\n tree() &&\n (entry.node.childCount > 0 || entry.node.open || isLoadingChildren(entry.node.key))\n ? entry.node.open\n : null\n \"\n [attr.data-loading]=\"isLoadingChildren(entry.node.key) ? '' : null\"\n [attr.data-dragging]=\"rowDragState().dragging === entry.node.key ? '' : null\"\n [attr.data-disabled]=\"isDisabled(entry.node.key) ? '' : null\"\n [attr.data-editing]=\"edit()?.cell?.row === entry.node.key ? '' : null\"\n [attr.data-index]=\"entry.index\"\n >\n @if (hasSelectionColumn()) {\n <div\n data-part=\"selection\"\n role=\"gridcell\"\n aria-colindex=\"1\"\n [attr.data-column]=\"SELECTION\"\n [attr.tabindex]=\"isCurrent(entry.node.key, SELECTION) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(entry.node.key, SELECTION) ? '' : null\"\n [style.--slotted-data-grid-column]=\"1\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: SELECTION }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: SELECTION })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: SELECTION })\"\n >\n <span\n slCheckbox\n [checked]=\"isSelected(entry.node.key)\"\n [disabled]=\"isDisabled(entry.node.key) || undefined\"\n [tabIndex]=\"isCurrent(entry.node.key, SELECTION) ? 0 : -1\"\n (checkedChange)=\"\n toggleSelected(entry.node.key, {\n range: shiftHeld($event.source),\n source: $event.source,\n })\n \"\n >\n <span data-ui=\"visually-hidden\" data-part=\"root\">{{\n t('selectRow', { row: entry.node.key })\n }}</span>\n </span>\n </div>\n }\n @if (hasDragColumn()) {\n <div\n data-part=\"cell\"\n role=\"gridcell\"\n data-kind=\"drag\"\n [attr.aria-colindex]=\"dragIndex()\"\n [attr.data-column]=\"DRAG\"\n [attr.tabindex]=\"isCurrent(entry.node.key, DRAG) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(entry.node.key, DRAG) ? '' : null\"\n [style.--slotted-data-grid-column]=\"dragIndex()\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: DRAG }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: DRAG })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: DRAG })\"\n >\n <button\n data-part=\"row-handle\"\n type=\"button\"\n [attr.tabindex]=\"isCurrent(entry.node.key, DRAG) ? 0 : -1\"\n [attr.aria-disabled]=\"rowsReorderableNow() ? null : 'true'\"\n [attr.data-disabled]=\"rowsReorderableNow() ? null : ''\"\n [attr.aria-label]=\"rowHandleLabel(entry.node.key)\"\n >\n <span slIcon><svg slGlyph name=\"grip-vertical\"></svg></span>\n </button>\n </div>\n }\n @if (hasExpanderColumn()) {\n <div\n data-part=\"cell\"\n data-kind=\"expander\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"expanderIndex()\"\n [attr.data-column]=\"EXPANDER\"\n [attr.tabindex]=\"isCurrent(entry.node.key, EXPANDER) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(entry.node.key, EXPANDER) ? '' : null\"\n [style.--slotted-data-grid-column]=\"expanderIndex()\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: EXPANDER }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: EXPANDER })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: EXPANDER })\"\n >\n @if (isExpandable(entry.node.row)) {\n <button\n data-part=\"expander\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpanded(entry.node.key)\"\n [attr.aria-controls]=\"\n isExpanded(entry.node.key) ? detailId(entry.node.key) : null\n \"\n [attr.aria-label]=\"isExpanded(entry.node.key) ? t('collapse') : t('expand')\"\n (click)=\"toggleExpanded(entry.node.key, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n }\n </div>\n }\n @for (column of mountedColumns(); track column.id) {\n @let cell = cellState(entry.node, column);\n <div\n [attr.data-part]=\"column.column.rowHeader ? 'row-header' : 'cell'\"\n [attr.role]=\"column.column.rowHeader ? 'rowheader' : 'gridcell'\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.aria-readonly]=\"cell.readonly ? 'true' : null\"\n [attr.aria-selected]=\"\n resolvedSelectionMode() === 'range' && cell.inRange ? 'true' : null\n \"\n [attr.aria-invalid]=\"cell.invalid ? 'true' : null\"\n [attr.data-column]=\"column.id\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-text]=\"column.text\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.data-current]=\"cell.current ? '' : null\"\n [attr.data-in-range]=\"cell.inRange ? '' : null\"\n [attr.data-range-edge]=\"cell.edges.length > 0 ? cell.edges.join(' ') : null\"\n [attr.data-editing]=\"cell.editing ? '' : null\"\n [attr.data-invalid]=\"cell.invalid ? '' : null\"\n [attr.data-loading]=\"cell.pending ? '' : null\"\n [attr.data-readonly]=\"cell.readonly ? '' : null\"\n [attr.data-changed]=\"cell.changed\"\n [attr.tabindex]=\"cell.current ? 0 : -1\"\n [attr.title]=\"cell.invalid ? cell.message : null\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (click)=\"onBodyCellClick($event, { row: entry.node.key, column: column.id })\"\n (dblclick)=\"onCellDoubleClick($event, { row: entry.node.key, column: column.id })\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: column.id })\"\n (pointerenter)=\"\n onCellPointerEnter($event, { row: entry.node.key, column: column.id })\n \"\n [attr.data-tree]=\"cell.tree\"\n [style.--slotted-data-grid-level]=\"cell.tree ? entry.node.level : null\"\n >\n @if (cell.tree === 'branch') {\n <button\n data-part=\"tree-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"entry.node.open\"\n [attr.aria-label]=\"entry.node.open ? t('collapse') : t('expand')\"\n [attr.data-loading]=\"isLoadingChildren(entry.node.key) ? '' : null\"\n (click)=\"$event.stopPropagation(); toggleBranch(entry.node.key, $event)\"\n (pointerdown)=\"$event.stopPropagation()\"\n >\n <!-- A row waiting for its children turns the chevron into the\n loader's ring, which the stylesheet spins. -->\n <span slIcon\n ><svg\n slGlyph\n [name]=\"isLoadingChildren(entry.node.key) ? 'loader-circle' : 'chevron-right'\"\n ></svg\n ></span>\n </button>\n } @else if (cell.tree === 'leaf') {\n <span data-part=\"tree-toggle\" data-empty aria-hidden=\"true\"></span>\n }\n @if (cell.editing) {\n <div data-part=\"editor\">\n @if (editorTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"editorContext(entry.node, column, cell)\"\n />\n } @else {\n <sl-data-grid-editor\n [column]=\"$any(column.column)\"\n [draft]=\"edit()?.drafts?.[column.id]\"\n [value]=\"cell.value\"\n [invalid]=\"cell.invalid\"\n [message]=\"cell.message\"\n [t]=\"t\"\n [locale]=\"resolvedLocale()\"\n (draftChange)=\"setDraft(column.id, $event)\"\n />\n }\n </div>\n } @else if (cellTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"cellContext(entry.node, column, cell)\"\n />\n } @else {\n <span [attr.title]=\"cell.text\">{{ cell.text }}</span>\n }\n </div>\n }\n @if (hasPopin()) {\n <div\n data-part=\"popin\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"popinIndex()\"\n [attr.data-column]=\"POPIN\"\n [attr.data-current]=\"isCurrent(entry.node.key, POPIN) ? '' : null\"\n [attr.tabindex]=\"isCurrent(entry.node.key, POPIN) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"'1 / -1'\"\n (click)=\"onBodyCellClick($event, { row: entry.node.key, column: POPIN })\"\n (dblclick)=\"onCellDoubleClick($event, { row: entry.node.key, column: POPIN })\"\n (focus)=\"onCellFocus({ row: entry.node.key, column: POPIN }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: entry.node.key, column: POPIN })\"\n (pointerdown)=\"onCellPointerDown($event, { row: entry.node.key, column: POPIN })\"\n >\n @for (column of popinColumns(); track column.id) {\n @let cell = cellState(entry.node, column);\n <div data-part=\"popin-field\" [attr.data-field]=\"column.id\">\n @if (column.column.label) {\n <span data-part=\"popin-label\">{{ column.column.label }}</span>\n }\n <!-- Read only: an edit happens in a visible cell, the detail or the record. -->\n <div data-part=\"popin-value\" [attr.data-text]=\"column.text\">\n @if (cellTemplate(column.id); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"cellContext(entry.node, column, cell)\"\n />\n } @else {\n <span [attr.title]=\"cell.text\">{{ cell.text }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n @if (detailOpen(entry.node) && detailTemplate(); as template) {\n <div\n data-part=\"detail\"\n role=\"row\"\n [attr.data-row]=\"entry.node.key + ':detail'\"\n [attr.id]=\"detailId(entry.node.key)\"\n [attr.aria-rowindex]=\"entry.rowIndex + 1\"\n >\n <div\n role=\"gridcell\"\n aria-colindex=\"1\"\n tabindex=\"-1\"\n [attr.aria-colspan]=\"ariaColCount()\"\n [style.--slotted-data-grid-column]=\"'1 / -1'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"template.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: entry.node.row,\n row: entry.node.row,\n key: entry.node.key,\n }\"\n />\n </div>\n </div>\n }\n </ng-template>\n @if (pinned().top.length > 0) {\n <div data-part=\"pinned-rows\" data-edge=\"top\" role=\"rowgroup\">\n @for (entry of pinnedTopEntries(); track entry.node.key) {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n </div>\n }\n @if (status() === 'loading') {\n <div\n data-part=\"loader\"\n role=\"rowgroup\"\n aria-hidden=\"true\"\n [style.--slotted-data-grid-loader-row-size]=\"rowSize() + 'px'\"\n >\n @for (row of skeletonRowsList(); track row) {\n <div data-part=\"row\" role=\"row\">\n @for (columnId of columnIds(); track columnId; let index = $index) {\n <div role=\"gridcell\" [style.--slotted-data-grid-column]=\"index + 1\">\n <!-- The gutters reserve their width and draw nothing: what\n stands in them is a chooser, a handle and a toggle, and\n an outline of a control nobody can press yet is a\n control that lies. The lengths follow the value\n columns, so a gutter does not shift the sequence. -->\n @if (index >= gutterCount()) {\n <span slSkeleton [inlineSize]=\"skeletonWidth(index - gutterCount())\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div\n data-part=\"body\"\n role=\"rowgroup\"\n [style.--slotted-data-grid-window-total]=\"\n windowsRows() ? rowWindow().totalSize + 'px' : null\n \"\n [style.--slotted-data-grid-window-start]=\"\n windowsRows() ? rowWindow().startOffset + 'px' : null\n \"\n >\n @for (entry of mountedEntries(); track entry.node.key) {\n @if (entry.node.kind === 'group') {\n <div\n data-part=\"group-row\"\n role=\"row\"\n [attr.data-row]=\"GROUP_PREFIX + entry.node.key\"\n [attr.aria-rowindex]=\"entry.rowIndex\"\n [attr.aria-level]=\"entry.node.level\"\n [attr.aria-expanded]=\"entry.node.expanded\"\n [attr.data-current]=\"current()?.row === GROUP_PREFIX + entry.node.key ? '' : null\"\n [style.--slotted-data-grid-level]=\"entry.node.level\"\n >\n <div\n role=\"gridcell\"\n aria-colindex=\"1\"\n [attr.aria-colspan]=\"firstAggregateIndex() - 1\"\n [attr.data-column]=\"columnIds()[0]\"\n [attr.tabindex]=\"\n isCurrent(GROUP_PREFIX + entry.node.key, columnIds()[0]!) ? 0 : -1\n \"\n [attr.data-current]=\"\n isCurrent(GROUP_PREFIX + entry.node.key, columnIds()[0]!) ? '' : null\n \"\n [style.--slotted-data-grid-column]=\"'1 / ' + firstAggregateIndex()\"\n (click)=\"toggleGroup(entry.node.key, $event)\"\n (focus)=\"\n onCellFocus(\n { row: GROUP_PREFIX + entry.node.key, column: columnIds()[0]! },\n $event\n )\n \"\n (keydown)=\"\n onCellKeyDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: columnIds()[0]!,\n })\n \"\n (pointerdown)=\"\n onCellPointerDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: columnIds()[0]!,\n })\n \"\n >\n <button\n data-part=\"group-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"entry.node.expanded\"\n [attr.aria-label]=\"\n t(entry.node.expanded ? 'collapseGroup' : 'expandGroup', {\n group: entry.node.text,\n })\n \"\n (click)=\"$event.stopPropagation(); toggleGroup(entry.node.key, $event)\"\n >\n <span slIcon><svg slGlyph name=\"chevron-right\"></svg></span>\n </button>\n @if (groupTemplate(); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template.template\"\n [ngTemplateOutletContext]=\"groupContext(entry.node)\"\n />\n } @else {\n <span>{{ entry.node.text }}</span>\n <span data-count=\"\">{{ groupCount(entry.node) }}</span>\n }\n </div>\n @for (column of aggregated(); track column.id) {\n <div\n role=\"gridcell\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.data-column]=\"column.id\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.tabindex]=\"isCurrent(GROUP_PREFIX + entry.node.key, column.id) ? 0 : -1\"\n [attr.data-current]=\"\n isCurrent(GROUP_PREFIX + entry.node.key, column.id) ? '' : null\n \"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (focus)=\"\n onCellFocus({ row: GROUP_PREFIX + entry.node.key, column: column.id }, $event)\n \"\n (keydown)=\"\n onCellKeyDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: column.id,\n })\n \"\n (pointerdown)=\"\n onCellPointerDown($event, {\n row: GROUP_PREFIX + entry.node.key,\n column: column.id,\n })\n \"\n >\n <span data-aggregate=\"\">{{\n aggregateText(column, entry.node.aggregates[column.id])\n }}</span>\n </div>\n }\n </div>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n }\n </div>\n }\n\n @if (status() !== 'rows' && status() !== 'loading') {\n <div data-part=\"empty\">\n @if (emptyTemplate(); as template) {\n <ng-container\n [ngTemplateOutlet]=\"template.template\"\n [ngTemplateOutletContext]=\"{ $implicit: status(), status: status() }\"\n />\n } @else {\n <section slResultState reach=\"section\" tabindex=\"-1\" [status]=\"resultStatus()\">\n <div slResultStateContent>\n <div slResultStateTitle>{{ emptyTitle() }}</div>\n @if (status() === 'error' && error()) {\n <p slResultStateDescription>{{ error() }}</p>\n }\n </div>\n @if (status() === 'no-results') {\n <div slResultStateActions>\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"clearFilters($event)\"\n >\n {{ t('clearFilters') }}\n </button>\n </div>\n } @else if (status() === 'error') {\n <div slResultStateActions>\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n (click)=\"onRetry()\"\n >\n {{ t('retry') }}\n </button>\n </div>\n }\n </section>\n }\n </div>\n }\n @if (pinned().bottom.length > 0) {\n <div data-part=\"pinned-rows\" data-edge=\"bottom\" role=\"rowgroup\">\n @for (entry of pinnedBottomEntries(); track entry.node.key) {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{ $implicit: entry }\"\n />\n }\n </div>\n }\n @if (hasSummary() && status() === 'rows') {\n <div data-part=\"summary\" role=\"rowgroup\">\n <div role=\"row\" [attr.data-row]=\"SUMMARY\" [attr.aria-rowindex]=\"summaryRowIndex()\">\n @for (columnId of gutterIds(); track columnId; let index = $index) {\n <div\n data-part=\"summary-cell\"\n role=\"gridcell\"\n tabindex=\"-1\"\n [attr.aria-colindex]=\"index + 1\"\n [attr.data-column]=\"columnId\"\n [style.--slotted-data-grid-column]=\"index + 1\"\n ></div>\n }\n @for (column of mountedColumns(); track column.id) {\n <div\n data-part=\"summary-cell\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"indexOf(column.id)\"\n [attr.data-column]=\"column.id\"\n [attr.data-numeric]=\"column.numeric ? '' : null\"\n [attr.data-align]=\"column.align ?? null\"\n [attr.data-pinned]=\"column.pinned\"\n [attr.data-pin-edge]=\"column.pinEdge ? '' : null\"\n [attr.tabindex]=\"isCurrent(SUMMARY, column.id) ? 0 : -1\"\n [attr.data-current]=\"isCurrent(SUMMARY, column.id) ? '' : null\"\n [style.--slotted-data-grid-column]=\"indexOf(column.id)\"\n [style.--slotted-data-grid-pin-offset]=\"\n column.pinned ? column.pinOffset + 'px' : null\n \"\n (focus)=\"onCellFocus({ row: SUMMARY, column: column.id }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: SUMMARY, column: column.id })\"\n (pointerdown)=\"onCellPointerDown($event, { row: SUMMARY, column: column.id })\"\n >\n <span>{{ aggregateText(column, applied().aggregates[column.id]) }}</span>\n </div>\n }\n @if (hasPopinCell(SUMMARY)) {\n <div\n data-part=\"popin\"\n role=\"gridcell\"\n [attr.aria-colindex]=\"popinIndex()\"\n [attr.data-column]=\"POPIN\"\n [attr.data-current]=\"isCurrent(SUMMARY, POPIN) ? '' : null\"\n [attr.tabindex]=\"isCurrent(SUMMARY, POPIN) ? 0 : -1\"\n [style.--slotted-data-grid-column]=\"'1 / -1'\"\n (focus)=\"onCellFocus({ row: SUMMARY, column: POPIN }, $event)\"\n (keydown)=\"onCellKeyDown($event, { row: SUMMARY, column: POPIN })\"\n (pointerdown)=\"onCellPointerDown($event, { row: SUMMARY, column: POPIN })\"\n >\n @for (column of popinAggregated(); track column.id) {\n <div data-part=\"popin-field\" [attr.data-field]=\"column.id\">\n @if (column.column.label) {\n <span data-part=\"popin-label\">{{ column.column.label }}</span>\n }\n <div data-part=\"popin-value\">\n <span>{{ aggregateText(column, applied().aggregates[column.id]) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (dragState().offset !== null) {\n <div\n data-part=\"drop-indicator\"\n aria-hidden=\"true\"\n [style.--slotted-data-grid-drop-offset]=\"dragState().offset + 'px'\"\n [style.--slotted-data-grid-drop-scroll]=\"dragState().scrollTop + 'px'\"\n ></div>\n }\n @if (rowDragState().offset !== null) {\n <div\n data-part=\"drop-indicator\"\n data-axis=\"row\"\n aria-hidden=\"true\"\n [style.--slotted-data-grid-drop-offset]=\"rowDragState().offset + 'px'\"\n [style.--slotted-data-grid-drop-scroll]=\"rowDragState().scrollLeft + 'px'\"\n ></div>\n }\n </div>\n @if (showsFooter()) {\n <div data-part=\"footer\">\n @if (rangeText(); as text) {\n <span data-range=\"\">{{ text }}</span>\n }\n <ng-content select=\"[slDataGridFooter]\" />\n @if (hasMore() && !hasFooterContent()) {\n <div>\n <button\n slButton\n type=\"button\"\n size=\"sm\"\n tone=\"secondary\"\n variant=\"outline\"\n [disabled]=\"loading()\"\n (click)=\"loadMore.emit()\"\n >\n {{ t('loadMore') }}\n </button>\n </div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlDataGrid), multi: true },\n ],\n host: {\n 'data-ui': 'data-grid',\n 'data-part': 'root',\n '[attr.role]': \"tree() ? 'treegrid' : 'grid'\",\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'labelledBy() ?? null',\n '[attr.aria-rowcount]': 'ariaRowCount()',\n '[attr.aria-colcount]': 'ariaColCount()',\n '[attr.aria-multiselectable]':\n \"resolvedSelectionMode() === 'multiple' || resolvedSelectionMode() === 'range' ? 'true' : null\",\n '[attr.aria-busy]': \"loading() && rows().length > 0 ? 'true' : null\",\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-striped]': \"resolvedStriped() ? '' : null\",\n '[attr.data-sticky-header]': \"resolvedStickyHeader() ? '' : null\",\n '[attr.data-sticky-to]': \"resolvedStickyTo() === 'page' ? 'page' : null\",\n '[attr.data-selection]': \"resolvedSelectionMode() === 'none' ? null : resolvedSelectionMode()\",\n '[attr.data-filter-row]': \"resolvedFilterRow() ? '' : null\",\n '[attr.data-rows]': \"autoRows() ? 'auto' : 'fixed'\",\n '[attr.data-slotted-density]': 'density() ?? null',\n '[attr.data-popin]': 'hasPopin() ? outOfSpace().popin.length : null',\n '[style.--slotted-data-grid-template]': 'template()',\n '[style.--slotted-data-grid-block-size]': 'blockSize()',\n '[style.--slotted-data-grid-row-block-size]': 'rowBlockSize()',\n '[style.--slotted-data-grid-leading]': \"hasPopin() ? leading() + 'px' : null\",\n '[style.--slotted-data-grid-changed-duration]': 'changedDuration()',\n '(keydown)': 'onRootKeyDown($event)',\n '(focusout)': 'onRootFocusOut($event)',\n },\n})\nexport class SlDataGrid<Row = unknown> implements ControlValueAccessor {\n protected readonly HEADER = HEADER_ROW;\n protected readonly FILTER = FILTER_ROW;\n protected readonly SUMMARY = SUMMARY_ROW;\n protected readonly GROUP_PREFIX = GROUP_ROW_PREFIX;\n protected readonly SELECTION = SELECTION_COLUMN;\n protected readonly EXPANDER = EXPANDER_COLUMN;\n protected readonly DRAG = DRAG_COLUMN;\n protected readonly POPIN = POPIN_COLUMN_ID;\n /** The room between the header and the menu it opens: one space step. */\n protected readonly MENU_OFFSET = 4;\n\n /* ── Data ───────────────────────────────────────────────────────────── */\n /** The rows, or nothing when a `dataSource` answers for them. */\n readonly rowsInput = input<readonly Row[] | undefined>(undefined, { alias: 'rows' });\n /**\n * The grid asks for its own rows: `getRows` is called with the query on\n * every change, the request before it aborted, and the answer is kept by\n * the query's text. The grid is in `server` mode, with the loading and the\n * error states of its own; `reload()` drops the cache.\n */\n readonly dataSource = input<DataGridDataSource<Row> | undefined>(undefined);\n readonly rowKey = input.required<keyof Row | ((row: Row) => string)>();\n readonly columns = input.required<readonly GridColumn<Row>[]>();\n readonly columnGroups = input<readonly GridColumnGroup[] | undefined>(undefined);\n readonly mode = input<DataGridMode | undefined>(undefined);\n readonly totalCountInput = input<number | undefined, number | string | undefined>(undefined, {\n alias: 'totalCount',\n transform: (value) => (value === undefined ? undefined : numberAttribute(value)),\n });\n readonly hasMoreInput = input<boolean | undefined, boolean | string | undefined>(undefined, {\n alias: 'hasMore',\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly loadingInput = input(false, { alias: 'loading', transform: booleanAttribute });\n readonly errorInput = input<string | null | undefined>(undefined, { alias: 'error' });\n /* With a source the grid asks for its rows itself; what the consumer gave\n for rows, total, loading and error is what the source answered. */\n private readonly sourced = signal<{\n result: DataGridDataSourceResult<Row> | null;\n loading: boolean;\n error: string | null;\n }>({ result: null, loading: false, error: null });\n protected readonly rows = computed<readonly Row[]>(() =>\n this.dataSource()\n ? (this.sourced().result?.rows ?? EMPTY_ROWS)\n : (this.rowsInput() ?? EMPTY_ROWS),\n );\n protected readonly totalCount = computed(() =>\n this.dataSource() ? this.sourced().result?.total : this.totalCountInput(),\n );\n protected readonly hasMore = computed(() =>\n this.dataSource() ? this.sourced().result?.hasMore : this.hasMoreInput(),\n );\n protected readonly loading = computed(() =>\n this.dataSource() ? this.sourced().loading : this.loadingInput(),\n );\n protected readonly error = computed(() =>\n this.dataSource() ? this.sourced().error : this.errorInput(),\n );\n readonly disabledKeys = input<readonly string[]>([]);\n /**\n * Marks a mounted cell whose value changed between two `rows`, for the\n * stated milliseconds (`true` is 1200). A row that arrived is not a change.\n */\n readonly highlightChanges = input<boolean | number | undefined>(undefined);\n\n /* ── Models ─────────────────────────────────────────────────────────── */\n readonly query = model<GridQuery>(emptyQuery());\n readonly columnState = model<Partial<GridColumnState> | undefined>(undefined);\n readonly value = model<DataGridSelection>(null);\n readonly range = model<GridRange | null>(null);\n readonly current = model<GridCell | null>(null);\n readonly expanded = model<readonly string[]>([]);\n readonly expandedGroups = model<DataGridExpandedGroups>('all');\n\n readonly queryChangeRequest = output<DataGridQueryRequest>();\n readonly columnStateChangeRequest = output<DataGridColumnStateRequest>();\n readonly valueChangeRequest = output<ChangeRequest<DataGridSelection>>();\n readonly rangeChangeRequest = output<ChangeRequest<GridRange | null>>();\n readonly currentChangeRequest = output<ChangeRequest<GridCell | null>>();\n readonly expandedChangeRequest = output<ChangeRequest<readonly string[]>>();\n readonly expandedGroupsChangeRequest = output<ChangeRequest<DataGridExpandedGroups>>();\n\n readonly editStart = output<GridCell>();\n readonly editCommit = output<DataGridEditCommit<Row>>();\n readonly editCancel = output<GridCell>();\n readonly activate = output<DataGridActivateEvent>();\n readonly loadMore = output<void>();\n /** A branch `hasChildren` says has children opened and none are in `rows`. */\n readonly loadChildren = output<{ key: string; row: Row }>();\n readonly rowsReorder = output<DataGridRowsReorderEvent>();\n readonly retry = output<void>();\n readonly manageColumns = output<void>();\n /** The columns a narrow frame has taken out by their `priority`, each time either set changes. */\n readonly outOfSpaceChange = output<GridOutOfSpace>();\n\n /* ── Axes ───────────────────────────────────────────────────────────── */\n readonly variant = input<DataGridVariant | undefined>(undefined);\n /**\n * The density of this grid alone, written as `data-slotted-density` on the\n * root; absent or `null`, the grid takes the page's. The layers it opens\n * are portals and stay at the page's density.\n */\n readonly density = input<GridDensity | null | undefined>(undefined);\n readonly striped = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly stickyHeader = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly stickyTo = input<DataGridStickyTo | undefined>(undefined);\n readonly selectionMode = input<DataGridSelectionMode | undefined>(undefined);\n readonly editMode = input<DataGridEditMode | undefined>(undefined);\n readonly filterRow = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (value) => (value === undefined ? undefined : booleanAttribute(value)),\n });\n readonly virtualize = input<DataGridVirtualize | undefined>(undefined);\n readonly rowHeight = input<DataGridRowHeight | undefined>(undefined);\n /**\n * What a frame too narrow for the template does. `popin` moves the columns\n * of least `priority` into a pop-in at the foot of each row, as labelled\n * values; `scroll` keeps every column and scrolls sideways; `auto`, the\n * default, pops in on a frame under 600px, or under 1024px when the main\n * pointer is coarse, and scrolls elsewhere.\n */\n readonly columnOverflow = input<DataGridColumnOverflow | undefined>(undefined);\n readonly overscan = input<number | undefined>(undefined);\n readonly filterDebounce = input<number | undefined>(undefined);\n readonly loadMoreThreshold = input<number | undefined>(undefined);\n readonly skeletonRows = input<number | undefined>(undefined);\n readonly activatable = input(false, { transform: booleanAttribute });\n /**\n * Whether the column menu offers Manage columns. The grid has no manager of\n * its own — `column-manager` edits `columnState` — so the item is drawn only\n * for an application that answers `manageColumns`, the way React draws it\n * only when `onManageColumns` is given.\n */\n readonly manageable = input(false, { transform: booleanAttribute });\n readonly expandable = input<boolean | ((row: Row) => boolean) | undefined>(undefined);\n /**\n * Rows as a tree: each row names its parent by key. The open branches are\n * `expanded`; `query.group` is ignored. The root is a `treegrid`.\n */\n readonly tree = input<GridTree<Row> | undefined>(undefined);\n /**\n * A handle per row, dragged with the pointer or moved with Alt and the\n * vertical arrows. The grid keeps no order of its own: `rowsReorder` says\n * where the row goes in `rows` and the consumer moves it. Only while the\n * query is at rest — no sort, filter, search or group — and without a\n * tree; elsewhere the handle is disabled.\n */\n readonly rowsReorderable = input(false, { transform: booleanAttribute });\n /**\n * Rows held at the top or the bottom of the body, by key, in the stated\n * order: out of the query — never sorted, filtered or paged — and always on\n * screen, under the head and over the summary.\n */\n readonly pinnedRows = input<DataGridPinnedRows | undefined>(undefined);\n readonly height = input<string | number | undefined>(undefined);\n /** The id of the element that names the grid; a static `aria-label` names it directly. */\n readonly labelledBy = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * grid's name (`grid`), every control, state and announcement.\n */\n readonly messages = input<PartialMessages<DataGridMessages> | undefined>(undefined);\n /** The locale cells, numbers and dates are written in. Default: the language in force. */\n readonly locale = input<string | undefined>(undefined);\n readonly timeZone = input<string | undefined>(undefined);\n readonly showRange = input<boolean | undefined>(undefined);\n\n /* ── Templates ──────────────────────────────────────────────────────── */\n private readonly cellTemplates = contentChildren(SlDataGridCellTemplate);\n private readonly editorTemplates = contentChildren(SlDataGridEditorTemplate);\n private readonly headerTemplates = contentChildren(SlDataGridHeaderTemplate);\n private readonly filterTemplates = contentChildren(SlDataGridFilterTemplate);\n private readonly helpTemplates = contentChildren(SlDataGridColumnHelp);\n protected readonly detailTemplate = contentChild(SlDataGridDetailTemplate);\n protected readonly groupTemplate = contentChild(SlDataGridGroupTemplate);\n protected readonly emptyTemplate = contentChild(SlDataGridEmptyTemplate);\n private readonly footerContent = contentChild(SlDataGridFooter);\n\n private readonly scrollRef = viewChild<ElementRef<HTMLDivElement>>('scroll');\n private readonly columnMenus = viewChildren(SlMenu);\n private readonly defaults = injectDataGridDefaults();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n readonly id = inject(SlDataGridIdFactory).next();\n\n /* ── Resolution ─────────────────────────────────────────────────────── */\n /** The family's words in the language in force, with this grid's `messages` laid over them. */\n readonly t = injectMessages(dataGridMessages, this.messages);\n /** What a drag of a column or a row says, in the language in force. */\n private readonly dragT = injectMessages(dragMessages);\n private readonly providedLocale = injectLocale();\n private readonly ownLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n protected readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n protected readonly resolvedStriped = computed(() => this.striped() ?? this.defaults.striped);\n protected readonly resolvedStickyHeader = computed(\n () => this.stickyHeader() ?? this.defaults.stickyHeader,\n );\n protected readonly resolvedStickyTo = computed(() => this.stickyTo() ?? this.defaults.stickyTo);\n protected readonly resolvedSelectionMode = computed(\n () => this.selectionMode() ?? this.defaults.selectionMode,\n );\n protected readonly resolvedEditMode = computed(() => this.editMode() ?? this.defaults.editMode);\n protected readonly resolvedFilterRow = computed(\n () => this.filterRow() ?? this.defaults.filterRow,\n );\n protected readonly resolvedVirtualize = computed(\n () => this.virtualize() ?? this.defaults.virtualize,\n );\n protected readonly resolvedRowHeight = computed(\n () => this.rowHeight() ?? this.defaults.rowHeight,\n );\n protected readonly resolvedColumnOverflow = computed(\n () => this.columnOverflow() ?? this.defaults.columnOverflow,\n );\n protected readonly resolvedOverscan = computed(() => this.overscan() ?? this.defaults.overscan);\n protected readonly resolvedDebounce = computed(\n () => this.filterDebounce() ?? this.defaults.filterDebounce,\n );\n protected readonly resolvedThreshold = computed(\n () => this.loadMoreThreshold() ?? this.defaults.loadMoreThreshold,\n );\n protected readonly resolvedSkeleton = computed(\n () => this.skeletonRows() ?? this.defaults.skeletonRows,\n );\n protected readonly resolvedLocale = computed(() => this.locale() ?? this.providedLocale());\n protected readonly resolvedMode = computed<DataGridMode>(\n () =>\n this.mode() ??\n (this.dataSource() || this.totalCount() !== undefined || this.hasMore() !== undefined\n ? 'server'\n : 'client'),\n );\n protected readonly ariaLabel = computed(\n () => this.ownLabel ?? (this.labelledBy() ? null : this.t('grid')),\n );\n protected readonly blockSize = computed(() => {\n const height = this.height();\n return height === undefined ? null : typeof height === 'number' ? `${height}px` : height;\n });\n /* A stated row height is the drawn row as well as the windowed one: the\n window's offsets are computed from it, and a row drawn at the density's\n height under a taller estimate drifted away from its own place. */\n protected readonly rowBlockSize = computed(() => {\n const height = this.resolvedRowHeight();\n return typeof height === 'number' ? `${height}px` : null;\n });\n /* A row with a pop-in is as tall as its fields, whatever the stated\n height: it is measured one by one, as an `auto` row is. */\n protected readonly autoRows = computed(\n () => this.resolvedRowHeight() === 'auto' || this.hasPopin(),\n );\n\n private readonly formatOptions = computed(() => ({\n locale: this.resolvedLocale(),\n timeZone: this.timeZone(),\n booleans: { true: this.t('filterYes'), false: this.t('filterNo') },\n }));\n\n rowKeyOf(row: Row): string {\n const key = this.rowKey();\n return typeof key === 'function' ? key(row) : String((row as Record<keyof Row, unknown>)[key]);\n }\n textOf(column: GridColumn<Row>, row: Row): string {\n return cellText(column, row, this.formatOptions());\n }\n private readonly disabledSet = computed(() => new Set(this.disabledKeys()));\n isDisabled(key: string) {\n return this.disabledSet().has(key);\n }\n isEditable(column: GridColumn<Row>, row: Row) {\n if (this.disabledSet().has(this.rowKeyOf(row))) return false;\n const editable = column.editable;\n return typeof editable === 'function' ? editable(row) : editable === true;\n }\n private readonly anyEditable = computed(() => this.columns().some((column) => column.editable));\n isExpandable(row: Row) {\n if (!this.detailTemplate()) return false;\n const expandable = this.expandable();\n if (expandable === undefined) return true;\n return typeof expandable === 'function' ? expandable(row) : expandable;\n }\n\n /* ── Columns ────────────────────────────────────────────────────────── */\n private readonly effectiveState = computed(() =>\n normalizeColumnState(this.columnState(), this.columns()),\n );\n /** The gutters' width, before the first data column; where a pop-in's fields start. */\n protected readonly leading = computed(() =>\n this.gutters().reduce((sum, width) => sum + width, 0),\n );\n /** Every column the reader has not hidden, before the frame's width is asked. */\n private readonly layout = computed(() =>\n resolveColumns(this.columns(), this.effectiveState(), { leading: this.leading() }),\n );\n /** The scroller's inner width; 0 until it is measured, and nothing is taken out before. */\n private readonly frameWidth = signal(0);\n /** Whether the main pointer is coarse — a finger. A render without `matchMedia` reads a fine one. */\n private readonly coarsePointer = signal(false);\n /** The policy the frame's width and the pointer settle `auto` to. */\n private readonly effectiveColumnOverflow = computed(() =>\n resolveColumnOverflow(this.resolvedColumnOverflow(), this.frameWidth(), this.coarsePointer()),\n );\n /**\n * The columns a frame too narrow for the template has taken out, by their\n * `priority`: those drawn in each row's pop-in, and those that declined it\n * with `popin: false`. Read from the frame's width, which neither set\n * changes, so the measure never loops. Never in `columnState`. Empty while\n * `columnOverflow` settles to `scroll`.\n *\n * The width is read first: an unmeasured frame takes nothing out and reads\n * no input, so a template that reads the set before the grid's inputs are\n * bound — a column manager written before the grid — gets an empty set.\n */\n readonly outOfSpace: Signal<GridOutOfSpace> = computed(\n () => {\n const available = this.frameWidth();\n if (available <= 0 || this.effectiveColumnOverflow() === 'scroll') return NONE_OUT;\n return columnsOutOfSpace(this.layout(), available, { leading: this.leading() });\n },\n { equal: (a, b) => sameKeys(a.popin, b.popin) && sameKeys(a.hidden, b.hidden) },\n );\n protected readonly resolved = computed(() => {\n const out = this.outOfSpace();\n if (out.popin.length === 0 && out.hidden.length === 0) return this.layout();\n const state = this.effectiveState();\n return resolveColumns(\n this.columns(),\n { ...state, hidden: [...state.hidden, ...out.popin, ...out.hidden] },\n { leading: this.leading() },\n );\n });\n /** The columns drawn in each row's pop-in, in the order of the resolved columns. */\n protected readonly popinColumns = computed(() => {\n const popin = this.outOfSpace().popin;\n return popin.length === 0 ? [] : this.layout().filter((column) => popin.includes(column.id));\n });\n protected readonly hasPopin = computed(() => this.outOfSpace().popin.length > 0);\n private readonly resolvedById = computed(\n () => new Map(this.resolved().map((column) => [column.id, column])),\n );\n protected readonly hasSelectionColumn = computed(\n () => this.resolvedSelectionMode() === 'single' || this.resolvedSelectionMode() === 'multiple',\n );\n protected readonly hasExpanderColumn = computed(() => this.detailTemplate() !== undefined);\n protected readonly rowSelectable = this.hasSelectionColumn;\n protected readonly hasDragColumn = computed(() => this.rowsReorderable());\n private readonly gutters = computed(() => [\n ...(this.hasSelectionColumn() ? [SELECTION_WIDTH] : []),\n ...(this.hasDragColumn() ? [DRAG_WIDTH] : []),\n ...(this.hasExpanderColumn() ? [EXPANDER_WIDTH] : []),\n ]);\n protected readonly gutterIds = computed(() => [\n ...(this.hasSelectionColumn() ? [SELECTION_COLUMN] : []),\n ...(this.hasDragColumn() ? [DRAG_COLUMN] : []),\n ...(this.hasExpanderColumn() ? [EXPANDER_COLUMN] : []),\n ]);\n protected readonly columnIds = computed(() => [\n ...this.gutterIds(),\n ...this.resolved().map((column) => column.id),\n ]);\n protected readonly gutterCount = computed(() => this.gutterIds().length);\n /** The pop-in is one more column for a reader, after every visible one, with no track. */\n protected readonly ariaColCount = computed(\n () => this.columnIds().length + (this.hasPopin() ? 1 : 0),\n );\n protected readonly popinIndex = computed(() => this.columnIds().length + 1);\n /** The columns the cursor walks: the visible ones, then the pop-in's. */\n private readonly cursorColumns = computed(() =>\n this.hasPopin() ? [...this.columnIds(), POPIN_COLUMN_ID] : this.columnIds(),\n );\n protected readonly expanderIndex = computed(() => this.columnIds().indexOf(EXPANDER_COLUMN) + 1);\n protected readonly dragIndex = computed(() => this.columnIds().indexOf(DRAG_COLUMN) + 1);\n protected readonly template = computed(() => columnTemplate(this.resolved(), this.gutters()));\n protected readonly hasGroups = computed(() => (this.columnGroups()?.length ?? 0) > 0);\n protected readonly headerRowCount = computed(\n () => 1 + (this.hasGroups() ? 1 : 0) + (this.resolvedFilterRow() ? 1 : 0),\n );\n protected indexOf(columnId: string) {\n return this.columnIds().indexOf(columnId) + 1;\n }\n protected filterKind(column: ResolvedGridColumn<Row>): FilterKind | null {\n return filterKindOf(column.kind);\n }\n\n /* ── The applied query ──────────────────────────────────────────────── */\n /* Held rows leave the query: what is sorted, filtered and paged is the\n rest. Each becomes a node of its own, outside the body's count. */\n protected readonly pinned = computed(() => {\n const held = this.pinnedRows();\n const top = held?.top ?? [];\n const bottom = held?.bottom ?? [];\n if (top.length === 0 && bottom.length === 0) {\n return {\n top: [] as RowNode[],\n bottom: [] as RowNode[],\n keys: null as ReadonlySet<string> | null,\n };\n }\n const byKey = new Map<string, Row>();\n for (const row of this.rows()) byKey.set(this.rowKeyOf(row), row);\n const nodesOf = (keys: readonly string[]) =>\n keys.flatMap((key): RowNode[] => {\n const row = byKey.get(key);\n return row === undefined\n ? []\n : [\n {\n kind: 'row',\n key,\n row,\n index: -1,\n groups: [],\n level: 1,\n parent: null,\n childCount: 0,\n open: false,\n },\n ];\n });\n return { top: nodesOf(top), bottom: nodesOf(bottom), keys: new Set([...top, ...bottom]) };\n });\n private readonly bodyRows = computed(() => {\n const keys = this.pinned().keys;\n return keys ? this.rows().filter((row) => !keys.has(this.rowKeyOf(row))) : this.rows();\n });\n protected readonly pinnedTopEntries = computed(() => {\n const first = this.headerRowCount() + 1;\n return this.pinned().top.map((node, offset) => ({ node, index: -1, rowIndex: first + offset }));\n });\n protected readonly pinnedBottomEntries = computed(() => {\n const first =\n this.headerRowCount() + this.pinned().top.length + (this.total() ?? this.nodes().length) + 1;\n return this.pinned().bottom.map((node, offset) => ({\n node,\n index: -1,\n rowIndex: first + offset,\n }));\n });\n protected readonly applied = computed(() => {\n const rows = this.bodyRows();\n const query = this.query();\n if (this.resolvedMode() === 'server') {\n const offset = query.page && 'index' in query.page ? query.page.index * query.page.size : 0;\n const nodes: GridNode<Row>[] = rows.map((row, index) => ({\n kind: 'row',\n key: this.rowKeyOf(row),\n row,\n index: offset + index,\n groups: [],\n level: 1,\n parent: null,\n childCount: 0,\n open: false,\n }));\n return {\n nodes,\n rows,\n total: this.totalCount() ?? null,\n hasMore: this.hasMore() ?? false,\n aggregates: {} as Record<string, unknown>,\n };\n }\n const applied = applyQuery(rows, this.columns(), query, {\n rowKey: (row) => this.rowKeyOf(row),\n expandedGroups: this.expandedGroups(),\n tree: this.tree(),\n expanded: this.tree() ? this.expanded() : undefined,\n ...this.formatOptions(),\n });\n return { ...applied, total: applied.total as number | null };\n });\n protected readonly nodes = computed(() => this.applied().nodes);\n protected readonly total = computed(() => this.applied().total);\n protected readonly aggregated = computed(() =>\n this.resolved().filter((column) => column.column.aggregate !== undefined),\n );\n /** The aggregating columns in the pop-in: the summary row draws their totals in its own. */\n protected readonly popinAggregated = computed(() =>\n this.popinColumns().filter((column) => column.column.aggregate !== undefined),\n );\n protected readonly hasSummary = computed(\n () =>\n this.aggregated().length + this.popinAggregated().length > 0 &&\n this.resolvedMode() === 'client',\n );\n protected readonly firstAggregateIndex = computed(() => {\n const aggregated = this.aggregated();\n return aggregated.length === 0\n ? this.columnIds().length + 1\n : Math.min(...aggregated.map((column) => this.indexOf(column.id)));\n });\n protected readonly status = computed<'rows' | 'empty' | 'no-results' | 'error' | 'loading'>(\n () => {\n if (this.error()) return 'error';\n if (this.loading() && this.rows().length === 0) return 'loading';\n if (this.nodes().length > 0) return 'rows';\n const query = this.query();\n return query.filter || query.search.trim() ? 'no-results' : 'empty';\n },\n );\n protected readonly resultStatus = computed<'empty' | 'no-results' | 'error'>(() => {\n const status = this.status();\n return status === 'error' || status === 'no-results' ? status : 'empty';\n });\n protected readonly emptyTitle = computed(() => {\n const status = this.status();\n return this.t(status === 'error' ? 'error' : status === 'no-results' ? 'noResults' : 'empty');\n });\n protected readonly ariaRowCount = computed(\n () =>\n (this.total() === null ? -1 : (this.total() as number)) +\n this.pinned().top.length +\n this.pinned().bottom.length +\n this.headerRowCount() +\n (this.hasSummary() ? 1 : 0),\n );\n protected readonly summaryRowIndex = computed(\n () =>\n this.headerRowCount() +\n this.pinned().top.length +\n (this.total() ?? this.nodes().length) +\n this.pinned().bottom.length +\n 1,\n );\n /* A first load draws as many skeleton rows as the frame shows, capped at\n the page the query asks for: eight rows in a frame of twenty-five left\n the rest of the frame empty and the page that arrived was a different\n picture. An unmeasured frame draws the stated count. */\n protected readonly skeletonRowsList = computed(() => {\n const page = this.query().page?.size;\n const height = this.viewport().height;\n const count =\n height === 0\n ? this.resolvedSkeleton()\n : Math.max(1, Math.min(page ?? Infinity, Math.ceil(height / this.rowSize())));\n return Array.from({ length: count }, (_unused, index) => index);\n });\n protected skeletonWidth(index: number) {\n return `${[70, 55, 80, 40, 60][index % 5]}%`;\n }\n\n /* ── Cursor axis ────────────────────────────────────────────────────── */\n private readonly cursorRows = computed(() => {\n const list = [HEADER_ROW];\n if (this.resolvedFilterRow()) list.push(FILTER_ROW);\n for (const node of this.pinned().top) list.push(node.key);\n for (const node of this.nodes())\n list.push(node.kind === 'group' ? `${GROUP_ROW_PREFIX}${node.key}` : node.key);\n for (const node of this.pinned().bottom) list.push(node.key);\n if (this.hasSummary()) list.push(SUMMARY_ROW);\n return list;\n });\n private readonly bodyStart = computed(() => 1 + (this.resolvedFilterRow() ? 1 : 0));\n private readonly bodyEnd = computed(\n () =>\n this.bodyStart() +\n this.pinned().top.length +\n this.nodes().length +\n this.pinned().bottom.length,\n );\n\n /* ── Virtual rows ───────────────────────────────────────────────────── */\n private readonly scrollTop = signal(0);\n private readonly scrollLeft = signal(0);\n private readonly viewport = signal({ width: 0, height: 0 });\n private readonly measuredRow = signal<number | null>(null);\n private readonly rowSizes = signal<ReadonlyMap<number, number>>(new Map());\n /** The body row's height: stated, or measured from the rows drawn, or the default. */\n protected readonly rowSize = computed(() => {\n const stated = this.resolvedRowHeight();\n return typeof stated === 'number' ? stated : (this.measuredRow() ?? DEFAULT_ROW_HEIGHT);\n });\n protected readonly windowsRows = computed(() => {\n const mode = this.resolvedVirtualize();\n return mode === true || (mode === 'auto' && this.nodes().length > VIRTUALIZE_ROWS_FROM);\n });\n private readonly metrics = computed(() => {\n if (!this.autoRows()) return undefined;\n const sizes = this.rowSizes();\n const size = this.rowSize();\n return createRowMetrics(this.nodes().map((_node, index) => sizes.get(index) ?? size));\n });\n protected readonly rowWindow = computed(() => {\n const count = this.nodes().length;\n if (!this.windowsRows())\n return { startIndex: 0, endIndex: count, startOffset: 0, totalSize: 0 };\n /* Before the scroller is measured the window is provisional — a screen's\n worth of rows — rather than the whole set. */\n const win = virtualWindow({\n itemCount: count,\n itemSize: this.rowSize(),\n metrics: this.metrics(),\n overscan: this.resolvedOverscan(),\n scrollOffset: Math.max(0, this.scrollTop()),\n viewportSize: this.viewport().height || PROVISIONAL_VIEWPORT,\n });\n return {\n startIndex: win.startIndex,\n endIndex: win.endIndex,\n startOffset: win.startOffset,\n totalSize: win.totalSize,\n };\n });\n private readonly heldRows = signal<readonly string[]>([]);\n protected readonly mountedEntries = computed(() => {\n const nodes = this.nodes();\n const window_ = this.rowWindow();\n const mounted = this.windowsRows() ? nodes.slice(window_.startIndex, window_.endIndex) : nodes;\n const extra = this.heldRows()\n .map((key) => nodes.find((node) => node.key === key))\n .filter((node): node is GridNode<Row> => node !== undefined && !mounted.includes(node));\n const headerRows = this.headerRowCount() + this.pinned().top.length;\n const first = this.windowsRows() ? window_.startIndex : 0;\n return [...mounted, ...extra].map((node, offset) => {\n const index = first + offset;\n return { node, index, rowIndex: headerRows + 1 + (node.kind === 'row' ? node.index : index) };\n });\n });\n\n /* ── Virtual columns ────────────────────────────────────────────────── */\n private readonly middle = computed(() =>\n this.resolved().filter((column) => column.pinned === null),\n );\n private readonly windowsColumns = computed(() => {\n const mode = this.resolvedVirtualize();\n return mode === true || (mode === 'auto' && this.middle().length > VIRTUALIZE_COLUMNS_FROM);\n });\n protected readonly mountedColumns = computed(() => {\n const resolved = this.resolved();\n if (!this.windowsColumns() || this.viewport().width === 0) return resolved;\n const gutterWidth = this.gutters().reduce((sum, width) => sum + width, 0);\n const startZone = resolved\n .filter((column) => column.pinned === 'start')\n .reduce((sum, column) => sum + column.width, 0);\n const endZone = resolved\n .filter((column) => column.pinned === 'end')\n .reduce((sum, column) => sum + column.width, 0);\n const from = this.scrollLeft() - COLUMN_OVERSCAN_PX;\n const to = this.scrollLeft() + this.viewport().width - endZone + COLUMN_OVERSCAN_PX;\n let offset = gutterWidth + startZone;\n const kept = new Set<string>();\n for (const column of this.middle()) {\n const end = offset + column.width;\n if (end >= from && offset <= to) kept.add(column.id);\n offset = end;\n }\n const current = this.current();\n return resolved.filter(\n (column) => column.pinned !== null || kept.has(column.id) || current?.column === column.id,\n );\n });\n\n /* ── Selection ──────────────────────────────────────────────────────── */\n private readonly selectableKeys = computed(() => {\n const source = this.resolvedMode() === 'client' ? this.applied().rows : this.bodyRows();\n const pinned = this.pinned();\n return [\n ...pinned.top.map((node) => node.key),\n ...source.map((row) => this.rowKeyOf(row)),\n ...pinned.bottom.map((node) => node.key),\n ].filter((key) => !this.disabledSet().has(key));\n });\n private readonly selectedList = computed<readonly string[]>(() => {\n const value = this.value();\n return Array.isArray(value)\n ? value\n : value === null || value === undefined\n ? []\n : [value as string];\n });\n private readonly selectedSet = computed(() => new Set(this.selectedList()));\n private anchor: string | undefined;\n isSelected(key: string) {\n return this.selectedSet().has(key);\n }\n private readonly selectableSet = computed(() => new Set(this.selectableKeys()));\n /* A set on both sides: `includes` over ten thousand keys for each of ten\n thousand chosen ones was a hundred million steps on select-all. */\n protected readonly selectedCount = computed(\n () => this.selectedList().filter((key) => this.selectableSet().has(key)).length,\n );\n protected readonly allState = computed<'none' | 'some' | 'all'>(() => {\n const count = this.selectedCount();\n return count === 0 ? 'none' : count >= this.selectableKeys().length ? 'all' : 'some';\n });\n protected readonly selectAllName = computed(() => {\n const total = this.total();\n const count = this.selectableKeys().length;\n return this.t(total !== null && total > count ? 'selectAllPage' : 'selectAllFiltered', {\n count,\n });\n });\n\n private touched: (() => void) | undefined;\n private notify: ((value: DataGridSelection) => void) | undefined;\n private readonly formDisabled = signal(false);\n\n private requestValue(next: DataGridSelection, reason: DataGridReason, source?: unknown) {\n const state = createControllable<DataGridSelection>({\n initial: this.value(),\n equals: sameSelection,\n onRequest: (request) => this.valueChangeRequest.emit(request),\n });\n if (!state.request(next, reason, source)) return;\n this.value.set(next);\n this.notify?.(next);\n this.touched?.();\n }\n private commitSelection(selected: readonly string[], reason: DataGridReason, source?: unknown) {\n const next = this.resolvedSelectionMode() === 'multiple' ? selected : (selected[0] ?? null);\n this.requestValue(next, reason, source);\n }\n toggleSelected(\n key: string,\n options: { range?: boolean; source?: unknown; reason?: DataGridReason },\n ) {\n const mode = this.resolvedSelectionMode();\n if (mode === 'none' || mode === 'range' || this.disabledSet().has(key) || this.formDisabled())\n return;\n const outcome = nextSelection({\n action: options.range ? 'range' : 'toggle',\n mode,\n selected: this.selectedList(),\n keys: this.selectableKeys(),\n key,\n anchor: this.anchor,\n disabled: (candidate) => this.disabledSet().has(candidate),\n });\n if (!options.range) this.anchor = key;\n if (outcome.changed)\n this.commitSelection(outcome.selected, options.reason ?? 'pointer', options.source);\n }\n protected shiftHeld(source: unknown) {\n return source instanceof MouseEvent && source.shiftKey;\n }\n toggleAll(source?: unknown) {\n if (this.resolvedSelectionMode() !== 'multiple') return;\n const outcome = nextSelection({\n action: 'all',\n mode: 'multiple',\n selected: this.selectedList(),\n keys: this.selectableKeys(),\n });\n if (outcome.changed) this.commitSelection(outcome.selected, 'select', source);\n }\n selectAll() {\n this.commitSelection(this.selectableKeys(), 'programmatic');\n }\n clearSelection() {\n this.commitSelection([], 'programmatic');\n }\n\n /* ── Cursor grid and range ──────────────────────────────────────────── */\n private readonly cursorGrid = computed<CursorGrid>(() => ({\n rows: this.cursorRows(),\n columns: this.cursorColumns(),\n pageSize: Math.max(1, Math.floor((this.viewport().height || 400) / this.rowSize()) - 1),\n bodyStart: this.bodyStart(),\n bodyEnd: this.bodyEnd(),\n }));\n private readonly bounds = computed(() =>\n this.resolvedSelectionMode() === 'range' ? rangeBounds(this.cursorGrid(), this.range()) : null,\n );\n private readonly rangeDragging = signal(false);\n private rangeAnchor: GridCell | null = null;\n\n private requestRange(next: GridRange | null, reason: ChangeReason, source?: unknown) {\n const state = createControllable<GridRange | null>({\n initial: this.range(),\n equals: sameRange,\n onRequest: (request) => this.rangeChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.range.set(next);\n }\n private beginRange(cell: GridCell, extend: boolean, source: unknown) {\n if (this.resolvedSelectionMode() !== 'range' || !isBodyRow(cell.row)) return;\n const from = extend && this.range() ? this.range()!.anchor : cell;\n this.rangeAnchor = from;\n this.requestRange({ anchor: from, focus: cell }, 'pointer', source);\n }\n private extendRange(cell: GridCell, source: unknown) {\n if (this.resolvedSelectionMode() !== 'range' || !isBodyRow(cell.row)) return;\n const from = this.rangeAnchor ?? this.range()?.anchor ?? cell;\n this.requestRange({ anchor: from, focus: cell }, 'pointer', source);\n }\n\n /* ── Cursor ─────────────────────────────────────────────────────────── */\n private readonly focused = signal(false);\n private pendingFocus: GridCell | null = null;\n private lastRowIndex = 0;\n\n isCurrent(row: string, column: string) {\n const current = this.current();\n return current !== null && current.row === row && current.column === column;\n }\n /* One tab stop always, as the pattern requires of a grid: the current cell\n while there is one, and the header's first cell until the reader has been\n anywhere — without it a grid nobody had entered had no way in from the\n keyboard and no focusable content for its scroller. */\n protected isTabStop(row: string, column: string) {\n if (this.current() !== null) return this.isCurrent(row, column);\n return row === HEADER_ROW && column === this.columnIds()[0];\n }\n /**\n * Whether a row draws a pop-in: a record's row, held or not, and the\n * summary while a column in the pop-in has a total to show there.\n */\n protected hasPopinCell(row: string) {\n if (!this.hasPopin()) return false;\n if (row === SUMMARY_ROW) return this.popinAggregated().length > 0;\n return isBodyRow(row);\n }\n /** The pop-in's column on a row that draws none is that row's last visible column. */\n private landOn(cell: GridCell): GridCell {\n if (cell.column !== POPIN_COLUMN_ID || this.hasPopinCell(cell.row)) return cell;\n const columns = this.columnIds();\n return { row: cell.row, column: columns[columns.length - 1]! };\n }\n private requestCurrent(next: GridCell | null, reason: ChangeReason, source?: unknown) {\n const state = createControllable<GridCell | null>({\n initial: this.current(),\n equals: sameCell,\n onRequest: (request) => this.currentChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.current.set(next);\n }\n private focusCellNow(cell: GridCell): boolean {\n const element = this.host.nativeElement.querySelector<HTMLElement>(\n `[data-row=\"${CSS.escape(cell.row)}\"] [data-column=\"${CSS.escape(cell.column)}\"]`,\n );\n if (!element) return false;\n const structural =\n element.matches('[data-part=\"column-header\"], [data-part=\"filter-cell\"]') ||\n element.querySelector('[data-part=\"group-toggle\"]') !== null;\n /* A cell in edit hands the focus to its editor's field — the input, the\n select's trigger, the picker's first segment — never to a stepper or a\n calendar button beside it, and never to the cell: Enter on a numeric\n cell opened the editor and left the focus on the cell because the field\n and its two steppers were three widgets, not one. */\n const editor = element.querySelector<HTMLElement>('[data-part=\"editor\"]');\n if (editor) {\n const field =\n editor.querySelector<HTMLElement>(EDITOR_FIELD) ??\n editor.querySelector<HTMLElement>(FOCUSABLE);\n (field ?? element).focus();\n return true;\n }\n const widgets = structural ? [] : [...element.querySelectorAll<HTMLElement>(FOCUSABLE)];\n const single = widgets.length === 1 && widgets[0]!.matches(SIMPLE_WIDGET) ? widgets[0]! : null;\n (single ?? element).focus();\n return true;\n }\n setCurrent(cell: GridCell, reason: DataGridReason, source?: unknown) {\n if (!sameCell(cell, this.current())) this.requestCurrent(cell, reason, source);\n this.pendingFocus = cell;\n const index = this.cursorRows().indexOf(cell.row) - this.bodyStart();\n const window_ = this.rowWindow();\n if (\n this.windowsRows() &&\n index >= 0 &&\n (index < window_.startIndex || index >= window_.endIndex)\n ) {\n this.heldRows.set([cell.row]);\n const metrics = this.metrics();\n const offset = metrics ? metrics.offsetOf(index) : index * this.rowSize();\n this.scrollRef()?.nativeElement.scrollTo({\n top: offset - this.viewport().height / 2 + this.rowSize(),\n });\n }\n this.flushFocus();\n }\n private flushFocus() {\n afterNextRender(\n () => {\n const cell = this.pendingFocus;\n if (cell && this.focusCellNow(cell)) this.pendingFocus = null;\n },\n { injector: this.injector },\n );\n }\n focusCell(cell: GridCell) {\n this.setCurrent(cell, 'programmatic');\n }\n\n /* ── Sorting and filtering ──────────────────────────────────────────── */\n protected readonly filterOpen = signal<string | null>(null);\n protected readonly resizing = signal<string | null>(null);\n\n sortOf(columnId: string) {\n const index = this.query().sort.findIndex((key) => key.column === columnId);\n if (index === -1) return null;\n return { direction: this.query().sort[index]!.direction, index: index + 1 };\n }\n protected ariaSort(columnId: string) {\n const sort = this.sortOf(columnId);\n return sort && sort.index === 1 ? sort.direction : null;\n }\n protected isSortedAlone(columnId: string, direction: SortDirection) {\n const sort = this.sortOf(columnId);\n return sort?.direction === direction && sort.index === 1 && this.query().sort.length === 1;\n }\n filterOf(columnId: string): FilterDescriptor | null {\n return ruleFor(this.query().filter, columnId) ?? null;\n }\n private requestQuery(next: GridQuery, change: string, reason: ChangeReason, source?: unknown) {\n const state = createControllable<GridQuery>({\n initial: this.query(),\n equals: (a, b) => JSON.stringify(a) === JSON.stringify(b),\n onRequest: (request) =>\n this.queryChangeRequest.emit(Object.assign(request, { change }) as DataGridQueryRequest),\n });\n if (state.request(next, reason, source)) this.query.set(next);\n }\n private labelOf(columnId: string) {\n return this.resolvedById().get(columnId)?.column.label ?? columnId;\n }\n private announceSort(next: GridQuery) {\n if (next.sort.length === 0) {\n this.announce(this.t('sortCleared'));\n return;\n }\n const order = next.sort\n .map((key) =>\n this.t(key.direction === 'ascending' ? 'sortAscending' : 'sortDescending', {\n column: this.labelOf(key.column),\n }),\n )\n .join(', ');\n this.announce(this.t('sortedBy', { order }));\n }\n pressSort(\n columnId: string,\n append: boolean,\n source?: unknown,\n reason: DataGridReason = 'pointer',\n ) {\n const column = this.resolvedById().get(columnId);\n if (!column || !column.sortable) return;\n const move = withSortPress(this.query(), columnId, append);\n this.requestQuery(move.query, move.change, reason, source);\n this.announceSort(move.query);\n }\n setSort(columnId: string, direction: SortDirection | null, source?: unknown) {\n const move = withSort(this.query(), columnId, direction);\n this.requestQuery(move.query, move.change, 'pointer', source);\n this.announceSort(move.query);\n }\n setFilter(\n columnId: string,\n filter: FilterDescriptor | null,\n reason: DataGridReason,\n source?: unknown,\n ) {\n const move = withColumnFilter(this.query(), columnId, filter);\n this.requestQuery(move.query, move.change, reason, source);\n }\n protected applyPanel(\n columnId: string,\n event: {\n filter: FilterDescriptor | null;\n reason: 'pointer' | 'keyboard' | 'clear';\n said: string;\n },\n ) {\n this.setFilter(columnId, event.filter, event.reason);\n this.announce(event.said);\n this.filterOpen.set(null);\n }\n protected onFilterOpenChange(columnId: string, open: boolean) {\n if (!open && this.filterOpen() === columnId) {\n this.filterOpen.set(null);\n this.pendingFocus = { row: HEADER_ROW, column: columnId };\n this.flushFocus();\n }\n }\n protected toggleFilterPanel(columnId: string) {\n this.filterOpen.set(this.filterOpen() === columnId ? null : columnId);\n }\n protected clearFilters(source?: unknown) {\n const move = withoutFilters(this.query());\n this.requestQuery(move.query, move.change, 'clear', source);\n }\n private countsCache = new Map<string, ReadonlyMap<string, number>>();\n countsFor(columnId: string): ReadonlyMap<string, number> {\n const query = this.query();\n const rows = this.rows();\n const key = `${columnId}|${JSON.stringify(query.filter)}|${rows.length}`;\n const cached = this.countsCache.get(key);\n if (cached) return cached;\n const columns = this.columns();\n const column = columns.find((entry) => entry.id === columnId);\n const counts = new Map<string, number>();\n if (column) {\n const rest = withoutRuleFor(query.filter, columnId);\n const read = (row: Row, field: string) => {\n const target = columns.find((entry) => entry.id === field);\n return target ? cellValue(target, row) : undefined;\n };\n const match = createFilterGroupPredicate<Row>(rest.rules.length ? rest : null, read, {\n locale: this.resolvedLocale(),\n });\n for (const row of rows) {\n if (!match(row)) continue;\n const raw = cellValue(column, row);\n for (const entry of Array.isArray(raw) ? raw : [raw]) {\n if (entry === null || entry === undefined || entry === '') continue;\n const text = String(entry);\n counts.set(text, (counts.get(text) ?? 0) + 1);\n }\n }\n }\n this.countsCache = new Map([[key, counts]]);\n return counts;\n }\n\n /* ── Column moves ───────────────────────────────────────────────────── */\n private requestState(\n next: GridColumnState,\n change: string,\n reason: DataGridReason,\n source?: unknown,\n ) {\n const state = createControllable<GridColumnState>({\n initial: this.effectiveState(),\n equals: (a, b) => JSON.stringify(a) === JSON.stringify(b),\n onRequest: (request) =>\n this.columnStateChangeRequest.emit(\n Object.assign(request, { change }) as DataGridColumnStateRequest,\n ),\n });\n if (state.request(next, reason, source)) this.columnState.set(next);\n }\n pin(columnId: string, zone: 'start' | 'end' | null, source?: unknown) {\n this.requestState(\n withColumnPinned(this.effectiveState(), columnId, zone),\n 'pinned',\n 'pointer',\n source,\n );\n }\n /** Hides a column and announces it; the undo is the application's, from the request's `previous`. */\n hide(columnId: string, source?: unknown, reason: DataGridReason = 'programmatic') {\n const state = this.effectiveState();\n const column = this.columns().find((entry) => entry.id === columnId);\n if (!column || state.hidden.includes(columnId)) return;\n this.requestState(withColumnHidden(state, columnId, true), 'hidden', reason, source);\n this.announce(this.t('columnHidden', { column: column.label }));\n }\n resizeTo(columnId: string, width: number, reason: DataGridReason, source?: unknown) {\n const column = this.columns().find((entry) => entry.id === columnId);\n if (!column) return;\n const next = withColumnWidth(this.effectiveState(), column, width);\n this.requestState(next, 'width', reason, source);\n if (reason === 'keyboard') {\n this.announce(\n this.t('resized', {\n column: column.label,\n width: String(next.widths[columnId] ?? width),\n }),\n );\n }\n }\n resizeBy(columnId: string, delta: number, source?: unknown) {\n const column = this.resolvedById().get(columnId);\n if (!column || !column.resizable) return;\n this.resizeTo(columnId, column.width + delta, 'keyboard', source);\n }\n /* The widest content the column has on screen, plus the cell's own padding\n and border. The content is measured by a Range over the value, never by\n `scrollWidth`: a value that truncates lays its text out at full width\n under the clip, and one that does not fills its cell — `scrollWidth` gave\n the cell's box either way, so a column only ever grew. A header is its\n name plus what sits beside it (the sort mark, the actions slot) and the\n gaps between. `null` for a column with nothing mounted. */\n private measureFit(columnId: string): number | null {\n let widest = 0;\n for (const cell of this.host.nativeElement.querySelectorAll<HTMLElement>(\n `[data-column=\"${CSS.escape(columnId)}\"]`,\n )) {\n widest = Math.max(widest, contentWidth(cell));\n }\n return widest > 0 ? Math.ceil(widest) : null;\n }\n /** One column to its content; without an id, every resizable column at once, as one request. */\n autofit(columnId?: string, source?: unknown) {\n this.fit(columnId ?? null, 'programmatic', source);\n }\n /** The fit behind the resizer, the menu, the keyboard and `autofit()`, each with its own reason. */\n protected fit(columnId: string | null, reason: DataGridReason, source?: unknown) {\n if (columnId !== null) {\n if (!this.resolvedById().has(columnId)) return;\n const width = this.measureFit(columnId);\n if (width !== null) this.resizeTo(columnId, width, reason, source);\n return;\n }\n const state = this.effectiveState();\n let next = state;\n for (const column of this.resolved()) {\n if (!column.resizable) continue;\n const width = this.measureFit(column.id);\n if (width !== null) next = withColumnWidth(next, column.column, width);\n }\n if (next !== state) this.requestState(next, 'width', reason, source);\n }\n moveColumn(columnId: string, direction: -1 | 1, source?: unknown) {\n const column = this.resolvedById().get(columnId);\n if (!column || !column.reorderable) return;\n const zone = zoneOf(this.resolved(), columnId);\n const target = zone.indexOf(columnId) + direction;\n if (target < 0 || target >= zone.length) return;\n this.requestState(\n withColumnMoved(this.effectiveState(), columnId, target, zone),\n 'order',\n 'keyboard',\n source,\n );\n }\n\n private resizeSession: {\n column: string;\n startX: number;\n startWidth: number;\n rtl: boolean;\n } | null = null;\n protected beginResize(event: PointerEvent, column: ResolvedGridColumn<Row>) {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n const handle = event.currentTarget as HTMLElement;\n handle.setPointerCapture(event.pointerId);\n /* The header's own box and not the column's stated width: a flex column\n is as wide as the room left over, and a drag that started from the\n stated width jumped to it on the first move. */\n const header = handle.closest('[data-part=\"column-header\"]');\n this.resizeSession = {\n column: column.id,\n startX: event.clientX,\n startWidth: header ? Math.round(header.getBoundingClientRect().width) : column.width,\n rtl: getComputedStyle(this.host.nativeElement).direction === 'rtl',\n };\n this.resizing.set(column.id);\n }\n protected moveResize(event: PointerEvent, column: ResolvedGridColumn<Row>) {\n const session = this.resizeSession;\n if (!session || session.column !== column.id) return;\n const delta = (event.clientX - session.startX) * (session.rtl ? -1 : 1);\n this.resizeTo(column.id, session.startWidth + delta, 'pointer', event);\n }\n protected endResize(event: PointerEvent) {\n if (!this.resizeSession) return;\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\n this.resizeSession = null;\n this.resizing.set(null);\n }\n\n /* ── Reordering by drag ─────────────────────────────────────────────── */\n protected readonly dragState = signal<{\n dragging: string | null;\n target: string | null;\n offset: number | null;\n /** Where the scroller stood at the last move: the line follows the viewport, not the content. */\n scrollTop: number;\n }>({\n dragging: null,\n target: null,\n offset: null,\n scrollTop: 0,\n });\n private drag: DragController | null = null;\n private readonly draggables = new Map<string, () => void>();\n private readonly draggableNodes = new Map<string, HTMLElement>();\n\n /* ── Expansion ──────────────────────────────────────────────────────── */\n private readonly expandedSet = computed(() => new Set(this.expanded()));\n /* ── Tree ───────────────────────────────────────────────────────────── */\n protected readonly treeColumn = computed(() => {\n const tree = this.tree();\n if (!tree) return null;\n if (tree.column && this.resolvedById().has(tree.column)) return tree.column;\n return this.resolved()[0]?.id ?? null;\n });\n private readonly nodeByKey = computed(() => {\n const map = new Map<string, RowNode>();\n for (const node of this.pinned().top) map.set(node.key, node);\n for (const node of this.nodes()) if (node.kind === 'row') map.set(node.key, node);\n for (const node of this.pinned().bottom) map.set(node.key, node);\n return map;\n });\n /* A row opened with children still to come: asked for once, marked until\n a child of hers is in `rows` or she is closed. */\n private readonly loadingChildren = signal<ReadonlySet<string>>(new Set());\n protected isLoadingChildren(key: string) {\n return this.loadingChildren().has(key);\n }\n /** In a tree, `expanded` is the branch; the detail is a leaf's alone. */\n protected detailOpen(node: RowNode) {\n return this.isExpanded(node.key) && (this.tree() === undefined || node.childCount === 0);\n }\n protected treeKind(node: RowNode, column: string): 'branch' | 'leaf' | null {\n if (this.treeColumn() !== column) return null;\n const branch =\n node.childCount > 0 ||\n node.open ||\n this.isLoadingChildren(node.key) ||\n this.tree()?.hasChildren?.(node.row as Row) === true;\n return branch ? 'branch' : 'leaf';\n }\n toggleBranch(key: string, source?: unknown, reason: DataGridReason = 'pointer') {\n const node = this.nodeByKey().get(key);\n if (!node) return;\n const opening = !this.expandedSet().has(key);\n this.toggleExpanded(key, source, reason);\n if (opening && node.childCount === 0 && this.tree()?.hasChildren?.(node.row as Row)) {\n this.loadingChildren.update((current) => new Set(current).add(key));\n this.loadChildren.emit({ key, row: node.row as Row });\n }\n }\n\n isExpanded(key: string) {\n return this.expandedSet().has(key);\n }\n toggleExpanded(key: string, source?: unknown, reason: DataGridReason = 'pointer') {\n const held = this.expanded();\n const next = this.expandedSet().has(key)\n ? held.filter((entry) => entry !== key)\n : [...held, key];\n const state = createControllable<readonly string[]>({\n initial: held,\n equals: sameKeys,\n onRequest: (request) => this.expandedChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.expanded.set(next);\n }\n toggleGroup(key: string, source?: unknown, reason: DataGridReason = 'pointer') {\n const held = this.expandedGroups();\n const open = held === 'all' || held.includes(key);\n let next: DataGridExpandedGroups;\n if (held === 'all') {\n next = this.nodes()\n .filter((node) => node.kind === 'group')\n .map((node) => node.key)\n .filter((entry) => entry !== key && !entry.startsWith(`${key}/`));\n } else {\n next = open ? held.filter((entry) => entry !== key) : [...held, key];\n }\n const state = createControllable<DataGridExpandedGroups>({\n initial: held,\n equals: sameKeys,\n onRequest: (request) => this.expandedGroupsChangeRequest.emit(request),\n });\n if (state.request(next, reason, source)) this.expandedGroups.set(next);\n }\n protected detailId(key: string) {\n return `${this.id}-detail-${key}`;\n }\n protected groupCount(node: GroupNode) {\n return this.t('groupCount', { count: node.count });\n }\n protected groupContext(node: GroupNode): DataGridGroupContext<Row> {\n const column = this.columns().find((entry) => entry.id === node.column)!;\n return {\n $implicit: node as never,\n node: node as never,\n column,\n toggle: () => this.toggleGroup(node.key),\n };\n }\n protected aggregateText(column: ResolvedGridColumn<Row>, value: unknown) {\n if (value === null || value === undefined) return '';\n return cellText({ ...column.column, accessor: () => value }, {} as Row, this.formatOptions());\n }\n\n /* ── Editing ────────────────────────────────────────────────────────── */\n readonly edit = signal<EditSession | null>(null);\n private rowOf(key: string): Row | undefined {\n return this.nodeByKey().get(key)?.row as Row | undefined;\n }\n startEdit(cell: GridCell, seed: string | null = null) {\n const row = this.rowOf(cell.row);\n const column = this.columns().find((entry) => entry.id === cell.column);\n if (!row || !column || !this.isEditable(column, row)) return;\n const editing =\n this.resolvedEditMode() === 'row'\n ? this.columns()\n .filter((entry) => this.isEditable(entry, row))\n .map((entry) => entry.id)\n : [cell.column];\n const originals: Record<string, unknown> = {};\n for (const columnId of editing) {\n const target = this.columns().find((entry) => entry.id === columnId)!;\n originals[columnId] = cellValue(target, row);\n }\n const drafts = { ...originals };\n if (seed !== null) drafts[cell.column] = column.kind === 'number' ? Number(seed) : seed;\n this.edit.set({ cell, columns: editing, drafts, originals, status: 'editing', messages: {} });\n this.editStart.emit(cell);\n this.pendingFocus = cell;\n this.flushFocus();\n }\n setDraft(columnId: string, draft: unknown) {\n const session = this.edit();\n if (session)\n this.edit.set({\n ...session,\n drafts: { ...session.drafts, [columnId]: draft },\n status: 'editing',\n });\n }\n cancelEdit() {\n const session = this.edit();\n if (!session) return;\n this.edit.set(null);\n this.editCancel.emit(session.cell);\n this.pendingFocus = session.cell;\n this.flushFocus();\n }\n private nextEditableCell(cell: GridCell, move: 'down' | 'next' | 'previous'): GridCell | null {\n if (move === 'down') {\n const next = moveCursor(this.cursorGrid(), cell, 'down');\n return sameCell(next, cell) || !isBodyRow(next.row) ? null : next;\n }\n const row = this.rowOf(cell.row);\n if (!row) return null;\n const editable = this.columnIds().filter((columnId) => {\n const column = this.columns().find((entry) => entry.id === columnId);\n return column !== undefined && this.isEditable(column, row);\n });\n const index = editable.indexOf(cell.column);\n const target = editable[index + (move === 'next' ? 1 : -1)];\n return target ? { row: cell.row, column: target } : null;\n }\n commitEdit(\n reason: 'keyboard' | 'pointer' | 'blur' | 'programmatic',\n options: { move?: 'down' | 'next' | 'previous' | 'stay' } = {},\n ) {\n const session = this.edit();\n if (!session || session.status === 'pending') return;\n const row = this.rowOf(session.cell.row);\n if (!row) {\n this.edit.set(null);\n return;\n }\n const changes: Record<string, unknown> = {};\n for (const columnId of session.columns) {\n if (!Object.is(session.drafts[columnId], session.originals[columnId]))\n changes[columnId] = session.drafts[columnId];\n }\n const after = () => {\n const move = options.move ?? 'stay';\n const target = move === 'stay' ? null : this.nextEditableCell(session.cell, move);\n this.edit.set(null);\n if (target) {\n this.setCurrent(target, 'keyboard');\n if (this.resolvedEditMode() === 'cell' && move !== 'down') this.startEdit(target);\n } else {\n this.pendingFocus = session.cell;\n this.flushFocus();\n }\n };\n if (Object.keys(changes).length === 0) {\n after();\n return;\n }\n const run = async () => {\n this.edit.update((state) => (state ? { ...state, status: 'pending' } : state));\n const messages: Record<string, string> = {};\n for (const columnId of Object.keys(changes)) {\n const column = this.columns().find((entry) => entry.id === columnId)!;\n const parsed = column.parse ? column.parse(changes[columnId], row) : changes[columnId];\n changes[columnId] = parsed;\n const message = column.validate ? await column.validate(parsed, row) : null;\n if (message) messages[columnId] = message;\n }\n if (Object.keys(messages).length > 0) {\n this.edit.update((state) => (state ? { ...state, status: 'invalid', messages } : state));\n this.pendingFocus = session.cell;\n this.flushFocus();\n return;\n }\n const primary =\n session.cell.column in changes ? session.cell.column : Object.keys(changes)[0]!;\n let waited: Promise<void> | null = null;\n this.editCommit.emit({\n key: session.cell.row,\n column: primary,\n value: changes[primary],\n previous: session.originals[primary],\n row,\n reason,\n changes,\n wait: (promise) => {\n waited = promise;\n },\n });\n try {\n if (waited) await waited;\n after();\n } catch (failure) {\n const message =\n failure instanceof Error && failure.message ? failure.message : this.t('editFailed');\n this.edit.update((state) =>\n state ? { ...state, status: 'invalid', messages: { [primary]: message } } : state,\n );\n this.pendingFocus = session.cell;\n this.flushFocus();\n }\n };\n void run();\n }\n stopEdit(options?: { commit?: boolean }) {\n if (options?.commit === false) this.cancelEdit();\n else this.commitEdit('programmatic');\n }\n protected cellState(node: RowNode, column: ResolvedGridColumn<Row>) {\n const key = node.key;\n const session = this.edit();\n const editing =\n session !== null && session.cell.row === key && session.columns.includes(column.id);\n const message = editing ? (session.messages[column.id] ?? null) : null;\n const invalid = editing && session.status === 'invalid' && message !== null;\n const row = node.row as Row;\n const range = rangeEdges(this.cursorGrid(), this.bounds(), { row: key, column: column.id });\n const editable = this.isEditable(column.column, row);\n return {\n value: cellValue(column.column, row),\n text: this.textOf(column.column, row),\n current: this.isCurrent(key, column.id),\n selected: this.isSelected(key),\n editing,\n invalid,\n message,\n pending: editing && session.status === 'pending',\n inRange: range.inside,\n edges: range.edges,\n readonly: this.anyEditable() && !editable && column.kind !== 'actions',\n changed: this.changedOf(key, column.id),\n tree: this.treeKind(node, column.id),\n };\n }\n protected cellContext(\n node: RowNode,\n column: ResolvedGridColumn<Row>,\n cell: ReturnType<SlDataGrid<Row>['cellState']>,\n ): DataGridCellContext<Row> {\n return {\n $implicit: node.row as Row,\n row: node.row as Row,\n key: node.key,\n column: column.column,\n value: cell.value,\n text: cell.text,\n current: cell.current,\n selected: cell.selected,\n };\n }\n protected editorContext(\n node: RowNode,\n column: ResolvedGridColumn<Row>,\n cell: ReturnType<SlDataGrid<Row>['cellState']>,\n ): DataGridEditorContext<Row> {\n return {\n ...this.cellContext(node, column, cell),\n draft: this.edit()?.drafts[column.id],\n setDraft: (draft) => this.setDraft(column.id, draft),\n commit: () => this.commitEdit('programmatic'),\n cancel: () => this.cancelEdit(),\n invalid: cell.invalid,\n message: cell.message,\n };\n }\n protected headerContext(column: ResolvedGridColumn<Row>): DataGridHeaderContext<Row> {\n const sort = this.sortOf(column.id);\n return {\n $implicit: column.column,\n column: column.column,\n resolved: column,\n sorted: sort?.direction ?? null,\n sortIndex: sort?.index ?? null,\n filtered: this.filterOf(column.id) !== null,\n };\n }\n private templateFor<T extends { template: unknown }>(\n list: readonly T[],\n read: (entry: T) => string,\n columnId: string,\n ) {\n return (\n (list.find((entry) => read(entry) === columnId) ?? list.find((entry) => read(entry) === ''))\n ?.template ?? null\n );\n }\n protected cellTemplate(columnId: string) {\n return this.templateFor(\n this.cellTemplates(),\n (entry) => entry.slDataGridCell(),\n columnId,\n ) as never;\n }\n protected editorTemplate(columnId: string) {\n return this.templateFor(\n this.editorTemplates(),\n (entry) => entry.slDataGridEditor(),\n columnId,\n ) as never;\n }\n protected headerTemplate(columnId: string) {\n return this.templateFor(\n this.headerTemplates(),\n (entry) => entry.slDataGridHeader(),\n columnId,\n ) as never;\n }\n protected helpTemplate(columnId: string) {\n return (this.helpTemplates().find((entry) => entry.slDataGridColumnHelp() === columnId)\n ?.template ?? null) as never;\n }\n protected hasHelp(column: ResolvedGridColumn<Row>) {\n return (\n Boolean(column.column.description) ||\n this.helpTemplates().some((entry) => entry.slDataGridColumnHelp() === column.id)\n );\n }\n protected helpLabel(column: ResolvedGridColumn<Row>) {\n return this.t('columnHelp', { column: column.column.label });\n }\n protected descriptionId(columnId: string) {\n return `${this.id}-description-${columnId}`;\n }\n protected filterTemplate(columnId: string) {\n return this.templateFor(\n this.filterTemplates(),\n (entry) => entry.slDataGridFilter(),\n columnId,\n ) as never;\n }\n protected readonly hasFooterContent = computed(() => this.footerContent() !== undefined);\n protected readonly showsFooter = computed(\n () => this.hasFooterContent() || this.rangeText() !== null || this.hasMore() === true,\n );\n protected readonly rangeText = computed(() => {\n const query = this.query();\n if (this.showRange() === false || !query.page || this.nodes().length === 0) return null;\n const start = ('index' in query.page ? query.page.index * query.page.size : 0) + 1;\n const shown =\n this.resolvedMode() === 'client'\n ? this.nodes().filter((node) => node.kind === 'row').length\n : this.rows().length;\n const last = start + shown - 1;\n const total = this.total();\n return total === null || total < 0\n ? this.t('rangeUnknown', { start, end: last })\n : this.t('range', { start, end: last, total });\n });\n\n /* ── Groups ─────────────────────────────────────────────────────────── */\n protected readonly groupCells = computed(() => {\n const groups = this.columnGroups() ?? [];\n const columns = this.mountedColumns();\n const offset = this.gutterIds().length;\n const cells: {\n key: string;\n first: number;\n span: number;\n label: string;\n pinned: 'start' | 'end' | null;\n pinOffset: number;\n }[] = [];\n let index = 0;\n while (index < columns.length) {\n const column = columns[index]!;\n const group = groups.find((entry) => entry.columns.includes(column.id));\n let span = 1;\n if (group)\n while (index + span < columns.length && group.columns.includes(columns[index + span]!.id))\n span += 1;\n cells.push({\n key: group ? `${group.id}:${column.id}` : column.id,\n first: column.index + offset,\n span,\n label: group?.label ?? '',\n pinned: column.pinned,\n pinOffset: column.pinOffset,\n });\n index += span;\n }\n return cells;\n });\n\n /* ── Changed cells ──────────────────────────────────────────────────── */\n private readonly changedFor = computed(() => {\n const stated = this.highlightChanges();\n return stated === true ? DEFAULT_CHANGED_DURATION : stated || 0;\n });\n protected readonly changedDuration = computed(() => {\n const ms = this.changedFor();\n return ms > 0 ? `${ms}ms` : null;\n });\n /* One mark per changed cell, with the generation it was marked in: the\n generation's parity is the attribute's value, so a cell changed twice in\n a row restarts its paint. The map is read through its version. */\n private readonly changedCells = new Map<string, { until: number; generation: number }>();\n private changedGeneration = 0;\n private readonly changedVersion = signal(0);\n private changedTimer: ReturnType<typeof setTimeout> | null = null;\n private previousRows: { rows: readonly Row[]; byKey: Map<string, Row> } | null = null;\n private changedOf(key: string, column: string): 'a' | 'b' | null {\n this.changedVersion();\n const mark = this.changedCells.get(`${key}\\u0000${column}`);\n return mark ? (mark.generation % 2 === 0 ? 'a' : 'b') : null;\n }\n private markChanges(rows: readonly Row[]) {\n const changedFor = untracked(() => this.changedFor());\n if (changedFor <= 0) {\n this.previousRows = null;\n return;\n }\n const previous = this.previousRows;\n const byKey = new Map<string, Row>();\n for (const row of rows) byKey.set(this.rowKeyOf(row), row);\n this.previousRows = { rows, byKey };\n if (!previous || previous.rows === rows) return;\n const now = Date.now();\n let marked = false;\n const columns = untracked(() => this.resolved());\n const pinned = untracked(() => this.pinned());\n const mounted = untracked(() => this.mountedEntries()).map((entry) => entry.node);\n for (const node of [...pinned.top, ...mounted, ...pinned.bottom]) {\n if (node.kind !== 'row') continue;\n const before = previous.byKey.get(node.key);\n if (before === undefined || before === node.row) continue;\n for (const column of columns) {\n if (Object.is(cellValue(column.column, before), cellValue(column.column, node.row as Row)))\n continue;\n this.changedCells.set(`${node.key}\\u0000${column.id}`, {\n until: now + changedFor,\n generation: this.changedGeneration + 1,\n });\n marked = true;\n }\n }\n if (!marked) return;\n this.changedGeneration += 1;\n this.changedVersion.update((version) => version + 1);\n if (this.changedTimer === null)\n this.changedTimer = setTimeout(() => this.sweepChanges(), changedFor);\n }\n private sweepChanges() {\n this.changedTimer = null;\n const at = Date.now();\n let next = Number.POSITIVE_INFINITY;\n for (const [key, mark] of this.changedCells) {\n if (mark.until <= at) this.changedCells.delete(key);\n else next = Math.min(next, mark.until);\n }\n this.changedVersion.update((version) => version + 1);\n if (next !== Number.POSITIVE_INFINITY)\n this.changedTimer = setTimeout(() => this.sweepChanges(), Math.max(16, next - at));\n }\n\n /* ── Lifecycle ──────────────────────────────────────────────────────── */\n constructor() {\n const destroy = inject(DestroyRef);\n destroy.onDestroy(() => {\n if (this.changedTimer !== null) clearTimeout(this.changedTimer);\n this.sourceController?.abort();\n });\n /* One request per query, and per retry or reload. */\n effect(() => {\n const source = this.dataSource();\n const query = this.query();\n this.sourceAttempt();\n if (!source) return;\n untracked(() => this.fetchFromSource(source, query));\n });\n /* A wait ends when a child arrived, or the row closed. */\n effect(() => {\n const waiting = this.loadingChildren();\n if (waiting.size === 0) return;\n const byKey = this.nodeByKey();\n const open = this.expandedSet();\n const next = new Set(waiting);\n for (const key of waiting) {\n const node = byKey.get(key);\n if (!node || !open.has(key) || node.childCount > 0) next.delete(key);\n }\n if (next.size !== waiting.size) this.loadingChildren.set(next);\n });\n /* The main pointer, read again when it changes: a tablet docked to a\n mouse leaves the pop-in for the sideways scroll. */\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n const query = window.matchMedia('(pointer: coarse)');\n const read = () => this.coarsePointer.set(query.matches);\n read();\n query.addEventListener('change', read);\n destroy.onDestroy(() => query.removeEventListener('change', read));\n }\n /* The sets a narrow frame took out, reported when either changes. */\n let spaced: GridOutOfSpace = NONE_OUT;\n effect(() => {\n const next = this.outOfSpace();\n if (sameKeys(next.popin, spaced.popin) && sameKeys(next.hidden, spaced.hidden)) return;\n spaced = next;\n untracked(() => this.outOfSpaceChange.emit(next));\n });\n /* Two consecutive `rows` are compared once the new nodes are known. */\n effect(() => {\n const rows = this.rows();\n this.nodes();\n untracked(() => this.markChanges(rows));\n });\n\n /* The scroller: the window, the viewport and the overflow affordance. */\n afterNextRender(\n () => {\n const scroller = this.scrollRef()?.nativeElement;\n if (!scroller) return;\n let frame = 0;\n const read = () => {\n frame = 0;\n this.scrollTop.set(scroller.scrollTop);\n this.scrollLeft.set(Math.abs(scroller.scrollLeft));\n };\n const onScroll = () => {\n if (frame === 0) frame = requestAnimationFrame(read);\n };\n scroller.addEventListener('scroll', onScroll, { passive: true });\n const observer =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n this.viewport.set({ width: scroller.clientWidth, height: scroller.clientHeight });\n this.frameWidth.set(scroller.clientWidth);\n this.measureEdges?.();\n });\n /* The head's and the summary's heights, for the rows held under one\n and over the other: written on the scroller as the offsets the held\n rows stick at. */\n const edges = () => {\n const head = scroller.querySelector<HTMLElement>(':scope > [data-part=\"head\"]');\n const summary = scroller.querySelector<HTMLElement>(':scope > [data-part=\"summary\"]');\n scroller.style.setProperty(\n '--slotted-data-grid-pinned-top-offset',\n `${head?.offsetHeight ?? 0}px`,\n );\n scroller.style.setProperty(\n '--slotted-data-grid-pinned-bottom-offset',\n `${summary?.offsetHeight ?? 0}px`,\n );\n };\n observer?.observe(scroller);\n for (const part of scroller.querySelectorAll(\n ':scope > [data-part=\"head\"], :scope > [data-part=\"summary\"]',\n ))\n observer?.observe(part);\n edges();\n this.measureEdges = edges;\n this.viewport.set({ width: scroller.clientWidth, height: scroller.clientHeight });\n if (observer) this.frameWidth.set(scroller.clientWidth);\n const affordance = createScrollAffordance(scroller, {\n orientation: () => 'horizontal',\n onChange: (state) => {\n scroller.toggleAttribute('data-overflowing', state.overflowing);\n scroller.toggleAttribute('data-at-start', state.overflowing && state.atStart);\n scroller.toggleAttribute('data-at-end', state.overflowing && state.atEnd);\n },\n });\n destroy.onDestroy(() => {\n scroller.removeEventListener('scroll', onScroll);\n if (frame) cancelAnimationFrame(frame);\n observer?.disconnect();\n affordance.destroy();\n });\n this.wireDrag();\n },\n { injector: this.injector },\n );\n\n /* The row height, read once from the first mounted row; every row when\n auto. A row with a pop-in changes height with the columns in it and\n with the frame's width, which reflows its fields, so both are read. */\n effect(() => {\n this.mountedEntries();\n this.outOfSpace();\n if (this.hasPopin()) this.frameWidth();\n afterNextRender(\n () => {\n const rows = this.host.nativeElement.querySelectorAll<HTMLElement>(\n '[data-part=\"body\"] > [data-part=\"row\"]',\n );\n const first = rows[0];\n if (!first) return;\n if (\n typeof untracked(() => this.resolvedRowHeight()) !== 'number' &&\n untracked(() => this.measuredRow()) === null\n ) {\n const height = first.getBoundingClientRect().height;\n if (height > 0) this.measuredRow.set(Math.round(height));\n }\n if (untracked(() => this.autoRows())) {\n const sizes = new Map(untracked(() => this.rowSizes()));\n let changed = false;\n for (const row of rows) {\n const index = Number(row.getAttribute('data-index'));\n const height = row.getBoundingClientRect().height;\n if (!Number.isNaN(index) && height > 0 && sizes.get(index) !== height) {\n sizes.set(index, height);\n changed = true;\n }\n }\n if (changed) this.rowSizes.set(sizes);\n }\n },\n { injector: this.injector },\n );\n });\n\n /* The cursor survives its row leaving: same index, same column. A column\n that moved into the pop-in takes the cursor with it. */\n effect(() => {\n const current = this.current();\n const rows = this.cursorRows();\n const columns = this.cursorColumns();\n if (current && rows.includes(current.row)) {\n this.lastRowIndex = rows.indexOf(current.row);\n if (columns.includes(current.column)) return;\n }\n if (!current) return;\n const popped =\n rows.includes(current.row) &&\n this.outOfSpace().popin.includes(current.column) &&\n this.hasPopinCell(current.row);\n const settled = popped\n ? { row: current.row, column: POPIN_COLUMN_ID }\n : settleCursor(\n untracked(() => this.cursorGrid()),\n current,\n this.lastRowIndex,\n );\n untracked(() => {\n if (settled && !sameCell(settled, current)) {\n this.requestCurrent(settled, 'programmatic');\n if (this.focused()) {\n this.pendingFocus = settled;\n this.flushFocus();\n }\n } else if (!settled && this.focused()) {\n this.host.nativeElement\n .querySelector<HTMLElement>('[data-part=\"empty\"] [tabindex]')\n ?.focus();\n }\n });\n });\n\n /* A row that changes under an open editor is a conflict, not a refresh. */\n effect(() => {\n this.rows();\n const session = untracked(() => this.edit());\n if (!session || session.status === 'pending') return;\n const row = untracked(() => this.rowOf(session.cell.row));\n if (!row) return;\n const conflicts: Record<string, string> = {};\n for (const columnId of session.columns) {\n const column = this.columns().find((entry) => entry.id === columnId);\n if (column && !Object.is(cellValue(column, row), session.originals[columnId])) {\n conflicts[columnId] = this.t('editConflict');\n }\n }\n if (Object.keys(conflicts).length > 0) {\n untracked(() =>\n this.edit.set({\n ...session,\n status: 'invalid',\n messages: { ...session.messages, ...conflicts },\n }),\n );\n }\n });\n\n /* Load more when the window nears the end. */\n effect(() => {\n if (this.hasMore() !== true || this.loading()) return;\n const remaining = this.nodes().length - this.rowWindow().endIndex;\n const scroller = this.scrollRef()?.nativeElement;\n const near = this.windowsRows()\n ? remaining <= this.resolvedThreshold()\n : this.scrollTop() + this.viewport().height >=\n (scroller?.scrollHeight ?? 0) - this.rowSize() * this.resolvedThreshold();\n if (near && this.viewport().height > 0) untracked(() => this.loadMore.emit());\n });\n\n /* The drag session's state, drawn on the headers. */\n destroy.onDestroy(() => {\n for (const detach of this.draggables.values()) detach();\n this.draggables.clear();\n this.drag?.destroy();\n });\n\n /* The headers as draggables, re-attached when the mounted set changes. */\n effect(() => {\n this.mountedColumns();\n afterNextRender(() => this.attachDraggables(), { injector: this.injector });\n });\n /* The mounted rows as draggables, the same way. */\n effect(() => {\n this.mountedEntries();\n this.hasDragColumn();\n afterNextRender(() => this.attachRowDraggables(), { injector: this.injector });\n });\n\n /* A range drag ends on the document. */\n effect((onCleanup) => {\n if (!this.rangeDragging()) return;\n const doc = this.host.nativeElement.ownerDocument;\n const end = () => this.rangeDragging.set(false);\n doc.addEventListener('pointerup', end);\n doc.addEventListener('pointercancel', end);\n onCleanup(() => {\n doc.removeEventListener('pointerup', end);\n doc.removeEventListener('pointercancel', end);\n });\n });\n }\n\n private wireDrag() {\n const element = this.host.nativeElement;\n /* One container for the whole header row: the three pin zones share the\n row's box, and three containers registered over the same element\n claimed the pointer in turn — the last one, an empty end zone, took\n every drop as its root. The zone is enforced at the drop instead: a\n column never leaves its zone, so a target past the zone's edge lands on\n the edge. */\n const controller = createDragController({\n document: element.ownerDocument,\n t: this.dragT,\n preview: false,\n /* The scroller moves sideways when a header is dragged to its edge, so a\n column can reach a place past the viewport; never up or down — the\n pointer is at the scroller's top edge for the whole drag. */\n autoScroll: { axis: 'x' },\n onDrop: ({ items, target, reason, event }) => {\n if (target.kind !== 'between') return;\n const columnId = items[0]!;\n const list = this.resolved();\n const zone = zoneOf(list, columnId);\n const to = zoneIndex(list, zone, columnId, target.index);\n if (to === null) return;\n this.requestState(\n withColumnMoved(this.effectiveState(), columnId, to, zone),\n 'order',\n reason === 'keyboard' ? 'keyboard' : 'pointer',\n event,\n );\n },\n });\n const allItems = () => this.resolved().map((column) => column.id);\n const headerOf = (columnId: string) =>\n element.querySelector(`[data-part=\"column-header\"][data-column=\"${CSS.escape(columnId)}\"]`);\n controller.registerContainer({\n key: 'columns',\n items: allItems,\n orientation: 'horizontal',\n element: () =>\n element.querySelector('[data-part=\"head\"] > [data-part=\"header-row\"]:last-of-type'),\n itemElement: headerOf,\n label: () => this.t('dragColumns'),\n itemLabel: (columnId) => this.labelOf(columnId),\n });\n let wasDragging = false;\n controller.subscribe((state) => {\n if (state.status !== 'dragging') {\n /* The click the browser fires after a drop is the drag's, not a press\n on the header: read live, a reordered column came back sorted. */\n if (wasDragging) this.swallowClick = true;\n wasDragging = false;\n this.dragState.set({ dragging: null, target: null, offset: null, scrollTop: 0 });\n return;\n }\n wasDragging = true;\n const dragging = state.items[0] ?? null;\n const target = state.target && state.target.kind === 'between' ? state.target : null;\n let offset: number | null = null;\n let scrollTop = 0;\n let over: string | null = null;\n if (target && dragging) {\n const list = this.resolved();\n const zone = zoneOf(list, dragging);\n const first = list.find((column) => column.id === zone[0]);\n const last = list.find((column) => column.id === zone[zone.length - 1]);\n /* The indicator is drawn where the drop would land: inside the zone. */\n const boundary = Math.max(\n first ? first.index - 1 : 0,\n Math.min(last ? last.index : list.length, target.index),\n );\n const scroller = this.scrollRef()?.nativeElement;\n const ids = allItems();\n const atEnd = boundary >= ids.length;\n const anchor = ids[atEnd ? ids.length - 1 : boundary];\n const header = anchor ? headerOf(anchor) : null;\n if (header && scroller) {\n const box = header.getBoundingClientRect();\n const origin = scroller.getBoundingClientRect();\n const rtl = getComputedStyle(scroller).direction === 'rtl';\n const edge = atEnd !== rtl ? box.right : box.left;\n /* Content coordinates: the indicator is positioned in the\n scroller's box at scroll zero, so the scrolled distance is added\n back. `scrollLeft` is negative once an rtl scroller has moved. */\n offset = rtl\n ? origin.right - edge - scroller.scrollLeft\n : edge - origin.left + scroller.scrollLeft;\n scrollTop = scroller.scrollTop;\n over = ids[boundary] ?? null;\n }\n }\n this.dragState.set({ dragging, target: over, offset, scrollTop });\n });\n this.drag = controller;\n this.attachDraggables();\n this.wireRowDrag();\n }\n\n /* ── The data source ───────────────────────────────────────────────── */\n private readonly sourceCache = new Map<string, DataGridDataSourceResult<Row>>();\n private sourceController: AbortController | null = null;\n private readonly sourceAttempt = signal(0);\n /** The same query again, after a failure; with a source, else `retry` is emitted. */\n protected onRetry() {\n if (this.dataSource()) this.sourceAttempt.update((count) => count + 1);\n else this.retry.emit();\n }\n /** Drops the data source's cache and asks the query again. */\n reload() {\n this.sourceCache.clear();\n this.sourceAttempt.update((count) => count + 1);\n }\n private fetchFromSource(source: DataGridDataSource<Row>, query: GridQuery) {\n const key = serializeQuery(query);\n const cached = this.sourceCache.get(key);\n if (cached) {\n this.sourced.set({ result: cached, loading: false, error: null });\n return;\n }\n this.sourceController?.abort();\n const own = new AbortController();\n this.sourceController = own;\n this.sourced.update((current) => ({ ...current, loading: true, error: null }));\n source.getRows(query, { signal: own.signal }).then(\n (result) => {\n if (own.signal.aborted) return;\n const size = source.cacheSize ?? DEFAULT_CACHE_SIZE;\n if (size > 0) {\n this.sourceCache.set(key, result);\n while (this.sourceCache.size > size) {\n const oldest = this.sourceCache.keys().next().value;\n if (oldest === undefined) break;\n this.sourceCache.delete(oldest);\n }\n }\n this.sourced.set({ result, loading: false, error: null });\n },\n (reason: unknown) => {\n if (own.signal.aborted) return;\n const message = reason instanceof Error ? reason.message : String(reason);\n this.sourced.update((current) => ({ ...current, loading: false, error: message }));\n },\n );\n }\n\n /* ── Reordering rows ────────────────────────────────────────────────── */\n /* Rows move only while the query is at rest and there is no tree: sorted,\n filtered, searched or grouped, the position on screen is not the\n position in `rows`. A page is fine — a node's index is its place in\n `rows` across pages. */\n protected readonly rowsReorderableNow = computed(() => {\n const query = this.query();\n return (\n this.hasDragColumn() &&\n this.tree() === undefined &&\n this.resolvedMode() === 'client' &&\n query.sort.length === 0 &&\n query.filter === null &&\n query.search.trim() === '' &&\n query.group.length === 0\n );\n });\n protected readonly rowDragState = signal<{\n dragging: string | null;\n offset: number | null;\n scrollLeft: number;\n }>({ dragging: null, offset: null, scrollLeft: 0 });\n private rowDrag: DragController | null = null;\n private measureEdges: (() => void) | null = null;\n private readonly rowDraggables = new Map<string, () => void>();\n private readonly rowDraggableNodes = new Map<string, HTMLElement>();\n protected rowHandleLabel(key: string) {\n return this.t('reorderRow', { row: this.rowLabelOf(key) });\n }\n /** What a row is called: its row header's text, else its key. */\n private rowLabelOf(key: string) {\n const node = this.nodeByKey().get(key);\n const header = this.columns().find((column) => column.rowHeader);\n return node && header ? cellText(header, node.row as Row, this.formatOptions()) : key;\n }\n private mountedRowKeys() {\n return this.mountedEntries().flatMap(({ node }) => (node.kind === 'row' ? [node.key] : []));\n }\n /** Where a row lands in `rows` when dropped before the visible item at `index`. */\n private rowMove(key: string, index: number): DataGridRowsReorderEvent | null {\n const node = this.nodeByKey().get(key);\n if (!node) return null;\n const items = this.mountedEntries().flatMap(({ node: entry }) =>\n entry.kind === 'row' ? [entry] : [],\n );\n const last = items[items.length - 1];\n const before = items[index];\n const target = before ? before.index : last ? last.index + 1 : 0;\n /* Removing the row first shifts everything after it up by one. */\n const to = node.index < target ? target - 1 : target;\n if (to === node.index) return null;\n return { key, from: node.index, to, reason: 'pointer' };\n }\n private moveRow(key: string, direction: -1 | 1, source?: unknown) {\n if (!this.rowsReorderableNow()) return;\n const keys = this.mountedRowKeys();\n const at = keys.indexOf(key);\n if (at < 0) return;\n const index = direction > 0 ? at + 2 : at - 1;\n if (index < 0) return;\n const move = this.rowMove(key, index);\n if (!move) return;\n this.rowsReorder.emit({ ...move, reason: 'keyboard', event: source as Event | undefined });\n this.announce(this.t('rowMoved', { row: this.rowLabelOf(key), position: move.to + 1 }));\n }\n private wireRowDrag() {\n const element = this.host.nativeElement;\n const controller = createDragController({\n document: element.ownerDocument,\n t: this.dragT,\n preview: false,\n autoScroll: { axis: 'y' },\n onDrop: ({ items, target, reason, event }) => {\n if (target.kind !== 'between') return;\n const move = this.rowMove(items[0]!, target.index);\n if (move)\n this.rowsReorder.emit({\n ...move,\n reason: reason === 'keyboard' ? 'keyboard' : 'pointer',\n event,\n });\n },\n });\n const rowOf = (key: string) =>\n element.querySelector(\n `[data-part=\"body\"] > [data-part=\"row\"][data-row=\"${CSS.escape(key)}\"]`,\n );\n controller.registerContainer({\n key: 'rows',\n items: () => this.mountedRowKeys(),\n orientation: 'vertical',\n element: () => element.querySelector('[data-part=\"body\"]'),\n itemElement: rowOf,\n label: () => this.t('dragRows'),\n itemLabel: (key) => this.rowLabelOf(key),\n });\n controller.subscribe((state) => {\n if (state.status !== 'dragging') {\n this.rowDragState.set({ dragging: null, offset: null, scrollLeft: 0 });\n return;\n }\n const dragging = state.items[0] ?? null;\n const target = state.target && state.target.kind === 'between' ? state.target : null;\n let offset: number | null = null;\n let scrollLeft = 0;\n const scroller = this.scrollRef()?.nativeElement;\n if (target && scroller) {\n const keys = this.mountedRowKeys();\n const atEnd = target.index >= keys.length;\n const anchor = keys[atEnd ? keys.length - 1 : target.index];\n const row = anchor ? rowOf(anchor) : null;\n if (row) {\n const box = row.getBoundingClientRect();\n const origin = scroller.getBoundingClientRect();\n offset = (atEnd ? box.bottom : box.top) - origin.top + scroller.scrollTop;\n scrollLeft = Math.abs(scroller.scrollLeft);\n }\n }\n this.rowDragState.set({ dragging, offset, scrollLeft });\n });\n this.rowDrag = controller;\n this.attachRowDraggables();\n }\n private attachRowDraggables() {\n const controller = this.rowDrag;\n if (!controller) return;\n const element = this.host.nativeElement;\n const seen = new Set<string>();\n if (this.hasDragColumn()) {\n for (const key of this.mountedRowKeys()) {\n const node = element.querySelector<HTMLElement>(\n `[data-part=\"body\"] > [data-part=\"row\"][data-row=\"${CSS.escape(key)}\"]`,\n );\n if (!node) continue;\n seen.add(key);\n const previous = this.rowDraggables.get(key);\n if (previous && this.rowDraggableNodes.get(key) === node) continue;\n previous?.();\n const detach = controller.attachDraggable(node, {\n container: 'rows',\n key,\n handle: () => node.querySelector('[data-part=\"row-handle\"]'),\n disabled: () => !this.rowsReorderableNow(),\n distance: 6,\n });\n this.rowDraggableNodes.set(key, node);\n this.rowDraggables.set(key, detach);\n }\n }\n for (const [key, detach] of this.rowDraggables) {\n if (!seen.has(key)) {\n detach();\n this.rowDraggables.delete(key);\n this.rowDraggableNodes.delete(key);\n }\n }\n }\n private attachDraggables() {\n const controller = this.drag;\n if (!controller) return;\n const element = this.host.nativeElement;\n const seen = new Set<string>();\n for (const column of this.resolved()) {\n const node = element.querySelector<HTMLElement>(\n `[data-part=\"column-header\"][data-column=\"${CSS.escape(column.id)}\"]`,\n );\n if (!node || !column.reorderable) continue;\n seen.add(column.id);\n /* A node already attached stays attached: detaching it between two\n renders would throw away a press in progress. */\n const previous = this.draggables.get(column.id);\n if (previous && this.draggableNodes.get(column.id) === node) continue;\n previous?.();\n const detach = controller.attachDraggable(node, {\n container: 'columns',\n key: column.id,\n handle: () => node,\n /* A press on the resize handle is a resize: the controller's own\n listener sits on the header and fires before the handle's, so\n the handle cannot stop it. */\n canDrag: (event) =>\n !(event.target instanceof Element && event.target.closest('[data-part=\"resizer\"]')),\n distance: 6,\n });\n this.draggableNodes.set(column.id, node);\n this.draggables.set(column.id, detach);\n }\n for (const [columnId, detach] of this.draggables) {\n if (!seen.has(columnId)) {\n detach();\n this.draggables.delete(columnId);\n this.draggableNodes.delete(columnId);\n }\n }\n }\n\n /* ── Events ─────────────────────────────────────────────────────────── */\n announce(message: string) {\n getLiveAnnouncer(this.host.nativeElement.ownerDocument).announce(message);\n }\n private rtl() {\n return getComputedStyle(this.host.nativeElement).direction === 'rtl';\n }\n protected onCellFocus(cell: GridCell, event: FocusEvent) {\n if (event.target !== event.currentTarget) return;\n this.focused.set(true);\n if (!sameCell(cell, this.current())) this.requestCurrent(cell, 'programmatic');\n }\n protected onRootFocusOut(event: FocusEvent) {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.host.nativeElement.contains(next)) {\n this.focused.set(false);\n const session = this.edit();\n if (session && session.status === 'editing') this.commitEdit('blur', { move: 'stay' });\n }\n }\n protected onRootKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n if (this.drag?.handleKeydown(event)) return;\n this.rowDrag?.handleKeydown(event);\n }\n private swallowClick = false;\n /** The pointer of the last press on a cell: `touch` and `pen` activate on one press. */\n private pressedWith = '';\n private touchActivatedAt = Number.NEGATIVE_INFINITY;\n private keyboardMenuAt = Number.NEGATIVE_INFINITY;\n private columnMenuFor(columnId: string) {\n return this.columnMenus().find(\n (menu) => menu.trigger()?.getAttribute('data-menu-for') === columnId,\n );\n }\n /**\n * Opens a column's menu against an anchor other than its button: the point\n * a context menu was opened at, or the header cell. Focus returns to the\n * header cell, which is where the reader was.\n */\n private openColumnMenu(\n columnId: string,\n anchor: PositionerAnchor,\n reason: 'pointer' | 'keyboard',\n event: Event,\n header: HTMLElement,\n ): boolean {\n const menu = this.columnMenuFor(columnId);\n if (!menu || menu.resolvedDisabled()) return false;\n menu.finalFocus.set(header);\n menu.anchor.set(anchor);\n menu.entry.current = 'first';\n menu.toggle(true, reason, event);\n return true;\n }\n /** The button opens the menu where it always did: under itself, focus returning to it. */\n protected anchorToButton(menu: SlMenu) {\n menu.anchor.set(null);\n menu.finalFocus.set(null);\n }\n /**\n * A secondary press on a data column's header opens its menu at the press.\n * The browser keeps its own menu under Shift, and over a field, where cut,\n * copy and paste are the reader's; a `contextmenu` just after Shift+F10 or\n * the Menu key opened the menu from the keyboard is that key's echo.\n */\n protected onHeaderContextMenu(event: MouseEvent, columnId: string) {\n if (event.shiftKey) return;\n if (event.target instanceof Element && event.target.closest(EDITABLE)) return;\n if (Date.now() - this.keyboardMenuAt < KEYBOARD_ECHO) {\n event.preventDefault();\n return;\n }\n const header = event.currentTarget as HTMLElement;\n const anchor = pointAnchor(event.clientX, event.clientY);\n if (this.openColumnMenu(columnId, anchor, 'pointer', event, header)) event.preventDefault();\n }\n protected onHeaderClick(event: MouseEvent, column: ResolvedGridColumn<Row>) {\n if (this.swallowClick) {\n this.swallowClick = false;\n return;\n }\n if (insideWidget(event)) return;\n if (column.sortable) this.pressSort(column.id, event.shiftKey, event, 'pointer');\n }\n protected onBodyCellClick(event: MouseEvent, cell: GridCell) {\n const pointer = this.pressedWith;\n this.pressedWith = '';\n if (insideWidget(event)) return;\n if (this.resolvedSelectionMode() === 'single' && !this.disabledSet().has(cell.row)) {\n this.toggleSelected(cell.row, { range: false, source: event });\n }\n /* On a touch screen one press opens the record: a double tap is a zoom,\n not the gesture of opening. A cell in edit keeps the press for its\n editor. */\n const session = this.edit();\n const editing =\n session !== null && session.cell.row === cell.row && session.columns.includes(cell.column);\n if (this.activatable() && (pointer === 'touch' || pointer === 'pen') && !editing) {\n this.touchActivatedAt = Date.now();\n this.activate.emit({ key: cell.row, reason: 'pointer', event });\n }\n }\n protected onCellDoubleClick(event: MouseEvent, cell: GridCell) {\n if (insideWidget(event)) return;\n /* The second tap of a touch that already activated the row. */\n if (Date.now() - this.touchActivatedAt < TOUCH_ECHO) return;\n const row = this.rowOf(cell.row);\n const column = this.columns().find((entry) => entry.id === cell.column);\n if (!row) return;\n if (column && this.isEditable(column, row) && !this.activatable()) {\n this.startEdit(cell);\n return;\n }\n if (this.activatable()) this.activate.emit({ key: cell.row, reason: 'pointer', event });\n else if (column && this.isEditable(column, row)) this.startEdit(cell);\n }\n protected onCellPointerDown(event: PointerEvent, cell: GridCell) {\n this.pressedWith = event.pointerType ?? '';\n if (event.button !== 0) return;\n this.swallowClick = false;\n const session = this.edit();\n if (\n session &&\n !sameCell(session.cell, cell) &&\n !(session.cell.row === cell.row && session.columns.includes(cell.column))\n ) {\n this.commitEdit('blur', { move: 'stay' });\n }\n if (!sameCell(cell, this.current())) this.requestCurrent(cell, 'pointer', event);\n if (this.resolvedSelectionMode() === 'range' && isBodyRow(cell.row)) {\n if (!insideWidget(event)) {\n this.beginRange(cell, event.shiftKey, event);\n this.rangeDragging.set(true);\n }\n }\n }\n protected onCellPointerEnter(event: PointerEvent, cell: GridCell) {\n if (this.rangeDragging() && event.buttons === 1) this.extendRange(cell, event);\n }\n\n private async copyRange(cell: GridCell) {\n const bounds = this.bounds();\n const cells = bounds ? rangeCells(this.cursorGrid(), bounds) : [[cell]];\n const text = rangeToText(cells, (target) => {\n const row = this.rowOf(target.row);\n const column = this.columns().find((entry) => entry.id === target.column);\n return row && column ? this.textOf(column, row) : '';\n });\n const outcome = await writeToClipboard(text, this.host.nativeElement.ownerDocument);\n if (outcome !== 'refused') {\n this.announce(this.t('copied', { count: cells.reduce((sum, line) => sum + line.length, 0) }));\n }\n }\n\n protected onCellKeyDown(event: KeyboardEvent, cell: GridCell) {\n if (event.defaultPrevented) return;\n const session = this.edit();\n const target = event.target as HTMLElement;\n const cellElement = event.currentTarget as HTMLElement;\n const insideWidget = target !== cellElement;\n const key = event.key;\n const mirror = this.rtl();\n const ctrl = event.ctrlKey || event.metaKey;\n\n if (session && sameCell(session.cell, cell)) {\n if (key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.cancelEdit();\n } else if (key === 'Enter') {\n event.preventDefault();\n this.commitEdit('keyboard', { move: this.resolvedEditMode() === 'cell' ? 'down' : 'stay' });\n } else if (key === 'Tab') {\n const next = this.nextEditableCell(cell, event.shiftKey ? 'previous' : 'next');\n if (next) {\n event.preventDefault();\n this.commitEdit('keyboard', { move: event.shiftKey ? 'previous' : 'next' });\n } else this.commitEdit('keyboard', { move: 'stay' });\n } else if (key === 'F2') {\n event.preventDefault();\n this.commitEdit('keyboard', { move: 'stay' });\n }\n return;\n }\n if (session && session.columns.includes(cell.column) && session.cell.row === cell.row) {\n if (key === 'Escape') {\n event.preventDefault();\n this.cancelEdit();\n } else if (key === 'Enter') {\n event.preventDefault();\n this.commitEdit('keyboard', { move: 'stay' });\n }\n return;\n }\n /* A widget of a header cell: Escape and F2 return to the cell, Tab cycles\n the cell's widgets without leaving it. */\n if (\n insideWidget &&\n cell.row === HEADER_ROW &&\n target.closest('[data-part=\"column-actions\"]') !== null\n ) {\n if (key === 'Escape' || key === 'F2') {\n event.preventDefault();\n cellElement.focus();\n return;\n }\n if (key === 'Tab') {\n const widgets = [\n ...cellElement.querySelectorAll<HTMLElement>(\n '[data-part=\"column-actions\"] button:not([disabled])',\n ),\n ];\n const index = widgets.indexOf(target);\n event.preventDefault();\n widgets[(index + (event.shiftKey ? -1 : 1) + widgets.length) % widgets.length]?.focus();\n return;\n }\n }\n if (insideWidget && !target.matches(SIMPLE_WIDGET)) {\n if (key === 'Escape') {\n event.preventDefault();\n cellElement.focus();\n } else if (key === 'Tab') {\n const widgets = [...cellElement.querySelectorAll<HTMLElement>(FOCUSABLE)];\n if (widgets.length > 1) {\n const index = widgets.indexOf(target);\n event.preventDefault();\n widgets[(index + (event.shiftKey ? -1 : 1) + widgets.length) % widgets.length]?.focus();\n }\n }\n return;\n }\n\n const header = cell.row === HEADER_ROW;\n const column = this.resolvedById().get(cell.column);\n const row = isBodyRow(cell.row) ? this.rowOf(cell.row) : undefined;\n const grid = this.cursorGrid();\n const mode = this.resolvedSelectionMode();\n\n if (header && column) {\n /* Shift+F10 and the Menu key open the column menu on the header cell. */\n if (\n (key === 'ContextMenu' || (key === 'F10' && event.shiftKey)) &&\n !target.closest(EDITABLE)\n ) {\n if (this.openColumnMenu(cell.column, cellElement, 'keyboard', event, cellElement)) {\n event.preventDefault();\n this.keyboardMenuAt = Date.now();\n }\n return;\n }\n if (ctrl && event.shiftKey && (key === 'ArrowLeft' || key === 'ArrowRight')) {\n event.preventDefault();\n this.resizeBy(\n cell.column,\n (key === 'ArrowRight') !== mirror ? RESIZE_STEP : -RESIZE_STEP,\n event,\n );\n return;\n }\n if (ctrl && event.shiftKey && key === 'Enter') {\n event.preventDefault();\n this.fit(cell.column, 'keyboard', event);\n return;\n }\n /* F2 enters the header cell: its widgets are the column's help, its\n filter and its menu, and a reader reaches them without a pointer. */\n if (key === 'F2' && !insideWidget) {\n const first = cellElement.querySelector<HTMLElement>(\n '[data-part=\"column-actions\"] button:not([disabled])',\n );\n if (first) {\n event.preventDefault();\n first.focus();\n }\n return;\n }\n if (event.altKey && (key === 'ArrowLeft' || key === 'ArrowRight')) {\n event.preventDefault();\n this.moveColumn(cell.column, (key === 'ArrowRight') !== mirror ? 1 : -1, event);\n this.pendingFocus = cell;\n this.flushFocus();\n return;\n }\n if (ctrl && key === 'Enter') {\n event.preventDefault();\n cellElement.querySelector<HTMLElement>('[data-part=\"column-menu\"]')?.click();\n return;\n }\n if ((key === 'Enter' || key === ' ') && !insideWidget) {\n event.preventDefault();\n this.pressSort(cell.column, event.shiftKey, event, 'keyboard');\n return;\n }\n }\n\n if (\n isGroupCursorRow(cell.row) &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n !event.shiftKey\n ) {\n const groupKey = cell.row.slice(GROUP_ROW_PREFIX.length);\n const held = this.expandedGroups();\n const open = held === 'all' || held.includes(groupKey);\n if (((key === 'ArrowRight') !== mirror) !== open) {\n event.preventDefault();\n this.toggleGroup(groupKey, event, 'keyboard');\n return;\n }\n }\n /* Alt with the vertical arrows moves the row, as Alt with the\n horizontal ones moves the column. */\n if (row && event.altKey && (key === 'ArrowUp' || key === 'ArrowDown')) {\n event.preventDefault();\n this.moveRow(cell.row, key === 'ArrowDown' ? 1 : -1, event);\n this.pendingFocus = cell;\n return;\n }\n\n /* In the tree column, the horizontal arrows open a closed branch, close\n an open one, and climb to the parent from a closed row or a leaf. */\n const treeColumn = this.treeColumn();\n if (\n row &&\n treeColumn !== null &&\n cell.column === treeColumn &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n !event.shiftKey\n ) {\n const node = this.nodeByKey().get(cell.row);\n const branch =\n node !== undefined && (node.childCount > 0 || this.tree()?.hasChildren?.(row) === true);\n const opening = (key === 'ArrowRight') !== mirror;\n if (node && branch && opening !== node.open) {\n event.preventDefault();\n this.toggleBranch(cell.row, event, 'keyboard');\n return;\n }\n if (node && !opening && node.parent !== null) {\n event.preventDefault();\n this.setCurrent({ row: node.parent, column: cell.column }, 'keyboard', event);\n return;\n }\n }\n if (\n row &&\n cell.column === EXPANDER_COLUMN &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n !event.shiftKey &&\n this.isExpandable(row)\n ) {\n const open = this.expandedSet().has(cell.row);\n if (((key === 'ArrowRight') !== mirror) !== open) {\n event.preventDefault();\n this.toggleExpanded(cell.row, event, 'keyboard');\n return;\n }\n }\n\n if (key === ' ' && event.shiftKey && row) {\n event.preventDefault();\n if (mode === 'range') {\n const line = rowRange(grid, cell.row);\n if (line) this.requestRange(line, 'keyboard', event);\n } else this.toggleSelected(cell.row, { range: false, source: event, reason: 'keyboard' });\n return;\n }\n if (key === ' ' && ctrl && mode === 'range' && column) {\n event.preventDefault();\n const line = columnRange(grid, cell.column);\n if (line) this.requestRange(line, 'keyboard', event);\n return;\n }\n if ((key === 'a' || key === 'A') && ctrl && !insideWidget) {\n if (mode === 'multiple') {\n event.preventDefault();\n this.commitSelection(this.selectableKeys(), 'select', event);\n return;\n }\n if (mode === 'range') {\n event.preventDefault();\n const all = wholeRange(grid);\n if (all) this.requestRange(all, 'keyboard', event);\n return;\n }\n }\n if ((key === 'c' || key === 'C') && ctrl && !insideWidget) {\n const selection = cellElement.ownerDocument.getSelection();\n if (selection && selection.toString().length > 0) return;\n event.preventDefault();\n void this.copyRange(cell);\n return;\n }\n if (key === 'Escape' && mode === 'range' && this.range()) {\n event.preventDefault();\n this.requestRange(null, 'clear', event);\n return;\n }\n\n /* The pop-in is a cell of the row: it edits nothing, and Enter enters its\n widgets or activates the row as any other cell does. */\n if (row && (column || cell.column === POPIN_COLUMN_ID) && (key === 'Enter' || key === 'F2')) {\n const editable = column !== undefined && this.isEditable(column.column, row);\n if (editable && !insideWidget) {\n event.preventDefault();\n this.startEdit(cell);\n return;\n }\n const widgets = cellElement.querySelectorAll<HTMLElement>(FOCUSABLE);\n if (!insideWidget && widgets.length > 0) {\n event.preventDefault();\n widgets[0]!.focus();\n return;\n }\n if (key === 'Enter' && this.activatable() && !insideWidget) {\n event.preventDefault();\n this.activate.emit({ key: cell.row, reason: 'keyboard', event });\n return;\n }\n }\n if (\n row &&\n column &&\n !insideWidget &&\n key.length === 1 &&\n !ctrl &&\n !event.altKey &&\n (column.kind === 'text' || column.kind === 'number') &&\n this.isEditable(column.column, row)\n ) {\n if (column.kind === 'number' && !/[0-9.,-]/.test(key)) return;\n event.preventDefault();\n this.startEdit(cell, key);\n return;\n }\n\n const intents: Record<string, CursorIntent> = {\n ArrowUp: 'up',\n ArrowDown: 'down',\n ArrowLeft: mirror ? 'end' : 'start',\n ArrowRight: mirror ? 'start' : 'end',\n Home: ctrl ? 'first' : 'rowStart',\n End: ctrl ? 'last' : 'rowEnd',\n PageUp: 'pageUp',\n PageDown: 'pageDown',\n };\n const intent = intents[key];\n if (!intent) return;\n if (\n insideWidget &&\n (key === 'ArrowLeft' || key === 'ArrowRight' || key === 'Home' || key === 'End') &&\n target.matches('input:not([type=\"checkbox\"]):not([type=\"radio\"]), textarea')\n ) {\n return;\n }\n event.preventDefault();\n const next = this.landOn(moveCursor(grid, cell, intent));\n if (event.shiftKey && key.startsWith('Arrow')) {\n if (mode === 'range' && isBodyRow(next.row)) {\n this.requestRange({ anchor: this.range()?.anchor ?? cell, focus: next }, 'keyboard', event);\n } else if (\n mode === 'multiple' &&\n (key === 'ArrowUp' || key === 'ArrowDown') &&\n isBodyRow(next.row)\n ) {\n this.toggleSelected(next.row, { range: true, source: event, reason: 'keyboard' });\n }\n }\n if (!sameCell(next, cell)) this.setCurrent(next, 'keyboard', event);\n }\n\n /* ── Imperative surface ─────────────────────────────────────────────── */\n scrollToRow(key: string, align: 'start' | 'center' | 'end' | 'nearest' = 'nearest') {\n const index = this.nodes().findIndex((node) => node.key === key);\n const scroller = this.scrollRef()?.nativeElement;\n if (index === -1 || !scroller) return;\n const metrics = this.metrics();\n const size = this.rowSize();\n const offset = metrics ? metrics.offsetOf(index) : index * size;\n const head = scroller.querySelector<HTMLElement>('[data-part=\"head\"]')?.offsetHeight ?? 0;\n const height = this.viewport().height;\n let top = offset;\n if (align === 'center') top = offset - height / 2 + size;\n else if (align === 'end') top = offset - height + size + head;\n else if (align === 'nearest') {\n const visibleTop = scroller.scrollTop;\n const visibleBottom = visibleTop + height - head;\n if (offset >= visibleTop && offset + size <= visibleBottom) return;\n top = offset < visibleTop ? offset : offset - height + size + head;\n }\n scroller.scrollTo({ top: Math.max(0, top) });\n if (this.windowsRows()) this.heldRows.set([key]);\n }\n scrollToColumn(columnId: string) {\n const scroller = this.scrollRef()?.nativeElement;\n const column = this.resolvedById().get(columnId);\n if (!scroller || !column || column.pinned) return;\n const gutters = this.gutters().reduce((sum, width) => sum + width, 0);\n let offset = gutters;\n for (const entry of this.resolved()) {\n if (entry.id === columnId) break;\n if (entry.pinned === null || entry.pinned === 'start') offset += entry.width;\n }\n const startZone =\n this.resolved()\n .filter((entry) => entry.pinned === 'start')\n .reduce((sum, entry) => sum + entry.width, 0) + gutters;\n const endZone = this.resolved()\n .filter((entry) => entry.pinned === 'end')\n .reduce((sum, entry) => sum + entry.width, 0);\n const left = Math.abs(scroller.scrollLeft);\n const width = this.viewport().width;\n if (offset < left + startZone) scroller.scrollTo({ left: offset - startZone });\n else if (offset + column.width > left + width - endZone)\n scroller.scrollTo({ left: offset + column.width - width + endZone });\n }\n scrollToCell(cell: GridCell) {\n this.scrollToRow(cell.row);\n this.scrollToColumn(cell.column);\n }\n getVisibleRows(): readonly Row[] {\n return this.resolvedMode() === 'client' ? this.applied().rows : this.rows();\n }\n /** The file's text, by `toCsv`, for the consumer who sends it elsewhere. */\n toCsv(options: DataGridExportOptions = {}): string {\n const { filename: _filename, rows: which, columns: whichColumns, ...csv } = options;\n const visible = this.getVisibleRows();\n const selected = this.selectedSet();\n const chosen =\n which === 'selected' ? visible.filter((row) => selected.has(this.rowKeyOf(row))) : visible;\n const model =\n whichColumns === 'all' ? this.columns() : this.resolved().map((column) => column.column);\n return toCsv(chosen, model, {\n ...this.formatOptions(),\n ...csv,\n booleans: csv.booleans ?? this.formatOptions().booleans,\n });\n }\n /**\n * Builds the file and hands it to the browser as a download: an anchor is\n * the one way a browser saves a file without a permission prompt, and the\n * URL is revoked as soon as the click has taken it.\n */\n exportCsv(options: DataGridExportOptions = {}) {\n const text = this.toCsv(options);\n const doc = this.host.nativeElement.ownerDocument;\n const url = URL.createObjectURL(new Blob([text], { type: 'text/csv;charset=utf-8' }));\n const link = doc.createElement('a');\n link.href = url;\n link.download = options.filename ?? 'export.csv';\n link.click();\n URL.revokeObjectURL(url);\n }\n\n /* ── Forms ──────────────────────────────────────────────────────────── */\n writeValue(value: DataGridSelection | undefined) {\n this.value.set(value ?? (this.resolvedSelectionMode() === 'multiple' ? [] : null));\n }\n registerOnChange(fn: (value: DataGridSelection) => void) {\n this.notify = fn;\n }\n registerOnTouched(fn: () => void) {\n this.touched = fn;\n }\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n}\n","import { effect, signal, untracked, type Injector, type WritableSignal } from '@angular/core';\nimport {\n emptyGridView,\n normalizeColumnState,\n parseGridView,\n serializeGridView,\n type GridColumn,\n type GridColumnState,\n type GridDensity,\n type GridQuery,\n type GridView,\n type GridViewOptions,\n type GridViewStorage,\n} from '@slotted/core/grid';\n\nexport type { GridViewStorage } from '@slotted/core/grid';\n\nexport interface PersistedGridViewOptions<Row> extends GridViewOptions {\n /** The entry the view is kept under. */\n readonly key: string;\n /** The model, so a column it no longer has is dropped on read. */\n readonly columns: readonly GridColumn<Row>[];\n /** Default `window.localStorage`; `null` keeps the view in memory only. */\n readonly storage?: GridViewStorage | null | undefined;\n /** What the view is before anything was saved, and after `reset`. */\n readonly defaultQuery?: GridQuery | undefined;\n readonly defaultColumnState?: Partial<GridColumnState> | undefined;\n /** The density before anything was saved, and after `reset`. Default `null`: the page's. */\n readonly defaultDensity?: GridDensity | null | undefined;\n /** Required outside an injection context. */\n readonly injector?: Injector | undefined;\n}\n\nexport interface PersistedGridView {\n /** Bind with `[(query)]`. */\n readonly query: WritableSignal<GridQuery>;\n /** Bind with `[(columnState)]`. */\n readonly columnState: WritableSignal<GridColumnState>;\n /** Bind with `[density]`; `null` inherits the page's density. */\n readonly density: WritableSignal<GridDensity | null>;\n /** Back to the defaults, and the entry removed. */\n reset(): void;\n}\n\nfunction defaultStorage(): GridViewStorage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\n/**\n * The reader's view of a grid, kept across visits: the column state, the\n * query and the density, read once from the store and written after every change. Three\n * writable signals for the grid's bindings. The store is reached\n * inside `try` both ways — a private window that refuses, a quota that is\n * full and a server that has no window all leave the view in memory.\n */\nexport function persistedGridView<Row>({\n key,\n columns,\n storage,\n defaultQuery,\n defaultColumnState,\n defaultDensity,\n injector,\n ...options\n}: PersistedGridViewOptions<Row>): PersistedGridView {\n const store = storage === undefined ? defaultStorage() : storage;\n const defaults: GridView = {\n columns: normalizeColumnState(defaultColumnState ?? null, columns),\n query: defaultQuery ?? emptyGridView(options.defaultPageSize).query,\n density: defaultDensity ?? null,\n };\n let text: string | null;\n try {\n text = store?.getItem(key) ?? null;\n } catch {\n text = null;\n }\n let initial = defaults;\n if (text !== null && text !== '') {\n const saved = parseGridView(text, columns, options);\n initial = {\n columns: saved.columns,\n /* A saved query with no page keeps the default's page: the page size is\n the application's, and an older entry may predate paging. */\n query:\n saved.query.page === null ? { ...saved.query, page: defaults.query.page } : saved.query,\n density: saved.density ?? defaults.density,\n };\n }\n const query = signal<GridQuery>(initial.query);\n const columnState = signal<GridColumnState>(initial.columns);\n const density = signal<GridDensity | null>(initial.density);\n\n /* The first run is the read; every run after is a change to write, except\n the one a reset causes. */\n let settled = false;\n let skip = false;\n effect(\n () => {\n const view: GridView = { query: query(), columns: columnState(), density: density() };\n if (!settled || skip) {\n settled = true;\n skip = false;\n return;\n }\n untracked(() => {\n if (!store) return;\n try {\n const next = serializeGridView(view, columns, options);\n if (next === '') store.removeItem(key);\n else store.setItem(key, next);\n } catch {\n /* The store refused; the view stays in memory. */\n }\n });\n },\n injector ? { injector } : undefined,\n );\n\n return {\n query,\n columnState,\n density,\n /* The defaults are what an empty store means, so the entry goes rather\n than being rewritten as the defaults. */\n reset: () => {\n /* A signal set to the object it holds notifies nothing, so the skip is\n armed only when the effect will run. */\n skip =\n query() !== defaults.query ||\n columnState() !== defaults.columns ||\n density() !== defaults.density;\n query.set(defaults.query);\n columnState.set(defaults.columns);\n density.set(defaults.density);\n try {\n store?.removeItem(key);\n } catch {\n /* The store refused; nothing was kept in it either way. */\n }\n },\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}