@ni/nimble-components 29.7.1 → 29.7.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.
@@ -23,10 +23,21 @@ export declare class SelectPageObject {
23
23
  clickSelect(): void;
24
24
  clickActiveItem(): void;
25
25
  clickFilterInput(): Promise<void>;
26
+ /**
27
+ * Selects an option using an index value into the list of visible options.
28
+ * Options that have the `hidden` or `visuallyHidden` attribute set to true
29
+ * are not considered visible.
30
+ * @param index The index of the option in the visible set to be selected
31
+ * @remarks Prefer clickOptionWithDisplayText where possible. This method is
32
+ * useful when the display text is not unique and the index is known.
33
+ */
26
34
  clickOption(index: number): void;
27
35
  /**
28
36
  * Click the option with the text provided by the 'displayText' parameter.
29
37
  * @param value The text of the option to be selected
38
+ * @remarks This method is useful when the display text is unique. If the
39
+ * display text is not unique, the first option with the matching text will
40
+ * be selected.
30
41
  */
31
42
  clickOptionWithDisplayText(displayText: string): void;
32
43
  clickClearButton(): void;
@@ -46,6 +57,7 @@ export declare class SelectPageObject {
46
57
  isNoResultsLabelVisible(): boolean;
47
58
  isLoadingVisualVisible(): boolean;
48
59
  getFilterInputText(): string;
60
+ private getVisibleOptions;
49
61
  private getFilterInput;
50
62
  private getClearButton;
51
63
  }
@@ -73,7 +73,8 @@ export class SelectPageObject {
73
73
  if (!selectedOption) {
74
74
  throw new Error('No option is selected to click');
75
75
  }
76
- this.clickOption(this.selectElement.options.indexOf(selectedOption));
76
+ const visibleOptions = this.getVisibleOptions();
77
+ this.clickOption(visibleOptions.indexOf(selectedOption));
77
78
  }
78
79
  async clickFilterInput() {
79
80
  if (!this.selectElement.filterInput) {
@@ -82,23 +83,35 @@ export class SelectPageObject {
82
83
  this.selectElement.filterInput.click();
83
84
  await waitForUpdatesAsync();
84
85
  }
86
+ /**
87
+ * Selects an option using an index value into the list of visible options.
88
+ * Options that have the `hidden` or `visuallyHidden` attribute set to true
89
+ * are not considered visible.
90
+ * @param index The index of the option in the visible set to be selected
91
+ * @remarks Prefer clickOptionWithDisplayText where possible. This method is
92
+ * useful when the display text is not unique and the index is known.
93
+ */
85
94
  clickOption(index) {
86
- if (index >= this.selectElement.options.length) {
95
+ const visibleOptions = this.getVisibleOptions();
96
+ if (index >= visibleOptions.length) {
87
97
  throw new Error('"index" greater than number of current displayed options');
88
98
  }
89
- const option = this.selectElement.options[index];
99
+ const option = visibleOptions[index];
90
100
  option.scrollIntoView();
91
101
  option.click();
92
102
  }
93
103
  /**
94
104
  * Click the option with the text provided by the 'displayText' parameter.
95
105
  * @param value The text of the option to be selected
106
+ * @remarks This method is useful when the display text is unique. If the
107
+ * display text is not unique, the first option with the matching text will
108
+ * be selected.
96
109
  */
97
110
  clickOptionWithDisplayText(displayText) {
98
111
  if (!this.selectElement.open) {
99
112
  this.clickSelect();
100
113
  }
101
- const optionIndex = this.selectElement.options.findIndex(o => o.text === displayText);
114
+ const optionIndex = this.getVisibleOptions().findIndex(o => o.text === displayText);
102
115
  if (optionIndex === -1) {
103
116
  throw new Error(`No option with "text" of ${displayText}`);
104
117
  }
@@ -201,6 +214,9 @@ export class SelectPageObject {
201
214
  getFilterInputText() {
202
215
  return this.selectElement.filterInput?.value ?? '';
203
216
  }
217
+ getVisibleOptions() {
218
+ return this.selectElement.options.filter(o => !(o.hidden || o.visuallyHidden));
219
+ }
204
220
  getFilterInput() {
205
221
  if (this.selectElement.filterMode === FilterMode.none) {
206
222
  throw new Error('Select has filterMode of "none" so there is no filter input');
@@ -1 +1 @@
1
- {"version":3,"file":"select.pageobject.js","sourceRoot":"","sources":["../../../../src/select/testing/select.pageobject.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n keyEnter,\n keyEscape,\n keyArrowDown,\n keyArrowUp,\n keySpace,\n keyTab\n} from '@microsoft/fast-web-utilities';\nimport type { Select } from '..';\nimport type { ListOption } from '../../list-option';\nimport { waitForUpdatesAsync } from '../../testing/async-helpers';\nimport { FilterMode } from '../types';\nimport type { Button } from '../../button';\nimport type { ListOptionGroup } from '../../list-option-group';\n\n/**\n * Page object for the `nimble-select` component to provide consistent ways\n * of querying and interacting with the component during tests.\n */\nexport class SelectPageObject {\n public constructor(protected readonly selectElement: Select) {}\n\n public async openAndSetFilterText(filterText: string): Promise<void> {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Can not set filter text with filterMode set to \"none\".'\n );\n }\n this.clickSelect();\n const filterInput = this.getFilterInput();\n if (filterInput) {\n filterInput.value = filterText;\n }\n\n await waitForUpdatesAsync();\n const inputEvent = new InputEvent('input');\n filterInput?.dispatchEvent(inputEvent);\n await waitForUpdatesAsync();\n }\n\n public async closeDropdown(): Promise<void> {\n this.selectElement.open = false;\n await waitForUpdatesAsync();\n }\n\n public async setOptions(options: ListOption[]): Promise<void> {\n options.forEach(option => {\n option.setAttribute('role', 'option');\n });\n this.selectElement.slottedOptions = options;\n await waitForUpdatesAsync();\n }\n\n public getFilteredOptions(): ListOption[] {\n return this.selectElement.filteredOptions as ListOption[];\n }\n\n public getSelectedOption(): ListOption | null {\n return (this.selectElement.selectedOptions[0] as ListOption) ?? null;\n }\n\n public getActiveOption(): ListOption | null {\n return (\n (this.selectElement.options.find(\n o => (o as ListOption).activeOption\n ) as ListOption) ?? null\n );\n }\n\n public getDisplayText(): string {\n const displayText = this.selectElement.shadowRoot?.querySelector('.selected-value')\n ?.textContent ?? '';\n return displayText.trim();\n }\n\n public getGroupLabels(): string[] {\n return Array.from(\n this.selectElement.querySelectorAll<ListOptionGroup>(\n '[role=\"group\"]'\n ) ?? []\n ).map(group => group.labelContent);\n }\n\n public getGroupOptionLabelsByIndex(groupIndex: number): string[] {\n const group = Array.from(\n this.selectElement.querySelectorAll<ListOptionGroup>(\n '[role=\"group\"]'\n ) ?? []\n )[groupIndex];\n return Array.from(\n group?.querySelectorAll<ListOption>('[role=\"option\"]') ?? []\n ).map(option => option.textContent?.trim() ?? '');\n }\n\n public getGroupOptionLabelsByLabel(groupLabel: string): string[] {\n const group = Array.from(\n this.selectElement.querySelectorAll<ListOptionGroup>(\n '[role=\"group\"]'\n ) ?? []\n ).find(g => g.labelContent === groupLabel);\n return Array.from(\n group?.querySelectorAll<ListOption>('[role=\"option\"]') ?? []\n ).map(option => option.textContent?.trim() ?? '');\n }\n\n /**\n * Either opens or closes the dropdown depending on its current state\n */\n public clickSelect(): void {\n this.selectElement.click();\n }\n\n public clickActiveItem(): void {\n if (!this.selectElement.open) {\n throw new Error('Select must be open to click selectedItem');\n }\n\n const selectedOption = this.getActiveOption();\n if (!selectedOption) {\n throw new Error('No option is selected to click');\n }\n this.clickOption(this.selectElement.options.indexOf(selectedOption));\n }\n\n public async clickFilterInput(): Promise<void> {\n if (!this.selectElement.filterInput) {\n throw new Error('Filter input is not available.');\n }\n this.selectElement.filterInput.click();\n await waitForUpdatesAsync();\n }\n\n public clickOption(index: number): void {\n if (index >= this.selectElement.options.length) {\n throw new Error(\n '\"index\" greater than number of current displayed options'\n );\n }\n\n const option = this.selectElement.options[index]!;\n option.scrollIntoView();\n option.click();\n }\n\n /**\n * Click the option with the text provided by the 'displayText' parameter.\n * @param value The text of the option to be selected\n */\n public clickOptionWithDisplayText(displayText: string): void {\n if (!this.selectElement.open) {\n this.clickSelect();\n }\n const optionIndex = this.selectElement.options.findIndex(\n o => o.text === displayText\n );\n if (optionIndex === -1) {\n throw new Error(`No option with \"text\" of ${displayText}`);\n }\n\n this.clickOption(optionIndex);\n }\n\n public clickClearButton(): void {\n if (!this.selectElement.clearable) {\n throw new Error(\n 'Select must set \"clearable\" in order to click clear button'\n );\n }\n\n if (\n this.selectElement.selectedIndex === -1\n || this.selectElement.displayPlaceholder\n ) {\n throw new Error(\n 'Select must have a selected element in order to click clear button'\n );\n }\n\n const clearButton = this.getClearButton();\n clearButton?.click();\n }\n\n public async clickAway(): Promise<void> {\n this.selectElement.dispatchEvent(new Event('focusout'));\n await waitForUpdatesAsync();\n }\n\n public pressEnterKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEnter })\n );\n }\n\n public pressEscapeKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEscape })\n );\n }\n\n public pressTabKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyTab })\n );\n this.selectElement.dispatchEvent(new FocusEvent('focusout'));\n }\n\n public pressArrowDownKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowDown })\n );\n }\n\n public pressArrowUpKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowUp })\n );\n }\n\n public pressCharacterKey(character: string): void {\n if (character.length !== 1) {\n throw new Error(\n 'character parameter must contain only a single character'\n );\n }\n\n if (\n this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ) {\n const filterInput = this.selectElement.filterInput!;\n filterInput.value += character;\n }\n const inputElement = this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ? this.selectElement.filterInput\n : this.selectElement;\n inputElement!.dispatchEvent(new InputEvent('input'));\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: character })\n );\n }\n\n public async pressSpaceKey(): Promise<void> {\n const alreadyOpen = this.selectElement.open;\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keySpace, bubbles: true })\n );\n await waitForUpdatesAsync();\n if (\n this.selectElement.filterMode === FilterMode.standard\n && alreadyOpen\n ) {\n // add space to end of current filter\n const filterValue = `${\n this.selectElement.filterInput?.value ?? ''\n } `;\n if (this.selectElement.filterInput) {\n this.selectElement.filterInput.value = filterValue;\n }\n this.selectElement.filterInput?.dispatchEvent(\n new InputEvent('input', { inputType: 'insertText' })\n );\n }\n await waitForUpdatesAsync();\n }\n\n public clearFilter(): void {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Select has filterMode of \"none\" so there is no filter input'\n );\n }\n const filterInput = this.getFilterInput();\n filterInput!.value = '';\n filterInput?.dispatchEvent(\n new InputEvent('input', { inputType: 'deleteContentBackward' })\n );\n }\n\n public isDropdownVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.listbox') !== null\n );\n }\n\n public isClearButtonVisible(): boolean {\n return this.getClearButton() != null;\n }\n\n public isFilterInputVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.filter-field')\n !== null\n );\n }\n\n public isOptionVisible(index: number): boolean {\n if (index >= this.selectElement.options.length) {\n throw new Error('Indexing past number of options');\n }\n const option = this.selectElement.options[index]!;\n const optionRects = option.getClientRects();\n return optionRects.length > 0 && optionRects[0]!.height !== 0;\n }\n\n public isNoResultsLabelVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector(\n '.no-results-label'\n ) !== null\n );\n }\n\n public isLoadingVisualVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector(\n '.loading-container'\n ) !== null\n );\n }\n\n public getFilterInputText(): string {\n return this.selectElement.filterInput?.value ?? '';\n }\n\n private getFilterInput(): HTMLInputElement | null | undefined {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Select has filterMode of \"none\" so there is no filter input'\n );\n }\n return this.selectElement.filterInput;\n }\n\n private getClearButton(): Button | null | undefined {\n return this.selectElement.shadowRoot?.querySelector<Button>(\n '.clear-button'\n );\n }\n}\n"]}
1
+ {"version":3,"file":"select.pageobject.js","sourceRoot":"","sources":["../../../../src/select/testing/select.pageobject.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n keyEnter,\n keyEscape,\n keyArrowDown,\n keyArrowUp,\n keySpace,\n keyTab\n} from '@microsoft/fast-web-utilities';\nimport type { Select } from '..';\nimport type { ListOption } from '../../list-option';\nimport { waitForUpdatesAsync } from '../../testing/async-helpers';\nimport { FilterMode } from '../types';\nimport type { Button } from '../../button';\nimport type { ListOptionGroup } from '../../list-option-group';\n\n/**\n * Page object for the `nimble-select` component to provide consistent ways\n * of querying and interacting with the component during tests.\n */\nexport class SelectPageObject {\n public constructor(protected readonly selectElement: Select) {}\n\n public async openAndSetFilterText(filterText: string): Promise<void> {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Can not set filter text with filterMode set to \"none\".'\n );\n }\n this.clickSelect();\n const filterInput = this.getFilterInput();\n if (filterInput) {\n filterInput.value = filterText;\n }\n\n await waitForUpdatesAsync();\n const inputEvent = new InputEvent('input');\n filterInput?.dispatchEvent(inputEvent);\n await waitForUpdatesAsync();\n }\n\n public async closeDropdown(): Promise<void> {\n this.selectElement.open = false;\n await waitForUpdatesAsync();\n }\n\n public async setOptions(options: ListOption[]): Promise<void> {\n options.forEach(option => {\n option.setAttribute('role', 'option');\n });\n this.selectElement.slottedOptions = options;\n await waitForUpdatesAsync();\n }\n\n public getFilteredOptions(): ListOption[] {\n return this.selectElement.filteredOptions as ListOption[];\n }\n\n public getSelectedOption(): ListOption | null {\n return (this.selectElement.selectedOptions[0] as ListOption) ?? null;\n }\n\n public getActiveOption(): ListOption | null {\n return (\n (this.selectElement.options.find(\n o => (o as ListOption).activeOption\n ) as ListOption) ?? null\n );\n }\n\n public getDisplayText(): string {\n const displayText = this.selectElement.shadowRoot?.querySelector('.selected-value')\n ?.textContent ?? '';\n return displayText.trim();\n }\n\n public getGroupLabels(): string[] {\n return Array.from(\n this.selectElement.querySelectorAll<ListOptionGroup>(\n '[role=\"group\"]'\n ) ?? []\n ).map(group => group.labelContent);\n }\n\n public getGroupOptionLabelsByIndex(groupIndex: number): string[] {\n const group = Array.from(\n this.selectElement.querySelectorAll<ListOptionGroup>(\n '[role=\"group\"]'\n ) ?? []\n )[groupIndex];\n return Array.from(\n group?.querySelectorAll<ListOption>('[role=\"option\"]') ?? []\n ).map(option => option.textContent?.trim() ?? '');\n }\n\n public getGroupOptionLabelsByLabel(groupLabel: string): string[] {\n const group = Array.from(\n this.selectElement.querySelectorAll<ListOptionGroup>(\n '[role=\"group\"]'\n ) ?? []\n ).find(g => g.labelContent === groupLabel);\n return Array.from(\n group?.querySelectorAll<ListOption>('[role=\"option\"]') ?? []\n ).map(option => option.textContent?.trim() ?? '');\n }\n\n /**\n * Either opens or closes the dropdown depending on its current state\n */\n public clickSelect(): void {\n this.selectElement.click();\n }\n\n public clickActiveItem(): void {\n if (!this.selectElement.open) {\n throw new Error('Select must be open to click selectedItem');\n }\n\n const selectedOption = this.getActiveOption();\n if (!selectedOption) {\n throw new Error('No option is selected to click');\n }\n const visibleOptions = this.getVisibleOptions();\n this.clickOption(visibleOptions.indexOf(selectedOption));\n }\n\n public async clickFilterInput(): Promise<void> {\n if (!this.selectElement.filterInput) {\n throw new Error('Filter input is not available.');\n }\n this.selectElement.filterInput.click();\n await waitForUpdatesAsync();\n }\n\n /**\n * Selects an option using an index value into the list of visible options.\n * Options that have the `hidden` or `visuallyHidden` attribute set to true\n * are not considered visible.\n * @param index The index of the option in the visible set to be selected\n * @remarks Prefer clickOptionWithDisplayText where possible. This method is\n * useful when the display text is not unique and the index is known.\n */\n public clickOption(index: number): void {\n const visibleOptions = this.getVisibleOptions();\n if (index >= visibleOptions.length) {\n throw new Error(\n '\"index\" greater than number of current displayed options'\n );\n }\n\n const option = visibleOptions[index]!;\n option.scrollIntoView();\n option.click();\n }\n\n /**\n * Click the option with the text provided by the 'displayText' parameter.\n * @param value The text of the option to be selected\n * @remarks This method is useful when the display text is unique. If the\n * display text is not unique, the first option with the matching text will\n * be selected.\n */\n public clickOptionWithDisplayText(displayText: string): void {\n if (!this.selectElement.open) {\n this.clickSelect();\n }\n const optionIndex = this.getVisibleOptions().findIndex(\n o => o.text === displayText\n );\n if (optionIndex === -1) {\n throw new Error(`No option with \"text\" of ${displayText}`);\n }\n\n this.clickOption(optionIndex);\n }\n\n public clickClearButton(): void {\n if (!this.selectElement.clearable) {\n throw new Error(\n 'Select must set \"clearable\" in order to click clear button'\n );\n }\n\n if (\n this.selectElement.selectedIndex === -1\n || this.selectElement.displayPlaceholder\n ) {\n throw new Error(\n 'Select must have a selected element in order to click clear button'\n );\n }\n\n const clearButton = this.getClearButton();\n clearButton?.click();\n }\n\n public async clickAway(): Promise<void> {\n this.selectElement.dispatchEvent(new Event('focusout'));\n await waitForUpdatesAsync();\n }\n\n public pressEnterKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEnter })\n );\n }\n\n public pressEscapeKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyEscape })\n );\n }\n\n public pressTabKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyTab })\n );\n this.selectElement.dispatchEvent(new FocusEvent('focusout'));\n }\n\n public pressArrowDownKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowDown })\n );\n }\n\n public pressArrowUpKey(): void {\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keyArrowUp })\n );\n }\n\n public pressCharacterKey(character: string): void {\n if (character.length !== 1) {\n throw new Error(\n 'character parameter must contain only a single character'\n );\n }\n\n if (\n this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ) {\n const filterInput = this.selectElement.filterInput!;\n filterInput.value += character;\n }\n const inputElement = this.selectElement.open\n && this.selectElement.filterMode !== FilterMode.none\n ? this.selectElement.filterInput\n : this.selectElement;\n inputElement!.dispatchEvent(new InputEvent('input'));\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: character })\n );\n }\n\n public async pressSpaceKey(): Promise<void> {\n const alreadyOpen = this.selectElement.open;\n this.selectElement.dispatchEvent(\n new KeyboardEvent('keydown', { key: keySpace, bubbles: true })\n );\n await waitForUpdatesAsync();\n if (\n this.selectElement.filterMode === FilterMode.standard\n && alreadyOpen\n ) {\n // add space to end of current filter\n const filterValue = `${\n this.selectElement.filterInput?.value ?? ''\n } `;\n if (this.selectElement.filterInput) {\n this.selectElement.filterInput.value = filterValue;\n }\n this.selectElement.filterInput?.dispatchEvent(\n new InputEvent('input', { inputType: 'insertText' })\n );\n }\n await waitForUpdatesAsync();\n }\n\n public clearFilter(): void {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Select has filterMode of \"none\" so there is no filter input'\n );\n }\n const filterInput = this.getFilterInput();\n filterInput!.value = '';\n filterInput?.dispatchEvent(\n new InputEvent('input', { inputType: 'deleteContentBackward' })\n );\n }\n\n public isDropdownVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.listbox') !== null\n );\n }\n\n public isClearButtonVisible(): boolean {\n return this.getClearButton() != null;\n }\n\n public isFilterInputVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector('.filter-field')\n !== null\n );\n }\n\n public isOptionVisible(index: number): boolean {\n if (index >= this.selectElement.options.length) {\n throw new Error('Indexing past number of options');\n }\n const option = this.selectElement.options[index]!;\n const optionRects = option.getClientRects();\n return optionRects.length > 0 && optionRects[0]!.height !== 0;\n }\n\n public isNoResultsLabelVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector(\n '.no-results-label'\n ) !== null\n );\n }\n\n public isLoadingVisualVisible(): boolean {\n return (\n this.selectElement.shadowRoot?.querySelector(\n '.loading-container'\n ) !== null\n );\n }\n\n public getFilterInputText(): string {\n return this.selectElement.filterInput?.value ?? '';\n }\n\n private getVisibleOptions(): ListOption[] {\n return this.selectElement.options.filter(\n o => !((o as ListOption).hidden || (o as ListOption).visuallyHidden)\n ) as ListOption[];\n }\n\n private getFilterInput(): HTMLInputElement | null | undefined {\n if (this.selectElement.filterMode === FilterMode.none) {\n throw new Error(\n 'Select has filterMode of \"none\" so there is no filter input'\n );\n }\n return this.selectElement.filterInput;\n }\n\n private getClearButton(): Button | null | undefined {\n return this.selectElement.shadowRoot?.querySelector<Button>(\n '.clear-button'\n );\n }\n}\n"]}
@@ -8,7 +8,7 @@ import type { TableNode, TableRecord } from '../types';
8
8
  * @internal
9
9
  */
10
10
  export declare class Virtualizer<TData extends TableRecord = TableRecord> {
11
- visibleItems: VirtualItem[];
11
+ visibleItems: VirtualItem<HTMLElement>[];
12
12
  scrollHeight: number;
13
13
  headerContainerMarginRight: number;
14
14
  rowContainerYOffset: number;
@@ -37,7 +37,10 @@ export class Virtualizer {
37
37
  connect() {
38
38
  this.viewportResizeObserver.observe(this.table.viewport);
39
39
  this.updateVirtualizer();
40
- this.table.viewport.scrollTo({ top: this.virtualizer.scrollOffset });
40
+ const scrollOffset = this.virtualizer.scrollOffset;
41
+ if (scrollOffset !== null) {
42
+ this.table.viewport.scrollTo({ top: scrollOffset });
43
+ }
41
44
  }
42
45
  disconnect() {
43
46
  this.viewportResizeObserver.disconnect();
@@ -1 +1 @@
1
- {"version":3,"file":"virtualizer.js","sourceRoot":"","sources":["../../../../src/table/models/virtualizer.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EACH,WAAW,IAAI,mBAAmB,EAElC,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAGrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAIhF;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAapB,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAY,SAAS;QACjB,OAAO,CACH,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;cAC/C,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACxD,CAAC;IACN,CAAC;IAQD,YACI,KAAmB,EACnB,aAA8C;QA9B3C,iBAAY,GAAkB,EAAE,CAAC;QAGjC,iBAAY,GAAG,CAAC,CAAC;QAGjB,+BAA0B,GAAG,CAAC,CAAC;QAG/B,wBAAmB,GAAG,CAAC,CAAC;QAiBvB,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;gBACf,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;aAC7F;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,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,WAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1E,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;YACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;IACL,CAAC;IAEM,aAAa,CAAC,KAAa,EAAE,OAAyB;QACzD,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,iBAAiB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SACxC;aAAM;YACH,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;SACvD;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,SAAS,CAAC;QACjC,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,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,aAAa;YACzB,oBAAoB;YACpB,kBAAkB;YAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE;SACD,CAAC;IACtD,CAAC;IAEO,uBAAuB;QAC3B,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC;QACxC,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,4FAA4F;QAC5F,0FAA0F;QAC1F,yFAAyF;QACzF,0EAA0E;QAC1E,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC;YACxC,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC;SACzC;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,SAAS,CACpD,CAAC;IACN,CAAC;CACJ;AAzHU;IADN,UAAU;iDAC6B;AAGjC;IADN,UAAU;iDACa;AAGjB;IADN,UAAU;+DAC2B;AAG/B;IADN,UAAU;wDACoB","sourcesContent":["import { observable } from '@microsoft/fast-element';\nimport type { Table as TanStackTable } from '@tanstack/table-core';\nimport {\n Virtualizer as TanStackVirtualizer,\n VirtualizerOptions,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n VirtualItem,\n ScrollToOptions\n} from '@tanstack/virtual-core';\nimport { borderWidth, controlHeight } from '../../theme-provider/design-tokens';\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 headerContainerMarginRight = 0;\n\n @observable\n public rowContainerYOffset = 0;\n\n public get pageSize(): number {\n return this._pageSize;\n }\n\n private get rowHeight(): number {\n return (\n parseFloat(controlHeight.getValueFor(this.table))\n + 2 * parseFloat(borderWidth.getValueFor(this.table))\n );\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 }\n });\n }\n\n public connect(): void {\n this.viewportResizeObserver.observe(this.table.viewport);\n this.updateVirtualizer();\n this.table.viewport.scrollTo({ top: this.virtualizer!.scrollOffset });\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 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.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 scrollingDelay: 5,\n scrollToFn: elementScroll,\n observeElementOffset,\n observeElementRect,\n onChange: () => this.handleVirtualizerChange()\n } as VirtualizerOptions<HTMLElement, HTMLElement>;\n }\n\n private handleVirtualizerChange(): void {\n this.table.handleFocusedCellRecycling();\n const virtualizer = this.virtualizer!;\n this.visibleItems = virtualizer.getVirtualItems();\n this.scrollHeight = virtualizer.getTotalSize();\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.rowHeight\n );\n }\n}\n"]}
1
+ {"version":3,"file":"virtualizer.js","sourceRoot":"","sources":["../../../../src/table/models/virtualizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { observable } from '@microsoft/fast-element';\nimport type { Table as TanStackTable } from '@tanstack/table-core';\nimport {\n Virtualizer as TanStackVirtualizer,\n VirtualizerOptions,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n VirtualItem,\n ScrollToOptions\n} from '@tanstack/virtual-core';\nimport { borderWidth, controlHeight } from '../../theme-provider/design-tokens';\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<HTMLElement>[] = [];\n\n @observable\n public scrollHeight = 0;\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 get rowHeight(): number {\n return (\n parseFloat(controlHeight.getValueFor(this.table))\n + 2 * parseFloat(borderWidth.getValueFor(this.table))\n );\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 }\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 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.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 scrollingDelay: 5,\n scrollToFn: elementScroll,\n observeElementOffset,\n observeElementRect,\n onChange: () => this.handleVirtualizerChange()\n } as VirtualizerOptions<HTMLElement, HTMLElement>;\n }\n\n private handleVirtualizerChange(): void {\n this.table.handleFocusedCellRecycling();\n const virtualizer = this.virtualizer!;\n this.visibleItems = virtualizer.getVirtualItems();\n this.scrollHeight = virtualizer.getTotalSize();\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.rowHeight\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n children,\n elements,\n html,\n ref,\n repeat,\n when\n} from '@microsoft/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 TableActionMenuToggleEventDetail,\n TableColumnSortDirection,\n TableRowSelectionMode,\n TableRowSelectionState,\n 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 <div class=\"table-container ${x => (x.documentShiftKeyDown ? '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-scroll-height: ${x => x.virtualizer.scrollHeight}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 --ni-private-glass-overlay-pointer-events: ${x => (x.layoutManager.isColumnBeingSized ? 'none' : 'default')};\n \">\n <div class=\"glass-overlay\">\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=\"${x => `selection-checkbox ${x.selectionMode ? x.selectionMode : ''}`}\"\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 <${buttonTag}\n ${ref('collapseAllButton')}\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n class=\"collapse-all-button ${x => `${x.showCollapseAll ? 'visible' : ''}`}\"\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 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 @mousedown=\"${(_, c) => c.parent.onLeftDividerMouseDown(c.event as MouseEvent, 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 :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 @mousedown=\"${(_, c) => c.parent.onRightDividerMouseDown(c.event as MouseEvent, 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) => (c.parent as Table).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 @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) => !(c.parent as Table).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 :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 @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-expand-toggle=\"${(x, c) => c.parent.handleRowExpanded(x.index)}\"\n >\n ${when((x, c) => (c.parent as Table).openActionMenuRecordId === (c.parent as Table).tableData[x.index]?.id, html<VirtualItem, Table>`\n ${repeat((_, c) => (c.parent as Table).actionMenuSlots, html<string, Table>`\n <slot\n name=\"${x => x}\"\n slot=\"${x => `row-action-menu-${x}`}\">\n </slot>\n `)}\n `)}\n </${tableRowTag}>\n `)}\n `)}\n `)}\n </div>\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 children,\n elements,\n html,\n ref,\n repeat,\n when\n} from '@microsoft/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 TableActionMenuToggleEventDetail,\n TableColumnSortDirection,\n TableRowSelectionMode,\n TableRowSelectionState,\n 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 <div class=\"table-container ${x => (x.documentShiftKeyDown ? '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-scroll-height: ${x => x.virtualizer.scrollHeight}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 --ni-private-glass-overlay-pointer-events: ${x => (x.layoutManager.isColumnBeingSized ? 'none' : 'default')};\n \">\n <div class=\"glass-overlay\">\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=\"${x => `selection-checkbox ${x.selectionMode ? x.selectionMode : ''}`}\"\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 <${buttonTag}\n ${ref('collapseAllButton')}\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n class=\"collapse-all-button ${x => `${x.showCollapseAll ? 'visible' : ''}`}\"\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 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 @mousedown=\"${(_, c) => c.parent.onLeftDividerMouseDown(c.event as MouseEvent, 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 :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 @mousedown=\"${(_, c) => c.parent.onRightDividerMouseDown(c.event as MouseEvent, 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<HTMLElement>, Table>`\n ${when((x, c) => (c.parent as Table).tableData[x.index]?.isGroupRow, html<VirtualItem<HTMLElement>, 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 @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) => !(c.parent as Table).tableData[x.index]?.isGroupRow, html<VirtualItem<HTMLElement>, 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 :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 @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-expand-toggle=\"${(x, c) => c.parent.handleRowExpanded(x.index)}\"\n >\n ${when((x, c) => (c.parent as Table).openActionMenuRecordId === (c.parent as Table).tableData[x.index]?.id, html<VirtualItem<HTMLElement>, Table>`\n ${repeat((_, c) => (c.parent as Table).actionMenuSlots, html<string, Table>`\n <slot\n name=\"${x => x}\"\n slot=\"${x => `row-action-menu-${x}`}\">\n </slot>\n `)}\n `)}\n </${tableRowTag}>\n `)}\n `)}\n `)}\n </div>\n </div>\n </div>\n </div>\n </template>\n`;\n"]}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@ni/nimble-components",
3
- "version": "29.7.1",
3
+ "version": "29.7.3",
4
4
  "description": "Styled web components for the NI Nimble Design System",
5
5
  "scripts": {
6
6
  "build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss",
7
7
  "lint-concurrent": "concurrently --timings --group \"npm:eslint\" \"npm:prettier\"",
8
- "format": "npm run eslint-fix && npm run prettier-fix",
8
+ "format": "npm run prettier-fix",
9
9
  "eslint": "eslint .",
10
10
  "eslint-fix": "eslint . --fix",
11
11
  "prettier": "prettier-eslint \"**/*.*\" --list-different --prettier-ignore",