@patternfly/pfe-core 3.0.0 → 4.0.0

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.
Files changed (99) hide show
  1. package/controllers/activedescendant-controller.d.ts +99 -0
  2. package/controllers/activedescendant-controller.js +230 -0
  3. package/controllers/activedescendant-controller.js.map +1 -0
  4. package/controllers/at-focus-controller.d.ts +56 -0
  5. package/controllers/at-focus-controller.js +168 -0
  6. package/controllers/at-focus-controller.js.map +1 -0
  7. package/controllers/cascade-controller.d.ts +7 -2
  8. package/controllers/cascade-controller.js +6 -1
  9. package/controllers/cascade-controller.js.map +1 -1
  10. package/controllers/combobox-controller.d.ts +117 -0
  11. package/controllers/combobox-controller.js +611 -0
  12. package/controllers/combobox-controller.js.map +1 -0
  13. package/controllers/css-variable-controller.js +1 -1
  14. package/controllers/css-variable-controller.js.map +1 -1
  15. package/controllers/floating-dom-controller.d.ts +8 -1
  16. package/controllers/floating-dom-controller.js +12 -5
  17. package/controllers/floating-dom-controller.js.map +1 -1
  18. package/controllers/internals-controller.d.ts +26 -9
  19. package/controllers/internals-controller.js +45 -13
  20. package/controllers/internals-controller.js.map +1 -1
  21. package/controllers/light-dom-controller.js +2 -2
  22. package/controllers/light-dom-controller.js.map +1 -1
  23. package/controllers/listbox-controller.d.ts +118 -33
  24. package/controllers/listbox-controller.js +347 -154
  25. package/controllers/listbox-controller.js.map +1 -1
  26. package/controllers/logger.d.ts +13 -10
  27. package/controllers/logger.js +15 -11
  28. package/controllers/logger.js.map +1 -1
  29. package/controllers/overflow-controller.js +10 -6
  30. package/controllers/overflow-controller.js.map +1 -1
  31. package/controllers/perf-controller.js.map +1 -1
  32. package/controllers/property-observer-controller.d.ts +13 -16
  33. package/controllers/property-observer-controller.js +54 -25
  34. package/controllers/property-observer-controller.js.map +1 -1
  35. package/controllers/roving-tabindex-controller.d.ts +12 -61
  36. package/controllers/roving-tabindex-controller.js +57 -203
  37. package/controllers/roving-tabindex-controller.js.map +1 -1
  38. package/controllers/scroll-spy-controller.d.ts +4 -1
  39. package/controllers/scroll-spy-controller.js +9 -6
  40. package/controllers/scroll-spy-controller.js.map +1 -1
  41. package/controllers/slot-controller.d.ts +12 -16
  42. package/controllers/slot-controller.js +17 -20
  43. package/controllers/slot-controller.js.map +1 -1
  44. package/controllers/style-controller.js +3 -1
  45. package/controllers/style-controller.js.map +1 -1
  46. package/controllers/tabs-aria-controller.d.ts +2 -0
  47. package/controllers/tabs-aria-controller.js +2 -0
  48. package/controllers/tabs-aria-controller.js.map +1 -1
  49. package/controllers/test/combobox-controller.spec.d.ts +1 -0
  50. package/controllers/test/combobox-controller.spec.js +282 -0
  51. package/controllers/test/combobox-controller.spec.js.map +1 -0
  52. package/controllers/timestamp-controller.js +7 -2
  53. package/controllers/timestamp-controller.js.map +1 -1
  54. package/core.d.ts +0 -23
  55. package/core.js +1 -38
  56. package/core.js.map +1 -1
  57. package/custom-elements.json +3844 -1369
  58. package/decorators/bound.d.ts +3 -1
  59. package/decorators/bound.js +3 -1
  60. package/decorators/bound.js.map +1 -1
  61. package/decorators/cascades.d.ts +2 -1
  62. package/decorators/cascades.js +2 -1
  63. package/decorators/cascades.js.map +1 -1
  64. package/decorators/deprecation.d.ts +6 -5
  65. package/decorators/deprecation.js +6 -5
  66. package/decorators/deprecation.js.map +1 -1
  67. package/decorators/initializer.js.map +1 -1
  68. package/decorators/listen.d.ts +8 -0
  69. package/decorators/listen.js +22 -0
  70. package/decorators/listen.js.map +1 -0
  71. package/decorators/observed.d.ts +12 -16
  72. package/decorators/observed.js +39 -44
  73. package/decorators/observed.js.map +1 -1
  74. package/decorators/observes.d.ts +15 -0
  75. package/decorators/observes.js +30 -0
  76. package/decorators/observes.js.map +1 -0
  77. package/decorators/time.d.ts +1 -0
  78. package/decorators/time.js +6 -9
  79. package/decorators/time.js.map +1 -1
  80. package/decorators/trace.d.ts +4 -1
  81. package/decorators/trace.js +4 -1
  82. package/decorators/trace.js.map +1 -1
  83. package/decorators.d.ts +2 -0
  84. package/decorators.js +2 -0
  85. package/decorators.js.map +1 -1
  86. package/functions/arraysAreEquivalent.d.ts +9 -0
  87. package/functions/arraysAreEquivalent.js +28 -0
  88. package/functions/arraysAreEquivalent.js.map +1 -0
  89. package/functions/containsDeep.d.ts +2 -0
  90. package/functions/containsDeep.js +2 -0
  91. package/functions/containsDeep.js.map +1 -1
  92. package/functions/context.d.ts +3 -4
  93. package/functions/context.js +6 -2
  94. package/functions/context.js.map +1 -1
  95. package/functions/debounce.js.map +1 -1
  96. package/functions/isElementInView.d.ts +4 -6
  97. package/functions/isElementInView.js +9 -11
  98. package/functions/isElementInView.js.map +1 -1
  99. package/package.json +7 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox-controller.js","sourceRoot":"","sources":["combobox-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 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 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 }\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 if (this.#hasTextInput) {\n this.#button?.setAttribute('tabindex', '-1');\n } else {\n this.#button?.removeAttribute('tabindex');\n }\n this.#initLabels();\n }\n\n hostDisconnected(): void {\n this.#fc?.hostDisconnected();\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"]}
@@ -4,7 +4,7 @@ export class CssVariableController {
4
4
  this.style = window.getComputedStyle(host);
5
5
  }
6
6
  parseProperty(name) {
7
- return name.substr(0, 2) !== '--' ? `--${name}` : name;
7
+ return name.substring(0, 2) !== '--' ? `--${name}` : name;
8
8
  }
9
9
  getVariable(name) {
10
10
  return this.style.getPropertyValue(this.parseProperty(name)).trim() || null;
@@ -1 +1 @@
1
- {"version":3,"file":"css-variable-controller.js","sourceRoot":"","sources":["css-variable-controller.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IAGhC,YAAmB,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC9E,CAAC;CAGF","sourcesContent":["import type { ReactiveElement, ReactiveController } from 'lit';\n\nexport class CssVariableController implements ReactiveController {\n style: CSSStyleDeclaration;\n\n constructor(public host: ReactiveElement) {\n this.style = window.getComputedStyle(host);\n }\n\n private parseProperty(name: string) {\n return name.substr(0, 2) !== '--' ? `--${name}` : name;\n }\n\n getVariable(name: string) {\n return this.style.getPropertyValue(this.parseProperty(name)).trim() || null;\n }\n\n hostConnected?(): void\n}\n"]}
1
+ {"version":3,"file":"css-variable-controller.js","sourceRoot":"","sources":["css-variable-controller.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IAGhC,YAAmB,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC9E,CAAC;CAGF","sourcesContent":["import type { ReactiveElement, ReactiveController } from 'lit';\n\nexport class CssVariableController implements ReactiveController {\n style: CSSStyleDeclaration;\n\n constructor(public host: ReactiveElement) {\n this.style = window.getComputedStyle(host);\n }\n\n private parseProperty(name: string) {\n return name.substring(0, 2) !== '--' ? `--${name}` : name;\n }\n\n getVariable(name: string): string | null {\n return this.style.getPropertyValue(this.parseProperty(name)).trim() || null;\n }\n\n hostConnected?(): void;\n}\n"]}
@@ -44,7 +44,14 @@ export declare class FloatingDOMController implements ReactiveController {
44
44
  get styles(): StyleInfo;
45
45
  constructor(host: ReactiveControllerHost, options: FloatingDOMControllerOptions);
46
46
  hostDisconnected(): void;
47
- /** Show the floating DOM */
47
+ /**
48
+ * Show the floating DOM
49
+ * @param [options={}]
50
+ * @param options.offset
51
+ * @param options.placement
52
+ * @param options.flip
53
+ * @param options.fallbackPlacements
54
+ * */
48
55
  show({ offset, placement, flip, fallbackPlacements }?: ShowOptions): Promise<void>;
49
56
  /** Hide the floating DOM */
50
57
  hide(): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  var _FloatingDOMController_instances, _FloatingDOMController_open, _FloatingDOMController_opening, _FloatingDOMController_cleanup, _FloatingDOMController_anchor, _FloatingDOMController_alignment, _FloatingDOMController_styles, _FloatingDOMController_placement, _FloatingDOMController_options, _FloatingDOMController_invoker_get, _FloatingDOMController_content_get, _FloatingDOMController_arrow_get, _FloatingDOMController_update;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { autoUpdate, computePosition, offset as offsetMiddleware, shift as shiftMiddleware, flip as flipMiddleware, arrow as arrowMiddleware } from '@floating-ui/dom';
3
+ import { autoUpdate, computePosition, offset as offsetMiddleware, shift as shiftMiddleware, flip as flipMiddleware, arrow as arrowMiddleware, } from '@floating-ui/dom';
4
4
  /**
5
5
  * Controls floating DOM within a web component, e.g. tooltips and popovers
6
6
  */
@@ -44,7 +44,7 @@ export class FloatingDOMController {
44
44
  _FloatingDOMController_options.set(this, void 0);
45
45
  host.addController(this);
46
46
  __classPrivateFieldSet(this, _FloatingDOMController_options, {
47
- invoker: (host instanceof HTMLElement ? () => host : () => undefined),
47
+ invoker: (() => host),
48
48
  shift: true,
49
49
  ...options,
50
50
  }, "f");
@@ -52,7 +52,14 @@ export class FloatingDOMController {
52
52
  hostDisconnected() {
53
53
  __classPrivateFieldGet(this, _FloatingDOMController_cleanup, "f")?.call(this);
54
54
  }
55
- /** Show the floating DOM */
55
+ /**
56
+ * Show the floating DOM
57
+ * @param [options={}]
58
+ * @param options.offset
59
+ * @param options.placement
60
+ * @param options.flip
61
+ * @param options.fallbackPlacements
62
+ * */
56
63
  async show({ offset, placement, flip, fallbackPlacements } = {}) {
57
64
  const invoker = __classPrivateFieldGet(this, _FloatingDOMController_instances, "a", _FloatingDOMController_invoker_get);
58
65
  const content = __classPrivateFieldGet(this, _FloatingDOMController_instances, "a", _FloatingDOMController_content_get);
@@ -99,7 +106,7 @@ _FloatingDOMController_open = new WeakMap(), _FloatingDOMController_opening = ne
99
106
  if (!invoker || !content) {
100
107
  return;
101
108
  }
102
- const { x, y, placement: _placement, middlewareData } = await computePosition(invoker, content, {
109
+ const { x, y, placement: _placement, middlewareData, } = await computePosition(invoker, content, {
103
110
  strategy: 'absolute',
104
111
  placement,
105
112
  middleware: [
@@ -107,7 +114,7 @@ _FloatingDOMController_open = new WeakMap(), _FloatingDOMController_opening = ne
107
114
  shift && shiftMiddleware({ padding }),
108
115
  arrow && arrowMiddleware({ element: arrow, padding: arrow.offsetHeight / 2 }),
109
116
  flip && flipMiddleware({ padding, fallbackPlacements }),
110
- ].filter(Boolean)
117
+ ].filter(Boolean),
111
118
  });
112
119
  if (arrow) {
113
120
  const { x: arrowX, y: arrowY } = middlewareData.arrow || {};
@@ -1 +1 @@
1
- {"version":3,"file":"floating-dom-controller.js","sourceRoot":"","sources":["floating-dom-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Placement } from '@floating-ui/dom';\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport type { StyleInfo } from 'lit/directives/style-map.js';\nimport type { OffsetOptions as Offset } from '@floating-ui/core';\n\nexport type { Placement };\n\nimport {\n autoUpdate,\n computePosition,\n offset as offsetMiddleware,\n shift as shiftMiddleware,\n flip as flipMiddleware,\n arrow as arrowMiddleware\n} from '@floating-ui/dom';\n\ntype Lazy<T> = T | (() => T | null | undefined);\n\ninterface FloatingDOMControllerOptions {\n content: Lazy<HTMLElement>;\n invoker?: Lazy<HTMLElement>;\n arrow?: Lazy<HTMLElement>;\n shift?: boolean;\n padding?: number;\n fallbackPlacements?: Placement[];\n}\n\ninterface ShowOptions {\n offset?: Offset;\n placement?: Placement;\n flip?: boolean;\n fallbackPlacements?: Placement[];\n}\n\nexport type Anchor = '' | 'top' | 'left' | 'bottom' | 'right';\nexport type Alignment = 'center' | 'start' | 'end';\n\n/**\n * Controls floating DOM within a web component, e.g. tooltips and popovers\n */\nexport class FloatingDOMController implements ReactiveController {\n #open = false;\n #opening = false;\n #cleanup?: () => void;\n #anchor?: Anchor;\n #alignment?: Alignment;\n #styles?: StyleInfo;\n #placement?: Placement;\n #options: FloatingDOMControllerOptions;\n\n get #invoker() {\n const { invoker } = this.#options;\n return typeof invoker === 'function' ? invoker() : invoker;\n }\n\n get #content() {\n const { content } = this.#options;\n return typeof content === 'function' ? content() : content;\n }\n\n get #arrow() {\n const { arrow } = this.#options;\n return typeof arrow === 'function' ? arrow() : arrow;\n }\n\n /** The crosswise alignment of the invoker on which to display the floating DOM */\n get alignment() {\n return this.#alignment ?? 'center';\n }\n\n /** The side of the invoker on which to display the floating DOM */\n get anchor() {\n return this.#anchor ?? '';\n }\n\n /**\n * When true, the floating DOM is visible\n */\n get open() {\n return this.#open;\n }\n\n /** The computed placement of the floating DOM */\n get placement(): Placement {\n return this.#placement ?? 'top';\n }\n\n /**\n * Styles to apply to your element's container\n *\n * - `--_floating-content-translate`: translate to apply to floating content.\n */\n get styles(): StyleInfo {\n return this.#styles ?? {};\n }\n\n constructor(\n private host: ReactiveControllerHost,\n options: FloatingDOMControllerOptions\n ) {\n host.addController(this);\n this.#options = {\n invoker: (host instanceof HTMLElement ? () => host : () => undefined),\n shift: true,\n ...options,\n };\n }\n\n hostDisconnected() {\n this.#cleanup?.();\n }\n\n async #update(placement: Placement = 'top', offset?: Offset, flip = true, fallbackPlacements?: Placement[]) {\n const { padding, shift } = this.#options;\n\n const invoker = this.#invoker;\n const content = this.#content;\n const arrow = this.#arrow;\n if (!invoker || !content) {\n return;\n }\n const { x, y, placement: _placement, middlewareData } = await computePosition(invoker, content, {\n strategy: 'absolute',\n placement,\n middleware: [\n offsetMiddleware(offset),\n shift && shiftMiddleware({ padding }),\n arrow && arrowMiddleware({ element: arrow, padding: arrow.offsetHeight / 2 }),\n flip && flipMiddleware({ padding, fallbackPlacements }),\n ].filter(Boolean)\n });\n\n if (arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow || {};\n\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[_placement.split('-')[0]] || '';\n\n Object.assign(arrow.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null && !['top'].includes(_placement) ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: `-${arrow.offsetHeight / 2}px`,\n });\n }\n\n this.#placement = _placement;\n [this.#anchor, this.#alignment] = (this.#placement.split('-') ?? []) as [Anchor, Alignment];\n this.#styles = {\n '--_floating-content-translate': `${x}px ${y}px`,\n };\n this.host.requestUpdate();\n }\n\n /** Show the floating DOM */\n async show({ offset, placement, flip, fallbackPlacements }: ShowOptions = {}) {\n const invoker = this.#invoker;\n const content = this.#content;\n if (!invoker || !content) {\n return;\n }\n if (!this.#opening) {\n this.#opening = true;\n const p = this.#update(placement, offset, flip, fallbackPlacements);\n this.#cleanup ??= autoUpdate(invoker, content, () =>\n this.#update(placement, offset, flip, fallbackPlacements));\n await p;\n this.#opening = false;\n }\n this.#open = true;\n this.host.requestUpdate();\n }\n\n /** Hide the floating DOM */\n async hide() {\n await this.host.updateComplete;\n while (this.#opening && !this.open) {\n await new Promise(requestAnimationFrame);\n }\n this.#open = false;\n this.#cleanup?.();\n this.host.requestUpdate();\n await this.host.updateComplete;\n }\n}\n"]}
1
+ {"version":3,"file":"floating-dom-controller.js","sourceRoot":"","sources":["floating-dom-controller.ts"],"names":[],"mappings":";;AAOA,OAAO,EACL,UAAU,EACV,eAAe,EACf,MAAM,IAAI,gBAAgB,EAC1B,KAAK,IAAI,eAAe,EACxB,IAAI,IAAI,cAAc,EACtB,KAAK,IAAI,eAAe,GACzB,MAAM,kBAAkB,CAAC;AAuB1B;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAyBhC,kFAAkF;IAClF,IAAI,SAAS;QACX,OAAO,uBAAA,IAAI,wCAAW,IAAI,QAAQ,CAAC;IACrC,CAAC;IAED,mEAAmE;IACnE,IAAI,MAAM;QACR,OAAO,uBAAA,IAAI,qCAAQ,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,mCAAM,CAAC;IACpB,CAAC;IAED,iDAAiD;IACjD,IAAI,SAAS;QACX,OAAO,uBAAA,IAAI,wCAAW,IAAI,KAAK,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,IAAI,MAAM;QACR,OAAO,uBAAA,IAAI,qCAAQ,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,YACU,IAA4B,EACpC,OAAqC;;QAD7B,SAAI,GAAJ,IAAI,CAAwB;QAxDtC,sCAAQ,KAAK,EAAC;QACd,yCAAW,KAAK,EAAC;QACjB,iDAAsB;QACtB,gDAAiB;QACjB,mDAAuB;QACvB,gDAAoB;QACpB,mDAAuB;QACvB,iDAAuC;QAoDrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,uBAAA,IAAI,kCAAY;YACd,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,IAAkB,CAAC;YACnC,KAAK,EAAE,IAAI;YACX,GAAG,OAAO;SACX,MAAA,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,uBAAA,IAAI,sCAAS,EAAE,KAAf,IAAI,CAAa,CAAC;IACpB,CAAC;IA2DD;;;;;;;SAOK;IACL,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,KAAkB,EAAE;QAC1E,MAAM,OAAO,GAAG,uBAAA,IAAI,4EAAS,CAAC;QAC9B,MAAM,OAAO,GAAG,uBAAA,IAAI,4EAAS,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,uBAAA,IAAI,sCAAS,EAAE,CAAC;YACnB,uBAAA,IAAI,kCAAY,IAAI,MAAA,CAAC;YACrB,MAAM,CAAC,GAAG,uBAAA,IAAI,uEAAQ,MAAZ,IAAI,EAAS,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;YACpE,kIAAkB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAClD,uBAAA,IAAI,uEAAQ,MAAZ,IAAI,EAAS,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,MAAA,CAAC;YAC7D,MAAM,CAAC,CAAC;YACR,uBAAA,IAAI,kCAAY,KAAK,MAAA,CAAC;QACxB,CAAC;QACD,uBAAA,IAAI,+BAAS,IAAI,MAAA,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;QAC/B,OAAO,uBAAA,IAAI,sCAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;QACD,uBAAA,IAAI,+BAAS,KAAK,MAAA,CAAC;QACnB,uBAAA,IAAI,sCAAS,EAAE,KAAf,IAAI,CAAa,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACjC,CAAC;CACF;;IA3JG,MAAM,EAAE,OAAO,EAAE,GAAG,uBAAA,IAAI,sCAAS,CAAC;IAClC,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;IAGC,MAAM,EAAE,OAAO,EAAE,GAAG,uBAAA,IAAI,sCAAS,CAAC;IAClC,OAAO,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;IAGC,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAA,IAAI,sCAAS,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC,kCAiDD,KAAK,wCACH,YAAuB,KAAK,EAC5B,MAAe,EACf,IAAI,GAAG,IAAI,EACX,kBAAgC;;IAEhC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,uBAAA,IAAI,sCAAS,CAAC;IAEzC,MAAM,OAAO,GAAG,uBAAA,IAAI,4EAAS,CAAC;IAC9B,MAAM,OAAO,GAAG,uBAAA,IAAI,4EAAS,CAAC;IAC9B,MAAM,KAAK,GAAG,uBAAA,IAAI,0EAAO,CAAC;IAC1B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,EACJ,CAAC,EACD,CAAC,EACD,SAAS,EAAE,UAAU,EACrB,cAAc,GACf,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE;QAC1C,QAAQ,EAAE,UAAU;QACpB,SAAS;QACT,UAAU,EAAE;YACV,gBAAgB,CAAC,MAAM,CAAC;YACxB,KAAK,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;YACrC,KAAK,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC7E,IAAI,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;SACxD,CAAC,MAAM,CAAC,OAAO,CAAC;KAClB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;QAE5D,MAAM,UAAU,GAAG;YACjB,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO;SACd,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;YACzB,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;YACzC,GAAG,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE;YACzE,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,CAAC,UAAU,CAAC,EAAE,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,uBAAA,IAAI,oCAAc,UAAU,MAAA,CAAC;IAC7B,KAAC,IAAI,OAAU,IAAI,EAAnB,yMAA+B,GAAG,CAAC,uBAAA,IAAI,wCAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;IAC5F,uBAAA,IAAI,iCAAW;QACb,+BAA+B,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;KACjD,MAAA,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC5B,CAAC","sourcesContent":["import type { Placement } from '@floating-ui/dom';\nimport type { LitElement, ReactiveController, ReactiveControllerHost } from 'lit';\nimport type { StyleInfo } from 'lit/directives/style-map.js';\nimport type { OffsetOptions as Offset } from '@floating-ui/core';\n\nexport type { Placement };\n\nimport {\n autoUpdate,\n computePosition,\n offset as offsetMiddleware,\n shift as shiftMiddleware,\n flip as flipMiddleware,\n arrow as arrowMiddleware,\n} from '@floating-ui/dom';\n\ntype Lazy<T> = T | (() => T | null | undefined);\n\ninterface FloatingDOMControllerOptions {\n content: Lazy<HTMLElement>;\n invoker?: Lazy<HTMLElement>;\n arrow?: Lazy<HTMLElement>;\n shift?: boolean;\n padding?: number;\n fallbackPlacements?: Placement[];\n}\n\ninterface ShowOptions {\n offset?: Offset;\n placement?: Placement;\n flip?: boolean;\n fallbackPlacements?: Placement[];\n}\n\nexport type Anchor = '' | 'top' | 'left' | 'bottom' | 'right';\nexport type Alignment = 'center' | 'start' | 'end';\n\n/**\n * Controls floating DOM within a web component, e.g. tooltips and popovers\n */\nexport class FloatingDOMController implements ReactiveController {\n #open = false;\n #opening = false;\n #cleanup?: () => void;\n #anchor?: Anchor;\n #alignment?: Alignment;\n #styles?: StyleInfo;\n #placement?: Placement;\n #options: FloatingDOMControllerOptions;\n\n get #invoker() {\n const { invoker } = this.#options;\n return typeof invoker === 'function' ? invoker() : invoker;\n }\n\n get #content() {\n const { content } = this.#options;\n return typeof content === 'function' ? content() : content;\n }\n\n get #arrow() {\n const { arrow } = this.#options;\n return typeof arrow === 'function' ? arrow() : arrow;\n }\n\n /** The crosswise alignment of the invoker on which to display the floating DOM */\n get alignment(): Alignment {\n return this.#alignment ?? 'center';\n }\n\n /** The side of the invoker on which to display the floating DOM */\n get anchor(): Anchor {\n return this.#anchor ?? '';\n }\n\n /**\n * When true, the floating DOM is visible\n */\n get open(): boolean {\n return this.#open;\n }\n\n /** The computed placement of the floating DOM */\n get placement(): Placement {\n return this.#placement ?? 'top';\n }\n\n /**\n * Styles to apply to your element's container\n *\n * - `--_floating-content-translate`: translate to apply to floating content.\n */\n get styles(): StyleInfo {\n return this.#styles ?? {};\n }\n\n constructor(\n private host: ReactiveControllerHost,\n options: FloatingDOMControllerOptions\n ) {\n host.addController(this);\n this.#options = {\n invoker: (() => host as LitElement),\n shift: true,\n ...options,\n };\n }\n\n hostDisconnected(): void {\n this.#cleanup?.();\n }\n\n async #update(\n placement: Placement = 'top',\n offset?: Offset,\n flip = true,\n fallbackPlacements?: Placement[],\n ) {\n const { padding, shift } = this.#options;\n\n const invoker = this.#invoker;\n const content = this.#content;\n const arrow = this.#arrow;\n if (!invoker || !content) {\n return;\n }\n const {\n x,\n y,\n placement: _placement,\n middlewareData,\n } = await computePosition(invoker, content, {\n strategy: 'absolute',\n placement,\n middleware: [\n offsetMiddleware(offset),\n shift && shiftMiddleware({ padding }),\n arrow && arrowMiddleware({ element: arrow, padding: arrow.offsetHeight / 2 }),\n flip && flipMiddleware({ padding, fallbackPlacements }),\n ].filter(Boolean),\n });\n\n if (arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow || {};\n\n const staticSide = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[_placement.split('-')[0]] || '';\n\n Object.assign(arrow.style, {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null && !['top'].includes(_placement) ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: `-${arrow.offsetHeight / 2}px`,\n });\n }\n\n this.#placement = _placement;\n [this.#anchor, this.#alignment] = (this.#placement.split('-') ?? []) as [Anchor, Alignment];\n this.#styles = {\n '--_floating-content-translate': `${x}px ${y}px`,\n };\n this.host.requestUpdate();\n }\n\n /**\n * Show the floating DOM\n * @param [options={}]\n * @param options.offset\n * @param options.placement\n * @param options.flip\n * @param options.fallbackPlacements\n * */\n async show({ offset, placement, flip, fallbackPlacements }: ShowOptions = {}): Promise<void> {\n const invoker = this.#invoker;\n const content = this.#content;\n if (!invoker || !content) {\n return;\n }\n if (!this.#opening) {\n this.#opening = true;\n const p = this.#update(placement, offset, flip, fallbackPlacements);\n this.#cleanup ??= autoUpdate(invoker, content, () =>\n this.#update(placement, offset, flip, fallbackPlacements));\n await p;\n this.#opening = false;\n }\n this.#open = true;\n this.host.requestUpdate();\n }\n\n /** Hide the floating DOM */\n async hide(): Promise<void> {\n await this.host.updateComplete;\n while (this.#opening && !this.open) {\n await new Promise(requestAnimationFrame);\n }\n this.#open = false;\n this.#cleanup?.();\n this.host.requestUpdate();\n await this.host.updateComplete;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ReactiveController, ReactiveControllerHost } from 'lit';
1
+ import { type ReactiveController, type ReactiveControllerHost } from 'lit';
2
2
  interface InternalsControllerOptions extends Partial<ARIAMixin> {
3
3
  getHTMLElement?(): HTMLElement;
4
4
  }
@@ -12,12 +12,16 @@ export declare class InternalsController implements ReactiveController, ARIAMixi
12
12
  readonly states: unknown;
13
13
  readonly willValidate: ElementInternals['willValidate'];
14
14
  readonly validationMessage: ElementInternals['validationMessage'];
15
+ static getLabels(host: ReactiveControllerHost): Element[];
16
+ static isSafari: boolean;
15
17
  static of(host: ReactiveControllerHost, options?: InternalsControllerOptions): InternalsController;
16
18
  role: string | null;
17
19
  ariaActivedescendant: string | null;
18
20
  ariaAtomic: string | null;
19
21
  ariaAutoComplete: string | null;
20
22
  ariaBusy: string | null;
23
+ ariaBrailleLabel: string | null;
24
+ ariaBrailleRoleDescription: string | null;
21
25
  ariaChecked: string | null;
22
26
  ariaColCount: string | null;
23
27
  ariaColIndex: string | null;
@@ -58,19 +62,19 @@ export declare class InternalsController implements ReactiveController, ARIAMixi
58
62
  /** WARNING: be careful of cross-root ARIA browser support */
59
63
  ariaActiveDescendantElement: Element | null;
60
64
  /** WARNING: be careful of cross-root ARIA browser support */
61
- ariaControlsElements: Element | null;
65
+ ariaControlsElements: Element[] | null;
62
66
  /** WARNING: be careful of cross-root ARIA browser support */
63
- ariaDescribedByElements: Element | null;
67
+ ariaDescribedByElements: Element[] | null;
64
68
  /** WARNING: be careful of cross-root ARIA browser support */
65
- ariaDetailsElements: Element | null;
69
+ ariaDetailsElements: Element[] | null;
66
70
  /** WARNING: be careful of cross-root ARIA browser support */
67
- ariaErrorMessageElements: Element | null;
71
+ ariaErrorMessageElements: Element[] | null;
68
72
  /** WARNING: be careful of cross-root ARIA browser support */
69
- ariaFlowToElements: Element | null;
73
+ ariaFlowToElements: Element[] | null;
70
74
  /** WARNING: be careful of cross-root ARIA browser support */
71
- ariaLabelledByElements: Element | null;
75
+ ariaLabelledByElements: Element[] | null;
72
76
  /** WARNING: be careful of cross-root ARIA browser support */
73
- ariaOwnsElements: Element | null;
77
+ ariaOwnsElements: Element[] | null;
74
78
  /** True when the control is disabled via it's containing fieldset element */
75
79
  get formDisabled(): boolean;
76
80
  get labels(): NodeList;
@@ -90,7 +94,7 @@ export declare class InternalsController implements ReactiveController, ARIAMixi
90
94
  * Because of that, `this.internals` may not be available in the decorator setter
91
95
  * so we cheat here with nullish coalescing assignment operator `??=`;
92
96
  */
93
- private attach;
97
+ private attachOrRetrieveInternals;
94
98
  private initializeOptions;
95
99
  hostConnected?(): void;
96
100
  setFormValue(...args: Parameters<ElementInternals['setFormValue']>): void;
@@ -100,4 +104,17 @@ export declare class InternalsController implements ReactiveController, ARIAMixi
100
104
  submit(): void;
101
105
  reset(): void;
102
106
  }
107
+ /** @see https://w3c.github.io/aria/#ref-for-dom-ariamixin-ariaactivedescendantelement-1 */
108
+ declare global {
109
+ interface ARIAMixin {
110
+ ariaActiveDescendantElement: Element | null;
111
+ ariaControlsElements: readonly Element[] | null;
112
+ ariaDescribedByElements: readonly Element[] | null;
113
+ ariaDetailsElements: readonly Element[] | null;
114
+ ariaErrorMessageElements: readonly Element[] | null;
115
+ ariaFlowToElements: readonly Element[] | null;
116
+ ariaLabelledByElements: readonly Element[] | null;
117
+ ariaOwnsElements: readonly Element[] | null;
118
+ }
119
+ }
103
120
  export {};
@@ -1,11 +1,16 @@
1
1
  var _InternalsController_instances, _InternalsController_polyfillDisabledPseudo;
2
2
  import { __classPrivateFieldGet, __decorate } from "tslib";
3
+ import { isServer, } from 'lit';
3
4
  function isARIAMixinProp(key) {
4
5
  return key === 'role' || key.startsWith('aria');
5
6
  }
6
7
  const protos = new WeakMap();
7
8
  let constructingAllowed = false;
8
- /** reactively forward the internals object's aria mixin prototype */
9
+ /**
10
+ * reactively forward the internals object's aria mixin prototype
11
+ * @param target
12
+ * @param key
13
+ */
9
14
  function aria(target, key) {
10
15
  if (!protos.has(target)) {
11
16
  protos.set(target, new Set());
@@ -22,13 +27,16 @@ function aria(target, key) {
22
27
  configurable: false,
23
28
  get() {
24
29
  // @ts-expect-error: because i'm bad, i'm bad
25
- return this.attach()[key];
30
+ const internals = this.attachOrRetrieveInternals();
31
+ return internals[key];
26
32
  },
27
33
  set(value) {
34
+ // @ts-expect-error: ya know it!
35
+ const internals = this.attachOrRetrieveInternals();
28
36
  // @ts-expect-error: shamone!
29
- this.attach()[key] = value;
37
+ internals[key] = value;
30
38
  this.host.requestUpdate();
31
- }
39
+ },
32
40
  });
33
41
  protos.get(target).add(key);
34
42
  }
@@ -42,20 +50,28 @@ function getLabelText(label) {
42
50
  }
43
51
  }
44
52
  export class InternalsController {
53
+ static getLabels(host) {
54
+ return Array.from(this.instances.get(host)?.internals.labels ?? []);
55
+ }
45
56
  static of(host, options) {
46
57
  constructingAllowed = true;
47
58
  // implement the singleton pattern
48
59
  // using a public static constructor method is much easier to manage,
49
60
  // due to the quirks of our typescript config
50
- const instance = InternalsController.instances.get(host) ??
51
- new InternalsController(host, options);
61
+ const instance = InternalsController.instances.get(host)
62
+ ?? new InternalsController(host, options);
52
63
  instance.initializeOptions(options);
53
64
  constructingAllowed = false;
54
65
  return instance;
55
66
  }
56
67
  /** True when the control is disabled via it's containing fieldset element */
57
68
  get formDisabled() {
58
- return this.element?.matches(':disabled') || this._formDisabled;
69
+ if (isServer) {
70
+ return this._formDisabled;
71
+ }
72
+ else {
73
+ return this.element?.matches(':disabled') || this._formDisabled;
74
+ }
59
75
  }
60
76
  get labels() {
61
77
  return this.internals.labels;
@@ -65,12 +81,19 @@ export class InternalsController {
65
81
  }
66
82
  /** A best-attempt based on observed behaviour in FireFox 115 on fedora 38 */
67
83
  get computedLabelText() {
68
- return this.internals.ariaLabel ||
69
- Array.from(this.internals.labels)
84
+ return this.internals.ariaLabel
85
+ || Array.from(this.internals.labels)
70
86
  .reduce((acc, label) => `${acc}${getLabelText(label)}`, '');
71
87
  }
72
88
  get element() {
73
- return this.host instanceof HTMLElement ? this.host : this.options?.getHTMLElement?.();
89
+ if (isServer) {
90
+ // FIXME(bennyp): a little white lie, which may break
91
+ // when the controller is applied to non-lit frameworks.
92
+ return this.host;
93
+ }
94
+ else {
95
+ return this.host instanceof HTMLElement ? this.host : this.options?.getHTMLElement?.();
96
+ }
74
97
  }
75
98
  constructor(host, options) {
76
99
  _InternalsController_instances.add(this);
@@ -81,6 +104,8 @@ export class InternalsController {
81
104
  this.ariaAtomic = null;
82
105
  this.ariaAutoComplete = null;
83
106
  this.ariaBusy = null;
107
+ this.ariaBrailleLabel = null;
108
+ this.ariaBrailleRoleDescription = null;
84
109
  this.ariaChecked = null;
85
110
  this.ariaColCount = null;
86
111
  this.ariaColIndex = null;
@@ -139,9 +164,9 @@ export class InternalsController {
139
164
  throw new Error('InternalsController must be constructed with `InternalsController.for()`');
140
165
  }
141
166
  if (!this.element) {
142
- throw new Error('InternalsController must be instantiated with an HTMLElement or a `getHTMLElement` function');
167
+ throw new Error(`InternalsController must be instantiated with an HTMLElement or a \`getHTMLElement\` function`);
143
168
  }
144
- this.attach();
169
+ this.attachOrRetrieveInternals();
145
170
  this.initializeOptions(options);
146
171
  InternalsController.instances.set(host, this);
147
172
  __classPrivateFieldGet(this, _InternalsController_instances, "m", _InternalsController_polyfillDisabledPseudo).call(this);
@@ -155,7 +180,7 @@ export class InternalsController {
155
180
  * Because of that, `this.internals` may not be available in the decorator setter
156
181
  * so we cheat here with nullish coalescing assignment operator `??=`;
157
182
  */
158
- attach() {
183
+ attachOrRetrieveInternals() {
159
184
  this.internals ?? (this.internals = this.element.attachInternals());
160
185
  return this.internals;
161
186
  }
@@ -201,6 +226,7 @@ _InternalsController_instances = new WeakSet(), _InternalsController_polyfillDis
201
226
  };
202
227
  };
203
228
  InternalsController.instances = new WeakMap();
229
+ InternalsController.isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
204
230
  __decorate([
205
231
  aria
206
232
  ], InternalsController.prototype, "role", void 0);
@@ -216,6 +242,12 @@ __decorate([
216
242
  __decorate([
217
243
  aria
218
244
  ], InternalsController.prototype, "ariaBusy", void 0);
245
+ __decorate([
246
+ aria
247
+ ], InternalsController.prototype, "ariaBrailleLabel", void 0);
248
+ __decorate([
249
+ aria
250
+ ], InternalsController.prototype, "ariaBrailleRoleDescription", void 0);
219
251
  __decorate([
220
252
  aria
221
253
  ], InternalsController.prototype, "ariaChecked", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"internals-controller.js","sourceRoot":"","sources":["internals-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from 'lit';\n\nfunction isARIAMixinProp(key: string): key is keyof ARIAMixin {\n return key === 'role' || key.startsWith('aria');\n}\n\nconst protos = new WeakMap();\n\nlet constructingAllowed = false;\n\ninterface InternalsControllerOptions extends Partial<ARIAMixin> {\n getHTMLElement?(): HTMLElement;\n}\n\n/** reactively forward the internals object's aria mixin prototype */\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 return this.attach()[key];\n },\n set(this: InternalsController, value: string | null) {\n // @ts-expect-error: shamone!\n this.attach()[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 of(host: ReactiveControllerHost, 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 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 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() {\n return this.element?.matches(':disabled') || this._formDisabled;\n }\n\n get labels() {\n return this.internals.labels;\n }\n\n get validity() {\n return this.internals.validity;\n }\n\n /** A best-attempt based on observed behaviour in FireFox 115 on fedora 38 */\n get computedLabelText() {\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 return this.host instanceof HTMLElement ? this.host : this.options?.getHTMLElement?.();\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('InternalsController must be instantiated with an HTMLElement or a `getHTMLElement` function');\n }\n this.attach();\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 HTMLElement & { formDisabledCallback?(disabled: boolean): void }).formDisabledCallback;\n (this.element as HTMLElement & { formDisabledCallback?(disabled: boolean): void }).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 attach() {\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] = val;\n }\n }\n }\n\n hostConnected?(): void\n\n setFormValue(...args: Parameters<ElementInternals['setFormValue']>) {\n return this.internals.setFormValue(...args);\n }\n\n setValidity(...args: Parameters<ElementInternals['setValidity']>) {\n return this.internals.setValidity(...args);\n }\n\n checkValidity(...args: Parameters<ElementInternals['checkValidity']>) {\n return this.internals.checkValidity(...args);\n }\n\n reportValidity(...args: Parameters<ElementInternals['reportValidity']>) {\n return this.internals.reportValidity(...args);\n }\n\n submit() {\n this.internals.form?.requestSubmit();\n }\n\n reset() {\n this.internals.form?.reset();\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 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 = /^((?!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 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"]}
@@ -31,8 +31,8 @@ export class LightDOMController {
31
31
  * Returns a boolean statement of whether or not this component contains any light DOM.
32
32
  */
33
33
  hasLightDOM() {
34
- return !!(this.host.children.length > 0 ||
35
- (this.host.textContent ?? '').trim().length > 0);
34
+ return !!(this.host.children.length > 0
35
+ || (this.host.textContent ?? '').trim().length > 0);
36
36
  }
37
37
  }
38
38
  //# sourceMappingURL=light-dom-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"light-dom-controller.js","sourceRoot":"","sources":["light-dom-controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,MAAM,OAAO,kBAAkB;IAK7B,YAAoB,IAAqB,EAAE,WAAuB,EAAU,OAAiB;QAAzE,SAAI,GAAJ,IAAI,CAAiB;QAAmC,YAAO,GAAP,OAAO,CAAU;QAC3F,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;YAClC,8CAA8C;YAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,IAAI,CAAC,IAAI,EACP,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;gBACjE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAA+B,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,CAAC,CACP,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAChD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { ReactiveController, ReactiveElement } from 'lit';\n\nimport { Logger } from './logger.js';\n\nexport interface Options {\n observe?: boolean | MutationObserverInit;\n emptyWarning?: string;\n}\n\nexport class LightDOMController implements ReactiveController {\n private mo: MutationObserver;\n private logger: Logger;\n private initializer: () => void;\n\n constructor(private host: ReactiveElement, initializer: () => void, private options?: Options) {\n this.initializer = initializer.bind(host);\n this.mo = new MutationObserver(this.initializer);\n this.logger = new Logger(this.host);\n host.addController(this);\n }\n\n hostConnected() {\n if (this.hasLightDOM()) {\n this.initializer();\n } else if (this.options?.emptyWarning) {\n this.logger.warn(this.options?.emptyWarning);\n }\n\n this.initObserver();\n }\n\n hostDisconnected() {\n this.mo.disconnect();\n }\n\n private initObserver() {\n if (this.options?.observe ?? true) {\n // Use the provided options, or their defaults\n this.mo.observe(\n this.host,\n typeof this.options?.observe !== 'object' ? { childList: true }\n : this.options?.observe as MutationObserverInit\n );\n }\n }\n\n /**\n * Returns a boolean statement of whether or not this component contains any light DOM.\n */\n hasLightDOM(): boolean {\n return !!(\n this.host.children.length > 0 ||\n (this.host.textContent ?? '').trim().length > 0\n );\n }\n}\n"]}
1
+ {"version":3,"file":"light-dom-controller.js","sourceRoot":"","sources":["light-dom-controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,MAAM,OAAO,kBAAkB;IAK7B,YACU,IAAqB,EAC7B,WAAuB,EACf,OAA6B;QAF7B,SAAI,GAAJ,IAAI,CAAiB;QAErB,YAAO,GAAP,OAAO,CAAsB;QAErC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;YAClC,8CAA8C;YAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,IAAI,CAAC,IAAI,EACP,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;gBACjE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAA+B,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,CAAC,CACP,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;eAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CACnD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { ReactiveController, ReactiveElement } from 'lit';\n\nimport { Logger } from './logger.js';\n\nexport interface Options {\n observe?: boolean | MutationObserverInit;\n emptyWarning?: string;\n}\n\nexport class LightDOMController implements ReactiveController {\n private mo: MutationObserver;\n private logger: Logger;\n private initializer: () => void;\n\n constructor(\n private host: ReactiveElement,\n initializer: () => void,\n private options?: Options | undefined,\n ) {\n this.initializer = initializer.bind(host);\n this.mo = new MutationObserver(this.initializer);\n this.logger = new Logger(this.host);\n host.addController(this);\n }\n\n hostConnected(): void {\n if (this.hasLightDOM()) {\n this.initializer();\n } else if (this.options?.emptyWarning) {\n this.logger.warn(this.options?.emptyWarning);\n }\n\n this.initObserver();\n }\n\n hostDisconnected(): void {\n this.mo.disconnect();\n }\n\n private initObserver() {\n if (this.options?.observe ?? true) {\n // Use the provided options, or their defaults\n this.mo.observe(\n this.host,\n typeof this.options?.observe !== 'object' ? { childList: true }\n : this.options?.observe as MutationObserverInit\n );\n }\n }\n\n /**\n * Returns a boolean statement of whether or not this component contains any light DOM.\n */\n hasLightDOM(): boolean {\n return !!(\n this.host.children.length > 0\n || (this.host.textContent ?? '').trim().length > 0\n );\n }\n}\n"]}