@spectrum-web-components/picker 0.11.2 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +13 -13
- package/src/Picker.d.ts +0 -1
- package/src/Picker.js +16 -20
- package/src/Picker.js.map +1 -1
- package/test/index.js +11 -3
- package/test/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/picker",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -48,17 +48,17 @@
|
|
|
48
48
|
"lit-html"
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@spectrum-web-components/base": "^0.5.
|
|
52
|
-
"@spectrum-web-components/button": "^0.17.
|
|
53
|
-
"@spectrum-web-components/icon": "^0.11.
|
|
54
|
-
"@spectrum-web-components/icons-ui": "^0.8.
|
|
55
|
-
"@spectrum-web-components/icons-workflow": "^0.8.
|
|
56
|
-
"@spectrum-web-components/menu": "^0.14.
|
|
57
|
-
"@spectrum-web-components/overlay": "^0.16.
|
|
58
|
-
"@spectrum-web-components/popover": "^0.11.
|
|
59
|
-
"@spectrum-web-components/reactive-controllers": "^0.2.
|
|
60
|
-
"@spectrum-web-components/shared": "^0.14.
|
|
61
|
-
"@spectrum-web-components/tray": "^0.3.
|
|
51
|
+
"@spectrum-web-components/base": "^0.5.8",
|
|
52
|
+
"@spectrum-web-components/button": "^0.17.7",
|
|
53
|
+
"@spectrum-web-components/icon": "^0.11.10",
|
|
54
|
+
"@spectrum-web-components/icons-ui": "^0.8.10",
|
|
55
|
+
"@spectrum-web-components/icons-workflow": "^0.8.10",
|
|
56
|
+
"@spectrum-web-components/menu": "^0.14.3",
|
|
57
|
+
"@spectrum-web-components/overlay": "^0.16.4",
|
|
58
|
+
"@spectrum-web-components/popover": "^0.11.15",
|
|
59
|
+
"@spectrum-web-components/reactive-controllers": "^0.2.4",
|
|
60
|
+
"@spectrum-web-components/shared": "^0.14.3",
|
|
61
|
+
"@spectrum-web-components/tray": "^0.3.10",
|
|
62
62
|
"tslib": "^2.0.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"./sync/index.js",
|
|
72
72
|
"./sync/sp-*.js"
|
|
73
73
|
],
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "e5cd4a0db2201b8126eb9133ac3c24172d086359"
|
|
75
75
|
}
|
package/src/Picker.d.ts
CHANGED
|
@@ -87,7 +87,6 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
87
87
|
* by the Menu within the open options overlay.
|
|
88
88
|
*/
|
|
89
89
|
protected updateMenuItems(event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent): void;
|
|
90
|
-
protected updated(changedProperties: PropertyValues): void;
|
|
91
90
|
protected manageSelection(): Promise<void>;
|
|
92
91
|
private menuStatePromise;
|
|
93
92
|
private menuStateResolver;
|
package/src/Picker.js
CHANGED
|
@@ -304,6 +304,22 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
304
304
|
// TODO: Add support functionally and visually for "multiple"
|
|
305
305
|
this.selects = 'single';
|
|
306
306
|
}
|
|
307
|
+
if (changes.has('disabled') && this.disabled) {
|
|
308
|
+
this.open = false;
|
|
309
|
+
}
|
|
310
|
+
if (changes.has('open') &&
|
|
311
|
+
(this.open || typeof changes.get('open') !== 'undefined')) {
|
|
312
|
+
this.menuStatePromise = new Promise((res) => (this.menuStateResolver = res));
|
|
313
|
+
if (this.open) {
|
|
314
|
+
this.openMenu();
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
this.closeMenu();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (changes.has('value') && !changes.has('selectedItem')) {
|
|
321
|
+
this.updateMenuItems();
|
|
322
|
+
}
|
|
307
323
|
super.update(changes);
|
|
308
324
|
}
|
|
309
325
|
get dismissHelper() {
|
|
@@ -388,26 +404,6 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
388
404
|
this._willUpdateItems = false;
|
|
389
405
|
});
|
|
390
406
|
}
|
|
391
|
-
updated(changedProperties) {
|
|
392
|
-
super.updated(changedProperties);
|
|
393
|
-
if (changedProperties.has('disabled') && this.disabled) {
|
|
394
|
-
this.open = false;
|
|
395
|
-
}
|
|
396
|
-
if (changedProperties.has('open') &&
|
|
397
|
-
(this.open || typeof changedProperties.get('open') !== 'undefined')) {
|
|
398
|
-
this.menuStatePromise = new Promise((res) => (this.menuStateResolver = res));
|
|
399
|
-
if (this.open) {
|
|
400
|
-
this.openMenu();
|
|
401
|
-
}
|
|
402
|
-
else {
|
|
403
|
-
this.closeMenu();
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
if (changedProperties.has('value') &&
|
|
407
|
-
!changedProperties.has('selectedItem')) {
|
|
408
|
-
this.updateMenuItems();
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
407
|
async manageSelection() {
|
|
412
408
|
await this.menuStatePromise;
|
|
413
409
|
this.selectionPromise = new Promise((res) => (this.selectionResolver = res));
|
package/src/Picker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.js","sourceRoot":"","sources":["Picker.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n render,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport pickerStyles from './picker.css.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\n\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemAddedOrUpdatedEvent,\n MenuItemChildren,\n MenuItemRemovedEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/tray/sp-tray.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport {\n openOverlay,\n OverlayOptions,\n Placement,\n TriggerInteractions,\n} from '@spectrum-web-components/overlay';\nimport {\n IS_MOBILE,\n MatchMediaController,\n} from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';\n\nconst chevronClass = {\n s: 'spectrum-UIIcon-ChevronDown75',\n m: 'spectrum-UIIcon-ChevronDown100',\n l: 'spectrum-UIIcon-ChevronDown200',\n xl: 'spectrum-UIIcon-ChevronDown300',\n};\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot - menu items to be listed in the Picker\n * @fires change - Announces that the `value` of the element has changed\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class PickerBase extends SizedMixin(Focusable) {\n /**\n * @private\n */\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return await openOverlay(target, interaction, content, options);\n };\n\n protected isMobile = new MatchMediaController(this, IS_MOBILE);\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public get target(): HTMLButtonElement | this {\n return this.button;\n }\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @property({ type: String, reflect: true })\n public icons?: 'only' | 'none';\n\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n @property()\n public label?: string;\n\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n public selects: undefined | 'single' = 'single';\n\n public menuItems: MenuItem[] = [];\n private restoreChildren?: () => void;\n\n public optionsMenu!: Menu;\n\n /**\n * @type {\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\"}\n * @attr\n */\n\n @property()\n public placement: Placement = 'bottom-start';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: String })\n public value = '';\n\n @property({ attribute: false })\n public selectedItem?: MenuItem;\n\n private closeOverlay?: Promise<() => void>;\n\n private popover!: Popover;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\n\n public constructor() {\n super();\n this.onKeydown = this.onKeydown.bind(this);\n }\n\n public get focusElement(): HTMLElement {\n if (this.open) {\n return this.optionsMenu;\n }\n return this.button;\n }\n\n public forceFocusVisible(): void {\n this.focused = true;\n }\n\n public onButtonBlur(): void {\n this.focused = false;\n (this.target as HTMLButtonElement).removeEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n protected onButtonClick(): void {\n this.toggle();\n }\n\n public focus(options?: FocusOptions): void {\n super.focus(options);\n\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public onHelperFocus(): void {\n // set focused to true here instead of onButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public onButtonFocus(): void {\n (this.target as HTMLButtonElement).addEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n public handleChange(event: Event): void {\n event.stopPropagation();\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n this.setValueFromItem(selected, event);\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (event.code !== 'ArrowDown' && event.code !== 'ArrowUp') {\n return;\n }\n event.preventDefault();\n this.toggle(true);\n };\n\n public async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n this.selectedItem = item;\n this.value = item.value;\n this.open = false;\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.selectedItem.selected = false;\n if (oldSelectedItem) {\n oldSelectedItem.selected = true;\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n return;\n }\n if (oldSelectedItem) {\n oldSelectedItem.selected = false;\n }\n item.selected = !!this.selects;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly) {\n return;\n }\n this.open = typeof target !== 'undefined' ? target : !this.open;\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n this.open = false;\n }\n\n public overlayOpenCallback = async (): Promise<void> => {\n this.updateMenuItems();\n await this.itemsUpdated;\n await this.optionsMenu.updateComplete;\n requestAnimationFrame(() => this.menuStateResolver());\n };\n\n public overlayCloseCallback = async (): Promise<void> => {\n if (this.restoreChildren) {\n this.restoreChildren();\n this.restoreChildren = undefined;\n }\n this.close();\n requestAnimationFrame(() => this.menuStateResolver());\n };\n\n private popoverFragment!: DocumentFragment;\n\n private async generatePopover(deprecatedMenu: Menu | null): Promise<void> {\n if (!this.popoverFragment) {\n this.popoverFragment = document.createDocumentFragment();\n }\n render(this.renderPopover, this.popoverFragment, { host: this });\n this.popover = this.popoverFragment.children[0] as Popover;\n this.optionsMenu = this.popover.children[1] as Menu;\n\n if (deprecatedMenu) {\n console.warn(\n `Deprecation Notice: You no longer need to provide an sp-menu child to ${this.tagName.toLowerCase()}. Any styling or attributes on the sp-menu will be ignored.`\n );\n }\n }\n\n private async openMenu(): Promise<void> {\n /* c8 ignore next 9 */\n let reparentableChildren: Element[] = [];\n const deprecatedMenu = this.querySelector(':scope > sp-menu') as Menu;\n\n await this.generatePopover(deprecatedMenu);\n if (deprecatedMenu) {\n reparentableChildren = Array.from(deprecatedMenu.children);\n } else {\n reparentableChildren = Array.from(this.children).filter(\n (element) => {\n return !element.hasAttribute('slot');\n }\n );\n }\n\n if (reparentableChildren.length === 0) {\n this.menuStateResolver();\n return;\n }\n\n this.restoreChildren = reparentChildren<\n Element & { focused?: boolean }\n >(reparentableChildren, this.optionsMenu, {\n position: 'beforeend',\n prepareCallback: (\n el: Element & {\n focused?: boolean | undefined;\n value?: string;\n selected?: boolean;\n }\n ) => {\n if (this.value === el.value) {\n el.selected = true;\n }\n return (el) => {\n if (typeof el.focused !== 'undefined') {\n el.focused = false;\n }\n };\n },\n });\n\n this.sizePopover(this.popover);\n this.closeOverlay = Picker.openOverlay(this, 'modal', this.popover, {\n placement: this.isMobile.matches ? 'none' : this.placement,\n receivesFocus: 'auto',\n });\n }\n\n protected sizePopover(popover: HTMLElement): void {\n if (this.isMobile.matches) {\n popover.style.setProperty('--swc-menu-width', `100%`);\n return;\n }\n if (this.quiet) return;\n // only use `this.offsetWidth` when Standard variant\n popover.style.setProperty('min-width', `${this.offsetWidth}px`);\n }\n\n private async closeMenu(): Promise<void> {\n if (this.closeOverlay) {\n const closeOverlay = this.closeOverlay;\n delete this.closeOverlay;\n (await closeOverlay)();\n }\n }\n\n protected get selectedItemContent(): MenuItemChildren {\n if (this.selectedItem) {\n return this.selectedItem.itemChildren;\n }\n return { icon: [], content: [] };\n }\n\n protected renderLabelContent(content: Node[]): TemplateResult | Node[] {\n if (this.value && this.selectedItem) {\n return content;\n }\n return html`\n <slot name=\"label\">${this.label}</slot>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n };\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span id=\"label\" class=${classMap(labelClasses)}>\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.invalid\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n <sp-icon-chevron100\n class=\"picker ${chevronClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-chevron100>\n `,\n ];\n }\n\n // a helper to throw focus to the button is needed because Safari\n // won't include buttons in the tab order even with tabindex=\"0\"\n protected render(): TemplateResult {\n return html`\n <span\n id=\"focus-helper\"\n tabindex=\"${this.focused ? '-1' : '0'}\"\n @focus=${this.onHelperFocus}\n ></span>\n <button\n aria-haspopup=\"true\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-labelledby=\"button icon label\"\n id=\"button\"\n class=\"button\"\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n ?disabled=${this.disabled}\n tabindex=\"-1\"\n >\n ${this.buttonContent}\n </button>\n `;\n }\n\n protected update(changes: PropertyValues<this>): void {\n if (this.selects) {\n // Always force `selects` to \"single\" when set.\n // TODO: Add support functionally and visually for \"multiple\"\n this.selects = 'single';\n }\n super.update(changes);\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n arial-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected get renderPopover(): TemplateResult {\n const content = html`\n ${this.dismissHelper}\n <sp-menu\n id=\"menu\"\n role=\"${this.listRole}\"\n @change=${this.handleChange}\n .selects=${this.selects}\n ></sp-menu>\n ${this.dismissHelper}\n `;\n if (this.isMobile.matches) {\n return html`\n <sp-tray\n id=\"popover\"\n role=\"dialog\"\n @sp-menu-item-added-or-updated=${this.updateMenuItems}\n .overlayOpenCallback=${this.overlayOpenCallback}\n .overlayCloseCallback=${this.overlayCloseCallback}\n >\n ${content}\n </sp-tray>\n `;\n }\n return html`\n <sp-popover\n id=\"popover\"\n role=\"dialog\"\n @sp-menu-item-added-or-updated=${this.updateMenuItems}\n .overlayOpenCallback=${this.overlayOpenCallback}\n .overlayCloseCallback=${this.overlayCloseCallback}\n >\n ${content}\n </sp-popover>\n `;\n }\n\n private _willUpdateItems = false;\n protected itemsUpdated: Promise<void> = Promise.resolve();\n\n /**\n * Acquire the available MenuItems in the Picker by\n * direct element query or by assuming the list managed\n * by the Menu within the open options overlay.\n */\n protected updateMenuItems(\n event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent\n ): void {\n if (this.open && event?.type === 'sp-menu-item-removed') return;\n if (this._willUpdateItems) return;\n this._willUpdateItems = true;\n if (event?.item === this.selectedItem) {\n this.requestUpdate();\n }\n\n let resolve = (): void => {\n return;\n };\n this.itemsUpdated = new Promise((res) => (resolve = res));\n // Debounce the update so we only update once\n // if multiple items have changed\n window.requestAnimationFrame(async () => {\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.menuItems = this.optionsMenu.childItems;\n } else {\n this.menuItems = [\n ...this.querySelectorAll('sp-menu-item'),\n ] as MenuItem[];\n }\n this.manageSelection();\n resolve();\n this._willUpdateItems = false;\n });\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has('disabled') && this.disabled) {\n this.open = false;\n }\n if (\n changedProperties.has('open') &&\n (this.open || typeof changedProperties.get('open') !== 'undefined')\n ) {\n this.menuStatePromise = new Promise(\n (res) => (this.menuStateResolver = res)\n );\n if (this.open) {\n this.openMenu();\n } else {\n this.closeMenu();\n }\n }\n if (\n changedProperties.has('value') &&\n !changedProperties.has('selectedItem')\n ) {\n this.updateMenuItems();\n }\n }\n\n protected async manageSelection(): Promise<void> {\n await this.menuStatePromise;\n this.selectionPromise = new Promise(\n (res) => (this.selectionResolver = res)\n );\n let selectedItem: MenuItem | undefined;\n this.menuItems.forEach((item) => {\n if (this.value === item.value && !item.disabled) {\n selectedItem = item;\n } else {\n item.selected = false;\n }\n });\n if (selectedItem) {\n selectedItem.selected = !!this.selects;\n this.selectedItem = selectedItem;\n } else {\n this.value = '';\n this.selectedItem = undefined;\n }\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.optionsMenu.updateSelectedItemIndex();\n }\n this.selectionResolver();\n }\n\n private menuStatePromise = Promise.resolve();\n private menuStateResolver!: () => void;\n private selectionPromise = Promise.resolve();\n private selectionResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.menuStatePromise;\n await this.itemsUpdated;\n await this.selectionPromise;\n return complete;\n }\n\n public connectedCallback(): void {\n this.updateMenuItems();\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.updateMenuItems\n );\n this.addEventListener('sp-menu-item-removed', this.updateMenuItems);\n super.connectedCallback();\n }\n\n public disconnectedCallback(): void {\n this.close();\n\n super.disconnectedCallback();\n }\n}\n\nexport class Picker extends PickerBase {\n public static get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const { code } = event;\n this.focused = true;\n if (!code.startsWith('Arrow') || this.readonly) {\n return;\n }\n event.preventDefault();\n if (code === 'ArrowUp' || code === 'ArrowDown') {\n this.toggle(true);\n return;\n }\n const selectedIndex = this.selectedItem\n ? this.menuItems.indexOf(this.selectedItem)\n : -1;\n // use a positive offset to find the first non-disabled item when no selection is available.\n const nextOffset = !this.value || code === 'ArrowRight' ? 1 : -1;\n let nextIndex = selectedIndex + nextOffset;\n while (\n this.menuItems[nextIndex] &&\n this.menuItems[nextIndex].disabled\n ) {\n nextIndex += nextOffset;\n }\n if (!this.menuItems[nextIndex] || this.menuItems[nextIndex].disabled) {\n return;\n }\n if (!this.value || nextIndex !== selectedIndex) {\n this.setValueFromItem(this.menuItems[nextIndex]);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Picker.js","sourceRoot":"","sources":["Picker.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n render,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport pickerStyles from './picker.css.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\n\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemAddedOrUpdatedEvent,\n MenuItemChildren,\n MenuItemRemovedEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/tray/sp-tray.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport {\n openOverlay,\n OverlayOptions,\n Placement,\n TriggerInteractions,\n} from '@spectrum-web-components/overlay';\nimport {\n IS_MOBILE,\n MatchMediaController,\n} from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';\n\nconst chevronClass = {\n s: 'spectrum-UIIcon-ChevronDown75',\n m: 'spectrum-UIIcon-ChevronDown100',\n l: 'spectrum-UIIcon-ChevronDown200',\n xl: 'spectrum-UIIcon-ChevronDown300',\n};\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot - menu items to be listed in the Picker\n * @fires change - Announces that the `value` of the element has changed\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class PickerBase extends SizedMixin(Focusable) {\n /**\n * @private\n */\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return await openOverlay(target, interaction, content, options);\n };\n\n protected isMobile = new MatchMediaController(this, IS_MOBILE);\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public get target(): HTMLButtonElement | this {\n return this.button;\n }\n\n @property({ type: Boolean, reflect: true })\n public override disabled = false;\n\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @property({ type: String, reflect: true })\n public icons?: 'only' | 'none';\n\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n @property()\n public label?: string;\n\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n public selects: undefined | 'single' = 'single';\n\n public menuItems: MenuItem[] = [];\n private restoreChildren?: () => void;\n\n public optionsMenu!: Menu;\n\n /**\n * @type {\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\"}\n * @attr\n */\n\n @property()\n public placement: Placement = 'bottom-start';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: String })\n public value = '';\n\n @property({ attribute: false })\n public selectedItem?: MenuItem;\n\n private closeOverlay?: Promise<() => void>;\n\n private popover!: Popover;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\n\n public constructor() {\n super();\n this.onKeydown = this.onKeydown.bind(this);\n }\n\n public override get focusElement(): HTMLElement {\n if (this.open) {\n return this.optionsMenu;\n }\n return this.button;\n }\n\n public forceFocusVisible(): void {\n this.focused = true;\n }\n\n public onButtonBlur(): void {\n this.focused = false;\n (this.target as HTMLButtonElement).removeEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n protected onButtonClick(): void {\n this.toggle();\n }\n\n public override focus(options?: FocusOptions): void {\n super.focus(options);\n\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public onHelperFocus(): void {\n // set focused to true here instead of onButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public onButtonFocus(): void {\n (this.target as HTMLButtonElement).addEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n public handleChange(event: Event): void {\n event.stopPropagation();\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n this.setValueFromItem(selected, event);\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (event.code !== 'ArrowDown' && event.code !== 'ArrowUp') {\n return;\n }\n event.preventDefault();\n this.toggle(true);\n };\n\n public async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n this.selectedItem = item;\n this.value = item.value;\n this.open = false;\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.selectedItem.selected = false;\n if (oldSelectedItem) {\n oldSelectedItem.selected = true;\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n return;\n }\n if (oldSelectedItem) {\n oldSelectedItem.selected = false;\n }\n item.selected = !!this.selects;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly) {\n return;\n }\n this.open = typeof target !== 'undefined' ? target : !this.open;\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n this.open = false;\n }\n\n public overlayOpenCallback = async (): Promise<void> => {\n this.updateMenuItems();\n await this.itemsUpdated;\n await this.optionsMenu.updateComplete;\n requestAnimationFrame(() => this.menuStateResolver());\n };\n\n public overlayCloseCallback = async (): Promise<void> => {\n if (this.restoreChildren) {\n this.restoreChildren();\n this.restoreChildren = undefined;\n }\n this.close();\n requestAnimationFrame(() => this.menuStateResolver());\n };\n\n private popoverFragment!: DocumentFragment;\n\n private async generatePopover(deprecatedMenu: Menu | null): Promise<void> {\n if (!this.popoverFragment) {\n this.popoverFragment = document.createDocumentFragment();\n }\n render(this.renderPopover, this.popoverFragment, { host: this });\n this.popover = this.popoverFragment.children[0] as Popover;\n this.optionsMenu = this.popover.children[1] as Menu;\n\n if (deprecatedMenu) {\n console.warn(\n `Deprecation Notice: You no longer need to provide an sp-menu child to ${this.tagName.toLowerCase()}. Any styling or attributes on the sp-menu will be ignored.`\n );\n }\n }\n\n private async openMenu(): Promise<void> {\n /* c8 ignore next 9 */\n let reparentableChildren: Element[] = [];\n const deprecatedMenu = this.querySelector(':scope > sp-menu') as Menu;\n\n await this.generatePopover(deprecatedMenu);\n if (deprecatedMenu) {\n reparentableChildren = Array.from(deprecatedMenu.children);\n } else {\n reparentableChildren = Array.from(this.children).filter(\n (element) => {\n return !element.hasAttribute('slot');\n }\n );\n }\n\n if (reparentableChildren.length === 0) {\n this.menuStateResolver();\n return;\n }\n\n this.restoreChildren = reparentChildren<\n Element & { focused?: boolean }\n >(reparentableChildren, this.optionsMenu, {\n position: 'beforeend',\n prepareCallback: (\n el: Element & {\n focused?: boolean | undefined;\n value?: string;\n selected?: boolean;\n }\n ) => {\n if (this.value === el.value) {\n el.selected = true;\n }\n return (el) => {\n if (typeof el.focused !== 'undefined') {\n el.focused = false;\n }\n };\n },\n });\n\n this.sizePopover(this.popover);\n this.closeOverlay = Picker.openOverlay(this, 'modal', this.popover, {\n placement: this.isMobile.matches ? 'none' : this.placement,\n receivesFocus: 'auto',\n });\n }\n\n protected sizePopover(popover: HTMLElement): void {\n if (this.isMobile.matches) {\n popover.style.setProperty('--swc-menu-width', `100%`);\n return;\n }\n if (this.quiet) return;\n // only use `this.offsetWidth` when Standard variant\n popover.style.setProperty('min-width', `${this.offsetWidth}px`);\n }\n\n private async closeMenu(): Promise<void> {\n if (this.closeOverlay) {\n const closeOverlay = this.closeOverlay;\n delete this.closeOverlay;\n (await closeOverlay)();\n }\n }\n\n protected get selectedItemContent(): MenuItemChildren {\n if (this.selectedItem) {\n return this.selectedItem.itemChildren;\n }\n return { icon: [], content: [] };\n }\n\n protected renderLabelContent(content: Node[]): TemplateResult | Node[] {\n if (this.value && this.selectedItem) {\n return content;\n }\n return html`\n <slot name=\"label\">${this.label}</slot>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n };\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span id=\"label\" class=${classMap(labelClasses)}>\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.invalid\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n <sp-icon-chevron100\n class=\"picker ${chevronClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-chevron100>\n `,\n ];\n }\n\n // a helper to throw focus to the button is needed because Safari\n // won't include buttons in the tab order even with tabindex=\"0\"\n protected override render(): TemplateResult {\n return html`\n <span\n id=\"focus-helper\"\n tabindex=\"${this.focused ? '-1' : '0'}\"\n @focus=${this.onHelperFocus}\n ></span>\n <button\n aria-haspopup=\"true\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-labelledby=\"button icon label\"\n id=\"button\"\n class=\"button\"\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n ?disabled=${this.disabled}\n tabindex=\"-1\"\n >\n ${this.buttonContent}\n </button>\n `;\n }\n\n protected override update(changes: PropertyValues<this>): void {\n if (this.selects) {\n // Always force `selects` to \"single\" when set.\n // TODO: Add support functionally and visually for \"multiple\"\n this.selects = 'single';\n }\n if (changes.has('disabled') && this.disabled) {\n this.open = false;\n }\n if (\n changes.has('open') &&\n (this.open || typeof changes.get('open') !== 'undefined')\n ) {\n this.menuStatePromise = new Promise(\n (res) => (this.menuStateResolver = res)\n );\n if (this.open) {\n this.openMenu();\n } else {\n this.closeMenu();\n }\n }\n if (changes.has('value') && !changes.has('selectedItem')) {\n this.updateMenuItems();\n }\n super.update(changes);\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n arial-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected get renderPopover(): TemplateResult {\n const content = html`\n ${this.dismissHelper}\n <sp-menu\n id=\"menu\"\n role=\"${this.listRole}\"\n @change=${this.handleChange}\n .selects=${this.selects}\n ></sp-menu>\n ${this.dismissHelper}\n `;\n if (this.isMobile.matches) {\n return html`\n <sp-tray\n id=\"popover\"\n role=\"dialog\"\n @sp-menu-item-added-or-updated=${this.updateMenuItems}\n .overlayOpenCallback=${this.overlayOpenCallback}\n .overlayCloseCallback=${this.overlayCloseCallback}\n >\n ${content}\n </sp-tray>\n `;\n }\n return html`\n <sp-popover\n id=\"popover\"\n role=\"dialog\"\n @sp-menu-item-added-or-updated=${this.updateMenuItems}\n .overlayOpenCallback=${this.overlayOpenCallback}\n .overlayCloseCallback=${this.overlayCloseCallback}\n >\n ${content}\n </sp-popover>\n `;\n }\n\n private _willUpdateItems = false;\n protected itemsUpdated: Promise<void> = Promise.resolve();\n\n /**\n * Acquire the available MenuItems in the Picker by\n * direct element query or by assuming the list managed\n * by the Menu within the open options overlay.\n */\n protected updateMenuItems(\n event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent\n ): void {\n if (this.open && event?.type === 'sp-menu-item-removed') return;\n if (this._willUpdateItems) return;\n this._willUpdateItems = true;\n if (event?.item === this.selectedItem) {\n this.requestUpdate();\n }\n\n let resolve = (): void => {\n return;\n };\n this.itemsUpdated = new Promise((res) => (resolve = res));\n // Debounce the update so we only update once\n // if multiple items have changed\n window.requestAnimationFrame(async () => {\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.menuItems = this.optionsMenu.childItems;\n } else {\n this.menuItems = [\n ...this.querySelectorAll('sp-menu-item'),\n ] as MenuItem[];\n }\n this.manageSelection();\n resolve();\n this._willUpdateItems = false;\n });\n }\n\n protected async manageSelection(): Promise<void> {\n await this.menuStatePromise;\n this.selectionPromise = new Promise(\n (res) => (this.selectionResolver = res)\n );\n let selectedItem: MenuItem | undefined;\n this.menuItems.forEach((item) => {\n if (this.value === item.value && !item.disabled) {\n selectedItem = item;\n } else {\n item.selected = false;\n }\n });\n if (selectedItem) {\n selectedItem.selected = !!this.selects;\n this.selectedItem = selectedItem;\n } else {\n this.value = '';\n this.selectedItem = undefined;\n }\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.optionsMenu.updateSelectedItemIndex();\n }\n this.selectionResolver();\n }\n\n private menuStatePromise = Promise.resolve();\n private menuStateResolver!: () => void;\n private selectionPromise = Promise.resolve();\n private selectionResolver!: () => void;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.menuStatePromise;\n await this.itemsUpdated;\n await this.selectionPromise;\n return complete;\n }\n\n public override connectedCallback(): void {\n this.updateMenuItems();\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.updateMenuItems\n );\n this.addEventListener('sp-menu-item-removed', this.updateMenuItems);\n super.connectedCallback();\n }\n\n public override disconnectedCallback(): void {\n this.close();\n\n super.disconnectedCallback();\n }\n}\n\nexport class Picker extends PickerBase {\n public static override get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected override onKeydown = (event: KeyboardEvent): void => {\n const { code } = event;\n this.focused = true;\n if (!code.startsWith('Arrow') || this.readonly) {\n return;\n }\n event.preventDefault();\n if (code === 'ArrowUp' || code === 'ArrowDown') {\n this.toggle(true);\n return;\n }\n const selectedIndex = this.selectedItem\n ? this.menuItems.indexOf(this.selectedItem)\n : -1;\n // use a positive offset to find the first non-disabled item when no selection is available.\n const nextOffset = !this.value || code === 'ArrowRight' ? 1 : -1;\n let nextIndex = selectedIndex + nextOffset;\n while (\n this.menuItems[nextIndex] &&\n this.menuItems[nextIndex].disabled\n ) {\n nextIndex += nextOffset;\n }\n if (!this.menuItems[nextIndex] || this.menuItems[nextIndex].disabled) {\n return;\n }\n if (!this.value || nextIndex !== selectedIndex) {\n this.setValueFromItem(this.menuItems[nextIndex]);\n }\n };\n}\n"]}
|
package/test/index.js
CHANGED
|
@@ -79,12 +79,20 @@ export function runPickerTests() {
|
|
|
79
79
|
await elementUpdated(el);
|
|
80
80
|
expect(el.value).to.equal('option-2');
|
|
81
81
|
expect((el.button.textContent || '').trim()).to.equal('Select Inverse');
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
let itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');
|
|
83
|
+
const newLabel1 = 'Invert Selection';
|
|
84
|
+
option2.innerHTML = newLabel1;
|
|
84
85
|
await itemUpdated;
|
|
85
86
|
await elementUpdated(el);
|
|
86
87
|
expect(el.value).to.equal('option-2');
|
|
87
|
-
expect((el.button.textContent || '').trim()).to.equal(
|
|
88
|
+
expect((el.button.textContent || '').trim()).to.equal(newLabel1);
|
|
89
|
+
itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');
|
|
90
|
+
const newLabel2 = 'Other option';
|
|
91
|
+
option2.childNodes[0].textContent = newLabel2;
|
|
92
|
+
await itemUpdated;
|
|
93
|
+
await elementUpdated(el);
|
|
94
|
+
expect(el.value).to.equal('option-2');
|
|
95
|
+
expect((el.button.textContent || '').trim()).to.equal(newLabel2);
|
|
88
96
|
});
|
|
89
97
|
it('accepts new selected item content when open', async () => {
|
|
90
98
|
const option2 = el.querySelector('[value="option-2"');
|
package/test/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Picker } from '..';\n\nimport type { OverlayOpenCloseDetail } from '@spectrum-web-components/overlay';\nimport type { MenuItem } from '@spectrum-web-components/menu';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/shared/src/focus-visible.js';\nimport { spy } from 'sinon';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n tEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n} from '@web/test-runner-commands';\nimport { iconsOnly } from '../stories/picker.stories.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport type { Popover } from '@spectrum-web-components/popover';\n\nconst isMenuActiveElement = function (): boolean {\n return document.activeElement?.localName === 'sp-menu';\n};\n\nexport function runPickerTests(): void {\n let el: Picker;\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div>\n <sp-field-label for=\"picker\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker\"\n style=\"width: 200px; --spectrum-alias-ui-icon-chevron-size-100: 10px;\"\n >\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('standard', () => {\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('loads accessibly', async () => {\n await expect(el).to.be.accessible();\n });\n it('closes accessibly', async () => {\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n const accessibleCloseButton = document.querySelector(\n '.visually-hidden button'\n ) as HTMLButtonElement;\n\n const closed = oneEvent(el, 'sp-closed');\n accessibleCloseButton.click();\n await closed;\n\n expect(el.open).to.be.false;\n });\n it('accepts new selected item content', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(option2);\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n const itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Invert Selection'\n );\n });\n it('accepts new selected item content when open', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n const itemUpdated = oneEvent(\n option2,\n 'sp-menu-item-added-or-updated'\n );\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Invert Selection'\n );\n });\n it('unsets value when children removed', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n\n const items = el.querySelectorAll('sp-menu-item');\n const removals: Promise<unknown>[] = [];\n items.forEach((item) => {\n const removal = oneEvent(el, 'sp-menu-item-removed');\n item.remove();\n removals.push(removal);\n });\n await Promise.all(removals);\n await elementUpdated(el);\n expect(el.value).to.equal('');\n expect((el.button.textContent || '').trim()).to.equal('');\n });\n it('accepts a new item and value at the same time', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await elementUpdated(el);\n\n el.value = 'option-new';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-new');\n });\n it('accepts a new item that can be selected', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n\n await elementUpdated(item);\n await elementUpdated(el);\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n const close = oneEvent(el, 'sp-closed');\n item.click();\n await close;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'first time').to.equal('option-new');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'second time').to.equal('option-new');\n });\n it('manages its \"name\" value in the accessibility tree', async () => {\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live? Select Inverse'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('manages `aria-activedescendant`', async () => {\n const firstItem = el.querySelector('sp-menu-item:nth-child(1)');\n const secondItem = el.querySelector('sp-menu-item:nth-child(2)');\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(firstItem?.id);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(secondItem?.id);\n });\n it('renders invalid accessibly', async () => {\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.true;\n await expect(el).to.be.accessible();\n });\n it('renders selection accessibly', async () => {\n el.value = 'option-2';\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('opens with visible focus on a menu item on `DownArrow`', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n await waitUntil(() => !firstItem.focused, 'not visually focused');\n });\n it('opens without visible focus on a menu item on click', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n const boundingRect = el.getBoundingClientRect();\n\n expect(firstItem.focused, 'not visually focused').to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'still not visually focused').to.be.false;\n });\n it('closes when becoming disabled', async () => {\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('closes when clicking away', async () => {\n el.id = 'closing';\n const other = document.createElement('div');\n document.body.append(other);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n other.click();\n await waitUntil(() => !el.open, 'closed');\n\n other.remove();\n });\n it('selects', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n it('re-selects', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const opened2 = oneEvent(el, 'sp-opened');\n button.click();\n await opened2;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const closed2 = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed2;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('dispatches bubbling and composed events', async () => {\n const changeSpy = spy();\n const parent = el.parentElement as HTMLElement;\n parent.attachShadow({ mode: 'open' });\n (parent.shadowRoot as ShadowRoot).append(el);\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n parent.addEventListener('change', () => changeSpy());\n\n expect(el.value).to.equal('');\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.value).to.equal(secondItem.value);\n expect(changeSpy.calledOnce).to.be.true;\n });\n it('can have selection prevented', async () => {\n const preventChangeSpy = spy();\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n let opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (event: Event): void => {\n event.preventDefault();\n preventChangeSpy();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n opened = oneEvent(el, 'sp-opened');\n secondItem.click();\n await closed;\n await opened;\n await elementUpdated(el);\n expect(preventChangeSpy.calledOnce).to.be.true;\n expect(secondItem.selected, 'selection prevented').to.be.false;\n });\n it('can throw focus after `change`', async () => {\n const input = document.createElement('input');\n document.body.append(input);\n\n await elementUpdated(el);\n\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (): void => {\n input.focus();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.value, 'value changed').to.equal('option-2');\n expect(secondItem.selected, 'selected changed').to.be.true;\n await waitUntil(\n () => document.activeElement === input,\n 'focus throw'\n );\n input.remove();\n });\n it('opens on ArrowUp', async () => {\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n button.dispatchEvent(tEvent());\n await elementUpdated(el);\n\n expect(el.open, 'still closed').to.be.false;\n\n button.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowUp').to.be.true;\n\n await waitUntil(\n () => document.querySelector('active-overlay') !== null,\n 'an active-overlay has been inserted on the page'\n );\n\n button.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n key: 'Escape',\n code: 'Escape',\n })\n );\n await elementUpdated(el);\n await waitUntil(() => el.open === false, 'closed by Escape');\n await waitUntil(\n () => document.querySelector('active-overlay') === null,\n 'an active-overlay has been inserted on the page'\n );\n });\n it('opens on ArrowDown', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowDownEvent());\n await opened;\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowDown').to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('quick selects on ArrowLeft/Right', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(1);\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.calledWith('option-2'));\n\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(5);\n expect(selectionSpy.calledWith('Save Selection'));\n expect(selectionSpy.calledWith('Make Work Path')).to.be.false;\n });\n it('quick selects first item on ArrowRight when no value', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n });\n it('loads', async () => {\n expect(el).to.not.be.undefined;\n });\n it('refocuses on list when open', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n await sendKeys({ press: 'Enter' });\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n el.blur();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n // Force :focus-visible heuristic\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowUp' });\n expect(firstItem.focused).to.be.true;\n });\n it('does not allow tabing to close', async () => {\n el.open = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n\n await sendKeys({ press: 'Tab' });\n\n expect(el.open, 'stays open').to.be.true;\n });\n describe('tab order', () => {\n let input1: HTMLInputElement;\n let input2: HTMLInputElement;\n beforeEach(() => {\n const surroundingInput = (): HTMLInputElement => {\n const input = document.createElement('input');\n input.type = 'text';\n input.tabIndex = 0;\n return input;\n };\n input1 = surroundingInput();\n input2 = surroundingInput();\n\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n });\n afterEach(() => {\n input1.remove();\n input2.remove();\n });\n it('tabs forward through the element', async () => {\n // start at input1\n input1.focus();\n await nextFrame();\n expect(document.activeElement === input1, 'focuses input 1').to\n .true;\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // tab through the picker to input2\n focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n expect(document.activeElement === input2, 'focuses input 2').to\n .true;\n });\n it('shift+tabs backwards through the element', async () => {\n // start at input1\n input2.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses input 2').to.equal(\n input2\n );\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement, 'focuses el').to.equal(el);\n // tab through the picker to input2\n focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n expect(document.activeElement, 'focuses input 1').to.equal(\n input1\n );\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay forward', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n const blured = oneEvent(activeElement, 'blur');\n await sendKeys({ press: 'Tab' });\n await blured;\n\n expect(el.open).to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay backwards', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n const blured = oneEvent(activeElement, 'blur');\n await sendKeys({ press: 'Shift+Tab' });\n await blured;\n\n expect(el.open).to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n });\n it('can close and immediate tab to the next tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input2).to.be.true;\n });\n it('can close and immediate shift+tab to the previous tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input1).to.be.true;\n });\n });\n it('does not open when [readonly]', async () => {\n el.readonly = true;\n\n await elementUpdated(el);\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('scrolls selected into view on open', async () => {\n await (\n el as unknown as { generatePopover(): void }\n ).generatePopover();\n (el as unknown as { popover: Popover }).popover.style.height =\n '40px';\n\n const firstItem = el.querySelector(\n 'sp-menu-item:first-child'\n ) as MenuItem;\n const lastItem = el.querySelector(\n 'sp-menu-item:last-child'\n ) as MenuItem;\n lastItem.disabled = false;\n el.value = lastItem.value;\n\n await elementUpdated(el);\n\n el.open = true;\n\n await elementUpdated(el);\n await waitUntil(() => isMenuActiveElement(), 'first item focused');\n const getParentOffset = (el: HTMLElement): number => {\n const parentScroll = (el.parentElement as HTMLElement)\n .scrollTop;\n const parentOffset = el.offsetTop - parentScroll;\n return parentOffset;\n };\n expect(getParentOffset(lastItem)).to.be.lessThan(40);\n expect(getParentOffset(firstItem)).to.be.lessThan(-1);\n\n lastItem.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true })\n );\n lastItem.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n await nextFrame();\n expect(getParentOffset(lastItem)).to.be.greaterThan(40);\n expect(getParentOffset(firstItem)).to.be.greaterThan(-1);\n });\n });\n describe('slotted label', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-slotted\">\n Where do you live?\n </sp-field-label>\n <sp-picker id=\"picker-slotted\">\n <span slot=\"label\">\n Select a Country with a very long label, too\n long in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n it('loads accessibly w/ slotted label', async () => {\n await expect(el).to.be.accessible();\n });\n });\n describe('deprecated', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-deprecated\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-deprecated\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>\n Make Work Path\n </sp-menu-item>\n </sp-menu>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('selects with deprecated syntax', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n });\n it('manages its \"name\" value in the accessibility tree when [icons-only]', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${iconsOnly({})}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Delete'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = '2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Copy'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('toggles between pickers', async () => {\n const el2 = await pickerFixture();\n const el1 = await pickerFixture();\n\n el1.id = 'away';\n el2.id = 'other';\n\n await Promise.all([elementUpdated(el1), elementUpdated(el2)]);\n\n expect(el1.open, 'closed 1').to.be.false;\n expect(el2.open, 'closed 1').to.be.false;\n let open = oneEvent(el1, 'sp-opened');\n el1.click();\n await open;\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n open = oneEvent(el2, 'sp-opened');\n let closed = oneEvent(el1, 'sp-closed');\n el2.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.false;\n expect(el2.open).to.be.true;\n\n open = oneEvent(el1, 'sp-opened');\n closed = oneEvent(el2, 'sp-closed');\n el1.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n closed = oneEvent(el1, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el1.open).to.be.false;\n });\n it('displays selected item text by default', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"inverse\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(\n () => el.selectedItem?.itemText === 'Select Inverse',\n `Selected Item Text: ${el.selectedItem?.itemText}`\n );\n\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n expect(el.value).to.equal('inverse');\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n\n el.focus();\n await elementUpdated(el);\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n await elementUpdated(el.optionsMenu);\n\n expect(\n el.optionsMenu === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n expect(firstItem.focused, 'firstItem NOT \"focused\"').to.be.false;\n expect(secondItem.focused, 'secondItem \"focused\"').to.be.true;\n expect(el.optionsMenu.getAttribute('aria-activedescendant')).to.equal(\n secondItem.id\n );\n });\n it('resets value when item not available', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"missing\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(() => el.value === '');\n\n expect(el.value).to.equal('');\n expect(el.selectedItem?.itemText).to.be.undefined;\n });\n it('allows event listeners on child items', async () => {\n const mouseenterSpy = spy();\n const handleMouseenter = (): void => mouseenterSpy();\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item\n value=\"deselect\"\n @mouseenter=${handleMouseenter}\n >\n Deselect Text\n </sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n\n const hoverEl = el.querySelector('sp-menu-item') as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n hoverEl.dispatchEvent(new MouseEvent('mouseenter'));\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(mouseenterSpy.calledOnce).to.be.true;\n });\n it('dispatches events on open/close', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const handleOpenedSpy = (event: Event): void => openedSpy(event);\n const handleClosedSpy = (event: Event): void => closedSpy(event);\n\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n @sp-opened=${handleOpenedSpy}\n @sp-closed=${handleClosedSpy}\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(openedSpy.calledOnce).to.be.true;\n expect(closedSpy.calledOnce).to.be.false;\n\n const openedEvent = openedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(openedEvent.detail.interaction).to.equal('modal');\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(closedSpy.calledOnce).to.be.true;\n\n const closedEvent = closedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(closedEvent.detail.interaction).to.equal('modal');\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Picker } from '..';\n\nimport type { OverlayOpenCloseDetail } from '@spectrum-web-components/overlay';\nimport type { MenuItem } from '@spectrum-web-components/menu';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/shared/src/focus-visible.js';\nimport { spy } from 'sinon';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n tEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n} from '@web/test-runner-commands';\nimport { iconsOnly } from '../stories/picker.stories.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport type { Popover } from '@spectrum-web-components/popover';\n\nconst isMenuActiveElement = function (): boolean {\n return document.activeElement?.localName === 'sp-menu';\n};\n\nexport function runPickerTests(): void {\n let el: Picker;\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div>\n <sp-field-label for=\"picker\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker\"\n style=\"width: 200px; --spectrum-alias-ui-icon-chevron-size-100: 10px;\"\n >\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('standard', () => {\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('loads accessibly', async () => {\n await expect(el).to.be.accessible();\n });\n it('closes accessibly', async () => {\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n const accessibleCloseButton = document.querySelector(\n '.visually-hidden button'\n ) as HTMLButtonElement;\n\n const closed = oneEvent(el, 'sp-closed');\n accessibleCloseButton.click();\n await closed;\n\n expect(el.open).to.be.false;\n });\n it('accepts new selected item content', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(option2);\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n let itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel1 = 'Invert Selection';\n option2.innerHTML = newLabel1;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(newLabel1);\n itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel2 = 'Other option';\n option2.childNodes[0].textContent = newLabel2;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(newLabel2);\n });\n it('accepts new selected item content when open', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n const itemUpdated = oneEvent(\n option2,\n 'sp-menu-item-added-or-updated'\n );\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Invert Selection'\n );\n });\n it('unsets value when children removed', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n\n const items = el.querySelectorAll('sp-menu-item');\n const removals: Promise<unknown>[] = [];\n items.forEach((item) => {\n const removal = oneEvent(el, 'sp-menu-item-removed');\n item.remove();\n removals.push(removal);\n });\n await Promise.all(removals);\n await elementUpdated(el);\n expect(el.value).to.equal('');\n expect((el.button.textContent || '').trim()).to.equal('');\n });\n it('accepts a new item and value at the same time', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await elementUpdated(el);\n\n el.value = 'option-new';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-new');\n });\n it('accepts a new item that can be selected', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n\n await elementUpdated(item);\n await elementUpdated(el);\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n const close = oneEvent(el, 'sp-closed');\n item.click();\n await close;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'first time').to.equal('option-new');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'second time').to.equal('option-new');\n });\n it('manages its \"name\" value in the accessibility tree', async () => {\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live? Select Inverse'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('manages `aria-activedescendant`', async () => {\n const firstItem = el.querySelector('sp-menu-item:nth-child(1)');\n const secondItem = el.querySelector('sp-menu-item:nth-child(2)');\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(firstItem?.id);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(secondItem?.id);\n });\n it('renders invalid accessibly', async () => {\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.true;\n await expect(el).to.be.accessible();\n });\n it('renders selection accessibly', async () => {\n el.value = 'option-2';\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('opens with visible focus on a menu item on `DownArrow`', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n await waitUntil(() => !firstItem.focused, 'not visually focused');\n });\n it('opens without visible focus on a menu item on click', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n const boundingRect = el.getBoundingClientRect();\n\n expect(firstItem.focused, 'not visually focused').to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'still not visually focused').to.be.false;\n });\n it('closes when becoming disabled', async () => {\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('closes when clicking away', async () => {\n el.id = 'closing';\n const other = document.createElement('div');\n document.body.append(other);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n other.click();\n await waitUntil(() => !el.open, 'closed');\n\n other.remove();\n });\n it('selects', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n it('re-selects', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const opened2 = oneEvent(el, 'sp-opened');\n button.click();\n await opened2;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const closed2 = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed2;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('dispatches bubbling and composed events', async () => {\n const changeSpy = spy();\n const parent = el.parentElement as HTMLElement;\n parent.attachShadow({ mode: 'open' });\n (parent.shadowRoot as ShadowRoot).append(el);\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n parent.addEventListener('change', () => changeSpy());\n\n expect(el.value).to.equal('');\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.value).to.equal(secondItem.value);\n expect(changeSpy.calledOnce).to.be.true;\n });\n it('can have selection prevented', async () => {\n const preventChangeSpy = spy();\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n let opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (event: Event): void => {\n event.preventDefault();\n preventChangeSpy();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n opened = oneEvent(el, 'sp-opened');\n secondItem.click();\n await closed;\n await opened;\n await elementUpdated(el);\n expect(preventChangeSpy.calledOnce).to.be.true;\n expect(secondItem.selected, 'selection prevented').to.be.false;\n });\n it('can throw focus after `change`', async () => {\n const input = document.createElement('input');\n document.body.append(input);\n\n await elementUpdated(el);\n\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (): void => {\n input.focus();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.value, 'value changed').to.equal('option-2');\n expect(secondItem.selected, 'selected changed').to.be.true;\n await waitUntil(\n () => document.activeElement === input,\n 'focus throw'\n );\n input.remove();\n });\n it('opens on ArrowUp', async () => {\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n button.dispatchEvent(tEvent());\n await elementUpdated(el);\n\n expect(el.open, 'still closed').to.be.false;\n\n button.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowUp').to.be.true;\n\n await waitUntil(\n () => document.querySelector('active-overlay') !== null,\n 'an active-overlay has been inserted on the page'\n );\n\n button.dispatchEvent(\n new KeyboardEvent('keyup', {\n bubbles: true,\n composed: true,\n cancelable: true,\n key: 'Escape',\n code: 'Escape',\n })\n );\n await elementUpdated(el);\n await waitUntil(() => el.open === false, 'closed by Escape');\n await waitUntil(\n () => document.querySelector('active-overlay') === null,\n 'an active-overlay has been inserted on the page'\n );\n });\n it('opens on ArrowDown', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowDownEvent());\n await opened;\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowDown').to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('quick selects on ArrowLeft/Right', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(1);\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.calledWith('option-2'));\n\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(5);\n expect(selectionSpy.calledWith('Save Selection'));\n expect(selectionSpy.calledWith('Make Work Path')).to.be.false;\n });\n it('quick selects first item on ArrowRight when no value', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n });\n it('loads', async () => {\n expect(el).to.not.be.undefined;\n });\n it('refocuses on list when open', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n await sendKeys({ press: 'Enter' });\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n el.blur();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n // Force :focus-visible heuristic\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowUp' });\n expect(firstItem.focused).to.be.true;\n });\n it('does not allow tabing to close', async () => {\n el.open = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n\n await sendKeys({ press: 'Tab' });\n\n expect(el.open, 'stays open').to.be.true;\n });\n describe('tab order', () => {\n let input1: HTMLInputElement;\n let input2: HTMLInputElement;\n beforeEach(() => {\n const surroundingInput = (): HTMLInputElement => {\n const input = document.createElement('input');\n input.type = 'text';\n input.tabIndex = 0;\n return input;\n };\n input1 = surroundingInput();\n input2 = surroundingInput();\n\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n });\n afterEach(() => {\n input1.remove();\n input2.remove();\n });\n it('tabs forward through the element', async () => {\n // start at input1\n input1.focus();\n await nextFrame();\n expect(document.activeElement === input1, 'focuses input 1').to\n .true;\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // tab through the picker to input2\n focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n expect(document.activeElement === input2, 'focuses input 2').to\n .true;\n });\n it('shift+tabs backwards through the element', async () => {\n // start at input1\n input2.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses input 2').to.equal(\n input2\n );\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement, 'focuses el').to.equal(el);\n // tab through the picker to input2\n focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n expect(document.activeElement, 'focuses input 1').to.equal(\n input1\n );\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay forward', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n const blured = oneEvent(activeElement, 'blur');\n await sendKeys({ press: 'Tab' });\n await blured;\n\n expect(el.open).to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay backwards', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n const blured = oneEvent(activeElement, 'blur');\n await sendKeys({ press: 'Shift+Tab' });\n await blured;\n\n expect(el.open).to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n });\n it('can close and immediate tab to the next tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input2).to.be.true;\n });\n it('can close and immediate shift+tab to the previous tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input1).to.be.true;\n });\n });\n it('does not open when [readonly]', async () => {\n el.readonly = true;\n\n await elementUpdated(el);\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('scrolls selected into view on open', async () => {\n await (\n el as unknown as { generatePopover(): void }\n ).generatePopover();\n (el as unknown as { popover: Popover }).popover.style.height =\n '40px';\n\n const firstItem = el.querySelector(\n 'sp-menu-item:first-child'\n ) as MenuItem;\n const lastItem = el.querySelector(\n 'sp-menu-item:last-child'\n ) as MenuItem;\n lastItem.disabled = false;\n el.value = lastItem.value;\n\n await elementUpdated(el);\n\n el.open = true;\n\n await elementUpdated(el);\n await waitUntil(() => isMenuActiveElement(), 'first item focused');\n const getParentOffset = (el: HTMLElement): number => {\n const parentScroll = (el.parentElement as HTMLElement)\n .scrollTop;\n const parentOffset = el.offsetTop - parentScroll;\n return parentOffset;\n };\n expect(getParentOffset(lastItem)).to.be.lessThan(40);\n expect(getParentOffset(firstItem)).to.be.lessThan(-1);\n\n lastItem.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true })\n );\n lastItem.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n await nextFrame();\n expect(getParentOffset(lastItem)).to.be.greaterThan(40);\n expect(getParentOffset(firstItem)).to.be.greaterThan(-1);\n });\n });\n describe('slotted label', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-slotted\">\n Where do you live?\n </sp-field-label>\n <sp-picker id=\"picker-slotted\">\n <span slot=\"label\">\n Select a Country with a very long label, too\n long in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n it('loads accessibly w/ slotted label', async () => {\n await expect(el).to.be.accessible();\n });\n });\n describe('deprecated', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-deprecated\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-deprecated\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>\n Make Work Path\n </sp-menu-item>\n </sp-menu>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('selects with deprecated syntax', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n });\n it('manages its \"name\" value in the accessibility tree when [icons-only]', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${iconsOnly({})}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Delete'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = '2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Copy'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('toggles between pickers', async () => {\n const el2 = await pickerFixture();\n const el1 = await pickerFixture();\n\n el1.id = 'away';\n el2.id = 'other';\n\n await Promise.all([elementUpdated(el1), elementUpdated(el2)]);\n\n expect(el1.open, 'closed 1').to.be.false;\n expect(el2.open, 'closed 1').to.be.false;\n let open = oneEvent(el1, 'sp-opened');\n el1.click();\n await open;\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n open = oneEvent(el2, 'sp-opened');\n let closed = oneEvent(el1, 'sp-closed');\n el2.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.false;\n expect(el2.open).to.be.true;\n\n open = oneEvent(el1, 'sp-opened');\n closed = oneEvent(el2, 'sp-closed');\n el1.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n closed = oneEvent(el1, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el1.open).to.be.false;\n });\n it('displays selected item text by default', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"inverse\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(\n () => el.selectedItem?.itemText === 'Select Inverse',\n `Selected Item Text: ${el.selectedItem?.itemText}`\n );\n\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n expect(el.value).to.equal('inverse');\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n\n el.focus();\n await elementUpdated(el);\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n await elementUpdated(el.optionsMenu);\n\n expect(\n el.optionsMenu === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n expect(firstItem.focused, 'firstItem NOT \"focused\"').to.be.false;\n expect(secondItem.focused, 'secondItem \"focused\"').to.be.true;\n expect(el.optionsMenu.getAttribute('aria-activedescendant')).to.equal(\n secondItem.id\n );\n });\n it('resets value when item not available', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"missing\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(() => el.value === '');\n\n expect(el.value).to.equal('');\n expect(el.selectedItem?.itemText).to.be.undefined;\n });\n it('allows event listeners on child items', async () => {\n const mouseenterSpy = spy();\n const handleMouseenter = (): void => mouseenterSpy();\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item\n value=\"deselect\"\n @mouseenter=${handleMouseenter}\n >\n Deselect Text\n </sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n\n const hoverEl = el.querySelector('sp-menu-item') as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n hoverEl.dispatchEvent(new MouseEvent('mouseenter'));\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(mouseenterSpy.calledOnce).to.be.true;\n });\n it('dispatches events on open/close', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const handleOpenedSpy = (event: Event): void => openedSpy(event);\n const handleClosedSpy = (event: Event): void => closedSpy(event);\n\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n @sp-opened=${handleOpenedSpy}\n @sp-closed=${handleClosedSpy}\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(openedSpy.calledOnce).to.be.true;\n expect(closedSpy.calledOnce).to.be.false;\n\n const openedEvent = openedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(openedEvent.detail.interaction).to.equal('modal');\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(closedSpy.calledOnce).to.be.true;\n\n const closedEvent = closedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(closedEvent.detail.interaction).to.equal('modal');\n });\n}\n"]}
|