@ni/nimble-components 29.1.8 → 29.2.1
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 +470 -132
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +2818 -2703
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/all-components.d.ts +1 -0
- package/dist/esm/all-components.js +1 -0
- package/dist/esm/all-components.js.map +1 -1
- package/dist/esm/combobox/template.js +1 -1
- package/dist/esm/combobox/template.js.map +1 -1
- package/dist/esm/list-option/template.js +1 -0
- package/dist/esm/list-option/template.js.map +1 -1
- package/dist/esm/list-option-group/index.d.ts +65 -0
- package/dist/esm/list-option-group/index.js +130 -0
- package/dist/esm/list-option-group/index.js.map +1 -0
- package/dist/esm/list-option-group/styles.d.ts +1 -0
- package/dist/esm/list-option-group/styles.js +62 -0
- package/dist/esm/list-option-group/styles.js.map +1 -0
- package/dist/esm/list-option-group/template.d.ts +2 -0
- package/dist/esm/list-option-group/template.js +37 -0
- package/dist/esm/list-option-group/template.js.map +1 -0
- package/dist/esm/rich-text/mention-listbox/template.js +3 -3
- package/dist/esm/rich-text/mention-listbox/template.js.map +1 -1
- package/dist/esm/select/index.d.ts +11 -2
- package/dist/esm/select/index.js +149 -36
- package/dist/esm/select/index.js.map +1 -1
- package/dist/esm/select/template.d.ts +4 -0
- package/dist/esm/select/template.js +11 -2
- package/dist/esm/select/template.js.map +1 -1
- package/dist/esm/select/testing/select.pageobject.d.ts +4 -1
- package/dist/esm/select/testing/select.pageobject.js +15 -0
- package/dist/esm/select/testing/select.pageobject.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/select/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n ref,\n slotted,\n ViewTemplate,\n when\n} from '@microsoft/fast-element';\nimport {\n endSlotTemplate,\n FoundationElementTemplate,\n SelectOptions,\n startSlotTemplate,\n isListboxOption\n} from '@microsoft/fast-foundation';\nimport type { Select } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { iconMagnifyingGlassTag } from '../icons/magnifying-glass';\nimport {\n filterNoResultsLabel,\n filterSearchLabel\n} from '../label-provider/core/label-tokens';\nimport { FilterMode } from './types';\nimport { buttonTag } from '../button';\nimport { iconTimesTag } from '../icons/times';\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Select>,\nSelectOptions\n> = (context, definition) => html<Select>`\n <template\n class=\"${x => [\n x.collapsible && 'collapsible',\n x.collapsible && x.open && 'open',\n x.disabled && 'disabled',\n x.collapsible && x.position,\n ].filter(Boolean).join(' ')}\"\n aria-activedescendant=\"${x => (x.filterMode === FilterMode.none ? x.ariaActiveDescendant : null)}\"\n aria-controls=\"${x => (x.filterMode === FilterMode.none ? x.ariaControls : null)}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"${x => (x.collapsible ? 'listbox' : null)}\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n ?open=\"${x => x.open}\"\n role=\"combobox\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @contentchange=\"${x => x.updateDisplayValue()}\"\n @focusin=\"${(x, c) => x.focusinHandler(c.event as FocusEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n @mousedown=\"${(x, c) => x.mousedownHandler(c.event as MouseEvent)}\"\n >\n ${when(x => x.collapsible, html<Select>`\n <div\n class=\"control\"\n part=\"control\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('control')}\n >\n ${startSlotTemplate(context, definition)}\n <slot name=\"button-container\">\n <div class=\"selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}\" part=\"selected-value\" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>\n <slot name=\"selected-value\">${x => x.displayValue}</slot>\n </div>\n ${when(x => !x.disabled && x.clearable && !x.displayPlaceholder && x.selectedIndex >= 0, html<Select>`\n <${buttonTag} \n class=\"clear-button\"\n tabindex=\"-1\"\n part=\"clear-button\"\n content-hidden\n appearance=\"ghost\"\n @click=\"${(x, c) => x.clearClickHandler(c.event as MouseEvent)}\">\n <${iconTimesTag} slot=\"start\"></${iconTimesTag}>\n </${buttonTag}>\n `)}\n <div aria-hidden=\"true\" class=\"indicator\" part=\"indicator\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n `)\n }\n <${anchoredRegionTag}\n ${ref('anchoredRegion')}\n class=\"anchored-region\"\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"${x => (x.positionAttribute === DropdownPosition.above ? 'top' : 'bottom')}\"\n vertical-positioning-mode=\"${x => (!x.positionAttribute ? 'dynamic' : 'locktodefault')}\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n @loaded=\"${x => x.regionLoadedHandler()}\"\n ?hidden=\"${x => (x.collapsible ? !x.open : false)}\">\n <div class=\"listbox-background\">\n <div\n class=\"\n listbox \n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n ${x => x.positionAttribute}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('listbox')}\n >\n ${when(x => x.filterMode !== FilterMode.none, html<Select>`\n <div class=\"filter-field ${x => x.positionAttribute}\">\n <${iconMagnifyingGlassTag} class=\"filter-icon\"></${iconMagnifyingGlassTag}>\n <input\n ${ref('filterInput')}\n class=\"filter-input\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-activedescendant=\"${x => x.ariaActiveDescendant}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @click=\"${(x, c) => x.inputClickHandler(c.event as MouseEvent)}\"\n placeholder=\"${x => filterSearchLabel.getValueFor(x)}\"\n value=\"${x => x.filter}\"\n />\n </div>\n `)}\n <div ${ref('scrollableRegion')}\n class=\"scrollable-region\">\n <slot\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && isListboxOption(n),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n </div>\n ${when(x => (x.filterMode !== FilterMode.none && x.filteredOptions.length === 0), html<Select>`\n <span class=\"no-results-label ${x => x.positionAttribute}\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/select/template.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n ref,\n slotted,\n ViewTemplate,\n when\n} from '@microsoft/fast-element';\nimport {\n endSlotTemplate,\n FoundationElementTemplate,\n SelectOptions,\n startSlotTemplate\n} from '@microsoft/fast-foundation';\nimport type { Select } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { iconMagnifyingGlassTag } from '../icons/magnifying-glass';\nimport {\n filterNoResultsLabel,\n filterSearchLabel\n} from '../label-provider/core/label-tokens';\nimport { FilterMode } from './types';\nimport { ListOptionGroup } from '../list-option-group';\nimport { buttonTag } from '../button';\nimport { iconTimesTag } from '../icons/times';\nimport { ListOption } from '../list-option';\n\nexport const isListOption = (\n el: Element | undefined | null\n): el is ListOption => {\n return el instanceof ListOption;\n};\n\nexport const isListOptionGroup = (\n n: Element | undefined | null\n): n is ListOptionGroup => {\n return n instanceof ListOptionGroup;\n};\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Select>,\nSelectOptions\n> = (context, definition) => html<Select>`\n <template\n class=\"${x => [\n x.collapsible && 'collapsible',\n x.collapsible && x.open && 'open',\n x.disabled && 'disabled',\n x.collapsible && x.position,\n ].filter(Boolean).join(' ')}\"\n aria-activedescendant=\"${x => (x.filterMode === FilterMode.none ? x.ariaActiveDescendant : null)}\"\n aria-controls=\"${x => (x.filterMode === FilterMode.none ? x.ariaControls : null)}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"${x => (x.collapsible ? 'listbox' : null)}\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n ?open=\"${x => x.open}\"\n role=\"combobox\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @contentchange=\"${x => x.updateDisplayValue()}\"\n @focusin=\"${(x, c) => x.focusinHandler(c.event as FocusEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n @mousedown=\"${(x, c) => x.mousedownHandler(c.event as MouseEvent)}\"\n >\n ${when(x => x.collapsible, html<Select>`\n <div\n class=\"control\"\n part=\"control\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('control')}\n >\n ${startSlotTemplate(context, definition)}\n <slot name=\"button-container\">\n <div class=\"selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}\" part=\"selected-value\" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>\n <slot name=\"selected-value\">${x => x.displayValue}</slot>\n </div>\n ${when(x => !x.disabled && x.clearable && !x.displayPlaceholder && x.selectedIndex >= 0, html<Select>`\n <${buttonTag} \n class=\"clear-button\"\n tabindex=\"-1\"\n part=\"clear-button\"\n content-hidden\n appearance=\"ghost\"\n @click=\"${(x, c) => x.clearClickHandler(c.event as MouseEvent)}\">\n <${iconTimesTag} slot=\"start\"></${iconTimesTag}>\n </${buttonTag}>\n `)}\n <div aria-hidden=\"true\" class=\"indicator\" part=\"indicator\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n `)\n }\n <${anchoredRegionTag}\n ${ref('anchoredRegion')}\n class=\"anchored-region\"\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"${x => (x.positionAttribute === DropdownPosition.above ? 'top' : 'bottom')}\"\n vertical-positioning-mode=\"${x => (!x.positionAttribute ? 'dynamic' : 'locktodefault')}\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n @loaded=\"${x => x.regionLoadedHandler()}\"\n ?hidden=\"${x => (x.collapsible ? !x.open : false)}\">\n <div class=\"listbox-background\">\n <div\n class=\"\n listbox \n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n ${x => x.positionAttribute}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('listbox')}\n >\n ${when(x => x.filterMode !== FilterMode.none, html<Select>`\n <div class=\"filter-field ${x => x.positionAttribute}\">\n <${iconMagnifyingGlassTag} class=\"filter-icon\"></${iconMagnifyingGlassTag}>\n <input\n ${ref('filterInput')}\n class=\"filter-input\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-activedescendant=\"${x => x.ariaActiveDescendant}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @click=\"${(x, c) => x.inputClickHandler(c.event as MouseEvent)}\"\n placeholder=\"${x => filterSearchLabel.getValueFor(x)}\"\n value=\"${x => x.filter}\"\n />\n </div>\n `)}\n <div ${ref('scrollableRegion')}\n class=\"scrollable-region\">\n <slot\n name=\"option\"\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && (isListOption(n) || isListOptionGroup(n)),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n </div>\n ${when(x => (x.filterMode !== FilterMode.none && x.filteredOptions.length === 0), html<Select>`\n <span class=\"no-results-label ${x => x.positionAttribute}\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
|
|
@@ -5,7 +5,7 @@ import type { ListOption } from '../../list-option';
|
|
|
5
5
|
* of querying and interacting with the component during tests.
|
|
6
6
|
*/
|
|
7
7
|
export declare class SelectPageObject {
|
|
8
|
-
|
|
8
|
+
protected readonly selectElement: Select;
|
|
9
9
|
constructor(selectElement: Select);
|
|
10
10
|
openAndSetFilterText(filterText: string): Promise<void>;
|
|
11
11
|
closeDropdown(): Promise<void>;
|
|
@@ -14,6 +14,8 @@ export declare class SelectPageObject {
|
|
|
14
14
|
getSelectedOption(): ListOption | null;
|
|
15
15
|
getActiveOption(): ListOption | null;
|
|
16
16
|
getDisplayText(): string;
|
|
17
|
+
getGroupLabels(): string[];
|
|
18
|
+
getGroupOptionLabels(groupIndex: number): string[];
|
|
17
19
|
/**
|
|
18
20
|
* Either opens or closes the dropdown depending on its current state
|
|
19
21
|
*/
|
|
@@ -35,6 +37,7 @@ export declare class SelectPageObject {
|
|
|
35
37
|
pressArrowUpKey(): void;
|
|
36
38
|
pressCharacterKey(character: string): void;
|
|
37
39
|
pressSpaceKey(): Promise<void>;
|
|
40
|
+
clearFilter(): void;
|
|
38
41
|
isDropdownVisible(): boolean;
|
|
39
42
|
isClearButtonVisible(): boolean;
|
|
40
43
|
isFilterInputVisible(): boolean;
|
|
@@ -48,6 +48,13 @@ export class SelectPageObject {
|
|
|
48
48
|
?.textContent ?? '';
|
|
49
49
|
return displayText.trim();
|
|
50
50
|
}
|
|
51
|
+
getGroupLabels() {
|
|
52
|
+
return Array.from(this.selectElement.querySelectorAll('[role="group"]') ?? []).map(group => group.labelContent);
|
|
53
|
+
}
|
|
54
|
+
getGroupOptionLabels(groupIndex) {
|
|
55
|
+
const group = Array.from(this.selectElement.querySelectorAll('[role="group"]') ?? [])[groupIndex];
|
|
56
|
+
return Array.from(group?.querySelectorAll('[role="option"]') ?? []).map(option => option.textContent?.trim() ?? '');
|
|
57
|
+
}
|
|
51
58
|
/**
|
|
52
59
|
* Either opens or closes the dropdown depending on its current state
|
|
53
60
|
*/
|
|
@@ -155,6 +162,14 @@ export class SelectPageObject {
|
|
|
155
162
|
}
|
|
156
163
|
await waitForUpdatesAsync();
|
|
157
164
|
}
|
|
165
|
+
clearFilter() {
|
|
166
|
+
if (this.selectElement.filterMode === FilterMode.none) {
|
|
167
|
+
throw new Error('Select has filterMode of "none" so there is no filter input');
|
|
168
|
+
}
|
|
169
|
+
const filterInput = this.getFilterInput();
|
|
170
|
+
filterInput.value = '';
|
|
171
|
+
filterInput?.dispatchEvent(new InputEvent('input', { inputType: 'deleteContentBackward' }));
|
|
172
|
+
}
|
|
158
173
|
isDropdownVisible() {
|
|
159
174
|
return (this.selectElement.shadowRoot?.querySelector('.listbox') !== null);
|
|
160
175
|
}
|
|
@@ -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';\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(private 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 /**\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 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 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 getGroupOptionLabels(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 /**\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 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "29.1
|
|
3
|
+
"version": "29.2.1",
|
|
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",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@microsoft/fast-element": "^1.12.0",
|
|
67
67
|
"@microsoft/fast-foundation": "^2.49.6",
|
|
68
68
|
"@microsoft/fast-web-utilities": "^6.0.0",
|
|
69
|
-
"@ni/nimble-tokens": "^6.
|
|
69
|
+
"@ni/nimble-tokens": "^6.14.0",
|
|
70
70
|
"@tanstack/table-core": "^8.10.7",
|
|
71
71
|
"@tanstack/virtual-core": "^3.0.0-beta.68",
|
|
72
72
|
"@tiptap/core": "^2.2.2",
|