@ni/nimble-components 34.6.1 → 34.6.5

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.
@@ -103,6 +103,11 @@ export class TableRow extends FoundationElement {
103
103
  /** @internal */
104
104
  onCellActionMenuToggle(event, column) {
105
105
  this.menuOpen = event.detail.newState;
106
+ // Workaround for Firefox issue when action menus opened on different rows
107
+ // See: https://github.com/ni/nimble/issues/2744
108
+ if (!event.detail.newState) {
109
+ this.currentActionMenuColumn = undefined;
110
+ }
106
111
  this.emitActionMenuToggleEvent('row-action-menu-toggle', event.detail, column);
107
112
  }
108
113
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/row/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Notifier,\n Observable,\n attr,\n observable,\n volatile\n} from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport type { TableCellState } from '../../../table-column/base/types';\nimport type {\n CellViewSlotRequestEventDetail,\n RowSlotRequestEventDetail,\n TableActionMenuToggleEventDetail,\n TableFieldName,\n TableRecord,\n TableRowExpansionToggleEventDetail,\n TableRowFocusableElements,\n TableRowSelectionToggleEventDetail\n} from '../../types';\nimport type { TableColumn } from '../../../table-column/base';\nimport type { MenuButtonToggleEventDetail } from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport {\n ColumnInternals,\n isColumnInternalsProperty\n} from '../../../table-column/base/models/column-internals';\nimport type { Checkbox } from '../../../checkbox';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-row': TableRow;\n }\n}\n\n/** Represents a single row (element) in the Table's data */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TableDataRecord extends TableRecord {}\n\n/**\n * A styled row that is used within the nimble-table.\n * @internal\n */\nexport class TableRow<\n TDataRecord extends TableDataRecord = TableDataRecord\n> extends FoundationElement {\n @attr({ attribute: 'record-id' })\n public recordId?: string;\n\n @attr({ mode: 'boolean' })\n public selectable = false;\n\n @attr({ mode: 'boolean' })\n public selected = false;\n\n @attr({ attribute: 'hide-selection', mode: 'boolean' })\n public hideSelection = false;\n\n @attr({ mode: 'boolean' })\n public expanded = false;\n\n @attr({ attribute: 'reserve-collapse-space', mode: 'boolean' })\n public reserveCollapseSpace = false;\n\n @observable\n public dataRecord?: TDataRecord;\n\n /**\n * @internal\n * */\n public columnNotifiers: Notifier[] = [];\n\n @observable\n public columns: TableColumn[] = [];\n\n @observable\n public currentActionMenuColumn?: TableColumn;\n\n @observable\n public nestingLevel = 0;\n\n /**\n * Row index in the flattened set of all regular and group header rows.\n * Represents the index in table.tableData (TableRowState[]).\n */\n @observable\n public resolvedRowIndex?: number;\n\n @attr({ attribute: 'is-parent-row', mode: 'boolean' })\n public isParentRow = false;\n\n @attr({ attribute: 'menu-open', mode: 'boolean' })\n public menuOpen = false;\n\n @attr({ attribute: 'row-operation-grid-cell-hidden', mode: 'boolean' })\n public rowOperationGridCellHidden = false;\n\n @attr({ mode: 'boolean' })\n public loading = false;\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the indent\n * level of each column's cell.\n * */\n @observable\n public cellIndentLevels: number[] = [];\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the cell state\n * of each column's cell.\n * */\n @observable\n public cellStates: (TableCellState | undefined)[] = [];\n\n /** @internal */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /** @internal */\n public readonly cellContainer!: HTMLSpanElement;\n\n /**\n * @internal\n */\n public readonly expandIcon?: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public animationClass = '';\n\n /**\n * @internal\n */\n @attr({ attribute: 'allow-hover', mode: 'boolean' })\n public allowHover = false;\n\n @volatile\n public get isTopLevelParentRow(): boolean {\n return this.isParentRow && this.nestingLevel === 0;\n }\n\n @volatile\n public get isNestedParent(): boolean {\n return this.isParentRow && this.nestingLevel > 0;\n }\n\n /** @internal */\n @volatile\n public get showSelectionCheckbox(): boolean {\n return this.selectable && !this.hideSelection;\n }\n\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/ni/nimble/issues/2739\n private ignoreSelectionChangeEvents = false;\n\n @volatile\n public override get ariaSelected(): 'true' | 'false' | null {\n if (this.selectable) {\n return this.selected ? 'true' : 'false';\n }\n\n return null;\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeColumnObservers();\n }\n\n /** @internal */\n public onSelectionCheckboxChange(event: CustomEvent): void {\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n const checkbox = event.target as Checkbox;\n const checked = checkbox.checked;\n this.onSelectionChange(!checked, checked);\n }\n\n /** @internal */\n public onSelectionChange(oldState: boolean, newState: boolean): void {\n this.selected = newState;\n const detail: TableRowSelectionToggleEventDetail = {\n oldState,\n newState\n };\n this.$emit('row-selection-toggle', detail);\n }\n\n /** @internal */\n public onCellActionMenuBeforeToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.currentActionMenuColumn = column;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-beforetoggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public onCellActionMenuToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.menuOpen = event.detail.newState;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-toggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public handleChange(source: unknown, args: unknown): void {\n if (\n source instanceof ColumnInternals\n && typeof args === 'string'\n && (isColumnInternalsProperty(args, 'columnConfig')\n || isColumnInternalsProperty(args, 'dataRecordFieldNames'))\n ) {\n this.updateCellStates();\n }\n }\n\n /** @internal */\n public getFocusableElements(): TableRowFocusableElements {\n return {\n selectionCheckbox: this.showSelectionCheckbox\n ? this.selectionCheckbox\n : undefined,\n cells: Array.from(\n this.cellContainer.querySelectorAll(tableCellTag)\n ).map(cell => ({\n cell,\n actionMenuButton: cell.hasActionMenu\n ? cell.actionMenuButton\n : undefined\n }))\n };\n }\n\n public onRowExpandToggle(event?: Event): void {\n const expandEventDetail: TableRowExpansionToggleEventDetail = {\n oldState: this.expanded,\n newState: !this.expanded,\n recordId: this.recordId!\n };\n this.$emit('row-expand-toggle', expandEventDetail);\n event?.stopImmediatePropagation();\n // To avoid a visual glitch with improper expand/collapse icons performing an\n // animation (due to visual re-use apparently), we apply a class to the\n // contained expand-collapse button temporarily. We use the 'transitionend' event\n // to remove the temporary class and register a function reference as the handler\n // to avoid issues that may result from the 'transitionend' event not firing, as it\n // will never result in multiple event listeners being registered.\n this.animationClass = 'animating';\n this.expandIcon?.addEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n }\n\n public onCellViewSlotsRequest(\n column: TableColumn,\n event: CustomEvent<CellViewSlotRequestEventDetail>\n ): void {\n event.stopImmediatePropagation();\n if (typeof this.recordId !== 'string') {\n // The recordId is expected to be defined on any row that can be interacted with, but if\n // it isn't defined, nothing can be done with the request to slot content into the row.\n return;\n }\n\n const eventDetails: RowSlotRequestEventDetail = {\n recordId: this.recordId,\n columnInternalId: column.columnInternals.uniqueId,\n slots: event.detail.slots\n };\n this.$emit('row-slots-request', eventDetails);\n }\n\n private readonly removeAnimatingClass = (): void => {\n this.animationClass = '';\n this.expandIcon?.removeEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n };\n\n private emitActionMenuToggleEvent(\n eventType: string,\n menuButtonEventDetail: MenuButtonToggleEventDetail,\n column: TableColumn\n ): void {\n const detail: TableActionMenuToggleEventDetail = {\n newState: menuButtonEventDetail.newState,\n oldState: menuButtonEventDetail.oldState,\n recordIds: [this.recordId!],\n columnId: column.columnId\n };\n this.$emit(eventType, detail);\n }\n\n private columnsChanged(): void {\n this.updateCellIndentLevels();\n this.updateCellStates();\n\n this.observeColumns();\n }\n\n private dataRecordChanged(): void {\n this.updateCellStates();\n }\n\n private nestingLevelChanged(): void {\n this.updateCellIndentLevels();\n }\n\n private updateCellIndentLevels(): void {\n this.cellIndentLevels = this.columns.map((_, i) => {\n return i === 0 ? this.nestingLevel : 0;\n });\n }\n\n private removeColumnObservers(): void {\n this.columnNotifiers.forEach(notifier => {\n notifier.unsubscribe(this);\n });\n this.columnNotifiers = [];\n }\n\n private observeColumns(): void {\n this.removeColumnObservers();\n\n this.columnNotifiers = this.columns.map(column => {\n const notifier = Observable.getNotifier(column.columnInternals);\n notifier.subscribe(this);\n return notifier;\n });\n }\n\n private updateCellStates(): void {\n this.cellStates = this.columns.map(column => {\n const fieldNames = column.columnInternals.dataRecordFieldNames;\n let cellState: TableCellState | undefined;\n if (this.hasValidFieldNames(fieldNames) && this.dataRecord) {\n const cellDataValues = fieldNames.map(\n field => this.dataRecord![field]\n );\n const cellRecord = Object.fromEntries(\n column.columnInternals.cellRecordFieldNames.map((k, j) => [\n k,\n cellDataValues[j]\n ])\n );\n const columnConfig = column.columnInternals.columnConfig;\n cellState = {\n cellRecord,\n columnConfig\n };\n }\n return cellState;\n });\n }\n\n private hasValidFieldNames(\n keys: readonly (TableFieldName | undefined)[]\n ): keys is TableFieldName[] {\n return keys.every(key => key !== undefined);\n }\n\n private selectedChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n}\n\nconst nimbleTableRow = TableRow.compose({\n baseName: 'table-row',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableRow());\nexport const tableRowTag = 'nimble-table-row';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/row/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Notifier,\n Observable,\n attr,\n observable,\n volatile\n} from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport type { TableCellState } from '../../../table-column/base/types';\nimport type {\n CellViewSlotRequestEventDetail,\n RowSlotRequestEventDetail,\n TableActionMenuToggleEventDetail,\n TableFieldName,\n TableRecord,\n TableRowExpansionToggleEventDetail,\n TableRowFocusableElements,\n TableRowSelectionToggleEventDetail\n} from '../../types';\nimport type { TableColumn } from '../../../table-column/base';\nimport type { MenuButtonToggleEventDetail } from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport {\n ColumnInternals,\n isColumnInternalsProperty\n} from '../../../table-column/base/models/column-internals';\nimport type { Checkbox } from '../../../checkbox';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-row': TableRow;\n }\n}\n\n/** Represents a single row (element) in the Table's data */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TableDataRecord extends TableRecord {}\n\n/**\n * A styled row that is used within the nimble-table.\n * @internal\n */\nexport class TableRow<\n TDataRecord extends TableDataRecord = TableDataRecord\n> extends FoundationElement {\n @attr({ attribute: 'record-id' })\n public recordId?: string;\n\n @attr({ mode: 'boolean' })\n public selectable = false;\n\n @attr({ mode: 'boolean' })\n public selected = false;\n\n @attr({ attribute: 'hide-selection', mode: 'boolean' })\n public hideSelection = false;\n\n @attr({ mode: 'boolean' })\n public expanded = false;\n\n @attr({ attribute: 'reserve-collapse-space', mode: 'boolean' })\n public reserveCollapseSpace = false;\n\n @observable\n public dataRecord?: TDataRecord;\n\n /**\n * @internal\n * */\n public columnNotifiers: Notifier[] = [];\n\n @observable\n public columns: TableColumn[] = [];\n\n @observable\n public currentActionMenuColumn?: TableColumn;\n\n @observable\n public nestingLevel = 0;\n\n /**\n * Row index in the flattened set of all regular and group header rows.\n * Represents the index in table.tableData (TableRowState[]).\n */\n @observable\n public resolvedRowIndex?: number;\n\n @attr({ attribute: 'is-parent-row', mode: 'boolean' })\n public isParentRow = false;\n\n @attr({ attribute: 'menu-open', mode: 'boolean' })\n public menuOpen = false;\n\n @attr({ attribute: 'row-operation-grid-cell-hidden', mode: 'boolean' })\n public rowOperationGridCellHidden = false;\n\n @attr({ mode: 'boolean' })\n public loading = false;\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the indent\n * level of each column's cell.\n * */\n @observable\n public cellIndentLevels: number[] = [];\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the cell state\n * of each column's cell.\n * */\n @observable\n public cellStates: (TableCellState | undefined)[] = [];\n\n /** @internal */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /** @internal */\n public readonly cellContainer!: HTMLSpanElement;\n\n /**\n * @internal\n */\n public readonly expandIcon?: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public animationClass = '';\n\n /**\n * @internal\n */\n @attr({ attribute: 'allow-hover', mode: 'boolean' })\n public allowHover = false;\n\n @volatile\n public get isTopLevelParentRow(): boolean {\n return this.isParentRow && this.nestingLevel === 0;\n }\n\n @volatile\n public get isNestedParent(): boolean {\n return this.isParentRow && this.nestingLevel > 0;\n }\n\n /** @internal */\n @volatile\n public get showSelectionCheckbox(): boolean {\n return this.selectable && !this.hideSelection;\n }\n\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/ni/nimble/issues/2739\n private ignoreSelectionChangeEvents = false;\n\n @volatile\n public override get ariaSelected(): 'true' | 'false' | null {\n if (this.selectable) {\n return this.selected ? 'true' : 'false';\n }\n\n return null;\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeColumnObservers();\n }\n\n /** @internal */\n public onSelectionCheckboxChange(event: CustomEvent): void {\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n const checkbox = event.target as Checkbox;\n const checked = checkbox.checked;\n this.onSelectionChange(!checked, checked);\n }\n\n /** @internal */\n public onSelectionChange(oldState: boolean, newState: boolean): void {\n this.selected = newState;\n const detail: TableRowSelectionToggleEventDetail = {\n oldState,\n newState\n };\n this.$emit('row-selection-toggle', detail);\n }\n\n /** @internal */\n public onCellActionMenuBeforeToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.currentActionMenuColumn = column;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-beforetoggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public onCellActionMenuToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.menuOpen = event.detail.newState;\n // Workaround for Firefox issue when action menus opened on different rows\n // See: https://github.com/ni/nimble/issues/2744\n if (!event.detail.newState) {\n this.currentActionMenuColumn = undefined;\n }\n this.emitActionMenuToggleEvent(\n 'row-action-menu-toggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public handleChange(source: unknown, args: unknown): void {\n if (\n source instanceof ColumnInternals\n && typeof args === 'string'\n && (isColumnInternalsProperty(args, 'columnConfig')\n || isColumnInternalsProperty(args, 'dataRecordFieldNames'))\n ) {\n this.updateCellStates();\n }\n }\n\n /** @internal */\n public getFocusableElements(): TableRowFocusableElements {\n return {\n selectionCheckbox: this.showSelectionCheckbox\n ? this.selectionCheckbox\n : undefined,\n cells: Array.from(\n this.cellContainer.querySelectorAll(tableCellTag)\n ).map(cell => ({\n cell,\n actionMenuButton: cell.hasActionMenu\n ? cell.actionMenuButton\n : undefined\n }))\n };\n }\n\n public onRowExpandToggle(event?: Event): void {\n const expandEventDetail: TableRowExpansionToggleEventDetail = {\n oldState: this.expanded,\n newState: !this.expanded,\n recordId: this.recordId!\n };\n this.$emit('row-expand-toggle', expandEventDetail);\n event?.stopImmediatePropagation();\n // To avoid a visual glitch with improper expand/collapse icons performing an\n // animation (due to visual re-use apparently), we apply a class to the\n // contained expand-collapse button temporarily. We use the 'transitionend' event\n // to remove the temporary class and register a function reference as the handler\n // to avoid issues that may result from the 'transitionend' event not firing, as it\n // will never result in multiple event listeners being registered.\n this.animationClass = 'animating';\n this.expandIcon?.addEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n }\n\n public onCellViewSlotsRequest(\n column: TableColumn,\n event: CustomEvent<CellViewSlotRequestEventDetail>\n ): void {\n event.stopImmediatePropagation();\n if (typeof this.recordId !== 'string') {\n // The recordId is expected to be defined on any row that can be interacted with, but if\n // it isn't defined, nothing can be done with the request to slot content into the row.\n return;\n }\n\n const eventDetails: RowSlotRequestEventDetail = {\n recordId: this.recordId,\n columnInternalId: column.columnInternals.uniqueId,\n slots: event.detail.slots\n };\n this.$emit('row-slots-request', eventDetails);\n }\n\n private readonly removeAnimatingClass = (): void => {\n this.animationClass = '';\n this.expandIcon?.removeEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n };\n\n private emitActionMenuToggleEvent(\n eventType: string,\n menuButtonEventDetail: MenuButtonToggleEventDetail,\n column: TableColumn\n ): void {\n const detail: TableActionMenuToggleEventDetail = {\n newState: menuButtonEventDetail.newState,\n oldState: menuButtonEventDetail.oldState,\n recordIds: [this.recordId!],\n columnId: column.columnId\n };\n this.$emit(eventType, detail);\n }\n\n private columnsChanged(): void {\n this.updateCellIndentLevels();\n this.updateCellStates();\n\n this.observeColumns();\n }\n\n private dataRecordChanged(): void {\n this.updateCellStates();\n }\n\n private nestingLevelChanged(): void {\n this.updateCellIndentLevels();\n }\n\n private updateCellIndentLevels(): void {\n this.cellIndentLevels = this.columns.map((_, i) => {\n return i === 0 ? this.nestingLevel : 0;\n });\n }\n\n private removeColumnObservers(): void {\n this.columnNotifiers.forEach(notifier => {\n notifier.unsubscribe(this);\n });\n this.columnNotifiers = [];\n }\n\n private observeColumns(): void {\n this.removeColumnObservers();\n\n this.columnNotifiers = this.columns.map(column => {\n const notifier = Observable.getNotifier(column.columnInternals);\n notifier.subscribe(this);\n return notifier;\n });\n }\n\n private updateCellStates(): void {\n this.cellStates = this.columns.map(column => {\n const fieldNames = column.columnInternals.dataRecordFieldNames;\n let cellState: TableCellState | undefined;\n if (this.hasValidFieldNames(fieldNames) && this.dataRecord) {\n const cellDataValues = fieldNames.map(\n field => this.dataRecord![field]\n );\n const cellRecord = Object.fromEntries(\n column.columnInternals.cellRecordFieldNames.map((k, j) => [\n k,\n cellDataValues[j]\n ])\n );\n const columnConfig = column.columnInternals.columnConfig;\n cellState = {\n cellRecord,\n columnConfig\n };\n }\n return cellState;\n });\n }\n\n private hasValidFieldNames(\n keys: readonly (TableFieldName | undefined)[]\n ): keys is TableFieldName[] {\n return keys.every(key => key !== undefined);\n }\n\n private selectedChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n}\n\nconst nimbleTableRow = TableRow.compose({\n baseName: 'table-row',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableRow());\nexport const tableRowTag = 'nimble-table-row';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard-navigation-manager.js","sourceRoot":"","sources":["../../../../src/table/models/keyboard-navigation-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Notifier, type Subscriber, Observable } from '@ni/fast-element';\nimport {\n keyArrowDown,\n keyArrowLeft,\n keyArrowRight,\n keyArrowUp,\n keyEnd,\n keyEnter,\n keyEscape,\n keyFunction2,\n keyHome,\n keyPageDown,\n keyPageUp,\n keySpace,\n keyTab\n} from '@ni/fast-web-utilities';\nimport { FoundationElement } from '@ni/fast-foundation';\nimport type { ScrollToOptions } from '@tanstack/virtual-core';\nimport type { Table } from '..';\nimport { TableFocusType } from '../types';\nimport type {\n TableActionMenuToggleEventDetail,\n TableHeaderFocusableElements,\n TableRowFocusableElements,\n TableRecord\n} from '../types';\nimport type { Virtualizer } from './virtualizer';\nimport { TableGroupRow } from '../components/group-row';\nimport { TableRow } from '../components/row';\nimport { TableCell } from '../components/cell';\nimport type { MenuButton } from '../../menu-button';\nimport { tableHeaderTag } from '../components/header';\nimport { TableCellView } from '../../table-column/base/cell-view';\n\ninterface TableFocusState {\n focusType: TableFocusType;\n headerActionIndex?: number;\n rowIndex?: number;\n columnIndex?: number;\n cellContentIndex?: number;\n}\n\n/**\n * Manages the keyboard navigation and focus within the table.\n * @internal\n */\nexport class KeyboardNavigationManager<TData extends TableRecord>\nimplements Subscriber {\n private focusType: TableFocusType = TableFocusType.none;\n private headerActionIndex = -1;\n private rowIndex = -1;\n private cellContentIndex = -1;\n private columnIndex = -1;\n private focusWithinTable = false;\n private isCurrentlyFocusingElement = false;\n private readonly tableNotifier: Notifier;\n private readonly virtualizerNotifier: Notifier;\n private visibleRowNotifiers: Notifier[] = [];\n private get inNavigationMode(): boolean {\n return (\n this.focusType !== TableFocusType.cellActionMenu\n && this.focusType !== TableFocusType.cellContent\n );\n }\n\n public constructor(\n private readonly table: Table<TData>,\n private readonly virtualizer: Virtualizer<TData>\n ) {\n this.tableNotifier = Observable.getNotifier(this.table);\n this.tableNotifier.subscribe(this, 'rowElements');\n this.virtualizerNotifier = Observable.getNotifier(this.virtualizer);\n this.virtualizerNotifier.subscribe(this, 'visibleItems');\n }\n\n public resetFocusState(): void {\n this.focusType = TableFocusType.none;\n const activeElement = this.getActiveElement();\n if (activeElement && this.isInTable(activeElement)) {\n this.setDefaultFocus();\n }\n }\n\n public get hasActiveRowOrCellFocus(): boolean {\n return this.focusWithinTable && this.hasRowOrCellFocusType();\n }\n\n public connect(): void {\n this.table.addEventListener(\n 'keydown',\n this.onCaptureKeyDown as EventListener,\n { capture: true }\n );\n this.table.addEventListener('keydown', this.onKeyDown as EventListener);\n this.table.addEventListener(\n 'focusin',\n this.onTableFocusIn as EventListener\n );\n this.table.addEventListener(\n 'focusout',\n this.onTableFocusOut as EventListener\n );\n this.table.viewport.addEventListener('keydown', this.onViewportKeyDown);\n this.table.viewport.addEventListener(\n 'cell-action-menu-blur',\n this.onCellActionMenuBlur as EventListener\n );\n this.table.viewport.addEventListener(\n 'cell-view-focus-in',\n this.onCellViewFocusIn as EventListener\n );\n this.table.viewport.addEventListener(\n 'cell-focus-in',\n this.onCellFocusIn as EventListener\n );\n this.table.viewport.addEventListener(\n 'cell-blur',\n this.onCellBlur as EventListener\n );\n }\n\n public disconnect(): void {\n this.table.removeEventListener(\n 'keydown',\n this.onCaptureKeyDown as EventListener,\n { capture: true }\n );\n this.table.removeEventListener(\n 'keydown',\n this.onKeyDown as EventListener\n );\n this.table.removeEventListener(\n 'focusin',\n this.onTableFocusIn as EventListener\n );\n this.table.removeEventListener(\n 'focusout',\n this.onTableFocusOut as EventListener\n );\n this.table.viewport.removeEventListener(\n 'keydown',\n this.onViewportKeyDown\n );\n this.table.viewport.removeEventListener(\n 'cell-action-menu-blur',\n this.onCellActionMenuBlur as EventListener\n );\n this.table.viewport.removeEventListener(\n 'cell-view-focus-in',\n this.onCellViewFocusIn as EventListener\n );\n this.table.viewport.removeEventListener(\n 'cell-focus-in',\n this.onCellFocusIn as EventListener\n );\n this.table.viewport.removeEventListener(\n 'cell-blur',\n this.onCellBlur as EventListener\n );\n }\n\n public handleChange(source: unknown, args: unknown): void {\n let focusRowAndCell = false;\n if (source === this.virtualizer && args === 'visibleItems') {\n focusRowAndCell = true;\n } else if (source === this.table && args === 'rowElements') {\n for (const notifier of this.visibleRowNotifiers) {\n notifier.unsubscribe(this);\n }\n this.visibleRowNotifiers = [];\n for (const visibleRow of this.table.rowElements) {\n const rowNotifier = Observable.getNotifier(visibleRow);\n rowNotifier.subscribe(this, 'resolvedRowIndex');\n this.visibleRowNotifiers.push(rowNotifier);\n if (visibleRow.resolvedRowIndex === this.rowIndex) {\n focusRowAndCell = true;\n }\n }\n } else if (\n args === 'resolvedRowIndex'\n && this.isResolvedRowType(source)\n ) {\n if (source.resolvedRowIndex === this.rowIndex) {\n focusRowAndCell = true;\n }\n }\n\n if (focusRowAndCell) {\n // We want open action menus to be closed, and focused interactive cell content blurred, on scroll. We also don't want to\n // refocus the interactive cell content after the scroll, as the element no longer represents the same table data at that\n // point. So in both those cases, we focus the cell here. This also lets us maintain what row/ cell the user had focused\n // previously.\n if (\n this.focusType === TableFocusType.cellActionMenu\n || this.focusType === TableFocusType.cellContent\n ) {\n this.setCellFocusState(this.columnIndex, this.rowIndex, false);\n }\n if (this.inNavigationMode && this.hasRowOrCellFocusType()) {\n if (this.rowIndex > this.table.tableData.length - 1) {\n // Focused row index no longer valid, coerce to 1st row if possible\n if (this.table.tableData.length > 0) {\n this.rowIndex = 0;\n } else {\n if (this.focusWithinTable) {\n this.setDefaultFocus();\n } else {\n this.focusType = TableFocusType.none;\n }\n return;\n }\n }\n if (this.focusWithinTable) {\n this.focusCurrentRow(false);\n }\n }\n }\n }\n\n public onRowFocusIn(event: FocusEvent): void {\n if (this.isCurrentlyFocusingElement) {\n return;\n }\n const row = event.target;\n if (this.isResolvedRowType(row)) {\n if (this.rowIndex !== row.resolvedRowIndex) {\n // If user focuses a row some other way (e.g. mouse), update our focus state so future keyboard nav\n // will start from that row\n this.setRowFocusState(row.resolvedRowIndex);\n }\n }\n }\n\n public onRowBlur(event: FocusEvent): void {\n const row = event.target;\n if (this.isResolvedRowType(row)) {\n this.setElementFocusable(row, false);\n }\n }\n\n public onRowActionMenuToggle(\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): void {\n const isOpen = event.detail.newState;\n if (isOpen) {\n const row = event.target as TableRow;\n const columnIndex = this.table.visibleColumns.findIndex(\n column => column.columnId === event.detail.columnId\n );\n this.setCellActionMenuFocusState(\n row.resolvedRowIndex!,\n columnIndex,\n false\n );\n }\n }\n\n private readonly onTableFocusIn = (event: FocusEvent): void => {\n this.focusWithinTable = true;\n this.updateFocusStateFromActiveElement(false);\n\n // Sets initial focus on the appropriate table content\n const actionMenuOpen = this.table.openActionMenuRecordId !== undefined;\n if (\n (event.target === this.table\n || this.focusType === TableFocusType.none)\n && !actionMenuOpen\n ) {\n let focusHeader = true;\n if (\n this.hasRowOrCellFocusType()\n && this.scrollToAndFocusRow(this.rowIndex)\n ) {\n focusHeader = false;\n }\n if (focusHeader && !this.setFocusOnHeader()) {\n // nothing to focus\n this.table.blur();\n }\n }\n };\n\n private readonly onTableFocusOut = (): void => {\n this.focusWithinTable = false;\n };\n\n private readonly onCellActionMenuBlur = (\n event: CustomEvent<TableCell>\n ): void => {\n event.stopPropagation();\n const cell = event.detail;\n if (cell.actionMenuButton) {\n // Ensure that action menu buttons get hidden when no longer focused\n this.setActionMenuButtonFocused(cell.actionMenuButton, false);\n }\n };\n\n private readonly onCellViewFocusIn = (\n event: CustomEvent<TableCell>\n ): void => {\n event.stopPropagation();\n this.updateFocusStateFromActiveElement(false);\n };\n\n private readonly onCellFocusIn = (event: CustomEvent<TableCell>): void => {\n event.stopPropagation();\n const cell = event.detail;\n this.updateFocusStateFromActiveElement(true);\n // Currently, clicking a non-interactive cell only updates the focus state to that row, it\n // doesn't focus the cell. If we revisit this, we most likely need to set the cells to tabindex=-1\n // upfront too, so their focusing behavior is consistent whether they've been previously keyboard\n // focused or not.\n if (\n this.focusType === TableFocusType.row\n && this.getActiveElement() === cell\n ) {\n this.focusCurrentRow(false);\n }\n };\n\n private readonly onCellBlur = (event: CustomEvent<TableCell>): void => {\n event.stopPropagation();\n const cell = event.detail;\n this.setElementFocusable(cell, false);\n };\n\n private readonly onCaptureKeyDown = (event: KeyboardEvent): void => {\n let handled = false;\n if (event.key === keyTab) {\n handled = this.onTabPressed(event.shiftKey);\n } else if (this.inNavigationMode) {\n switch (event.key) {\n case keyArrowLeft:\n handled = this.onLeftArrowPressed();\n break;\n case keyArrowRight:\n handled = this.onRightArrowPressed();\n break;\n case keyArrowUp:\n handled = this.onUpArrowPressed();\n break;\n case keyArrowDown:\n handled = this.onDownArrowPressed();\n break;\n case keyPageUp:\n handled = this.onPageUpPressed();\n break;\n case keyPageDown:\n handled = this.onPageDownPressed();\n break;\n case keyHome:\n handled = this.onHomePressed(event.ctrlKey);\n break;\n case keyEnd:\n handled = this.onEndPressed(event.ctrlKey);\n break;\n case keyEnter:\n handled = this.onEnterPressed(event.ctrlKey);\n break;\n case keySpace:\n handled = this.onSpacePressed(event.shiftKey);\n break;\n case keyFunction2:\n handled = this.onF2Pressed();\n break;\n default:\n break;\n }\n }\n if (handled) {\n event.preventDefault();\n }\n };\n\n private readonly onKeyDown = (event: KeyboardEvent): void => {\n if (!this.inNavigationMode && !event.defaultPrevented) {\n if (event.key === keyEscape || event.key === keyFunction2) {\n const row = this.getCurrentRow();\n if (row) {\n this.trySetCellFocus(row.getFocusableElements());\n }\n }\n }\n };\n\n private readonly onViewportKeyDown = (event: KeyboardEvent): void => {\n let handleEvent = !this.inNavigationMode\n && (event.key === keyArrowUp || event.key === keyArrowDown);\n switch (event.key) {\n case keyPageUp:\n case keyPageDown:\n case keyHome:\n case keyEnd:\n handleEvent = true;\n break;\n default:\n break;\n }\n if (handleEvent) {\n // Swallow key presses that would cause table scrolling, independently of keyboard navigation\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n private onEnterPressed(ctrlKey: boolean): boolean {\n let row: TableRow | TableGroupRow | undefined;\n let rowElements: TableRowFocusableElements | undefined;\n if (this.hasRowOrCellFocusType()) {\n row = this.getCurrentRow();\n rowElements = row?.getFocusableElements();\n }\n if (this.focusType === TableFocusType.row) {\n if (row instanceof TableGroupRow) {\n this.toggleRowExpanded(row);\n return true;\n }\n }\n if (this.focusType === TableFocusType.cell) {\n if (ctrlKey) {\n const cell = rowElements?.cells[this.columnIndex];\n if (cell?.actionMenuButton && !cell.actionMenuButton.open) {\n cell.actionMenuButton.toggleButton!.control.click();\n return true;\n }\n }\n return this.focusFirstInteractiveElementInCurrentCell(rowElements);\n }\n return false;\n }\n\n private onF2Pressed(): boolean {\n if (this.focusType === TableFocusType.cell) {\n const row = this.getCurrentRow();\n const rowElements = row?.getFocusableElements();\n return this.focusFirstInteractiveElementInCurrentCell(rowElements);\n }\n return false;\n }\n\n private onSpacePressed(shiftKey: boolean): boolean {\n if (\n this.focusType === TableFocusType.row\n || this.focusType === TableFocusType.cell\n ) {\n if (this.focusType === TableFocusType.row || shiftKey) {\n const row = this.getCurrentRow();\n if (row instanceof TableRow && row.selectable) {\n row.onSelectionChange(row.selected, !row.selected);\n } else if (row instanceof TableGroupRow) {\n this.toggleRowExpanded(row);\n }\n }\n // Default Space behavior scrolls down, which is redundant given the rest of our keyboard nav code, and we'd still try to focus a\n // row that you scrolled away from. So suppress default Space behavior if a row or cell is selected, regardless of if we're\n // toggling selection or not.\n return true;\n }\n return false;\n }\n\n private onLeftArrowPressed(): boolean {\n let row: TableRow | TableGroupRow | undefined;\n let rowElements: TableRowFocusableElements | undefined;\n let headerElements!: TableHeaderFocusableElements;\n if (this.hasRowOrCellFocusType()) {\n row = this.getCurrentRow();\n rowElements = row?.getFocusableElements();\n } else if (this.hasHeaderFocusType()) {\n headerElements = this.getTableHeaderFocusableElements();\n }\n\n switch (this.focusType) {\n case TableFocusType.headerActions:\n return this.trySetHeaderActionFocus(\n headerElements,\n this.headerActionIndex - 1\n );\n case TableFocusType.columnHeader:\n return (\n this.trySetColumnHeaderFocus(\n headerElements,\n this.columnIndex - 1\n )\n || this.trySetHeaderActionFocus(\n headerElements,\n headerElements.headerActions.length - 1\n )\n );\n case TableFocusType.row:\n if (this.isRowExpanded(row) === true) {\n this.toggleRowExpanded(row!);\n return true;\n }\n return false;\n case TableFocusType.rowSelectionCheckbox:\n this.setRowFocusState();\n return this.focusCurrentRow(true);\n case TableFocusType.cell:\n if (\n !this.trySetCellFocus(rowElements, this.columnIndex - 1)\n && !this.trySetRowSelectionCheckboxFocus(rowElements)\n ) {\n this.setRowFocusState();\n this.focusCurrentRow(true);\n }\n return true;\n default:\n break;\n }\n\n return false;\n }\n\n private onRightArrowPressed(): boolean {\n let row: TableRow | TableGroupRow | undefined;\n let rowElements: TableRowFocusableElements | undefined;\n let headerElements!: TableHeaderFocusableElements;\n if (this.hasRowOrCellFocusType()) {\n row = this.getCurrentRow();\n rowElements = row?.getFocusableElements();\n } else if (this.hasHeaderFocusType()) {\n headerElements = this.getTableHeaderFocusableElements();\n }\n\n switch (this.focusType) {\n case TableFocusType.headerActions:\n return (\n this.trySetHeaderActionFocus(\n headerElements,\n this.headerActionIndex + 1\n ) || this.trySetColumnHeaderFocus(headerElements, 0)\n );\n case TableFocusType.columnHeader:\n return this.trySetColumnHeaderFocus(\n headerElements,\n this.columnIndex + 1\n );\n case TableFocusType.row:\n if (this.isRowExpanded(row) === false) {\n this.toggleRowExpanded(row!);\n return true;\n }\n return (\n this.trySetRowSelectionCheckboxFocus(rowElements)\n || this.trySetCellFocus(rowElements, 0)\n );\n case TableFocusType.rowSelectionCheckbox:\n return this.trySetCellFocus(rowElements, 0);\n case TableFocusType.cell:\n return this.trySetCellFocus(rowElements, this.columnIndex + 1);\n default:\n break;\n }\n\n return false;\n }\n\n private onUpArrowPressed(): boolean {\n this.onMoveUp(1);\n // Always prevent default - prevents page scroll, and FireFox changing focus if focus is at table extents\n return true;\n }\n\n private onPageUpPressed(): boolean {\n return this.onMoveUp(this.virtualizer.pageSize);\n }\n\n private onHomePressed(ctrlKey: boolean): boolean {\n if (this.handleHomeEndWithinRow(ctrlKey)) {\n const row = this.getCurrentRow();\n const rowElements = row?.getFocusableElements();\n return (\n this.trySetRowSelectionCheckboxFocus(rowElements)\n || this.trySetCellFocus(rowElements, 0)\n );\n }\n\n return this.onMoveUp(0, 0);\n }\n\n private onDownArrowPressed(): boolean {\n this.onMoveDown(1);\n // Always prevent default - prevents page scroll, and FireFox changing focus if focus is at table extents\n return true;\n }\n\n private onPageDownPressed(): boolean {\n return this.onMoveDown(this.virtualizer.pageSize);\n }\n\n private onEndPressed(ctrlKey: boolean): boolean {\n if (this.handleHomeEndWithinRow(ctrlKey)) {\n const row = this.getCurrentRow();\n const rowElements = row?.getFocusableElements();\n return this.trySetCellFocus(\n rowElements,\n this.table.visibleColumns.length - 1\n );\n }\n\n return this.onMoveDown(0, this.table.tableData.length - 1);\n }\n\n private handleHomeEndWithinRow(ctrlKey: boolean): boolean {\n return (\n (this.focusType === TableFocusType.cell\n || this.focusType === TableFocusType.rowSelectionCheckbox)\n && !ctrlKey\n );\n }\n\n private onTabPressed(shiftKeyPressed: boolean): boolean {\n const activeElement = this.getActiveElement();\n if (activeElement === null || activeElement === this.table) {\n return false;\n }\n const nextFocusState = this.hasRowOrCellFocusType()\n ? this.getNextRowTabStop(shiftKeyPressed)\n : this.getNextHeaderTabStop(shiftKeyPressed);\n if (nextFocusState) {\n this.focusType = nextFocusState.focusType;\n this.rowIndex = nextFocusState.rowIndex ?? this.rowIndex;\n this.columnIndex = nextFocusState.columnIndex ?? this.columnIndex;\n this.headerActionIndex = nextFocusState.headerActionIndex ?? this.headerActionIndex;\n this.cellContentIndex = nextFocusState.cellContentIndex ?? this.cellContentIndex;\n if (this.hasRowOrCellFocusType()) {\n this.focusCurrentRow(false);\n } else {\n this.focusHeaderElement();\n }\n return true;\n }\n this.blurAfterLastTab(activeElement);\n return false;\n }\n\n private getNextRowTabStop(\n shiftKeyPressed: boolean\n ): TableFocusState | undefined {\n const row = this.getCurrentRow();\n if (row === undefined) {\n return undefined;\n }\n let startIndex = -1;\n const focusStates = [];\n const rowElements = row.getFocusableElements();\n if (rowElements.selectionCheckbox) {\n focusStates.push({\n focusType: TableFocusType.rowSelectionCheckbox\n });\n if (this.focusType === TableFocusType.rowSelectionCheckbox) {\n startIndex = 0;\n }\n }\n let cellIndex = 0;\n while (cellIndex < rowElements.cells.length) {\n const firstCellTabbableIndex = focusStates.length;\n const cellInfo = rowElements.cells[cellIndex]!;\n const cellViewTabbableChildren = cellInfo.cell.cellView.tabbableChildren;\n for (let i = 0; i < cellViewTabbableChildren.length; i++) {\n focusStates.push({\n focusType: TableFocusType.cellContent,\n columnIndex: cellIndex,\n cellContentIndex: i\n });\n if (\n this.focusType === TableFocusType.cellContent\n && this.columnIndex === cellIndex\n && this.cellContentIndex === i\n ) {\n startIndex = focusStates.length - 1;\n }\n }\n if (cellInfo.actionMenuButton) {\n focusStates.push({\n focusType: TableFocusType.cellActionMenu,\n columnIndex: cellIndex\n });\n if (\n this.focusType === TableFocusType.cellActionMenu\n && this.columnIndex === cellIndex\n ) {\n startIndex = focusStates.length - 1;\n }\n }\n const lastCellTabbableIndex = focusStates.length - 1;\n if (\n this.focusType === TableFocusType.cell\n && this.columnIndex === cellIndex\n ) {\n startIndex = shiftKeyPressed\n ? lastCellTabbableIndex + 1\n : firstCellTabbableIndex - 1;\n }\n cellIndex += 1;\n }\n if (this.focusType === TableFocusType.row) {\n startIndex = shiftKeyPressed ? focusStates.length : -1;\n }\n const direction = shiftKeyPressed ? -1 : 1;\n return focusStates[startIndex + direction];\n }\n\n private getNextHeaderTabStop(\n shiftKeyPressed: boolean\n ): TableFocusState | undefined {\n let startIndex = -1;\n const focusStates = [];\n const headerTabbableElements = this.getTableHeaderFocusableElements().headerActions;\n for (let i = 0; i < headerTabbableElements.length; i++) {\n focusStates.push({\n focusType: TableFocusType.headerActions,\n headerActionIndex: i\n });\n }\n if (this.focusType === TableFocusType.headerActions) {\n startIndex = this.headerActionIndex;\n } else {\n // TableFocusType.columnHeader\n startIndex = focusStates.length;\n }\n const direction = shiftKeyPressed ? -1 : 1;\n return focusStates[startIndex + direction];\n }\n\n private blurAfterLastTab(activeElement: HTMLElement): void {\n // In order to get the desired browser-provided Tab/Shift-Tab behavior of focusing the\n // element before/after the table, the table shouldn't have tabIndex=0 when this event\n // handling ends. However it needs to be tabIndex=0 so we can re-focus the table the next time\n // it's tabbed to, so set tabIndex back to 0 after a rAF.\n // Note: In Chrome this is only needed for Shift-Tab, but in Firefox both Tab and Shift-Tab need this\n // to work as expected.\n this.table.tabIndex = -1;\n window.requestAnimationFrame(() => {\n this.table.tabIndex = 0;\n });\n\n // Don't explicitly call blur() on activeElement (causes unexpected behavior on Safari / Mac Firefox)\n this.setElementFocusable(activeElement, false);\n }\n\n private onMoveUp(rowDelta: number, newRowIndex?: number): boolean {\n const coerceRowIndex = rowDelta > 1;\n switch (this.focusType) {\n case TableFocusType.row:\n case TableFocusType.rowSelectionCheckbox:\n case TableFocusType.cell: {\n const scrollOptions: ScrollToOptions = {};\n let rowIndex = this.rowIndex;\n if (newRowIndex !== undefined) {\n rowIndex = newRowIndex;\n }\n rowIndex -= rowDelta;\n if (coerceRowIndex && rowIndex < 0) {\n rowIndex = 0;\n }\n if (rowDelta > 1) {\n scrollOptions.align = 'start';\n }\n\n if (rowIndex < this.rowIndex && rowIndex >= 0) {\n return this.scrollToAndFocusRow(rowIndex, scrollOptions);\n }\n if (rowIndex === -1) {\n const headerElements = this.getTableHeaderFocusableElements();\n if (\n this.focusType === TableFocusType.row\n || this.focusType === TableFocusType.rowSelectionCheckbox\n ) {\n return (\n this.trySetHeaderActionFocus(headerElements, 0)\n || this.trySetColumnHeaderFocus(headerElements, 0)\n );\n }\n return this.trySetColumnHeaderFocus(\n headerElements,\n this.columnIndex\n );\n }\n return false;\n }\n default:\n break;\n }\n\n return false;\n }\n\n private onMoveDown(rowDelta: number, newRowIndex?: number): boolean {\n const coerceRowIndex = rowDelta > 1;\n switch (this.focusType) {\n case TableFocusType.headerActions: {\n this.setRowFocusState(0);\n return this.scrollToAndFocusRow(0);\n }\n case TableFocusType.columnHeader: {\n this.setCellFocusState(this.columnIndex, 0, false);\n return this.scrollToAndFocusRow(0);\n }\n case TableFocusType.row:\n case TableFocusType.rowSelectionCheckbox:\n case TableFocusType.cell: {\n const scrollOptions: ScrollToOptions = {};\n let rowIndex = this.rowIndex;\n if (newRowIndex !== undefined) {\n rowIndex = newRowIndex;\n }\n rowIndex += rowDelta;\n if (coerceRowIndex && rowIndex >= this.table.tableData.length) {\n rowIndex = this.table.tableData.length - 1;\n }\n if (rowDelta > 1) {\n scrollOptions.align = 'end';\n }\n if (\n rowIndex > this.rowIndex\n && rowIndex < this.table.tableData.length\n ) {\n return this.scrollToAndFocusRow(rowIndex, scrollOptions);\n }\n return false;\n }\n default:\n break;\n }\n\n return false;\n }\n\n private updateFocusStateFromActiveElement(setRowFocus: boolean): void {\n // If the user is interacting with the table with non-keyboard methods (like mouse), we need to\n // update our focus state based on the current active/focused element\n const activeElement = this.getActiveElement();\n if (activeElement) {\n const row = this.getContainingRow(activeElement);\n if (row) {\n if (!(row instanceof TableGroupRow)) {\n const cell = this.getContainingCell(activeElement);\n if (cell) {\n const columnIndex = this.table.visibleColumns.indexOf(\n cell.column!\n );\n if (cell.actionMenuButton === activeElement) {\n this.setCellActionMenuFocusState(\n row.resolvedRowIndex!,\n columnIndex,\n false\n );\n return;\n }\n const contentIndex = cell.cellView.tabbableChildren.indexOf(\n activeElement\n );\n if (contentIndex > -1) {\n this.setCellContentFocusState(\n contentIndex,\n row.resolvedRowIndex!,\n columnIndex,\n false\n );\n return;\n }\n }\n }\n if (\n setRowFocus\n && this.hasRowOrCellFocusType()\n && this.rowIndex !== row.resolvedRowIndex\n ) {\n this.setRowFocusState(row.resolvedRowIndex);\n }\n }\n }\n }\n\n private focusElement(\n element: HTMLElement,\n focusOptions?: FocusOptions\n ): void {\n const previousActiveElement = this.getActiveElement();\n if (previousActiveElement !== element) {\n this.setElementFocusable(element, true);\n this.isCurrentlyFocusingElement = true;\n element.focus(focusOptions);\n this.isCurrentlyFocusingElement = false;\n if (\n previousActiveElement\n && this.isInTable(previousActiveElement)\n ) {\n this.setElementFocusable(previousActiveElement, false);\n }\n }\n }\n\n private setElementFocusable(\n element: HTMLElement,\n focusable: boolean\n ): void {\n if (element === this.table) {\n return;\n }\n\n element.tabIndex = focusable ? 0 : -1;\n }\n\n private setActionMenuButtonFocused(\n menuButton: MenuButton,\n focused: boolean\n ): void {\n // The action MenuButton needs to be visible in order to be focused, so this CSS class styling\n // handles that (see cell/styles.ts).\n if (focused) {\n menuButton.classList.add('cell-action-menu-focused');\n } else {\n menuButton.classList.remove('cell-action-menu-focused');\n }\n }\n\n private setFocusOnHeader(): boolean {\n if (this.hasHeaderFocusType()) {\n return this.focusHeaderElement();\n }\n this.setDefaultFocus();\n return this.focusType !== TableFocusType.none;\n }\n\n private setDefaultFocus(): void {\n const headerElements = this.getTableHeaderFocusableElements();\n if (\n !this.trySetHeaderActionFocus(headerElements, 0)\n && !this.trySetColumnHeaderFocus(headerElements, 0)\n && !this.scrollToAndFocusRow(0)\n ) {\n this.focusType = TableFocusType.none;\n }\n }\n\n private scrollToAndFocusRow(\n totalRowIndex: number,\n scrollOptions?: ScrollToOptions\n ): boolean {\n if (totalRowIndex >= 0 && totalRowIndex < this.table.tableData.length) {\n switch (this.focusType) {\n case TableFocusType.none:\n case TableFocusType.headerActions:\n case TableFocusType.columnHeader:\n this.setRowFocusState(totalRowIndex);\n break;\n default:\n break;\n }\n this.rowIndex = totalRowIndex;\n this.virtualizer.scrollToIndex(totalRowIndex, scrollOptions);\n this.focusCurrentRow(true);\n return true;\n }\n return false;\n }\n\n private focusCurrentRow(allowScroll: boolean): boolean {\n const visibleRowIndex = this.getCurrentRowVisibleIndex();\n if (visibleRowIndex < 0) {\n return false;\n }\n const focusedRow = this.table.rowElements[visibleRowIndex]!;\n\n let focusRowOnly = false;\n switch (this.focusType) {\n case TableFocusType.row:\n focusRowOnly = true;\n break;\n case TableFocusType.cell:\n case TableFocusType.cellActionMenu:\n case TableFocusType.cellContent:\n focusRowOnly = focusedRow instanceof TableGroupRow;\n break;\n default:\n break;\n }\n const focusOptions = { preventScroll: !allowScroll };\n if (focusRowOnly) {\n this.focusElement(focusedRow, focusOptions);\n return true;\n }\n this.focusRowElement(focusedRow, focusOptions);\n return true;\n }\n\n private focusRowElement(\n row: TableRow | TableGroupRow,\n focusOptions?: FocusOptions\n ): void {\n const rowElements = row.getFocusableElements();\n let focusableElement: HTMLElement | undefined;\n switch (this.focusType) {\n case TableFocusType.rowSelectionCheckbox:\n focusableElement = rowElements.selectionCheckbox;\n break;\n case TableFocusType.cell: {\n focusableElement = rowElements.cells[this.columnIndex]!.cell;\n break;\n }\n case TableFocusType.cellActionMenu: {\n const actionMenuButton = rowElements.cells[this.columnIndex]?.cell.actionMenuButton;\n if (actionMenuButton) {\n focusableElement = actionMenuButton;\n this.setActionMenuButtonFocused(actionMenuButton, true);\n }\n break;\n }\n case TableFocusType.cellContent: {\n focusableElement = rowElements.cells[this.columnIndex]?.cell.cellView\n .tabbableChildren[this.cellContentIndex];\n break;\n }\n default:\n break;\n }\n if (focusableElement) {\n this.focusElement(focusableElement, focusOptions);\n }\n }\n\n private focusHeaderElement(): boolean {\n const headerElements = this.getTableHeaderFocusableElements();\n let focusableElement: HTMLElement | undefined;\n switch (this.focusType) {\n case TableFocusType.headerActions:\n focusableElement = headerElements.headerActions[this.headerActionIndex];\n break;\n case TableFocusType.columnHeader:\n focusableElement = headerElements.columnHeaders[this.columnIndex];\n break;\n default:\n break;\n }\n if (focusableElement) {\n this.focusElement(focusableElement);\n return true;\n }\n return false;\n }\n\n private getCurrentRowVisibleIndex(): number {\n return this.table.rowElements.findIndex(\n row => row.resolvedRowIndex === this.rowIndex\n );\n }\n\n private getTableHeaderFocusableElements(): TableHeaderFocusableElements {\n const headerActions: HTMLElement[] = [];\n if (\n this.table.selectionCheckbox?.getRootNode()\n === this.table.shadowRoot\n ) {\n headerActions.push(this.table.selectionCheckbox);\n }\n\n if (\n this.table.showCollapseAll\n && this.table.collapseAllButton?.getRootNode()\n === this.table.shadowRoot\n ) {\n headerActions.push(this.table.collapseAllButton);\n }\n\n const columnHeaders: HTMLElement[] = [];\n if (this.canFocusColumnHeaders()) {\n this.table.columnHeadersContainer\n .querySelectorAll(tableHeaderTag)\n .forEach(header => columnHeaders.push(header));\n }\n\n return { headerActions, columnHeaders };\n }\n\n private canFocusColumnHeaders(): boolean {\n return (\n this.table.columns.find(\n c => !c.columnInternals.sortingDisabled\n ) !== undefined\n );\n }\n\n private getCurrentRow(): TableRow | TableGroupRow | undefined {\n return this.table.rowElements[this.getCurrentRowVisibleIndex()];\n }\n\n private isRowExpanded(\n row: TableRow | TableGroupRow | undefined\n ): boolean | undefined {\n if (\n (row instanceof TableRow && row.isParentRow)\n || row instanceof TableGroupRow\n ) {\n return row.expanded;\n }\n return undefined;\n }\n\n private toggleRowExpanded(row: TableRow | TableGroupRow): void {\n if (row instanceof TableGroupRow) {\n row.onGroupExpandToggle();\n } else {\n row.onRowExpandToggle();\n }\n this.focusRowElement(row);\n }\n\n private getContainingRow(\n start: Element | undefined | null\n ): TableRow | TableGroupRow | undefined {\n return this.getContainingElement(start, e => this.isResolvedRowType(e));\n }\n\n private getContainingCell(\n start: Element | undefined | null\n ): TableCell | undefined {\n return this.getContainingElement(start, e => e instanceof TableCell);\n }\n\n private getContainingElement<TElement>(\n start: Element | undefined | null,\n isElementMatch: (element: Element) => boolean\n ): TElement | undefined {\n let possibleMatch = start;\n while (possibleMatch && possibleMatch !== this.table) {\n if (isElementMatch(possibleMatch)) {\n return possibleMatch as TElement;\n }\n possibleMatch = possibleMatch.parentElement\n ?? (possibleMatch.parentNode as ShadowRoot)?.host;\n }\n\n return undefined;\n }\n\n private isInTable(start: Element): boolean {\n let possibleMatch = start;\n while (possibleMatch && possibleMatch !== this.table) {\n possibleMatch = possibleMatch.parentElement\n ?? (possibleMatch.parentNode as ShadowRoot)?.host;\n }\n\n return possibleMatch === this.table;\n }\n\n private getActiveElement(): HTMLElement | null {\n let activeElement = document.activeElement;\n while (activeElement?.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n // In some cases, the active element may be a sub-part of a control (example: MenuButton -> ToggleButton -> a div with tabindex=0). Stop at the outer control boundary, so that\n // we can more simply check equality against the elements of getTableHeaderFocusableElements() / row.getFocusableElements().\n // (For rows/cells/cell views, we do need to recurse into them, to get to the appropriate focused controls though)\n if (\n activeElement instanceof FoundationElement\n && !this.isResolvedRowType(activeElement)\n && !(activeElement instanceof TableCell)\n && !(activeElement instanceof TableCellView)\n ) {\n break;\n }\n }\n\n return activeElement as HTMLElement;\n }\n\n private focusFirstInteractiveElementInCurrentCell(\n rowElements?: TableRowFocusableElements\n ): boolean {\n if (!rowElements) {\n return false;\n }\n return (\n this.trySetCellContentFocus(rowElements, 0)\n || this.trySetCellActionMenuFocus(rowElements)\n );\n }\n\n private hasRowOrCellFocusType(): boolean {\n switch (this.focusType) {\n case TableFocusType.cell:\n case TableFocusType.cellActionMenu:\n case TableFocusType.cellContent:\n case TableFocusType.row:\n case TableFocusType.rowSelectionCheckbox:\n return true;\n default:\n return false;\n }\n }\n\n private hasHeaderFocusType(): boolean {\n switch (this.focusType) {\n case TableFocusType.headerActions:\n case TableFocusType.columnHeader:\n return true;\n default:\n return false;\n }\n }\n\n private trySetRowSelectionCheckboxFocus(\n rowElements: TableRowFocusableElements | undefined\n ): boolean {\n if (rowElements?.selectionCheckbox) {\n this.focusType = TableFocusType.rowSelectionCheckbox;\n this.focusCurrentRow(true);\n return true;\n }\n return false;\n }\n\n private trySetColumnHeaderFocus(\n headerElements: TableHeaderFocusableElements,\n columnIndex: number\n ): boolean {\n if (\n columnIndex >= 0\n && columnIndex < headerElements.columnHeaders.length\n ) {\n this.focusType = TableFocusType.columnHeader;\n this.columnIndex = columnIndex;\n this.focusHeaderElement();\n return true;\n }\n return false;\n }\n\n private trySetHeaderActionFocus(\n headerElements: TableHeaderFocusableElements,\n headerActionIndex: number\n ): boolean {\n if (\n headerActionIndex >= 0\n && headerActionIndex < headerElements.headerActions.length\n ) {\n this.focusType = TableFocusType.headerActions;\n this.headerActionIndex = headerActionIndex;\n this.focusHeaderElement();\n return true;\n }\n return false;\n }\n\n private trySetCellFocus(\n rowElements: TableRowFocusableElements | undefined,\n columnIndex?: number,\n rowIndex?: number\n ): boolean {\n if (!rowElements) {\n return false;\n }\n const newColumnIndex = columnIndex ?? this.columnIndex;\n const newRowIndex = rowIndex ?? this.rowIndex;\n\n if (newColumnIndex >= 0 && newColumnIndex < rowElements.cells.length) {\n this.focusType = TableFocusType.cell;\n this.setRowCellFocusState(newColumnIndex, newRowIndex, true);\n return true;\n }\n\n return false;\n }\n\n private trySetCellContentFocus(\n rowElements: TableRowFocusableElements | undefined,\n cellContentIndex: number,\n columnIndex?: number,\n rowIndex?: number\n ): boolean {\n if (!rowElements) {\n return false;\n }\n const newColumnIndex = columnIndex ?? this.columnIndex;\n const newRowIndex = rowIndex ?? this.rowIndex;\n\n if (\n newColumnIndex >= 0\n && newColumnIndex < rowElements.cells.length\n && cellContentIndex >= 0\n && cellContentIndex\n < rowElements.cells[newColumnIndex]!.cell.cellView\n .tabbableChildren.length\n ) {\n this.setCellContentFocusState(\n cellContentIndex,\n newRowIndex,\n newColumnIndex,\n true\n );\n return true;\n }\n\n return false;\n }\n\n private trySetCellActionMenuFocus(\n rowElements: TableRowFocusableElements,\n columnIndex?: number,\n rowIndex?: number\n ): boolean {\n const newColumnIndex = columnIndex ?? this.columnIndex;\n const newRowIndex = rowIndex ?? this.rowIndex;\n\n if (\n newColumnIndex >= 0\n && newColumnIndex < rowElements.cells.length\n && rowElements.cells[newColumnIndex]!.actionMenuButton\n ) {\n this.setCellActionMenuFocusState(newRowIndex, newColumnIndex, true);\n return true;\n }\n\n return false;\n }\n\n private setCellActionMenuFocusState(\n rowIndex: number,\n columnIndex: number,\n focusElement: boolean\n ): void {\n this.focusType = TableFocusType.cellActionMenu;\n this.setRowCellFocusState(columnIndex, rowIndex, focusElement);\n }\n\n private setCellContentFocusState(\n cellContentIndex: number,\n rowIndex: number,\n columnIndex: number,\n focusElement: boolean\n ): void {\n this.focusType = TableFocusType.cellContent;\n this.cellContentIndex = cellContentIndex;\n this.setRowCellFocusState(columnIndex, rowIndex, focusElement);\n }\n\n private setRowFocusState(rowIndex?: number): void {\n this.focusType = TableFocusType.row;\n if (rowIndex !== undefined) {\n this.rowIndex = rowIndex;\n }\n }\n\n private setCellFocusState(\n columnIndex: number,\n rowIndex: number,\n focusElement: boolean\n ): void {\n this.focusType = TableFocusType.cell;\n this.setRowCellFocusState(columnIndex, rowIndex, focusElement);\n }\n\n private setRowCellFocusState(\n columnIndex: number,\n rowIndex: number,\n focusElement: boolean\n ): void {\n this.rowIndex = rowIndex;\n this.columnIndex = columnIndex;\n if (focusElement) {\n this.focusCurrentRow(true);\n }\n }\n\n private isResolvedRowType(row: unknown): row is TableRow | TableGroupRow {\n return row instanceof TableRow || row instanceof TableGroupRow;\n }\n}\n"]}
1
+ {"version":3,"file":"keyboard-navigation-manager.js","sourceRoot":"","sources":["../../../../src/table/models/keyboard-navigation-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Notifier, type Subscriber, Observable } from '@ni/fast-element';\nimport {\n keyArrowDown,\n keyArrowLeft,\n keyArrowRight,\n keyArrowUp,\n keyEnd,\n keyEnter,\n keyEscape,\n keyFunction2,\n keyHome,\n keyPageDown,\n keyPageUp,\n keySpace,\n keyTab\n} from '@ni/fast-web-utilities';\nimport { FoundationElement } from '@ni/fast-foundation';\nimport type { ScrollToOptions } from '@tanstack/virtual-core';\nimport type { Table } from '..';\nimport { TableFocusType } from '../types';\nimport type {\n TableActionMenuToggleEventDetail,\n TableHeaderFocusableElements,\n TableRowFocusableElements,\n TableRecord\n} from '../types';\nimport type { Virtualizer } from './virtualizer';\nimport { TableGroupRow } from '../components/group-row';\nimport { TableRow } from '../components/row';\nimport { TableCell } from '../components/cell';\nimport type { MenuButton } from '../../menu-button';\nimport { tableHeaderTag } from '../components/header';\nimport { TableCellView } from '../../table-column/base/cell-view';\n\ninterface TableFocusState {\n focusType: TableFocusType;\n headerActionIndex?: number;\n rowIndex?: number;\n columnIndex?: number;\n cellContentIndex?: number;\n}\n\n/**\n * Manages the keyboard navigation and focus within the table.\n * @internal\n */\nexport class KeyboardNavigationManager<\n TData extends TableRecord\n> implements Subscriber {\n private focusType: TableFocusType = TableFocusType.none;\n private headerActionIndex = -1;\n private rowIndex = -1;\n private cellContentIndex = -1;\n private columnIndex = -1;\n private focusWithinTable = false;\n private isCurrentlyFocusingElement = false;\n private readonly tableNotifier: Notifier;\n private readonly virtualizerNotifier: Notifier;\n private visibleRowNotifiers: Notifier[] = [];\n private get inNavigationMode(): boolean {\n return (\n this.focusType !== TableFocusType.cellActionMenu\n && this.focusType !== TableFocusType.cellContent\n );\n }\n\n public constructor(\n private readonly table: Table<TData>,\n private readonly virtualizer: Virtualizer<TData>\n ) {\n this.tableNotifier = Observable.getNotifier(this.table);\n this.tableNotifier.subscribe(this, 'rowElements');\n this.virtualizerNotifier = Observable.getNotifier(this.virtualizer);\n this.virtualizerNotifier.subscribe(this, 'visibleItems');\n }\n\n public resetFocusState(): void {\n this.focusType = TableFocusType.none;\n const activeElement = this.getActiveElement();\n if (activeElement && this.isInTable(activeElement)) {\n this.setDefaultFocus();\n }\n }\n\n public get hasActiveRowOrCellFocus(): boolean {\n return this.focusWithinTable && this.hasRowOrCellFocusType();\n }\n\n public connect(): void {\n this.table.addEventListener(\n 'keydown',\n this.onCaptureKeyDown as EventListener,\n { capture: true }\n );\n this.table.addEventListener('keydown', this.onKeyDown as EventListener);\n this.table.addEventListener(\n 'focusin',\n this.onTableFocusIn as EventListener\n );\n this.table.addEventListener(\n 'focusout',\n this.onTableFocusOut as EventListener\n );\n this.table.viewport.addEventListener('keydown', this.onViewportKeyDown);\n this.table.viewport.addEventListener(\n 'cell-action-menu-blur',\n this.onCellActionMenuBlur as EventListener\n );\n this.table.viewport.addEventListener(\n 'cell-view-focus-in',\n this.onCellViewFocusIn as EventListener\n );\n this.table.viewport.addEventListener(\n 'cell-focus-in',\n this.onCellFocusIn as EventListener\n );\n this.table.viewport.addEventListener(\n 'cell-blur',\n this.onCellBlur as EventListener\n );\n }\n\n public disconnect(): void {\n this.table.removeEventListener(\n 'keydown',\n this.onCaptureKeyDown as EventListener,\n { capture: true }\n );\n this.table.removeEventListener(\n 'keydown',\n this.onKeyDown as EventListener\n );\n this.table.removeEventListener(\n 'focusin',\n this.onTableFocusIn as EventListener\n );\n this.table.removeEventListener(\n 'focusout',\n this.onTableFocusOut as EventListener\n );\n this.table.viewport.removeEventListener(\n 'keydown',\n this.onViewportKeyDown\n );\n this.table.viewport.removeEventListener(\n 'cell-action-menu-blur',\n this.onCellActionMenuBlur as EventListener\n );\n this.table.viewport.removeEventListener(\n 'cell-view-focus-in',\n this.onCellViewFocusIn as EventListener\n );\n this.table.viewport.removeEventListener(\n 'cell-focus-in',\n this.onCellFocusIn as EventListener\n );\n this.table.viewport.removeEventListener(\n 'cell-blur',\n this.onCellBlur as EventListener\n );\n }\n\n public handleChange(source: unknown, args: unknown): void {\n let focusRowAndCell = false;\n if (source === this.virtualizer && args === 'visibleItems') {\n focusRowAndCell = true;\n } else if (source === this.table && args === 'rowElements') {\n for (const notifier of this.visibleRowNotifiers) {\n notifier.unsubscribe(this);\n }\n this.visibleRowNotifiers = [];\n for (const visibleRow of this.table.rowElements) {\n const rowNotifier = Observable.getNotifier(visibleRow);\n rowNotifier.subscribe(this, 'resolvedRowIndex');\n this.visibleRowNotifiers.push(rowNotifier);\n if (visibleRow.resolvedRowIndex === this.rowIndex) {\n focusRowAndCell = true;\n }\n }\n } else if (\n args === 'resolvedRowIndex'\n && this.isResolvedRowType(source)\n ) {\n if (source.resolvedRowIndex === this.rowIndex) {\n focusRowAndCell = true;\n }\n }\n\n if (focusRowAndCell) {\n // We want open action menus to be closed, and focused interactive cell content blurred, on scroll. We also don't want to\n // refocus the interactive cell content after the scroll, as the element no longer represents the same table data at that\n // point. So in both those cases, we focus the cell here. This also lets us maintain what row/ cell the user had focused\n // previously.\n if (\n this.focusType === TableFocusType.cellActionMenu\n || this.focusType === TableFocusType.cellContent\n ) {\n this.setCellFocusState(this.columnIndex, this.rowIndex, false);\n }\n if (this.inNavigationMode && this.hasRowOrCellFocusType()) {\n if (this.rowIndex > this.table.tableData.length - 1) {\n // Focused row index no longer valid, coerce to 1st row if possible\n if (this.table.tableData.length > 0) {\n this.rowIndex = 0;\n } else {\n if (this.focusWithinTable) {\n this.setDefaultFocus();\n } else {\n this.focusType = TableFocusType.none;\n }\n return;\n }\n }\n if (this.focusWithinTable) {\n this.focusCurrentRow(false);\n }\n }\n }\n }\n\n public onRowFocusIn(event: FocusEvent): void {\n if (this.isCurrentlyFocusingElement) {\n return;\n }\n const row = event.target;\n if (this.isResolvedRowType(row)) {\n if (this.rowIndex !== row.resolvedRowIndex) {\n // If user focuses a row some other way (e.g. mouse), update our focus state so future keyboard nav\n // will start from that row\n this.setRowFocusState(row.resolvedRowIndex);\n }\n }\n }\n\n public onRowBlur(event: FocusEvent): void {\n const row = event.target;\n if (this.isResolvedRowType(row)) {\n this.setElementFocusable(row, false);\n }\n }\n\n public onRowActionMenuToggle(\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): void {\n const isOpen = event.detail.newState;\n if (isOpen) {\n const row = event.target as TableRow;\n const columnIndex = this.table.visibleColumns.findIndex(\n column => column.columnId === event.detail.columnId\n );\n this.setCellActionMenuFocusState(\n row.resolvedRowIndex!,\n columnIndex,\n false\n );\n }\n }\n\n private readonly onTableFocusIn = (event: FocusEvent): void => {\n this.focusWithinTable = true;\n this.updateFocusStateFromActiveElement(false);\n\n // Sets initial focus on the appropriate table content\n const actionMenuOpen = this.table.openActionMenuRecordId !== undefined;\n if (\n (event.target === this.table\n || this.focusType === TableFocusType.none)\n && !actionMenuOpen\n ) {\n let focusHeader = true;\n if (\n this.hasRowOrCellFocusType()\n && this.scrollToAndFocusRow(this.rowIndex)\n ) {\n focusHeader = false;\n }\n if (focusHeader && !this.setFocusOnHeader()) {\n // nothing to focus\n this.table.blur();\n }\n }\n };\n\n private readonly onTableFocusOut = (): void => {\n this.focusWithinTable = false;\n };\n\n private readonly onCellActionMenuBlur = (\n event: CustomEvent<TableCell>\n ): void => {\n event.stopPropagation();\n const cell = event.detail;\n if (cell.actionMenuButton) {\n // Ensure that action menu buttons get hidden when no longer focused\n this.setActionMenuButtonFocused(cell.actionMenuButton, false);\n }\n };\n\n private readonly onCellViewFocusIn = (\n event: CustomEvent<TableCell>\n ): void => {\n event.stopPropagation();\n this.updateFocusStateFromActiveElement(false);\n };\n\n private readonly onCellFocusIn = (event: CustomEvent<TableCell>): void => {\n event.stopPropagation();\n const cell = event.detail;\n this.updateFocusStateFromActiveElement(true);\n // Currently, clicking a non-interactive cell only updates the focus state to that row, it\n // doesn't focus the cell. If we revisit this, we most likely need to set the cells to tabindex=-1\n // upfront too, so their focusing behavior is consistent whether they've been previously keyboard\n // focused or not.\n if (\n this.focusType === TableFocusType.row\n && this.getActiveElement() === cell\n ) {\n this.focusCurrentRow(false);\n }\n };\n\n private readonly onCellBlur = (event: CustomEvent<TableCell>): void => {\n event.stopPropagation();\n const cell = event.detail;\n this.setElementFocusable(cell, false);\n };\n\n private readonly onCaptureKeyDown = (event: KeyboardEvent): void => {\n let handled = false;\n if (event.key === keyTab) {\n handled = this.onTabPressed(event.shiftKey);\n } else if (this.inNavigationMode) {\n switch (event.key) {\n case keyArrowLeft:\n handled = this.onLeftArrowPressed();\n break;\n case keyArrowRight:\n handled = this.onRightArrowPressed();\n break;\n case keyArrowUp:\n handled = this.onUpArrowPressed();\n break;\n case keyArrowDown:\n handled = this.onDownArrowPressed();\n break;\n case keyPageUp:\n handled = this.onPageUpPressed();\n break;\n case keyPageDown:\n handled = this.onPageDownPressed();\n break;\n case keyHome:\n handled = this.onHomePressed(event.ctrlKey);\n break;\n case keyEnd:\n handled = this.onEndPressed(event.ctrlKey);\n break;\n case keyEnter:\n handled = this.onEnterPressed(event.ctrlKey);\n break;\n case keySpace:\n handled = this.onSpacePressed(event.shiftKey);\n break;\n case keyFunction2:\n handled = this.onF2Pressed();\n break;\n default:\n break;\n }\n }\n if (handled) {\n event.preventDefault();\n }\n };\n\n private readonly onKeyDown = (event: KeyboardEvent): void => {\n if (!this.inNavigationMode && !event.defaultPrevented) {\n if (event.key === keyEscape || event.key === keyFunction2) {\n const row = this.getCurrentRow();\n if (row) {\n this.trySetCellFocus(row.getFocusableElements());\n }\n }\n }\n };\n\n private readonly onViewportKeyDown = (event: KeyboardEvent): void => {\n let handleEvent = !this.inNavigationMode\n && (event.key === keyArrowUp || event.key === keyArrowDown);\n switch (event.key) {\n case keyPageUp:\n case keyPageDown:\n case keyHome:\n case keyEnd:\n handleEvent = true;\n break;\n default:\n break;\n }\n if (handleEvent) {\n // Swallow key presses that would cause table scrolling, independently of keyboard navigation\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n private onEnterPressed(ctrlKey: boolean): boolean {\n let row: TableRow | TableGroupRow | undefined;\n let rowElements: TableRowFocusableElements | undefined;\n if (this.hasRowOrCellFocusType()) {\n row = this.getCurrentRow();\n rowElements = row?.getFocusableElements();\n }\n if (this.focusType === TableFocusType.row) {\n if (row instanceof TableGroupRow) {\n this.toggleRowExpanded(row);\n return true;\n }\n }\n if (this.focusType === TableFocusType.cell) {\n if (ctrlKey) {\n const cell = rowElements?.cells[this.columnIndex];\n if (cell?.actionMenuButton && !cell.actionMenuButton.open) {\n cell.actionMenuButton.toggleButton!.control.click();\n return true;\n }\n }\n return this.focusFirstInteractiveElementInCurrentCell(rowElements);\n }\n return false;\n }\n\n private onF2Pressed(): boolean {\n if (this.focusType === TableFocusType.cell) {\n const row = this.getCurrentRow();\n const rowElements = row?.getFocusableElements();\n return this.focusFirstInteractiveElementInCurrentCell(rowElements);\n }\n return false;\n }\n\n private onSpacePressed(shiftKey: boolean): boolean {\n if (\n this.focusType === TableFocusType.row\n || this.focusType === TableFocusType.cell\n ) {\n if (this.focusType === TableFocusType.row || shiftKey) {\n const row = this.getCurrentRow();\n if (row instanceof TableRow && row.selectable) {\n row.onSelectionChange(row.selected, !row.selected);\n } else if (row instanceof TableGroupRow) {\n this.toggleRowExpanded(row);\n }\n }\n // Default Space behavior scrolls down, which is redundant given the rest of our keyboard nav code, and we'd still try to focus a\n // row that you scrolled away from. So suppress default Space behavior if a row or cell is selected, regardless of if we're\n // toggling selection or not.\n return true;\n }\n return false;\n }\n\n private onLeftArrowPressed(): boolean {\n let row: TableRow | TableGroupRow | undefined;\n let rowElements: TableRowFocusableElements | undefined;\n let headerElements!: TableHeaderFocusableElements;\n if (this.hasRowOrCellFocusType()) {\n row = this.getCurrentRow();\n rowElements = row?.getFocusableElements();\n } else if (this.hasHeaderFocusType()) {\n headerElements = this.getTableHeaderFocusableElements();\n }\n\n switch (this.focusType) {\n case TableFocusType.headerActions:\n return this.trySetHeaderActionFocus(\n headerElements,\n this.headerActionIndex - 1\n );\n case TableFocusType.columnHeader:\n return (\n this.trySetColumnHeaderFocus(\n headerElements,\n this.columnIndex - 1\n )\n || this.trySetHeaderActionFocus(\n headerElements,\n headerElements.headerActions.length - 1\n )\n );\n case TableFocusType.row:\n if (this.isRowExpanded(row) === true) {\n this.toggleRowExpanded(row!);\n return true;\n }\n return false;\n case TableFocusType.rowSelectionCheckbox:\n this.setRowFocusState();\n return this.focusCurrentRow(true);\n case TableFocusType.cell:\n if (\n !this.trySetCellFocus(rowElements, this.columnIndex - 1)\n && !this.trySetRowSelectionCheckboxFocus(rowElements)\n ) {\n this.setRowFocusState();\n this.focusCurrentRow(true);\n }\n return true;\n default:\n break;\n }\n\n return false;\n }\n\n private onRightArrowPressed(): boolean {\n let row: TableRow | TableGroupRow | undefined;\n let rowElements: TableRowFocusableElements | undefined;\n let headerElements!: TableHeaderFocusableElements;\n if (this.hasRowOrCellFocusType()) {\n row = this.getCurrentRow();\n rowElements = row?.getFocusableElements();\n } else if (this.hasHeaderFocusType()) {\n headerElements = this.getTableHeaderFocusableElements();\n }\n\n switch (this.focusType) {\n case TableFocusType.headerActions:\n return (\n this.trySetHeaderActionFocus(\n headerElements,\n this.headerActionIndex + 1\n ) || this.trySetColumnHeaderFocus(headerElements, 0)\n );\n case TableFocusType.columnHeader:\n return this.trySetColumnHeaderFocus(\n headerElements,\n this.columnIndex + 1\n );\n case TableFocusType.row:\n if (this.isRowExpanded(row) === false) {\n this.toggleRowExpanded(row!);\n return true;\n }\n return (\n this.trySetRowSelectionCheckboxFocus(rowElements)\n || this.trySetCellFocus(rowElements, 0)\n );\n case TableFocusType.rowSelectionCheckbox:\n return this.trySetCellFocus(rowElements, 0);\n case TableFocusType.cell:\n return this.trySetCellFocus(rowElements, this.columnIndex + 1);\n default:\n break;\n }\n\n return false;\n }\n\n private onUpArrowPressed(): boolean {\n this.onMoveUp(1);\n // Always prevent default - prevents page scroll, and FireFox changing focus if focus is at table extents\n return true;\n }\n\n private onPageUpPressed(): boolean {\n return this.onMoveUp(this.virtualizer.pageSize);\n }\n\n private onHomePressed(ctrlKey: boolean): boolean {\n if (this.handleHomeEndWithinRow(ctrlKey)) {\n const row = this.getCurrentRow();\n const rowElements = row?.getFocusableElements();\n return (\n this.trySetRowSelectionCheckboxFocus(rowElements)\n || this.trySetCellFocus(rowElements, 0)\n );\n }\n\n return this.onMoveUp(0, 0);\n }\n\n private onDownArrowPressed(): boolean {\n this.onMoveDown(1);\n // Always prevent default - prevents page scroll, and FireFox changing focus if focus is at table extents\n return true;\n }\n\n private onPageDownPressed(): boolean {\n return this.onMoveDown(this.virtualizer.pageSize);\n }\n\n private onEndPressed(ctrlKey: boolean): boolean {\n if (this.handleHomeEndWithinRow(ctrlKey)) {\n const row = this.getCurrentRow();\n const rowElements = row?.getFocusableElements();\n return this.trySetCellFocus(\n rowElements,\n this.table.visibleColumns.length - 1\n );\n }\n\n return this.onMoveDown(0, this.table.tableData.length - 1);\n }\n\n private handleHomeEndWithinRow(ctrlKey: boolean): boolean {\n return (\n (this.focusType === TableFocusType.cell\n || this.focusType === TableFocusType.rowSelectionCheckbox)\n && !ctrlKey\n );\n }\n\n private onTabPressed(shiftKeyPressed: boolean): boolean {\n const activeElement = this.getActiveElement();\n if (activeElement === null || activeElement === this.table) {\n return false;\n }\n const nextFocusState = this.hasRowOrCellFocusType()\n ? this.getNextRowTabStop(shiftKeyPressed)\n : this.getNextHeaderTabStop(shiftKeyPressed);\n if (nextFocusState) {\n this.focusType = nextFocusState.focusType;\n this.rowIndex = nextFocusState.rowIndex ?? this.rowIndex;\n this.columnIndex = nextFocusState.columnIndex ?? this.columnIndex;\n this.headerActionIndex = nextFocusState.headerActionIndex ?? this.headerActionIndex;\n this.cellContentIndex = nextFocusState.cellContentIndex ?? this.cellContentIndex;\n if (this.hasRowOrCellFocusType()) {\n this.focusCurrentRow(false);\n } else {\n this.focusHeaderElement();\n }\n return true;\n }\n this.blurAfterLastTab(activeElement);\n return false;\n }\n\n private getNextRowTabStop(\n shiftKeyPressed: boolean\n ): TableFocusState | undefined {\n const row = this.getCurrentRow();\n if (row === undefined) {\n return undefined;\n }\n let startIndex = -1;\n const focusStates = [];\n const rowElements = row.getFocusableElements();\n if (rowElements.selectionCheckbox) {\n focusStates.push({\n focusType: TableFocusType.rowSelectionCheckbox\n });\n if (this.focusType === TableFocusType.rowSelectionCheckbox) {\n startIndex = 0;\n }\n }\n let cellIndex = 0;\n while (cellIndex < rowElements.cells.length) {\n const firstCellTabbableIndex = focusStates.length;\n const cellInfo = rowElements.cells[cellIndex]!;\n const cellViewTabbableChildren = cellInfo.cell.cellView.tabbableChildren;\n for (let i = 0; i < cellViewTabbableChildren.length; i++) {\n focusStates.push({\n focusType: TableFocusType.cellContent,\n columnIndex: cellIndex,\n cellContentIndex: i\n });\n if (\n this.focusType === TableFocusType.cellContent\n && this.columnIndex === cellIndex\n && this.cellContentIndex === i\n ) {\n startIndex = focusStates.length - 1;\n }\n }\n if (cellInfo.actionMenuButton) {\n focusStates.push({\n focusType: TableFocusType.cellActionMenu,\n columnIndex: cellIndex\n });\n if (\n this.focusType === TableFocusType.cellActionMenu\n && this.columnIndex === cellIndex\n ) {\n startIndex = focusStates.length - 1;\n }\n }\n const lastCellTabbableIndex = focusStates.length - 1;\n if (\n this.focusType === TableFocusType.cell\n && this.columnIndex === cellIndex\n ) {\n startIndex = shiftKeyPressed\n ? lastCellTabbableIndex + 1\n : firstCellTabbableIndex - 1;\n }\n cellIndex += 1;\n }\n if (this.focusType === TableFocusType.row) {\n startIndex = shiftKeyPressed ? focusStates.length : -1;\n }\n const direction = shiftKeyPressed ? -1 : 1;\n return focusStates[startIndex + direction];\n }\n\n private getNextHeaderTabStop(\n shiftKeyPressed: boolean\n ): TableFocusState | undefined {\n let startIndex = -1;\n const focusStates = [];\n const headerTabbableElements = this.getTableHeaderFocusableElements().headerActions;\n for (let i = 0; i < headerTabbableElements.length; i++) {\n focusStates.push({\n focusType: TableFocusType.headerActions,\n headerActionIndex: i\n });\n }\n if (this.focusType === TableFocusType.headerActions) {\n startIndex = this.headerActionIndex;\n } else {\n // TableFocusType.columnHeader\n startIndex = focusStates.length;\n }\n const direction = shiftKeyPressed ? -1 : 1;\n return focusStates[startIndex + direction];\n }\n\n private blurAfterLastTab(activeElement: HTMLElement): void {\n // In order to get the desired browser-provided Tab/Shift-Tab behavior of focusing the\n // element before/after the table, the table shouldn't have tabIndex=0 when this event\n // handling ends. However it needs to be tabIndex=0 so we can re-focus the table the next time\n // it's tabbed to, so set tabIndex back to 0 after a rAF.\n // Note: In Chrome this is only needed for Shift-Tab, but in Firefox both Tab and Shift-Tab need this\n // to work as expected.\n this.table.tabIndex = -1;\n window.requestAnimationFrame(() => {\n this.table.tabIndex = 0;\n });\n\n // Don't explicitly call blur() on activeElement (causes unexpected behavior on Safari / Mac Firefox)\n this.setElementFocusable(activeElement, false);\n }\n\n private onMoveUp(rowDelta: number, newRowIndex?: number): boolean {\n const coerceRowIndex = rowDelta > 1;\n switch (this.focusType) {\n case TableFocusType.row:\n case TableFocusType.rowSelectionCheckbox:\n case TableFocusType.cell: {\n const scrollOptions: ScrollToOptions = {};\n let rowIndex = this.rowIndex;\n if (newRowIndex !== undefined) {\n rowIndex = newRowIndex;\n }\n rowIndex -= rowDelta;\n if (coerceRowIndex && rowIndex < 0) {\n rowIndex = 0;\n }\n if (rowDelta > 1) {\n scrollOptions.align = 'start';\n }\n\n if (rowIndex < this.rowIndex && rowIndex >= 0) {\n return this.scrollToAndFocusRow(rowIndex, scrollOptions);\n }\n if (rowIndex === -1) {\n const headerElements = this.getTableHeaderFocusableElements();\n if (\n this.focusType === TableFocusType.row\n || this.focusType === TableFocusType.rowSelectionCheckbox\n ) {\n return (\n this.trySetHeaderActionFocus(headerElements, 0)\n || this.trySetColumnHeaderFocus(headerElements, 0)\n );\n }\n return this.trySetColumnHeaderFocus(\n headerElements,\n this.columnIndex\n );\n }\n return false;\n }\n default:\n break;\n }\n\n return false;\n }\n\n private onMoveDown(rowDelta: number, newRowIndex?: number): boolean {\n const coerceRowIndex = rowDelta > 1;\n switch (this.focusType) {\n case TableFocusType.headerActions: {\n this.setRowFocusState(0);\n return this.scrollToAndFocusRow(0);\n }\n case TableFocusType.columnHeader: {\n this.setCellFocusState(this.columnIndex, 0, false);\n return this.scrollToAndFocusRow(0);\n }\n case TableFocusType.row:\n case TableFocusType.rowSelectionCheckbox:\n case TableFocusType.cell: {\n const scrollOptions: ScrollToOptions = {};\n let rowIndex = this.rowIndex;\n if (newRowIndex !== undefined) {\n rowIndex = newRowIndex;\n }\n rowIndex += rowDelta;\n if (coerceRowIndex && rowIndex >= this.table.tableData.length) {\n rowIndex = this.table.tableData.length - 1;\n }\n if (rowDelta > 1) {\n scrollOptions.align = 'end';\n }\n if (\n rowIndex > this.rowIndex\n && rowIndex < this.table.tableData.length\n ) {\n return this.scrollToAndFocusRow(rowIndex, scrollOptions);\n }\n return false;\n }\n default:\n break;\n }\n\n return false;\n }\n\n private updateFocusStateFromActiveElement(setRowFocus: boolean): void {\n // If the user is interacting with the table with non-keyboard methods (like mouse), we need to\n // update our focus state based on the current active/focused element\n const activeElement = this.getActiveElement();\n if (activeElement) {\n const row = this.getContainingRow(activeElement);\n if (row) {\n if (!(row instanceof TableGroupRow)) {\n const cell = this.getContainingCell(activeElement);\n if (cell) {\n const columnIndex = this.table.visibleColumns.indexOf(\n cell.column!\n );\n if (cell.actionMenuButton === activeElement) {\n this.setCellActionMenuFocusState(\n row.resolvedRowIndex!,\n columnIndex,\n false\n );\n return;\n }\n const contentIndex = cell.cellView.tabbableChildren.indexOf(\n activeElement\n );\n if (contentIndex > -1) {\n this.setCellContentFocusState(\n contentIndex,\n row.resolvedRowIndex!,\n columnIndex,\n false\n );\n return;\n }\n }\n }\n if (\n setRowFocus\n && this.hasRowOrCellFocusType()\n && this.rowIndex !== row.resolvedRowIndex\n ) {\n this.setRowFocusState(row.resolvedRowIndex);\n }\n }\n }\n }\n\n private focusElement(\n element: HTMLElement,\n focusOptions?: FocusOptions\n ): void {\n const previousActiveElement = this.getActiveElement();\n if (previousActiveElement !== element) {\n this.setElementFocusable(element, true);\n this.isCurrentlyFocusingElement = true;\n element.focus(focusOptions);\n this.isCurrentlyFocusingElement = false;\n if (\n previousActiveElement\n && this.isInTable(previousActiveElement)\n ) {\n this.setElementFocusable(previousActiveElement, false);\n }\n }\n }\n\n private setElementFocusable(\n element: HTMLElement,\n focusable: boolean\n ): void {\n if (element === this.table) {\n return;\n }\n\n element.tabIndex = focusable ? 0 : -1;\n }\n\n private setActionMenuButtonFocused(\n menuButton: MenuButton,\n focused: boolean\n ): void {\n // The action MenuButton needs to be visible in order to be focused, so this CSS class styling\n // handles that (see cell/styles.ts).\n if (focused) {\n menuButton.classList.add('cell-action-menu-focused');\n } else {\n menuButton.classList.remove('cell-action-menu-focused');\n }\n }\n\n private setFocusOnHeader(): boolean {\n if (this.hasHeaderFocusType()) {\n return this.focusHeaderElement();\n }\n this.setDefaultFocus();\n return this.focusType !== TableFocusType.none;\n }\n\n private setDefaultFocus(): void {\n const headerElements = this.getTableHeaderFocusableElements();\n if (\n !this.trySetHeaderActionFocus(headerElements, 0)\n && !this.trySetColumnHeaderFocus(headerElements, 0)\n && !this.scrollToAndFocusRow(0)\n ) {\n this.focusType = TableFocusType.none;\n }\n }\n\n private scrollToAndFocusRow(\n totalRowIndex: number,\n scrollOptions?: ScrollToOptions\n ): boolean {\n if (totalRowIndex >= 0 && totalRowIndex < this.table.tableData.length) {\n switch (this.focusType) {\n case TableFocusType.none:\n case TableFocusType.headerActions:\n case TableFocusType.columnHeader:\n this.setRowFocusState(totalRowIndex);\n break;\n default:\n break;\n }\n this.rowIndex = totalRowIndex;\n this.virtualizer.scrollToIndex(totalRowIndex, scrollOptions);\n this.focusCurrentRow(true);\n return true;\n }\n return false;\n }\n\n private focusCurrentRow(allowScroll: boolean): boolean {\n const visibleRowIndex = this.getCurrentRowVisibleIndex();\n if (visibleRowIndex < 0) {\n return false;\n }\n const focusedRow = this.table.rowElements[visibleRowIndex]!;\n\n let focusRowOnly = false;\n switch (this.focusType) {\n case TableFocusType.row:\n focusRowOnly = true;\n break;\n case TableFocusType.cell:\n case TableFocusType.cellActionMenu:\n case TableFocusType.cellContent:\n focusRowOnly = focusedRow instanceof TableGroupRow;\n break;\n default:\n break;\n }\n const focusOptions = { preventScroll: !allowScroll };\n if (focusRowOnly) {\n this.focusElement(focusedRow, focusOptions);\n return true;\n }\n this.focusRowElement(focusedRow, focusOptions);\n return true;\n }\n\n private focusRowElement(\n row: TableRow | TableGroupRow,\n focusOptions?: FocusOptions\n ): void {\n const rowElements = row.getFocusableElements();\n let focusableElement: HTMLElement | undefined;\n switch (this.focusType) {\n case TableFocusType.rowSelectionCheckbox:\n focusableElement = rowElements.selectionCheckbox;\n break;\n case TableFocusType.cell: {\n focusableElement = rowElements.cells[this.columnIndex]!.cell;\n break;\n }\n case TableFocusType.cellActionMenu: {\n const actionMenuButton = rowElements.cells[this.columnIndex]?.cell.actionMenuButton;\n if (actionMenuButton) {\n focusableElement = actionMenuButton;\n this.setActionMenuButtonFocused(actionMenuButton, true);\n }\n break;\n }\n case TableFocusType.cellContent: {\n focusableElement = rowElements.cells[this.columnIndex]?.cell.cellView\n .tabbableChildren[this.cellContentIndex];\n break;\n }\n default:\n break;\n }\n if (focusableElement) {\n this.focusElement(focusableElement, focusOptions);\n }\n }\n\n private focusHeaderElement(): boolean {\n const headerElements = this.getTableHeaderFocusableElements();\n let focusableElement: HTMLElement | undefined;\n switch (this.focusType) {\n case TableFocusType.headerActions:\n focusableElement = headerElements.headerActions[this.headerActionIndex];\n break;\n case TableFocusType.columnHeader:\n focusableElement = headerElements.columnHeaders[this.columnIndex];\n break;\n default:\n break;\n }\n if (focusableElement) {\n this.focusElement(focusableElement);\n return true;\n }\n return false;\n }\n\n private getCurrentRowVisibleIndex(): number {\n return this.table.rowElements.findIndex(\n row => row.resolvedRowIndex === this.rowIndex\n );\n }\n\n private getTableHeaderFocusableElements(): TableHeaderFocusableElements {\n const headerActions: HTMLElement[] = [];\n if (\n this.table.selectionCheckbox?.getRootNode()\n === this.table.shadowRoot\n ) {\n headerActions.push(this.table.selectionCheckbox);\n }\n\n if (\n this.table.showCollapseAll\n && this.table.collapseAllButton?.getRootNode()\n === this.table.shadowRoot\n ) {\n headerActions.push(this.table.collapseAllButton);\n }\n\n const columnHeaders: HTMLElement[] = [];\n if (this.canFocusColumnHeaders()) {\n this.table.columnHeadersContainer\n .querySelectorAll(tableHeaderTag)\n .forEach(header => columnHeaders.push(header));\n }\n\n return { headerActions, columnHeaders };\n }\n\n private canFocusColumnHeaders(): boolean {\n return (\n this.table.columns.find(\n c => !c.columnInternals.sortingDisabled\n ) !== undefined\n );\n }\n\n private getCurrentRow(): TableRow | TableGroupRow | undefined {\n return this.table.rowElements[this.getCurrentRowVisibleIndex()];\n }\n\n private isRowExpanded(\n row: TableRow | TableGroupRow | undefined\n ): boolean | undefined {\n if (\n (row instanceof TableRow && row.isParentRow)\n || row instanceof TableGroupRow\n ) {\n return row.expanded;\n }\n return undefined;\n }\n\n private toggleRowExpanded(row: TableRow | TableGroupRow): void {\n if (row instanceof TableGroupRow) {\n row.onGroupExpandToggle();\n } else {\n row.onRowExpandToggle();\n }\n this.focusRowElement(row);\n }\n\n private getContainingRow(\n start: Element | undefined | null\n ): TableRow | TableGroupRow | undefined {\n return this.getContainingElement(start, e => this.isResolvedRowType(e));\n }\n\n private getContainingCell(\n start: Element | undefined | null\n ): TableCell | undefined {\n return this.getContainingElement(start, e => e instanceof TableCell);\n }\n\n private getContainingElement<TElement>(\n start: Element | undefined | null,\n isElementMatch: (element: Element) => boolean\n ): TElement | undefined {\n let possibleMatch = start;\n while (possibleMatch && possibleMatch !== this.table) {\n if (isElementMatch(possibleMatch)) {\n return possibleMatch as TElement;\n }\n possibleMatch = possibleMatch.parentElement\n ?? (possibleMatch.parentNode as ShadowRoot)?.host;\n }\n\n return undefined;\n }\n\n private isInTable(start: Element): boolean {\n let possibleMatch = start;\n while (possibleMatch && possibleMatch !== this.table) {\n possibleMatch = possibleMatch.parentElement\n ?? (possibleMatch.parentNode as ShadowRoot)?.host;\n }\n\n return possibleMatch === this.table;\n }\n\n private getActiveElement(): HTMLElement | null {\n let activeElement = document.activeElement;\n while (activeElement?.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n // In some cases, the active element may be a sub-part of a control (example: MenuButton -> ToggleButton -> a div with tabindex=0). Stop at the outer control boundary, so that\n // we can more simply check equality against the elements of getTableHeaderFocusableElements() / row.getFocusableElements().\n // (For rows/cells/cell views, we do need to recurse into them, to get to the appropriate focused controls though)\n if (\n activeElement instanceof FoundationElement\n && !this.isResolvedRowType(activeElement)\n && !(activeElement instanceof TableCell)\n && !(activeElement instanceof TableCellView)\n ) {\n break;\n }\n }\n\n return activeElement as HTMLElement;\n }\n\n private focusFirstInteractiveElementInCurrentCell(\n rowElements?: TableRowFocusableElements\n ): boolean {\n if (!rowElements) {\n return false;\n }\n return (\n this.trySetCellContentFocus(rowElements, 0)\n || this.trySetCellActionMenuFocus(rowElements)\n );\n }\n\n private hasRowOrCellFocusType(): boolean {\n switch (this.focusType) {\n case TableFocusType.cell:\n case TableFocusType.cellActionMenu:\n case TableFocusType.cellContent:\n case TableFocusType.row:\n case TableFocusType.rowSelectionCheckbox:\n return true;\n default:\n return false;\n }\n }\n\n private hasHeaderFocusType(): boolean {\n switch (this.focusType) {\n case TableFocusType.headerActions:\n case TableFocusType.columnHeader:\n return true;\n default:\n return false;\n }\n }\n\n private trySetRowSelectionCheckboxFocus(\n rowElements: TableRowFocusableElements | undefined\n ): boolean {\n if (rowElements?.selectionCheckbox) {\n this.focusType = TableFocusType.rowSelectionCheckbox;\n this.focusCurrentRow(true);\n return true;\n }\n return false;\n }\n\n private trySetColumnHeaderFocus(\n headerElements: TableHeaderFocusableElements,\n columnIndex: number\n ): boolean {\n if (\n columnIndex >= 0\n && columnIndex < headerElements.columnHeaders.length\n ) {\n this.focusType = TableFocusType.columnHeader;\n this.columnIndex = columnIndex;\n this.focusHeaderElement();\n return true;\n }\n return false;\n }\n\n private trySetHeaderActionFocus(\n headerElements: TableHeaderFocusableElements,\n headerActionIndex: number\n ): boolean {\n if (\n headerActionIndex >= 0\n && headerActionIndex < headerElements.headerActions.length\n ) {\n this.focusType = TableFocusType.headerActions;\n this.headerActionIndex = headerActionIndex;\n this.focusHeaderElement();\n return true;\n }\n return false;\n }\n\n private trySetCellFocus(\n rowElements: TableRowFocusableElements | undefined,\n columnIndex?: number,\n rowIndex?: number\n ): boolean {\n if (!rowElements) {\n return false;\n }\n const newColumnIndex = columnIndex ?? this.columnIndex;\n const newRowIndex = rowIndex ?? this.rowIndex;\n\n if (newColumnIndex >= 0 && newColumnIndex < rowElements.cells.length) {\n this.focusType = TableFocusType.cell;\n this.setRowCellFocusState(newColumnIndex, newRowIndex, true);\n return true;\n }\n\n return false;\n }\n\n private trySetCellContentFocus(\n rowElements: TableRowFocusableElements | undefined,\n cellContentIndex: number,\n columnIndex?: number,\n rowIndex?: number\n ): boolean {\n if (!rowElements) {\n return false;\n }\n const newColumnIndex = columnIndex ?? this.columnIndex;\n const newRowIndex = rowIndex ?? this.rowIndex;\n\n if (\n newColumnIndex >= 0\n && newColumnIndex < rowElements.cells.length\n && cellContentIndex >= 0\n && cellContentIndex\n < rowElements.cells[newColumnIndex]!.cell.cellView\n .tabbableChildren.length\n ) {\n this.setCellContentFocusState(\n cellContentIndex,\n newRowIndex,\n newColumnIndex,\n true\n );\n return true;\n }\n\n return false;\n }\n\n private trySetCellActionMenuFocus(\n rowElements: TableRowFocusableElements,\n columnIndex?: number,\n rowIndex?: number\n ): boolean {\n const newColumnIndex = columnIndex ?? this.columnIndex;\n const newRowIndex = rowIndex ?? this.rowIndex;\n\n if (\n newColumnIndex >= 0\n && newColumnIndex < rowElements.cells.length\n && rowElements.cells[newColumnIndex]!.actionMenuButton\n ) {\n this.setCellActionMenuFocusState(newRowIndex, newColumnIndex, true);\n return true;\n }\n\n return false;\n }\n\n private setCellActionMenuFocusState(\n rowIndex: number,\n columnIndex: number,\n focusElement: boolean\n ): void {\n this.focusType = TableFocusType.cellActionMenu;\n this.setRowCellFocusState(columnIndex, rowIndex, focusElement);\n }\n\n private setCellContentFocusState(\n cellContentIndex: number,\n rowIndex: number,\n columnIndex: number,\n focusElement: boolean\n ): void {\n this.focusType = TableFocusType.cellContent;\n this.cellContentIndex = cellContentIndex;\n this.setRowCellFocusState(columnIndex, rowIndex, focusElement);\n }\n\n private setRowFocusState(rowIndex?: number): void {\n this.focusType = TableFocusType.row;\n if (rowIndex !== undefined) {\n this.rowIndex = rowIndex;\n }\n }\n\n private setCellFocusState(\n columnIndex: number,\n rowIndex: number,\n focusElement: boolean\n ): void {\n this.focusType = TableFocusType.cell;\n this.setRowCellFocusState(columnIndex, rowIndex, focusElement);\n }\n\n private setRowCellFocusState(\n columnIndex: number,\n rowIndex: number,\n focusElement: boolean\n ): void {\n this.rowIndex = rowIndex;\n this.columnIndex = columnIndex;\n if (focusElement) {\n this.focusCurrentRow(true);\n }\n }\n\n private isResolvedRowType(row: unknown): row is TableRow | TableGroupRow {\n return row instanceof TableRow || row instanceof TableGroupRow;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/date-text/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { DesignSystem, type DesignTokenSubscriber } from '@ni/fast-foundation';\nimport { attr } from '@ni/fast-element';\nimport { styles } from '../base/styles';\nimport { template } from '../base/template';\nimport type { TableNumberField } from '../../table/types';\nimport { TableColumnTextBase, mixinTextBase } from '../text-base';\nimport { TableColumnSortOperation } from '../base/types';\nimport { tableColumnDateTextGroupHeaderViewTag } from './group-header-view';\nimport { tableColumnDateTextCellViewTag } from './cell-view';\nimport type { ColumnInternalsOptions } from '../base/models/column-internals';\nimport { DateTextFormat } from './types';\nimport type {\n LocaleMatcherAlgorithm,\n EraFormat,\n YearFormat,\n DayFormat,\n HourFormat,\n MinuteFormat,\n SecondFormat,\n TimeZoneNameFormat,\n FormatMatcherAlgorithm,\n DayPeriodFormat,\n DateStyle,\n TimeStyle,\n HourCycleFormat,\n MonthFormat,\n WeekdayFormat\n} from './types';\nimport { TableColumnDateTextValidator } from './models/table-column-date-text-validator';\nimport { lang } from '../../theme-provider';\nimport { optionalBooleanConverter } from '../../utilities/models/converter';\nimport type { TableColumnTextBaseColumnConfig } from '../text-base/cell-view';\n\nexport type TableColumnDateTextCellRecord = TableNumberField<'value'>;\nexport interface TableColumnDateTextColumnConfig\n extends TableColumnTextBaseColumnConfig {\n formatter: Intl.DateTimeFormat;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-column-date-text': TableColumnDateText;\n }\n}\n\n/**\n * The table column for displaying dates/times as text.\n */\nexport class TableColumnDateText extends mixinTextBase(\n TableColumnTextBase<\n TableColumnDateTextColumnConfig,\n TableColumnDateTextValidator\n >\n) {\n @attr\n public format: DateTextFormat;\n\n @attr({ attribute: 'custom-locale-matcher' })\n public customLocaleMatcher: LocaleMatcherAlgorithm;\n\n @attr({ attribute: 'custom-weekday' })\n public customWeekday: WeekdayFormat;\n\n @attr({ attribute: 'custom-era' })\n public customEra: EraFormat;\n\n @attr({ attribute: 'custom-year' })\n public customYear: YearFormat;\n\n @attr({ attribute: 'custom-month' })\n public customMonth: MonthFormat;\n\n @attr({ attribute: 'custom-day' })\n public customDay: DayFormat;\n\n @attr({ attribute: 'custom-hour' })\n public customHour: HourFormat;\n\n @attr({ attribute: 'custom-minute' })\n public customMinute: MinuteFormat;\n\n @attr({ attribute: 'custom-second' })\n public customSecond: SecondFormat;\n\n @attr({ attribute: 'custom-time-zone-name' })\n public customTimeZoneName: TimeZoneNameFormat;\n\n @attr({ attribute: 'custom-format-matcher' })\n public customFormatMatcher: FormatMatcherAlgorithm;\n\n // Later versions of FAST (than the legacy branch we're on) have a nullableBooleanConverter.\n // We should replace our converter with that one when it is available to us.\n // See issue related to adopting FastElement 2.0: https://github.com/ni/nimble/issues/572\n @attr({ attribute: 'custom-hour12', converter: optionalBooleanConverter })\n public customHour12?: boolean;\n\n @attr({ attribute: 'custom-time-zone' })\n public customTimeZone?: string;\n\n @attr({ attribute: 'custom-calendar' })\n public customCalendar?: string;\n\n @attr({ attribute: 'custom-day-period' })\n public customDayPeriod: DayPeriodFormat;\n\n @attr({ attribute: 'custom-numbering-system' })\n public customNumberingSystem?: string;\n\n @attr({ attribute: 'custom-date-style' })\n public customDateStyle: DateStyle;\n\n @attr({ attribute: 'custom-time-style' })\n public customTimeStyle: TimeStyle;\n\n @attr({ attribute: 'custom-hour-cycle' })\n public customHourCycle: HourCycleFormat;\n\n private readonly langSubscriber: DesignTokenSubscriber<typeof lang> = {\n handleChange: () => {\n this.updateColumnConfig();\n }\n };\n\n public override connectedCallback(): void {\n super.connectedCallback();\n lang.subscribe(this.langSubscriber, this);\n this.updateColumnConfig();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n lang.unsubscribe(this.langSubscriber, this);\n }\n\n public placeholderChanged(): void {\n this.updateColumnConfig();\n }\n\n protected override getColumnInternalsOptions(): ColumnInternalsOptions<TableColumnDateTextValidator> {\n return {\n cellRecordFieldNames: ['value'],\n cellViewTag: tableColumnDateTextCellViewTag,\n groupHeaderViewTag: tableColumnDateTextGroupHeaderViewTag,\n delegatedEvents: [],\n sortOperation: TableColumnSortOperation.basic,\n validator: new TableColumnDateTextValidator()\n };\n }\n\n protected formatChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customLocaleMatcherChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customWeekdayChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customEraChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customYearChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customMonthChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customDayChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customHourChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customMinuteChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customSecondChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customTimeZoneNameChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customFormatMatcherChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customHour12Changed(): void {\n this.updateColumnConfig();\n }\n\n protected customTimeZoneChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customCalendarChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customDayPeriodChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customNumberingSystemChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customDateStyleChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customTimeStyleChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customHourCycleChanged(): void {\n this.updateColumnConfig();\n }\n\n private updateColumnConfig(): void {\n const formatter = this.createFormatter();\n\n if (formatter) {\n const columnConfig: TableColumnDateTextColumnConfig = {\n formatter,\n placeholder: this.placeholder\n };\n this.columnInternals.columnConfig = columnConfig;\n this.columnInternals.validator.setCustomOptionsValidity(true);\n } else {\n this.columnInternals.columnConfig = undefined;\n this.columnInternals.validator.setCustomOptionsValidity(false);\n }\n }\n\n private createFormatter(): Intl.DateTimeFormat | undefined {\n let options: Intl.DateTimeFormatOptions;\n if (this.format === DateTextFormat.default) {\n options = {\n dateStyle: 'medium',\n timeStyle: 'medium'\n };\n } else {\n options = this.getCustomFormattingOptions();\n }\n try {\n return new Intl.DateTimeFormat(lang.getValueFor(this), options);\n } catch (e) {\n return undefined;\n }\n }\n\n private getCustomFormattingOptions(): Intl.DateTimeFormatOptions {\n // There's a FAST bug (https://github.com/microsoft/fast/issues/6630) where removing\n // attributes sets their values to null instead of undefined. To work around this,\n // translate null values to undefined.\n const options: Intl.DateTimeFormatOptions = {\n localeMatcher: this.customLocaleMatcher ?? undefined,\n weekday: this.customWeekday ?? undefined,\n era: this.customEra ?? undefined,\n year: this.customYear ?? undefined,\n month: this.customMonth ?? undefined,\n day: this.customDay ?? undefined,\n hour: this.customHour ?? undefined,\n minute: this.customMinute ?? undefined,\n second: this.customSecond ?? undefined,\n timeZoneName: this.customTimeZoneName ?? undefined,\n formatMatcher: this.customFormatMatcher ?? undefined,\n hour12: this.customHour12 ?? undefined,\n timeZone: this.customTimeZone ?? undefined,\n calendar: this.customCalendar ?? undefined,\n dayPeriod: this.customDayPeriod ?? undefined,\n numberingSystem: this.customNumberingSystem ?? undefined,\n dateStyle: this.customDateStyle ?? undefined,\n timeStyle: this.customTimeStyle ?? undefined,\n hourCycle: this.customHourCycle ?? undefined\n };\n return options;\n }\n}\n\nconst nimbleTableColumnDateText = TableColumnDateText.compose({\n baseName: 'table-column-date-text',\n template,\n styles\n});\n\nDesignSystem.getOrCreate()\n .withPrefix('nimble')\n .register(nimbleTableColumnDateText());\nexport const tableColumnDateTextTag = 'nimble-table-column-date-text';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/date-text/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { DesignSystem, type DesignTokenSubscriber } from '@ni/fast-foundation';\nimport { attr } from '@ni/fast-element';\nimport { styles } from '../base/styles';\nimport { template } from '../base/template';\nimport type { TableNumberField } from '../../table/types';\nimport { TableColumnTextBase, mixinTextBase } from '../text-base';\nimport { TableColumnSortOperation } from '../base/types';\nimport { tableColumnDateTextGroupHeaderViewTag } from './group-header-view';\nimport { tableColumnDateTextCellViewTag } from './cell-view';\nimport type { ColumnInternalsOptions } from '../base/models/column-internals';\nimport { DateTextFormat } from './types';\nimport type {\n LocaleMatcherAlgorithm,\n EraFormat,\n YearFormat,\n DayFormat,\n HourFormat,\n MinuteFormat,\n SecondFormat,\n TimeZoneNameFormat,\n FormatMatcherAlgorithm,\n DayPeriodFormat,\n DateStyle,\n TimeStyle,\n HourCycleFormat,\n MonthFormat,\n WeekdayFormat\n} from './types';\nimport { TableColumnDateTextValidator } from './models/table-column-date-text-validator';\nimport { lang } from '../../theme-provider';\nimport { optionalBooleanConverter } from '../../utilities/models/converter';\nimport type { TableColumnTextBaseColumnConfig } from '../text-base/cell-view';\n\nexport type TableColumnDateTextCellRecord = TableNumberField<'value'>;\nexport interface TableColumnDateTextColumnConfig extends TableColumnTextBaseColumnConfig {\n formatter: Intl.DateTimeFormat;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-column-date-text': TableColumnDateText;\n }\n}\n\n/**\n * The table column for displaying dates/times as text.\n */\nexport class TableColumnDateText extends mixinTextBase(\n TableColumnTextBase<\n TableColumnDateTextColumnConfig,\n TableColumnDateTextValidator\n >\n) {\n @attr\n public format: DateTextFormat;\n\n @attr({ attribute: 'custom-locale-matcher' })\n public customLocaleMatcher: LocaleMatcherAlgorithm;\n\n @attr({ attribute: 'custom-weekday' })\n public customWeekday: WeekdayFormat;\n\n @attr({ attribute: 'custom-era' })\n public customEra: EraFormat;\n\n @attr({ attribute: 'custom-year' })\n public customYear: YearFormat;\n\n @attr({ attribute: 'custom-month' })\n public customMonth: MonthFormat;\n\n @attr({ attribute: 'custom-day' })\n public customDay: DayFormat;\n\n @attr({ attribute: 'custom-hour' })\n public customHour: HourFormat;\n\n @attr({ attribute: 'custom-minute' })\n public customMinute: MinuteFormat;\n\n @attr({ attribute: 'custom-second' })\n public customSecond: SecondFormat;\n\n @attr({ attribute: 'custom-time-zone-name' })\n public customTimeZoneName: TimeZoneNameFormat;\n\n @attr({ attribute: 'custom-format-matcher' })\n public customFormatMatcher: FormatMatcherAlgorithm;\n\n // Later versions of FAST (than the legacy branch we're on) have a nullableBooleanConverter.\n // We should replace our converter with that one when it is available to us.\n // See issue related to adopting FastElement 2.0: https://github.com/ni/nimble/issues/572\n @attr({ attribute: 'custom-hour12', converter: optionalBooleanConverter })\n public customHour12?: boolean;\n\n @attr({ attribute: 'custom-time-zone' })\n public customTimeZone?: string;\n\n @attr({ attribute: 'custom-calendar' })\n public customCalendar?: string;\n\n @attr({ attribute: 'custom-day-period' })\n public customDayPeriod: DayPeriodFormat;\n\n @attr({ attribute: 'custom-numbering-system' })\n public customNumberingSystem?: string;\n\n @attr({ attribute: 'custom-date-style' })\n public customDateStyle: DateStyle;\n\n @attr({ attribute: 'custom-time-style' })\n public customTimeStyle: TimeStyle;\n\n @attr({ attribute: 'custom-hour-cycle' })\n public customHourCycle: HourCycleFormat;\n\n private readonly langSubscriber: DesignTokenSubscriber<typeof lang> = {\n handleChange: () => {\n this.updateColumnConfig();\n }\n };\n\n public override connectedCallback(): void {\n super.connectedCallback();\n lang.subscribe(this.langSubscriber, this);\n this.updateColumnConfig();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n lang.unsubscribe(this.langSubscriber, this);\n }\n\n public placeholderChanged(): void {\n this.updateColumnConfig();\n }\n\n protected override getColumnInternalsOptions(): ColumnInternalsOptions<TableColumnDateTextValidator> {\n return {\n cellRecordFieldNames: ['value'],\n cellViewTag: tableColumnDateTextCellViewTag,\n groupHeaderViewTag: tableColumnDateTextGroupHeaderViewTag,\n delegatedEvents: [],\n sortOperation: TableColumnSortOperation.basic,\n validator: new TableColumnDateTextValidator()\n };\n }\n\n protected formatChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customLocaleMatcherChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customWeekdayChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customEraChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customYearChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customMonthChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customDayChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customHourChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customMinuteChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customSecondChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customTimeZoneNameChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customFormatMatcherChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customHour12Changed(): void {\n this.updateColumnConfig();\n }\n\n protected customTimeZoneChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customCalendarChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customDayPeriodChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customNumberingSystemChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customDateStyleChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customTimeStyleChanged(): void {\n this.updateColumnConfig();\n }\n\n protected customHourCycleChanged(): void {\n this.updateColumnConfig();\n }\n\n private updateColumnConfig(): void {\n const formatter = this.createFormatter();\n\n if (formatter) {\n const columnConfig: TableColumnDateTextColumnConfig = {\n formatter,\n placeholder: this.placeholder\n };\n this.columnInternals.columnConfig = columnConfig;\n this.columnInternals.validator.setCustomOptionsValidity(true);\n } else {\n this.columnInternals.columnConfig = undefined;\n this.columnInternals.validator.setCustomOptionsValidity(false);\n }\n }\n\n private createFormatter(): Intl.DateTimeFormat | undefined {\n let options: Intl.DateTimeFormatOptions;\n if (this.format === DateTextFormat.default) {\n options = {\n dateStyle: 'medium',\n timeStyle: 'medium'\n };\n } else {\n options = this.getCustomFormattingOptions();\n }\n try {\n return new Intl.DateTimeFormat(lang.getValueFor(this), options);\n } catch (e) {\n return undefined;\n }\n }\n\n private getCustomFormattingOptions(): Intl.DateTimeFormatOptions {\n // There's a FAST bug (https://github.com/microsoft/fast/issues/6630) where removing\n // attributes sets their values to null instead of undefined. To work around this,\n // translate null values to undefined.\n const options: Intl.DateTimeFormatOptions = {\n localeMatcher: this.customLocaleMatcher ?? undefined,\n weekday: this.customWeekday ?? undefined,\n era: this.customEra ?? undefined,\n year: this.customYear ?? undefined,\n month: this.customMonth ?? undefined,\n day: this.customDay ?? undefined,\n hour: this.customHour ?? undefined,\n minute: this.customMinute ?? undefined,\n second: this.customSecond ?? undefined,\n timeZoneName: this.customTimeZoneName ?? undefined,\n formatMatcher: this.customFormatMatcher ?? undefined,\n hour12: this.customHour12 ?? undefined,\n timeZone: this.customTimeZone ?? undefined,\n calendar: this.customCalendar ?? undefined,\n dayPeriod: this.customDayPeriod ?? undefined,\n numberingSystem: this.customNumberingSystem ?? undefined,\n dateStyle: this.customDateStyle ?? undefined,\n timeStyle: this.customTimeStyle ?? undefined,\n hourCycle: this.customHourCycle ?? undefined\n };\n return options;\n }\n}\n\nconst nimbleTableColumnDateText = TableColumnDateText.compose({\n baseName: 'table-column-date-text',\n template,\n styles\n});\n\nDesignSystem.getOrCreate()\n .withPrefix('nimble')\n .register(nimbleTableColumnDateText());\nexport const tableColumnDateTextTag = 'nimble-table-column-date-text';\n"]}