@patternfly/pfe-core 5.0.4 → 5.0.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-controller.js","sourceRoot":"","sources":["combobox-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { isServer, nothing, type ReactiveController, type ReactiveControllerHost } from 'lit';\nimport type { ActivedescendantControllerOptions } from './activedescendant-controller.js';\nimport type { RovingTabindexControllerOptions } from './roving-tabindex-controller.js';\nimport type { ATFocusController } from './at-focus-controller';\nimport type { ListboxControllerOptions } from './listbox-controller.js';\n\nimport { ListboxController, isItem, isItemDisabled } from './listbox-controller.js';\nimport { RovingTabindexController } from './roving-tabindex-controller.js';\nimport { ActivedescendantController } from './activedescendant-controller.js';\nimport { InternalsController } from './internals-controller.js';\nimport { getRandomId } from '../functions/random.js';\nimport type { RequireProps } from '../core.js';\n\ntype AllOptions<Item extends HTMLElement> =\n ActivedescendantControllerOptions<Item>\n & ListboxControllerOptions<Item>\n & RovingTabindexControllerOptions<Item>;\n\ntype Lang = typeof ComboboxController['langs'][number];\n\nfunction deepClosest(element: Element | null, selector: string) {\n let closest = element?.closest(selector);\n let root = element?.getRootNode();\n let count = 0;\n while (count < 500 && !closest && element) {\n count++;\n root = element.getRootNode();\n if (root instanceof ShadowRoot) {\n element = root.host;\n } else if (root instanceof Document) {\n element = document.documentElement;\n } else {\n return null;\n }\n closest = element.closest(selector);\n }\n return closest;\n}\n\nfunction getItemValue<Item extends HTMLElement>(item: Item): string {\n if ('value' in item && typeof item.value === 'string') {\n return item.value;\n } else {\n return '';\n }\n}\n\nfunction isItemFiltered<Item extends HTMLElement>(item: Item, value: string): boolean {\n return !getItemValue(item)\n .toLowerCase()\n .startsWith(value.toLowerCase());\n}\n\nfunction setItemHidden(item: HTMLElement, hidden: boolean) {\n item.hidden = hidden;\n}\n\nfunction setComboboxValue(item: HTMLElement, value: string): void {\n if (!('value' in item)) {\n // eslint-disable-next-line no-console\n return console.warn(`Cannot set value on combobox element ${item.localName}`);\n } else {\n item.value = value;\n }\n}\n\nfunction getComboboxValue(combobox: HTMLElement): string {\n if ('value' in combobox && typeof combobox.value === 'string') {\n return combobox.value;\n } else {\n // eslint-disable-next-line no-console\n return console.warn(`Cannot get value from combobox element ${combobox.localName}`), '';\n }\n}\n\nexport interface ComboboxControllerOptions<Item extends HTMLElement> extends\n Omit<AllOptions<Item>,\n | 'getATFocusedItem'\n | 'getControlsElements'\n | 'getActiveDescendantContainer'\n | 'getItemsContainer'> {\n /**\n * Predicate which establishes whether the listbox is expanded\n * e.g. `isExpanded: () => this.expanded`, if the host's `expanded` property\n * should correspond to the listbox expanded state.\n */\n isExpanded(): boolean;\n /**\n * Callback which the host must implement to change the expanded state to true.\n * Return or resolve false to prevent the change.\n */\n requestShowListbox(): void | boolean | Promise<boolean> | Promise<void>;\n /**\n * Callback which the host must implement to change the expanded to false.\n * Return or resolve false to prevent the default.\n */\n requestHideListbox(): void | boolean | Promise<boolean> | Promise<void>;\n /**\n * Returns the listbox container element\n */\n getListboxElement(): HTMLElement | null;\n /**\n * Returns the toggle button, if it exists\n */\n getToggleButton(): HTMLElement | null;\n /**\n * Returns the combobox input, if it exists\n */\n getComboboxInput(): HTMLElement | null;\n /**\n * Returns the label for the toggle button, combobox input, and listbox.\n * when `ariaLabelledByElements` is supported, the label elements associated with\n * the host element are used instead, and this value is ignored.\n */\n getFallbackLabel(): string;\n /**\n * Called on an item to retrieve it's value string. By default, returns the `value` property\n * of the item, as if it implemented the `<option>` element's interface.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement\n */\n getItemValue?(item: Item): string;\n /**\n * Optional callback, called on the combobox input element to set its value.\n * by default, returns the element's `value` DOM property.\n */\n getComboboxValue?(combobox: HTMLElement): string;\n /**\n * Optional callback, called on the combobox input element to set its value.\n * by default, sets the element's `value` DOM property.\n */\n setComboboxValue?(item: HTMLElement, value: string): void;\n /**\n * Called on each item, with the combobox input, to determine if the item should be shown in the\n * listbox or filtered out. Return false to hide the item. By default, checks whether the item's\n * value starts with the input value (when both are lowercased).\n */\n isItemFiltered?(item: Item, value: string): boolean;\n /**\n * Called on each item when the filter changes.\n * By default, toggles the `hidden` attribute on the item\n */\n setItemHidden?(item: Item, hidden: boolean): void;\n}\n\n/**\n * @summary Implements the WAI-ARIA pattern [Editable Combobox with Both List and Inline Autocomplete].\n *\n * Combobox with keyboard and pointer navigation, using the aria-activedescendant pattern.\n *\n * WARNING: Safari VoiceOver does not support aria-activedescendant, so Safari users\n * rely on the combobox input value being announced when navigating the listbox with the keyboard.\n * We have erred on the side that it may be less-broken to avoid announcing disabled items in that\n * case, rather than announcing the disabled items value without indicating that it is disabled.\n * @see (https://bugs.webkit.org/show_bug.cgi?id=269026)\n *\n * [pattern]: https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-both/\n */\nexport class ComboboxController<\n Item extends HTMLElement\n> implements ReactiveController {\n public static of<T extends HTMLElement>(\n host: ReactiveControllerHost,\n options: ComboboxControllerOptions<T>,\n ): ComboboxController<T> {\n return new ComboboxController(host, options);\n }\n\n /**\n * Whether the `ariaActiveDescendantElement` IDL attribute is supported for cross-root ARIA.\n */\n public static get supportsCrossRootActiveDescendant(): boolean {\n return ActivedescendantController.supportsCrossRootActiveDescendant;\n }\n\n static #alert?: HTMLElement;\n\n static #alertTemplate = document.createElement('template');\n\n private static langs = [\n 'en',\n 'es',\n 'de',\n 'fr',\n 'it',\n 'ja',\n 'zh',\n ] as const;\n\n private static langsRE = new RegExp(ComboboxController.langs.join('|'));\n\n private static instances = new WeakMap<ReactiveControllerHost, ComboboxController<HTMLElement>>();\n\n private static hosts = new Set<ReactiveControllerHost>();\n\n static {\n // apply visually-hidden styles\n this.#alertTemplate.innerHTML = `\n <div role=\"alert\" style=\"\n border: 0;\n clip: rect(0, 0, 0, 0);\n block-size: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n inline-size: 1px;\n \"></div>\n `;\n }\n\n // Hide listbox on focusout\n static {\n if (!isServer) {\n document.addEventListener('focusout', event => {\n const target = event.target as HTMLElement;\n for (const host of ComboboxController.hosts) {\n if (host instanceof Node && host.contains(target)) {\n const instance = ComboboxController.instances.get(host);\n instance?._onFocusoutElement();\n }\n }\n });\n }\n }\n\n private options: RequireProps<ComboboxControllerOptions<Item>,\n | 'isItemDisabled'\n | 'isItem'\n | 'isItemFiltered'\n | 'getItemValue'\n | 'getOrientation'\n | 'getComboboxValue'\n | 'setComboboxValue'\n | 'setItemHidden'\n >;\n\n #lb: ListboxController<Item>;\n #fc?: ATFocusController<Item>;\n #preventListboxGainingFocus = false;\n #input: HTMLElement | null = null;\n #button: HTMLElement | null = null;\n #listbox: HTMLElement | null = null;\n #buttonInitialRole: string | null = null;\n #mo = new MutationObserver(() => this.#initItems());\n #microcopy = new Map<string, Record<Lang, string>>(Object.entries({\n dimmed: {\n en: 'dimmed',\n es: 'atenuada',\n de: 'gedimmt',\n it: 'oscurato',\n fr: 'atténué',\n ja: '暗くなった',\n zh: '变暗',\n },\n selected: {\n en: 'selected',\n es: 'seleccionado',\n de: 'ausgewählt',\n fr: 'choisie',\n it: 'selezionato',\n ja: '選ばれた',\n zh: '选',\n },\n of: {\n en: 'of',\n es: 'de',\n de: 'von',\n fr: 'sur',\n it: 'di',\n ja: '件目',\n zh: '的',\n },\n }));\n\n /** All items */\n get items(): Item[] {\n return this.#lb.items;\n }\n\n set items(value: Item[]) {\n this.#lb.items = value;\n }\n\n /** Whether the combobox is disabled */\n get disabled() {\n return this.#lb.disabled;\n }\n\n set disabled(value: boolean) {\n this.#lb.disabled = value;\n }\n\n /** Whether multiselect is enabled */\n get multi() {\n return this.#lb.multi;\n }\n\n set multi(value: boolean) {\n this.#lb.multi = value;\n }\n\n /** The current selection: a list of items */\n get selected() {\n return this.#lb.selected;\n }\n\n set selected(value: Item[]) {\n this.#lb.selected = value;\n }\n\n get #hasTextInput() {\n return this.options.getComboboxInput();\n }\n\n get #focusedItem() {\n return this.#fc?.items.at(Math.max(this.#fc?.atFocusedItemIndex ?? -1, 0)) ?? null;\n }\n\n get #element() {\n if (this.host instanceof HTMLElement) {\n return this.host;\n } else if (this.options.getListboxElement() instanceof HTMLElement) {\n return this.options.getListboxElement();\n }\n }\n\n private constructor(\n public host: ReactiveControllerHost,\n options: ComboboxControllerOptions<Item>,\n ) {\n host.addController(this);\n this.options = {\n isItem,\n getItemValue,\n isItemFiltered,\n isItemDisabled,\n getComboboxValue,\n setComboboxValue,\n setItemHidden,\n getOrientation: () => 'vertical',\n ...options,\n };\n this.#lb = ListboxController.of(host, {\n isItem: this.options.isItem,\n getItemsContainer: this.options.getListboxElement,\n getControlsElements: () => [\n this.options.getToggleButton(),\n this.options.getComboboxInput(),\n ].filter(x => !!x),\n getATFocusedItem: () => this.items[this.#fc?.atFocusedItemIndex ?? -1] ?? null,\n isItemDisabled: this.options.isItemDisabled,\n setItemSelected: this.options.setItemSelected,\n });\n ComboboxController.instances.set(host, this);\n ComboboxController.hosts.add(host);\n }\n\n async hostConnected(): Promise<void> {\n await this.host.updateComplete;\n this.hostUpdated();\n }\n\n hostUpdated(): void {\n if (!this.#fc) {\n this.#init();\n }\n const expanded = this.options.isExpanded();\n this.#button?.setAttribute('aria-expanded', String(expanded));\n this.#input?.setAttribute('aria-expanded', String(expanded));\n this.#initLabels();\n }\n\n hostDisconnected(): void {\n this.#fc?.hostDisconnected();\n }\n\n disconnect(): void {\n ComboboxController.instances.delete(this.host);\n ComboboxController.hosts.delete(this.host);\n }\n\n async _onFocusoutElement(): Promise<void> {\n if (this.#hasTextInput && this.options.isExpanded()) {\n const root = this.#element?.getRootNode();\n await new Promise(requestAnimationFrame);\n if (root instanceof ShadowRoot || root instanceof Document) {\n const { activeElement } = root;\n if (!this.#element?.contains(activeElement)) {\n this.#hide();\n }\n }\n }\n }\n\n /**\n * Order of operations is important\n */\n async #init() {\n await this.host.updateComplete;\n this.#initListbox();\n this.#initItems();\n this.#initButton();\n this.#initInput();\n this.#initLabels();\n this.#initController();\n }\n\n #initListbox() {\n this.#mo.disconnect();\n this.#listbox?.removeEventListener('focusout', this.#onFocusoutListbox);\n this.#listbox?.removeEventListener('keydown', this.#onKeydownListbox);\n this.#listbox?.removeEventListener('click', this.#onClickListbox);\n this.#listbox = this.options.getListboxElement();\n if (!this.#listbox) {\n throw new Error('ComboboxController getListboxElement() option must return an element');\n }\n this.#listbox.addEventListener('focusout', this.#onFocusoutListbox);\n this.#listbox.addEventListener('keydown', this.#onKeydownListbox);\n this.#listbox.addEventListener('click', this.#onClickListbox);\n this.#listbox.id ??= getRandomId();\n this.#mo.observe(this.#listbox, { childList: true });\n }\n\n #initButton() {\n this.#button?.removeEventListener('click', this.#onClickButton);\n this.#button?.removeEventListener('keydown', this.#onKeydownButton);\n this.#button = this.options.getToggleButton();\n if (!this.#button) {\n throw new Error('ComboboxController getToggleButton() option must return an element');\n }\n this.#buttonInitialRole = this.#button.role;\n this.#button.role = 'combobox';\n this.#button.setAttribute('aria-controls', this.#listbox?.id ?? '');\n this.#button.addEventListener('click', this.#onClickButton);\n this.#button.addEventListener('keydown', this.#onKeydownButton);\n }\n\n #initInput() {\n this.#input?.removeEventListener('click', this.#onClickButton);\n this.#input?.removeEventListener('keyup', this.#onKeyupInput);\n this.#input?.removeEventListener('keydown', this.#onKeydownInput);\n\n this.#input = this.options.getComboboxInput();\n if (this.#input && !('value' in this.#input)) {\n throw new Error(`ComboboxController getToggleInput() option must return an element with a value property`);\n } else if (this.#input) {\n this.#input.role = 'combobox';\n this.#button!.role = this.#buttonInitialRole;\n this.#input.setAttribute('aria-autocomplete', 'both');\n this.#input.setAttribute('aria-controls', this.#listbox?.id ?? '');\n this.#input.addEventListener('click', this.#onClickButton);\n this.#input.addEventListener('keyup', this.#onKeyupInput);\n this.#input.addEventListener('keydown', this.#onKeydownInput);\n }\n }\n\n #initLabels() {\n const labels = InternalsController.getLabels(this.host)\n ?? this.#element?.ariaLabelledByElements\n ?? [];\n const label = this.options.getFallbackLabel()\n || this.#element?.ariaLabelledByElements?.map(x => x.textContent).join('')\n || null;\n\n for (const element of [this.#button, this.#listbox, this.#input].filter(x => !!x)) {\n if ('ariaLabelledByElements' in HTMLElement.prototype && labels.filter(x => !!x).length) {\n element.ariaLabelledByElements = [...labels ?? []];\n } else {\n element.ariaLabel = label;\n }\n }\n }\n\n #initController() {\n this.#fc?.hostDisconnected();\n const { getOrientation } = this.options;\n const getItems = () => this.items;\n const getItemsContainer = () => this.#listbox;\n if (this.#hasTextInput) {\n this.#fc = ActivedescendantController.of(this.host, {\n getItems, getItemsContainer, getOrientation,\n getActiveDescendantContainer: () => this.#input,\n getControlsElements: () => [\n this.options.getToggleButton(),\n this.options.getComboboxInput(),\n ].filter(x => !!x),\n setItemActive: this.options.setItemActive,\n });\n } else {\n this.#fc = RovingTabindexController.of(this.host, {\n getItems, getItemsContainer, getOrientation,\n getControlsElements: () => [\n this.options.getToggleButton(),\n ].filter(x => !!x),\n });\n }\n }\n\n #initItems() {\n if (this.#listbox) {\n this.items = this.options.getItems();\n }\n }\n\n async #show(): Promise<void> {\n const success = await this.options.requestShowListbox();\n this.#filterItems();\n if (success !== false && !this.#hasTextInput) {\n if (!this.#preventListboxGainingFocus) {\n (this.#focusedItem ?? this.#fc?.items.at(0))?.focus();\n this.#preventListboxGainingFocus = false;\n }\n }\n }\n\n async #hide(): Promise<void> {\n await this.options.requestHideListbox();\n }\n\n async #toggle() {\n if (this.options.isExpanded()) {\n return this.#hide();\n } else {\n return this.#show();\n }\n }\n\n #translate(key: string, lang: Lang) {\n const strings = this.#microcopy.get(key);\n return strings?.[lang] ?? key;\n }\n\n // TODO(bennypowers): perhaps move this to ActivedescendantController\n #announce(item: Item) {\n const value = this.options.getItemValue(item);\n ComboboxController.#alert?.remove();\n const fragment = ComboboxController.#alertTemplate.content.cloneNode(true) as DocumentFragment;\n ComboboxController.#alert = fragment.firstElementChild as HTMLElement;\n let text = value;\n const lang = deepClosest(this.#listbox, '[lang]')?.getAttribute('lang') ?? 'en';\n const langKey = lang?.match(ComboboxController.langsRE)?.at(0) as Lang ?? 'en';\n if (this.options.isItemDisabled(item)) {\n text += ` (${this.#translate('dimmed', langKey)})`;\n }\n if (this.#lb.isSelected(item)) {\n text += `, (${this.#translate('selected', langKey)})`;\n }\n if (item.hasAttribute('aria-setsize') && item.hasAttribute('aria-posinset')) {\n if (langKey === 'ja') {\n text += `, (${item.getAttribute('aria-setsize')} 件中 ${item.getAttribute('aria-posinset')} 件目)`;\n } else {\n text += `, (${item.getAttribute('aria-posinset')} ${this.#translate('of', langKey)} ${item.getAttribute('aria-setsize')})`;\n }\n }\n ComboboxController.#alert.lang = lang;\n ComboboxController.#alert.innerText = text;\n document.body.append(ComboboxController.#alert);\n }\n\n #filterItems() {\n if (this.#input) {\n let value: string;\n for (const item of this.items) {\n const hidden =\n !!this.options.isExpanded()\n && !!(value = this.options.getComboboxValue(this.#input))\n && this.options.isItemFiltered?.(item, value)\n || false;\n this.options.setItemHidden(item, hidden);\n }\n }\n }\n\n #onClickButton = () => {\n if (!this.options.isExpanded()) {\n this.#show();\n } else {\n this.#hide();\n }\n };\n\n #onClickListbox = (event: MouseEvent) => {\n if (!this.multi && event.composedPath().some(this.options.isItem)) {\n this.#hide();\n }\n };\n\n /**\n * Handle keypresses on the input\n * ## `Down Arrow`\n * - If the textbox is not empty and the listbox is displayed,\n * moves visual focus to the first suggested value.\n * - If the textbox is empty and the listbox is not displayed,\n * opens the listbox and moves visual focus to the first option.\n * - In both cases DOM focus remains on the textbox.\n *\n * ## `Alt + Down Arrow`\n * Opens the listbox without moving focus or changing selection.\n *\n * ## `Up Arrow`\n * - If the textbox is not empty and the listbox is displayed,\n * moves visual focus to the last suggested value.\n * - If the textbox is empty, first opens the listbox if it is not already displayed\n * and then moves visual focus to the last option.\n * - In both cases DOM focus remains on the textbox.\n *\n * ## `Enter`\n * Closes the listbox if it is displayed.\n *\n * ## `Escape`\n * - If the listbox is displayed, closes it.\n * - If the listbox is not displayed, clears the textbox.\n *\n * ## Standard single line text editing keys\n * - Keys used for cursor movement and text manipulation,\n * such as `Delete` and `Shift + Right Arrow`.\n * - An HTML `input` with `type=\"text\"` is used for the textbox so the browser will provide\n * platform-specific editing keys.\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list\n * @param event keydown event\n */\n #onKeydownInput = (event: KeyboardEvent) => {\n if (event.ctrlKey || event.shiftKey || !this.#input) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n if (!this.options.isExpanded()) {\n this.#preventListboxGainingFocus = event.altKey;\n this.#show();\n }\n break;\n case 'Enter':\n if (!this.multi) {\n this.#hide();\n }\n break;\n case 'Escape':\n if (!this.options.isExpanded()) {\n this.options.setComboboxValue(this.#input, '');\n this.host.requestUpdate();\n }\n this.#hide();\n break;\n case 'Alt':\n case 'AltGraph':\n case 'Shift':\n case 'Control':\n case 'Fn':\n case 'Symbol':\n case 'Hyper':\n case 'Super':\n case 'Meta':\n case 'CapsLock':\n case 'FnLock':\n case 'NumLock':\n case 'Tab':\n case 'ScrollLock':\n case 'SymbolLock':\n case ' ':\n break;\n default:\n if (!this.options.isExpanded()) {\n this.#show();\n }\n }\n };\n\n /**\n * Populates the combobox input with the focused value when navigating the listbox,\n * and filters the items when typing.\n * @param event keyup event\n */\n #onKeyupInput = (event: KeyboardEvent) => {\n if (!this.#input) {\n return;\n }\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n /**\n * Safari VoiceOver does not support aria-activedescendant, so we must.\n * approximate the correct behaviour by constructing a visually-hidden alert role\n * @see (https://bugs.webkit.org/show_bug.cgi?id=269026)\n */\n if (this.#focusedItem\n && this.options.getComboboxInput()\n && InternalsController.isSafari) {\n this.#announce(this.#focusedItem);\n }\n break;\n default:\n this.#filterItems();\n }\n };\n\n #onKeydownButton = (event: KeyboardEvent) => {\n if (this.#hasTextInput) {\n return this.#onKeydownInput(event);\n } else {\n return this.#onKeydownToggleButton(event);\n }\n };\n\n #onKeydownListbox = (event: KeyboardEvent) => {\n if (!this.#hasTextInput) {\n switch (event.key) {\n case 'Home':\n case 'End':\n this.#onKeydownToggleButton(event);\n break;\n case 'Escape':\n this.#hide();\n this.#button?.focus();\n break;\n case 'Enter':\n case ' ': {\n const eventItem = event.composedPath().find(this.options.isItem);\n if (eventItem\n && !this.multi\n && this.options.isExpanded()\n && !this.options.isItemDisabled(eventItem)\n ) {\n this.#hide();\n this.#button?.focus();\n }\n }\n }\n }\n };\n\n #onFocusoutListbox = (event: FocusEvent) => {\n if (!this.#hasTextInput && this.options.isExpanded()) {\n const root = this.#element?.getRootNode();\n if ((root instanceof ShadowRoot || root instanceof Document)\n && !this.items.includes(event.relatedTarget as Item)\n ) {\n this.#hide();\n }\n }\n };\n\n #onKeydownToggleButton = async (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n if (!this.options.isExpanded()) {\n this.#show();\n }\n break;\n case 'Home':\n if (!this.options.isExpanded()) {\n await this.#show();\n }\n if (this.#fc) {\n this.#fc.atFocusedItemIndex = 0;\n }\n break;\n case 'End':\n if (!this.options.isExpanded()) {\n await this.#show();\n }\n if (this.#fc) {\n this.#fc.atFocusedItemIndex = this.items.length - 1;\n }\n break;\n case ' ':\n case 'Enter':\n // prevent scroll\n event.preventDefault();\n await this.#toggle();\n await this.host.updateComplete;\n if (!this.options.isExpanded()) {\n this.#button?.focus();\n }\n break;\n }\n };\n\n /**\n * For Browsers which do not support `ariaActiveDescendantElement`, we must clone\n * the listbox items into the same root as the combobox input\n * Call this method to return either an array of (cloned) list box items, to be placed in your\n * shadow template, or nothing in the case the browser supports cross-root aria.\n */\n public renderItemsToShadowRoot(): Node[] | typeof nothing {\n if (this.#fc instanceof ActivedescendantController) {\n return this.#fc.renderItemsToShadowRoot();\n } else {\n return nothing;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"combobox-controller.js","sourceRoot":"","sources":["combobox-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { isServer, nothing, type ReactiveController, type ReactiveControllerHost } from 'lit';\nimport type { ActivedescendantControllerOptions } from './activedescendant-controller.js';\nimport type { RovingTabindexControllerOptions } from './roving-tabindex-controller.js';\nimport type { ATFocusController } from './at-focus-controller.js';\nimport type { ListboxControllerOptions } from './listbox-controller.js';\n\nimport { ListboxController, isItem, isItemDisabled } from './listbox-controller.js';\nimport { RovingTabindexController } from './roving-tabindex-controller.js';\nimport { ActivedescendantController } from './activedescendant-controller.js';\nimport { InternalsController } from './internals-controller.js';\nimport { getRandomId } from '../functions/random.js';\nimport type { RequireProps } from '../core.js';\n\ntype AllOptions<Item extends HTMLElement> =\n ActivedescendantControllerOptions<Item>\n & ListboxControllerOptions<Item>\n & RovingTabindexControllerOptions<Item>;\n\ntype Lang = typeof ComboboxController['langs'][number];\n\nfunction deepClosest(element: Element | null, selector: string) {\n let closest = element?.closest(selector);\n let root = element?.getRootNode();\n let count = 0;\n while (count < 500 && !closest && element) {\n count++;\n root = element.getRootNode();\n if (root instanceof ShadowRoot) {\n element = root.host;\n } else if (root instanceof Document) {\n element = document.documentElement;\n } else {\n return null;\n }\n closest = element.closest(selector);\n }\n return closest;\n}\n\nfunction getItemValue<Item extends HTMLElement>(item: Item): string {\n if ('value' in item && typeof item.value === 'string') {\n return item.value;\n } else {\n return '';\n }\n}\n\nfunction isItemFiltered<Item extends HTMLElement>(item: Item, value: string): boolean {\n return !getItemValue(item)\n .toLowerCase()\n .startsWith(value.toLowerCase());\n}\n\nfunction setItemHidden(item: HTMLElement, hidden: boolean) {\n item.hidden = hidden;\n}\n\nfunction setComboboxValue(item: HTMLElement, value: string): void {\n if (!('value' in item)) {\n // eslint-disable-next-line no-console\n return console.warn(`Cannot set value on combobox element ${item.localName}`);\n } else {\n item.value = value;\n }\n}\n\nfunction getComboboxValue(combobox: HTMLElement): string {\n if ('value' in combobox && typeof combobox.value === 'string') {\n return combobox.value;\n } else {\n // eslint-disable-next-line no-console\n return console.warn(`Cannot get value from combobox element ${combobox.localName}`), '';\n }\n}\n\nexport interface ComboboxControllerOptions<Item extends HTMLElement> extends\n Omit<AllOptions<Item>,\n | 'getATFocusedItem'\n | 'getControlsElements'\n | 'getActiveDescendantContainer'\n | 'getItemsContainer'> {\n /**\n * Predicate which establishes whether the listbox is expanded\n * e.g. `isExpanded: () => this.expanded`, if the host's `expanded` property\n * should correspond to the listbox expanded state.\n */\n isExpanded(): boolean;\n /**\n * Callback which the host must implement to change the expanded state to true.\n * Return or resolve false to prevent the change.\n */\n requestShowListbox(): void | boolean | Promise<boolean> | Promise<void>;\n /**\n * Callback which the host must implement to change the expanded to false.\n * Return or resolve false to prevent the default.\n */\n requestHideListbox(): void | boolean | Promise<boolean> | Promise<void>;\n /**\n * Returns the listbox container element\n */\n getListboxElement(): HTMLElement | null;\n /**\n * Returns the toggle button, if it exists\n */\n getToggleButton(): HTMLElement | null;\n /**\n * Returns the combobox input, if it exists\n */\n getComboboxInput(): HTMLElement | null;\n /**\n * Returns the label for the toggle button, combobox input, and listbox.\n * when `ariaLabelledByElements` is supported, the label elements associated with\n * the host element are used instead, and this value is ignored.\n */\n getFallbackLabel(): string;\n /**\n * Called on an item to retrieve it's value string. By default, returns the `value` property\n * of the item, as if it implemented the `<option>` element's interface.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement\n */\n getItemValue?(item: Item): string;\n /**\n * Optional callback, called on the combobox input element to set its value.\n * by default, returns the element's `value` DOM property.\n */\n getComboboxValue?(combobox: HTMLElement): string;\n /**\n * Optional callback, called on the combobox input element to set its value.\n * by default, sets the element's `value` DOM property.\n */\n setComboboxValue?(item: HTMLElement, value: string): void;\n /**\n * Called on each item, with the combobox input, to determine if the item should be shown in the\n * listbox or filtered out. Return false to hide the item. By default, checks whether the item's\n * value starts with the input value (when both are lowercased).\n */\n isItemFiltered?(item: Item, value: string): boolean;\n /**\n * Called on each item when the filter changes.\n * By default, toggles the `hidden` attribute on the item\n */\n setItemHidden?(item: Item, hidden: boolean): void;\n}\n\n/**\n * @summary Implements the WAI-ARIA pattern [Editable Combobox with Both List and Inline Autocomplete].\n *\n * Combobox with keyboard and pointer navigation, using the aria-activedescendant pattern.\n *\n * WARNING: Safari VoiceOver does not support aria-activedescendant, so Safari users\n * rely on the combobox input value being announced when navigating the listbox with the keyboard.\n * We have erred on the side that it may be less-broken to avoid announcing disabled items in that\n * case, rather than announcing the disabled items value without indicating that it is disabled.\n * @see (https://bugs.webkit.org/show_bug.cgi?id=269026)\n *\n * [pattern]: https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-both/\n */\nexport class ComboboxController<\n Item extends HTMLElement\n> implements ReactiveController {\n public static of<T extends HTMLElement>(\n host: ReactiveControllerHost & HTMLElement,\n options: ComboboxControllerOptions<T>,\n ): ComboboxController<T> {\n return new ComboboxController(host, options);\n }\n\n /**\n * Whether the `ariaActiveDescendantElement` IDL attribute is supported for cross-root ARIA.\n */\n public static get supportsCrossRootActiveDescendant(): boolean {\n return ActivedescendantController.supportsCrossRootActiveDescendant;\n }\n\n static #alert?: HTMLElement;\n\n static #alertTemplate = document.createElement('template');\n\n private static langs = [\n 'en',\n 'es',\n 'de',\n 'fr',\n 'it',\n 'ja',\n 'zh',\n ] as const;\n\n private static langsRE = new RegExp(ComboboxController.langs.join('|'));\n\n private static instances = new WeakMap<ReactiveControllerHost, ComboboxController<HTMLElement>>();\n\n private static hosts = new Set<ReactiveControllerHost>();\n\n static {\n // apply visually-hidden styles\n this.#alertTemplate.innerHTML = `\n <div role=\"alert\" style=\"\n border: 0;\n clip: rect(0, 0, 0, 0);\n block-size: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n inline-size: 1px;\n \"></div>\n `;\n }\n\n // Hide listbox on focusout\n static {\n if (!isServer) {\n document.addEventListener('focusout', event => {\n const target = event.target as HTMLElement;\n for (const host of ComboboxController.hosts) {\n if (host instanceof Node && host.contains(target)) {\n const instance = ComboboxController.instances.get(host);\n instance?._onFocusoutElement();\n }\n }\n });\n }\n }\n\n private options: RequireProps<ComboboxControllerOptions<Item>,\n | 'isItemDisabled'\n | 'isItem'\n | 'isItemFiltered'\n | 'getItemValue'\n | 'getOrientation'\n | 'getComboboxValue'\n | 'setComboboxValue'\n | 'setItemHidden'\n >;\n\n #lb: ListboxController<Item>;\n #fc?: ATFocusController<Item>;\n #initializing = false;\n #preventListboxGainingFocus = false;\n #input: HTMLElement | null = null;\n #button: HTMLElement | null = null;\n #listbox: HTMLElement | null = null;\n #buttonInitialRole: string | null = null;\n #buttonHasMouseDown = false;\n #mo = new MutationObserver(() => this.#initItems());\n #microcopy = new Map<string, Record<Lang, string>>(Object.entries({\n dimmed: {\n en: 'dimmed',\n es: 'atenuada',\n de: 'gedimmt',\n it: 'oscurato',\n fr: 'atténué',\n ja: '暗くなった',\n zh: '变暗',\n },\n selected: {\n en: 'selected',\n es: 'seleccionado',\n de: 'ausgewählt',\n fr: 'choisie',\n it: 'selezionato',\n ja: '選ばれた',\n zh: '选',\n },\n of: {\n en: 'of',\n es: 'de',\n de: 'von',\n fr: 'sur',\n it: 'di',\n ja: '件目',\n zh: '的',\n },\n }));\n\n /** All items */\n get items(): Item[] {\n return this.#lb.items;\n }\n\n set items(value: Item[]) {\n this.#lb.items = value;\n this.#fc?.initItems();\n }\n\n /** Whether the combobox is disabled */\n get disabled() {\n return this.#lb.disabled;\n }\n\n set disabled(value: boolean) {\n this.#lb.disabled = value;\n }\n\n /** Whether multiselect is enabled */\n get multi() {\n return this.#lb.multi;\n }\n\n set multi(value: boolean) {\n this.#lb.multi = value;\n }\n\n /** The current selection: a list of items */\n get selected() {\n return this.#lb.selected;\n }\n\n set selected(value: Item[]) {\n this.#lb.selected = value;\n }\n\n get #hasTextInput() {\n return this.options.getComboboxInput();\n }\n\n get #focusedItem() {\n return this.#fc?.items.at(Math.max(this.#fc?.atFocusedItemIndex ?? -1, 0)) ?? null;\n }\n\n get #element() {\n if (this.host instanceof HTMLElement) {\n return this.host;\n } else if (this.options.getListboxElement() instanceof HTMLElement) {\n return this.options.getListboxElement();\n }\n }\n\n private constructor(\n public host: ReactiveControllerHost & HTMLElement,\n options: ComboboxControllerOptions<Item>,\n ) {\n host.addController(this);\n this.options = {\n isItem,\n getItemValue,\n isItemFiltered,\n isItemDisabled,\n getComboboxValue,\n setComboboxValue,\n setItemHidden,\n getOrientation: () => 'vertical',\n ...options,\n };\n this.#lb = ListboxController.of(host, {\n isItem: this.options.isItem,\n getItemsContainer: this.options.getListboxElement,\n getControlsElements: () => [\n this.options.getToggleButton(),\n this.options.getComboboxInput(),\n ].filter(x => !!x),\n getATFocusedItem: () => this.items[this.#fc?.atFocusedItemIndex ?? -1] ?? null,\n isItemDisabled: this.options.isItemDisabled,\n setItemSelected: this.options.setItemSelected,\n });\n ComboboxController.instances.set(host, this);\n ComboboxController.hosts.add(host);\n }\n\n async hostConnected(): Promise<void> {\n await this.host.updateComplete;\n this.hostUpdated();\n }\n\n hostUpdated(): void {\n if (!this.#fc && !this.#initializing) {\n this.#init();\n }\n const expanded = this.options.isExpanded();\n this.#button?.setAttribute('aria-expanded', String(expanded));\n this.#input?.setAttribute('aria-expanded', String(expanded));\n this.#initLabels();\n }\n\n hostDisconnected(): void {\n this.#fc?.hostDisconnected();\n }\n\n disconnect(): void {\n ComboboxController.instances.delete(this.host);\n ComboboxController.hosts.delete(this.host);\n }\n\n private async _onFocusoutElement(): Promise<void> {\n if (this.#hasTextInput && this.options.isExpanded()) {\n const root = this.#element?.getRootNode();\n await new Promise(requestAnimationFrame);\n if (root instanceof ShadowRoot || root instanceof Document) {\n const { activeElement } = root;\n if (!this.#element?.contains(activeElement)) {\n this.#hide();\n }\n }\n }\n }\n\n /**\n * Order of operations is important\n */\n async #init() {\n this.#initializing = true;\n await this.host.updateComplete;\n this.#initListbox();\n this.#initItems();\n this.#initButton();\n this.#initInput();\n this.#initLabels();\n this.#initController();\n this.#initializing = false;\n }\n\n #initListbox() {\n this.#mo.disconnect();\n this.#listbox?.removeEventListener('focusout', this.#onFocusoutListbox);\n this.#listbox?.removeEventListener('keydown', this.#onKeydownListbox);\n this.#listbox?.removeEventListener('click', this.#onClickListbox);\n this.#listbox = this.options.getListboxElement();\n if (!this.#listbox) {\n throw new Error('ComboboxController getListboxElement() option must return an element');\n }\n this.#listbox.addEventListener('focusout', this.#onFocusoutListbox);\n this.#listbox.addEventListener('keydown', this.#onKeydownListbox);\n this.#listbox.addEventListener('click', this.#onClickListbox);\n this.#listbox.id ??= getRandomId();\n this.#mo.observe(this.#listbox, { childList: true });\n }\n\n #initButton() {\n this.#button?.removeEventListener('click', this.#onClickButton);\n this.#button?.removeEventListener('keydown', this.#onKeydownButton);\n this.#button?.removeEventListener('mousedown', this.#onMousedownButton);\n this.#button?.removeEventListener('mouseup', this.#onMouseupButton);\n this.#button = this.options.getToggleButton();\n if (!this.#button) {\n throw new Error('ComboboxController getToggleButton() option must return an element');\n }\n this.#buttonInitialRole = this.#button.role;\n this.#button.role = 'combobox';\n this.#button.setAttribute('aria-controls', this.#listbox?.id ?? '');\n this.#button.addEventListener('click', this.#onClickButton);\n this.#button.addEventListener('keydown', this.#onKeydownButton);\n this.#button.addEventListener('mousedown', this.#onMousedownButton);\n this.#button.addEventListener('mouseup', this.#onMouseupButton);\n }\n\n #initInput() {\n this.#input?.removeEventListener('click', this.#onClickButton);\n this.#input?.removeEventListener('keyup', this.#onKeyupInput);\n this.#input?.removeEventListener('keydown', this.#onKeydownInput);\n\n this.#input = this.options.getComboboxInput();\n if (this.#input && !('value' in this.#input)) {\n throw new Error(`ComboboxController getToggleInput() option must return an element with a value property`);\n } else if (this.#input) {\n this.#input.role = 'combobox';\n this.#button!.role = this.#buttonInitialRole;\n this.#input.setAttribute('aria-autocomplete', 'both');\n this.#input.setAttribute('aria-controls', this.#listbox?.id ?? '');\n this.#input.addEventListener('click', this.#onClickButton);\n this.#input.addEventListener('keyup', this.#onKeyupInput);\n this.#input.addEventListener('keydown', this.#onKeydownInput);\n }\n }\n\n #initLabels() {\n const labels = InternalsController.getLabels(this.host)\n ?? this.#element?.ariaLabelledByElements\n ?? [];\n const label = this.options.getFallbackLabel()\n || this.#element?.ariaLabelledByElements?.map(x => x.textContent).join('')\n || null;\n\n for (const element of [this.#button, this.#listbox, this.#input].filter(x => !!x)) {\n if ('ariaLabelledByElements' in HTMLElement.prototype && labels.filter(x => !!x).length) {\n element.ariaLabelledByElements = [...labels ?? []];\n } else {\n element.ariaLabel = label;\n }\n }\n }\n\n #initController() {\n this.#fc?.hostDisconnected();\n const { getOrientation } = this.options;\n const getItems = () => this.items;\n const getItemsContainer = () => this.#listbox;\n if (this.#hasTextInput) {\n this.#fc = ActivedescendantController.of(this.host, {\n getItems, getItemsContainer, getOrientation,\n getActiveDescendantContainer: () => this.#input,\n getControlsElements: () => [\n this.options.getToggleButton(),\n this.options.getComboboxInput(),\n ].filter(x => !!x),\n setItemActive: this.options.setItemActive,\n });\n } else {\n this.#fc = RovingTabindexController.of(this.host, {\n getItems, getItemsContainer, getOrientation,\n getControlsElements: () => [\n this.options.getToggleButton(),\n ].filter(x => !!x),\n });\n }\n }\n\n #initItems() {\n if (this.#listbox) {\n this.items = this.options.getItems();\n }\n }\n\n async #show(): Promise<void> {\n // Re-read items on open so slotted/dynamically added options are included:\n this.#initItems();\n const success = await this.options.requestShowListbox();\n this.#filterItems();\n if (success !== false && !this.#hasTextInput) {\n if (!this.#preventListboxGainingFocus) {\n (this.#focusedItem ?? this.#fc?.items.at(0))?.focus();\n this.#preventListboxGainingFocus = false;\n }\n }\n }\n\n async #hide(): Promise<void> {\n await this.options.requestHideListbox();\n }\n\n async #toggle() {\n if (this.options.isExpanded()) {\n return this.#hide();\n } else {\n return this.#show();\n }\n }\n\n #translate(key: string, lang: Lang) {\n const strings = this.#microcopy.get(key);\n return strings?.[lang] ?? key;\n }\n\n /**\n * Announces the focused item to a live region (e.g. for Safari VoiceOver).\n * @param item - The listbox option item to announce.\n * TODO(bennypowers): perhaps move this to ActivedescendantController\n */\n #announce(item: Item): void {\n const value = this.options.getItemValue(item);\n ComboboxController.#alert?.remove();\n const fragment = ComboboxController.#alertTemplate.content.cloneNode(true) as DocumentFragment;\n ComboboxController.#alert = fragment.firstElementChild as HTMLElement;\n let text = value;\n const lang = deepClosest(this.#listbox, '[lang]')?.getAttribute('lang') ?? 'en';\n const langKey = (lang?.match(ComboboxController.langsRE)?.at(0) as Lang) ?? 'en';\n if (this.options.isItemDisabled(item)) {\n text += ` (${this.#translate('dimmed', langKey)})`;\n }\n if (this.#lb.isSelected(item)) {\n text += `, (${this.#translate('selected', langKey)})`;\n }\n const posInSet = InternalsController.getAriaPosInSet(item);\n const setSize = InternalsController.getAriaSetSize(item);\n if (posInSet != null && setSize != null) {\n if (langKey === 'ja') {\n text += `, (${setSize} 件中 ${posInSet} 件目)`;\n } else {\n text += `, (${posInSet} ${this.#translate('of', langKey)} ${setSize})`;\n }\n }\n ComboboxController.#alert.lang = lang;\n ComboboxController.#alert.innerText = text;\n document.body.append(ComboboxController.#alert);\n }\n\n #filterItems() {\n if (this.#input) {\n let value: string;\n for (const item of this.items) {\n const hidden =\n !!this.options.isExpanded()\n && !!(value = this.options.getComboboxValue(this.#input))\n && this.options.isItemFiltered?.(item, value)\n || false;\n this.options.setItemHidden(item, hidden);\n }\n }\n }\n\n #onClickButton = () => {\n if (!this.options.isExpanded()) {\n this.#show();\n } else {\n this.#hide();\n }\n };\n\n /**\n * Distinguish click-to-toggle vs Tab/Shift+Tab\n */\n #onMousedownButton = () => {\n this.#buttonHasMouseDown = true;\n };\n\n #onMouseupButton = () => {\n this.#buttonHasMouseDown = false;\n };\n\n #onClickListbox = (event: MouseEvent) => {\n if (!this.multi && event.composedPath().some(this.options.isItem)) {\n this.#hide();\n }\n };\n\n /**\n * Handle keypresses on the input\n * ## `Down Arrow`\n * - If the textbox is not empty and the listbox is displayed,\n * moves visual focus to the first suggested value.\n * - If the textbox is empty and the listbox is not displayed,\n * opens the listbox and moves visual focus to the first option.\n * - In both cases DOM focus remains on the textbox.\n *\n * ## `Alt + Down Arrow`\n * Opens the listbox without moving focus or changing selection.\n *\n * ## `Up Arrow`\n * - If the textbox is not empty and the listbox is displayed,\n * moves visual focus to the last suggested value.\n * - If the textbox is empty, first opens the listbox if it is not already displayed\n * and then moves visual focus to the last option.\n * - In both cases DOM focus remains on the textbox.\n *\n * ## `Enter`\n * Closes the listbox if it is displayed.\n *\n * ## `Escape`\n * - If the listbox is displayed, closes it.\n * - If the listbox is not displayed, clears the textbox.\n *\n * ## Standard single line text editing keys\n * - Keys used for cursor movement and text manipulation,\n * such as `Delete` and `Shift + Right Arrow`.\n * - An HTML `input` with `type=\"text\"` is used for the textbox so the browser will provide\n * platform-specific editing keys.\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list\n * @param event keydown event\n */\n #onKeydownInput = (event: KeyboardEvent) => {\n if (event.ctrlKey || event.shiftKey || !this.#input) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n if (!this.options.isExpanded()) {\n this.#preventListboxGainingFocus = event.altKey;\n this.#show();\n }\n break;\n case 'Enter':\n if (!this.multi) {\n this.#hide();\n }\n break;\n case 'Escape':\n if (!this.options.isExpanded()) {\n this.options.setComboboxValue(this.#input, '');\n this.host.requestUpdate();\n }\n this.#hide();\n break;\n case 'Alt':\n case 'AltGraph':\n case 'Shift':\n case 'Control':\n case 'Fn':\n case 'Symbol':\n case 'Hyper':\n case 'Super':\n case 'Meta':\n case 'CapsLock':\n case 'FnLock':\n case 'NumLock':\n case 'Tab':\n case 'ScrollLock':\n case 'SymbolLock':\n case ' ':\n break;\n default:\n if (!this.options.isExpanded()) {\n this.#show();\n }\n }\n };\n\n /**\n * Populates the combobox input with the focused value when navigating the listbox,\n * and filters the items when typing.\n * @param event keyup event\n */\n #onKeyupInput = (event: KeyboardEvent) => {\n if (!this.#input) {\n return;\n }\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n /**\n * Safari VoiceOver does not support aria-activedescendant, so we must.\n * approximate the correct behaviour by constructing a visually-hidden alert role\n * @see (https://bugs.webkit.org/show_bug.cgi?id=269026)\n */\n if (this.#focusedItem\n && this.options.getComboboxInput()\n && InternalsController.isSafari) {\n this.#announce(this.#focusedItem);\n }\n break;\n default:\n this.#filterItems();\n }\n };\n\n #onKeydownButton = (event: KeyboardEvent) => {\n if (this.#hasTextInput) {\n return this.#onKeydownInput(event);\n } else {\n return this.#onKeydownToggleButton(event);\n }\n };\n\n #onKeydownListbox = (event: KeyboardEvent) => {\n if (!this.#hasTextInput) {\n switch (event.key) {\n case 'Home':\n case 'End':\n this.#onKeydownToggleButton(event);\n break;\n case 'Escape':\n this.#hide();\n this.#button?.focus();\n break;\n case 'Enter':\n case ' ': {\n const eventItem = event.composedPath().find(this.options.isItem);\n if (eventItem\n && !this.multi\n && this.options.isExpanded()\n && !this.options.isItemDisabled(eventItem)\n ) {\n this.#hide();\n this.#button?.focus();\n }\n }\n }\n }\n };\n\n #onFocusoutListbox = (event: FocusEvent) => {\n if (!this.#hasTextInput && this.options.isExpanded()) {\n const root = this.#element?.getRootNode();\n // Check if focus moved to the toggle button via mouse click\n // If so, let the click handler manage toggle (prevents double-toggle)\n // But if focus moved via Shift+Tab (no mousedown), we should still hide\n const isClickOnToggleButton =\n event.relatedTarget === this.#button && this.#buttonHasMouseDown;\n if ((root instanceof ShadowRoot || root instanceof Document)\n && !this.items.includes(event.relatedTarget as Item)\n && !isClickOnToggleButton) {\n this.#hide();\n }\n }\n };\n\n #onKeydownToggleButton = async (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n if (!this.options.isExpanded()) {\n this.#show();\n }\n break;\n case 'Home':\n if (!this.options.isExpanded()) {\n await this.#show();\n }\n if (this.#fc) {\n this.#fc.atFocusedItemIndex = 0;\n }\n break;\n case 'End':\n if (!this.options.isExpanded()) {\n await this.#show();\n }\n if (this.#fc) {\n this.#fc.atFocusedItemIndex = this.items.length - 1;\n }\n break;\n case ' ':\n case 'Enter':\n // prevent scroll\n event.preventDefault();\n await this.#toggle();\n await this.host.updateComplete;\n if (!this.options.isExpanded()) {\n this.#button?.focus();\n }\n break;\n }\n };\n\n /**\n * For Browsers which do not support `ariaActiveDescendantElement`, we must clone\n * the listbox items into the same root as the combobox input\n * Call this method to return either an array of (cloned) list box items, to be placed in your\n * shadow template, or nothing in the case the browser supports cross-root aria.\n */\n public renderItemsToShadowRoot(): Node[] | typeof nothing {\n if (this.#fc instanceof ActivedescendantController) {\n return this.#fc.renderItemsToShadowRoot();\n } else {\n return nothing;\n }\n }\n}\n"]}
@@ -2,9 +2,10 @@ import { type ReactiveController, type ReactiveControllerHost } from 'lit';
2
2
  interface InternalsControllerOptions extends Partial<ARIAMixin> {
3
3
  getHTMLElement?(): HTMLElement;
4
4
  }
5
+ type InternalsHost = ReactiveControllerHost & HTMLElement;
5
6
  export declare class InternalsController implements ReactiveController, ARIAMixin {
6
7
  #private;
7
- host: ReactiveControllerHost;
8
+ host: InternalsHost;
8
9
  private options?;
9
10
  private static instances;
10
11
  readonly form: ElementInternals['form'];
@@ -12,9 +13,33 @@ export declare class InternalsController implements ReactiveController, ARIAMixi
12
13
  readonly states: unknown;
13
14
  readonly willValidate: ElementInternals['willValidate'];
14
15
  readonly validationMessage: ElementInternals['validationMessage'];
15
- static getLabels(host: ReactiveControllerHost): Element[];
16
+ static getLabels(host: InternalsHost): Element[];
17
+ /**
18
+ * Gets the ARIA posinset value from a listbox item (attribute takes precedence over internals).
19
+ * @param host - The listbox item element.
20
+ */
21
+ static getAriaPosInSet(host: HTMLElement): string | null;
22
+ /**
23
+ * Sets the ARIA posinset on a listbox item. Uses ElementInternals when the host has
24
+ * an InternalsController instance; otherwise sets/removes the host attribute.
25
+ * @param host - The listbox item element (option or option-like).
26
+ * @param value - Position in set (1-based), or null to clear.
27
+ */
28
+ static setAriaPosInSet(host: HTMLElement, value: number | string | null): void;
29
+ /**
30
+ * Gets the ARIA setsize from a listbox item (aria attribute if set or defaulting to internals).
31
+ * @param host - The listbox item element.
32
+ */
33
+ static getAriaSetSize(host: HTMLElement): string | null;
34
+ /**
35
+ * Sets the ARIA setsize on a listbox item. Uses ElementInternals when the host has
36
+ * an InternalsController instance; otherwise sets/removes the host attribute.
37
+ * @param host - The listbox item element (option or option-like).
38
+ * @param value - Total set size, or null to clear.
39
+ */
40
+ static setAriaSetSize(host: HTMLElement, value: number | string | null): void;
16
41
  static isSafari: boolean;
17
- static of(host: ReactiveControllerHost, options?: InternalsControllerOptions): InternalsController;
42
+ static of(host: InternalsHost, options?: InternalsControllerOptions): InternalsController;
18
43
  role: string | null;
19
44
  ariaActivedescendant: string | null;
20
45
  ariaAtomic: string | null;
@@ -60,21 +85,15 @@ export declare class InternalsController implements ReactiveController, ARIAMixi
60
85
  ariaValueMin: string | null;
61
86
  ariaValueNow: string | null;
62
87
  ariaValueText: string | null;
63
- /** WARNING: be careful of cross-root ARIA browser support */
88
+ /** As of April 2025, the following are considered Baseline supported in evergreen browsers */
64
89
  ariaActiveDescendantElement: Element | null;
65
- /** WARNING: be careful of cross-root ARIA browser support */
66
90
  ariaControlsElements: Element[] | null;
67
- /** WARNING: be careful of cross-root ARIA browser support */
68
91
  ariaDescribedByElements: Element[] | null;
69
- /** WARNING: be careful of cross-root ARIA browser support */
70
92
  ariaDetailsElements: Element[] | null;
71
- /** WARNING: be careful of cross-root ARIA browser support */
72
93
  ariaErrorMessageElements: Element[] | null;
73
- /** WARNING: be careful of cross-root ARIA browser support */
74
94
  ariaFlowToElements: Element[] | null;
75
- /** WARNING: be careful of cross-root ARIA browser support */
76
95
  ariaLabelledByElements: Element[] | null;
77
- /** WARNING: be careful of cross-root ARIA browser support */
96
+ /** As of February 2026, this is not supported in Chromium browsers */
78
97
  ariaOwnsElements: Element[] | null;
79
98
  /** True when the control is disabled via it's containing fieldset element */
80
99
  get formDisabled(): boolean;
@@ -41,7 +41,7 @@ function aria(target, key) {
41
41
  protos.get(target).add(key);
42
42
  }
43
43
  function getLabelText(label) {
44
- if (label.hidden) {
44
+ if (!(label instanceof HTMLElement) || label.hidden) {
45
45
  return '';
46
46
  }
47
47
  else {
@@ -53,6 +53,60 @@ export class InternalsController {
53
53
  static getLabels(host) {
54
54
  return Array.from(this.instances.get(host)?.internals.labels ?? []);
55
55
  }
56
+ /**
57
+ * Gets the ARIA posinset value from a listbox item (attribute takes precedence over internals).
58
+ * @param host - The listbox item element.
59
+ */
60
+ static getAriaPosInSet(host) {
61
+ return host.getAttribute('aria-posinset')
62
+ ?? this.instances.get(host)?.ariaPosInSet
63
+ ?? null;
64
+ }
65
+ /**
66
+ * Sets the ARIA posinset on a listbox item. Uses ElementInternals when the host has
67
+ * an InternalsController instance; otherwise sets/removes the host attribute.
68
+ * @param host - The listbox item element (option or option-like).
69
+ * @param value - Position in set (1-based), or null to clear.
70
+ */
71
+ static setAriaPosInSet(host, value) {
72
+ const instance = this.instances.get(host);
73
+ if (instance) {
74
+ instance.ariaPosInSet = value != null ? String(value) : null;
75
+ }
76
+ else if (value != null) {
77
+ host.setAttribute('aria-posinset', String(value));
78
+ }
79
+ else {
80
+ host.removeAttribute('aria-posinset');
81
+ }
82
+ }
83
+ /**
84
+ * Gets the ARIA setsize from a listbox item (aria attribute if set or defaulting to internals).
85
+ * @param host - The listbox item element.
86
+ */
87
+ static getAriaSetSize(host) {
88
+ return host.getAttribute('aria-setsize')
89
+ ?? this.instances.get(host)?.ariaSetSize
90
+ ?? null;
91
+ }
92
+ /**
93
+ * Sets the ARIA setsize on a listbox item. Uses ElementInternals when the host has
94
+ * an InternalsController instance; otherwise sets/removes the host attribute.
95
+ * @param host - The listbox item element (option or option-like).
96
+ * @param value - Total set size, or null to clear.
97
+ */
98
+ static setAriaSetSize(host, value) {
99
+ const instance = this.instances.get(host);
100
+ if (instance) {
101
+ instance.ariaSetSize = value != null ? String(value) : null;
102
+ }
103
+ else if (value != null) {
104
+ host.setAttribute('aria-setsize', String(value));
105
+ }
106
+ else {
107
+ host.removeAttribute('aria-setsize');
108
+ }
109
+ }
56
110
  static of(host, options) {
57
111
  constructingAllowed = true;
58
112
  // implement the singleton pattern
@@ -87,8 +141,6 @@ export class InternalsController {
87
141
  }
88
142
  get element() {
89
143
  if (isServer) {
90
- // FIXME(bennyp): a little white lie, which may break
91
- // when the controller is applied to non-lit frameworks.
92
144
  return this.host;
93
145
  }
94
146
  else {
@@ -144,21 +196,15 @@ export class InternalsController {
144
196
  this.ariaValueMin = null;
145
197
  this.ariaValueNow = null;
146
198
  this.ariaValueText = null;
147
- /** WARNING: be careful of cross-root ARIA browser support */
199
+ /** As of April 2025, the following are considered Baseline supported in evergreen browsers */
148
200
  this.ariaActiveDescendantElement = null;
149
- /** WARNING: be careful of cross-root ARIA browser support */
150
201
  this.ariaControlsElements = null;
151
- /** WARNING: be careful of cross-root ARIA browser support */
152
202
  this.ariaDescribedByElements = null;
153
- /** WARNING: be careful of cross-root ARIA browser support */
154
203
  this.ariaDetailsElements = null;
155
- /** WARNING: be careful of cross-root ARIA browser support */
156
204
  this.ariaErrorMessageElements = null;
157
- /** WARNING: be careful of cross-root ARIA browser support */
158
205
  this.ariaFlowToElements = null;
159
- /** WARNING: be careful of cross-root ARIA browser support */
160
206
  this.ariaLabelledByElements = null;
161
- /** WARNING: be careful of cross-root ARIA browser support */
207
+ /** As of February 2026, this is not supported in Chromium browsers */
162
208
  this.ariaOwnsElements = null;
163
209
  this._formDisabled = false;
164
210
  if (!constructingAllowed) {
@@ -1 +1 @@
1
- {"version":3,"file":"internals-controller.js","sourceRoot":"","sources":["internals-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isServer,\n type ReactiveController,\n type ReactiveControllerHost,\n type LitElement,\n} from 'lit';\n\nfunction isARIAMixinProp(key: string): key is keyof ARIAMixin {\n return key === 'role' || key.startsWith('aria');\n}\n\ntype FACE = HTMLElement & {\n formDisabledCallback?(disabled: boolean): void;\n};\n\nconst protos = new WeakMap();\n\nlet constructingAllowed = false;\n\ninterface InternalsControllerOptions extends Partial<ARIAMixin> {\n getHTMLElement?(): HTMLElement;\n}\n\n/**\n * reactively forward the internals object's aria mixin prototype\n * @param target\n * @param key\n */\nfunction aria(\n target: InternalsController,\n key: keyof InternalsController,\n) {\n if (!protos.has(target)) {\n protos.set(target, new Set());\n }\n if (protos.get(target).has(key)) {\n return;\n }\n if (!isARIAMixinProp(key)) {\n throw new Error('@aria can only be called on ARIAMixin properties');\n }\n // typescript experimental decorator\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: false,\n get(this: InternalsController) {\n // @ts-expect-error: because i'm bad, i'm bad\n const internals = this.attachOrRetrieveInternals();\n return internals[key];\n },\n set(this: InternalsController, value: string | null) {\n // @ts-expect-error: ya know it!\n const internals = this.attachOrRetrieveInternals();\n // @ts-expect-error: shamone!\n internals[key] = value;\n this.host.requestUpdate();\n },\n });\n protos.get(target).add(key);\n}\n\nfunction getLabelText(label: HTMLElement) {\n if (label.hidden) {\n return '';\n } else {\n const ariaLabel = label.getAttribute?.('aria-label');\n return ariaLabel ?? label.textContent;\n }\n}\n\nexport class InternalsController implements ReactiveController, ARIAMixin {\n private static instances = new WeakMap<ReactiveControllerHost, InternalsController>();\n\n declare readonly form: ElementInternals['form'];\n declare readonly shadowRoot: ElementInternals['shadowRoot'];\n\n // https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n declare readonly states: unknown;\n declare readonly willValidate: ElementInternals['willValidate'];\n declare readonly validationMessage: ElementInternals['validationMessage'];\n\n public static getLabels(host: ReactiveControllerHost): Element[] {\n return Array.from(this.instances.get(host)?.internals.labels ?? []) as Element[];\n }\n\n public static isSafari: boolean =\n !isServer && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n public static of(\n host: ReactiveControllerHost,\n options?: InternalsControllerOptions,\n ): InternalsController {\n constructingAllowed = true;\n // implement the singleton pattern\n // using a public static constructor method is much easier to manage,\n // due to the quirks of our typescript config\n const instance: InternalsController =\n InternalsController.instances.get(host)\n ?? new InternalsController(host, options);\n instance.initializeOptions(options);\n constructingAllowed = false;\n return instance;\n }\n\n @aria role: string | null = null;\n\n @aria ariaActivedescendant: string | null = null;\n @aria ariaAtomic: string | null = null;\n @aria ariaAutoComplete: string | null = null;\n @aria ariaBusy: string | null = null;\n @aria ariaBrailleLabel: string | null = null;\n @aria ariaBrailleRoleDescription: string | null = null;\n @aria ariaChecked: string | null = null;\n @aria ariaColCount: string | null = null;\n @aria ariaColIndex: string | null = null;\n @aria ariaColIndexText: string | null = null;\n @aria ariaColSpan: string | null = null;\n @aria ariaCurrent: string | null = null;\n @aria ariaDescription: string | null = null;\n @aria ariaDisabled: string | null = null;\n @aria ariaExpanded: string | null = null;\n @aria ariaHasPopup: string | null = null;\n @aria ariaHidden: string | null = null;\n @aria ariaInvalid: string | null = null;\n @aria ariaKeyShortcuts: string | null = null;\n @aria ariaLabel: string | null = null;\n @aria ariaLevel: string | null = null;\n @aria ariaLive: string | null = null;\n @aria ariaModal: string | null = null;\n @aria ariaMultiLine: string | null = null;\n @aria ariaMultiSelectable: string | null = null;\n @aria ariaOrientation: string | null = null;\n @aria ariaPlaceholder: string | null = null;\n @aria ariaPosInSet: string | null = null;\n @aria ariaPressed: string | null = null;\n @aria ariaReadOnly: string | null = null;\n @aria ariaRelevant: string | null = null;\n @aria ariaRequired: string | null = null;\n @aria ariaRoleDescription: string | null = null;\n @aria ariaRowCount: string | null = null;\n @aria ariaRowIndex: string | null = null;\n @aria ariaRowIndexText: string | null = null;\n @aria ariaRowSpan: string | null = null;\n @aria ariaSelected: string | null = null;\n @aria ariaSetSize: string | null = null;\n @aria ariaSort: string | null = null;\n @aria ariaValueMax: string | null = null;\n @aria ariaValueMin: string | null = null;\n @aria ariaValueNow: string | null = null;\n @aria ariaValueText: string | null = null;\n\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaActiveDescendantElement: Element | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaControlsElements: Element[] | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaDescribedByElements: Element[] | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaDetailsElements: Element[] | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaErrorMessageElements: Element[] | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaFlowToElements: Element[] | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaLabelledByElements: Element[] | null = null;\n /** WARNING: be careful of cross-root ARIA browser support */\n @aria ariaOwnsElements: Element[] | null = null;\n\n /** True when the control is disabled via it's containing fieldset element */\n get formDisabled(): boolean {\n if (isServer) {\n return this._formDisabled;\n } else {\n return this.element?.matches(':disabled') || this._formDisabled;\n }\n }\n\n get labels(): NodeList {\n return this.internals.labels;\n }\n\n get validity(): ValidityState {\n return this.internals.validity;\n }\n\n /** A best-attempt based on observed behaviour in FireFox 115 on fedora 38 */\n get computedLabelText(): string {\n return this.internals.ariaLabel\n || Array.from(this.internals.labels as NodeListOf<HTMLElement>)\n .reduce((acc, label) =>\n `${acc}${getLabelText(label)}`, '');\n }\n\n private get element() {\n if (isServer) {\n // FIXME(bennyp): a little white lie, which may break\n // when the controller is applied to non-lit frameworks.\n return this.host as LitElement;\n } else {\n return this.host instanceof HTMLElement ? this.host : this.options?.getHTMLElement?.();\n }\n }\n\n private internals!: ElementInternals;\n\n private _formDisabled = false;\n\n private constructor(\n public host: ReactiveControllerHost,\n private options?: InternalsControllerOptions,\n ) {\n if (!constructingAllowed) {\n throw new Error('InternalsController must be constructed with `InternalsController.for()`');\n }\n if (!this.element) {\n throw new Error(\n `InternalsController must be instantiated with an HTMLElement or a \\`getHTMLElement\\` function`,\n );\n }\n this.attachOrRetrieveInternals();\n this.initializeOptions(options);\n InternalsController.instances.set(host, this);\n this.#polyfillDisabledPseudo();\n }\n\n /**\n * We need to polyfill :disabled\n * see https://github.com/calebdwilliams/element-internals-polyfill/issues/88\n */\n #polyfillDisabledPseudo() {\n // START polyfill-disabled\n // We need to polyfill :disabled\n // see https://github.com/calebdwilliams/element-internals-polyfill/issues/88\n const orig = (this.element as FACE).formDisabledCallback;\n (this.element as FACE).formDisabledCallback = disabled => {\n this._formDisabled = disabled;\n orig?.call(this.host, disabled);\n // END polyfill-disabled\n };\n }\n\n /**\n * Typescript (with experimental decorators) will compile the class\n * such that the order of operations is:\n * 1. set up constructor parameter fields\n * 2. run decorated field setters with initializers as the value\n * 3. run the rest of the constructor\n * Because of that, `this.internals` may not be available in the decorator setter\n * so we cheat here with nullish coalescing assignment operator `??=`;\n */\n private attachOrRetrieveInternals() {\n this.internals ??= this.element!.attachInternals();\n return this.internals;\n }\n\n private initializeOptions(options?: Partial<ARIAMixin>) {\n this.options ??= options ?? {};\n const { getHTMLElement, ...aria } = this.options;\n this.options.getHTMLElement ??= getHTMLElement;\n for (const [key, val] of Object.entries(aria)) {\n if (isARIAMixinProp(key)) {\n this[key as keyof this] = val as this[keyof this];\n }\n }\n }\n\n hostConnected?(): void;\n\n setFormValue(...args: Parameters<ElementInternals['setFormValue']>): void {\n return this.internals.setFormValue(...args);\n }\n\n setValidity(...args: Parameters<ElementInternals['setValidity']>): void {\n return this.internals.setValidity(...args);\n }\n\n checkValidity(...args: Parameters<ElementInternals['checkValidity']>): boolean {\n return this.internals.checkValidity(...args);\n }\n\n reportValidity(...args: Parameters<ElementInternals['reportValidity']>): boolean {\n return this.internals.reportValidity(...args);\n }\n\n submit(): void {\n this.internals.form?.requestSubmit();\n }\n\n reset(): void {\n this.internals.form?.reset();\n }\n}\n\n/** @see https://w3c.github.io/aria/#ref-for-dom-ariamixin-ariaactivedescendantelement-1 */\ndeclare global {\n interface ARIAMixin {\n ariaActiveDescendantElement: Element | null;\n ariaControlsElements: readonly Element[] | null;\n ariaDescribedByElements: readonly Element[] | null;\n ariaDetailsElements: readonly Element[] | null;\n ariaErrorMessageElements: readonly Element[] | null;\n ariaFlowToElements: readonly Element[] | null;\n ariaLabelledByElements: readonly Element[] | null;\n ariaOwnsElements: readonly Element[] | null;\n }\n}\n"]}
1
+ {"version":3,"file":"internals-controller.js","sourceRoot":"","sources":["internals-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isServer,\n type ReactiveController,\n type ReactiveControllerHost,\n} from 'lit';\n\nfunction isARIAMixinProp(key: string): key is keyof ARIAMixin {\n return key === 'role' || key.startsWith('aria');\n}\n\ntype FACE = HTMLElement & {\n formDisabledCallback?(disabled: boolean): void;\n};\n\nconst protos = new WeakMap();\n\nlet constructingAllowed = false;\n\ninterface InternalsControllerOptions extends Partial<ARIAMixin> {\n getHTMLElement?(): HTMLElement;\n}\n\n/**\n * reactively forward the internals object's aria mixin prototype\n * @param target\n * @param key\n */\nfunction aria(\n target: InternalsController,\n key: keyof InternalsController,\n) {\n if (!protos.has(target)) {\n protos.set(target, new Set());\n }\n if (protos.get(target).has(key)) {\n return;\n }\n if (!isARIAMixinProp(key)) {\n throw new Error('@aria can only be called on ARIAMixin properties');\n }\n // typescript experimental decorator\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: false,\n get(this: InternalsController) {\n // @ts-expect-error: because i'm bad, i'm bad\n const internals = this.attachOrRetrieveInternals();\n return internals[key];\n },\n set(this: InternalsController, value: string | null) {\n // @ts-expect-error: ya know it!\n const internals = this.attachOrRetrieveInternals();\n // @ts-expect-error: shamone!\n internals[key] = value;\n this.host.requestUpdate();\n },\n });\n protos.get(target).add(key);\n}\n\nfunction getLabelText(label: Node) {\n if (!(label instanceof HTMLElement) || label.hidden) {\n return '';\n } else {\n const ariaLabel = label.getAttribute?.('aria-label');\n return ariaLabel ?? label.textContent;\n }\n}\n\ntype InternalsHost = ReactiveControllerHost & HTMLElement;\n\nexport class InternalsController implements ReactiveController, ARIAMixin {\n private static instances = new WeakMap<HTMLElement, InternalsController>();\n\n declare readonly form: ElementInternals['form'];\n declare readonly shadowRoot: ElementInternals['shadowRoot'];\n\n // https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n declare readonly states: unknown;\n declare readonly willValidate: ElementInternals['willValidate'];\n declare readonly validationMessage: ElementInternals['validationMessage'];\n\n public static getLabels(host: InternalsHost): Element[] {\n return Array.from(this.instances.get(host)?.internals.labels ?? []) as Element[];\n }\n\n /**\n * Gets the ARIA posinset value from a listbox item (attribute takes precedence over internals).\n * @param host - The listbox item element.\n */\n public static getAriaPosInSet(host: HTMLElement): string | null {\n return host.getAttribute('aria-posinset')\n ?? this.instances.get(host)?.ariaPosInSet\n ?? null;\n }\n\n /**\n * Sets the ARIA posinset on a listbox item. Uses ElementInternals when the host has\n * an InternalsController instance; otherwise sets/removes the host attribute.\n * @param host - The listbox item element (option or option-like).\n * @param value - Position in set (1-based), or null to clear.\n */\n public static setAriaPosInSet(host: HTMLElement, value: number | string | null): void {\n const instance = this.instances.get(host);\n if (instance) {\n instance.ariaPosInSet = value != null ? String(value) : null;\n } else if (value != null) {\n host.setAttribute('aria-posinset', String(value));\n } else {\n host.removeAttribute('aria-posinset');\n }\n }\n\n /**\n * Gets the ARIA setsize from a listbox item (aria attribute if set or defaulting to internals).\n * @param host - The listbox item element.\n */\n public static getAriaSetSize(host: HTMLElement): string | null {\n return host.getAttribute('aria-setsize')\n ?? this.instances.get(host)?.ariaSetSize\n ?? null;\n }\n\n /**\n * Sets the ARIA setsize on a listbox item. Uses ElementInternals when the host has\n * an InternalsController instance; otherwise sets/removes the host attribute.\n * @param host - The listbox item element (option or option-like).\n * @param value - Total set size, or null to clear.\n */\n public static setAriaSetSize(host: HTMLElement, value: number | string | null): void {\n const instance = this.instances.get(host);\n if (instance) {\n instance.ariaSetSize = value != null ? String(value) : null;\n } else if (value != null) {\n host.setAttribute('aria-setsize', String(value));\n } else {\n host.removeAttribute('aria-setsize');\n }\n }\n\n public static isSafari: boolean =\n !isServer && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n public static of(host: InternalsHost, options?: InternalsControllerOptions): InternalsController {\n constructingAllowed = true;\n // implement the singleton pattern\n // using a public static constructor method is much easier to manage,\n // due to the quirks of our typescript config\n const instance: InternalsController =\n InternalsController.instances.get(host)\n ?? new InternalsController(host, options);\n instance.initializeOptions(options);\n constructingAllowed = false;\n return instance;\n }\n\n @aria role: string | null = null;\n\n @aria ariaActivedescendant: string | null = null;\n @aria ariaAtomic: string | null = null;\n @aria ariaAutoComplete: string | null = null;\n @aria ariaBusy: string | null = null;\n @aria ariaBrailleLabel: string | null = null;\n @aria ariaBrailleRoleDescription: string | null = null;\n @aria ariaChecked: string | null = null;\n @aria ariaColCount: string | null = null;\n @aria ariaColIndex: string | null = null;\n @aria ariaColIndexText: string | null = null;\n @aria ariaColSpan: string | null = null;\n @aria ariaCurrent: string | null = null;\n @aria ariaDescription: string | null = null;\n @aria ariaDisabled: string | null = null;\n @aria ariaExpanded: string | null = null;\n @aria ariaHasPopup: string | null = null;\n @aria ariaHidden: string | null = null;\n @aria ariaInvalid: string | null = null;\n @aria ariaKeyShortcuts: string | null = null;\n @aria ariaLabel: string | null = null;\n @aria ariaLevel: string | null = null;\n @aria ariaLive: string | null = null;\n @aria ariaModal: string | null = null;\n @aria ariaMultiLine: string | null = null;\n @aria ariaMultiSelectable: string | null = null;\n @aria ariaOrientation: string | null = null;\n @aria ariaPlaceholder: string | null = null;\n @aria ariaPosInSet: string | null = null;\n @aria ariaPressed: string | null = null;\n @aria ariaReadOnly: string | null = null;\n @aria ariaRelevant: string | null = null;\n @aria ariaRequired: string | null = null;\n @aria ariaRoleDescription: string | null = null;\n @aria ariaRowCount: string | null = null;\n @aria ariaRowIndex: string | null = null;\n @aria ariaRowIndexText: string | null = null;\n @aria ariaRowSpan: string | null = null;\n @aria ariaSelected: string | null = null;\n @aria ariaSetSize: string | null = null;\n @aria ariaSort: string | null = null;\n @aria ariaValueMax: string | null = null;\n @aria ariaValueMin: string | null = null;\n @aria ariaValueNow: string | null = null;\n @aria ariaValueText: string | null = null;\n\n /** As of April 2025, the following are considered Baseline supported in evergreen browsers */\n @aria ariaActiveDescendantElement: Element | null = null;\n @aria ariaControlsElements: Element[] | null = null;\n @aria ariaDescribedByElements: Element[] | null = null;\n @aria ariaDetailsElements: Element[] | null = null;\n @aria ariaErrorMessageElements: Element[] | null = null;\n @aria ariaFlowToElements: Element[] | null = null;\n @aria ariaLabelledByElements: Element[] | null = null;\n\n /** As of February 2026, this is not supported in Chromium browsers */\n @aria ariaOwnsElements: Element[] | null = null;\n\n /** True when the control is disabled via it's containing fieldset element */\n get formDisabled(): boolean {\n if (isServer) {\n return this._formDisabled;\n } else {\n return this.element?.matches(':disabled') || this._formDisabled;\n }\n }\n\n get labels(): NodeList {\n return this.internals.labels;\n }\n\n get validity(): ValidityState {\n return this.internals.validity;\n }\n\n /** A best-attempt based on observed behaviour in FireFox 115 on fedora 38 */\n get computedLabelText(): string {\n return this.internals.ariaLabel\n || Array.from(this.internals.labels)\n .reduce((acc, label) =>\n `${acc}${getLabelText(label)}`, '');\n }\n\n private get element() {\n if (isServer) {\n return this.host;\n } else {\n return this.host instanceof HTMLElement ? this.host : this.options?.getHTMLElement?.();\n }\n }\n\n private internals!: ElementInternals;\n\n private _formDisabled = false;\n\n private constructor(public host: InternalsHost, private options?: InternalsControllerOptions) {\n if (!constructingAllowed) {\n throw new Error('InternalsController must be constructed with `InternalsController.for()`');\n }\n if (!this.element) {\n throw new Error(\n `InternalsController must be instantiated with an HTMLElement or a \\`getHTMLElement\\` function`,\n );\n }\n this.attachOrRetrieveInternals();\n this.initializeOptions(options);\n InternalsController.instances.set(host, this);\n this.#polyfillDisabledPseudo();\n }\n\n /**\n * We need to polyfill :disabled\n * see https://github.com/calebdwilliams/element-internals-polyfill/issues/88\n */\n #polyfillDisabledPseudo() {\n // START polyfill-disabled\n // We need to polyfill :disabled\n // see https://github.com/calebdwilliams/element-internals-polyfill/issues/88\n const orig = (this.element as FACE).formDisabledCallback;\n (this.element as FACE).formDisabledCallback = disabled => {\n this._formDisabled = disabled;\n orig?.call(this.host, disabled);\n // END polyfill-disabled\n };\n }\n\n /**\n * Typescript (with experimental decorators) will compile the class\n * such that the order of operations is:\n * 1. set up constructor parameter fields\n * 2. run decorated field setters with initializers as the value\n * 3. run the rest of the constructor\n * Because of that, `this.internals` may not be available in the decorator setter\n * so we cheat here with nullish coalescing assignment operator `??=`;\n */\n private attachOrRetrieveInternals() {\n this.internals ??= this.element!.attachInternals();\n return this.internals;\n }\n\n private initializeOptions(options?: Partial<ARIAMixin>) {\n this.options ??= options ?? {};\n const { getHTMLElement, ...aria } = this.options;\n this.options.getHTMLElement ??= getHTMLElement;\n for (const [key, val] of Object.entries(aria)) {\n if (isARIAMixinProp(key)) {\n this[key as keyof this] = val as this[keyof this];\n }\n }\n }\n\n hostConnected?(): void;\n\n setFormValue(...args: Parameters<ElementInternals['setFormValue']>): void {\n return this.internals.setFormValue(...args);\n }\n\n setValidity(...args: Parameters<ElementInternals['setValidity']>): void {\n return this.internals.setValidity(...args);\n }\n\n checkValidity(...args: Parameters<ElementInternals['checkValidity']>): boolean {\n return this.internals.checkValidity(...args);\n }\n\n reportValidity(...args: Parameters<ElementInternals['reportValidity']>): boolean {\n return this.internals.reportValidity(...args);\n }\n\n submit(): void {\n this.internals.form?.requestSubmit();\n }\n\n reset(): void {\n this.internals.form?.reset();\n }\n}\n\n/** @see https://w3c.github.io/aria/#ref-for-dom-ariamixin-ariaactivedescendantelement-1 */\ndeclare global {\n interface ARIAMixin {\n ariaActiveDescendantElement: Element | null;\n ariaControlsElements: readonly Element[] | null;\n ariaDescribedByElements: readonly Element[] | null;\n ariaDetailsElements: readonly Element[] | null;\n ariaErrorMessageElements: readonly Element[] | null;\n ariaFlowToElements: readonly Element[] | null;\n ariaLabelledByElements: readonly Element[] | null;\n ariaOwnsElements: readonly Element[] | null;\n }\n}\n"]}
@@ -120,9 +120,8 @@ export declare class ListboxController<Item extends HTMLElement> implements Reac
120
120
  set multi(v: boolean);
121
121
  get items(): Item[];
122
122
  /**
123
- * register's the host's Item elements as listbox controller items
124
- * sets aria-setsize and aria-posinset on items
125
- * @param items items
123
+ * Registers the host's item elements as listbox controller items.
124
+ * @param items - Array of listbox option elements.
126
125
  */
127
126
  set items(items: Item[]);
128
127
  /**
@@ -136,6 +135,10 @@ export declare class ListboxController<Item extends HTMLElement> implements Reac
136
135
  get selected(): Item[];
137
136
  private constructor();
138
137
  hostConnected(): Promise<void>;
138
+ /**
139
+ * Called during host update; syncs control element listeners and
140
+ * applies aria-posinset/aria-setsize to each item via InternalsController.
141
+ */
139
142
  hostUpdate(): void;
140
143
  hostUpdated(): void;
141
144
  hostDisconnected(): void;
@@ -2,6 +2,7 @@ var _ListboxController_instances, _ListboxController_shiftStartingItem, _Listbox
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { isServer } from 'lit';
4
4
  import { arraysAreEquivalent } from '../functions/arraysAreEquivalent.js';
5
+ import { InternalsController } from './internals-controller.js';
5
6
  /**
6
7
  * This is the default method for setting the selected state on an item element
7
8
  * @param item the item
@@ -101,16 +102,14 @@ export class ListboxController {
101
102
  return __classPrivateFieldGet(this, _ListboxController_items, "f");
102
103
  }
103
104
  /**
104
- * register's the host's Item elements as listbox controller items
105
- * sets aria-setsize and aria-posinset on items
106
- * @param items items
105
+ * Registers the host's item elements as listbox controller items.
106
+ * @param items - Array of listbox option elements.
107
107
  */
108
108
  set items(items) {
109
- __classPrivateFieldSet(this, _ListboxController_items, items, "f");
110
- __classPrivateFieldGet(this, _ListboxController_items, "f").forEach((item, index, _items) => {
111
- item.ariaSetSize = _items.length.toString();
112
- item.ariaPosInSet = (index + 1).toString();
113
- });
109
+ if (!arraysAreEquivalent(items, __classPrivateFieldGet(this, _ListboxController_items, "f"))) {
110
+ __classPrivateFieldSet(this, _ListboxController_items, items, "f");
111
+ this.host.requestUpdate();
112
+ }
114
113
  }
115
114
  /**
116
115
  * sets the listbox value based on selected options
@@ -302,6 +301,10 @@ export class ListboxController {
302
301
  this.hostUpdate();
303
302
  this.hostUpdated();
304
303
  }
304
+ /**
305
+ * Called during host update; syncs control element listeners and
306
+ * applies aria-posinset/aria-setsize to each item via InternalsController.
307
+ */
305
308
  hostUpdate() {
306
309
  const last = __classPrivateFieldGet(this, _ListboxController_controlsElements, "f");
307
310
  __classPrivateFieldSet(this, _ListboxController_controlsElements, __classPrivateFieldGet(this, _ListboxController_options, "f").getControlsElements?.() ?? [], "f");
@@ -312,6 +315,11 @@ export class ListboxController {
312
315
  el.addEventListener('keyup', __classPrivateFieldGet(this, _ListboxController_onKeyup, "f"));
313
316
  }
314
317
  }
318
+ const items = __classPrivateFieldGet(this, _ListboxController_items, "f");
319
+ items.forEach((item, index) => {
320
+ InternalsController.setAriaPosInSet(item, index + 1);
321
+ InternalsController.setAriaSetSize(item, items.length);
322
+ });
315
323
  }
316
324
  hostUpdated() {
317
325
  if (!__classPrivateFieldGet(this, _ListboxController_listening, "f")) {
@@ -401,11 +409,13 @@ _ListboxController_shiftStartingItem = new WeakMap(), _ListboxController_options
401
409
  return shadowRootItem;
402
410
  }
403
411
  else {
404
- const index = Array.from(shadowRootListboxElement?.children ?? [])
405
- .filter(__classPrivateFieldGet(this, _ListboxController_options, "f").isItem)
406
- .filter(x => !x.hidden)
407
- .indexOf(shadowRootItem);
408
- return __classPrivateFieldGet(this, _ListboxController_items, "f").filter(x => !x.hidden)[index];
412
+ // Shadow clone needs to be mapped back to light DOM item.
413
+ // Match by value attribute or text content since index-based matching
414
+ // doesn't work when items are filtered (hidden state differs between clone and source)
415
+ const cloneValue = shadowRootItem.getAttribute('value')
416
+ ?? shadowRootItem.textContent?.trim();
417
+ const sourceItem = __classPrivateFieldGet(this, _ListboxController_items, "f").find(item => (item.getAttribute('value') ?? item.textContent?.trim()) === cloneValue);
418
+ return sourceItem ?? null;
409
419
  }
410
420
  }
411
421
  const itemFromEventContainer = shadowRootListboxElement ? shadowRootListboxElement