@tailng-ui/primitives 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/lib/layout/index.d.ts +1 -0
- package/src/lib/layout/index.d.ts.map +1 -1
- package/src/lib/layout/index.js +1 -0
- package/src/lib/layout/index.js.map +1 -1
- package/src/lib/layout/table/__tests__/tng-table.test-harness.d.ts +300 -0
- package/src/lib/layout/table/__tests__/tng-table.test-harness.d.ts.map +1 -0
- package/src/lib/layout/table/__tests__/tng-table.test-harness.js +2492 -0
- package/src/lib/layout/table/__tests__/tng-table.test-harness.js.map +1 -0
- package/src/lib/layout/table/index.d.ts +6 -0
- package/src/lib/layout/table/index.d.ts.map +1 -0
- package/src/lib/layout/table/index.js +6 -0
- package/src/lib/layout/table/index.js.map +1 -0
- package/src/lib/layout/table/tng-table-render.d.ts +175 -0
- package/src/lib/layout/table/tng-table-render.d.ts.map +1 -0
- package/src/lib/layout/table/tng-table-render.js +304 -0
- package/src/lib/layout/table/tng-table-render.js.map +1 -0
- package/src/lib/layout/table/tng-table-sizing.d.ts +75 -0
- package/src/lib/layout/table/tng-table-sizing.d.ts.map +1 -0
- package/src/lib/layout/table/tng-table-sizing.js +361 -0
- package/src/lib/layout/table/tng-table-sizing.js.map +1 -0
- package/src/lib/layout/table/tng-table-sort.d.ts +53 -0
- package/src/lib/layout/table/tng-table-sort.d.ts.map +1 -0
- package/src/lib/layout/table/tng-table-sort.js +167 -0
- package/src/lib/layout/table/tng-table-sort.js.map +1 -0
- package/src/lib/layout/table/tng-table-virtual.d.ts +55 -0
- package/src/lib/layout/table/tng-table-virtual.d.ts.map +1 -0
- package/src/lib/layout/table/tng-table-virtual.js +250 -0
- package/src/lib/layout/table/tng-table-virtual.js.map +1 -0
- package/src/lib/layout/table/tng-table.d.ts +362 -0
- package/src/lib/layout/table/tng-table.d.ts.map +1 -0
- package/src/lib/layout/table/tng-table.js +1490 -0
- package/src/lib/layout/table/tng-table.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-table.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/table/tng-table.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n Input,\n type OnDestroy,\n type OnInit,\n type Signal,\n booleanAttribute,\n contentChildren,\n ElementRef,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n createTngRowExpansionController,\n createTngRowSelectionController,\n resolveGridNavigationKeyAction,\n resolveNavigableGridCell,\n type TngGridNavigableCell,\n type TngGridNavigationActionType,\n type TngTableRowExpansionMode,\n type TngTableRowExpansionState,\n type TngTableRowSelectionState,\n type TngTableSelectionMode,\n} from '@tailng-ui/cdk';\n\nexport type TngTableDirection = 'ltr' | 'rtl';\nexport type TngTableLayoutMode = 'auto' | 'fixed';\nexport type TngTableRowIdResolver<TValue = unknown> = (row: TValue, index: number) => string;\nexport type TngTableInteractionTrigger = 'keyboard' | 'pointer' | 'programmatic';\nexport type TngTableScrollAxis = 'both' | 'x' | 'y';\nexport type TngTableStickySide = 'end' | 'start';\n\nexport type TngTableSelectionChange = Readonly<{\n anchorId: string | null;\n changedId: string | null;\n selectedIds: readonly string[];\n trigger: TngTableInteractionTrigger;\n}>;\n\nexport type TngTableExpansionChange = Readonly<{\n expanded: boolean;\n expandedIds: readonly string[];\n rowId: string;\n trigger: TngTableInteractionTrigger;\n}>;\n\nexport type TngTableRowClickEvent = Readonly<{\n originalEvent: MouseEvent;\n rowId: string | null;\n}>;\n\nexport type TngTableRowContextMenuEvent = Readonly<{\n originalEvent: MouseEvent;\n rowId: string | null;\n}>;\n\nexport type TngTableCellClickEvent = Readonly<{\n columnId: string | null;\n originalEvent: MouseEvent;\n rowId: string | null;\n}>;\n\ntype TngTableKeydownEvent = Readonly<Pick<KeyboardEvent, 'key' | 'preventDefault'>>;\ntype TngTableMovementActionType = Exclude<TngGridNavigationActionType, 'activate' | 'exit'>;\ntype TngTablePageDirection = 'backward' | 'forward';\ntype TngTableCellPosition = Readonly<{\n col: number;\n row: number;\n}>;\ntype TngTableFocusableCell = TngTableCell | TngTableHeaderCell;\nconst tngTableInteractiveTargetSelector = [\n 'a[href]',\n 'button',\n 'input',\n 'label',\n 'select',\n 'summary',\n 'textarea',\n '[contenteditable=\"\"]',\n '[contenteditable=\"plaintext-only\"]',\n '[contenteditable=\"true\"]',\n '[data-tng-table-interactive]',\n '[role=\"button\"]',\n '[role=\"checkbox\"]',\n '[role=\"combobox\"]',\n '[role=\"link\"]',\n '[role=\"listbox\"]',\n '[role=\"menuitem\"]',\n '[role=\"option\"]',\n '[role=\"radio\"]',\n '[role=\"switch\"]',\n '[role=\"tab\"]',\n '[role=\"textbox\"]',\n].join(',');\n\nfunction createTngTableCellKey(position: TngTableCellPosition): string {\n return `${position.row}:${position.col}`;\n}\n\nfunction compareTngTableCellPositions(\n a: TngTableCellPosition,\n b: TngTableCellPosition,\n): number {\n if (a.row !== b.row) {\n return a.row - b.row;\n }\n\n return a.col - b.col;\n}\n\nfunction isMovementActionType(\n actionType: TngGridNavigationActionType,\n): actionType is TngTableMovementActionType {\n return actionType !== 'activate' && actionType !== 'exit';\n}\n\nfunction resolveTngTableCellPosition(\n element: HTMLTableCellElement,\n): TngTableCellPosition | null {\n if (element.cellIndex < 0) {\n return null;\n }\n\n const rowElement = element.parentElement;\n if (!(rowElement instanceof HTMLTableRowElement) || rowElement.rowIndex < 0) {\n return null;\n }\n\n return Object.freeze({\n col: element.cellIndex,\n row: rowElement.rowIndex,\n });\n}\n\nfunction isInsideContainer(container: HTMLElement, value: unknown): value is Node {\n return value instanceof Node && container.contains(value);\n}\n\nfunction isFocusVisibleElement(value: Element): boolean {\n return value.matches(':focus-visible');\n}\n\nfunction hasTableKeyboardModifiers(event: KeyboardEvent): boolean {\n return event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n}\n\nfunction hasInteractiveEventTarget(container: HTMLElement, target: unknown): boolean {\n if (!(target instanceof Element)) {\n return false;\n }\n\n const interactiveTarget = target.closest<HTMLElement>(tngTableInteractiveTargetSelector);\n return interactiveTarget !== null && interactiveTarget !== container && container.contains(interactiveTarget);\n}\n\nfunction resolveTngTablePageDirection(key: string): TngTablePageDirection | null {\n if (key === 'PageDown') {\n return 'forward';\n }\n\n if (key === 'PageUp') {\n return 'backward';\n }\n\n return null;\n}\n\nfunction normalizeCssLength(value: unknown): string | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return `${value}px`;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeTableLayoutMode(value: unknown): TngTableLayoutMode {\n return value === 'fixed' ? 'fixed' : 'auto';\n}\n\nfunction normalizeTableScrollAxis(value: unknown): TngTableScrollAxis {\n if (value === 'both' || value === 'y') {\n return value;\n }\n\n return 'x';\n}\n\nfunction normalizeTableStickySide(value: unknown): TngTableStickySide | null {\n return value === 'start' || value === 'end' ? value : null;\n}\n\nfunction resolveStickyPhysicalSide(\n side: TngTableStickySide,\n direction: TngTableDirection | null,\n): 'left' | 'right' {\n if (side === 'start') {\n return direction === 'rtl' ? 'right' : 'left';\n }\n\n return direction === 'rtl' ? 'left' : 'right';\n}\n\nfunction normalizeTableDirection(value: unknown): TngTableDirection | null {\n if (value === 'ltr' || value === 'rtl') {\n return value;\n }\n\n return null;\n}\n\nexport function resolveTngTableEmptyState(\n items: readonly unknown[] | null | undefined,\n loading: boolean,\n): boolean {\n if (loading || items === null || items === undefined) {\n return false;\n }\n\n return items.length === 0;\n}\n\nfunction normalizeExpansionMode(value: unknown): TngTableRowExpansionMode {\n return value === 'single' ? 'single' : 'multiple';\n}\n\nfunction normalizeOptionalString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalizeOptionalStringArray(value: readonly string[] | null | undefined): readonly string[] {\n return Array.isArray(value)\n ? value\n .filter((item): item is string => typeof item === 'string')\n .map((item) => item.trim())\n .filter((item) => item.length > 0)\n : [];\n}\n\nfunction normalizeSelectionMode(value: unknown): TngTableSelectionMode {\n return value === 'multiple' ? 'multiple' : 'single';\n}\n\nfunction normalizeBooleanOrNull(value: unknown): boolean | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n return booleanAttribute(value);\n}\n\n@Directive({\n selector: 'thead[tngTableHeader]',\n exportAs: 'tngTableHeader',\n})\nexport class TngTableHeader {\n public readonly sticky = input<boolean, boolean | string>(false, {\n alias: 'tngTableHeaderSticky',\n transform: booleanAttribute,\n });\n public readonly stickyOffset = input<string | null, unknown>(null, {\n alias: 'tngTableHeaderStickyOffset',\n transform: normalizeCssLength,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-header' as const;\n\n @HostBinding('attr.data-sticky')\n protected get dataStickyAttr(): '' | null {\n return this.isSticky() ? '' : null;\n }\n\n public getStickyInset(): string {\n return this.stickyOffset() ?? '0px';\n }\n\n public isSticky(): boolean {\n return this.sticky();\n }\n}\n\n@Directive({\n selector: 'tbody[tngTableBody]',\n exportAs: 'tngTableBody',\n})\nexport class TngTableBody {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-body' as const;\n}\n\n@Directive({\n selector: 'tfoot[tngTableFooter]',\n exportAs: 'tngTableFooter',\n})\nexport class TngTableFooter {\n public readonly sticky = input<boolean, boolean | string>(false, {\n alias: 'tngTableFooterSticky',\n transform: booleanAttribute,\n });\n public readonly stickyOffset = input<string | null, unknown>(null, {\n alias: 'tngTableFooterStickyOffset',\n transform: normalizeCssLength,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-footer' as const;\n\n @HostBinding('attr.data-sticky')\n protected get dataStickyAttr(): '' | null {\n return this.isSticky() ? '' : null;\n }\n\n public getStickyInset(): string {\n return this.stickyOffset() ?? '0px';\n }\n\n public isSticky(): boolean {\n return this.sticky();\n }\n}\n\n@Directive({\n selector: '[tngTableScrollContainer]',\n exportAs: 'tngTableScrollContainer',\n})\nexport class TngTableScrollContainer {\n public readonly axis = input<TngTableScrollAxis, unknown>('x', {\n alias: 'tngTableScrollAxis',\n transform: normalizeTableScrollAxis,\n });\n public readonly dir = input<TngTableDirection | null, unknown>(null, {\n alias: 'dir',\n transform: normalizeTableDirection,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-scroll-container' as const;\n\n @HostBinding('attr.dir')\n protected get dirAttr(): TngTableDirection | null {\n return this.dir();\n }\n\n @HostBinding('attr.data-overflow-axis')\n protected get dataOverflowAxisAttr(): TngTableScrollAxis {\n return this.axis();\n }\n\n @HostBinding('style.display')\n protected readonly display = 'block';\n\n @HostBinding('style.max-width')\n protected readonly maxWidth = '100%';\n\n @HostBinding('style.direction')\n protected get directionStyleAttr(): TngTableDirection | null {\n return this.dir();\n }\n\n @HostBinding('style.overflow-x')\n protected get overflowXAttr(): 'auto' | 'hidden' {\n return this.axis() === 'x' || this.axis() === 'both' ? 'auto' : 'hidden';\n }\n\n @HostBinding('style.overflow-y')\n protected get overflowYAttr(): 'auto' | 'hidden' {\n return this.axis() === 'y' || this.axis() === 'both' ? 'auto' : 'hidden';\n }\n}\n\n@Directive({\n selector: 'table[tngTable][tngTableSelection]',\n exportAs: 'tngTableSelection',\n})\nexport class TngTableSelection {\n private readonly rows = contentChildren(forwardRef(() => TngTableRow), {\n descendants: true,\n }) as Signal<readonly TngTableRow[]>;\n private uncontrolledAnchorId: string | null = null;\n private uncontrolledSelectedIds: readonly string[] = [];\n\n public readonly mode = input<TngTableSelectionMode, unknown>('single', {\n alias: 'tngTableSelectionMode',\n transform: normalizeSelectionMode,\n });\n public readonly selectedIds = input<readonly string[] | null | undefined>(undefined, {\n alias: 'tngTableSelectedIds',\n });\n\n public readonly selectionChange = output<TngTableSelectionChange>();\n\n @HostBinding('attr.data-selectable')\n protected readonly dataSelectable = '' as const;\n\n public clear(trigger: TngTableInteractionTrigger = 'programmatic'): TngTableRowSelectionState<string> {\n return this.commit(this.createController().clear(), null, trigger);\n }\n\n public isSelected(rowId: string): boolean {\n return this.createController().isSelected(rowId);\n }\n\n public replace(\n rowId: string,\n trigger: TngTableInteractionTrigger = 'programmatic',\n ): TngTableRowSelectionState<string> {\n return this.commit(this.createController().replace(rowId), rowId, trigger);\n }\n\n public selectAll(\n rowIds: readonly string[],\n trigger: TngTableInteractionTrigger = 'programmatic',\n ): TngTableRowSelectionState<string> {\n return this.commit(this.createController().selectAll(rowIds), rowIds[0] ?? null, trigger);\n }\n\n public toggle(\n rowId: string,\n trigger: TngTableInteractionTrigger = 'programmatic',\n ): TngTableRowSelectionState<string> {\n return this.commit(this.createController().toggle(rowId), rowId, trigger);\n }\n\n public toggleFromPointer(row: TngTableRow, event: MouseEvent): void {\n const rowId = row.rowId();\n if (rowId === null || row.isDisabled()) {\n return;\n }\n\n const controller = this.createController();\n const nextState = this.resolvePointerSelectionState(controller, rowId, event);\n\n this.commit(nextState, rowId, 'pointer');\n }\n\n private commit(\n nextState: TngTableRowSelectionState<string>,\n changedId: string | null,\n trigger: TngTableInteractionTrigger,\n ): TngTableRowSelectionState<string> {\n this.uncontrolledAnchorId = nextState.anchorId;\n\n if (this.selectedIds() === undefined) {\n this.uncontrolledSelectedIds = nextState.selectedIds;\n }\n\n this.selectionChange.emit(\n Object.freeze({\n anchorId: nextState.anchorId,\n changedId,\n selectedIds: nextState.selectedIds,\n trigger,\n }),\n );\n\n return nextState;\n }\n\n private createController(): ReturnType<typeof createTngRowSelectionController<string>> {\n return createTngRowSelectionController<string>({\n disabledIds: this.getDisabledRowIds(),\n initialAnchorId: this.getAnchorId(),\n initialSelectedIds: this.getCurrentSelectedIds(),\n mode: this.mode(),\n });\n }\n\n private getAnchorId(): string | null {\n const selectedIds = this.getCurrentSelectedIds();\n const lastSelectedId =\n selectedIds.length > 0 ? selectedIds[selectedIds.length - 1] ?? null : null;\n return this.uncontrolledAnchorId !== null && selectedIds.includes(this.uncontrolledAnchorId)\n ? this.uncontrolledAnchorId\n : lastSelectedId;\n }\n\n private getCurrentSelectedIds(): readonly string[] {\n const controlledSelectedIds = this.selectedIds();\n return controlledSelectedIds === undefined\n ? this.uncontrolledSelectedIds\n : normalizeOptionalStringArray(controlledSelectedIds);\n }\n\n private getDisabledRowIds(): readonly string[] {\n return this.rows()\n .filter((row) => row.isDisabled())\n .map((row) => row.rowId())\n .filter((rowId): rowId is string => rowId !== null);\n }\n\n private getOrderedRowIds(): readonly string[] {\n return this.rows()\n .map((row) => row.rowId())\n .filter((rowId): rowId is string => rowId !== null);\n }\n\n private resolvePointerSelectionState(\n controller: ReturnType<typeof createTngRowSelectionController<string>>,\n rowId: string,\n event: MouseEvent,\n ): TngTableRowSelectionState<string> {\n if (this.mode() !== 'multiple') {\n return controller.replace(rowId);\n }\n\n if (event.shiftKey) {\n return controller.selectRange(\n controller.getState().anchorId ?? rowId,\n rowId,\n this.getOrderedRowIds(),\n );\n }\n\n if (event.ctrlKey || event.metaKey) {\n return controller.toggle(rowId);\n }\n\n return controller.replace(rowId);\n }\n}\n\n@Directive({\n selector: 'table[tngTable][tngTableExpansion]',\n exportAs: 'tngTableExpansion',\n})\nexport class TngTableExpansion {\n private uncontrolledExpandedIds: readonly string[] = [];\n\n public readonly expandedIds = input<readonly string[] | null | undefined>(undefined, {\n alias: 'tngTableExpandedIds',\n });\n public readonly mode = input<TngTableRowExpansionMode, unknown>('multiple', {\n alias: 'tngTableExpansionMode',\n transform: normalizeExpansionMode,\n });\n\n public readonly expansionChange = output<TngTableExpansionChange>();\n\n @HostBinding('attr.data-expandable')\n protected readonly dataExpandable = '' as const;\n\n public clear(trigger: TngTableInteractionTrigger = 'programmatic'): TngTableRowExpansionState<string> {\n const nextState = this.createController().clear();\n return this.commit(nextState, null, trigger);\n }\n\n public isExpanded(rowId: string): boolean {\n return this.createController().isExpanded(rowId);\n }\n\n public toggle(\n rowId: string,\n trigger: TngTableInteractionTrigger = 'programmatic',\n ): TngTableRowExpansionState<string> {\n const nextState = this.createController().toggle(rowId);\n return this.commit(nextState, rowId, trigger);\n }\n\n private commit(\n nextState: TngTableRowExpansionState<string>,\n rowId: string | null,\n trigger: TngTableInteractionTrigger,\n ): TngTableRowExpansionState<string> {\n if (this.expandedIds() === undefined) {\n this.uncontrolledExpandedIds = nextState.expandedIds;\n }\n\n if (rowId !== null) {\n this.expansionChange.emit(\n Object.freeze({\n expanded: nextState.expandedIds.includes(rowId),\n expandedIds: nextState.expandedIds,\n rowId,\n trigger,\n }),\n );\n }\n\n return nextState;\n }\n\n private createController(): ReturnType<typeof createTngRowExpansionController<string>> {\n return createTngRowExpansionController<string>({\n initialExpandedIds: this.getCurrentExpandedIds(),\n mode: this.mode(),\n });\n }\n\n private getCurrentExpandedIds(): readonly string[] {\n const controlledExpandedIds = this.expandedIds();\n return controlledExpandedIds === undefined\n ? this.uncontrolledExpandedIds\n : normalizeOptionalStringArray(controlledExpandedIds);\n }\n}\n\n@Directive({\n selector: 'tr[tngTableRow]',\n exportAs: 'tngTableRow',\n})\nexport class TngTableRow {\n private readonly expansion = inject(forwardRef(() => TngTableExpansion), {\n optional: true,\n }) as TngTableExpansion | null;\n private readonly hostRef = inject<ElementRef<HTMLTableRowElement>>(ElementRef);\n private readonly selection = inject(forwardRef(() => TngTableSelection), {\n optional: true,\n }) as TngTableSelection | null;\n\n public readonly disabled = input<boolean, boolean | string>(false, {\n alias: 'tngTableRowDisabled',\n transform: booleanAttribute,\n });\n public readonly expanded = input<boolean | null, unknown>(null, {\n alias: 'tngTableRowExpanded',\n transform: normalizeBooleanOrNull,\n });\n public readonly rowId = input<string | null, unknown>(null, {\n alias: 'tngTableRowId',\n transform: normalizeOptionalString,\n });\n public readonly selected = input<boolean | null, unknown>(null, {\n alias: 'tngTableRowSelected',\n transform: normalizeBooleanOrNull,\n });\n\n public readonly rowClick = output<TngTableRowClickEvent>();\n public readonly rowContextMenu = output<TngTableRowContextMenuEvent>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-row' as const;\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): string | null {\n return this.isDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-selected')\n protected get ariaSelectedAttr(): string | null {\n if (this.selected() === null && this.selection === null) {\n return null;\n }\n\n return this.isSelected() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.isDisabled() ? '' : null;\n }\n\n @HostBinding('attr.data-expanded')\n protected get dataExpandedAttr(): '' | null {\n return this.isExpanded() ? '' : null;\n }\n\n @HostBinding('attr.data-row-id')\n protected get dataRowIdAttr(): string | null {\n return this.rowId();\n }\n\n @HostBinding('attr.data-selected')\n protected get dataSelectedAttr(): '' | null {\n return this.isSelected() ? '' : null;\n }\n\n public isDisabled(): boolean {\n return this.disabled();\n }\n\n public isExpanded(): boolean {\n const expanded = this.expanded();\n if (expanded !== null) {\n return expanded;\n }\n\n const rowId = this.rowId();\n return rowId !== null && this.expansion?.isExpanded(rowId) === true;\n }\n\n public isSelected(): boolean {\n const selected = this.selected();\n if (selected !== null) {\n return selected;\n }\n\n const rowId = this.rowId();\n return rowId !== null && this.selection?.isSelected(rowId) === true;\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n if (\n this.isDisabled()\n || event.defaultPrevented\n || hasInteractiveEventTarget(this.hostRef.nativeElement, event.target)\n ) {\n return;\n }\n\n this.selection?.toggleFromPointer(this, event);\n this.rowClick.emit(\n Object.freeze({\n originalEvent: event,\n rowId: this.rowId(),\n }),\n );\n }\n\n @HostListener('contextmenu', ['$event'])\n protected onContextMenu(event: MouseEvent): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.rowContextMenu.emit(\n Object.freeze({\n originalEvent: event,\n rowId: this.rowId(),\n }),\n );\n }\n}\n\n@Directive({\n selector: 'td[tngTableCell]',\n exportAs: 'tngTableCell',\n})\nexport class TngTableCell implements OnDestroy, OnInit {\n private readonly footer = inject(TngTableFooter, {\n optional: true,\n });\n private readonly hostRef = inject<ElementRef<HTMLTableCellElement>>(ElementRef);\n private readonly row = inject(TngTableRow, {\n optional: true,\n });\n private readonly table = inject(forwardRef(() => TngTable)) as TngTable;\n\n public readonly cellClick = output<TngTableCellClickEvent>();\n public readonly columnId = input<string | null, unknown>(null, {\n alias: 'tngTableColumnId',\n transform: normalizeOptionalString,\n });\n public readonly headers = input<string | null, unknown>(null, {\n alias: 'tngTableHeaders',\n transform: normalizeOptionalString,\n });\n public readonly stickyColumn = input<TngTableStickySide | null, unknown>(null, {\n alias: 'tngTableStickyColumn',\n transform: normalizeTableStickySide,\n });\n public readonly stickyOffset = input<string | null, unknown>(null, {\n alias: 'tngTableStickyOffset',\n transform: normalizeCssLength,\n });\n public readonly truncate = input<boolean, boolean | string>(false, {\n alias: 'tngTableTruncate',\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-cell' as const;\n\n @HostBinding('attr.data-column-id')\n protected get dataColumnIdAttr(): string | null {\n return this.columnId();\n }\n\n @HostBinding('attr.data-row-id')\n protected get dataRowIdAttr(): string | null {\n return this.row?.rowId() ?? null;\n }\n\n @HostBinding('attr.headers')\n protected get headersAttr(): string | null {\n return this.headers();\n }\n\n @HostBinding('attr.data-sticky')\n protected get dataStickyAttr(): '' | null {\n return this.isSectionSticky() || this.getStickySide() !== null ? '' : null;\n }\n\n @HostBinding('attr.data-sticky-footer')\n protected get dataStickyFooterAttr(): '' | null {\n return this.footer?.isSticky() === true ? '' : null;\n }\n\n @HostBinding('attr.data-sticky-side')\n protected get dataStickySideAttr(): TngTableStickySide | null {\n return this.getStickySide();\n }\n\n @HostBinding('attr.data-truncate')\n protected get dataTruncateAttr(): '' | null {\n return this.truncate() ? '' : null;\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndexAttr(): string {\n return this.table.getCellTabIndex(this);\n }\n\n @HostBinding('style.bottom')\n protected get bottomAttr(): string | null {\n return this.footer?.isSticky() === true ? this.footer.getStickyInset() : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.table.isCellFocused(this) ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.table.isCellFocusVisible(this) ? '' : null;\n }\n\n @HostBinding('style.left')\n protected get leftAttr(): string | null {\n return this.table.getCellStickyInset(this, 'left');\n }\n\n @HostBinding('style.overflow')\n protected get overflowAttr(): 'hidden' | null {\n return this.truncate() ? 'hidden' : null;\n }\n\n @HostBinding('style.position')\n protected get positionAttr(): 'sticky' | null {\n return this.table.getCellStickyPosition(this);\n }\n\n @HostBinding('style.right')\n protected get rightAttr(): string | null {\n return this.table.getCellStickyInset(this, 'right');\n }\n\n @HostBinding('style.text-overflow')\n protected get textOverflowAttr(): 'ellipsis' | null {\n return this.truncate() ? 'ellipsis' : null;\n }\n\n @HostBinding('style.white-space')\n protected get whiteSpaceAttr(): 'nowrap' | null {\n return this.truncate() ? 'nowrap' : null;\n }\n\n @HostBinding('style.z-index')\n protected get zIndexAttr(): string | null {\n return this.table.getCellStickyZIndex(this);\n }\n\n public ngOnDestroy(): void {\n this.table.onCellDestroy(this);\n }\n\n public ngOnInit(): void {\n this.table.registerCell(this);\n }\n\n public cellKey(): string | null {\n const position = this.getCellPosition();\n return position === null ? null : createTngTableCellKey(position);\n }\n\n public focusHost(): void {\n this.hostRef.nativeElement.focus();\n }\n\n public getCellPosition(): TngTableCellPosition | null {\n return resolveTngTableCellPosition(this.hostRef.nativeElement);\n }\n\n public getHostElement(): HTMLTableCellElement {\n return this.hostRef.nativeElement;\n }\n\n public getStickyOffset(): string | null {\n return this.stickyOffset();\n }\n\n public getStickySide(): TngTableStickySide | null {\n return this.stickyColumn();\n }\n\n public isDisabled(): boolean {\n return this.row?.isDisabled() === true;\n }\n\n public isFocusVisible(): boolean {\n return isFocusVisibleElement(this.hostRef.nativeElement);\n }\n\n public isSectionSticky(): boolean {\n return this.footer?.isSticky() === true;\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n if (\n this.isDisabled()\n || event.defaultPrevented\n || hasInteractiveEventTarget(this.hostRef.nativeElement, event.target)\n ) {\n return;\n }\n\n this.cellClick.emit(\n Object.freeze({\n columnId: this.columnId(),\n originalEvent: event,\n rowId: this.row?.rowId() ?? null,\n }),\n );\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.table.onCellFocused(this);\n }\n\n @HostListener('pointerdown')\n protected onPointerDown(): void {\n this.table.onCellPointerDown(this);\n }\n}\n\n@Directive({\n selector: 'th[tngTableHeaderCell]',\n exportAs: 'tngTableHeaderCell',\n})\nexport class TngTableHeaderCell implements OnDestroy, OnInit {\n private readonly header = inject(TngTableHeader, {\n optional: true,\n });\n private readonly hostRef = inject<ElementRef<HTMLTableCellElement>>(ElementRef);\n private readonly table = inject(forwardRef(() => TngTable)) as TngTable;\n\n public readonly columnId = input<string | null, unknown>(null, {\n alias: 'tngTableColumnId',\n transform: normalizeOptionalString,\n });\n public readonly stickyColumn = input<TngTableStickySide | null, unknown>(null, {\n alias: 'tngTableStickyColumn',\n transform: normalizeTableStickySide,\n });\n public readonly stickyOffset = input<string | null, unknown>(null, {\n alias: 'tngTableStickyOffset',\n transform: normalizeCssLength,\n });\n public readonly truncate = input<boolean, boolean | string>(false, {\n alias: 'tngTableTruncate',\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-header-cell' as const;\n\n @HostBinding('attr.data-column-id')\n protected get dataColumnIdAttr(): string | null {\n return this.columnId();\n }\n\n @HostBinding('attr.data-sticky')\n protected get dataStickyAttr(): '' | null {\n return this.isSectionSticky() || this.getStickySide() !== null ? '' : null;\n }\n\n @HostBinding('attr.data-sticky-header')\n protected get dataStickyHeaderAttr(): '' | null {\n return this.header?.isSticky() === true ? '' : null;\n }\n\n @HostBinding('attr.data-sticky-side')\n protected get dataStickySideAttr(): TngTableStickySide | null {\n return this.getStickySide();\n }\n\n @HostBinding('attr.data-truncate')\n protected get dataTruncateAttr(): '' | null {\n return this.truncate() ? '' : null;\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndexAttr(): string {\n return this.table.getCellTabIndex(this);\n }\n\n @HostBinding('style.left')\n protected get leftAttr(): string | null {\n return this.table.getCellStickyInset(this, 'left');\n }\n\n @HostBinding('style.overflow')\n protected get overflowAttr(): 'hidden' | null {\n return this.truncate() ? 'hidden' : null;\n }\n\n @HostBinding('style.position')\n protected get positionAttr(): 'sticky' | null {\n return this.table.getCellStickyPosition(this);\n }\n\n @HostBinding('style.right')\n protected get rightAttr(): string | null {\n return this.table.getCellStickyInset(this, 'right');\n }\n\n @HostBinding('style.text-overflow')\n protected get textOverflowAttr(): 'ellipsis' | null {\n return this.truncate() ? 'ellipsis' : null;\n }\n\n @HostBinding('style.top')\n protected get topAttr(): string | null {\n return this.header?.isSticky() === true ? this.header.getStickyInset() : null;\n }\n\n @HostBinding('style.white-space')\n protected get whiteSpaceAttr(): 'nowrap' | null {\n return this.truncate() ? 'nowrap' : null;\n }\n\n @HostBinding('style.z-index')\n protected get zIndexAttr(): string | null {\n return this.table.getCellStickyZIndex(this);\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.table.isCellFocused(this) ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.table.isCellFocusVisible(this) ? '' : null;\n }\n\n public ngOnDestroy(): void {\n this.table.onCellDestroy(this);\n }\n\n public ngOnInit(): void {\n this.table.registerCell(this);\n }\n\n public cellKey(): string | null {\n const position = this.getCellPosition();\n return position === null ? null : createTngTableCellKey(position);\n }\n\n public focusHost(): void {\n this.hostRef.nativeElement.focus();\n }\n\n public getCellPosition(): TngTableCellPosition | null {\n return resolveTngTableCellPosition(this.hostRef.nativeElement);\n }\n\n public getHostElement(): HTMLTableCellElement {\n return this.hostRef.nativeElement;\n }\n\n public getStickyOffset(): string | null {\n return this.stickyOffset();\n }\n\n public getStickySide(): TngTableStickySide | null {\n return this.stickyColumn();\n }\n\n public isDisabled(): boolean {\n return false;\n }\n\n public isFocusVisible(): boolean {\n return isFocusVisibleElement(this.hostRef.nativeElement);\n }\n\n public isSectionSticky(): boolean {\n return this.header?.isSticky() === true;\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.table.onCellFocused(this);\n }\n\n @HostListener('pointerdown')\n protected onPointerDown(): void {\n this.table.onCellPointerDown(this);\n }\n}\n\n@Directive({\n selector: '[tngTableEmpty]',\n exportAs: 'tngTableEmpty',\n})\nexport class TngTableEmpty {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-empty' as const;\n}\n\n@Directive({\n selector: '[tngTableLoading]',\n exportAs: 'tngTableLoading',\n})\nexport class TngTableLoading {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-loading' as const;\n}\n\n@Directive({\n selector: '[tngTableError]',\n exportAs: 'tngTableError',\n})\nexport class TngTableError {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-error' as const;\n}\n\n@Directive({\n selector: '[tngTableToolbar]',\n exportAs: 'tngTableToolbar',\n})\nexport class TngTableToolbar {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-toolbar' as const;\n}\n\n@Directive({\n selector: '[tngTablePagination]',\n exportAs: 'tngTablePagination',\n})\nexport class TngTablePagination {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-pagination' as const;\n}\n\n@Directive({\n selector: '[tngTableRowExpander]',\n exportAs: 'tngTableRowExpander',\n})\nexport class TngTableRowExpander {\n private readonly expansion = inject(forwardRef(() => TngTableExpansion), {\n optional: true,\n }) as TngTableExpansion | null;\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n public readonly rowId = input.required<string>({\n alias: 'tngTableRowExpander',\n });\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpandedAttr(): string | null {\n if (this.expansion === null) {\n return null;\n }\n\n return this.expansion.isExpanded(this.rowId()) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-expanded')\n protected get dataExpandedAttr(): '' | null {\n return this.expansion?.isExpanded(this.rowId()) ? '' : null;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table-row-expander' as const;\n\n @HostListener('click')\n protected onClick(): void {\n this.toggle('pointer');\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: TngTableKeydownEvent): void {\n if (this.isNativeButton()) {\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n this.toggle('keyboard');\n }\n\n private isNativeButton(): boolean {\n return this.hostRef.nativeElement.tagName === 'BUTTON';\n }\n\n private toggle(trigger: TngTableInteractionTrigger): void {\n this.expansion?.toggle(this.rowId(), trigger);\n }\n}\n\n@Directive({\n selector: 'table[tngTable]',\n exportAs: 'tngTable',\n})\nexport class TngTable implements OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLTableElement>>(ElementRef);\n private readonly headerSlots = contentChildren(TngTableHeader);\n private readonly footerSlots = contentChildren(TngTableFooter);\n private readonly cells = new Set<TngTableFocusableCell>();\n\n private activeCell: TngTableFocusableCell | null = null;\n private domFocusedCell: TngTableFocusableCell | null = null;\n private focusVisibleCell: TngTableFocusableCell | null = null;\n private pendingFocusTrigger: TngTableInteractionTrigger | null = null;\n private restoreFocusElement: HTMLElement | null = null;\n private shouldRestoreFocusOnDestroy = false;\n\n public readonly items = input<readonly unknown[] | null | undefined>(undefined);\n public readonly error = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly filterable = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly layout = input<TngTableLayoutMode, unknown>('auto', {\n alias: 'tngTableLayout',\n transform: normalizeTableLayoutMode,\n });\n public readonly loading = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly pageable = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly rowId = input<TngTableRowIdResolver | null>(null);\n public readonly dir = input<TngTableDirection | null, unknown>(null, {\n transform: normalizeTableDirection,\n });\n private ariaLabelValue: string | null = null;\n private ariaLabelledbyValue: string | null = null;\n\n @Input()\n public set ariaLabel(value: string | null) {\n this.ariaLabelValue = normalizeOptionalString(value);\n }\n\n @Input()\n public set ariaLabelledby(value: string | null) {\n this.ariaLabelledbyValue = normalizeOptionalString(value);\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'table' as const;\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return this.ariaLabelValue;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledbyAttr(): string | null {\n return this.ariaLabelledbyValue;\n }\n\n @HostBinding('attr.data-empty')\n protected get dataEmptyAttr(): '' | null {\n return resolveTngTableEmptyState(this.items(), this.loading()) ? '' : null;\n }\n\n @HostBinding('attr.data-error')\n protected get dataErrorAttr(): '' | null {\n return this.error() ? '' : null;\n }\n\n @HostBinding('attr.data-filterable')\n protected get dataFilterableAttr(): '' | null {\n return this.filterable() ? '' : null;\n }\n\n @HostBinding('attr.data-has-footer')\n protected get dataHasFooterAttr(): '' | null {\n return this.footerSlots().length > 0 ? '' : null;\n }\n\n @HostBinding('attr.data-has-header')\n protected get dataHasHeaderAttr(): '' | null {\n return this.headerSlots().length > 0 ? '' : null;\n }\n\n @HostBinding('attr.data-layout')\n protected get dataLayoutAttr(): TngTableLayoutMode {\n return this.layout();\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoadingAttr(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-pageable')\n protected get dataPageableAttr(): '' | null {\n return this.pageable() ? '' : null;\n }\n\n @HostBinding('attr.dir')\n protected get dirAttr(): TngTableDirection | null {\n return this.dir();\n }\n\n @HostBinding('style.table-layout')\n protected get tableLayoutAttr(): TngTableLayoutMode {\n return this.layout();\n }\n\n public ngOnDestroy(): void {\n const activeElement = this.hostRef.nativeElement.ownerDocument.activeElement;\n const restoreFocusElement = this.getRestoreFocusElement();\n const shouldRestoreFocus =\n restoreFocusElement !== null\n && (\n this.shouldRestoreFocusOnDestroy\n || this.domFocusedCell !== null\n || isInsideContainer(this.hostRef.nativeElement, activeElement)\n );\n if (shouldRestoreFocus) {\n restoreFocusElement.focus();\n queueMicrotask(() => {\n if (restoreFocusElement.isConnected) {\n restoreFocusElement.focus();\n }\n });\n }\n\n this.cells.clear();\n this.activeCell = null;\n this.domFocusedCell = null;\n this.focusVisibleCell = null;\n this.pendingFocusTrigger = null;\n this.restoreFocusElement = null;\n this.shouldRestoreFocusOnDestroy = false;\n }\n\n public getCellTabIndex(cell: TngTableFocusableCell): string {\n if (this.isCellDisabled(cell)) {\n return '-1';\n }\n\n return this.getActiveCell() === cell ? '0' : '-1';\n }\n\n public isCellFocusVisible(cell: TngTableFocusableCell): boolean {\n return this.focusVisibleCell === cell;\n }\n\n public isCellFocused(cell: TngTableFocusableCell): boolean {\n return this.domFocusedCell === cell;\n }\n\n public getCellStickyInset(\n cell: TngTableFocusableCell,\n physicalSide: 'left' | 'right',\n ): string | null {\n const stickySide = cell.getStickySide();\n if (stickySide === null || resolveStickyPhysicalSide(stickySide, this.dir()) !== physicalSide) {\n return null;\n }\n\n return cell.getStickyOffset() ?? '0px';\n }\n\n public getCellStickyPosition(cell: TngTableFocusableCell): 'sticky' | null {\n return cell.isSectionSticky() || cell.getStickySide() !== null ? 'sticky' : null;\n }\n\n public getCellStickyZIndex(cell: TngTableFocusableCell): string | null {\n if (cell.isSectionSticky() && cell.getStickySide() !== null) {\n return '4';\n }\n\n if (cell.isSectionSticky()) {\n return '3';\n }\n\n return cell.getStickySide() !== null ? '2' : null;\n }\n\n public onCellFocused(cell: TngTableFocusableCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n const trigger = this.pendingFocusTrigger ?? 'programmatic';\n this.pendingFocusTrigger = null;\n this.activeCell = cell;\n this.domFocusedCell = cell;\n this.focusVisibleCell =\n trigger === 'keyboard' || cell.isFocusVisible()\n ? cell\n : null;\n }\n\n public onCellDestroy(cell: TngTableFocusableCell): void {\n if (\n this.domFocusedCell === cell\n || this.hostRef.nativeElement.ownerDocument.activeElement === cell.getHostElement()\n ) {\n this.shouldRestoreFocusOnDestroy = true;\n }\n\n this.unregisterCell(cell);\n }\n\n public onCellPointerDown(cell: TngTableFocusableCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n this.pendingFocusTrigger = 'pointer';\n this.focusVisibleCell = null;\n }\n\n public registerCell(cell: TngTableFocusableCell): void {\n this.cells.add(cell);\n this.ensureFallbackActiveCell();\n }\n\n public unregisterCell(cell: TngTableFocusableCell): void {\n this.cells.delete(cell);\n\n if (this.activeCell === cell) {\n this.activeCell = null;\n }\n\n if (this.domFocusedCell === cell) {\n this.domFocusedCell = null;\n }\n\n if (this.focusVisibleCell === cell) {\n this.focusVisibleCell = null;\n }\n\n this.ensureFallbackActiveCell();\n }\n\n @HostListener('focusin', ['$event'])\n protected onFocusIn(event: FocusEvent): void {\n if (isInsideContainer(this.hostRef.nativeElement, event.relatedTarget)) {\n return;\n }\n\n if (event.relatedTarget instanceof HTMLElement) {\n this.restoreFocusElement = event.relatedTarget;\n }\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n if (isInsideContainer(this.hostRef.nativeElement, event.relatedTarget)) {\n return;\n }\n\n this.domFocusedCell = null;\n this.focusVisibleCell = null;\n this.pendingFocusTrigger = null;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n const activeCell = this.getKeydownActiveCell(event);\n if (activeCell === null) {\n return;\n }\n\n if (this.handleEscapeKey(event)) {\n return;\n }\n\n if (this.handlePageNavigation(event, activeCell)) {\n return;\n }\n\n const action = resolveGridNavigationKeyAction(event, {\n direction: this.dir() ?? 'ltr',\n });\n if (action === null || !isMovementActionType(action.type)) {\n return;\n }\n\n if (action.preventDefault) {\n event.preventDefault();\n }\n\n this.moveFocus(activeCell, action.type);\n }\n\n private ensureFallbackActiveCell(): void {\n if (this.activeCell !== null && this.cells.has(this.activeCell) && !this.isCellDisabled(this.activeCell)) {\n return;\n }\n\n this.activeCell = this.getFirstEnabledCell();\n }\n\n private findCellByPosition(position: TngTableCellPosition): TngTableFocusableCell | null {\n for (const cell of this.cells) {\n const candidate = cell.getCellPosition();\n if (candidate?.row === position.row && candidate.col === position.col) {\n return cell;\n }\n }\n\n return null;\n }\n\n private focusCell(\n cell: TngTableFocusableCell,\n trigger: TngTableInteractionTrigger,\n ): void {\n this.activeCell = cell;\n this.pendingFocusTrigger = trigger;\n\n if (trigger === 'keyboard') {\n this.focusVisibleCell = cell;\n }\n\n cell.focusHost();\n }\n\n private getActiveCell(): TngTableFocusableCell | null {\n this.ensureFallbackActiveCell();\n return this.activeCell;\n }\n\n private getBoundaryCell(\n cells: readonly TngTableFocusableCell[],\n direction: TngTablePageDirection,\n ): TngTableFocusableCell | null {\n return direction === 'forward'\n ? cells[cells.length - 1] ?? null\n : cells[0] ?? null;\n }\n\n private getComputedBounds(): Readonly<{ colCount: number; rowCount: number }> {\n let maxCol = 0;\n let maxRow = 0;\n\n for (const cell of this.cells) {\n const position = cell.getCellPosition();\n if (position === null) {\n continue;\n }\n\n maxCol = Math.max(maxCol, position.col);\n maxRow = Math.max(maxRow, position.row);\n }\n\n return Object.freeze({\n colCount: maxCol + 1,\n rowCount: maxRow + 1,\n });\n }\n\n private getEnabledCells(): readonly TngTableFocusableCell[] {\n return [...this.cells]\n .filter((cell) => !this.isCellDisabled(cell) && cell.getCellPosition() !== null)\n .sort((a, b) => {\n const aPosition = a.getCellPosition();\n const bPosition = b.getCellPosition();\n if (aPosition === null && bPosition === null) {\n return 0;\n }\n\n if (aPosition === null) {\n return 1;\n }\n\n if (bPosition === null) {\n return -1;\n }\n\n return compareTngTableCellPositions(aPosition, bPosition);\n });\n }\n\n private getFirstEnabledCell(): TngTableFocusableCell | null {\n return this.getEnabledCells()[0] ?? null;\n }\n\n private getNavigableCells(): readonly TngGridNavigableCell[] {\n const navigableCells: TngGridNavigableCell[] = [];\n\n for (const cell of this.cells) {\n const position = cell.getCellPosition();\n if (position === null) {\n continue;\n }\n\n navigableCells.push({\n col: position.col,\n disabled: this.isCellDisabled(cell),\n row: position.row,\n });\n }\n\n return navigableCells;\n }\n\n private getKeydownActiveCell(event: KeyboardEvent): TngTableFocusableCell | null {\n const activeCell = this.getActiveCell();\n if (activeCell === null || this.isCellDisabled(activeCell)) {\n return null;\n }\n\n return event.target === activeCell.getHostElement() ? activeCell : null;\n }\n\n private getRestoreFocusElement(): HTMLElement | null {\n if (!this.restoreFocusElement?.isConnected) {\n return null;\n }\n\n return this.hostRef.nativeElement.contains(this.restoreFocusElement)\n ? null\n : this.restoreFocusElement;\n }\n\n private handleEscapeKey(event: KeyboardEvent): boolean {\n if (event.key !== 'Escape' || hasTableKeyboardModifiers(event)) {\n return false;\n }\n\n event.preventDefault();\n\n const restoreFocusElement = this.getRestoreFocusElement();\n if (restoreFocusElement !== null) {\n this.pendingFocusTrigger = 'programmatic';\n restoreFocusElement.focus();\n return true;\n }\n\n const activeElement = this.hostRef.nativeElement.ownerDocument.activeElement;\n if (activeElement instanceof HTMLElement) {\n activeElement.blur();\n }\n\n return true;\n }\n\n private handlePageNavigation(\n event: KeyboardEvent,\n activeCell: TngTableFocusableCell,\n ): boolean {\n const direction = resolveTngTablePageDirection(event.key);\n if (direction === null || hasTableKeyboardModifiers(event)) {\n return false;\n }\n\n const currentPosition = activeCell.getCellPosition();\n const enabledCells = this.getEnabledCells();\n if (currentPosition === null || enabledCells.length === 0) {\n return true;\n }\n\n event.preventDefault();\n\n const sameColumnCells = enabledCells.filter((cell) => {\n const position = cell.getCellPosition();\n return position !== null && position.col === currentPosition.col;\n });\n const targetCell = this.getBoundaryCell(sameColumnCells, direction)\n ?? this.getBoundaryCell(enabledCells, direction);\n\n if (targetCell !== null) {\n this.focusCell(targetCell, 'keyboard');\n }\n\n return true;\n }\n\n private isCellDisabled(cell: TngTableFocusableCell): boolean {\n return cell.isDisabled();\n }\n\n private moveFocus(\n activeCell: TngTableFocusableCell,\n actionType: TngTableMovementActionType,\n ): void {\n const currentPosition = activeCell.getCellPosition();\n if (currentPosition === null) {\n return;\n }\n\n const nextPosition = resolveNavigableGridCell(currentPosition, actionType, {\n bounds: this.getComputedBounds(),\n cells: this.getNavigableCells(),\n });\n if (nextPosition === null) {\n return;\n }\n\n const nextCell = this.findCellByPosition(nextPosition);\n if (nextCell === null || this.isCellDisabled(nextCell)) {\n return;\n }\n\n this.focusCell(nextCell, 'keyboard');\n }\n}\n"]}
|