UNPKG

@oddbird/popover-polyfill

Version:
8 lines (7 loc) 40.8 kB
{ "version": 3, "sources": ["../src/events.ts", "../src/popover-helpers.ts", "../src/popover.ts", "../src/index.ts"], "sourcesContent": ["export interface ToggleInit extends EventInit {\n oldState: string;\n newState: string;\n}\n\nexport class ToggleEvent extends Event {\n public oldState: string;\n public newState: string;\n constructor(\n type: string,\n { oldState = '', newState = '', ...init }: Partial<ToggleInit> = {},\n ) {\n super(type, init);\n this.oldState = String(oldState || '');\n this.newState = String(newState || '');\n }\n}\n\nconst popoverToggleTaskQueue = new WeakMap<HTMLElement, unknown>();\nexport function queuePopoverToggleEventTask(\n element: HTMLElement,\n oldState: string,\n newState: string,\n) {\n popoverToggleTaskQueue.set(\n element,\n setTimeout(() => {\n if (!popoverToggleTaskQueue.has(element)) return;\n element.dispatchEvent(\n new ToggleEvent('toggle', {\n cancelable: false,\n oldState,\n newState,\n }),\n );\n }, 0),\n );\n}\n", "import { queuePopoverToggleEventTask, ToggleEvent } from './events.js';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst ShadowRoot = globalThis.ShadowRoot || function () {};\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst HTMLDialogElement = globalThis.HTMLDialogElement || function () {};\n\nconst topLayerElements = new WeakMap<Document, Set<HTMLElement>>();\nconst autoPopoverList = new WeakMap<Document, Set<HTMLElement>>();\nexport const visibilityState = new WeakMap<HTMLElement, 'hidden' | 'showing'>();\nfunction getPopoverVisibilityState(popover: HTMLElement): 'hidden' | 'showing' {\n return visibilityState.get(popover) || 'hidden';\n}\n\nconst popoverInvoker = new WeakMap<\n HTMLElement,\n HTMLButtonElement | HTMLInputElement\n>();\n\n// https://html.spec.whatwg.org/#popover-target-attribute-activation-behavior\nexport function popoverTargetAttributeActivationBehavior(\n element: HTMLButtonElement | HTMLInputElement,\n) {\n const popover = element.popoverTargetElement;\n if (!(popover instanceof HTMLElement)) {\n return;\n }\n const visibility = getPopoverVisibilityState(popover);\n if (element.popoverTargetAction === 'show' && visibility === 'showing') {\n return;\n }\n if (element.popoverTargetAction === 'hide' && visibility === 'hidden') return;\n if (visibility === 'showing') {\n hidePopover(popover, true, true);\n } else if (checkPopoverValidity(popover, false)) {\n popoverInvoker.set(popover, element);\n showPopover(popover);\n }\n}\n\n// https://whatpr.org/html/8221/popover.html#check-popover-validity\nfunction checkPopoverValidity(\n element: HTMLElement,\n expectedToBeShowing: boolean,\n) {\n if (element.popover !== 'auto' && element.popover !== 'manual') {\n return false;\n }\n if (!element.isConnected) return false;\n if (expectedToBeShowing && getPopoverVisibilityState(element) !== 'showing') {\n return false;\n }\n if (!expectedToBeShowing && getPopoverVisibilityState(element) !== 'hidden') {\n return false;\n }\n if (element instanceof HTMLDialogElement && element.hasAttribute('open')) {\n return false;\n }\n if (document.fullscreenElement === element) return false;\n return true;\n}\n\nfunction getStackPosition(popover?: Element) {\n if (!popover) return 0;\n return (\n Array.from(autoPopoverList.get(popover.ownerDocument) || []).indexOf(\n popover as HTMLElement,\n ) + 1\n );\n}\n\nfunction topMostClickedPopover(target: HTMLElement) {\n const clickedPopover = nearestInclusiveOpenPopover(target);\n const invokerPopover = nearestInclusiveTargetPopoverForInvoker(target);\n if (getStackPosition(clickedPopover) > getStackPosition(invokerPopover)) {\n return clickedPopover;\n }\n return invokerPopover;\n}\n\n// https://html.spec.whatwg.org/#topmost-auto-popover\nfunction topMostAutoPopover(document: Document): HTMLElement | null {\n const documentPopovers = autoPopoverList.get(document);\n for (const popover of documentPopovers || []) {\n if (!popover.isConnected) {\n documentPopovers!.delete(popover);\n } else {\n return popover;\n }\n }\n return null;\n}\n\nexport function getRootNode(node: Node): Node {\n if (typeof node.getRootNode === 'function') {\n return node.getRootNode();\n }\n if (node.parentNode) return getRootNode(node.parentNode);\n return node;\n}\n\n// https://html.spec.whatwg.org/#nearest-inclusive-open-popover\nfunction nearestInclusiveOpenPopover(\n node: Node | null,\n): HTMLElement | undefined {\n while (node) {\n if (\n node instanceof HTMLElement &&\n node.popover === 'auto' &&\n visibilityState.get(node) === 'showing'\n ) {\n return node;\n }\n node =\n (node instanceof Element && node.assignedSlot) ||\n node.parentElement ||\n getRootNode(node);\n if (node instanceof ShadowRoot) node = node.host;\n if (node instanceof Document) return;\n }\n}\n\n// https://html.spec.whatwg.org/#popover-light-dismiss:nearest-inclusive-target-popover-for-invoker\nfunction nearestInclusiveTargetPopoverForInvoker(\n node: Node | null,\n): HTMLElement | undefined {\n while (node) {\n const nodePopover = (node as HTMLButtonElement).popoverTargetElement;\n if (nodePopover instanceof HTMLElement) return nodePopover;\n node = node.parentElement || getRootNode(node);\n if (node instanceof ShadowRoot) node = node.host;\n if (node instanceof Document) return;\n }\n}\n\n// https://html.spec.whatwg.org/#topmost-popover-ancestor\nfunction topMostPopoverAncestor(newPopover: HTMLElement): HTMLElement | null {\n const popoverPositions = new Map();\n let i = 0;\n for (const popover of autoPopoverList.get(newPopover.ownerDocument) || []) {\n popoverPositions.set(popover, i);\n i += 1;\n }\n popoverPositions.set(newPopover, i);\n i += 1;\n let topMostPopoverAncestor: HTMLElement | null = null;\n function checkAncestor(candidate: Node | null) {\n const candidateAncestor = nearestInclusiveOpenPopover(candidate);\n if (candidateAncestor === null) return null;\n const candidatePosition = popoverPositions.get(candidateAncestor);\n if (\n topMostPopoverAncestor === null ||\n popoverPositions.get(topMostPopoverAncestor) < candidatePosition\n ) {\n topMostPopoverAncestor = candidateAncestor!;\n }\n }\n checkAncestor(newPopover.parentElement || getRootNode(newPopover));\n return topMostPopoverAncestor;\n}\n\nfunction isFocusable(focusTarget: HTMLElement) {\n if (focusTarget.hidden || focusTarget instanceof ShadowRoot) return false;\n if (\n focusTarget instanceof HTMLButtonElement ||\n focusTarget instanceof HTMLInputElement ||\n focusTarget instanceof HTMLSelectElement ||\n focusTarget instanceof HTMLTextAreaElement ||\n focusTarget instanceof HTMLOptGroupElement ||\n focusTarget instanceof HTMLOptionElement ||\n focusTarget instanceof HTMLFieldSetElement\n ) {\n if (focusTarget.disabled) return false;\n }\n if (\n focusTarget instanceof HTMLInputElement &&\n focusTarget.type === 'hidden'\n ) {\n return false;\n }\n if (focusTarget instanceof HTMLAnchorElement && focusTarget.href === '') {\n return false;\n }\n return (\n typeof focusTarget.tabIndex === 'number' && focusTarget.tabIndex !== -1\n );\n}\n\n// This method is not spec compliant, as it also looks in slotted content\n// for autofocus elements.\n// See: https://github.com/oddbird/popover-polyfill/issues/149\n// Spec: https://html.spec.whatwg.org/#focus-delegate\nfunction focusDelegate(focusTarget: HTMLElement) {\n if (\n focusTarget.shadowRoot &&\n focusTarget.shadowRoot.delegatesFocus !== true\n ) {\n return null;\n }\n let whereToLook: DocumentFragment | HTMLElement = focusTarget;\n if (whereToLook.shadowRoot) {\n whereToLook = whereToLook.shadowRoot;\n }\n let autoFocusDelegate = whereToLook.querySelector('[autofocus]');\n if (autoFocusDelegate) {\n return autoFocusDelegate;\n } else {\n const slots = whereToLook.querySelectorAll('slot');\n for (const slot of slots) {\n const assignedElements = slot.assignedElements({ flatten: true });\n for (const el of assignedElements) {\n if (el.hasAttribute('autofocus')) {\n return el;\n } else {\n autoFocusDelegate = el.querySelector('[autofocus]');\n if (autoFocusDelegate) {\n return autoFocusDelegate;\n }\n }\n }\n }\n }\n const walker = focusTarget.ownerDocument.createTreeWalker(\n whereToLook,\n NodeFilter.SHOW_ELEMENT,\n );\n let descendant: Node | null = walker.currentNode;\n while (descendant) {\n // this is not spec compliant\n if (isFocusable(descendant as HTMLElement)) {\n return descendant;\n }\n descendant = walker.nextNode();\n }\n}\n\n// https://html.spec.whatwg.org/#popover-focusing-steps\nfunction popoverFocusingSteps(subject: HTMLElement) {\n (focusDelegate(subject) as HTMLElement)?.focus();\n}\n\nconst previouslyFocusedElements = new WeakMap<HTMLElement, HTMLElement>();\n\n// https://html.spec.whatwg.org/#show-popover\nexport function showPopover(element: HTMLElement) {\n if (!checkPopoverValidity(element, false)) {\n return;\n }\n const document = element.ownerDocument;\n if (\n !element.dispatchEvent(\n new ToggleEvent('beforetoggle', {\n cancelable: true,\n oldState: 'closed',\n newState: 'open',\n }),\n )\n ) {\n return;\n }\n if (!checkPopoverValidity(element, false)) {\n return;\n }\n let shouldRestoreFocus = false;\n if (element.popover === 'auto') {\n const originalType = element.getAttribute('popover');\n const ancestor = topMostPopoverAncestor(element) || document;\n hideAllPopoversUntil(ancestor, false, true);\n if (\n originalType !== element.getAttribute('popover') ||\n !checkPopoverValidity(element, false)\n ) {\n return;\n }\n }\n if (!topMostAutoPopover(document)) {\n shouldRestoreFocus = true;\n }\n previouslyFocusedElements.delete(element);\n const originallyFocusedElement = document.activeElement as HTMLElement;\n element.classList.add(':popover-open');\n visibilityState.set(element, 'showing');\n if (!topLayerElements.has(document)) {\n topLayerElements.set(document, new Set());\n }\n topLayerElements.get(document)!.add(element);\n popoverFocusingSteps(element);\n if (element.popover === 'auto') {\n if (!autoPopoverList.has(document)) {\n autoPopoverList.set(document, new Set());\n }\n autoPopoverList.get(document)!.add(element);\n setInvokerAriaExpanded(popoverInvoker.get(element), true);\n }\n if (\n shouldRestoreFocus &&\n originallyFocusedElement &&\n element.popover === 'auto'\n ) {\n previouslyFocusedElements.set(element, originallyFocusedElement);\n }\n queuePopoverToggleEventTask(element, 'closed', 'open');\n}\n\n// https://html.spec.whatwg.org/#hide-popover\nexport function hidePopover(\n element: HTMLElement,\n focusPreviousElement = false,\n fireEvents = false,\n) {\n // https://whatpr.org/html/8221/popover.html#hide-popover\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n const document = element.ownerDocument;\n if (element.popover === 'auto') {\n hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n }\n setInvokerAriaExpanded(popoverInvoker.get(element), false);\n popoverInvoker.delete(element);\n if (fireEvents) {\n element.dispatchEvent(\n new ToggleEvent('beforetoggle', {\n oldState: 'open',\n newState: 'closed',\n }),\n );\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n }\n topLayerElements.get(document)?.delete(element);\n autoPopoverList.get(document)?.delete(element);\n element.classList.remove(':popover-open');\n visibilityState.set(element, 'hidden');\n if (fireEvents) {\n queuePopoverToggleEventTask(element, 'open', 'closed');\n }\n const previouslyFocusedElement = previouslyFocusedElements.get(element);\n if (previouslyFocusedElement) {\n previouslyFocusedElements.delete(element);\n if (focusPreviousElement) {\n previouslyFocusedElement.focus();\n }\n }\n}\n\nfunction closeAllOpenPopovers(\n document: Document,\n focusPreviousElement = false,\n fireEvents = false,\n) {\n let popover = topMostAutoPopover(document);\n while (popover) {\n hidePopover(popover, focusPreviousElement, fireEvents);\n popover = topMostAutoPopover(document);\n }\n}\n\n// https://html.spec.whatwg.org/#hide-all-popovers-until\nexport function hideAllPopoversUntil(\n endpoint: Element | Document,\n focusPreviousElement: boolean,\n fireEvents: boolean,\n) {\n const document = endpoint.ownerDocument || endpoint;\n if (endpoint instanceof Document) {\n return closeAllOpenPopovers(document, focusPreviousElement, fireEvents);\n }\n let lastToHide = null;\n let foundEndpoint = false;\n for (const popover of autoPopoverList.get(document) || []) {\n if (popover === endpoint) {\n foundEndpoint = true;\n } else if (foundEndpoint) {\n lastToHide = popover;\n break;\n }\n }\n if (!foundEndpoint) {\n return closeAllOpenPopovers(document, focusPreviousElement, fireEvents);\n }\n while (\n lastToHide &&\n getPopoverVisibilityState(lastToHide) === 'showing' &&\n autoPopoverList.get(document)?.size\n ) {\n hidePopover(lastToHide, focusPreviousElement, fireEvents);\n }\n}\n\nconst popoverPointerDownTargets = new WeakMap<Document, HTMLElement>();\n// https://html.spec.whatwg.org/#topmost-clicked-popover\nexport function lightDismissOpenPopovers(event: Event) {\n if (!event.isTrusted) return;\n // Composed path allows us to find the target within shadowroots\n const target = event.composedPath()[0] as HTMLElement;\n if (!target) return;\n const document = target.ownerDocument;\n const topMostPopover = topMostAutoPopover(document);\n if (!topMostPopover) return;\n const ancestor = topMostClickedPopover(target);\n if (ancestor && event.type === 'pointerdown') {\n popoverPointerDownTargets.set(document, ancestor);\n } else if (event.type === 'pointerup') {\n const sameTarget = popoverPointerDownTargets.get(document) === ancestor;\n popoverPointerDownTargets.delete(document);\n if (sameTarget) {\n hideAllPopoversUntil(ancestor || document, false, true);\n }\n }\n}\n\nconst initialAriaExpandedValue = new WeakMap<\n HTMLButtonElement | HTMLInputElement,\n null | string\n>();\n\nfunction setInvokerAriaExpanded(\n el?: HTMLButtonElement | HTMLInputElement,\n force = false,\n) {\n if (!el) return;\n if (!initialAriaExpandedValue.has(el)) {\n initialAriaExpandedValue.set(el, el.getAttribute('aria-expanded'));\n }\n const popover = el.popoverTargetElement;\n if (popover instanceof HTMLElement && popover.popover === 'auto') {\n el.setAttribute('aria-expanded', String(force));\n } else {\n const initialValue = initialAriaExpandedValue.get(el);\n if (!initialValue) {\n el.removeAttribute('aria-expanded');\n } else {\n el.setAttribute('aria-expanded', initialValue);\n }\n }\n}\n", "import { ToggleEvent } from './events.js';\nimport {\n getRootNode,\n hideAllPopoversUntil,\n hidePopover,\n lightDismissOpenPopovers,\n popoverTargetAttributeActivationBehavior,\n showPopover,\n visibilityState,\n} from './popover-helpers.js';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst ShadowRoot = globalThis.ShadowRoot || function () {};\n\nexport function isSupported() {\n return (\n typeof HTMLElement !== 'undefined' &&\n typeof HTMLElement.prototype === 'object' &&\n 'popover' in HTMLElement.prototype\n );\n}\n\nexport function isPolyfilled() {\n // if the `showPopover` method is defined but is not \"native code\"\n // then we can infer it's been polyfilled\n return Boolean(\n document.body?.showPopover &&\n !/native code/i.test(document.body.showPopover.toString()),\n );\n}\n\nfunction patchSelectorFn<K extends string>(\n object: Record<PropertyKey & K, unknown>,\n name: K,\n mapper: (selector: string) => string,\n) {\n const original = object[name] as (selectors: string) => NodeList;\n Object.defineProperty(object, name, {\n value(selector: string) {\n return original.call(this, mapper(selector));\n },\n });\n}\n\nconst nonEscapedPopoverSelector = /(^|[^\\\\]):popover-open\\b/g;\n\nfunction hasLayerSupport() {\n return typeof globalThis.CSSLayerBlockRule === 'function';\n}\n\n// To emulate a UA stylesheet which is the lowest priority in the cascade,\n// all selectors must be wrapped in a :where() which has a specificity of zero.\nfunction getStyles() {\n const useLayer = hasLayerSupport();\n return `\n${useLayer ? '@layer popover-polyfill {' : ''}\n :where([popover]) {\n position: fixed;\n z-index: 2147483647;\n inset: 0;\n padding: 0.25em;\n width: fit-content;\n height: fit-content;\n border-width: initial;\n border-color: initial;\n border-image: initial;\n border-style: solid;\n background-color: canvas;\n color: canvastext;\n overflow: auto;\n margin: auto;\n }\n\n :where([popover]:not(.\\\\:popover-open)) {\n display: none;\n }\n\n :where(dialog[popover].\\\\:popover-open) {\n display: block;\n }\n\n :where(dialog[popover][open]) {\n display: revert;\n }\n\n :where([anchor].\\\\:popover-open) {\n inset: auto;\n }\n\n :where([anchor]:popover-open) {\n inset: auto;\n }\n\n @supports not (background-color: canvas) {\n :where([popover]) {\n background-color: white;\n color: black;\n }\n }\n\n @supports (width: -moz-fit-content) {\n :where([popover]) {\n width: -moz-fit-content;\n height: -moz-fit-content;\n }\n }\n\n @supports not (inset: 0) {\n :where([popover]) {\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n }\n${useLayer ? '}' : ''}\n`;\n}\n\nlet popoverStyleSheet: null | false | CSSStyleSheet = null;\nexport function injectStyles(root: Document | ShadowRoot) {\n const styles = getStyles();\n if (popoverStyleSheet === null) {\n try {\n popoverStyleSheet = new CSSStyleSheet();\n popoverStyleSheet.replaceSync(styles);\n } catch {\n popoverStyleSheet = false;\n }\n }\n if (popoverStyleSheet === false) {\n const sheet = document.createElement('style');\n sheet.textContent = styles;\n if (root instanceof Document) {\n root.head.prepend(sheet);\n } else {\n root.prepend(sheet);\n }\n } else {\n root.adoptedStyleSheets = [popoverStyleSheet, ...root.adoptedStyleSheets];\n }\n}\n\nexport function apply() {\n if (typeof window === 'undefined') return;\n\n window.ToggleEvent = window.ToggleEvent || ToggleEvent;\n\n function rewriteSelector(selector: string) {\n if (selector?.includes(':popover-open')) {\n selector = selector.replace(\n nonEscapedPopoverSelector,\n '$1.\\\\:popover-open',\n );\n }\n return selector;\n }\n\n patchSelectorFn(Document.prototype, 'querySelector', rewriteSelector);\n patchSelectorFn(Document.prototype, 'querySelectorAll', rewriteSelector);\n patchSelectorFn(Element.prototype, 'querySelector', rewriteSelector);\n patchSelectorFn(Element.prototype, 'querySelectorAll', rewriteSelector);\n patchSelectorFn(Element.prototype, 'matches', rewriteSelector);\n patchSelectorFn(Element.prototype, 'closest', rewriteSelector);\n patchSelectorFn(\n DocumentFragment.prototype,\n 'querySelectorAll',\n rewriteSelector,\n );\n\n Object.defineProperties(HTMLElement.prototype, {\n popover: {\n enumerable: true,\n configurable: true,\n get() {\n if (!this.hasAttribute('popover')) return null;\n const value = (this.getAttribute('popover') || '').toLowerCase();\n if (value === '' || value == 'auto') return 'auto';\n return 'manual';\n },\n set(value) {\n if (value === null) {\n this.removeAttribute('popover');\n } else {\n this.setAttribute('popover', value);\n }\n },\n },\n\n showPopover: {\n enumerable: true,\n configurable: true,\n value() {\n showPopover(this);\n },\n },\n\n hidePopover: {\n enumerable: true,\n configurable: true,\n value() {\n hidePopover(this, true, true);\n },\n },\n\n togglePopover: {\n enumerable: true,\n configurable: true,\n value(force: boolean) {\n if (\n (visibilityState.get(this) === 'showing' && force === undefined) ||\n force === false\n ) {\n hidePopover(this, true, true);\n } else if (force === undefined || force === true) {\n showPopover(this);\n }\n },\n },\n });\n\n const originalAttachShadow = Element.prototype.attachShadow;\n if (originalAttachShadow) {\n Object.defineProperties(Element.prototype, {\n attachShadow: {\n enumerable: true,\n configurable: true,\n writable: true,\n value(options: ShadowRootInit) {\n const shadowRoot = originalAttachShadow.call(this, options);\n injectStyles(shadowRoot);\n return shadowRoot;\n },\n },\n });\n }\n const originalAttachInternals = HTMLElement.prototype.attachInternals;\n if (originalAttachInternals) {\n Object.defineProperties(HTMLElement.prototype, {\n attachInternals: {\n enumerable: true,\n configurable: true,\n writable: true,\n value() {\n const internals = originalAttachInternals.call(this);\n if (internals.shadowRoot) {\n injectStyles(internals.shadowRoot);\n }\n return internals;\n },\n },\n });\n }\n\n const popoverTargetAssociatedElements = new WeakMap<Element, Element>();\n function applyPopoverInvokerElementMixin(ElementClass: typeof HTMLElement) {\n Object.defineProperties(ElementClass.prototype, {\n popoverTargetElement: {\n enumerable: true,\n configurable: true,\n set(targetElement: unknown) {\n if (targetElement === null) {\n this.removeAttribute('popovertarget');\n popoverTargetAssociatedElements.delete(this);\n } else if (!(targetElement instanceof Element)) {\n throw new TypeError(\n `popoverTargetElement must be an element or null`,\n );\n } else {\n this.setAttribute('popovertarget', '');\n popoverTargetAssociatedElements.set(this, targetElement);\n }\n },\n get() {\n if (this.localName !== 'button' && this.localName !== 'input') {\n return null;\n }\n if (\n this.localName === 'input' &&\n this.type !== 'reset' &&\n this.type !== 'image' &&\n this.type !== 'button'\n ) {\n return null;\n }\n if (this.disabled) {\n return null;\n }\n if (this.form && this.type === 'submit') {\n return null;\n }\n const targetElement = popoverTargetAssociatedElements.get(this);\n if (targetElement && targetElement.isConnected) {\n return targetElement;\n } else if (targetElement && !targetElement.isConnected) {\n popoverTargetAssociatedElements.delete(this);\n return null;\n }\n const root = getRootNode(this);\n const idref = this.getAttribute('popovertarget');\n if (\n (root instanceof Document || root instanceof ShadowRoot) &&\n idref\n ) {\n return root.getElementById(idref) || null;\n }\n return null;\n },\n },\n popoverTargetAction: {\n enumerable: true,\n configurable: true,\n get() {\n const value = (\n this.getAttribute('popovertargetaction') || ''\n ).toLowerCase();\n if (value === 'show' || value === 'hide') return value;\n return 'toggle';\n },\n set(value) {\n this.setAttribute('popovertargetaction', value);\n },\n },\n });\n }\n\n applyPopoverInvokerElementMixin(HTMLButtonElement);\n applyPopoverInvokerElementMixin(HTMLInputElement);\n\n const handleInvokerActivation = (event: Event) => {\n // Composed path allows us to find the target within shadowroots\n const composedPath = event.composedPath() as HTMLElement[];\n const target = composedPath[0];\n if (!(target instanceof Element) || target?.shadowRoot) {\n return;\n }\n const root = getRootNode(target);\n if (!(root instanceof ShadowRoot || root instanceof Document)) {\n return;\n }\n const invoker = composedPath.find((el) =>\n el.matches?.('[popovertargetaction],[popovertarget]'),\n );\n if (invoker) {\n popoverTargetAttributeActivationBehavior(invoker as HTMLButtonElement);\n event.preventDefault();\n return;\n }\n };\n\n const onKeydown = (event: Event) => {\n const key = (event as KeyboardEvent).key;\n const target = event.target as Element;\n if (\n !event.defaultPrevented &&\n target &&\n (key === 'Escape' || key === 'Esc')\n ) {\n hideAllPopoversUntil(target.ownerDocument, true, true);\n }\n };\n\n const addEventListeners = (root: Document | ShadowRoot) => {\n root.addEventListener('click', handleInvokerActivation);\n root.addEventListener('keydown', onKeydown);\n root.addEventListener('pointerdown', lightDismissOpenPopovers);\n root.addEventListener('pointerup', lightDismissOpenPopovers);\n };\n\n addEventListeners(document);\n injectStyles(document);\n}\n", "import { apply, isSupported } from './popover.js';\n\ninterface PopoverToggleTargetElementInvoker {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/popoverTargetAction) */\n popoverTargetAction: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement/popoverTargetElement) */\n popoverTargetElement: Element | null;\n}\n\ndeclare global {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ToggleEvent) */\n interface ToggleEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ToggleEvent/newState) */\n readonly newState: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ToggleEvent/oldState) */\n readonly oldState: string;\n }\n\n interface HTMLElement {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/popover) */\n popover: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/hidePopover) */\n hidePopover(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/showPopover) */\n showPopover(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/togglePopover) */\n togglePopover(force?: boolean): void;\n }\n\n /* eslint-disable @typescript-eslint/no-empty-object-type */\n interface HTMLButtonElement extends PopoverToggleTargetElementInvoker {}\n interface HTMLInputElement extends PopoverToggleTargetElementInvoker {}\n /* eslint-enable @typescript-eslint/no-empty-object-type */\n\n interface Window {\n ToggleEvent: ToggleEvent;\n }\n}\n\nif (!isSupported()) apply();\n"], "mappings": "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", "names": ["ToggleEvent", "type", "oldState", "newState", "init", "popoverToggleTaskQueue", "queuePopoverToggleEventTask", "element", "ShadowRoot", "HTMLDialogElement", "topLayerElements", "autoPopoverList", "visibilityState", "getPopoverVisibilityState", "popover", "popoverInvoker", "popoverTargetAttributeActivationBehavior", "element", "visibility", "hidePopover", "checkPopoverValidity", "showPopover", "expectedToBeShowing", "getStackPosition", "topMostClickedPopover", "target", "clickedPopover", "nearestInclusiveOpenPopover", "invokerPopover", "nearestInclusiveTargetPopoverForInvoker", "topMostAutoPopover", "document", "documentPopovers", "getRootNode", "node", "nodePopover", "topMostPopoverAncestor", "newPopover", "popoverPositions", "i", "checkAncestor", "candidate", "candidateAncestor", "candidatePosition", "isFocusable", "focusTarget", "focusDelegate", "whereToLook", "autoFocusDelegate", "slots", "slot", "assignedElements", "el", "walker", "descendant", "popoverFocusingSteps", "subject", "previouslyFocusedElements", "ToggleEvent", "shouldRestoreFocus", "originalType", "ancestor", "hideAllPopoversUntil", "originallyFocusedElement", "setInvokerAriaExpanded", "queuePopoverToggleEventTask", "focusPreviousElement", "fireEvents", "previouslyFocusedElement", "closeAllOpenPopovers", "endpoint", "lastToHide", "foundEndpoint", "popoverPointerDownTargets", "lightDismissOpenPopovers", "event", "sameTarget", "initialAriaExpandedValue", "force", "initialValue", "ShadowRoot", "isSupported", "patchSelectorFn", "object", "name", "mapper", "original", "selector", "nonEscapedPopoverSelector", "hasLayerSupport", "getStyles", "useLayer", "popoverStyleSheet", "injectStyles", "root", "styles", "sheet", "apply", "ToggleEvent", "rewriteSelector", "value", "showPopover", "hidePopover", "force", "visibilityState", "originalAttachShadow", "options", "shadowRoot", "originalAttachInternals", "internals", "popoverTargetAssociatedElements", "applyPopoverInvokerElementMixin", "ElementClass", "targetElement", "getRootNode", "idref", "ShadowRoot", "handleInvokerActivation", "event", "composedPath", "target", "invoker", "el", "popoverTargetAttributeActivationBehavior", "onKeydown", "key", "hideAllPopoversUntil", "lightDismissOpenPopovers", "isSupported", "apply"] }