@spectrum-web-components/picker 1.11.1 → 1.11.2
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 +15 -15
- package/src/Picker.dev.js +10 -2
- package/src/Picker.dev.js.map +2 -2
- package/src/Picker.js +1 -1
- package/src/Picker.js.map +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/picker",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -88,20 +88,20 @@
|
|
|
88
88
|
"css"
|
|
89
89
|
],
|
|
90
90
|
"dependencies": {
|
|
91
|
-
"@spectrum-web-components/base": "1.11.
|
|
92
|
-
"@spectrum-web-components/button": "1.11.
|
|
93
|
-
"@spectrum-web-components/field-label": "1.11.
|
|
94
|
-
"@spectrum-web-components/icon": "1.11.
|
|
95
|
-
"@spectrum-web-components/icons-ui": "1.11.
|
|
96
|
-
"@spectrum-web-components/icons-workflow": "1.11.
|
|
97
|
-
"@spectrum-web-components/menu": "1.11.
|
|
98
|
-
"@spectrum-web-components/overlay": "1.11.
|
|
99
|
-
"@spectrum-web-components/popover": "1.11.
|
|
100
|
-
"@spectrum-web-components/progress-circle": "1.11.
|
|
101
|
-
"@spectrum-web-components/reactive-controllers": "1.11.
|
|
102
|
-
"@spectrum-web-components/shared": "1.11.
|
|
103
|
-
"@spectrum-web-components/tooltip": "1.11.
|
|
104
|
-
"@spectrum-web-components/tray": "1.11.
|
|
91
|
+
"@spectrum-web-components/base": "1.11.2",
|
|
92
|
+
"@spectrum-web-components/button": "1.11.2",
|
|
93
|
+
"@spectrum-web-components/field-label": "1.11.2",
|
|
94
|
+
"@spectrum-web-components/icon": "1.11.2",
|
|
95
|
+
"@spectrum-web-components/icons-ui": "1.11.2",
|
|
96
|
+
"@spectrum-web-components/icons-workflow": "1.11.2",
|
|
97
|
+
"@spectrum-web-components/menu": "1.11.2",
|
|
98
|
+
"@spectrum-web-components/overlay": "1.11.2",
|
|
99
|
+
"@spectrum-web-components/popover": "1.11.2",
|
|
100
|
+
"@spectrum-web-components/progress-circle": "1.11.2",
|
|
101
|
+
"@spectrum-web-components/reactive-controllers": "1.11.2",
|
|
102
|
+
"@spectrum-web-components/shared": "1.11.2",
|
|
103
|
+
"@spectrum-web-components/tooltip": "1.11.2",
|
|
104
|
+
"@spectrum-web-components/tray": "1.11.2"
|
|
105
105
|
},
|
|
106
106
|
"types": "./src/index.d.ts",
|
|
107
107
|
"customElements": "custom-elements.json",
|
package/src/Picker.dev.js
CHANGED
|
@@ -699,8 +699,16 @@ export class PickerBase extends SizedMixin(SpectrumElement, {
|
|
|
699
699
|
selectedItem.selected = !!this.selects;
|
|
700
700
|
this.selectedItem = selectedItem;
|
|
701
701
|
} else {
|
|
702
|
-
|
|
703
|
-
|
|
702
|
+
const hasItemsWithValues = this.menuItems.some(
|
|
703
|
+
(item) => {
|
|
704
|
+
var _a;
|
|
705
|
+
return item.value != null || ((_a = item.getAttribute) == null ? void 0 : _a.call(item, "value")) != null;
|
|
706
|
+
}
|
|
707
|
+
);
|
|
708
|
+
if (this.menuItems.length > 0 && hasItemsWithValues) {
|
|
709
|
+
this.value = "";
|
|
710
|
+
this.selectedItem = void 0;
|
|
711
|
+
}
|
|
704
712
|
}
|
|
705
713
|
if (this.open) {
|
|
706
714
|
await this.optionsMenu.updateComplete;
|
package/src/Picker.dev.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["Picker.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n classMap,\n ifDefined,\n StyleInfo,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport type { FieldLabel } from '@spectrum-web-components/field-label';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemChildren,\n MenuItemKeydownEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport { Placement } from '@spectrum-web-components/overlay';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\nimport type { SlottableRequestEvent } from '@spectrum-web-components/overlay/src/slottable-request-event.js';\nimport { DependencyManagerController } from '@spectrum-web-components/reactive-controllers/src/DependencyManger.js';\nimport {\n IS_MOBILE,\n IS_TOUCH_DEVICE,\n MatchMediaController,\n} from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';\nimport type { Tooltip } from '@spectrum-web-components/tooltip';\nimport { DesktopController } from './DesktopController.dev.js'\nimport { MobileController } from './MobileController.dev.js'\nimport pickerStyles from './picker.css.js';\nimport { strategies } from './strategies.dev.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\nexport const DESCRIPTION_ID = 'option-picker';\n\n/**\n * @element sp-picker\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 */\nexport class PickerBase extends SizedMixin(SpectrumElement, {\n noDefaultSize: true,\n}) {\n static override shadowRootOptions = {\n ...SpectrumElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public isMobile = new MatchMediaController(this, IS_MOBILE);\n\n public isTouchDevice = new MatchMediaController(this, IS_TOUCH_DEVICE);\n\n public strategy!: DesktopController | MobileController;\n\n @state()\n appliedLabel?: string;\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public dependencyManager = new DependencyManagerController(this);\n\n private deprecatedMenu: Menu | null = null;\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 /**\n * Forces the Picker to render as a popover on mobile instead of a tray.\n *\n * @memberof PickerBase\n */\n @property({ type: Boolean, reflect: true, attribute: 'force-popover' })\n public forcePopover = false;\n\n /** Whether the items are currently loading. */\n @property({ type: Boolean, reflect: true })\n public pending = false;\n\n /** Defines a string value that labels the Picker while it is in pending state. */\n @property({ type: String, attribute: 'pending-label' })\n public pendingLabel = 'Pending';\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 @state()\n public labelAlignment?: 'inline';\n\n protected get menuItems(): MenuItem[] {\n return this.optionsMenu.childItems;\n }\n\n @query('sp-menu')\n public optionsMenu!: Menu;\n\n /**\n * @deprecated\n * */\n public get selfManageFocusElement(): boolean {\n return true;\n }\n\n @query('sp-overlay')\n public overlayElement!: Overlay;\n\n protected tooltipEl?: Tooltip;\n\n /**\n * @type {\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"}\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 get selectedItem(): MenuItem | undefined {\n return this._selectedItem;\n }\n\n public set selectedItem(selectedItem: MenuItem | undefined) {\n this.selectedItemContent = selectedItem\n ? selectedItem.itemChildren\n : undefined;\n\n if (selectedItem === this.selectedItem) return;\n const oldSelectedItem = this.selectedItem;\n this._selectedItem = selectedItem;\n this.requestUpdate('selectedItem', oldSelectedItem);\n }\n\n _selectedItem?: MenuItem;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\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 if (this.disabled) {\n return;\n }\n\n this.focused = true;\n }\n\n // handled by interaction controller, desktop or mobile; this is only called with a programmatic this.click()\n public override click(): void {\n this.toggle();\n }\n\n // pointer events handled by interaction controller, desktop or mobile; this is only called with a programmatic this.button.click()\n public handleButtonClick(): void {\n if (this.disabled) {\n return;\n }\n this.toggle();\n }\n\n public handleButtonBlur(): void {\n this.focused = false;\n }\n\n public override focus(options?: FocusOptions): void {\n this.focusElement?.focus(options);\n }\n /**\n * @deprecated - Use `focus` instead.\n */\n public handleHelperFocus(): void {\n // set focused to true here instead of handleButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public handleFocus(): void {\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public handleChange(event: Event): void {\n if (this.strategy) {\n this.strategy.preventNextToggle = 'no';\n }\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n event.stopPropagation();\n if (event.cancelable) {\n this.setValueFromItem(selected, event);\n } else {\n // Non-cancelable \"change\" events announce a selection with no value\n // change that should close the Picker element.\n this.open = false;\n if (this.strategy) {\n this.strategy.open = false;\n }\n }\n }\n\n public handleButtonFocus(event: FocusEvent): void {\n this.strategy?.handleButtonFocus(event);\n }\n\n protected handleEscape = (\n event: MenuItemKeydownEvent | KeyboardEvent\n ): void => {\n if (event.key === 'Escape' && this.open) {\n event.stopPropagation();\n event.preventDefault();\n this.toggle(false);\n }\n };\n\n protected handleKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (\n !['ArrowUp', 'ArrowDown', 'Enter', ' ', 'Escape'].includes(\n event.key\n )\n ) {\n return;\n }\n if (event.key === 'Escape') {\n this.handleEscape(event);\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.keyboardOpen();\n };\n\n protected async keyboardOpen(): Promise<void> {\n // if the menu is not open, we need to toggle it and wait for it to open to focus on the first selected item\n if (!this.open || !this.strategy.open) {\n this.addEventListener(\n 'sp-opened',\n () => this.optionsMenu?.focusOnFirstSelectedItem(),\n {\n once: true,\n }\n );\n this.toggle(true);\n } else {\n // if the menu is already open, we need to focus on the first selected item\n this.optionsMenu?.focusOnFirstSelectedItem();\n }\n }\n\n protected async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n this.open = false;\n // should always close when \"setting\" a value\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n\n // Set a value.\n this.selectedItem = item;\n this.value = item?.value ?? '';\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n // Allow it to be prevented.\n cancelable: true,\n composed: true,\n })\n );\n if (!applyDefault && this.selects) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.setMenuItemSelected(this.selectedItem as MenuItem, false);\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, true);\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n if (this.strategy) {\n this.strategy.open = true;\n }\n return;\n } else if (!this.selects) {\n // Unset the value if not carrying a selection\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n return;\n }\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, false);\n }\n this.setMenuItemSelected(item, !!this.selects);\n }\n\n protected setMenuItemSelected(item: MenuItem, value: boolean): void {\n // matches null | undefined\n if (this.selects == null) return;\n item.selected = value;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly || this.pending || this.disabled) {\n return;\n }\n const open = typeof target !== 'undefined' ? target : !this.open;\n\n this.open = open;\n if (this.strategy) {\n this.strategy.open = this.open;\n }\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n if (this.strategy) {\n this.open = false;\n this.strategy.open = false;\n }\n }\n\n protected get containerStyles(): StyleInfo {\n // @todo: test in mobile\n /* c8 ignore next 5 */\n if (this.isMobile.matches) {\n return {\n '--swc-menu-width': '100%',\n };\n }\n return {};\n }\n\n @state()\n protected get selectedItemContent(): MenuItemChildren {\n return this._selectedItemContent || { icon: [], content: [] };\n }\n\n protected set selectedItemContent(\n selectedItemContent: MenuItemChildren | undefined\n ) {\n if (selectedItemContent === this.selectedItemContent) return;\n\n const oldContent = this.selectedItemContent;\n this._selectedItemContent = selectedItemContent;\n this.requestUpdate('selectedItemContent', oldContent);\n }\n\n _selectedItemContent?: MenuItemChildren;\n\n protected handleTooltipSlotchange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.tooltipEl = event.target.assignedElements()[0] as\n | Tooltip\n | undefined;\n\n // Set up trigger element for self-managed tooltips\n if (this.tooltipEl?.selfManaged) {\n // Wait for the tooltip to be fully initialized\n this.updateComplete.then(() => {\n if (this.tooltipEl?.overlayElement && this.button) {\n this.tooltipEl.overlayElement.triggerElement = this.button;\n }\n });\n }\n }\n\n public handleSlottableRequest = (_event: SlottableRequestEvent): void => {};\n\n protected handleBeforetoggle = (\n event: Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n ): void => {\n if (event.composedPath()[0] !== event.target) {\n return;\n }\n if (event.newState === 'closed') {\n if (this.strategy?.preventNextToggle === 'no') {\n this.open = false;\n } else if (!this.strategy?.pointerdownState) {\n // Prevent browser driven closure while opening the Picker\n // and the expected event series has not completed.\n this.overlayElement?.manuallyKeepOpen();\n }\n }\n if (!this.open) {\n this.optionsMenu.updateSelectedItemIndex();\n this.optionsMenu.closeDescendentOverlays();\n }\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\" id=\"label\">\n <span\n aria-hidden=${ifDefined(\n this.appliedLabel ? undefined : 'true'\n )}\n >\n ${this.label}\n </span>\n </slot>\n `;\n }\n\n protected renderLoader(): TemplateResult {\n import(\n '@spectrum-web-components/progress-circle/sp-progress-circle.js'\n );\n return html`\n <sp-progress-circle\n size=\"s\"\n indeterminate\n role=\"presentation\"\n class=\"progress-circle\"\n ></sp-progress-circle>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n label: true,\n };\n const appliedLabel = this.appliedLabel || this.label;\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span\n id=${ifDefined(\n this.value && this.selectedItem ? 'label' : undefined\n )}\n class=${classMap(labelClasses)}\n >\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.value && this.selectedItem\n ? html`\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"applied-label\"\n >\n ${appliedLabel}\n <slot name=\"label\"></slot>\n </span>\n `\n : html`\n <span hidden id=\"applied-label\">${appliedLabel}</span>\n `}\n ${this.invalid && !this.pending\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n ${this.pending\n ? html`\n ${this.renderLoader()}\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"pending-label\"\n >\n ${this.pendingLabel}\n </span>\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 applyFocusElementLabel = (\n value: string,\n labelElement: FieldLabel\n ): void => {\n this.appliedLabel = value;\n this.labelAlignment = labelElement.sideAligned ? 'inline' : undefined;\n };\n\n protected hasAccessibleLabel(): boolean {\n const slotContent =\n this.querySelector('[slot=\"label\"]')?.textContent &&\n this.querySelector('[slot=\"label\"]')?.textContent?.trim() !== '';\n const slotAlt =\n this.querySelector('[slot=\"label\"]')?.getAttribute('alt')?.trim() &&\n this.querySelector('[slot=\"label\"]')\n ?.getAttribute('alt')\n ?.trim() !== '';\n return (\n !!this.label ||\n !!this.getAttribute('aria-label') ||\n !!this.getAttribute('aria-labelledby') ||\n !!this.appliedLabel ||\n !!slotContent ||\n !!slotAlt\n );\n }\n\n protected warnNoLabel(): void {\n if (window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `<${this.localName}> needs one of the following to be accessible:`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#accessibility',\n {\n type: 'accessibility',\n issues: [\n `an <sp-field-label> element with a \\`for\\` attribute referencing the \\`id\\` of the \\`<${this.localName}>\\`, or`,\n 'value supplied to the \"label\" attribute, which will be displayed visually as placeholder text, or',\n 'text content supplied in a <span> with slot=\"label\", which will also be displayed visually as placeholder text.',\n ],\n }\n );\n }\n }\n\n protected renderOverlay(menu: TemplateResult): TemplateResult {\n const container = this.renderContainer(menu);\n this.dependencyManager.add('sp-overlay');\n import('@spectrum-web-components/overlay/sp-overlay.js');\n return html`\n <sp-overlay\n @slottable-request=${this.handleSlottableRequest}\n @beforetoggle=${this.handleBeforetoggle}\n .triggerElement=${this as HTMLElement}\n .offset=${0}\n ?open=${this.open && this.dependencyManager.loaded}\n .placement=${this.isMobile.matches && !this.forcePopover\n ? undefined\n : this.placement}\n .type=${this.isMobile.matches && !this.forcePopover\n ? 'modal'\n : 'auto'}\n .receivesFocus=${'false'}\n .willPreventClose=${this.strategy?.preventNextToggle !== 'no' &&\n this.open &&\n this.dependencyManager.loaded}\n >\n ${container}\n </sp-overlay>\n `;\n }\n\n protected get renderDescriptionSlot(): TemplateResult {\n return html`\n <div id=${DESCRIPTION_ID}>\n <slot name=\"description\"></slot>\n </div>\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 if (this.tooltipEl) {\n this.tooltipEl.disabled = this.open;\n }\n return html`\n <button\n aria-controls=${ifDefined(this.open ? 'menu' : undefined)}\n aria-describedby=\"tooltip ${DESCRIPTION_ID}\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"true\"\n aria-labelledby=\"icon label applied-label pending-label\"\n id=\"button\"\n class=${ifDefined(\n this.labelAlignment\n ? `label-${this.labelAlignment}`\n : undefined\n )}\n @focus=${this.handleButtonFocus}\n @blur=${this.handleButtonBlur}\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </button>\n <slot\n aria-hidden=\"true\"\n name=\"tooltip\"\n id=\"tooltip\"\n @keydown=${this.handleKeydown}\n @slotchange=${this.handleTooltipSlotchange}\n ></slot>\n ${this.renderMenu} ${this.renderDescriptionSlot}\n `;\n }\n\n protected override willUpdate(changes: PropertyValues<this>): void {\n super.willUpdate(changes);\n if (changes.has('tabIndex') && !!this.tabIndex) {\n this.button.tabIndex = this.tabIndex;\n this.removeAttribute('tabindex');\n }\n }\n\n protected override update(changes: PropertyValues<this>): void {\n if (this.selects) {\n /**\n * Always force `selects` to \"single\" when set.\n *\n * @todo: Add support functionally and visually for \"multiple\"\n */\n this.selects = 'single';\n }\n if (changes.has('disabled') && this.disabled) {\n this.close();\n }\n if (changes.has('pending') && this.pending) {\n this.close();\n }\n if (changes.has('value')) {\n // MenuItems update a frame late for <slot> management,\n // await the same here.\n this.shouldScheduleManageSelection();\n }\n // Maybe it's finally time to remove this support?\n if (!this.hasUpdated) {\n this.deprecatedMenu = this.querySelector(':scope > sp-menu');\n this.deprecatedMenu?.toggleAttribute('ignore', true);\n this.deprecatedMenu?.setAttribute('selects', 'inherit');\n }\n if (window.__swc?.DEBUG) {\n if (!this.hasUpdated && this.querySelector(':scope > sp-menu')) {\n const { localName } = this;\n window.__swc.warn(\n this,\n `You no longer need to provide an <sp-menu> child to ${localName}. Any styling or attributes on the <sp-menu> will be ignored.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#sizes',\n { level: 'deprecation' }\n );\n }\n this.updateComplete.then(async () => {\n // Attributes should be user supplied, making them available before first update.\n // However, `appliesLabel` is applied by external elements that must be update complete as well to be bound appropriately.\n await new Promise((res) => requestAnimationFrame(res));\n await new Promise((res) => requestAnimationFrame(res));\n if (!this.hasAccessibleLabel()) {\n this.warnNoLabel();\n }\n });\n }\n super.update(changes);\n }\n\n protected bindButtonKeydownListener(): void {\n this.button.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (\n changes.has('open') &&\n this.overlayElement &&\n !this.strategy.overlay\n ) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected override async firstUpdated(\n changes: PropertyValues<this>\n ): Promise<void> {\n super.firstUpdated(changes);\n this.bindButtonKeydownListener();\n this.bindEvents();\n\n await this.updateComplete;\n if (this.overlayElement && !this.strategy.overlay) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n aria-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected renderContainer(menu: TemplateResult): TemplateResult {\n const accessibleMenu = html`\n ${this.dismissHelper} ${menu} ${this.dismissHelper}\n `;\n // @todo: test in mobile\n if (this.isMobile.matches && !this.forcePopover) {\n this.dependencyManager.add('sp-tray');\n import('@spectrum-web-components/tray/sp-tray.js');\n return html`\n <sp-tray\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n >\n ${accessibleMenu}\n </sp-tray>\n `;\n }\n this.dependencyManager.add('sp-popover');\n import('@spectrum-web-components/popover/sp-popover.js');\n return html`\n <sp-popover\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n placement=${this.placement}\n >\n ${accessibleMenu}\n </sp-popover>\n `;\n }\n\n protected hasRenderedOverlay = false;\n\n private onScroll(): void {\n this.dispatchEvent(\n new Event('scroll', {\n cancelable: true,\n composed: true,\n })\n );\n }\n\n protected get renderMenu(): TemplateResult {\n const menu = html`\n <sp-menu\n aria-labelledby=\"applied-label\"\n @change=${this.handleChange}\n id=\"menu\"\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n @scroll=${this.onScroll}\n role=${this.listRole}\n .selects=${this.selects}\n .selected=${this.value ? [this.value] : []}\n .shouldSupportDragAndSelect=${!this.isTouchDevice.matches}\n size=${this.size}\n @sp-menu-item-keydown=${this.handleEscape}\n @sp-menu-item-added-or-updated=${this.shouldManageSelection}\n >\n <slot @slotchange=${this.shouldScheduleManageSelection}></slot>\n </sp-menu>\n `;\n this.hasRenderedOverlay =\n this.hasRenderedOverlay ||\n this.focused ||\n this.open ||\n !!this.deprecatedMenu;\n if (this.hasRenderedOverlay) {\n if (this.dependencyManager.loaded) {\n this.dependencyManager.add('sp-overlay');\n }\n return this.renderOverlay(menu);\n }\n return menu;\n }\n\n /**\n * whether a selection change is already scheduled\n */\n public willManageSelection = false;\n\n /**\n * when the value changes or the menu slot changes, manage the selection on the next frame, if not already scheduled\n * @param event\n */\n protected shouldScheduleManageSelection(event?: Event): void {\n if (\n !this.willManageSelection &&\n (!event ||\n ((event.target as HTMLElement).getRootNode() as ShadowRoot)\n .host === this)\n ) {\n this.willManageSelection = true;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.manageSelection();\n });\n });\n }\n }\n\n /**\n * when an item is added or updated, manage the selection, if it's not already scheduled\n */\n protected shouldManageSelection(): void {\n if (this.willManageSelection) {\n return;\n }\n this.willManageSelection = true;\n this.manageSelection();\n }\n\n /**\n * updates menu selection based on value\n */\n protected async manageSelection(): Promise<void> {\n if (this.selects == null) return;\n\n this.selectionPromise = new Promise(\n (res) => (this.selectionResolver = res)\n );\n let selectedItem: MenuItem | undefined;\n await this.optionsMenu.updateComplete;\n if (this.recentlyConnected) {\n // Work around for attach timing differences in Safari and Firefox.\n // Remove when refactoring to Menu passthrough wrapper.\n await new Promise((res) => requestAnimationFrame(() => res(true)));\n this.recentlyConnected = false;\n }\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 this.willManageSelection = false;\n }\n\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.selectionPromise;\n return complete;\n }\n\n private recentlyConnected = false;\n\n private enterKeydownOn: EventTarget | null = null;\n\n protected handleEnterKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter') {\n return;\n }\n const target = event?.target as MenuItem;\n if (!target.open && target.hasSubmenu) {\n event.preventDefault();\n return;\n }\n\n if (this.enterKeydownOn) {\n event.preventDefault();\n return;\n }\n this.enterKeydownOn = event.target;\n this.addEventListener(\n 'keyup',\n async (keyupEvent: KeyboardEvent) => {\n if (keyupEvent.key !== 'Enter') {\n return;\n }\n this.enterKeydownOn = null;\n },\n { once: true }\n );\n };\n\n public bindEvents(): void {\n this.strategy?.abort();\n if (this.isMobile.matches) {\n this.strategy = new strategies['mobile'](this.button, this);\n } else {\n this.strategy = new strategies['desktop'](this.button, this);\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.updateComplete.then(() => {\n if (!this.tooltipEl?.selfManaged) {\n return;\n }\n const overlayElement = this.tooltipEl.overlayElement;\n if (overlayElement) {\n overlayElement.triggerElement = this.button;\n }\n });\n\n this.recentlyConnected = this.hasUpdated;\n this.addEventListener('focus', this.handleFocus);\n }\n\n public override disconnectedCallback(): void {\n this.close();\n this.strategy?.releaseDescription();\n super.disconnectedCallback();\n }\n}\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 Picker extends PickerBase {\n public static override get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected override get containerStyles(): StyleInfo {\n const styles = super.containerStyles;\n if (!this.quiet) {\n styles['min-width'] = `${this.offsetWidth}px`;\n }\n return styles;\n }\n\n protected override handleKeydown = (event: KeyboardEvent): void => {\n const { key } = event;\n const handledKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n ' ',\n 'Escape',\n ].includes(key);\n const openKeys = ['ArrowUp', 'ArrowDown', 'Enter', ' '].includes(key);\n const arrowKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n ].includes(key);\n this.focused = true;\n if ('Escape' === key) {\n this.handleEscape(event);\n return;\n }\n if (!handledKeys || this.readonly || this.pending) {\n return;\n }\n if (openKeys) {\n this.keyboardOpen();\n event.preventDefault();\n if (arrowKeys) {\n event.stopPropagation();\n }\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const nextItem = this.optionsMenu?.getNeighboringFocusableElement(\n this.selectedItem,\n key === 'ArrowLeft'\n );\n if (!this.value || nextItem !== this.selectedItem) {\n // updates picker text but does not fire change event until action is completed\n if (nextItem) this.setValueFromItem(nextItem as MenuItem);\n }\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n classMap,\n ifDefined,\n StyleInfo,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport type { FieldLabel } from '@spectrum-web-components/field-label';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemChildren,\n MenuItemKeydownEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport { Placement } from '@spectrum-web-components/overlay';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\nimport type { SlottableRequestEvent } from '@spectrum-web-components/overlay/src/slottable-request-event.js';\nimport { DependencyManagerController } from '@spectrum-web-components/reactive-controllers/src/DependencyManger.js';\nimport {\n IS_MOBILE,\n IS_TOUCH_DEVICE,\n MatchMediaController,\n} from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';\nimport type { Tooltip } from '@spectrum-web-components/tooltip';\nimport { DesktopController } from './DesktopController.dev.js'\nimport { MobileController } from './MobileController.dev.js'\nimport pickerStyles from './picker.css.js';\nimport { strategies } from './strategies.dev.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\nexport const DESCRIPTION_ID = 'option-picker';\n\n/**\n * @element sp-picker\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 */\nexport class PickerBase extends SizedMixin(SpectrumElement, {\n noDefaultSize: true,\n}) {\n static override shadowRootOptions = {\n ...SpectrumElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public isMobile = new MatchMediaController(this, IS_MOBILE);\n\n public isTouchDevice = new MatchMediaController(this, IS_TOUCH_DEVICE);\n\n public strategy!: DesktopController | MobileController;\n\n @state()\n appliedLabel?: string;\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public dependencyManager = new DependencyManagerController(this);\n\n private deprecatedMenu: Menu | null = null;\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 /**\n * Forces the Picker to render as a popover on mobile instead of a tray.\n *\n * @memberof PickerBase\n */\n @property({ type: Boolean, reflect: true, attribute: 'force-popover' })\n public forcePopover = false;\n\n /** Whether the items are currently loading. */\n @property({ type: Boolean, reflect: true })\n public pending = false;\n\n /** Defines a string value that labels the Picker while it is in pending state. */\n @property({ type: String, attribute: 'pending-label' })\n public pendingLabel = 'Pending';\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 @state()\n public labelAlignment?: 'inline';\n\n protected get menuItems(): MenuItem[] {\n return this.optionsMenu.childItems;\n }\n\n @query('sp-menu')\n public optionsMenu!: Menu;\n\n /**\n * @deprecated\n * */\n public get selfManageFocusElement(): boolean {\n return true;\n }\n\n @query('sp-overlay')\n public overlayElement!: Overlay;\n\n protected tooltipEl?: Tooltip;\n\n /**\n * @type {\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"}\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 get selectedItem(): MenuItem | undefined {\n return this._selectedItem;\n }\n\n public set selectedItem(selectedItem: MenuItem | undefined) {\n this.selectedItemContent = selectedItem\n ? selectedItem.itemChildren\n : undefined;\n\n if (selectedItem === this.selectedItem) return;\n const oldSelectedItem = this.selectedItem;\n this._selectedItem = selectedItem;\n this.requestUpdate('selectedItem', oldSelectedItem);\n }\n\n _selectedItem?: MenuItem;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\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 if (this.disabled) {\n return;\n }\n\n this.focused = true;\n }\n\n // handled by interaction controller, desktop or mobile; this is only called with a programmatic this.click()\n public override click(): void {\n this.toggle();\n }\n\n // pointer events handled by interaction controller, desktop or mobile; this is only called with a programmatic this.button.click()\n public handleButtonClick(): void {\n if (this.disabled) {\n return;\n }\n this.toggle();\n }\n\n public handleButtonBlur(): void {\n this.focused = false;\n }\n\n public override focus(options?: FocusOptions): void {\n this.focusElement?.focus(options);\n }\n /**\n * @deprecated - Use `focus` instead.\n */\n public handleHelperFocus(): void {\n // set focused to true here instead of handleButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public handleFocus(): void {\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public handleChange(event: Event): void {\n if (this.strategy) {\n this.strategy.preventNextToggle = 'no';\n }\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n event.stopPropagation();\n if (event.cancelable) {\n this.setValueFromItem(selected, event);\n } else {\n // Non-cancelable \"change\" events announce a selection with no value\n // change that should close the Picker element.\n this.open = false;\n if (this.strategy) {\n this.strategy.open = false;\n }\n }\n }\n\n public handleButtonFocus(event: FocusEvent): void {\n this.strategy?.handleButtonFocus(event);\n }\n\n protected handleEscape = (\n event: MenuItemKeydownEvent | KeyboardEvent\n ): void => {\n if (event.key === 'Escape' && this.open) {\n event.stopPropagation();\n event.preventDefault();\n this.toggle(false);\n }\n };\n\n protected handleKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (\n !['ArrowUp', 'ArrowDown', 'Enter', ' ', 'Escape'].includes(\n event.key\n )\n ) {\n return;\n }\n if (event.key === 'Escape') {\n this.handleEscape(event);\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.keyboardOpen();\n };\n\n protected async keyboardOpen(): Promise<void> {\n // if the menu is not open, we need to toggle it and wait for it to open to focus on the first selected item\n if (!this.open || !this.strategy.open) {\n this.addEventListener(\n 'sp-opened',\n () => this.optionsMenu?.focusOnFirstSelectedItem(),\n {\n once: true,\n }\n );\n this.toggle(true);\n } else {\n // if the menu is already open, we need to focus on the first selected item\n this.optionsMenu?.focusOnFirstSelectedItem();\n }\n }\n\n protected async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n this.open = false;\n // should always close when \"setting\" a value\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n\n // Set a value.\n this.selectedItem = item;\n this.value = item?.value ?? '';\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n // Allow it to be prevented.\n cancelable: true,\n composed: true,\n })\n );\n if (!applyDefault && this.selects) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.setMenuItemSelected(this.selectedItem as MenuItem, false);\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, true);\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n if (this.strategy) {\n this.strategy.open = true;\n }\n return;\n } else if (!this.selects) {\n // Unset the value if not carrying a selection\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n return;\n }\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, false);\n }\n this.setMenuItemSelected(item, !!this.selects);\n }\n\n protected setMenuItemSelected(item: MenuItem, value: boolean): void {\n // matches null | undefined\n if (this.selects == null) return;\n item.selected = value;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly || this.pending || this.disabled) {\n return;\n }\n const open = typeof target !== 'undefined' ? target : !this.open;\n\n this.open = open;\n if (this.strategy) {\n this.strategy.open = this.open;\n }\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n if (this.strategy) {\n this.open = false;\n this.strategy.open = false;\n }\n }\n\n protected get containerStyles(): StyleInfo {\n // @todo: test in mobile\n /* c8 ignore next 5 */\n if (this.isMobile.matches) {\n return {\n '--swc-menu-width': '100%',\n };\n }\n return {};\n }\n\n @state()\n protected get selectedItemContent(): MenuItemChildren {\n return this._selectedItemContent || { icon: [], content: [] };\n }\n\n protected set selectedItemContent(\n selectedItemContent: MenuItemChildren | undefined\n ) {\n if (selectedItemContent === this.selectedItemContent) return;\n\n const oldContent = this.selectedItemContent;\n this._selectedItemContent = selectedItemContent;\n this.requestUpdate('selectedItemContent', oldContent);\n }\n\n _selectedItemContent?: MenuItemChildren;\n\n protected handleTooltipSlotchange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.tooltipEl = event.target.assignedElements()[0] as\n | Tooltip\n | undefined;\n\n // Set up trigger element for self-managed tooltips\n if (this.tooltipEl?.selfManaged) {\n // Wait for the tooltip to be fully initialized\n this.updateComplete.then(() => {\n if (this.tooltipEl?.overlayElement && this.button) {\n this.tooltipEl.overlayElement.triggerElement = this.button;\n }\n });\n }\n }\n\n public handleSlottableRequest = (_event: SlottableRequestEvent): void => {};\n\n protected handleBeforetoggle = (\n event: Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n ): void => {\n if (event.composedPath()[0] !== event.target) {\n return;\n }\n if (event.newState === 'closed') {\n if (this.strategy?.preventNextToggle === 'no') {\n this.open = false;\n } else if (!this.strategy?.pointerdownState) {\n // Prevent browser driven closure while opening the Picker\n // and the expected event series has not completed.\n this.overlayElement?.manuallyKeepOpen();\n }\n }\n if (!this.open) {\n this.optionsMenu.updateSelectedItemIndex();\n this.optionsMenu.closeDescendentOverlays();\n }\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\" id=\"label\">\n <span\n aria-hidden=${ifDefined(\n this.appliedLabel ? undefined : 'true'\n )}\n >\n ${this.label}\n </span>\n </slot>\n `;\n }\n\n protected renderLoader(): TemplateResult {\n import(\n '@spectrum-web-components/progress-circle/sp-progress-circle.js'\n );\n return html`\n <sp-progress-circle\n size=\"s\"\n indeterminate\n role=\"presentation\"\n class=\"progress-circle\"\n ></sp-progress-circle>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n label: true,\n };\n const appliedLabel = this.appliedLabel || this.label;\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span\n id=${ifDefined(\n this.value && this.selectedItem ? 'label' : undefined\n )}\n class=${classMap(labelClasses)}\n >\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.value && this.selectedItem\n ? html`\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"applied-label\"\n >\n ${appliedLabel}\n <slot name=\"label\"></slot>\n </span>\n `\n : html`\n <span hidden id=\"applied-label\">${appliedLabel}</span>\n `}\n ${this.invalid && !this.pending\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n ${this.pending\n ? html`\n ${this.renderLoader()}\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"pending-label\"\n >\n ${this.pendingLabel}\n </span>\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 applyFocusElementLabel = (\n value: string,\n labelElement: FieldLabel\n ): void => {\n this.appliedLabel = value;\n this.labelAlignment = labelElement.sideAligned ? 'inline' : undefined;\n };\n\n protected hasAccessibleLabel(): boolean {\n const slotContent =\n this.querySelector('[slot=\"label\"]')?.textContent &&\n this.querySelector('[slot=\"label\"]')?.textContent?.trim() !== '';\n const slotAlt =\n this.querySelector('[slot=\"label\"]')?.getAttribute('alt')?.trim() &&\n this.querySelector('[slot=\"label\"]')\n ?.getAttribute('alt')\n ?.trim() !== '';\n return (\n !!this.label ||\n !!this.getAttribute('aria-label') ||\n !!this.getAttribute('aria-labelledby') ||\n !!this.appliedLabel ||\n !!slotContent ||\n !!slotAlt\n );\n }\n\n protected warnNoLabel(): void {\n if (window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `<${this.localName}> needs one of the following to be accessible:`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#accessibility',\n {\n type: 'accessibility',\n issues: [\n `an <sp-field-label> element with a \\`for\\` attribute referencing the \\`id\\` of the \\`<${this.localName}>\\`, or`,\n 'value supplied to the \"label\" attribute, which will be displayed visually as placeholder text, or',\n 'text content supplied in a <span> with slot=\"label\", which will also be displayed visually as placeholder text.',\n ],\n }\n );\n }\n }\n\n protected renderOverlay(menu: TemplateResult): TemplateResult {\n const container = this.renderContainer(menu);\n this.dependencyManager.add('sp-overlay');\n import('@spectrum-web-components/overlay/sp-overlay.js');\n return html`\n <sp-overlay\n @slottable-request=${this.handleSlottableRequest}\n @beforetoggle=${this.handleBeforetoggle}\n .triggerElement=${this as HTMLElement}\n .offset=${0}\n ?open=${this.open && this.dependencyManager.loaded}\n .placement=${this.isMobile.matches && !this.forcePopover\n ? undefined\n : this.placement}\n .type=${this.isMobile.matches && !this.forcePopover\n ? 'modal'\n : 'auto'}\n .receivesFocus=${'false'}\n .willPreventClose=${this.strategy?.preventNextToggle !== 'no' &&\n this.open &&\n this.dependencyManager.loaded}\n >\n ${container}\n </sp-overlay>\n `;\n }\n\n protected get renderDescriptionSlot(): TemplateResult {\n return html`\n <div id=${DESCRIPTION_ID}>\n <slot name=\"description\"></slot>\n </div>\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 if (this.tooltipEl) {\n this.tooltipEl.disabled = this.open;\n }\n return html`\n <button\n aria-controls=${ifDefined(this.open ? 'menu' : undefined)}\n aria-describedby=\"tooltip ${DESCRIPTION_ID}\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"true\"\n aria-labelledby=\"icon label applied-label pending-label\"\n id=\"button\"\n class=${ifDefined(\n this.labelAlignment\n ? `label-${this.labelAlignment}`\n : undefined\n )}\n @focus=${this.handleButtonFocus}\n @blur=${this.handleButtonBlur}\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </button>\n <slot\n aria-hidden=\"true\"\n name=\"tooltip\"\n id=\"tooltip\"\n @keydown=${this.handleKeydown}\n @slotchange=${this.handleTooltipSlotchange}\n ></slot>\n ${this.renderMenu} ${this.renderDescriptionSlot}\n `;\n }\n\n protected override willUpdate(changes: PropertyValues<this>): void {\n super.willUpdate(changes);\n if (changes.has('tabIndex') && !!this.tabIndex) {\n this.button.tabIndex = this.tabIndex;\n this.removeAttribute('tabindex');\n }\n }\n\n protected override update(changes: PropertyValues<this>): void {\n if (this.selects) {\n /**\n * Always force `selects` to \"single\" when set.\n *\n * @todo: Add support functionally and visually for \"multiple\"\n */\n this.selects = 'single';\n }\n if (changes.has('disabled') && this.disabled) {\n this.close();\n }\n if (changes.has('pending') && this.pending) {\n this.close();\n }\n if (changes.has('value')) {\n // MenuItems update a frame late for <slot> management,\n // await the same here.\n this.shouldScheduleManageSelection();\n }\n // Maybe it's finally time to remove this support?\n if (!this.hasUpdated) {\n this.deprecatedMenu = this.querySelector(':scope > sp-menu');\n this.deprecatedMenu?.toggleAttribute('ignore', true);\n this.deprecatedMenu?.setAttribute('selects', 'inherit');\n }\n if (window.__swc?.DEBUG) {\n if (!this.hasUpdated && this.querySelector(':scope > sp-menu')) {\n const { localName } = this;\n window.__swc.warn(\n this,\n `You no longer need to provide an <sp-menu> child to ${localName}. Any styling or attributes on the <sp-menu> will be ignored.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#sizes',\n { level: 'deprecation' }\n );\n }\n this.updateComplete.then(async () => {\n // Attributes should be user supplied, making them available before first update.\n // However, `appliesLabel` is applied by external elements that must be update complete as well to be bound appropriately.\n await new Promise((res) => requestAnimationFrame(res));\n await new Promise((res) => requestAnimationFrame(res));\n if (!this.hasAccessibleLabel()) {\n this.warnNoLabel();\n }\n });\n }\n super.update(changes);\n }\n\n protected bindButtonKeydownListener(): void {\n this.button.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (\n changes.has('open') &&\n this.overlayElement &&\n !this.strategy.overlay\n ) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected override async firstUpdated(\n changes: PropertyValues<this>\n ): Promise<void> {\n super.firstUpdated(changes);\n this.bindButtonKeydownListener();\n this.bindEvents();\n\n await this.updateComplete;\n if (this.overlayElement && !this.strategy.overlay) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n aria-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected renderContainer(menu: TemplateResult): TemplateResult {\n const accessibleMenu = html`\n ${this.dismissHelper} ${menu} ${this.dismissHelper}\n `;\n // @todo: test in mobile\n if (this.isMobile.matches && !this.forcePopover) {\n this.dependencyManager.add('sp-tray');\n import('@spectrum-web-components/tray/sp-tray.js');\n return html`\n <sp-tray\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n >\n ${accessibleMenu}\n </sp-tray>\n `;\n }\n this.dependencyManager.add('sp-popover');\n import('@spectrum-web-components/popover/sp-popover.js');\n return html`\n <sp-popover\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n placement=${this.placement}\n >\n ${accessibleMenu}\n </sp-popover>\n `;\n }\n\n protected hasRenderedOverlay = false;\n\n private onScroll(): void {\n this.dispatchEvent(\n new Event('scroll', {\n cancelable: true,\n composed: true,\n })\n );\n }\n\n protected get renderMenu(): TemplateResult {\n const menu = html`\n <sp-menu\n aria-labelledby=\"applied-label\"\n @change=${this.handleChange}\n id=\"menu\"\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n @scroll=${this.onScroll}\n role=${this.listRole}\n .selects=${this.selects}\n .selected=${this.value ? [this.value] : []}\n .shouldSupportDragAndSelect=${!this.isTouchDevice.matches}\n size=${this.size}\n @sp-menu-item-keydown=${this.handleEscape}\n @sp-menu-item-added-or-updated=${this.shouldManageSelection}\n >\n <slot @slotchange=${this.shouldScheduleManageSelection}></slot>\n </sp-menu>\n `;\n this.hasRenderedOverlay =\n this.hasRenderedOverlay ||\n this.focused ||\n this.open ||\n !!this.deprecatedMenu;\n if (this.hasRenderedOverlay) {\n if (this.dependencyManager.loaded) {\n this.dependencyManager.add('sp-overlay');\n }\n return this.renderOverlay(menu);\n }\n return menu;\n }\n\n /**\n * whether a selection change is already scheduled\n */\n public willManageSelection = false;\n\n /**\n * when the value changes or the menu slot changes, manage the selection on the next frame, if not already scheduled\n * @param event\n */\n protected shouldScheduleManageSelection(event?: Event): void {\n if (\n !this.willManageSelection &&\n (!event ||\n ((event.target as HTMLElement).getRootNode() as ShadowRoot)\n .host === this)\n ) {\n this.willManageSelection = true;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.manageSelection();\n });\n });\n }\n }\n\n /**\n * when an item is added or updated, manage the selection, if it's not already scheduled\n */\n protected shouldManageSelection(): void {\n if (this.willManageSelection) {\n return;\n }\n this.willManageSelection = true;\n this.manageSelection();\n }\n\n /**\n * updates menu selection based on value\n */\n protected async manageSelection(): Promise<void> {\n if (this.selects == null) return;\n\n this.selectionPromise = new Promise(\n (res) => (this.selectionResolver = res)\n );\n let selectedItem: MenuItem | undefined;\n await this.optionsMenu.updateComplete;\n if (this.recentlyConnected) {\n // Work around for attach timing differences in Safari and Firefox.\n // Remove when refactoring to Menu passthrough wrapper.\n await new Promise((res) => requestAnimationFrame(() => res(true)));\n this.recentlyConnected = false;\n }\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 // Only clear value when items exist with real values but none match.\n // Preserve value if items are pending (lazy loaded, async render, incomplete upgrade).\n const hasItemsWithValues = this.menuItems.some(\n (item) =>\n item.value != null || item.getAttribute?.('value') != null\n );\n if (this.menuItems.length > 0 && hasItemsWithValues) {\n this.value = '';\n this.selectedItem = undefined;\n }\n }\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.optionsMenu.updateSelectedItemIndex();\n }\n this.selectionResolver();\n this.willManageSelection = false;\n }\n\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.selectionPromise;\n return complete;\n }\n\n private recentlyConnected = false;\n\n private enterKeydownOn: EventTarget | null = null;\n\n protected handleEnterKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter') {\n return;\n }\n const target = event?.target as MenuItem;\n if (!target.open && target.hasSubmenu) {\n event.preventDefault();\n return;\n }\n\n if (this.enterKeydownOn) {\n event.preventDefault();\n return;\n }\n this.enterKeydownOn = event.target;\n this.addEventListener(\n 'keyup',\n async (keyupEvent: KeyboardEvent) => {\n if (keyupEvent.key !== 'Enter') {\n return;\n }\n this.enterKeydownOn = null;\n },\n { once: true }\n );\n };\n\n public bindEvents(): void {\n this.strategy?.abort();\n if (this.isMobile.matches) {\n this.strategy = new strategies['mobile'](this.button, this);\n } else {\n this.strategy = new strategies['desktop'](this.button, this);\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.updateComplete.then(() => {\n if (!this.tooltipEl?.selfManaged) {\n return;\n }\n const overlayElement = this.tooltipEl.overlayElement;\n if (overlayElement) {\n overlayElement.triggerElement = this.button;\n }\n });\n\n this.recentlyConnected = this.hasUpdated;\n this.addEventListener('focus', this.handleFocus);\n }\n\n public override disconnectedCallback(): void {\n this.close();\n this.strategy?.releaseDescription();\n super.disconnectedCallback();\n }\n}\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 Picker extends PickerBase {\n public static override get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected override get containerStyles(): StyleInfo {\n const styles = super.containerStyles;\n if (!this.quiet) {\n styles['min-width'] = `${this.offsetWidth}px`;\n }\n return styles;\n }\n\n protected override handleKeydown = (event: KeyboardEvent): void => {\n const { key } = event;\n const handledKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n ' ',\n 'Escape',\n ].includes(key);\n const openKeys = ['ArrowUp', 'ArrowDown', 'Enter', ' '].includes(key);\n const arrowKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n ].includes(key);\n this.focused = true;\n if ('Escape' === key) {\n this.handleEscape(event);\n return;\n }\n if (!handledKeys || this.readonly || this.pending) {\n return;\n }\n if (openKeys) {\n this.keyboardOpen();\n event.preventDefault();\n if (arrowKeys) {\n event.stopPropagation();\n }\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const nextItem = this.optionsMenu?.getNeighboringFocusableElement(\n this.selectedItem,\n key === 'ArrowLeft'\n );\n if (!this.value || nextItem !== this.selectedItem) {\n // updates picker text but does not fire change event until action is completed\n if (nextItem) this.setValueFromItem(nextItem as MenuItem);\n }\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_a"]
|
|
7
7
|
}
|
package/src/Picker.js
CHANGED
|
@@ -139,5 +139,5 @@
|
|
|
139
139
|
>
|
|
140
140
|
<slot @slotchange=${this.shouldScheduleManageSelection}></slot>
|
|
141
141
|
</sp-menu>
|
|
142
|
-
`;return this.hasRenderedOverlay=this.hasRenderedOverlay||this.focused||this.open||!!this.deprecatedMenu,this.hasRenderedOverlay?(this.dependencyManager.loaded&&this.dependencyManager.add("sp-overlay"),this.renderOverlay(e)):e}shouldScheduleManageSelection(e){!this.willManageSelection&&(!e||e.target.getRootNode().host===this)&&(this.willManageSelection=!0,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.manageSelection()})}))}shouldManageSelection(){this.willManageSelection||(this.willManageSelection=!0,this.manageSelection())}async manageSelection(){if(this.selects==null)return;this.selectionPromise=new Promise(t=>this.selectionResolver=t);let e;await this.optionsMenu.updateComplete,this.recentlyConnected&&(await new Promise(t=>requestAnimationFrame(()=>t(!0))),this.recentlyConnected=!1),this.menuItems.forEach(t=>{this.value===t.value&&!t.disabled?e=t:t.selected=!1}),e
|
|
142
|
+
`;return this.hasRenderedOverlay=this.hasRenderedOverlay||this.focused||this.open||!!this.deprecatedMenu,this.hasRenderedOverlay?(this.dependencyManager.loaded&&this.dependencyManager.add("sp-overlay"),this.renderOverlay(e)):e}shouldScheduleManageSelection(e){!this.willManageSelection&&(!e||e.target.getRootNode().host===this)&&(this.willManageSelection=!0,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.manageSelection()})}))}shouldManageSelection(){this.willManageSelection||(this.willManageSelection=!0,this.manageSelection())}async manageSelection(){if(this.selects==null)return;this.selectionPromise=new Promise(t=>this.selectionResolver=t);let e;if(await this.optionsMenu.updateComplete,this.recentlyConnected&&(await new Promise(t=>requestAnimationFrame(()=>t(!0))),this.recentlyConnected=!1),this.menuItems.forEach(t=>{this.value===t.value&&!t.disabled?e=t:t.selected=!1}),e)e.selected=!!this.selects,this.selectedItem=e;else{const t=this.menuItems.some(s=>{var n;return s.value!=null||((n=s.getAttribute)==null?void 0:n.call(s,"value"))!=null});this.menuItems.length>0&&t&&(this.value="",this.selectedItem=void 0)}this.open&&(await this.optionsMenu.updateComplete,this.optionsMenu.updateSelectedItemIndex()),this.selectionResolver(),this.willManageSelection=!1}async getUpdateComplete(){const e=await super.getUpdateComplete();return await this.selectionPromise,e}bindEvents(){var e;(e=this.strategy)==null||e.abort(),this.isMobile.matches?this.strategy=new I.mobile(this.button,this):this.strategy=new I.desktop(this.button,this)}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>{var t;if(!((t=this.tooltipEl)!=null&&t.selfManaged))return;const e=this.tooltipEl.overlayElement;e&&(e.triggerElement=this.button)}),this.recentlyConnected=this.hasUpdated,this.addEventListener("focus",this.handleFocus)}disconnectedCallback(){var e;this.close(),(e=this.strategy)==null||e.releaseDescription(),super.disconnectedCallback()}}PickerBase.shadowRootOptions={...g.shadowRootOptions,delegatesFocus:!0},i([m()],PickerBase.prototype,"appliedLabel",2),i([h("#button")],PickerBase.prototype,"button",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"disabled",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"focused",2),i([l({type:String,reflect:!0})],PickerBase.prototype,"icons",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"invalid",2),i([l({type:Boolean,reflect:!0,attribute:"force-popover"})],PickerBase.prototype,"forcePopover",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"pending",2),i([l({type:String,attribute:"pending-label"})],PickerBase.prototype,"pendingLabel",2),i([l()],PickerBase.prototype,"label",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"open",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"readonly",2),i([m()],PickerBase.prototype,"labelAlignment",2),i([h("sp-menu")],PickerBase.prototype,"optionsMenu",2),i([h("sp-overlay")],PickerBase.prototype,"overlayElement",2),i([l()],PickerBase.prototype,"placement",2),i([l({type:Boolean,reflect:!0})],PickerBase.prototype,"quiet",2),i([l({type:String})],PickerBase.prototype,"value",2),i([l({attribute:!1})],PickerBase.prototype,"selectedItem",1),i([m()],PickerBase.prototype,"selectedItemContent",1);export class Picker extends PickerBase{constructor(){super(...arguments);this.handleKeydown=e=>{var p;const{key:t}=e,s=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Enter"," ","Escape"].includes(t),n=["ArrowUp","ArrowDown","Enter"," "].includes(t),r=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(t);if(this.focused=!0,t==="Escape"){this.handleEscape(e);return}if(!s||this.readonly||this.pending)return;if(n){this.keyboardOpen(),e.preventDefault(),r&&e.stopPropagation();return}e.preventDefault(),e.stopPropagation();const a=(p=this.optionsMenu)==null?void 0:p.getNeighboringFocusableElement(this.selectedItem,t==="ArrowLeft");(!this.value||a!==this.selectedItem)&&a&&this.setValueFromItem(a)}}static get styles(){return[L,C]}get containerStyles(){const e=super.containerStyles;return this.quiet||(e["min-width"]=`${this.offsetWidth}px`),e}}
|
|
143
143
|
//# sourceMappingURL=Picker.js.map
|
package/src/Picker.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["Picker.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n classMap,\n ifDefined,\n StyleInfo,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport type { FieldLabel } from '@spectrum-web-components/field-label';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemChildren,\n MenuItemKeydownEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport { Placement } from '@spectrum-web-components/overlay';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\nimport type { SlottableRequestEvent } from '@spectrum-web-components/overlay/src/slottable-request-event.js';\nimport { DependencyManagerController } from '@spectrum-web-components/reactive-controllers/src/DependencyManger.js';\nimport {\n IS_MOBILE,\n IS_TOUCH_DEVICE,\n MatchMediaController,\n} from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';\nimport type { Tooltip } from '@spectrum-web-components/tooltip';\nimport { DesktopController } from './DesktopController.js';\nimport { MobileController } from './MobileController.js';\nimport pickerStyles from './picker.css.js';\nimport { strategies } from './strategies.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\nexport const DESCRIPTION_ID = 'option-picker';\n\n/**\n * @element sp-picker\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 */\nexport class PickerBase extends SizedMixin(SpectrumElement, {\n noDefaultSize: true,\n}) {\n static override shadowRootOptions = {\n ...SpectrumElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public isMobile = new MatchMediaController(this, IS_MOBILE);\n\n public isTouchDevice = new MatchMediaController(this, IS_TOUCH_DEVICE);\n\n public strategy!: DesktopController | MobileController;\n\n @state()\n appliedLabel?: string;\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public dependencyManager = new DependencyManagerController(this);\n\n private deprecatedMenu: Menu | null = null;\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 /**\n * Forces the Picker to render as a popover on mobile instead of a tray.\n *\n * @memberof PickerBase\n */\n @property({ type: Boolean, reflect: true, attribute: 'force-popover' })\n public forcePopover = false;\n\n /** Whether the items are currently loading. */\n @property({ type: Boolean, reflect: true })\n public pending = false;\n\n /** Defines a string value that labels the Picker while it is in pending state. */\n @property({ type: String, attribute: 'pending-label' })\n public pendingLabel = 'Pending';\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 @state()\n public labelAlignment?: 'inline';\n\n protected get menuItems(): MenuItem[] {\n return this.optionsMenu.childItems;\n }\n\n @query('sp-menu')\n public optionsMenu!: Menu;\n\n /**\n * @deprecated\n * */\n public get selfManageFocusElement(): boolean {\n return true;\n }\n\n @query('sp-overlay')\n public overlayElement!: Overlay;\n\n protected tooltipEl?: Tooltip;\n\n /**\n * @type {\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"}\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 get selectedItem(): MenuItem | undefined {\n return this._selectedItem;\n }\n\n public set selectedItem(selectedItem: MenuItem | undefined) {\n this.selectedItemContent = selectedItem\n ? selectedItem.itemChildren\n : undefined;\n\n if (selectedItem === this.selectedItem) return;\n const oldSelectedItem = this.selectedItem;\n this._selectedItem = selectedItem;\n this.requestUpdate('selectedItem', oldSelectedItem);\n }\n\n _selectedItem?: MenuItem;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\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 if (this.disabled) {\n return;\n }\n\n this.focused = true;\n }\n\n // handled by interaction controller, desktop or mobile; this is only called with a programmatic this.click()\n public override click(): void {\n this.toggle();\n }\n\n // pointer events handled by interaction controller, desktop or mobile; this is only called with a programmatic this.button.click()\n public handleButtonClick(): void {\n if (this.disabled) {\n return;\n }\n this.toggle();\n }\n\n public handleButtonBlur(): void {\n this.focused = false;\n }\n\n public override focus(options?: FocusOptions): void {\n this.focusElement?.focus(options);\n }\n /**\n * @deprecated - Use `focus` instead.\n */\n public handleHelperFocus(): void {\n // set focused to true here instead of handleButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public handleFocus(): void {\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public handleChange(event: Event): void {\n if (this.strategy) {\n this.strategy.preventNextToggle = 'no';\n }\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n event.stopPropagation();\n if (event.cancelable) {\n this.setValueFromItem(selected, event);\n } else {\n // Non-cancelable \"change\" events announce a selection with no value\n // change that should close the Picker element.\n this.open = false;\n if (this.strategy) {\n this.strategy.open = false;\n }\n }\n }\n\n public handleButtonFocus(event: FocusEvent): void {\n this.strategy?.handleButtonFocus(event);\n }\n\n protected handleEscape = (\n event: MenuItemKeydownEvent | KeyboardEvent\n ): void => {\n if (event.key === 'Escape' && this.open) {\n event.stopPropagation();\n event.preventDefault();\n this.toggle(false);\n }\n };\n\n protected handleKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (\n !['ArrowUp', 'ArrowDown', 'Enter', ' ', 'Escape'].includes(\n event.key\n )\n ) {\n return;\n }\n if (event.key === 'Escape') {\n this.handleEscape(event);\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.keyboardOpen();\n };\n\n protected async keyboardOpen(): Promise<void> {\n // if the menu is not open, we need to toggle it and wait for it to open to focus on the first selected item\n if (!this.open || !this.strategy.open) {\n this.addEventListener(\n 'sp-opened',\n () => this.optionsMenu?.focusOnFirstSelectedItem(),\n {\n once: true,\n }\n );\n this.toggle(true);\n } else {\n // if the menu is already open, we need to focus on the first selected item\n this.optionsMenu?.focusOnFirstSelectedItem();\n }\n }\n\n protected async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n this.open = false;\n // should always close when \"setting\" a value\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n\n // Set a value.\n this.selectedItem = item;\n this.value = item?.value ?? '';\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n // Allow it to be prevented.\n cancelable: true,\n composed: true,\n })\n );\n if (!applyDefault && this.selects) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.setMenuItemSelected(this.selectedItem as MenuItem, false);\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, true);\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n if (this.strategy) {\n this.strategy.open = true;\n }\n return;\n } else if (!this.selects) {\n // Unset the value if not carrying a selection\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n return;\n }\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, false);\n }\n this.setMenuItemSelected(item, !!this.selects);\n }\n\n protected setMenuItemSelected(item: MenuItem, value: boolean): void {\n // matches null | undefined\n if (this.selects == null) return;\n item.selected = value;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly || this.pending || this.disabled) {\n return;\n }\n const open = typeof target !== 'undefined' ? target : !this.open;\n\n this.open = open;\n if (this.strategy) {\n this.strategy.open = this.open;\n }\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n if (this.strategy) {\n this.open = false;\n this.strategy.open = false;\n }\n }\n\n protected get containerStyles(): StyleInfo {\n // @todo: test in mobile\n /* c8 ignore next 5 */\n if (this.isMobile.matches) {\n return {\n '--swc-menu-width': '100%',\n };\n }\n return {};\n }\n\n @state()\n protected get selectedItemContent(): MenuItemChildren {\n return this._selectedItemContent || { icon: [], content: [] };\n }\n\n protected set selectedItemContent(\n selectedItemContent: MenuItemChildren | undefined\n ) {\n if (selectedItemContent === this.selectedItemContent) return;\n\n const oldContent = this.selectedItemContent;\n this._selectedItemContent = selectedItemContent;\n this.requestUpdate('selectedItemContent', oldContent);\n }\n\n _selectedItemContent?: MenuItemChildren;\n\n protected handleTooltipSlotchange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.tooltipEl = event.target.assignedElements()[0] as\n | Tooltip\n | undefined;\n\n // Set up trigger element for self-managed tooltips\n if (this.tooltipEl?.selfManaged) {\n // Wait for the tooltip to be fully initialized\n this.updateComplete.then(() => {\n if (this.tooltipEl?.overlayElement && this.button) {\n this.tooltipEl.overlayElement.triggerElement = this.button;\n }\n });\n }\n }\n\n public handleSlottableRequest = (_event: SlottableRequestEvent): void => {};\n\n protected handleBeforetoggle = (\n event: Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n ): void => {\n if (event.composedPath()[0] !== event.target) {\n return;\n }\n if (event.newState === 'closed') {\n if (this.strategy?.preventNextToggle === 'no') {\n this.open = false;\n } else if (!this.strategy?.pointerdownState) {\n // Prevent browser driven closure while opening the Picker\n // and the expected event series has not completed.\n this.overlayElement?.manuallyKeepOpen();\n }\n }\n if (!this.open) {\n this.optionsMenu.updateSelectedItemIndex();\n this.optionsMenu.closeDescendentOverlays();\n }\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\" id=\"label\">\n <span\n aria-hidden=${ifDefined(\n this.appliedLabel ? undefined : 'true'\n )}\n >\n ${this.label}\n </span>\n </slot>\n `;\n }\n\n protected renderLoader(): TemplateResult {\n import(\n '@spectrum-web-components/progress-circle/sp-progress-circle.js'\n );\n return html`\n <sp-progress-circle\n size=\"s\"\n indeterminate\n role=\"presentation\"\n class=\"progress-circle\"\n ></sp-progress-circle>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n label: true,\n };\n const appliedLabel = this.appliedLabel || this.label;\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span\n id=${ifDefined(\n this.value && this.selectedItem ? 'label' : undefined\n )}\n class=${classMap(labelClasses)}\n >\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.value && this.selectedItem\n ? html`\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"applied-label\"\n >\n ${appliedLabel}\n <slot name=\"label\"></slot>\n </span>\n `\n : html`\n <span hidden id=\"applied-label\">${appliedLabel}</span>\n `}\n ${this.invalid && !this.pending\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n ${this.pending\n ? html`\n ${this.renderLoader()}\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"pending-label\"\n >\n ${this.pendingLabel}\n </span>\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 applyFocusElementLabel = (\n value: string,\n labelElement: FieldLabel\n ): void => {\n this.appliedLabel = value;\n this.labelAlignment = labelElement.sideAligned ? 'inline' : undefined;\n };\n\n protected hasAccessibleLabel(): boolean {\n const slotContent =\n this.querySelector('[slot=\"label\"]')?.textContent &&\n this.querySelector('[slot=\"label\"]')?.textContent?.trim() !== '';\n const slotAlt =\n this.querySelector('[slot=\"label\"]')?.getAttribute('alt')?.trim() &&\n this.querySelector('[slot=\"label\"]')\n ?.getAttribute('alt')\n ?.trim() !== '';\n return (\n !!this.label ||\n !!this.getAttribute('aria-label') ||\n !!this.getAttribute('aria-labelledby') ||\n !!this.appliedLabel ||\n !!slotContent ||\n !!slotAlt\n );\n }\n\n protected warnNoLabel(): void {\n if (window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `<${this.localName}> needs one of the following to be accessible:`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#accessibility',\n {\n type: 'accessibility',\n issues: [\n `an <sp-field-label> element with a \\`for\\` attribute referencing the \\`id\\` of the \\`<${this.localName}>\\`, or`,\n 'value supplied to the \"label\" attribute, which will be displayed visually as placeholder text, or',\n 'text content supplied in a <span> with slot=\"label\", which will also be displayed visually as placeholder text.',\n ],\n }\n );\n }\n }\n\n protected renderOverlay(menu: TemplateResult): TemplateResult {\n const container = this.renderContainer(menu);\n this.dependencyManager.add('sp-overlay');\n import('@spectrum-web-components/overlay/sp-overlay.js');\n return html`\n <sp-overlay\n @slottable-request=${this.handleSlottableRequest}\n @beforetoggle=${this.handleBeforetoggle}\n .triggerElement=${this as HTMLElement}\n .offset=${0}\n ?open=${this.open && this.dependencyManager.loaded}\n .placement=${this.isMobile.matches && !this.forcePopover\n ? undefined\n : this.placement}\n .type=${this.isMobile.matches && !this.forcePopover\n ? 'modal'\n : 'auto'}\n .receivesFocus=${'false'}\n .willPreventClose=${this.strategy?.preventNextToggle !== 'no' &&\n this.open &&\n this.dependencyManager.loaded}\n >\n ${container}\n </sp-overlay>\n `;\n }\n\n protected get renderDescriptionSlot(): TemplateResult {\n return html`\n <div id=${DESCRIPTION_ID}>\n <slot name=\"description\"></slot>\n </div>\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 if (this.tooltipEl) {\n this.tooltipEl.disabled = this.open;\n }\n return html`\n <button\n aria-controls=${ifDefined(this.open ? 'menu' : undefined)}\n aria-describedby=\"tooltip ${DESCRIPTION_ID}\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"true\"\n aria-labelledby=\"icon label applied-label pending-label\"\n id=\"button\"\n class=${ifDefined(\n this.labelAlignment\n ? `label-${this.labelAlignment}`\n : undefined\n )}\n @focus=${this.handleButtonFocus}\n @blur=${this.handleButtonBlur}\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </button>\n <slot\n aria-hidden=\"true\"\n name=\"tooltip\"\n id=\"tooltip\"\n @keydown=${this.handleKeydown}\n @slotchange=${this.handleTooltipSlotchange}\n ></slot>\n ${this.renderMenu} ${this.renderDescriptionSlot}\n `;\n }\n\n protected override willUpdate(changes: PropertyValues<this>): void {\n super.willUpdate(changes);\n if (changes.has('tabIndex') && !!this.tabIndex) {\n this.button.tabIndex = this.tabIndex;\n this.removeAttribute('tabindex');\n }\n }\n\n protected override update(changes: PropertyValues<this>): void {\n if (this.selects) {\n /**\n * Always force `selects` to \"single\" when set.\n *\n * @todo: Add support functionally and visually for \"multiple\"\n */\n this.selects = 'single';\n }\n if (changes.has('disabled') && this.disabled) {\n this.close();\n }\n if (changes.has('pending') && this.pending) {\n this.close();\n }\n if (changes.has('value')) {\n // MenuItems update a frame late for <slot> management,\n // await the same here.\n this.shouldScheduleManageSelection();\n }\n // Maybe it's finally time to remove this support?\n if (!this.hasUpdated) {\n this.deprecatedMenu = this.querySelector(':scope > sp-menu');\n this.deprecatedMenu?.toggleAttribute('ignore', true);\n this.deprecatedMenu?.setAttribute('selects', 'inherit');\n }\n if (window.__swc?.DEBUG) {\n if (!this.hasUpdated && this.querySelector(':scope > sp-menu')) {\n const { localName } = this;\n window.__swc.warn(\n this,\n `You no longer need to provide an <sp-menu> child to ${localName}. Any styling or attributes on the <sp-menu> will be ignored.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#sizes',\n { level: 'deprecation' }\n );\n }\n this.updateComplete.then(async () => {\n // Attributes should be user supplied, making them available before first update.\n // However, `appliesLabel` is applied by external elements that must be update complete as well to be bound appropriately.\n await new Promise((res) => requestAnimationFrame(res));\n await new Promise((res) => requestAnimationFrame(res));\n if (!this.hasAccessibleLabel()) {\n this.warnNoLabel();\n }\n });\n }\n super.update(changes);\n }\n\n protected bindButtonKeydownListener(): void {\n this.button.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (\n changes.has('open') &&\n this.overlayElement &&\n !this.strategy.overlay\n ) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected override async firstUpdated(\n changes: PropertyValues<this>\n ): Promise<void> {\n super.firstUpdated(changes);\n this.bindButtonKeydownListener();\n this.bindEvents();\n\n await this.updateComplete;\n if (this.overlayElement && !this.strategy.overlay) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n aria-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected renderContainer(menu: TemplateResult): TemplateResult {\n const accessibleMenu = html`\n ${this.dismissHelper} ${menu} ${this.dismissHelper}\n `;\n // @todo: test in mobile\n if (this.isMobile.matches && !this.forcePopover) {\n this.dependencyManager.add('sp-tray');\n import('@spectrum-web-components/tray/sp-tray.js');\n return html`\n <sp-tray\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n >\n ${accessibleMenu}\n </sp-tray>\n `;\n }\n this.dependencyManager.add('sp-popover');\n import('@spectrum-web-components/popover/sp-popover.js');\n return html`\n <sp-popover\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n placement=${this.placement}\n >\n ${accessibleMenu}\n </sp-popover>\n `;\n }\n\n protected hasRenderedOverlay = false;\n\n private onScroll(): void {\n this.dispatchEvent(\n new Event('scroll', {\n cancelable: true,\n composed: true,\n })\n );\n }\n\n protected get renderMenu(): TemplateResult {\n const menu = html`\n <sp-menu\n aria-labelledby=\"applied-label\"\n @change=${this.handleChange}\n id=\"menu\"\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n @scroll=${this.onScroll}\n role=${this.listRole}\n .selects=${this.selects}\n .selected=${this.value ? [this.value] : []}\n .shouldSupportDragAndSelect=${!this.isTouchDevice.matches}\n size=${this.size}\n @sp-menu-item-keydown=${this.handleEscape}\n @sp-menu-item-added-or-updated=${this.shouldManageSelection}\n >\n <slot @slotchange=${this.shouldScheduleManageSelection}></slot>\n </sp-menu>\n `;\n this.hasRenderedOverlay =\n this.hasRenderedOverlay ||\n this.focused ||\n this.open ||\n !!this.deprecatedMenu;\n if (this.hasRenderedOverlay) {\n if (this.dependencyManager.loaded) {\n this.dependencyManager.add('sp-overlay');\n }\n return this.renderOverlay(menu);\n }\n return menu;\n }\n\n /**\n * whether a selection change is already scheduled\n */\n public willManageSelection = false;\n\n /**\n * when the value changes or the menu slot changes, manage the selection on the next frame, if not already scheduled\n * @param event\n */\n protected shouldScheduleManageSelection(event?: Event): void {\n if (\n !this.willManageSelection &&\n (!event ||\n ((event.target as HTMLElement).getRootNode() as ShadowRoot)\n .host === this)\n ) {\n this.willManageSelection = true;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.manageSelection();\n });\n });\n }\n }\n\n /**\n * when an item is added or updated, manage the selection, if it's not already scheduled\n */\n protected shouldManageSelection(): void {\n if (this.willManageSelection) {\n return;\n }\n this.willManageSelection = true;\n this.manageSelection();\n }\n\n /**\n * updates menu selection based on value\n */\n protected async manageSelection(): Promise<void> {\n if (this.selects == null) return;\n\n this.selectionPromise = new Promise(\n (res) => (this.selectionResolver = res)\n );\n let selectedItem: MenuItem | undefined;\n await this.optionsMenu.updateComplete;\n if (this.recentlyConnected) {\n // Work around for attach timing differences in Safari and Firefox.\n // Remove when refactoring to Menu passthrough wrapper.\n await new Promise((res) => requestAnimationFrame(() => res(true)));\n this.recentlyConnected = false;\n }\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 this.willManageSelection = false;\n }\n\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.selectionPromise;\n return complete;\n }\n\n private recentlyConnected = false;\n\n private enterKeydownOn: EventTarget | null = null;\n\n protected handleEnterKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter') {\n return;\n }\n const target = event?.target as MenuItem;\n if (!target.open && target.hasSubmenu) {\n event.preventDefault();\n return;\n }\n\n if (this.enterKeydownOn) {\n event.preventDefault();\n return;\n }\n this.enterKeydownOn = event.target;\n this.addEventListener(\n 'keyup',\n async (keyupEvent: KeyboardEvent) => {\n if (keyupEvent.key !== 'Enter') {\n return;\n }\n this.enterKeydownOn = null;\n },\n { once: true }\n );\n };\n\n public bindEvents(): void {\n this.strategy?.abort();\n if (this.isMobile.matches) {\n this.strategy = new strategies['mobile'](this.button, this);\n } else {\n this.strategy = new strategies['desktop'](this.button, this);\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.updateComplete.then(() => {\n if (!this.tooltipEl?.selfManaged) {\n return;\n }\n const overlayElement = this.tooltipEl.overlayElement;\n if (overlayElement) {\n overlayElement.triggerElement = this.button;\n }\n });\n\n this.recentlyConnected = this.hasUpdated;\n this.addEventListener('focus', this.handleFocus);\n }\n\n public override disconnectedCallback(): void {\n this.close();\n this.strategy?.releaseDescription();\n super.disconnectedCallback();\n }\n}\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 Picker extends PickerBase {\n public static override get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected override get containerStyles(): StyleInfo {\n const styles = super.containerStyles;\n if (!this.quiet) {\n styles['min-width'] = `${this.offsetWidth}px`;\n }\n return styles;\n }\n\n protected override handleKeydown = (event: KeyboardEvent): void => {\n const { key } = event;\n const handledKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n ' ',\n 'Escape',\n ].includes(key);\n const openKeys = ['ArrowUp', 'ArrowDown', 'Enter', ' '].includes(key);\n const arrowKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n ].includes(key);\n this.focused = true;\n if ('Escape' === key) {\n this.handleEscape(event);\n return;\n }\n if (!handledKeys || this.readonly || this.pending) {\n return;\n }\n if (openKeys) {\n this.keyboardOpen();\n event.preventDefault();\n if (arrowKeys) {\n event.stopPropagation();\n }\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const nextItem = this.optionsMenu?.getNeighboringFocusableElement(\n this.selectedItem,\n key === 'ArrowLeft'\n );\n if (!this.value || nextItem !== this.selectedItem) {\n // updates picker text but does not fire change event until action is completed\n if (nextItem) this.setValueFromItem(nextItem as MenuItem);\n }\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["html", "nothing", "SizedMixin", "SpectrumElement", "property", "query", "state", "classMap", "ifDefined", "styleMap", "chevronStyles", "DependencyManagerController", "IS_MOBILE", "IS_TOUCH_DEVICE", "MatchMediaController", "pickerStyles", "strategies", "chevronClass", "event", "_event", "_a", "_b", "_c", "value", "labelElement", "target", "keyupEvent", "selectedItem", "oldSelectedItem", "options", "selected", "item", "menuChangeEvent", "oldValue", "open", "selectedItemContent", "oldContent", "content", "labelClasses", "appliedLabel", "_d", "_e", "_f", "_g", "slotContent", "slotAlt", "menu", "container", "changes", "accessibleMenu", "res", "complete", "overlayElement", "__decorateClass", "key", "handledKeys", "openKeys", "arrowKeys", "nextItem", "styles"]
|
|
4
|
+
"sourcesContent": ["/**\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n classMap,\n ifDefined,\n StyleInfo,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport type { FieldLabel } from '@spectrum-web-components/field-label';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemChildren,\n MenuItemKeydownEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport { Placement } from '@spectrum-web-components/overlay';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\nimport type { SlottableRequestEvent } from '@spectrum-web-components/overlay/src/slottable-request-event.js';\nimport { DependencyManagerController } from '@spectrum-web-components/reactive-controllers/src/DependencyManger.js';\nimport {\n IS_MOBILE,\n IS_TOUCH_DEVICE,\n MatchMediaController,\n} from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';\nimport type { Tooltip } from '@spectrum-web-components/tooltip';\nimport { DesktopController } from './DesktopController.js';\nimport { MobileController } from './MobileController.js';\nimport pickerStyles from './picker.css.js';\nimport { strategies } from './strategies.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\nexport const DESCRIPTION_ID = 'option-picker';\n\n/**\n * @element sp-picker\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 */\nexport class PickerBase extends SizedMixin(SpectrumElement, {\n noDefaultSize: true,\n}) {\n static override shadowRootOptions = {\n ...SpectrumElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public isMobile = new MatchMediaController(this, IS_MOBILE);\n\n public isTouchDevice = new MatchMediaController(this, IS_TOUCH_DEVICE);\n\n public strategy!: DesktopController | MobileController;\n\n @state()\n appliedLabel?: string;\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public dependencyManager = new DependencyManagerController(this);\n\n private deprecatedMenu: Menu | null = null;\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 /**\n * Forces the Picker to render as a popover on mobile instead of a tray.\n *\n * @memberof PickerBase\n */\n @property({ type: Boolean, reflect: true, attribute: 'force-popover' })\n public forcePopover = false;\n\n /** Whether the items are currently loading. */\n @property({ type: Boolean, reflect: true })\n public pending = false;\n\n /** Defines a string value that labels the Picker while it is in pending state. */\n @property({ type: String, attribute: 'pending-label' })\n public pendingLabel = 'Pending';\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 @state()\n public labelAlignment?: 'inline';\n\n protected get menuItems(): MenuItem[] {\n return this.optionsMenu.childItems;\n }\n\n @query('sp-menu')\n public optionsMenu!: Menu;\n\n /**\n * @deprecated\n * */\n public get selfManageFocusElement(): boolean {\n return true;\n }\n\n @query('sp-overlay')\n public overlayElement!: Overlay;\n\n protected tooltipEl?: Tooltip;\n\n /**\n * @type {\"top\" | \"top-start\" | \"top-end\" | \"right\" | \"right-start\" | \"right-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\" | \"left\" | \"left-start\" | \"left-end\"}\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 get selectedItem(): MenuItem | undefined {\n return this._selectedItem;\n }\n\n public set selectedItem(selectedItem: MenuItem | undefined) {\n this.selectedItemContent = selectedItem\n ? selectedItem.itemChildren\n : undefined;\n\n if (selectedItem === this.selectedItem) return;\n const oldSelectedItem = this.selectedItem;\n this._selectedItem = selectedItem;\n this.requestUpdate('selectedItem', oldSelectedItem);\n }\n\n _selectedItem?: MenuItem;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\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 if (this.disabled) {\n return;\n }\n\n this.focused = true;\n }\n\n // handled by interaction controller, desktop or mobile; this is only called with a programmatic this.click()\n public override click(): void {\n this.toggle();\n }\n\n // pointer events handled by interaction controller, desktop or mobile; this is only called with a programmatic this.button.click()\n public handleButtonClick(): void {\n if (this.disabled) {\n return;\n }\n this.toggle();\n }\n\n public handleButtonBlur(): void {\n this.focused = false;\n }\n\n public override focus(options?: FocusOptions): void {\n this.focusElement?.focus(options);\n }\n /**\n * @deprecated - Use `focus` instead.\n */\n public handleHelperFocus(): void {\n // set focused to true here instead of handleButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public handleFocus(): void {\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public handleChange(event: Event): void {\n if (this.strategy) {\n this.strategy.preventNextToggle = 'no';\n }\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n event.stopPropagation();\n if (event.cancelable) {\n this.setValueFromItem(selected, event);\n } else {\n // Non-cancelable \"change\" events announce a selection with no value\n // change that should close the Picker element.\n this.open = false;\n if (this.strategy) {\n this.strategy.open = false;\n }\n }\n }\n\n public handleButtonFocus(event: FocusEvent): void {\n this.strategy?.handleButtonFocus(event);\n }\n\n protected handleEscape = (\n event: MenuItemKeydownEvent | KeyboardEvent\n ): void => {\n if (event.key === 'Escape' && this.open) {\n event.stopPropagation();\n event.preventDefault();\n this.toggle(false);\n }\n };\n\n protected handleKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (\n !['ArrowUp', 'ArrowDown', 'Enter', ' ', 'Escape'].includes(\n event.key\n )\n ) {\n return;\n }\n if (event.key === 'Escape') {\n this.handleEscape(event);\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.keyboardOpen();\n };\n\n protected async keyboardOpen(): Promise<void> {\n // if the menu is not open, we need to toggle it and wait for it to open to focus on the first selected item\n if (!this.open || !this.strategy.open) {\n this.addEventListener(\n 'sp-opened',\n () => this.optionsMenu?.focusOnFirstSelectedItem(),\n {\n once: true,\n }\n );\n this.toggle(true);\n } else {\n // if the menu is already open, we need to focus on the first selected item\n this.optionsMenu?.focusOnFirstSelectedItem();\n }\n }\n\n protected async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n this.open = false;\n // should always close when \"setting\" a value\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n\n // Set a value.\n this.selectedItem = item;\n this.value = item?.value ?? '';\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n // Allow it to be prevented.\n cancelable: true,\n composed: true,\n })\n );\n if (!applyDefault && this.selects) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.setMenuItemSelected(this.selectedItem as MenuItem, false);\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, true);\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n if (this.strategy) {\n this.strategy.open = true;\n }\n return;\n } else if (!this.selects) {\n // Unset the value if not carrying a selection\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n return;\n }\n if (oldSelectedItem) {\n this.setMenuItemSelected(oldSelectedItem, false);\n }\n this.setMenuItemSelected(item, !!this.selects);\n }\n\n protected setMenuItemSelected(item: MenuItem, value: boolean): void {\n // matches null | undefined\n if (this.selects == null) return;\n item.selected = value;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly || this.pending || this.disabled) {\n return;\n }\n const open = typeof target !== 'undefined' ? target : !this.open;\n\n this.open = open;\n if (this.strategy) {\n this.strategy.open = this.open;\n }\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n if (this.strategy) {\n this.open = false;\n this.strategy.open = false;\n }\n }\n\n protected get containerStyles(): StyleInfo {\n // @todo: test in mobile\n /* c8 ignore next 5 */\n if (this.isMobile.matches) {\n return {\n '--swc-menu-width': '100%',\n };\n }\n return {};\n }\n\n @state()\n protected get selectedItemContent(): MenuItemChildren {\n return this._selectedItemContent || { icon: [], content: [] };\n }\n\n protected set selectedItemContent(\n selectedItemContent: MenuItemChildren | undefined\n ) {\n if (selectedItemContent === this.selectedItemContent) return;\n\n const oldContent = this.selectedItemContent;\n this._selectedItemContent = selectedItemContent;\n this.requestUpdate('selectedItemContent', oldContent);\n }\n\n _selectedItemContent?: MenuItemChildren;\n\n protected handleTooltipSlotchange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.tooltipEl = event.target.assignedElements()[0] as\n | Tooltip\n | undefined;\n\n // Set up trigger element for self-managed tooltips\n if (this.tooltipEl?.selfManaged) {\n // Wait for the tooltip to be fully initialized\n this.updateComplete.then(() => {\n if (this.tooltipEl?.overlayElement && this.button) {\n this.tooltipEl.overlayElement.triggerElement = this.button;\n }\n });\n }\n }\n\n public handleSlottableRequest = (_event: SlottableRequestEvent): void => {};\n\n protected handleBeforetoggle = (\n event: Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n ): void => {\n if (event.composedPath()[0] !== event.target) {\n return;\n }\n if (event.newState === 'closed') {\n if (this.strategy?.preventNextToggle === 'no') {\n this.open = false;\n } else if (!this.strategy?.pointerdownState) {\n // Prevent browser driven closure while opening the Picker\n // and the expected event series has not completed.\n this.overlayElement?.manuallyKeepOpen();\n }\n }\n if (!this.open) {\n this.optionsMenu.updateSelectedItemIndex();\n this.optionsMenu.closeDescendentOverlays();\n }\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\" id=\"label\">\n <span\n aria-hidden=${ifDefined(\n this.appliedLabel ? undefined : 'true'\n )}\n >\n ${this.label}\n </span>\n </slot>\n `;\n }\n\n protected renderLoader(): TemplateResult {\n import(\n '@spectrum-web-components/progress-circle/sp-progress-circle.js'\n );\n return html`\n <sp-progress-circle\n size=\"s\"\n indeterminate\n role=\"presentation\"\n class=\"progress-circle\"\n ></sp-progress-circle>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n label: true,\n };\n const appliedLabel = this.appliedLabel || this.label;\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span\n id=${ifDefined(\n this.value && this.selectedItem ? 'label' : undefined\n )}\n class=${classMap(labelClasses)}\n >\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.value && this.selectedItem\n ? html`\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"applied-label\"\n >\n ${appliedLabel}\n <slot name=\"label\"></slot>\n </span>\n `\n : html`\n <span hidden id=\"applied-label\">${appliedLabel}</span>\n `}\n ${this.invalid && !this.pending\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n ${this.pending\n ? html`\n ${this.renderLoader()}\n <span\n aria-hidden=\"true\"\n class=\"visually-hidden\"\n id=\"pending-label\"\n >\n ${this.pendingLabel}\n </span>\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 applyFocusElementLabel = (\n value: string,\n labelElement: FieldLabel\n ): void => {\n this.appliedLabel = value;\n this.labelAlignment = labelElement.sideAligned ? 'inline' : undefined;\n };\n\n protected hasAccessibleLabel(): boolean {\n const slotContent =\n this.querySelector('[slot=\"label\"]')?.textContent &&\n this.querySelector('[slot=\"label\"]')?.textContent?.trim() !== '';\n const slotAlt =\n this.querySelector('[slot=\"label\"]')?.getAttribute('alt')?.trim() &&\n this.querySelector('[slot=\"label\"]')\n ?.getAttribute('alt')\n ?.trim() !== '';\n return (\n !!this.label ||\n !!this.getAttribute('aria-label') ||\n !!this.getAttribute('aria-labelledby') ||\n !!this.appliedLabel ||\n !!slotContent ||\n !!slotAlt\n );\n }\n\n protected warnNoLabel(): void {\n if (window.__swc?.DEBUG) {\n window.__swc.warn(\n this,\n `<${this.localName}> needs one of the following to be accessible:`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#accessibility',\n {\n type: 'accessibility',\n issues: [\n `an <sp-field-label> element with a \\`for\\` attribute referencing the \\`id\\` of the \\`<${this.localName}>\\`, or`,\n 'value supplied to the \"label\" attribute, which will be displayed visually as placeholder text, or',\n 'text content supplied in a <span> with slot=\"label\", which will also be displayed visually as placeholder text.',\n ],\n }\n );\n }\n }\n\n protected renderOverlay(menu: TemplateResult): TemplateResult {\n const container = this.renderContainer(menu);\n this.dependencyManager.add('sp-overlay');\n import('@spectrum-web-components/overlay/sp-overlay.js');\n return html`\n <sp-overlay\n @slottable-request=${this.handleSlottableRequest}\n @beforetoggle=${this.handleBeforetoggle}\n .triggerElement=${this as HTMLElement}\n .offset=${0}\n ?open=${this.open && this.dependencyManager.loaded}\n .placement=${this.isMobile.matches && !this.forcePopover\n ? undefined\n : this.placement}\n .type=${this.isMobile.matches && !this.forcePopover\n ? 'modal'\n : 'auto'}\n .receivesFocus=${'false'}\n .willPreventClose=${this.strategy?.preventNextToggle !== 'no' &&\n this.open &&\n this.dependencyManager.loaded}\n >\n ${container}\n </sp-overlay>\n `;\n }\n\n protected get renderDescriptionSlot(): TemplateResult {\n return html`\n <div id=${DESCRIPTION_ID}>\n <slot name=\"description\"></slot>\n </div>\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 if (this.tooltipEl) {\n this.tooltipEl.disabled = this.open;\n }\n return html`\n <button\n aria-controls=${ifDefined(this.open ? 'menu' : undefined)}\n aria-describedby=\"tooltip ${DESCRIPTION_ID}\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"true\"\n aria-labelledby=\"icon label applied-label pending-label\"\n id=\"button\"\n class=${ifDefined(\n this.labelAlignment\n ? `label-${this.labelAlignment}`\n : undefined\n )}\n @focus=${this.handleButtonFocus}\n @blur=${this.handleButtonBlur}\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </button>\n <slot\n aria-hidden=\"true\"\n name=\"tooltip\"\n id=\"tooltip\"\n @keydown=${this.handleKeydown}\n @slotchange=${this.handleTooltipSlotchange}\n ></slot>\n ${this.renderMenu} ${this.renderDescriptionSlot}\n `;\n }\n\n protected override willUpdate(changes: PropertyValues<this>): void {\n super.willUpdate(changes);\n if (changes.has('tabIndex') && !!this.tabIndex) {\n this.button.tabIndex = this.tabIndex;\n this.removeAttribute('tabindex');\n }\n }\n\n protected override update(changes: PropertyValues<this>): void {\n if (this.selects) {\n /**\n * Always force `selects` to \"single\" when set.\n *\n * @todo: Add support functionally and visually for \"multiple\"\n */\n this.selects = 'single';\n }\n if (changes.has('disabled') && this.disabled) {\n this.close();\n }\n if (changes.has('pending') && this.pending) {\n this.close();\n }\n if (changes.has('value')) {\n // MenuItems update a frame late for <slot> management,\n // await the same here.\n this.shouldScheduleManageSelection();\n }\n // Maybe it's finally time to remove this support?\n if (!this.hasUpdated) {\n this.deprecatedMenu = this.querySelector(':scope > sp-menu');\n this.deprecatedMenu?.toggleAttribute('ignore', true);\n this.deprecatedMenu?.setAttribute('selects', 'inherit');\n }\n if (window.__swc?.DEBUG) {\n if (!this.hasUpdated && this.querySelector(':scope > sp-menu')) {\n const { localName } = this;\n window.__swc.warn(\n this,\n `You no longer need to provide an <sp-menu> child to ${localName}. Any styling or attributes on the <sp-menu> will be ignored.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/picker/#sizes',\n { level: 'deprecation' }\n );\n }\n this.updateComplete.then(async () => {\n // Attributes should be user supplied, making them available before first update.\n // However, `appliesLabel` is applied by external elements that must be update complete as well to be bound appropriately.\n await new Promise((res) => requestAnimationFrame(res));\n await new Promise((res) => requestAnimationFrame(res));\n if (!this.hasAccessibleLabel()) {\n this.warnNoLabel();\n }\n });\n }\n super.update(changes);\n }\n\n protected bindButtonKeydownListener(): void {\n this.button.addEventListener('keydown', this.handleKeydown);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (\n changes.has('open') &&\n this.overlayElement &&\n !this.strategy.overlay\n ) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected override async firstUpdated(\n changes: PropertyValues<this>\n ): Promise<void> {\n super.firstUpdated(changes);\n this.bindButtonKeydownListener();\n this.bindEvents();\n\n await this.updateComplete;\n if (this.overlayElement && !this.strategy.overlay) {\n this.strategy.overlay = this.overlayElement;\n }\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n aria-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected renderContainer(menu: TemplateResult): TemplateResult {\n const accessibleMenu = html`\n ${this.dismissHelper} ${menu} ${this.dismissHelper}\n `;\n // @todo: test in mobile\n if (this.isMobile.matches && !this.forcePopover) {\n this.dependencyManager.add('sp-tray');\n import('@spectrum-web-components/tray/sp-tray.js');\n return html`\n <sp-tray\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n >\n ${accessibleMenu}\n </sp-tray>\n `;\n }\n this.dependencyManager.add('sp-popover');\n import('@spectrum-web-components/popover/sp-popover.js');\n return html`\n <sp-popover\n id=\"popover\"\n role=\"presentation\"\n style=${styleMap(this.containerStyles)}\n placement=${this.placement}\n >\n ${accessibleMenu}\n </sp-popover>\n `;\n }\n\n protected hasRenderedOverlay = false;\n\n private onScroll(): void {\n this.dispatchEvent(\n new Event('scroll', {\n cancelable: true,\n composed: true,\n })\n );\n }\n\n protected get renderMenu(): TemplateResult {\n const menu = html`\n <sp-menu\n aria-labelledby=\"applied-label\"\n @change=${this.handleChange}\n id=\"menu\"\n @keydown=${{\n handleEvent: this.handleEnterKeydown,\n capture: true,\n }}\n @scroll=${this.onScroll}\n role=${this.listRole}\n .selects=${this.selects}\n .selected=${this.value ? [this.value] : []}\n .shouldSupportDragAndSelect=${!this.isTouchDevice.matches}\n size=${this.size}\n @sp-menu-item-keydown=${this.handleEscape}\n @sp-menu-item-added-or-updated=${this.shouldManageSelection}\n >\n <slot @slotchange=${this.shouldScheduleManageSelection}></slot>\n </sp-menu>\n `;\n this.hasRenderedOverlay =\n this.hasRenderedOverlay ||\n this.focused ||\n this.open ||\n !!this.deprecatedMenu;\n if (this.hasRenderedOverlay) {\n if (this.dependencyManager.loaded) {\n this.dependencyManager.add('sp-overlay');\n }\n return this.renderOverlay(menu);\n }\n return menu;\n }\n\n /**\n * whether a selection change is already scheduled\n */\n public willManageSelection = false;\n\n /**\n * when the value changes or the menu slot changes, manage the selection on the next frame, if not already scheduled\n * @param event\n */\n protected shouldScheduleManageSelection(event?: Event): void {\n if (\n !this.willManageSelection &&\n (!event ||\n ((event.target as HTMLElement).getRootNode() as ShadowRoot)\n .host === this)\n ) {\n this.willManageSelection = true;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.manageSelection();\n });\n });\n }\n }\n\n /**\n * when an item is added or updated, manage the selection, if it's not already scheduled\n */\n protected shouldManageSelection(): void {\n if (this.willManageSelection) {\n return;\n }\n this.willManageSelection = true;\n this.manageSelection();\n }\n\n /**\n * updates menu selection based on value\n */\n protected async manageSelection(): Promise<void> {\n if (this.selects == null) return;\n\n this.selectionPromise = new Promise(\n (res) => (this.selectionResolver = res)\n );\n let selectedItem: MenuItem | undefined;\n await this.optionsMenu.updateComplete;\n if (this.recentlyConnected) {\n // Work around for attach timing differences in Safari and Firefox.\n // Remove when refactoring to Menu passthrough wrapper.\n await new Promise((res) => requestAnimationFrame(() => res(true)));\n this.recentlyConnected = false;\n }\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 // Only clear value when items exist with real values but none match.\n // Preserve value if items are pending (lazy loaded, async render, incomplete upgrade).\n const hasItemsWithValues = this.menuItems.some(\n (item) =>\n item.value != null || item.getAttribute?.('value') != null\n );\n if (this.menuItems.length > 0 && hasItemsWithValues) {\n this.value = '';\n this.selectedItem = undefined;\n }\n }\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.optionsMenu.updateSelectedItemIndex();\n }\n this.selectionResolver();\n this.willManageSelection = false;\n }\n\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.selectionPromise;\n return complete;\n }\n\n private recentlyConnected = false;\n\n private enterKeydownOn: EventTarget | null = null;\n\n protected handleEnterKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter') {\n return;\n }\n const target = event?.target as MenuItem;\n if (!target.open && target.hasSubmenu) {\n event.preventDefault();\n return;\n }\n\n if (this.enterKeydownOn) {\n event.preventDefault();\n return;\n }\n this.enterKeydownOn = event.target;\n this.addEventListener(\n 'keyup',\n async (keyupEvent: KeyboardEvent) => {\n if (keyupEvent.key !== 'Enter') {\n return;\n }\n this.enterKeydownOn = null;\n },\n { once: true }\n );\n };\n\n public bindEvents(): void {\n this.strategy?.abort();\n if (this.isMobile.matches) {\n this.strategy = new strategies['mobile'](this.button, this);\n } else {\n this.strategy = new strategies['desktop'](this.button, this);\n }\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.updateComplete.then(() => {\n if (!this.tooltipEl?.selfManaged) {\n return;\n }\n const overlayElement = this.tooltipEl.overlayElement;\n if (overlayElement) {\n overlayElement.triggerElement = this.button;\n }\n });\n\n this.recentlyConnected = this.hasUpdated;\n this.addEventListener('focus', this.handleFocus);\n }\n\n public override disconnectedCallback(): void {\n this.close();\n this.strategy?.releaseDescription();\n super.disconnectedCallback();\n }\n}\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot description - The description content for the Picker\n * @slot tooltip - Tooltip to to be applied to the the Picker Button\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 Picker extends PickerBase {\n public static override get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected override get containerStyles(): StyleInfo {\n const styles = super.containerStyles;\n if (!this.quiet) {\n styles['min-width'] = `${this.offsetWidth}px`;\n }\n return styles;\n }\n\n protected override handleKeydown = (event: KeyboardEvent): void => {\n const { key } = event;\n const handledKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n ' ',\n 'Escape',\n ].includes(key);\n const openKeys = ['ArrowUp', 'ArrowDown', 'Enter', ' '].includes(key);\n const arrowKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n ].includes(key);\n this.focused = true;\n if ('Escape' === key) {\n this.handleEscape(event);\n return;\n }\n if (!handledKeys || this.readonly || this.pending) {\n return;\n }\n if (openKeys) {\n this.keyboardOpen();\n event.preventDefault();\n if (arrowKeys) {\n event.stopPropagation();\n }\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const nextItem = this.optionsMenu?.getNeighboringFocusableElement(\n this.selectedItem,\n key === 'ArrowLeft'\n );\n if (!this.value || nextItem !== this.selectedItem) {\n // updates picker text but does not fire change event until action is completed\n if (nextItem) this.setValueFromItem(nextItem as MenuItem);\n }\n };\n}\n"],
|
|
5
|
+
"mappings": "qNAYA,OAGI,QAAAA,EACA,WAAAC,EAEA,cAAAC,EACA,mBAAAC,MAEG,gCACP,OACI,YAAAC,EACA,SAAAC,EACA,SAAAC,MACG,kDACP,OACI,YAAAC,EACA,aAAAC,EAEA,YAAAC,MACG,kDAEP,OAAOC,MAAmB,iEAC1B,MAAO,gEACP,MAAO,iEAOP,MAAO,2CAIP,OAAS,+BAAAC,MAAmC,wEAC5C,OACI,aAAAC,EACA,mBAAAC,EACA,wBAAAC,MACG,kEAIP,OAAOC,MAAkB,kBACzB,OAAS,cAAAC,MAAkB,kBAE3B,MAAMC,EAAe,CACjB,EAAG,gCACH,EAAG,iCACH,EAAG,iCACH,GAAI,gCACR,EAEO,aAAM,eAAiB,gBAWvB,aAAM,mBAAmBf,EAAWC,EAAiB,CACxD,cAAe,EACnB,CAAC,CAAE,CAFI,kCAQH,KAAO,SAAW,IAAIW,EAAqB,KAAMF,CAAS,EAE1D,KAAO,cAAgB,IAAIE,EAAqB,KAAMD,CAAe,EAUrE,KAAO,kBAAoB,IAAIF,EAA4B,IAAI,EAE/D,KAAQ,eAA8B,KAGtC,KAAO,SAAW,GAGlB,KAAO,QAAU,GAMjB,KAAO,QAAU,GAQjB,KAAO,aAAe,GAItB,KAAO,QAAU,GAIjB,KAAO,aAAe,UAMtB,KAAO,KAAO,GAGd,KAAO,SAAW,GAElB,KAAO,QAAgC,SA8BvC,KAAO,UAAuB,eAG9B,KAAO,MAAQ,GAGf,KAAO,MAAQ,GAoBf,KAAU,SAA+B,UACzC,KAAU,SAAW,SA2ErB,KAAU,aACNO,GACO,CACHA,EAAM,MAAQ,UAAY,KAAK,OAC/BA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EACrB,KAAK,OAAO,EAAK,EAEzB,EAEA,KAAU,cAAiBA,GAA+B,CAEtD,GADA,KAAK,QAAU,GAEX,EAAC,CAAC,UAAW,YAAa,QAAS,IAAK,QAAQ,EAAE,SAC9CA,EAAM,GACV,EAIJ,IAAIA,EAAM,MAAQ,SAAU,CACxB,KAAK,aAAaA,CAAK,EACvB,MACJ,CACAA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EACrB,KAAK,aAAa,EACtB,EA6IA,KAAO,uBAA0BC,GAAwC,CAAC,EAE1E,KAAU,mBACND,GAIO,CA5bf,IAAAE,EAAAC,EAAAC,EA6bYJ,EAAM,aAAa,EAAE,CAAC,IAAMA,EAAM,SAGlCA,EAAM,WAAa,aACfE,EAAA,KAAK,WAAL,YAAAA,EAAe,qBAAsB,KACrC,KAAK,KAAO,IACJC,EAAA,KAAK,WAAL,MAAAA,EAAe,mBAGvBC,EAAA,KAAK,iBAAL,MAAAA,EAAqB,oBAGxB,KAAK,OACN,KAAK,YAAY,wBAAwB,EACzC,KAAK,YAAY,wBAAwB,GAEjD,EA+FA,4BAAyB,CACrBC,EACAC,IACO,CACP,KAAK,aAAeD,EACpB,KAAK,eAAiBC,EAAa,YAAc,SAAW,MAChE,EAkPA,KAAU,mBAAqB,GAkD/B,KAAO,oBAAsB,GAgF7B,KAAQ,iBAAmB,QAAQ,QAAQ,EAS3C,KAAQ,kBAAoB,GAE5B,KAAQ,eAAqC,KAE7C,KAAU,mBAAsBN,GAA+B,CAC3D,GAAIA,EAAM,MAAQ,QACd,OAEJ,MAAMO,EAASP,GAAA,YAAAA,EAAO,OACtB,GAAI,CAACO,EAAO,MAAQA,EAAO,WAAY,CACnCP,EAAM,eAAe,EACrB,MACJ,CAEA,GAAI,KAAK,eAAgB,CACrBA,EAAM,eAAe,EACrB,MACJ,CACA,KAAK,eAAiBA,EAAM,OAC5B,KAAK,iBACD,QACA,MAAOQ,GAA8B,CAC7BA,EAAW,MAAQ,UAGvB,KAAK,eAAiB,KAC1B,EACA,CAAE,KAAM,EAAK,CACjB,CACJ,EA7zBA,IAAc,WAAwB,CAClC,OAAO,KAAK,YAAY,UAC5B,CAQA,IAAW,wBAAkC,CACzC,MAAO,EACX,CAsBA,IAAW,cAAqC,CAC5C,OAAO,KAAK,aAChB,CAEA,IAAW,aAAaC,EAAoC,CAKxD,GAJA,KAAK,oBAAsBA,EACrBA,EAAa,aACb,OAEFA,IAAiB,KAAK,aAAc,OACxC,MAAMC,EAAkB,KAAK,aAC7B,KAAK,cAAgBD,EACrB,KAAK,cAAc,eAAgBC,CAAe,CACtD,CAOA,IAAW,cAA4B,CACnC,OAAI,KAAK,KACE,KAAK,YAET,KAAK,MAChB,CAEO,mBAA0B,CACzB,KAAK,WAIT,KAAK,QAAU,GACnB,CAGgB,OAAc,CAC1B,KAAK,OAAO,CAChB,CAGO,mBAA0B,CACzB,KAAK,UAGT,KAAK,OAAO,CAChB,CAEO,kBAAyB,CAC5B,KAAK,QAAU,EACnB,CAEgB,MAAMC,EAA8B,CArOxD,IAAAT,GAsOQA,EAAA,KAAK,eAAL,MAAAA,EAAmB,MAAMS,EAC7B,CAIO,mBAA0B,CAE7B,KAAK,QAAU,GACf,KAAK,OAAO,MAAM,CACtB,CAEO,aAAoB,CACnB,CAAC,KAAK,UAAY,KAAK,eACvB,KAAK,QAAU,KAAK,sBAAsB,EAElD,CAEO,aAAaX,EAAoB,CAChC,KAAK,WACL,KAAK,SAAS,kBAAoB,MAEtC,MAAMO,EAASP,EAAM,OACf,CAACY,CAAQ,EAAIL,EAAO,cAC1BP,EAAM,gBAAgB,EAClBA,EAAM,WACN,KAAK,iBAAiBY,EAAUZ,CAAK,GAIrC,KAAK,KAAO,GACR,KAAK,WACL,KAAK,SAAS,KAAO,IAGjC,CAEO,kBAAkBA,EAAyB,CA1QtD,IAAAE,GA2QQA,EAAA,KAAK,WAAL,MAAAA,EAAe,kBAAkBF,EACrC,CA8BA,MAAgB,cAA8B,CA1SlD,IAAAE,EA4SY,CAAC,KAAK,MAAQ,CAAC,KAAK,SAAS,MAC7B,KAAK,iBACD,YACA,IAAG,CA/SnB,IAAAA,EA+SsB,OAAAA,EAAA,KAAK,cAAL,YAAAA,EAAkB,4BACxB,CACI,KAAM,EACV,CACJ,EACA,KAAK,OAAO,EAAI,IAGhBA,EAAA,KAAK,cAAL,MAAAA,EAAkB,0BAE1B,CAEA,MAAgB,iBACZW,EACAC,EACa,CA9TrB,IAAAZ,EA+TQ,KAAK,KAAO,GAEZ,MAAMQ,EAAkB,KAAK,aACvBK,EAAW,KAAK,MActB,GAXA,KAAK,aAAeF,EACpB,KAAK,OAAQX,EAAAW,GAAA,YAAAA,EAAM,QAAN,KAAAX,EAAe,GAC5B,MAAM,KAAK,eASP,CARiB,KAAK,cACtB,IAAI,MAAM,SAAU,CAChB,QAAS,GAET,WAAY,GACZ,SAAU,EACd,CAAC,CACL,GACqB,KAAK,QAAS,CAC3BY,GACAA,EAAgB,eAAe,EAEnC,KAAK,oBAAoB,KAAK,aAA0B,EAAK,EACzDJ,GACA,KAAK,oBAAoBA,EAAiB,EAAI,EAElD,KAAK,aAAeA,EACpB,KAAK,MAAQK,EACb,KAAK,KAAO,GACR,KAAK,WACL,KAAK,SAAS,KAAO,IAEzB,MACJ,SAAW,CAAC,KAAK,QAAS,CAEtB,KAAK,aAAeL,EACpB,KAAK,MAAQK,EACb,MACJ,CACIL,GACA,KAAK,oBAAoBA,EAAiB,EAAK,EAEnD,KAAK,oBAAoBG,EAAM,CAAC,CAAC,KAAK,OAAO,CACjD,CAEU,oBAAoBA,EAAgBR,EAAsB,CAE5D,KAAK,SAAW,OACpBQ,EAAK,SAAWR,EACpB,CAEO,OAAOE,EAAwB,CAClC,GAAI,KAAK,UAAY,KAAK,SAAW,KAAK,SACtC,OAEJ,MAAMS,EAAO,OAAOT,GAAW,YAAcA,EAAS,CAAC,KAAK,KAE5D,KAAK,KAAOS,EACR,KAAK,WACL,KAAK,SAAS,KAAO,KAAK,KAElC,CAEO,OAAc,CACb,KAAK,UAGL,KAAK,WACL,KAAK,KAAO,GACZ,KAAK,SAAS,KAAO,GAE7B,CAEA,IAAc,iBAA6B,CAGvC,OAAI,KAAK,SAAS,QACP,CACH,mBAAoB,MACxB,EAEG,CAAC,CACZ,CAGA,IAAc,qBAAwC,CAClD,OAAO,KAAK,sBAAwB,CAAE,KAAM,CAAC,EAAG,QAAS,CAAC,CAAE,CAChE,CAEA,IAAc,oBACVC,EACF,CACE,GAAIA,IAAwB,KAAK,oBAAqB,OAEtD,MAAMC,EAAa,KAAK,oBACxB,KAAK,qBAAuBD,EAC5B,KAAK,cAAc,sBAAuBC,CAAU,CACxD,CAIU,wBACNlB,EACI,CAraZ,IAAAE,EAsaQ,KAAK,UAAYF,EAAM,OAAO,iBAAiB,EAAE,CAAC,GAK9CE,EAAA,KAAK,YAAL,MAAAA,EAAgB,aAEhB,KAAK,eAAe,KAAK,IAAM,CA7a3C,IAAAA,GA8aoBA,EAAA,KAAK,YAAL,MAAAA,EAAgB,gBAAkB,KAAK,SACvC,KAAK,UAAU,eAAe,eAAiB,KAAK,OAE5D,CAAC,CAET,CA4BU,mBAAmBiB,EAA0C,CACnE,OAAI,KAAK,OAAS,KAAK,aACZA,EAEJrC;AAAA;AAAA;AAAA,kCAGmBQ,EACV,KAAK,aAAe,OAAY,MACpC,CAAC;AAAA;AAAA,sBAEC,KAAK,KAAK;AAAA;AAAA;AAAA,SAI5B,CAEU,cAA+B,CACrC,cACI,gEACJ,EACOR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQX,CAEA,IAAc,eAAkC,CAC5C,MAAMsC,EAAe,CACjB,kBAAmB,KAAK,QAAU,QAAU,CAAC,CAAC,KAAK,MACnD,YAAa,CAAC,KAAK,MACnB,MAAO,EACX,EACMC,EAAe,KAAK,cAAgB,KAAK,MAC/C,MAAO,CACHvC;AAAA,0CAC8B,KAAK,QAAU,MAAM;AAAA,sBACzC,KAAK,oBAAoB,IAAI;AAAA;AAAA;AAAA,yBAG1BQ,EACD,KAAK,OAAS,KAAK,aAAe,QAAU,MAChD,CAAC;AAAA,4BACOD,EAAS+B,CAAY,CAAC;AAAA;AAAA,sBAE5B,KAAK,mBAAmB,KAAK,oBAAoB,OAAO,CAAC;AAAA;AAAA,kBAE7D,KAAK,OAAS,KAAK,aACftC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMUuC,CAAY;AAAA;AAAA;AAAA,wBAItBvC;AAAA,4DACsCuC,CAAY;AAAA,uBACjD;AAAA,kBACL,KAAK,SAAW,CAAC,KAAK,QAClBvC;AAAA;AAAA;AAAA;AAAA,wBAKAC,CAAO;AAAA,kBACX,KAAK,QACDD;AAAA,4BACM,KAAK,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMf,KAAK,YAAY;AAAA;AAAA,wBAG3BC,CAAO;AAAA;AAAA,oCAEOgB,EACZ,KAAK,IACT,CAAC;AAAA;AAAA,aAGb,CACJ,CAUU,oBAA8B,CApjB5C,IAAAG,EAAAC,EAAAC,EAAAkB,EAAAC,EAAAC,EAAAC,EAqjBQ,MAAMC,IACFxB,EAAA,KAAK,cAAc,gBAAgB,IAAnC,YAAAA,EAAsC,gBACtCE,GAAAD,EAAA,KAAK,cAAc,gBAAgB,IAAnC,YAAAA,EAAsC,cAAtC,YAAAC,EAAmD,UAAW,GAC5DuB,IACFJ,GAAAD,EAAA,KAAK,cAAc,gBAAgB,IAAnC,YAAAA,EAAsC,aAAa,SAAnD,YAAAC,EAA2D,WAC3DE,GAAAD,EAAA,KAAK,cAAc,gBAAgB,IAAnC,YAAAA,EACM,aAAa,SADnB,YAAAC,EAEM,UAAW,GACrB,MACI,CAAC,CAAC,KAAK,OACP,CAAC,CAAC,KAAK,aAAa,YAAY,GAChC,CAAC,CAAC,KAAK,aAAa,iBAAiB,GACrC,CAAC,CAAC,KAAK,cACP,CAAC,CAACC,GACF,CAAC,CAACC,CAEV,CAEU,aAAoB,CAgB9B,CAEU,cAAcC,EAAsC,CAzlBlE,IAAA1B,EA0lBQ,MAAM2B,EAAY,KAAK,gBAAgBD,CAAI,EAC3C,YAAK,kBAAkB,IAAI,YAAY,EACvC,OAAO,gDAAgD,EAChD9C;AAAA;AAAA,qCAEsB,KAAK,sBAAsB;AAAA,gCAChC,KAAK,kBAAkB;AAAA,kCACrB,IAAmB;AAAA,0BAC3B,CAAC;AAAA,wBACH,KAAK,MAAQ,KAAK,kBAAkB,MAAM;AAAA,6BACrC,KAAK,SAAS,SAAW,CAAC,KAAK,aACtC,OACA,KAAK,SAAS;AAAA,wBACZ,KAAK,SAAS,SAAW,CAAC,KAAK,aACjC,QACA,MAAM;AAAA,iCACK,OAAO;AAAA,sCACJoB,EAAA,KAAK,WAAL,YAAAA,EAAe,qBAAsB,MACzD,KAAK,MACL,KAAK,kBAAkB,MAAM;AAAA;AAAA,kBAE3B2B,CAAS;AAAA;AAAA,SAGvB,CAEA,IAAc,uBAAwC,CAClD,OAAO/C;AAAA,sBACO,cAAc;AAAA;AAAA;AAAA,SAIhC,CAGmB,QAAyB,CACxC,OAAI,KAAK,YACL,KAAK,UAAU,SAAW,KAAK,MAE5BA;AAAA;AAAA,gCAEiBQ,EAAU,KAAK,KAAO,OAAS,MAAS,CAAC;AAAA,4CAC7B,cAAc;AAAA,gCAC1B,KAAK,KAAO,OAAS,OAAO;AAAA;AAAA;AAAA;AAAA,wBAIpCA,EACJ,KAAK,eACC,SAAS,KAAK,cAAc,GAC5B,MACV,CAAC;AAAA,yBACQ,KAAK,iBAAiB;AAAA,wBACvB,KAAK,gBAAgB;AAAA,2BAClB,CACP,YAAa,KAAK,mBAClB,QAAS,EACb,CAAC;AAAA,4BACW,KAAK,QAAQ;AAAA;AAAA,kBAEvB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMT,KAAK,aAAa;AAAA,8BACf,KAAK,uBAAuB;AAAA;AAAA,cAE5C,KAAK,UAAU,IAAI,KAAK,qBAAqB;AAAA,SAEvD,CAEmB,WAAWwC,EAAqC,CAC/D,MAAM,WAAWA,CAAO,EACpBA,EAAQ,IAAI,UAAU,GAAO,KAAK,WAClC,KAAK,OAAO,SAAW,KAAK,SAC5B,KAAK,gBAAgB,UAAU,EAEvC,CAEmB,OAAOA,EAAqC,CA3qBnE,IAAA5B,EAAAC,EA4qBY,KAAK,UAML,KAAK,QAAU,UAEf2B,EAAQ,IAAI,UAAU,GAAK,KAAK,UAChC,KAAK,MAAM,EAEXA,EAAQ,IAAI,SAAS,GAAK,KAAK,SAC/B,KAAK,MAAM,EAEXA,EAAQ,IAAI,OAAO,GAGnB,KAAK,8BAA8B,EAGlC,KAAK,aACN,KAAK,eAAiB,KAAK,cAAc,kBAAkB,GAC3D5B,EAAA,KAAK,iBAAL,MAAAA,EAAqB,gBAAgB,SAAU,KAC/CC,EAAA,KAAK,iBAAL,MAAAA,EAAqB,aAAa,UAAW,YAsBjD,MAAM,OAAO2B,CAAO,CACxB,CAEU,2BAAkC,CACxC,KAAK,OAAO,iBAAiB,UAAW,KAAK,aAAa,CAC9D,CAEmB,QAAQA,EAAqC,CAC5D,MAAM,QAAQA,CAAO,EAEjBA,EAAQ,IAAI,MAAM,GAClB,KAAK,gBACL,CAAC,KAAK,SAAS,UAEf,KAAK,SAAS,QAAU,KAAK,eAErC,CAEA,MAAyB,aACrBA,EACa,CACb,MAAM,aAAaA,CAAO,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,WAAW,EAEhB,MAAM,KAAK,eACP,KAAK,gBAAkB,CAAC,KAAK,SAAS,UACtC,KAAK,SAAS,QAAU,KAAK,eAErC,CAEA,IAAc,eAAgC,CAC1C,OAAOhD;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKc,KAAK,KAAK;AAAA;AAAA;AAAA,SAInC,CAEU,gBAAgB8C,EAAsC,CAC5D,MAAMG,EAAiBjD;AAAA,cACjB,KAAK,aAAa,IAAI8C,CAAI,IAAI,KAAK,aAAa;AAAA,UAGtD,OAAI,KAAK,SAAS,SAAW,CAAC,KAAK,cAC/B,KAAK,kBAAkB,IAAI,SAAS,EACpC,OAAO,0CAA0C,EAC1C9C;AAAA;AAAA;AAAA;AAAA,4BAISS,EAAS,KAAK,eAAe,CAAC;AAAA;AAAA,sBAEpCwC,CAAc;AAAA;AAAA,gBAI5B,KAAK,kBAAkB,IAAI,YAAY,EACvC,OAAO,gDAAgD,EAChDjD;AAAA;AAAA;AAAA;AAAA,wBAISS,EAAS,KAAK,eAAe,CAAC;AAAA,4BAC1B,KAAK,SAAS;AAAA;AAAA,kBAExBwC,CAAc;AAAA;AAAA,UAG5B,CAIQ,UAAiB,CACrB,KAAK,cACD,IAAI,MAAM,SAAU,CAChB,WAAY,GACZ,SAAU,EACd,CAAC,CACL,CACJ,CAEA,IAAc,YAA6B,CACvC,MAAMH,EAAO9C;AAAA;AAAA;AAAA,0BAGK,KAAK,YAAY;AAAA;AAAA,2BAEhB,CACP,YAAa,KAAK,mBAClB,QAAS,EACb,CAAC;AAAA,0BACS,KAAK,QAAQ;AAAA,uBAChB,KAAK,QAAQ;AAAA,2BACT,KAAK,OAAO;AAAA,4BACX,KAAK,MAAQ,CAAC,KAAK,KAAK,EAAI,CAAC,CAAC;AAAA,8CACZ,CAAC,KAAK,cAAc,OAAO;AAAA,uBAClD,KAAK,IAAI;AAAA,wCACQ,KAAK,YAAY;AAAA,iDACR,KAAK,qBAAqB;AAAA;AAAA,oCAEvC,KAAK,6BAA6B;AAAA;AAAA,UAQ9D,OALA,KAAK,mBACD,KAAK,oBACL,KAAK,SACL,KAAK,MACL,CAAC,CAAC,KAAK,eACP,KAAK,oBACD,KAAK,kBAAkB,QACvB,KAAK,kBAAkB,IAAI,YAAY,EAEpC,KAAK,cAAc8C,CAAI,GAE3BA,CACX,CAWU,8BAA8B5B,EAAqB,CAErD,CAAC,KAAK,sBACL,CAACA,GACIA,EAAM,OAAuB,YAAY,EACtC,OAAS,QAElB,KAAK,oBAAsB,GAC3B,sBAAsB,IAAM,CACxB,sBAAsB,IAAM,CACxB,KAAK,gBAAgB,CACzB,CAAC,CACL,CAAC,EAET,CAKU,uBAA8B,CAChC,KAAK,sBAGT,KAAK,oBAAsB,GAC3B,KAAK,gBAAgB,EACzB,CAKA,MAAgB,iBAAiC,CAC7C,GAAI,KAAK,SAAW,KAAM,OAE1B,KAAK,iBAAmB,IAAI,QACvBgC,GAAS,KAAK,kBAAoBA,CACvC,EACA,IAAIvB,EAeJ,GAdA,MAAM,KAAK,YAAY,eACnB,KAAK,oBAGL,MAAM,IAAI,QAASuB,GAAQ,sBAAsB,IAAMA,EAAI,EAAI,CAAC,CAAC,EACjE,KAAK,kBAAoB,IAE7B,KAAK,UAAU,QAASnB,GAAS,CACzB,KAAK,QAAUA,EAAK,OAAS,CAACA,EAAK,SACnCJ,EAAeI,EAEfA,EAAK,SAAW,EAExB,CAAC,EACGJ,EACAA,EAAa,SAAW,CAAC,CAAC,KAAK,QAC/B,KAAK,aAAeA,MACjB,CAGH,MAAMwB,EAAqB,KAAK,UAAU,KACrCpB,GAAM,CAt5BvB,IAAAX,EAu5BoB,OAAAW,EAAK,OAAS,QAAQX,EAAAW,EAAK,eAAL,YAAAX,EAAA,KAAAW,EAAoB,WAAY,KAC9D,EACI,KAAK,UAAU,OAAS,GAAKoB,IAC7B,KAAK,MAAQ,GACb,KAAK,aAAe,OAE5B,CACI,KAAK,OACL,MAAM,KAAK,YAAY,eACvB,KAAK,YAAY,wBAAwB,GAE7C,KAAK,kBAAkB,EACvB,KAAK,oBAAsB,EAC/B,CAKA,MAAyB,mBAAsC,CAC3D,MAAMC,EAAY,MAAM,MAAM,kBAAkB,EAChD,aAAM,KAAK,iBACJA,CACX,CAiCO,YAAmB,CA98B9B,IAAAhC,GA+8BQA,EAAA,KAAK,WAAL,MAAAA,EAAe,QACX,KAAK,SAAS,QACd,KAAK,SAAW,IAAIJ,EAAW,OAAU,KAAK,OAAQ,IAAI,EAE1D,KAAK,SAAW,IAAIA,EAAW,QAAW,KAAK,OAAQ,IAAI,CAEnE,CAEgB,mBAA0B,CACtC,MAAM,kBAAkB,EACxB,KAAK,eAAe,KAAK,IAAM,CAz9BvC,IAAAI,EA09BY,GAAI,GAACA,EAAA,KAAK,YAAL,MAAAA,EAAgB,aACjB,OAEJ,MAAMiC,EAAiB,KAAK,UAAU,eAClCA,IACAA,EAAe,eAAiB,KAAK,OAE7C,CAAC,EAED,KAAK,kBAAoB,KAAK,WAC9B,KAAK,iBAAiB,QAAS,KAAK,WAAW,CACnD,CAEgB,sBAA6B,CAv+BjD,IAAAjC,EAw+BQ,KAAK,MAAM,GACXA,EAAA,KAAK,WAAL,MAAAA,EAAe,qBACf,MAAM,qBAAqB,CAC/B,CACJ,CA/5Ba,WAGO,kBAAoB,CAChC,GAAGjB,EAAgB,kBACnB,eAAgB,EACpB,EASAmD,EAAA,CADChD,EAAM,GAdE,WAeT,4BAGOgD,EAAA,CADNjD,EAAM,SAAS,GAjBP,WAkBF,sBAOAiD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GAxBjC,WAyBF,wBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA3BjC,WA4BF,uBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GA9BhC,WA+BF,qBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GAjCjC,WAkCF,uBAQAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,GAAM,UAAW,eAAgB,CAAC,GAzC7D,WA0CF,4BAIAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA7CjC,WA8CF,uBAIAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,OAAQ,UAAW,eAAgB,CAAC,GAjD7C,WAkDF,4BAGAkD,EAAA,CADNlD,EAAS,GApDD,WAqDF,qBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GAvDjC,WAwDF,oBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA1DjC,WA2DF,wBAKAkD,EAAA,CADNhD,EAAM,GA/DE,WAgEF,8BAOAgD,EAAA,CADNjD,EAAM,SAAS,GAtEP,WAuEF,2BAUAiD,EAAA,CADNjD,EAAM,YAAY,GAhFV,WAiFF,8BAUAiD,EAAA,CADNlD,EAAS,GA1FD,WA2FF,yBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA7FjC,WA8FF,qBAGAkD,EAAA,CADNlD,EAAS,CAAE,KAAM,MAAO,CAAC,GAhGjB,WAiGF,qBAGIkD,EAAA,CADVlD,EAAS,CAAE,UAAW,EAAM,CAAC,GAnGrB,WAoGE,4BAkOGkD,EAAA,CADbhD,EAAM,GArUE,WAsUK,mCAsmBX,aAAM,eAAe,UAAW,CAAhC,kCAaH,KAAmB,cAAiBY,GAA+B,CAtgCvE,IAAAE,EAugCQ,KAAM,CAAE,IAAAmC,CAAI,EAAIrC,EACVsC,EAAc,CAChB,UACA,YACA,YACA,aACA,QACA,IACA,QACJ,EAAE,SAASD,CAAG,EACRE,EAAW,CAAC,UAAW,YAAa,QAAS,GAAG,EAAE,SAASF,CAAG,EAC9DG,EAAY,CACd,UACA,YACA,YACA,YACJ,EAAE,SAASH,CAAG,EAEd,GADA,KAAK,QAAU,GACEA,IAAb,SAAkB,CAClB,KAAK,aAAarC,CAAK,EACvB,MACJ,CACA,GAAI,CAACsC,GAAe,KAAK,UAAY,KAAK,QACtC,OAEJ,GAAIC,EAAU,CACV,KAAK,aAAa,EAClBvC,EAAM,eAAe,EACjBwC,GACAxC,EAAM,gBAAgB,EAE1B,MACJ,CACAA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,MAAMyC,GAAWvC,EAAA,KAAK,cAAL,YAAAA,EAAkB,+BAC/B,KAAK,aACLmC,IAAQ,cAER,CAAC,KAAK,OAASI,IAAa,KAAK,eAE7BA,GAAU,KAAK,iBAAiBA,CAAoB,CAEhE,EAxDA,WAA2B,QAAyB,CAChD,MAAO,CAAC5C,EAAcL,CAAa,CACvC,CAEA,IAAuB,iBAA6B,CAChD,MAAMkD,EAAS,MAAM,gBACrB,OAAK,KAAK,QACNA,EAAO,WAAW,EAAI,GAAG,KAAK,WAAW,MAEtCA,CACX,CA+CJ",
|
|
6
|
+
"names": ["html", "nothing", "SizedMixin", "SpectrumElement", "property", "query", "state", "classMap", "ifDefined", "styleMap", "chevronStyles", "DependencyManagerController", "IS_MOBILE", "IS_TOUCH_DEVICE", "MatchMediaController", "pickerStyles", "strategies", "chevronClass", "event", "_event", "_a", "_b", "_c", "value", "labelElement", "target", "keyupEvent", "selectedItem", "oldSelectedItem", "options", "selected", "item", "menuChangeEvent", "oldValue", "open", "selectedItemContent", "oldContent", "content", "labelClasses", "appliedLabel", "_d", "_e", "_f", "_g", "slotContent", "slotAlt", "menu", "container", "changes", "accessibleMenu", "res", "hasItemsWithValues", "complete", "overlayElement", "__decorateClass", "key", "handledKeys", "openKeys", "arrowKeys", "nextItem", "styles"]
|
|
7
7
|
}
|