@ni/nimble-components 34.3.1 → 34.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js +665 -579
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +6368 -6371
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/anchor/template.js +0 -1
- package/dist/esm/anchor/template.js.map +1 -1
- package/dist/esm/banner/template.js +0 -1
- package/dist/esm/banner/template.js.map +1 -1
- package/dist/esm/breadcrumb/breadcrumb.foundation.spec.js +8 -1
- package/dist/esm/breadcrumb/breadcrumb.foundation.spec.js.map +1 -1
- package/dist/esm/breadcrumb/template.js +0 -1
- package/dist/esm/breadcrumb/template.js.map +1 -1
- package/dist/esm/combobox/template.js +0 -2
- package/dist/esm/combobox/template.js.map +1 -1
- package/dist/esm/list-option/template.js +0 -1
- package/dist/esm/list-option/template.js.map +1 -1
- package/dist/esm/list-option-group/template.js +0 -1
- package/dist/esm/list-option-group/template.js.map +1 -1
- package/dist/esm/menu/template.js +0 -3
- package/dist/esm/menu/template.js.map +1 -1
- package/dist/esm/menu-button/template.js +0 -1
- package/dist/esm/menu-button/template.js.map +1 -1
- package/dist/esm/patterns/required-visible/template.js +0 -1
- package/dist/esm/patterns/required-visible/template.js.map +1 -1
- package/dist/esm/patterns/tabs/template.js +0 -1
- package/dist/esm/patterns/tabs/template.js.map +1 -1
- package/dist/esm/radio-group/template.js +0 -1
- package/dist/esm/radio-group/template.js.map +1 -1
- package/dist/esm/rich-text/editor/template.js +0 -1
- package/dist/esm/rich-text/editor/template.js.map +1 -1
- package/dist/esm/rich-text/mention-listbox/template.js +0 -2
- package/dist/esm/rich-text/mention-listbox/template.js.map +1 -1
- package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
- package/dist/esm/select/index.js.map +1 -1
- package/dist/esm/select/template.js +0 -3
- package/dist/esm/select/template.js.map +1 -1
- package/dist/esm/spinner/template.js +0 -3
- package/dist/esm/spinner/template.js.map +1 -1
- package/dist/esm/switch/template.js +0 -1
- package/dist/esm/switch/template.js.map +1 -1
- package/dist/esm/table/components/cell/template.js +0 -1
- package/dist/esm/table/components/cell/template.js.map +1 -1
- package/dist/esm/table/components/group-row/template.js +0 -3
- package/dist/esm/table/components/group-row/template.js.map +1 -1
- package/dist/esm/table/components/header/template.js +0 -1
- package/dist/esm/table/components/header/template.js.map +1 -1
- package/dist/esm/table/components/row/template.js +0 -1
- package/dist/esm/table/components/row/template.js.map +1 -1
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/expansion-manager.js.map +1 -1
- package/dist/esm/table/models/keyboard-navigation-manager.js +1 -2
- package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -1
- package/dist/esm/table/models/virtualizer.js.map +1 -1
- package/dist/esm/table/template.js +0 -1
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/testing/table.pageobject.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/template.js +0 -3
- package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/anchor/index.js.map +1 -1
- package/dist/esm/table-column/base/cell-view/template.js +0 -1
- package/dist/esm/table-column/base/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/base/index.js.map +1 -1
- package/dist/esm/table-column/base/template.js +0 -1
- package/dist/esm/table-column/base/template.js.map +1 -1
- package/dist/esm/table-column/date-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/date-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/date-text/index.js.map +1 -1
- package/dist/esm/table-column/duration-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/cell-view/template.js +0 -1
- package/dist/esm/table-column/mapping/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/mapping/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/group-header-view/template.js +0 -1
- package/dist/esm/table-column/mapping/group-header-view/template.js.map +1 -1
- package/dist/esm/table-column/mapping/index.js.map +1 -1
- package/dist/esm/table-column/menu-button/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/number-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/number-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/number-text/index.js.map +1 -1
- package/dist/esm/table-column/number-text/models/number-text-unit-format.js.map +1 -1
- package/dist/esm/table-column/number-text/template.js +0 -1
- package/dist/esm/table-column/number-text/template.js.map +1 -1
- package/dist/esm/table-column/text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/text/index.js.map +1 -1
- package/dist/esm/table-column/text-base/cell-view/template.js +0 -1
- package/dist/esm/table-column/text-base/cell-view/template.js.map +1 -1
- package/dist/esm/tabs-toolbar/template.js +0 -2
- package/dist/esm/tabs-toolbar/template.js.map +1 -1
- package/dist/esm/theme-provider/design-token-values.d.ts +257 -0
- package/dist/esm/theme-provider/design-token-values.js +164 -0
- package/dist/esm/theme-provider/design-token-values.js.map +1 -0
- package/dist/esm/theme-provider/design-tokens.js +153 -201
- package/dist/esm/theme-provider/design-tokens.js.map +1 -1
- package/dist/esm/toggle-button/template.js +0 -3
- package/dist/esm/toggle-button/template.js.map +1 -1
- package/dist/esm/tooltip/template.js +0 -1
- package/dist/esm/tooltip/template.js.map +1 -1
- package/dist/esm/tree-view/template.js +0 -1
- package/dist/esm/tree-view/template.js.map +1 -1
- package/dist/esm/utilities/style/theme.js.map +1 -1
- package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
- package/dist/esm/wafer-map/index.js.map +1 -1
- package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/package.json +5 -4
|
@@ -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(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<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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualizer.js","sourceRoot":"","sources":["../../../../src/table/models/virtualizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { observable } from '@ni/fast-element';\nimport type { Table as TanStackTable } from '@tanstack/table-core';\nimport {\n Virtualizer as TanStackVirtualizer,\n type VirtualizerOptions,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n type VirtualItem,\n type ScrollToOptions\n} from '@tanstack/virtual-core';\nimport type { Table } from '..';\nimport type { TableNode, TableRecord } from '../types';\n\n/**\n * Helper class for the nimble-table for row virtualization.\n *\n * @internal\n */\nexport class Virtualizer<TData extends TableRecord = TableRecord> {\n @observable\n public visibleItems: VirtualItem[] = [];\n\n @observable\n public scrollHeight = 0;\n\n @observable\n public horizontalScrollbarHeight = 0;\n\n @observable\n public isScrolling = false;\n\n @observable\n public headerContainerMarginRight = 0;\n\n @observable\n public rowContainerYOffset = 0;\n\n public get pageSize(): number {\n return this._pageSize;\n }\n\n private readonly table: Table<TData>;\n private readonly tanStackTable: TanStackTable<TableNode<TData>>;\n private readonly viewportResizeObserver: ResizeObserver;\n private virtualizer?: TanStackVirtualizer<HTMLElement, HTMLElement>;\n private _pageSize = 0;\n\n public constructor(\n table: Table<TData>,\n tanStackTable: TanStackTable<TableNode<TData>>\n ) {\n this.table = table;\n this.tanStackTable = tanStackTable;\n this.viewportResizeObserver = new ResizeObserver(entries => {\n const borderBoxSize = entries[0]?.borderBoxSize[0];\n if (borderBoxSize) {\n this.updatePageSize();\n // If we have enough rows that a vertical scrollbar is shown, we need to offset the header widths\n // by the same margin so the column headers align with the corresponding rendered cells\n const viewportBoundingWidth = borderBoxSize.inlineSize;\n this.headerContainerMarginRight = viewportBoundingWidth - this.table.viewport.clientWidth;\n this.horizontalScrollbarHeight = borderBoxSize.blockSize - this.table.viewport.clientHeight;\n }\n });\n }\n\n public connect(): void {\n this.viewportResizeObserver.observe(this.table.viewport);\n this.updateVirtualizer();\n const scrollOffset = this.virtualizer!.scrollOffset;\n if (scrollOffset !== null) {\n this.table.viewport.scrollTo({ top: scrollOffset });\n }\n }\n\n public disconnect(): void {\n this.viewportResizeObserver.disconnect();\n }\n\n public dataChanged(): void {\n if (this.table.$fastController.isConnected) {\n this.updateVirtualizer();\n }\n }\n\n public scrollToIndex(index: number, options?: ScrollToOptions): void {\n this.virtualizer?.scrollToIndex(index, options);\n }\n\n public updateRowHeight(): void {\n this.updatePageSize();\n if (this.virtualizer) {\n this.updateVirtualizer();\n this.virtualizer.measure();\n }\n }\n\n private updateVirtualizer(): void {\n const options = this.createVirtualizerOptions();\n if (this.virtualizer) {\n this.virtualizer.setOptions(options);\n } else {\n this.virtualizer = new TanStackVirtualizer(options);\n }\n this.virtualizer._willUpdate();\n this.handleVirtualizerChange();\n }\n\n private createVirtualizerOptions(): VirtualizerOptions<\n
|
|
1
|
+
{"version":3,"file":"virtualizer.js","sourceRoot":"","sources":["../../../../src/table/models/virtualizer.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACH,WAAW,IAAI,mBAAmB,EAElC,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAGrB,MAAM,wBAAwB,CAAC;AAIhC;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAmBpB,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAQD,YACI,KAAmB,EACnB,aAA8C;QA7B3C,iBAAY,GAAkB,EAAE,CAAC;QAGjC,iBAAY,GAAG,CAAC,CAAC;QAGjB,8BAAyB,GAAG,CAAC,CAAC;QAG9B,gBAAW,GAAG,KAAK,CAAC;QAGpB,+BAA0B,GAAG,CAAC,CAAC;QAG/B,wBAAmB,GAAG,CAAC,CAAC;QAUvB,cAAS,GAAG,CAAC,CAAC;QAMlB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,sBAAsB,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;YACvD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,iGAAiG;gBACjG,uFAAuF;gBACvF,MAAM,qBAAqB,GAAG,aAAa,CAAC,UAAU,CAAC;gBACvD,IAAI,CAAC,0BAA0B,GAAG,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1F,IAAI,CAAC,yBAAyB,GAAG,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChG,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAY,CAAC,YAAY,CAAC;QACpD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAEM,UAAU;QACb,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;IAEM,WAAW;QACd,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,KAAa,EAAE,OAAyB;QACzD,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACnC,CAAC;IAEO,wBAAwB;QAI5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM;YACnD,gBAAgB,EAAE,GAAG,EAAE;gBACnB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC/B,CAAC;YACD,YAAY,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS;YACtC,kBAAkB,EAAE,IAAI;YACxB,QAAQ,EAAE,CAAC;YACX,qBAAqB,EAAE,GAAG;YAC1B,iBAAiB,EAAE,KAAK;YACxB,UAAU,EAAE,aAAa;YACzB,oBAAoB;YACpB,kBAAkB;YAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE;SACD,CAAC;IACtD,CAAC;IAEO,uBAAuB;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QAC3C,4FAA4F;QAC5F,0FAA0F;QAC1F,yFAAyF;QACzF,0EAA0E;QAC1E,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC;YACxC,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACnD,CAAC;IAEO,cAAc;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAC1D,CAAC;IACN,CAAC;CACJ;AArIU;IADN,UAAU;iDAC6B;AAGjC;IADN,UAAU;iDACa;AAGjB;IADN,UAAU;8DAC0B;AAG9B;IADN,UAAU;gDACgB;AAGpB;IADN,UAAU;+DAC2B;AAG/B;IADN,UAAU;wDACoB","sourcesContent":["import { observable } from '@ni/fast-element';\nimport type { Table as TanStackTable } from '@tanstack/table-core';\nimport {\n Virtualizer as TanStackVirtualizer,\n type VirtualizerOptions,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n type VirtualItem,\n type ScrollToOptions\n} from '@tanstack/virtual-core';\nimport type { Table } from '..';\nimport type { TableNode, TableRecord } from '../types';\n\n/**\n * Helper class for the nimble-table for row virtualization.\n *\n * @internal\n */\nexport class Virtualizer<TData extends TableRecord = TableRecord> {\n @observable\n public visibleItems: VirtualItem[] = [];\n\n @observable\n public scrollHeight = 0;\n\n @observable\n public horizontalScrollbarHeight = 0;\n\n @observable\n public isScrolling = false;\n\n @observable\n public headerContainerMarginRight = 0;\n\n @observable\n public rowContainerYOffset = 0;\n\n public get pageSize(): number {\n return this._pageSize;\n }\n\n private readonly table: Table<TData>;\n private readonly tanStackTable: TanStackTable<TableNode<TData>>;\n private readonly viewportResizeObserver: ResizeObserver;\n private virtualizer?: TanStackVirtualizer<HTMLElement, HTMLElement>;\n private _pageSize = 0;\n\n public constructor(\n table: Table<TData>,\n tanStackTable: TanStackTable<TableNode<TData>>\n ) {\n this.table = table;\n this.tanStackTable = tanStackTable;\n this.viewportResizeObserver = new ResizeObserver(entries => {\n const borderBoxSize = entries[0]?.borderBoxSize[0];\n if (borderBoxSize) {\n this.updatePageSize();\n // If we have enough rows that a vertical scrollbar is shown, we need to offset the header widths\n // by the same margin so the column headers align with the corresponding rendered cells\n const viewportBoundingWidth = borderBoxSize.inlineSize;\n this.headerContainerMarginRight = viewportBoundingWidth - this.table.viewport.clientWidth;\n this.horizontalScrollbarHeight = borderBoxSize.blockSize - this.table.viewport.clientHeight;\n }\n });\n }\n\n public connect(): void {\n this.viewportResizeObserver.observe(this.table.viewport);\n this.updateVirtualizer();\n const scrollOffset = this.virtualizer!.scrollOffset;\n if (scrollOffset !== null) {\n this.table.viewport.scrollTo({ top: scrollOffset });\n }\n }\n\n public disconnect(): void {\n this.viewportResizeObserver.disconnect();\n }\n\n public dataChanged(): void {\n if (this.table.$fastController.isConnected) {\n this.updateVirtualizer();\n }\n }\n\n public scrollToIndex(index: number, options?: ScrollToOptions): void {\n this.virtualizer?.scrollToIndex(index, options);\n }\n\n public updateRowHeight(): void {\n this.updatePageSize();\n if (this.virtualizer) {\n this.updateVirtualizer();\n this.virtualizer.measure();\n }\n }\n\n private updateVirtualizer(): void {\n const options = this.createVirtualizerOptions();\n if (this.virtualizer) {\n this.virtualizer.setOptions(options);\n } else {\n this.virtualizer = new TanStackVirtualizer(options);\n }\n this.virtualizer._willUpdate();\n this.handleVirtualizerChange();\n }\n\n private createVirtualizerOptions(): VirtualizerOptions<\n HTMLElement,\n HTMLElement\n > {\n const rowHeight = this.table.rowHeight;\n return {\n count: this.tanStackTable.getRowModel().rows.length,\n getScrollElement: () => {\n return this.table.viewport;\n },\n estimateSize: (_: number) => rowHeight,\n enableSmoothScroll: true,\n overscan: 3,\n isScrollingResetDelay: 250,\n useScrollendEvent: false,\n scrollToFn: elementScroll,\n observeElementOffset,\n observeElementRect,\n onChange: () => this.handleVirtualizerChange()\n } as VirtualizerOptions<HTMLElement, HTMLElement>;\n }\n\n private handleVirtualizerChange(): void {\n const virtualizer = this.virtualizer!;\n this.visibleItems = virtualizer.getVirtualItems();\n this.scrollHeight = virtualizer.getTotalSize();\n this.isScrolling = virtualizer.isScrolling;\n // We're using a separate div ('table-scroll') to represent the full height of all rows, and\n // the row container's height is only big enough to hold the virtualized rows. So we don't\n // use the TanStackVirtual-provided 'start' offset (which is in terms of the full height)\n // to translate every individual row, we just translate the row container.\n let rowContainerYOffset = 0;\n if (this.visibleItems.length > 0) {\n const firstItem = this.visibleItems[0]!;\n rowContainerYOffset = firstItem.start;\n }\n\n this.rowContainerYOffset = rowContainerYOffset;\n }\n\n private updatePageSize(): void {\n this._pageSize = Math.round(\n this.table.viewport.clientHeight / this.table.rowHeight\n );\n }\n}\n"]}
|
|
@@ -8,7 +8,6 @@ import { ButtonAppearance } from '../button/types';
|
|
|
8
8
|
import { iconTriangleTwoLinesHorizontalTag } from '../icons/triangle-two-lines-horizontal';
|
|
9
9
|
import { checkboxTag } from '../checkbox';
|
|
10
10
|
import { tableCollapseAllLabel, tableRowOperationColumnLabel, tableSelectAllLabel } from '../label-provider/table/label-tokens';
|
|
11
|
-
// prettier-ignore
|
|
12
11
|
export const template = html `
|
|
13
12
|
<template
|
|
14
13
|
role="treegrid"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ExecutionContext,\n children,\n elements,\n html,\n ref,\n repeat,\n when\n} from '@ni/fast-element';\nimport type { VirtualItem } from '@tanstack/virtual-core';\nimport type { Table } from '.';\nimport { tableHeaderTag } from './components/header';\nimport { tableRowTag } from './components/row';\nimport type { TableColumn } from '../table-column/base';\nimport {\n type RowSlotRequestEventDetail,\n type SlotMetadata,\n type TableActionMenuToggleEventDetail,\n TableColumnSortDirection,\n TableRowSelectionMode,\n TableRowSelectionState,\n type TableRowSelectionToggleEventDetail\n} from './types';\nimport { tableGroupRowTag } from './components/group-row';\nimport { buttonTag } from '../button';\nimport { ButtonAppearance } from '../button/types';\nimport { iconTriangleTwoLinesHorizontalTag } from '../icons/triangle-two-lines-horizontal';\nimport { checkboxTag } from '../checkbox';\nimport {\n tableCollapseAllLabel,\n tableRowOperationColumnLabel,\n tableSelectAllLabel\n} from '../label-provider/table/label-tokens';\n\n// prettier-ignore\nexport const template = html<Table>`\n <template\n role=\"treegrid\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"0\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n ${children({ property: 'childItems', filter: elements() })}\n >\n <style>:host{ --ni-private-table-scroll-height: ${x => x.virtualizer.scrollHeight}px; --ni-private-table-horizontal-scrollbar-height: ${x => x.virtualizer.horizontalScrollbarHeight}px; }</style>\n <div class=\"table-container ${x => (x.windowShiftKeyDown ? 'disable-select' : '')}\"\n style=\"\n --ni-private-table-scroll-x: -${x => x.scrollX}px;\n --ni-private-table-header-container-margin-right: ${x => x.virtualizer.headerContainerMarginRight}px;\n --ni-private-table-row-container-top: ${x => x.virtualizer.rowContainerYOffset}px;\n --ni-private-table-row-grid-columns: ${x => (x.rowGridColumns ? x.rowGridColumns : '')};\n --ni-private-table-cursor-override: ${x => (x.layoutManager.isColumnBeingSized ? 'col-resize' : 'default')};\n --ni-private-table-scrollable-min-width: ${x => x.tableScrollableMinWidth}px;\n \">\n <div role=\"rowgroup\" class=\"header-row-container\">\n <div class=\"header-row\" role=\"row\">\n <span role=\"${x => (x.showRowOperationColumn ? 'columnheader' : '')}\" class=\"header-row-action-container\" ${ref('headerRowActionContainer')}>\n ${when(x => x.showRowOperationColumn, html<Table>`\n <span class=\"accessibly-hidden\">\n ${x => tableRowOperationColumnLabel.getValueFor(x)}\n </span>\n `)}\n ${when(x => x.selectionMode === TableRowSelectionMode.multiple, html<Table>`\n <span class=\"checkbox-container\">\n <${checkboxTag}\n ${ref('selectionCheckbox')}\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n class=\"selection-checkbox\"\n @change=\"${(x, c) => x.onAllRowsSelectionChange(c.event as CustomEvent)}\"\n title=\"${x => tableSelectAllLabel.getValueFor(x)}\"\n aria-label=\"${x => tableSelectAllLabel.getValueFor(x)}\"\n >\n </${checkboxTag}>\n </span>\n `)}\n <span class=\"collapse-all-button-container\">\n <${buttonTag}\n ${ref('collapseAllButton')}\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n class=\"collapse-all-button ${x => x.collapseButtonVisibility}\"\n content-hidden\n appearance=\"${ButtonAppearance.ghost}\"\n title=\"${x => tableCollapseAllLabel.getValueFor(x)}\"\n @click=\"${x => x.handleCollapseAllRows()}\"\n >\n <${iconTriangleTwoLinesHorizontalTag} slot=\"start\"></${iconTriangleTwoLinesHorizontalTag}>\n ${x => tableCollapseAllLabel.getValueFor(x)}\n </${buttonTag}>\n </span>\n </span>\n <span class=\"column-headers-container\" ${ref('columnHeadersContainer')}>\n ${repeat(x => x.visibleColumns, html<TableColumn, Table>`\n <div class=\"header-container\">\n ${when((_, c) => c.index > 0, html<TableColumn, Table>`\n <div\n class=\"\n column-divider\n left\n ${(_, c) => `${c.parent.layoutManager.activeColumnIndex === c.index ? 'column-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.activeColumnDivider === c.parent.getLeftDividerIndex(c.index) ? 'divider-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.hasResizableColumnToLeft(c.index - 1) ? 'draggable' : ''}`}\n \"\n @pointerdown=\"${(_, c) => c.parent.onLeftDividerPointerDown(c.event as PointerEvent, c.index)}\">\n </div>\n `)}\n <${tableHeaderTag}\n class=\"header\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager (if column sorting not disabled) */}\n sort-direction=\"${x => (typeof x.columnInternals.currentSortIndex === 'number' ? x.columnInternals.currentSortDirection : TableColumnSortDirection.none)}\"\n ?first-sorted-column=\"${(x, c) => x === c.parent.firstSortedColumn}\"\n ?indicators-hidden=\"${x => x.columnInternals.hideHeaderIndicators}\"\n @keydown=\"${(x, c) => c.parent.onHeaderKeyDown(x, c.event as KeyboardEvent)}\"\n @click=\"${(x, c) => c.parent.toggleColumnSort(x, (c.event as MouseEvent).shiftKey)}\"\n :alignment=\"${x => x.columnInternals.headerAlignment}\"\n :isGrouped=${x => (typeof x.columnInternals.groupIndex === 'number' && !x.columnInternals.groupingDisabled)}\n >\n <slot name=\"${x => x.slot}\"></slot>\n </${tableHeaderTag}>\n ${when((_, c) => c.index < c.length - 1, html<TableColumn, Table>`\n <div\n class=\"\n column-divider\n right\n ${(_, c) => `${c.parent.layoutManager.activeColumnIndex === c.index ? 'column-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.activeColumnDivider === c.parent.getRightDividerIndex(c.index) ? 'divider-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.hasResizableColumnToLeft(c.index) ? 'draggable' : ''}`}\n \"\n @pointerdown=\"${(_, c) => c.parent.onRightDividerPointerDown(c.event as PointerEvent, c.index)}\">\n </div>\n `)} \n </div>\n `, { positioning: true })}\n <div class=\"header-scrollbar-spacer\"></div>\n </span>\n </div>\n </div>\n <div class=\"table-viewport\" tabindex=\"-1\" ${ref('viewport')}>\n <div class=\"table-scroll\"></div>\n <div class=\"table-row-container ${x => `${x.showCollapseAll ? 'collapse-all-visible' : ''}`}\" ${children({ property: 'rowElements', filter: elements(`${tableRowTag}, ${tableGroupRowTag}`) })}\n role=\"rowgroup\">\n ${when(x => x.columns.length > 0 && x.canRenderRows, html<Table>`\n ${repeat(x => x.virtualizer.visibleItems, html<VirtualItem, Table>`\n ${when((x, c: ExecutionContext<Table>) => c.parent.tableData[x.index]?.isGroupRow, html<VirtualItem, Table>`\n <${tableGroupRowTag}\n class=\"group-row\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n :groupRowValue=\"${(x, c) => c.parent.tableData[x.index]?.groupRowValue}\"\n ?expanded=\"${(x, c) => c.parent.tableData[x.index]?.isExpanded}\"\n :nestingLevel=\"${(x, c) => c.parent.tableData[x.index]?.nestingLevel}\"\n :immediateChildCount=\"${(x, c) => c.parent.tableData[x.index]?.immediateChildCount}\"\n :groupColumn=\"${(x, c) => c.parent.tableData[x.index]?.groupColumn}\"\n ?selectable=\"${(_, c) => c.parent.selectionMode === TableRowSelectionMode.multiple}\"\n selection-state=\"${(x, c) => c.parent.tableData[x.index]?.selectionState}\"\n :resolvedRowIndex=\"${x => x.index}\"\n ?allow-hover=\"${(_, c) => !c.parent.virtualizer.isScrolling}\"\n @focusin=\"${(_, c) => c.parent.onRowFocusIn(c.event as FocusEvent)}\"\n @blur=\"${(_, c) => c.parent.onRowBlur(c.event as FocusEvent)}\"\n @group-selection-toggle=\"${(x, c) => c.parent.onRowSelectionToggle(x.index, c.event as CustomEvent<TableRowSelectionToggleEventDetail>)}\"\n @group-expand-toggle=\"${(x, c) => c.parent.handleGroupRowExpanded(x.index, c.event)}\"\n >\n </${tableGroupRowTag}>\n `)}\n ${when((x, c: ExecutionContext<Table>) => !c.parent.tableData[x.index]?.isGroupRow, html<VirtualItem, Table>`\n <${tableRowTag}\n class=\"row\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n record-id=\"${(x, c) => c.parent.tableData[x.index]?.id}\"\n ?selectable=\"${(_, c) => c.parent.selectionMode !== TableRowSelectionMode.none}\"\n ?selected=\"${(x, c) => c.parent.tableData[x.index]?.selectionState === TableRowSelectionState.selected}\"\n ?expanded=\"${(x, c) => c.parent.tableData[x.index]?.isExpanded}\"\n ?hide-selection=\"${(_, c) => c.parent.selectionMode !== TableRowSelectionMode.multiple}\"\n ?reserve-collapse-space=\"${(_, c) => c.parent.canHaveCollapsibleRows}\"\n :dataRecord=\"${(x, c) => c.parent.tableData[x.index]?.record}\"\n :columns=\"${(_, c) => c.parent.columns}\"\n :isParentRow=\"${(x, c) => c.parent.tableData[x.index]?.isParentRow}\"\n :nestingLevel=\"${(x, c) => c.parent.tableData[x.index]?.nestingLevel}\"\n ?row-operation-grid-cell-hidden=\"${(_, c) => !c.parent.showRowOperationColumn}\"\n ?loading=\"${(x, c) => c.parent.tableData[x.index]?.isLoadingChildren}\"\n :resolvedRowIndex=\"${x => x.index}\"\n ?allow-hover=\"${(_, c) => !c.parent.virtualizer.isScrolling}\"\n @click=\"${(x, c) => c.parent.onRowClick(x.index, c.event as MouseEvent)}\"\n @focusin=\"${(_, c) => c.parent.onRowFocusIn(c.event as FocusEvent)}\"\n @blur=\"${(_, c) => c.parent.onRowBlur(c.event as FocusEvent)}\"\n @row-selection-toggle=\"${(x, c) => c.parent.onRowSelectionToggle(x.index, c.event as CustomEvent<TableRowSelectionToggleEventDetail>)}\"\n @row-action-menu-beforetoggle=\"${(x, c) => c.parent.onRowActionMenuBeforeToggle(x.index, c.event as CustomEvent<TableActionMenuToggleEventDetail>)}\"\n @row-action-menu-toggle=\"${(_, c) => c.parent.onRowActionMenuToggle(c.event as CustomEvent<TableActionMenuToggleEventDetail>)}\"\n @row-slots-request=\"${(_, c) => c.parent.onRowSlotsRequest(c.event as CustomEvent<RowSlotRequestEventDetail>)}\"\n @row-expand-toggle=\"${(x, c) => c.parent.handleRowExpanded(x.index)}\"\n >\n ${repeat((x, c: ExecutionContext<Table>) => (c.parent.tableData[x.index]?.requestedSlots || []), html<SlotMetadata>`\n <slot\n name=\"${x => x.name}\"\n slot=\"${x => x.slot}\"\n ></slot>\n `)}\n </${tableRowTag}>\n `)}\n `)}\n `)}\n </div>\n </div>\n </div>\n </template>\n`;\n"]}
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ExecutionContext,\n children,\n elements,\n html,\n ref,\n repeat,\n when\n} from '@ni/fast-element';\nimport type { VirtualItem } from '@tanstack/virtual-core';\nimport type { Table } from '.';\nimport { tableHeaderTag } from './components/header';\nimport { tableRowTag } from './components/row';\nimport type { TableColumn } from '../table-column/base';\nimport {\n type RowSlotRequestEventDetail,\n type SlotMetadata,\n type TableActionMenuToggleEventDetail,\n TableColumnSortDirection,\n TableRowSelectionMode,\n TableRowSelectionState,\n type TableRowSelectionToggleEventDetail\n} from './types';\nimport { tableGroupRowTag } from './components/group-row';\nimport { buttonTag } from '../button';\nimport { ButtonAppearance } from '../button/types';\nimport { iconTriangleTwoLinesHorizontalTag } from '../icons/triangle-two-lines-horizontal';\nimport { checkboxTag } from '../checkbox';\nimport {\n tableCollapseAllLabel,\n tableRowOperationColumnLabel,\n tableSelectAllLabel\n} from '../label-provider/table/label-tokens';\n\nexport const template = html<Table>`\n <template\n role=\"treegrid\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"0\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n ${children({ property: 'childItems', filter: elements() })}\n >\n <style>:host{ --ni-private-table-scroll-height: ${x => x.virtualizer.scrollHeight}px; --ni-private-table-horizontal-scrollbar-height: ${x => x.virtualizer.horizontalScrollbarHeight}px; }</style>\n <div class=\"table-container ${x => (x.windowShiftKeyDown ? 'disable-select' : '')}\"\n style=\"\n --ni-private-table-scroll-x: -${x => x.scrollX}px;\n --ni-private-table-header-container-margin-right: ${x => x.virtualizer.headerContainerMarginRight}px;\n --ni-private-table-row-container-top: ${x => x.virtualizer.rowContainerYOffset}px;\n --ni-private-table-row-grid-columns: ${x => (x.rowGridColumns ? x.rowGridColumns : '')};\n --ni-private-table-cursor-override: ${x => (x.layoutManager.isColumnBeingSized ? 'col-resize' : 'default')};\n --ni-private-table-scrollable-min-width: ${x => x.tableScrollableMinWidth}px;\n \">\n <div role=\"rowgroup\" class=\"header-row-container\">\n <div class=\"header-row\" role=\"row\">\n <span role=\"${x => (x.showRowOperationColumn ? 'columnheader' : '')}\" class=\"header-row-action-container\" ${ref('headerRowActionContainer')}>\n ${when(x => x.showRowOperationColumn, html<Table>`\n <span class=\"accessibly-hidden\">\n ${x => tableRowOperationColumnLabel.getValueFor(x)}\n </span>\n `)}\n ${when(x => x.selectionMode === TableRowSelectionMode.multiple, html<Table>`\n <span class=\"checkbox-container\">\n <${checkboxTag}\n ${ref('selectionCheckbox')}\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n class=\"selection-checkbox\"\n @change=\"${(x, c) => x.onAllRowsSelectionChange(c.event as CustomEvent)}\"\n title=\"${x => tableSelectAllLabel.getValueFor(x)}\"\n aria-label=\"${x => tableSelectAllLabel.getValueFor(x)}\"\n >\n </${checkboxTag}>\n </span>\n `)}\n <span class=\"collapse-all-button-container\">\n <${buttonTag}\n ${ref('collapseAllButton')}\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n class=\"collapse-all-button ${x => x.collapseButtonVisibility}\"\n content-hidden\n appearance=\"${ButtonAppearance.ghost}\"\n title=\"${x => tableCollapseAllLabel.getValueFor(x)}\"\n @click=\"${x => x.handleCollapseAllRows()}\"\n >\n <${iconTriangleTwoLinesHorizontalTag} slot=\"start\"></${iconTriangleTwoLinesHorizontalTag}>\n ${x => tableCollapseAllLabel.getValueFor(x)}\n </${buttonTag}>\n </span>\n </span>\n <span class=\"column-headers-container\" ${ref('columnHeadersContainer')}>\n ${repeat(x => x.visibleColumns, html<TableColumn, Table>`\n <div class=\"header-container\">\n ${when((_, c) => c.index > 0, html<TableColumn, Table>`\n <div\n class=\"\n column-divider\n left\n ${(_, c) => `${c.parent.layoutManager.activeColumnIndex === c.index ? 'column-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.activeColumnDivider === c.parent.getLeftDividerIndex(c.index) ? 'divider-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.hasResizableColumnToLeft(c.index - 1) ? 'draggable' : ''}`}\n \"\n @pointerdown=\"${(_, c) => c.parent.onLeftDividerPointerDown(c.event as PointerEvent, c.index)}\">\n </div>\n `)}\n <${tableHeaderTag}\n class=\"header\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager (if column sorting not disabled) */}\n sort-direction=\"${x => (typeof x.columnInternals.currentSortIndex === 'number' ? x.columnInternals.currentSortDirection : TableColumnSortDirection.none)}\"\n ?first-sorted-column=\"${(x, c) => x === c.parent.firstSortedColumn}\"\n ?indicators-hidden=\"${x => x.columnInternals.hideHeaderIndicators}\"\n @keydown=\"${(x, c) => c.parent.onHeaderKeyDown(x, c.event as KeyboardEvent)}\"\n @click=\"${(x, c) => c.parent.toggleColumnSort(x, (c.event as MouseEvent).shiftKey)}\"\n :alignment=\"${x => x.columnInternals.headerAlignment}\"\n :isGrouped=${x => (typeof x.columnInternals.groupIndex === 'number' && !x.columnInternals.groupingDisabled)}\n >\n <slot name=\"${x => x.slot}\"></slot>\n </${tableHeaderTag}>\n ${when((_, c) => c.index < c.length - 1, html<TableColumn, Table>`\n <div\n class=\"\n column-divider\n right\n ${(_, c) => `${c.parent.layoutManager.activeColumnIndex === c.index ? 'column-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.activeColumnDivider === c.parent.getRightDividerIndex(c.index) ? 'divider-active' : ''}`}\n ${(_, c) => `${c.parent.layoutManager.hasResizableColumnToLeft(c.index) ? 'draggable' : ''}`}\n \"\n @pointerdown=\"${(_, c) => c.parent.onRightDividerPointerDown(c.event as PointerEvent, c.index)}\">\n </div>\n `)} \n </div>\n `, { positioning: true })}\n <div class=\"header-scrollbar-spacer\"></div>\n </span>\n </div>\n </div>\n <div class=\"table-viewport\" tabindex=\"-1\" ${ref('viewport')}>\n <div class=\"table-scroll\"></div>\n <div class=\"table-row-container ${x => `${x.showCollapseAll ? 'collapse-all-visible' : ''}`}\" ${children({ property: 'rowElements', filter: elements(`${tableRowTag}, ${tableGroupRowTag}`) })}\n role=\"rowgroup\">\n ${when(x => x.columns.length > 0 && x.canRenderRows, html<Table>`\n ${repeat(x => x.virtualizer.visibleItems, html<VirtualItem, Table>`\n ${when((x, c: ExecutionContext<Table>) => c.parent.tableData[x.index]?.isGroupRow, html<VirtualItem, Table>`\n <${tableGroupRowTag}\n class=\"group-row\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n :groupRowValue=\"${(x, c) => c.parent.tableData[x.index]?.groupRowValue}\"\n ?expanded=\"${(x, c) => c.parent.tableData[x.index]?.isExpanded}\"\n :nestingLevel=\"${(x, c) => c.parent.tableData[x.index]?.nestingLevel}\"\n :immediateChildCount=\"${(x, c) => c.parent.tableData[x.index]?.immediateChildCount}\"\n :groupColumn=\"${(x, c) => c.parent.tableData[x.index]?.groupColumn}\"\n ?selectable=\"${(_, c) => c.parent.selectionMode === TableRowSelectionMode.multiple}\"\n selection-state=\"${(x, c) => c.parent.tableData[x.index]?.selectionState}\"\n :resolvedRowIndex=\"${x => x.index}\"\n ?allow-hover=\"${(_, c) => !c.parent.virtualizer.isScrolling}\"\n @focusin=\"${(_, c) => c.parent.onRowFocusIn(c.event as FocusEvent)}\"\n @blur=\"${(_, c) => c.parent.onRowBlur(c.event as FocusEvent)}\"\n @group-selection-toggle=\"${(x, c) => c.parent.onRowSelectionToggle(x.index, c.event as CustomEvent<TableRowSelectionToggleEventDetail>)}\"\n @group-expand-toggle=\"${(x, c) => c.parent.handleGroupRowExpanded(x.index, c.event)}\"\n >\n </${tableGroupRowTag}>\n `)}\n ${when((x, c: ExecutionContext<Table>) => !c.parent.tableData[x.index]?.isGroupRow, html<VirtualItem, Table>`\n <${tableRowTag}\n class=\"row\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n record-id=\"${(x, c) => c.parent.tableData[x.index]?.id}\"\n ?selectable=\"${(_, c) => c.parent.selectionMode !== TableRowSelectionMode.none}\"\n ?selected=\"${(x, c) => c.parent.tableData[x.index]?.selectionState === TableRowSelectionState.selected}\"\n ?expanded=\"${(x, c) => c.parent.tableData[x.index]?.isExpanded}\"\n ?hide-selection=\"${(_, c) => c.parent.selectionMode !== TableRowSelectionMode.multiple}\"\n ?reserve-collapse-space=\"${(_, c) => c.parent.canHaveCollapsibleRows}\"\n :dataRecord=\"${(x, c) => c.parent.tableData[x.index]?.record}\"\n :columns=\"${(_, c) => c.parent.columns}\"\n :isParentRow=\"${(x, c) => c.parent.tableData[x.index]?.isParentRow}\"\n :nestingLevel=\"${(x, c) => c.parent.tableData[x.index]?.nestingLevel}\"\n ?row-operation-grid-cell-hidden=\"${(_, c) => !c.parent.showRowOperationColumn}\"\n ?loading=\"${(x, c) => c.parent.tableData[x.index]?.isLoadingChildren}\"\n :resolvedRowIndex=\"${x => x.index}\"\n ?allow-hover=\"${(_, c) => !c.parent.virtualizer.isScrolling}\"\n @click=\"${(x, c) => c.parent.onRowClick(x.index, c.event as MouseEvent)}\"\n @focusin=\"${(_, c) => c.parent.onRowFocusIn(c.event as FocusEvent)}\"\n @blur=\"${(_, c) => c.parent.onRowBlur(c.event as FocusEvent)}\"\n @row-selection-toggle=\"${(x, c) => c.parent.onRowSelectionToggle(x.index, c.event as CustomEvent<TableRowSelectionToggleEventDetail>)}\"\n @row-action-menu-beforetoggle=\"${(x, c) => c.parent.onRowActionMenuBeforeToggle(x.index, c.event as CustomEvent<TableActionMenuToggleEventDetail>)}\"\n @row-action-menu-toggle=\"${(_, c) => c.parent.onRowActionMenuToggle(c.event as CustomEvent<TableActionMenuToggleEventDetail>)}\"\n @row-slots-request=\"${(_, c) => c.parent.onRowSlotsRequest(c.event as CustomEvent<RowSlotRequestEventDetail>)}\"\n @row-expand-toggle=\"${(x, c) => c.parent.handleRowExpanded(x.index)}\"\n >\n ${repeat((x, c: ExecutionContext<Table>) => (c.parent.tableData[x.index]?.requestedSlots || []), html<SlotMetadata>`\n <slot\n name=\"${x => x.name}\"\n slot=\"${x => x.slot}\"\n ></slot>\n `)}\n </${tableRowTag}>\n `)}\n `)}\n `)}\n </div>\n </div>\n </div>\n </template>\n`;\n"]}
|