@digdir/designsystemet-web 1.16.1 → 1.17.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isBrowser","attr","on","off","onMutation","tag","customElements","useId","LIVE_CLEAR","on","isBrowser","IS_BROWSER","AGENT","IS_ANDROID","IS_FIREFOX","_a","attr","onMutation","attr","isBrowser","handleAriaAttributes","on","onMutation","isBrowser","useId","onMutation","isSupported","apply","isBrowser","isSupported","computePosition","flip","offset","shift","limitShift","size","getComputedStyle","ShadowRoot","HTMLDialogElement","isBrowser","attr","on","attr","on","ARIA_LABEL","handleAriaAttributes","attr","on","onMutation","IS_IOS","isBrowser","ARIA_LABEL","attr","tag","on","onMutation","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","isBrowser","IS_BROWSER","AGENT","IS_ANDROID","IS_FIREFOX","IS_IOS","_a","IS_MAC","SUPPORTS_CONSTRUCTED_CSS","EVENT_ONCE","DISPLAY_BLOCK","FOCUS_OUTLINE","SAFE_MULTISELECTABLE","UHTMLElement","attr","on","off","attachStyle","tag","onMutation","getRoot","getFocusedElement","useId","customElements","setValue","IS_PRESS","isPointerDown","declarativeShadowRoot","preventSubmit","restoreSubmit","LIVE","LIVE_SR_FIX","LIVE_CLEAR","speak","TEXTS","onMutations","onBlur","onBlurred","onClick","onKeyDown","ATTR_LABEL","render","on","onMutation","onMutation","render","attr","useId","useId","attr","TEXTS","on","onMutation","attr","onMutation","render","isBrowser","IS_BROWSER","AGENT","IS_ANDROID","_a","SUPPORTS_CONSTRUCTED_CSS","DISPLAY_BLOCK","UHTMLElement","attr","on","off","attachStyle","tag","onMutation","getRoot","useId","customElements","declarativeShadowRoot","onMutations","setSelected","onMutation","useId","UTabs.UHTMLTabsElement","UTabs.UHTMLTabListElement","UTabs.UHTMLTabElement","UTabs.UHTMLTabPanelElement"],"sources":["../../src/utils/utils.ts","../../src/clickdelegatefor/clickdelegatefor.ts","../../../../node_modules/.pnpm/@u-elements+u-details@1.0.0/node_modules/@u-elements/u-details/dist/polyfill.js","../../src/dialog/dialog.ts","../../src/fieldset/fieldset.ts","../../../../node_modules/.pnpm/invokers-polyfill@1.0.3/node_modules/invokers-polyfill/invoker.js","../../src/invokers/invokers.ts","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../node_modules/.pnpm/@oddbird+popover-polyfill@0.6.1/node_modules/@oddbird/popover-polyfill/dist/popover-fn.js","../../src/popover/popover.ts","../../src/readonly/readonly.ts","../../src/toggle-group/toggle-group.ts","../../src/tooltip/tooltip.ts","../../../../node_modules/.pnpm/@u-elements+u-datalist@2.0.1/node_modules/@u-elements/u-datalist/dist/u-datalist.js","../../src/breadcrumbs/breadcrumbs.ts","../../src/error-summary/error-summary.ts","../../src/field/field.ts","../../src/pagination/pagination.ts","../../../../node_modules/.pnpm/@u-elements+u-combobox@2.0.5/node_modules/@u-elements/u-combobox/dist/u-combobox.js","../../src/suggestion/suggestion.ts","../../../../node_modules/.pnpm/@u-elements+u-tabs@1.0.3/node_modules/@u-elements/u-tabs/dist/u-tabs.js","../../src/tabs/tabs.ts"],"sourcesContent":["export const QUICK_EVENT = { passive: true, capture: true };\n\n// Using function instead of constant to support evnironments where DOM can be unloaded (like Vitest with jsdom)\nexport const isBrowser = () =>\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport const isWindows = () =>\n isBrowser() &&\n // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n /^Win/i.test(navigator.userAgentData?.platform || navigator.platform);\n\n// Make sure we have a HTMLElement to extend (for server side rendering)\nexport const DSElement =\n typeof HTMLElement === 'undefined'\n ? (class {} as typeof HTMLElement)\n : HTMLElement;\n\nexport function debounce<T extends unknown[]>(\n callback: (...args: T) => void,\n delay: number,\n) {\n let timer: ReturnType<typeof setTimeout>;\n\n return function (this: unknown, ...args: T) {\n clearTimeout(timer);\n timer = setTimeout(() => callback.apply(this, args), delay);\n };\n}\n\n/**\n * warn\n * @description Utility to console.log, but can be silenced in production with window.dsWarnings = false;\n */\ndeclare global {\n interface Window {\n dsWarnings?: boolean;\n }\n}\nexport const warn = (\n message: string,\n ...args: Parameters<typeof console.log> // Using console.log, not console.warn, to prevent stopping test runners such as Jest\n) =>\n !isBrowser() ||\n window.dsWarnings === false ||\n console.log(`\\x1B[1mDesignsystemet:\\x1B[m ${message}`, ...args);\n\n/**\n * attr\n * @description Utility to quickly get, set and remove attributes\n * @param el The Element to read/write attributes from\n * @param name The attribute name to get, set or remove, or a object to set multiple attributes\n * @param value A valid attribute value or null to remove attribute\n */\nexport const attr = (\n el: Element,\n name: string,\n value?: string | null,\n): string | null => {\n if (value === undefined) return el.getAttribute(name) ?? null; // Fallback to null only if el is undefined\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\n\n/**\n * getCSSProp\n * @description Retrieves and CSS property value and trims it\n * @param el The Element to read attributes/CSS from\n * @param name Attribute or CSS property to get\n * @return string CSS property value\n */\nexport const getCSSProp = (el: Element, prop: string) =>\n getComputedStyle(el).getPropertyValue(prop).trim();\n\nconst STRIP_QUOTES = /^[\"']|[\"']$/g; // Matches surrounding single or double quotes\n/**\n * attrOrCSS\n * @description Retrieves and updates attribute based on attribute or CSS property value\n * @param el The Element to read attributes/CSS from\n * @param name Attribute or CSS property to get\n * @return string attribute or CSS property value\n */\nexport const attrOrCSS = (el: Element, name: string) => {\n let value = attr(el, name);\n if (!value)\n value = getCSSProp(el, `--_ds-${name}`).replace(STRIP_QUOTES, '').trim();\n if (!value) warn(`Missing ${name} on:`, el);\n return value || null;\n};\n\n/**\n * on\n * @param el The Element to use as EventTarget\n * @param types A space separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const on = (\n el: Node | Window | ShadowRoot,\n ...rest: Parameters<typeof Element.prototype.addEventListener>\n): (() => void) => {\n const [types, ...options] = rest;\n for (const type of types.split(' ')) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\n\n/**\n * off\n * @param el The Element to use as EventTarget\n * @param types A space separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const off = (\n el: Node | Window | ShadowRoot,\n ...rest: Parameters<typeof Element.prototype.removeEventListener>\n): void => {\n const [types, ...options] = rest;\n for (const type of types.split(' ')) el.removeEventListener(type, ...options);\n};\n\n// Used to store cleanup functions for hot-reloading\ndeclare global {\n interface Window {\n _dsHotReloadCleanup?: Map<string, Array<() => void>>;\n }\n}\n\n/**\n * onHotReload\n * @description Runs a callback when window is loaded in browser, and ensures cleanup when hot-reloading\n * @param key The key to identify setup and corresponding cleanup\n * @param callback The callback to run when the page is ready\n */\nexport const onHotReload = (key: string, setup: () => Array<() => void>) => {\n if (!isBrowser()) return; // Skip if not in modern browser environment, but on each call as Vitest might have unloaded jsdom between tests\n if (!window._dsHotReloadCleanup) window._dsHotReloadCleanup = new Map(); // Hot reload cleanup support supporting all build tools\n\n window._dsHotReloadCleanup?.get(key)?.map((cleanup) => cleanup()); // Run previous cleanup\n window._dsHotReloadCleanup?.set(key, setup()); // Store new cleanup\n};\n\n/**\n * MutationObserver wrapper with automatic cleanup\n * @return new MutaionObserver\n */\nexport const onMutation = <T extends Node>(\n el: T,\n callback: (el: T, records?: MutationRecord[]) => void,\n options: MutationObserverInit,\n) => {\n const cleanup = () => observer.disconnect();\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup(); // Stop observing if element is removed from DOM or document is removed by jdsom tests\n callback(el, records);\n });\n\n callback(el); // Initial is run instantly to make test markup predictable\n observer.observe(el, options);\n return cleanup;\n};\n\n/**\n * tag\n * @description creates element and assigns properties\n * @param tagName The tagname of element to create\n * @param attrs Optional attributes to add to the element\n * @param text Optional text content to add to the element\n * @return HTMLElement with props\n */\nexport const tag = <TagName extends keyof HTMLElementTagNameMap>(\n tagName: TagName,\n attrs?: Record<string, string | null> | null,\n): HTMLElementTagNameMap[TagName] => {\n const el = document.createElement(tagName);\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\n\n/**\n * customElements.define\n * @description Defines a customElement if running in browser and if not already registered\n * Scoped/named \"customElements.define\" so @custom-elements-manifest/analyzer can find tag names\n */\nexport const customElements = {\n define: (name: string, instance: CustomElementConstructor) =>\n !isBrowser() ||\n window.customElements.get(name) ||\n window.customElements.define(name, instance),\n};\n\n/**\n * useId\n * @return A generated unique ID\n */\ndeclare global {\n interface Window {\n dsUseId?: number; // Use a global counter to ensure this works even when loading designsystemet multiple times\n }\n}\nlet id = 0;\nexport function useId(el?: Element | null) {\n if (!isBrowser()) return `:ds:${++id}`; // Emulate browser environment if window not available\n if (!window.dsUseId) window.dsUseId = 0; // Make sure we have a global to support multiple instances of designsystemet in same page\n if (el && !el.id) el.id = `:ds:${++window.dsUseId}`;\n return el?.id || '';\n}\n\n/**\n * @description Based off speak function from [U-elements](https://github.com/u-elements/u-elements/blob/main/packages/utils.ts#L210)\n * @param text The text to announce\n */\nlet LIVE_EL: HTMLElement | undefined;\nlet LIVE_FIX = 0;\nlet LIVE_CLEAR: ReturnType<typeof setTimeout> | number = 0;\nexport const announce = (text: string) => {\n clearTimeout(LIVE_CLEAR);\n if (LIVE_EL) LIVE_EL.textContent = `${text}${LIVE_FIX++ % 2 ? '\\u00A0' : ''}`; // Non-breaking space to ensure screen reader announces\n if (text) LIVE_CLEAR = setTimeout(announce, 2000, ''); // Clear prevent old announcements being found by screen readers, with 2 seconds brace period to avoid cutting of Android Talkback\n};\n\n// Mount live region on first focus so its ready to be used\nconst announceMount = () => {\n if (document.readyState !== 'complete') return; // Ensure page is loaded trying to avoid issues with React hydration\n if (!LIVE_EL) {\n LIVE_EL = tag('div', { 'aria-live': 'assertive' });\n LIVE_EL.style.overflow = 'hidden'; // Settings styles individually to prevent issues with CSP\n LIVE_EL.style.position = 'fixed';\n LIVE_EL.style.whiteSpace = 'nowrap';\n LIVE_EL.style.width = '1px';\n }\n if (!LIVE_EL.isConnected) document.body.appendChild(LIVE_EL);\n};\nonHotReload('announce', () => [\n on(document, 'focus mouseover', announceMount, QUICK_EVENT),\n]);\n","// Adding support for click deletagtion, following\n// https://open-ui.org/components/link-area-delegation-explainer/\n// and https://github.com/openui/open-ui/issues/1104#issuecomment-3151387080\nimport { on, onHotReload, QUICK_EVENT } from '../utils/utils';\n\nconst CLASS_HOVER = ':click-delegate-hover';\nconst ATTR_CLICKDELEGATEFOR = 'data-clickdelegatefor';\nconst SELECTOR_CLICKDELEGATEFOR = `[${ATTR_CLICKDELEGATEFOR}]`;\nconst SELECTOR_SKIP =\n 'a,button,label,input,select,textarea,details,dialog,[role=\"button\"],[popover],[contenteditable]';\n\nconst handleClickDelegateFor = (event: MouseEvent) => {\n const isNewTab = event.button === 1 || event.metaKey || event.ctrlKey; // Middle click or cmd/ctrl + click should open in new tab\n const delegateTarget = event.button < 2 && getDelegateTarget(event); // Only accept left or middle clicks\n\n if (!delegateTarget || delegateTarget.contains(event.target as Node)) return; // Only proxy event if delegated target isn't part of the original target\n if (isNewTab && delegateTarget instanceof HTMLAnchorElement)\n return window.open(delegateTarget.href, undefined, delegateTarget.rel); // If middle click or cmd/ctrl click on link, open in new tab\n event.stopImmediatePropagation(); // We'll trigger a new click event anyway, so prevent actions on this one\n delegateTarget.click(); // Forward click to the clickable element\n};\n\nlet HOVER: Element | undefined;\nconst handleMouseOver = (event: Event) => {\n const delegateTarget = getDelegateTarget(event);\n if (HOVER === delegateTarget) return; // No change\n if (HOVER) HOVER.classList.remove(CLASS_HOVER);\n if (delegateTarget) delegateTarget.classList.add(CLASS_HOVER);\n HOVER = delegateTarget;\n};\n\nconst getDelegateTarget = ({ target: el }: Event) => {\n const scope =\n el instanceof Element ? el.closest(SELECTOR_CLICKDELEGATEFOR) : null;\n const id = scope?.getAttribute(ATTR_CLICKDELEGATEFOR);\n const target = (id && document.getElementById(id)) || undefined;\n const skip = target && (el as Element).closest(SELECTOR_SKIP); // Ignore if interactive\n\n return (!skip || skip === target) && !(target as HTMLInputElement)?.disabled\n ? target\n : undefined; // Skip disabled inputs\n};\n\nonHotReload('clickdelegatefor', () => [\n on(window, 'click auxclick', handleClickDelegateFor as EventListener, true), // Use capture to ensure we run before other click listeners\n on(document, 'mouseover', handleMouseOver, QUICK_EVENT), // Use passive for better performance\n]);\n","// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar IS_FIREFOX = /firefox/i.test(AGENT);\nvar _a;\nIS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\n\n// polyfill.ts\nvar KEY = \"__uDetailsPolyfillSummarys\";\nif (isBrowser() && IS_ANDROID && IS_FIREFOX && !window[KEY]) {\n const summaries = document.getElementsByTagName(\"summary\");\n const onMutations = () => {\n for (const summary of summaries) {\n const details = summary.parentElement;\n attr(summary, \"role\", \"button\");\n attr(summary, \"aria-expanded\", `${!!(details == null ? void 0 : details.open)}`);\n }\n };\n window[KEY] = onMutation(document, onMutations, {\n attributeFilter: [\"open\"],\n attributes: true,\n childList: true,\n subtree: true\n });\n}\n","import {\n attr,\n isBrowser,\n on,\n onHotReload,\n onMutation,\n QUICK_EVENT,\n} from '../utils/utils';\n\n// Polyfill closedby functionaliy in Safari\n// Also in Safari 26.2 where `closedBy` property is supported natively,\n// but no corresponding functionality/behavior is implemented.\nlet DOWN_INSIDE = false; // Prevent close if selecting text inside dialog\nconst handleClosedbyAny = ({\n type,\n target: el,\n clientX: x = 0,\n clientY: y = 0,\n}: Partial<MouseEvent>) => {\n if (type === 'pointerdown') {\n const r = (el as Element)?.closest?.('dialog')?.getBoundingClientRect();\n const isInside =\n r && r.top <= y && y <= r.bottom && r.left <= x && x <= r.right;\n\n DOWN_INSIDE = !!isInside;\n } else {\n const isDialog = el instanceof HTMLDialogElement;\n const isClose = isDialog && !DOWN_INSIDE && attr(el, 'closedby') === 'any';\n\n DOWN_INSIDE = false; // Reset on every pointerup\n if (isClose) requestAnimationFrame(() => el.open && el.close()); // Close if browser did not do it\n }\n};\n\n// Ensure buttons that trigger a modeal dialog has aria-haspopup=\"dialog\" for better screen reader experience\nconst BUTTONS = isBrowser() ? document.getElementsByTagName('button') : [];\nconst handleAriaAttributes = () => {\n for (const btn of BUTTONS)\n if (btn.getAttribute('command')?.endsWith('-modal'))\n btn.setAttribute('aria-haspopup', 'dialog'); // Using get/setAttribute for performance\n};\n\nconst handleCommand = ({ command, target }: Event & { command?: string }) =>\n command === '--show-non-modal' &&\n target instanceof HTMLDialogElement &&\n target.show();\n\nonHotReload('dialog', () => [\n on(document, 'command', handleCommand, QUICK_EVENT),\n on(document, 'pointerdown pointerup', handleClosedbyAny, QUICK_EVENT),\n onMutation(document, handleAriaAttributes, {\n attributeFilter: ['command'],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","import {\n attr,\n isBrowser,\n onHotReload,\n onMutation,\n useId,\n} from '../utils/utils';\n\nconst FIELDSETS = isBrowser() ? document.getElementsByTagName('fieldset') : [];\n\n// NOTE:\n// <fieldset> descriptions should be accessible to screen reader users. However, using aria-describedby\n// on <fieldset> causes all child <input> elements to inherit the same description, resulting in redundant and confusing announcements.\n// To avoid this, we use aria-labelledby to reference both the legend and the description.\n// aria-labelledby is only announced when screen readers enter the fieldset, not when navigating its child elements.\n// This means the accessible name of <fieldset> includes both the legend and description, which may differ from some test expectations,\n// but as of March 2026, this approach provides the best user experience across assistive technologies.\n// This approach is also verified by the chief of accessibility at NRK and the accessibility expert at NAV\nconst handleFieldsetMutations = () => {\n for (const el of FIELDSETS) {\n if (el.hasAttribute('aria-labelledby')) continue; // Speed up by skipping labelled fieldsets\n const labelledby = `${useId(el.querySelector('legend'))} ${useId(el.querySelector(':scope > :is([data-field=\"description\"],legend + p)'))}`;\n attr(el, 'aria-labelledby', labelledby.trim() || null);\n }\n};\n\nonHotReload('fieldset', () => [\n onMutation(document, handleFieldsetMutations, {\n childList: true,\n subtree: true,\n }),\n]);\n","export function isSupported() {\n return (\n typeof HTMLButtonElement !== \"undefined\" &&\n \"command\" in HTMLButtonElement.prototype &&\n \"source\" in ((globalThis.CommandEvent || {}).prototype || {})\n );\n}\n\nexport function isPolyfilled() {\n return !/native code/i.test((globalThis.CommandEvent || {}).toString());\n}\n\nexport function apply() {\n // XXX: Invoker Buttons used to dispatch 'invoke' events instead of\n // 'command' events. We should ensure to prevent 'invoke' events being\n // fired in those browsers.\n // XXX: https://bugs.chromium.org/p/chromium/issues/detail?id=1523183\n // Chrome will dispatch invoke events even with the flag disabled; so\n // we need to capture those to prevent duplicate events.\n document.addEventListener(\n \"invoke\",\n (e) => {\n if (e.type == \"invoke\" && e.isTrusted) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n },\n true,\n );\n document.addEventListener(\n \"command\",\n (e) => {\n if (e.type == \"command\" && e.isTrusted) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n },\n true,\n );\n\n function enumerate(obj, key, enumerable = true) {\n Object.defineProperty(obj, key, {\n ...Object.getOwnPropertyDescriptor(obj, key),\n enumerable,\n });\n }\n\n function getRootNode(node) {\n if (node && typeof node.getRootNode === \"function\") {\n return node.getRootNode();\n }\n if (node && node.parentNode) return getRootNode(node.parentNode);\n return node;\n }\n\n const commandEventSourceElements = new WeakMap();\n const commandEventActions = new WeakMap();\n\n class CommandEvent extends Event {\n constructor(type, invokeEventInit = {}) {\n super(type, invokeEventInit);\n const { source, command } = invokeEventInit;\n if (source != null && !(source instanceof Element)) {\n throw new TypeError(`source must be an element`);\n }\n commandEventSourceElements.set(this, source || null);\n commandEventActions.set(\n this,\n command !== undefined ? String(command) : \"\",\n );\n }\n\n get [Symbol.toStringTag]() {\n return \"CommandEvent\";\n }\n\n get source() {\n if (!commandEventSourceElements.has(this)) {\n throw new TypeError(\"illegal invocation\");\n }\n const source = commandEventSourceElements.get(this);\n if (!(source instanceof Element)) return null;\n const invokerRoot = getRootNode(source);\n if (invokerRoot !== getRootNode(this.target || document)) {\n return invokerRoot.host;\n }\n return source;\n }\n\n get command() {\n if (!commandEventActions.has(this)) {\n throw new TypeError(\"illegal invocation\");\n }\n return commandEventActions.get(this);\n }\n }\n enumerate(CommandEvent.prototype, \"source\");\n enumerate(CommandEvent.prototype, \"command\");\n\n const invokerAssociatedElements = new WeakMap();\n\n function applyInvokerMixin(ElementClass) {\n Object.defineProperties(ElementClass.prototype, {\n commandForElement: {\n enumerable: true,\n configurable: true,\n set(targetElement) {\n if (targetElement === null) {\n this.removeAttribute(\"commandfor\");\n invokerAssociatedElements.delete(this);\n } else if (!(targetElement instanceof Element)) {\n throw new TypeError(`commandForElement must be an element or null`);\n } else {\n this.setAttribute(\"commandfor\", \"\");\n const targetRootNode = getRootNode(targetElement);\n const thisRootNode = getRootNode(this);\n if (\n thisRootNode === targetRootNode ||\n targetRootNode === this.ownerDocument\n ) {\n invokerAssociatedElements.set(this, targetElement);\n } else {\n invokerAssociatedElements.delete(this);\n }\n }\n },\n get() {\n if (this.localName !== \"button\") {\n return null;\n }\n if (this.disabled) {\n return null;\n }\n if (this.form && this.getAttribute(\"type\") !== \"button\") {\n console.warn(\n \"Element with `commandFor` is a form participant. \" +\n \"It should explicitly set `type=button` in order for `commandFor` to work\",\n );\n return null;\n }\n const targetElement = invokerAssociatedElements.get(this);\n if (targetElement) {\n if (targetElement.isConnected) {\n return targetElement;\n } else {\n invokerAssociatedElements.delete(this);\n return null;\n }\n }\n const root = getRootNode(this);\n const idref = this.getAttribute(\"commandfor\");\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 command: {\n enumerable: true,\n configurable: true,\n get() {\n const value = this.getAttribute(\"command\") || \"\";\n if (value.startsWith(\"--\")) return value;\n const valueLower = value.toLowerCase();\n switch (valueLower) {\n case \"show-modal\":\n case \"request-close\":\n case \"close\":\n case \"toggle-popover\":\n case \"hide-popover\":\n case \"show-popover\":\n return valueLower;\n }\n return \"\";\n },\n set(value) {\n this.setAttribute(\"command\", value);\n },\n },\n });\n }\n\n const onHandlers = new WeakMap();\n Object.defineProperties(HTMLElement.prototype, {\n oncommand: {\n enumerable: true,\n configurable: true,\n get() {\n oncommandObserver.takeRecords();\n return onHandlers.get(this) || null;\n },\n set(handler) {\n const existing = onHandlers.get(this) || null;\n if (existing) {\n this.removeEventListener(\"command\", existing);\n }\n onHandlers.set(\n this,\n typeof handler === \"object\" || typeof handler === \"function\"\n ? handler\n : null,\n );\n if (typeof handler == \"function\") {\n this.addEventListener(\"command\", handler);\n }\n },\n },\n });\n function applyOnCommandHandler(els) {\n for (const el of els) {\n el.oncommand = new Function(\"event\", el.getAttribute(\"oncommand\"));\n }\n }\n const oncommandObserver = new MutationObserver((records) => {\n for (const record of records) {\n const { target } = record;\n if (record.type === \"childList\") {\n applyOnCommandHandler(target.querySelectorAll(\"[oncommand]\"));\n } else {\n applyOnCommandHandler([target]);\n }\n }\n });\n oncommandObserver.observe(document, {\n subtree: true,\n childList: true,\n attributeFilter: [\"oncommand\"],\n });\n applyOnCommandHandler(document.querySelectorAll(\"[oncommand]\"));\n\n const processedEvents = new WeakSet();\n\n function handleInvokerActivation(event) {\n if (processedEvents.has(event)) return;\n\n processedEvents.add(event);\n\n if (event.defaultPrevented) return;\n if (event.type !== \"click\") return;\n const source = event.composedPath().find((el) => el.matches?.(\"button[commandfor], button[command]\"));\n if (!source) return;\n\n if (source.form && source.getAttribute(\"type\") !== \"button\") {\n event.preventDefault();\n throw new Error(\n \"Element with `commandFor` is a form participant. \" +\n \"It should explicitly set `type=button` in order for `commandFor` to work. \" +\n \"In order for it to act as a Submit button, it must not have command or commandfor attributes\",\n );\n }\n\n if (source.hasAttribute(\"command\") !== source.hasAttribute(\"commandfor\")) {\n const attr = source.hasAttribute(\"command\") ? \"command\" : \"commandfor\";\n const missing = source.hasAttribute(\"command\") ? \"commandfor\" : \"command\";\n throw new Error(\n `Element with ${attr} attribute must also have a ${missing} attribute to function.`,\n );\n }\n\n if (\n source.command !== \"show-popover\" &&\n source.command !== \"hide-popover\" &&\n source.command !== \"toggle-popover\" &&\n source.command !== \"show-modal\" &&\n source.command !== \"request-close\" &&\n source.command !== \"close\" &&\n !source.command.startsWith(\"--\")\n ) {\n console.warn(\n `\"${source.command}\" is not a valid command value. Custom commands must begin with --`,\n );\n return;\n }\n\n const invokee = source.commandForElement;\n if (!invokee) return;\n const invokeEvent = new CommandEvent(\"command\", {\n command: source.command,\n source,\n cancelable: true,\n });\n invokee.dispatchEvent(invokeEvent);\n if (invokeEvent.defaultPrevented) return;\n\n const command = invokeEvent.command.toLowerCase();\n\n if (invokee.popover) {\n const canShow = !invokee.matches(\":popover-open\");\n const shouldShow =\n canShow && (command === \"toggle-popover\" || command === \"show-popover\");\n const shouldHide = !canShow && command === \"hide-popover\";\n\n if (shouldShow) {\n invokee.showPopover({ source });\n } else if (shouldHide) {\n invokee.hidePopover();\n }\n } else if (invokee.localName === \"dialog\") {\n const canShow = !invokee.hasAttribute(\"open\");\n\n if (canShow && command == \"show-modal\") {\n invokee.showModal();\n } else if (!canShow && command == \"close\") {\n invokee.close(source.value ? source.value : undefined);\n } else if (!canShow && command == \"request-close\") {\n // requestClose is only supported from Safari 18.4, so we polyfill it on older browsers\n if (!HTMLDialogElement.prototype.requestClose) {\n HTMLDialogElement.prototype.requestClose = function () {\n const cancelEvent = new Event(\"cancel\", { cancelable: true });\n this.dispatchEvent(cancelEvent);\n\n if (!cancelEvent.defaultPrevented) {\n this.close();\n }\n };\n }\n\n invokee.requestClose(source.value ? source.value : undefined);\n }\n }\n }\n\n function setupInvokeListeners(target) {\n target.addEventListener(\"click\", handleInvokerActivation, true);\n }\n\n function observeShadowRoots(ElementClass, callback) {\n const attachShadow = ElementClass.prototype.attachShadow;\n ElementClass.prototype.attachShadow = function (init) {\n const shadow = attachShadow.call(this, init);\n callback(shadow);\n return shadow;\n };\n const attachInternals = ElementClass.prototype.attachInternals;\n ElementClass.prototype.attachInternals = function () {\n const internals = attachInternals.call(this);\n if (internals.shadowRoot) callback(internals.shadowRoot);\n return internals;\n };\n }\n\n applyInvokerMixin(HTMLButtonElement);\n\n observeShadowRoots(HTMLElement, (shadow) => {\n setupInvokeListeners(shadow);\n oncommandObserver.observe(shadow, { attributeFilter: [\"oncommand\"] });\n applyOnCommandHandler(shadow.querySelectorAll(\"[oncommand]\"));\n });\n\n setupInvokeListeners(document);\n\n Object.assign(globalThis, { CommandEvent });\n}\n","import { isSupported, apply as polyfillInvokers } from 'invokers-polyfill/fn';\nimport { isBrowser } from '../utils/utils';\n\nif (isBrowser() && !isSupported()) polyfillInvokers(); // Ensure invoker commands polyfill is loaded in browser environment only\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","// src/events.ts\nvar ToggleEvent = class extends Event {\n oldState;\n newState;\n constructor(type, { oldState = \"\", newState = \"\", ...init } = {}) {\n super(type, init);\n this.oldState = String(oldState || \"\");\n this.newState = String(newState || \"\");\n }\n};\nvar popoverToggleTaskQueue = /* @__PURE__ */ new WeakMap();\nfunction queuePopoverToggleEventTask(element, oldState, newState) {\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\n// src/popover-helpers.ts\nvar ShadowRoot = globalThis.ShadowRoot || function() {\n};\nvar HTMLDialogElement = globalThis.HTMLDialogElement || function() {\n};\nvar topLayerElements = /* @__PURE__ */ new WeakMap();\nvar autoPopoverList = /* @__PURE__ */ new WeakMap();\nvar hintPopoverList = /* @__PURE__ */ new WeakMap();\nvar visibilityState = /* @__PURE__ */ new WeakMap();\nfunction getPopoverVisibilityState(popover) {\n return visibilityState.get(popover) || \"hidden\";\n}\nvar popoverInvoker = /* @__PURE__ */ new WeakMap();\nfunction lastSetElement(set) {\n return [...set].pop();\n}\nfunction popoverTargetAttributeActivationBehavior(element) {\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}\nfunction checkPopoverValidity(element, expectedToBeShowing) {\n if (element.popover !== \"auto\" && element.popover !== \"manual\" && element.popover !== \"hint\") {\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}\nfunction getStackPosition(popover) {\n if (!popover) return 0;\n const autoPopovers = autoPopoverList.get(document) || /* @__PURE__ */ new Set();\n const hintPopovers = hintPopoverList.get(document) || /* @__PURE__ */ new Set();\n if (hintPopovers.has(popover)) {\n return [...hintPopovers].indexOf(popover) + autoPopovers.size + 1;\n }\n if (autoPopovers.has(popover)) {\n return [...autoPopovers].indexOf(popover) + 1;\n }\n return 0;\n}\nfunction topMostClickedPopover(target) {\n const clickedPopover = nearestInclusiveOpenPopover(target);\n const invokerPopover = nearestInclusiveTargetPopoverForInvoker(target);\n if (getStackPosition(clickedPopover) > getStackPosition(invokerPopover)) {\n return clickedPopover;\n }\n return invokerPopover;\n}\nfunction topmostAutoOrHintPopover(document2) {\n let topmostPopover;\n const hintPopovers = hintPopoverList.get(document2) || /* @__PURE__ */ new Set();\n const autoPopovers = autoPopoverList.get(document2) || /* @__PURE__ */ new Set();\n const usedStack = hintPopovers.size > 0 ? hintPopovers : autoPopovers.size > 0 ? autoPopovers : null;\n if (usedStack) {\n topmostPopover = lastSetElement(usedStack);\n if (!topmostPopover.isConnected) {\n usedStack.delete(topmostPopover);\n return topmostAutoOrHintPopover(document2);\n }\n return topmostPopover;\n }\n return null;\n}\nfunction topMostPopoverInList(list) {\n for (const popover of list || []) {\n if (!popover.isConnected) {\n list.delete(popover);\n } else {\n return popover;\n }\n }\n return null;\n}\nfunction getRootNode(node) {\n if (typeof node.getRootNode === \"function\") {\n return node.getRootNode();\n }\n if (node.parentNode) return getRootNode(node.parentNode);\n return node;\n}\nfunction nearestInclusiveOpenPopover(node) {\n while (node) {\n if (node instanceof HTMLElement && node.popover === \"auto\" && visibilityState.get(node) === \"showing\") {\n return node;\n }\n node = node instanceof Element && node.assignedSlot || node.parentElement || getRootNode(node);\n if (node instanceof ShadowRoot) node = node.host;\n if (node instanceof Document) return;\n }\n}\nfunction nearestInclusiveTargetPopoverForInvoker(node) {\n while (node) {\n const nodePopover = node.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}\nfunction topMostPopoverAncestor(newPopover, list) {\n const popoverPositions = /* @__PURE__ */ new Map();\n let i = 0;\n for (const popover of list || []) {\n popoverPositions.set(popover, i);\n i += 1;\n }\n popoverPositions.set(newPopover, i);\n i += 1;\n let topMostPopoverAncestor2 = null;\n function checkAncestor(candidate) {\n if (!candidate) return;\n let okNesting = false;\n let candidateAncestor = null;\n let candidatePosition = null;\n while (!okNesting) {\n candidateAncestor = nearestInclusiveOpenPopover(candidate) || null;\n if (candidateAncestor === null) return;\n if (!popoverPositions.has(candidateAncestor)) return;\n if (newPopover.popover === \"hint\" || candidateAncestor.popover === \"auto\") {\n okNesting = true;\n }\n if (!okNesting) {\n candidate = candidateAncestor.parentElement;\n }\n }\n candidatePosition = popoverPositions.get(candidateAncestor);\n if (topMostPopoverAncestor2 === null || popoverPositions.get(topMostPopoverAncestor2) < candidatePosition) {\n topMostPopoverAncestor2 = candidateAncestor;\n }\n }\n checkAncestor(newPopover.parentElement || getRootNode(newPopover));\n return topMostPopoverAncestor2;\n}\nfunction isFocusable(focusTarget) {\n if (focusTarget.hidden || focusTarget instanceof ShadowRoot) return false;\n if (focusTarget instanceof HTMLButtonElement || focusTarget instanceof HTMLInputElement || focusTarget instanceof HTMLSelectElement || focusTarget instanceof HTMLTextAreaElement || focusTarget instanceof HTMLOptGroupElement || focusTarget instanceof HTMLOptionElement || focusTarget instanceof HTMLFieldSetElement) {\n if (focusTarget.disabled) return false;\n }\n if (focusTarget instanceof HTMLInputElement && focusTarget.type === \"hidden\") {\n return false;\n }\n if (focusTarget instanceof HTMLAnchorElement && focusTarget.href === \"\") {\n return false;\n }\n return typeof focusTarget.tabIndex === \"number\" && focusTarget.tabIndex !== -1;\n}\nfunction focusDelegate(focusTarget) {\n if (focusTarget.shadowRoot && focusTarget.shadowRoot.delegatesFocus !== true) {\n return null;\n }\n let whereToLook = 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 = walker.currentNode;\n while (descendant) {\n if (isFocusable(descendant)) {\n return descendant;\n }\n descendant = walker.nextNode();\n }\n}\nfunction popoverFocusingSteps(subject) {\n var _a;\n (_a = focusDelegate(subject)) == null ? void 0 : _a.focus();\n}\nvar previouslyFocusedElements = /* @__PURE__ */ new WeakMap();\nfunction showPopover(element) {\n if (!checkPopoverValidity(element, false)) {\n return;\n }\n const document2 = element.ownerDocument;\n if (!element.dispatchEvent(\n new ToggleEvent(\"beforetoggle\", {\n cancelable: true,\n oldState: \"closed\",\n newState: \"open\"\n })\n )) {\n return;\n }\n if (!checkPopoverValidity(element, false)) {\n return;\n }\n let shouldRestoreFocus = false;\n const originalType = element.popover;\n let stackToAppendTo = null;\n const autoAncestor = topMostPopoverAncestor(\n element,\n autoPopoverList.get(document2) || /* @__PURE__ */ new Set()\n );\n const hintAncestor = topMostPopoverAncestor(\n element,\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set()\n );\n if (originalType === \"auto\") {\n closeAllOpenPopoversInList(\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n shouldRestoreFocus,\n true\n );\n const ancestor = autoAncestor || document2;\n hideAllPopoversUntil(ancestor, shouldRestoreFocus, true);\n stackToAppendTo = \"auto\";\n }\n if (originalType === \"hint\") {\n if (hintAncestor) {\n hideAllPopoversUntil(hintAncestor, shouldRestoreFocus, true);\n stackToAppendTo = \"hint\";\n } else {\n closeAllOpenPopoversInList(\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n shouldRestoreFocus,\n true\n );\n if (autoAncestor) {\n hideAllPopoversUntil(autoAncestor, shouldRestoreFocus, true);\n stackToAppendTo = \"auto\";\n } else {\n stackToAppendTo = \"hint\";\n }\n }\n }\n if (originalType === \"auto\" || originalType === \"hint\") {\n if (originalType !== element.popover || !checkPopoverValidity(element, false)) {\n return;\n }\n if (!topmostAutoOrHintPopover(document2)) {\n shouldRestoreFocus = true;\n }\n if (stackToAppendTo === \"auto\") {\n if (!autoPopoverList.has(document2)) {\n autoPopoverList.set(document2, /* @__PURE__ */ new Set());\n }\n autoPopoverList.get(document2).add(element);\n } else if (stackToAppendTo === \"hint\") {\n if (!hintPopoverList.has(document2)) {\n hintPopoverList.set(document2, /* @__PURE__ */ new Set());\n }\n hintPopoverList.get(document2).add(element);\n }\n }\n previouslyFocusedElements.delete(element);\n const originallyFocusedElement = document2.activeElement;\n element.classList.add(\":popover-open\");\n visibilityState.set(element, \"showing\");\n if (!topLayerElements.has(document2)) {\n topLayerElements.set(document2, /* @__PURE__ */ new Set());\n }\n topLayerElements.get(document2).add(element);\n setInvokerAriaExpanded(popoverInvoker.get(element), true);\n popoverFocusingSteps(element);\n if (shouldRestoreFocus && originallyFocusedElement && element.popover === \"auto\") {\n previouslyFocusedElements.set(element, originallyFocusedElement);\n }\n queuePopoverToggleEventTask(element, \"closed\", \"open\");\n}\nfunction hidePopover(element, focusPreviousElement = false, fireEvents = false) {\n var _a, _b;\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n const document2 = element.ownerDocument;\n if ([\"auto\", \"hint\"].includes(element.popover)) {\n hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n }\n const autoList = autoPopoverList.get(document2) || /* @__PURE__ */ new Set();\n const autoPopoverListContainsElement = autoList.has(element) && lastSetElement(autoList) === element;\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 (autoPopoverListContainsElement && lastSetElement(autoList) !== element) {\n hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n }\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n }\n (_a = topLayerElements.get(document2)) == null ? void 0 : _a.delete(element);\n autoList.delete(element);\n (_b = hintPopoverList.get(document2)) == null ? void 0 : _b.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}\nfunction closeAllOpenPopovers(document2, focusPreviousElement = false, fireEvents = false) {\n let popover = topmostAutoOrHintPopover(document2);\n while (popover) {\n hidePopover(popover, focusPreviousElement, fireEvents);\n popover = topmostAutoOrHintPopover(document2);\n }\n}\nfunction closeAllOpenPopoversInList(list, focusPreviousElement = false, fireEvents = false) {\n let popover = topMostPopoverInList(list);\n while (popover) {\n hidePopover(popover, focusPreviousElement, fireEvents);\n popover = topMostPopoverInList(list);\n }\n}\nfunction hidePopoverStackUntil(endpoint, set, focusPreviousElement, fireEvents) {\n let repeatingHide = false;\n let hasRunOnce = false;\n while (repeatingHide || !hasRunOnce) {\n hasRunOnce = true;\n let lastToHide = null;\n let foundEndpoint = false;\n for (const popover of set) {\n if (popover === endpoint) {\n foundEndpoint = true;\n } else if (foundEndpoint) {\n lastToHide = popover;\n break;\n }\n }\n if (!lastToHide) return;\n while (getPopoverVisibilityState(lastToHide) === \"showing\" && set.size) {\n hidePopover(lastSetElement(set), focusPreviousElement, fireEvents);\n }\n if (set.has(endpoint) && lastSetElement(set) !== endpoint) {\n repeatingHide = true;\n }\n if (repeatingHide) {\n fireEvents = false;\n }\n }\n}\nfunction hideAllPopoversUntil(endpoint, focusPreviousElement, fireEvents) {\n var _a, _b;\n const document2 = endpoint.ownerDocument || endpoint;\n if (endpoint instanceof Document) {\n return closeAllOpenPopovers(document2, focusPreviousElement, fireEvents);\n }\n if ((_a = hintPopoverList.get(document2)) == null ? void 0 : _a.has(endpoint)) {\n hidePopoverStackUntil(\n endpoint,\n hintPopoverList.get(document2),\n focusPreviousElement,\n fireEvents\n );\n return;\n }\n closeAllOpenPopoversInList(\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n focusPreviousElement,\n fireEvents\n );\n if (!((_b = autoPopoverList.get(document2)) == null ? void 0 : _b.has(endpoint))) {\n return;\n }\n hidePopoverStackUntil(\n endpoint,\n autoPopoverList.get(document2),\n focusPreviousElement,\n fireEvents\n );\n}\nvar popoverPointerDownTargets = /* @__PURE__ */ new WeakMap();\nfunction lightDismissOpenPopovers(event) {\n if (!event.isTrusted) return;\n const target = event.composedPath()[0];\n if (!target) return;\n const document2 = target.ownerDocument;\n const topMostPopover = topmostAutoOrHintPopover(document2);\n if (!topMostPopover) return;\n const ancestor = topMostClickedPopover(target);\n if (ancestor && event.type === \"pointerdown\") {\n popoverPointerDownTargets.set(document2, ancestor);\n } else if (event.type === \"pointerup\") {\n const sameTarget = popoverPointerDownTargets.get(document2) === ancestor;\n popoverPointerDownTargets.delete(document2);\n if (sameTarget) {\n hideAllPopoversUntil(ancestor || document2, false, true);\n }\n }\n}\nvar initialAriaExpandedValue = /* @__PURE__ */ new WeakMap();\nfunction setInvokerAriaExpanded(el, force = false) {\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\n// src/popover.ts\nvar ShadowRoot2 = globalThis.ShadowRoot || function() {\n};\nfunction isSupported() {\n return typeof HTMLElement !== \"undefined\" && typeof HTMLElement.prototype === \"object\" && \"popover\" in HTMLElement.prototype;\n}\nfunction isHintSupported() {\n const el = document.createElement(\"div\");\n el.setAttribute(\"popover\", \"hint\");\n return el.popover === \"hint\";\n}\nfunction isPolyfilled() {\n var _a;\n return Boolean(\n ((_a = document.body) == null ? void 0 : _a.showPopover) && !/native code/i.test(document.body.showPopover.toString())\n );\n}\nfunction patchSelectorFn(object, name, mapper) {\n const original = object[name];\n Object.defineProperty(object, name, {\n value(selector) {\n return original.call(this, mapper(selector));\n }\n });\n}\nvar nonEscapedPopoverSelector = /(^|[^\\\\]):popover-open\\b/g;\nfunction hasLayerSupport() {\n return typeof globalThis.CSSLayerBlockRule === \"function\";\n}\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}\nvar popoverStyleSheet = null;\nfunction injectStyles(root) {\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}\nfunction apply() {\n if (typeof window === \"undefined\") return;\n window.ToggleEvent = window.ToggleEvent || ToggleEvent;\n function rewriteSelector(selector) {\n if (selector == null ? void 0 : selector.includes(\":popover-open\")) {\n selector = selector.replace(\n nonEscapedPopoverSelector,\n \"$1.\\\\:popover-open\"\n );\n }\n return selector;\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 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 if (value == \"hint\") return \"hint\";\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 showPopover: {\n enumerable: true,\n configurable: true,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n value(options = {}) {\n showPopover(this);\n }\n },\n hidePopover: {\n enumerable: true,\n configurable: true,\n value() {\n hidePopover(this, true, true);\n }\n },\n togglePopover: {\n enumerable: true,\n configurable: true,\n value(options = {}) {\n if (typeof options === \"boolean\") {\n options = { force: options };\n }\n if (visibilityState.get(this) === \"showing\" && options.force === void 0 || options.force === false) {\n hidePopover(this, true, true);\n } else if (options.force === void 0 || options.force === true) {\n showPopover(this);\n }\n return visibilityState.get(this) === \"showing\";\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) {\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 const popoverTargetAssociatedElements = /* @__PURE__ */ new WeakMap();\n function applyPopoverInvokerElementMixin(ElementClass) {\n Object.defineProperties(ElementClass.prototype, {\n popoverTargetElement: {\n enumerable: true,\n configurable: true,\n set(targetElement) {\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 (this.localName === \"input\" && this.type !== \"reset\" && this.type !== \"image\" && this.type !== \"button\") {\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 ((root instanceof Document || root instanceof ShadowRoot2) && idref) {\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 = (this.getAttribute(\"popovertargetaction\") || \"\").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 applyPopoverInvokerElementMixin(HTMLButtonElement);\n applyPopoverInvokerElementMixin(HTMLInputElement);\n const handleInvokerActivation = (event) => {\n if (event.defaultPrevented) {\n return;\n }\n const composedPath = event.composedPath();\n const target = composedPath[0];\n if (!(target instanceof Element) || (target == null ? void 0 : target.shadowRoot)) {\n return;\n }\n const root = getRootNode(target);\n if (!(root instanceof ShadowRoot2 || root instanceof Document)) {\n return;\n }\n const invoker = composedPath.find(\n (el) => {\n var _a;\n return (_a = el.matches) == null ? void 0 : _a.call(el, \"[popovertargetaction],[popovertarget]\");\n }\n );\n if (invoker) {\n popoverTargetAttributeActivationBehavior(invoker);\n event.preventDefault();\n return;\n }\n };\n const onKeydown = (event) => {\n const key = event.key;\n const target = event.target;\n if (!event.defaultPrevented && target && (key === \"Escape\" || key === \"Esc\")) {\n hideAllPopoversUntil(target.ownerDocument, true, true);\n }\n };\n const addEventListeners = (root) => {\n root.addEventListener(\"click\", handleInvokerActivation);\n root.addEventListener(\"keydown\", onKeydown);\n root.addEventListener(\"pointerdown\", lightDismissOpenPopovers);\n root.addEventListener(\"pointerup\", lightDismissOpenPopovers);\n };\n addEventListeners(document);\n injectStyles(document);\n}\nexport {\n apply,\n injectStyles,\n isHintSupported,\n isPolyfilled,\n isSupported\n};\n//# sourceMappingURL=popover-fn.js.map\n","import type { ComputePositionConfig, MiddlewareState } from '@floating-ui/dom';\nimport {\n autoUpdate,\n computePosition,\n flip,\n limitShift,\n offset,\n shift,\n size,\n} from '@floating-ui/dom';\nimport {\n isSupported,\n apply as polyfillPopover,\n} from '@oddbird/popover-polyfill/fn';\nimport {\n attr,\n getCSSProp,\n isBrowser,\n on,\n onHotReload,\n QUICK_EVENT,\n} from '../utils/utils';\n\nif (isBrowser() && !isSupported()) polyfillPopover(); // Ensure popover polyfill is loaded in browser environment only\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'ds-toggle-source': CustomEvent<Element>;\n }\n}\n\nconst ATTR_PLACE = 'data-placement';\nconst ATTR_AUTO = 'data-autoplacement';\nconst POPOVERS = new Map<HTMLElement, () => void>();\n\n// Sometimes use \"ds-toggle\" event while waiting for better support of\n// event.source (https://developer.mozilla.org/en-US/docs/Web/API/ToggleEvent/source)\nfunction handleToggle(\n event: Partial<ToggleEvent> & {\n detail?: HTMLElement;\n source?: HTMLElement;\n },\n) {\n let { newState, oldState, target: el, source = event.detail } = event;\n const isPopover = el instanceof HTMLElement && attr(el, 'popover') !== null;\n const float = isPopover && getCSSProp(el, '--_ds-floating');\n\n if (!float) return;\n if (newState === 'closed') return POPOVERS.get(el)?.(); // Cleanup on close\n if (!source) {\n const root = el.getRootNode() as Document; // Support shadow DOM\n const css = `[popovertarget=\"${el.id}\"],[commandfor=\"${el.id}\"]`;\n source = (el.id && root?.querySelector?.<HTMLElement>(css)) || undefined; // Polyfill ToggleEvent .source for older browsers\n }\n if (!source || source === el || (oldState && oldState === newState)) return; // No need to update\n\n // Use scroll-margin-bottom to measure computed arrow-size property as this does\n // not affect layout or position, makes the browser calculate the pixel value instead\n // of returning the calc() (as it would if reading the --_ds-floating-arrow-size directly)\n // and makes it possible to read the value even if ::before is not used to draw the arrow.\n el.style.scrollMarginBottom = `var(--_ds-floating-arrow-size)`;\n\n const padding = 10;\n const overscroll = getCSSProp(el, '--_ds-floating-overscroll');\n const placement = attr(el, ATTR_PLACE) || attr(source, ATTR_PLACE) || float;\n const auto = attr(el, ATTR_AUTO) || attr(source, ATTR_AUTO);\n const arrowSize = parseFloat(getCSSProp(el, 'scroll-margin-bottom')) || 0;\n const shiftProp = placement.match(/left|right/gi) ? 'Height' : 'Width';\n const shiftLimit = source[`offset${shiftProp}`] / 2 + arrowSize;\n\n if (placement === 'none') return; // No need to position\n\n const options = {\n strategy: 'absolute',\n placement,\n middleware: [\n offset(arrowSize),\n shift({\n padding,\n limiter: limitShift({ offset: { mainAxis: shiftLimit } }), // Prevent from shifing away from source\n }),\n arrowPseudo(),\n ...(auto !== 'false' ? [flip({ padding, crossAxis: false })] : []),\n ...(overscroll\n ? [\n size({\n apply({ availableHeight }) {\n if (overscroll === 'fit')\n el.style.width = `${source.offsetWidth}px`; // Use offsetWidth to include padding, matching the width of the source element\n el.style.maxHeight = `${Math.max(50, availableHeight - padding * 2)}px`;\n },\n }),\n ]\n : []),\n ],\n } as ComputePositionConfig;\n const unfloat = autoUpdate(source, el, async () => {\n if (!source?.isConnected) return POPOVERS.get(el)?.(); // Cleanup if source element is removed\n const { x, y } = await computePosition(source, el, options);\n el.style.translate = `${x}px ${y}px`;\n });\n POPOVERS.set(el, () => POPOVERS.delete(el) && unfloat());\n}\n\n// Prevent closing when mouse interacts with scrollbar\nlet IS_SCROLL: boolean | undefined;\nconst handleScrollbar = ({ type }: Event) => {\n if (type === 'mousedown') IS_SCROLL = false;\n if (type === 'scroll' && IS_SCROLL === false) IS_SCROLL = true;\n if (type === 'mouseup' && IS_SCROLL)\n for (const [popover] of POPOVERS) popover.showPopover(); // Immediately show again to prevent flicker\n};\n\nonHotReload('popover', () => [\n on(document, 'mousedown scroll mouseup', handleScrollbar, true),\n on(document, 'toggle ds-toggle-source', handleToggle, QUICK_EVENT), // Use capture since the toggle event does not bubble\n]);\n\nconst arrowPseudo = () => ({\n name: 'arrowPseudo',\n fn(data: MiddlewareState) {\n const target = data.elements.floating;\n const source = data.rects.reference;\n const x = `${Math.round(source.width / 2 + source.x - data.x)}px`;\n const y = `${Math.round(source.height / 2 + source.y - data.y)}px`;\n\n target.style.setProperty('--_ds-floating-arrow-x', x);\n target.style.setProperty('--_ds-floating-arrow-y', y);\n attr(target, 'data-floating', data.placement);\n return data;\n },\n});\n","import { attr, on, onHotReload } from '../utils/utils';\n\nconst isReadOnly = (el: unknown): el is HTMLInputElement | HTMLSelectElement =>\n (el instanceof HTMLSelectElement || el instanceof HTMLInputElement) &&\n (el.hasAttribute('readonly') || attr(el, 'aria-readonly') === 'true');\n\n// Allow tabbing when readonly, and only fix readonly input/select elements (since type select and non-text-inputs do not support readonly)\n// If radio buttons, move focus without changing checked state\nconst handleKeyDown = (e: Event & Partial<KeyboardEvent>) => {\n if (e.key !== 'Tab' && isReadOnly(e.target)) {\n const isArrow = e.key?.startsWith('Arrow'); // Always control arrow keys\n const isModifier = e.altKey || e.ctrlKey || e.metaKey; // Allow modifier keys so native functions like CMD + D to bookmark etc. still works\n\n if (isArrow || !isModifier) e.preventDefault(); // Prevent changing <select> value with keyboard, but allow non-arrow modifier keys\n if (isArrow && attr(e.target, 'type') === 'radio') {\n const all = document.querySelectorAll(`input[name=\"${e.target.name}\"]`);\n const move = e.key?.match(/Arrow(Right|Down)/) ? 1 : -1;\n const next = all.length + [...all].indexOf(e.target) + move;\n (all[next % all.length] as HTMLElement)?.focus();\n }\n }\n};\n\nconst handleClick = (e: Event) => {\n const input = (e.target as Element)?.closest?.('label')?.control || e.target;\n if (isReadOnly(input)) {\n e.preventDefault();\n input.focus();\n }\n};\n\nconst handleMouseDown = (e: Event) => {\n if (e.target instanceof HTMLSelectElement && isReadOnly(e.target))\n e.preventDefault();\n};\n\nonHotReload('readonly', () => [\n on(document, 'keydown', handleKeyDown),\n on(document, 'click', handleClick), // click needed for <label> and <input>\n on(document, 'mousedown', handleMouseDown), // mousedown needed for <select>\n]);\n","import { attr, attrOrCSS, on, onHotReload, onMutation } from '../utils/utils';\n\nconst ARIA_LABELLEDBY = 'aria-labelledby';\nconst ARIA_LABEL = 'aria-label';\nconst ATTR_TOGGLEGROUP = 'data-toggle-group';\nconst SELECTOR_TOGGLEGROUP = `[${ATTR_TOGGLEGROUP}]`;\n\nconst handleAriaAttributes = () => {\n for (const group of document.querySelectorAll(SELECTOR_TOGGLEGROUP))\n attr(group, 'aria-label', attrOrCSS(group, ATTR_TOGGLEGROUP));\n};\n\nconst handleKeydown = (event: Partial<KeyboardEvent>) => {\n const { key, target: el } = event;\n const group =\n el instanceof HTMLInputElement && el.closest(SELECTOR_TOGGLEGROUP);\n\n if (!group) return;\n if (!attr(group, ARIA_LABEL) && !attr(group, ARIA_LABELLEDBY))\n attr(group, ARIA_LABEL, attrOrCSS(group, ATTR_TOGGLEGROUP));\n if (key === 'Enter') el.click(); // Forward Enter, but no need to listen for space key, as this is handled by the browser\n if (key?.startsWith('Arrow')) {\n event.preventDefault?.();\n const inputs = [...group.getElementsByTagName('input')];\n const index = inputs.indexOf(el);\n const move = key.match(/Arrow(Right|Down)/) ? 1 : -1;\n let nextIndex = index;\n\n for (let i = 0; i < inputs.length; i++) {\n nextIndex = (inputs.length + nextIndex + move) % inputs.length;\n if (!inputs[nextIndex]?.disabled) {\n inputs[nextIndex]?.focus();\n break;\n }\n }\n }\n};\n\nonHotReload('toggle-group', () => [\n on(document, 'keydown', handleKeydown),\n onMutation(document, handleAriaAttributes, {\n attributeFilter: [ATTR_TOGGLEGROUP],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","import '../popover/popover'; // Ensure popover is imported when using individual imports, since tooltip relies on it\nimport {\n announce,\n attr,\n attrOrCSS,\n isBrowser,\n on,\n onHotReload,\n onMutation,\n QUICK_EVENT,\n tag,\n warn,\n} from '../utils/utils';\n\nlet TIP: HTMLElement | undefined;\nlet SOURCE: Element | undefined;\nlet IS_HOVERING = false;\nlet HOVER_TIMER: number | ReturnType<typeof setTimeout> = 0;\nlet SKIP_TIMER: number | ReturnType<typeof setTimeout> = 0;\nconst IS_IOS = isBrowser() && /iPad|iPhone|iPod/.test(navigator.userAgent); // Needed to omit DELAY_HOVER since iOS triggers mouseover before click\nconst ATTR_TOOLTIP = 'data-tooltip';\nconst ATTR_COLOR = 'data-color';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_DESC = 'aria-description';\nconst SELECTOR_COLOR = `[${ATTR_COLOR}]`;\nconst SELECTOR_TOOLTIP = `[${ATTR_TOOLTIP}]`;\nconst ATTR_SCHEME = 'data-color-scheme';\nconst SELECTOR_SCHEME = `[${ATTR_SCHEME}]`;\nconst SELECTOR_INTERACTIVE = 'a,button,input,label,select,textarea,[tabindex]';\nconst DELAY_HOVER = 300;\nconst DELAY_SKIP = 300;\n\n/**\n * setTooltipElement\n * @description Allows setting a custom tooltip element. It does not need to, and should not, be injected to document.body, as we inject on hover to ensure React hydration works as expected.\n * @param el The HTMLElement to use as tooltip\n */\nexport const setTooltipElement = (el?: HTMLElement | null) => {\n if (el && !(el instanceof HTMLElement))\n warn('setTooltipElement expects an HTMLElement, got: ', el);\n clearTimeout(SKIP_TIMER); // Reset when changing source\n clearTimeout(HOVER_TIMER);\n SOURCE = undefined;\n IS_HOVERING = false;\n TIP = el || undefined;\n};\n\nconst handleAriaAttributes = () => {\n for (const el of document.querySelectorAll(SELECTOR_TOOLTIP)) {\n const text = attrOrCSS(el, ATTR_TOOLTIP);\n\n if (!text) return; // Early return if no tooltip text\n if (text !== (el.getAttribute(ARIA_LABEL) || el.getAttribute(ARIA_DESC))) {\n const hasText = attr(el, 'role') !== 'img' && el.textContent?.trim(); // If role=\"img\", ignore text\n attr(el, ATTR_TOOLTIP, text); // Set data-tooltip attribute to speed up future mutations\n attr(el, ARIA_LABEL, hasText ? null : text); // Set aria-label if element does not have text\n attr(el, ARIA_DESC, hasText ? text : null); // Set aria-description if element has text\n if (!el.matches(SELECTOR_INTERACTIVE))\n warn('Missing tabindex=\"0\" attribute on: ', el);\n }\n\n // If an existing tooltip has changed programmatically, update tooltip text and announce change\n const isCurrent = el === SOURCE && TIP?.offsetHeight && TIP?.offsetWidth; // Using offsetHeight+Width to check visibility as :popover-open is not well supported by JSDOM\n const isChanged = isCurrent && text && TIP?.textContent !== text; // Only update if mutation is on source element and tooltip is open to avoid unnecessary updates\n if (isCurrent && isChanged) {\n if (TIP) TIP.textContent = text;\n if (document.activeElement === el) announce(text); // Only announce if focus is on the button\n }\n }\n};\n\nconst handleInterest = ({ type, target }: Event) => {\n clearTimeout(HOVER_TIMER);\n\n if (target === TIP) return; // Allow tooltip to be hovered, following https://www.w3.org/TR/WCAG21/#content-on-hover-or-focus\n if (type === 'mouseover' && !IS_HOVERING && !IS_IOS) {\n HOVER_TIMER = setTimeout(handleInterest, DELAY_HOVER, { target }); // Delay mouse showing tooltip if not already shown\n return;\n }\n\n const source = (target as Element)?.closest?.(`[${ATTR_TOOLTIP}]`);\n if (source === SOURCE) return; // No need to update\n if (!source) return hideTooltip(); // If no new anchor, cleanup previous autoUpdate\n if (!TIP) TIP = tag('div', { class: 'ds-tooltip' });\n if (!TIP.isConnected) document.body.appendChild(TIP); // Ensure connected\n\n const color = source.closest(SELECTOR_COLOR); // Match source color of source element\n const scheme = source.closest(SELECTOR_SCHEME); // Match source color-scheme of source element\n const isReset = color !== scheme && color?.contains(scheme as Node); // If data-scheme is closer to target, it will reset data-color\n\n clearTimeout(SKIP_TIMER);\n attr(TIP, 'popover', 'manual'); // Ensure popover behavior\n attr(TIP, ATTR_SCHEME, scheme?.getAttribute(ATTR_SCHEME) || null); // Fallback to null to reset if not scheme found\n attr(TIP, ATTR_COLOR, (isReset && color?.getAttribute(ATTR_COLOR)) || null); // Fallback to null to reset if not scheme found\n TIP.textContent = attr(source, ATTR_TOOLTIP);\n TIP.showPopover();\n TIP.dispatchEvent(new CustomEvent('ds-toggle-source', { detail: source })); // Since showPopover({ source }) is not supported in all browsers yet\n IS_HOVERING = true;\n SOURCE = source;\n};\n\nconst hideTooltip = () => TIP?.isConnected && TIP.popover && TIP.hidePopover(); // Only hide if connected and activated\n\nconst handleClose = (event?: Partial<ToggleEvent & KeyboardEvent>) => {\n if (event?.type === 'keydown')\n return event?.key === 'Escape' && hideTooltip();\n if (!event) IS_HOVERING = false;\n else if (event.target === TIP && event.newState === 'closed') {\n SOURCE = undefined;\n SKIP_TIMER = setTimeout(handleClose, DELAY_SKIP);\n }\n};\n\nonHotReload('tooltip', () => [\n on(document, 'blur focus mouseover', handleInterest, QUICK_EVENT),\n on(document, 'toggle keydown', handleClose, QUICK_EVENT),\n onMutation(document, handleAriaAttributes, {\n attributeFilter: [ATTR_TOOLTIP],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar IS_FIREFOX = /firefox/i.test(AGENT);\nvar IS_IOS = /iPad|iPhone|iPod/.test(AGENT);\nvar _a;\nvar IS_MAC = IS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar SUPPORTS_CONSTRUCTED_CSS = IS_BROWSER && window.CSSStyleSheet && document.adoptedStyleSheets;\nvar EVENT_ONCE = { once: true, capture: true, passive: true };\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar FOCUS_OUTLINE = `outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color`;\nvar SAFE_MULTISELECTABLE = `${IS_ANDROID ? \"data\" : \"aria\"}-multiselectable`;\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar on = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\nvar off = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.removeEventListener(type, ...options);\n};\nvar attachStyle = (el, css) => {\n const root = el.shadowRoot || el.attachShadow({ mode: \"open\" });\n if (!root.querySelector(\"slot\")) root.append(tag(\"slot\"));\n if (!root.querySelector(\"style\")) {\n if (!SUPPORTS_CONSTRUCTED_CSS) root.append(tag(\"style\", null, css));\n else {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n }\n }\n return root;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? void 0 : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar getFocusedElement = (node) => getRoot(node).activeElement;\nvar useId = (el) => {\n if (!el || !IS_BROWSER) return null;\n if (!window.uElementsId) window.uElementsId = {};\n if (!el.id) {\n const node = el.nodeName.toLowerCase();\n if (!window.uElementsId[node]) window.uElementsId[node] = 1;\n el.id = `:${node}${window.uElementsId[node]++}`;\n }\n return el.id;\n};\nvar tag = (tagName, attrs, content) => {\n const el = document.createElement(tagName);\n if (content) el.textContent = content;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !isBrowser() || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar setValue = (input, data, type = \"\") => {\n var _a2, _b;\n const event = { bubbles: true, composed: true, data, inputType: type };\n const proto = HTMLInputElement.prototype;\n input.dispatchEvent(new InputEvent(\"beforeinput\", event));\n (_b = (_a2 = Object.getOwnPropertyDescriptor(proto, \"value\")) == null ? void 0 : _a2.set) == null ? void 0 : _b.call(input, data);\n input.dispatchEvent(new InputEvent(\"input\", event));\n input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\nvar IS_PRESS = false;\nvar isPointerDown = (e) => {\n if ((e == null ? void 0 : e.type) === \"pointerup\") IS_PRESS = false;\n if ((e == null ? void 0 : e.type) === \"pointerdown\") {\n IS_PRESS = true;\n on(document, \"pointerup\", isPointerDown, EVENT_ONCE);\n }\n return IS_PRESS;\n};\nvar declarativeShadowRoot = (style, slot = \"<slot></slot>\") => `<template shadowrootmode=\"open\">${slot}<style>${style}</style></template>`;\nvar preventSubmit = (input) => {\n const form = attr(input, \"form\");\n attr(input, \"form\", \"#\");\n setTimeout(restoreSubmit, 0, input, form);\n};\nvar restoreSubmit = (input, form) => attr(input, \"form\", form);\nvar LIVE;\nvar LIVE_SR_FIX = 0;\nvar LIVE_CLEAR = 0;\nvar speak = (text) => {\n clearTimeout(LIVE_CLEAR);\n if (!LIVE) {\n LIVE = tag(\"div\", { \"aria-live\": \"assertive\" });\n LIVE.style.overflow = \"hidden\";\n LIVE.style.position = \"fixed\";\n LIVE.style.whiteSpace = \"nowrap\";\n LIVE.style.width = \"1px\";\n }\n if (!LIVE.isConnected) document.body.append(LIVE);\n if (text === \"\") LIVE.textContent = \"\";\n if (text) {\n LIVE.textContent = `${text}${LIVE_SR_FIX++ % 2 ? \"\\xA0\" : \"\"}`;\n LIVE_CLEAR = setTimeout(speak, !IS_MAC && IS_FIREFOX ? 2e3 : 300, \"\");\n }\n};\n\n// u-option.ts\nvar DISABLED = \"disabled\";\nvar SELECTED = \"selected\";\nvar UHTMLOptionElement = class extends UHTMLElement {\n constructor() {\n super(...arguments);\n this._skipAttrChange = false;\n }\n // Using ES2015 syntax for backwards compatibility\n static get observedAttributes() {\n return [\"id\", DISABLED, SELECTED];\n }\n connectedCallback() {\n if (IS_ANDROID) this.tabIndex = -1;\n if (!this.hasAttribute(\"role\")) attr(this, \"role\", \"option\");\n attr(this, \"aria-disabled\", `${this.disabled}`);\n attr(this, \"aria-selected\", `${this.selected}`);\n useId(this);\n }\n attributeChangedCallback(name) {\n if (this._skipAttrChange) return;\n this._skipAttrChange = true;\n if (name === \"id\") useId(this);\n else attr(this, `aria-${name}`, `${this[name]}`);\n this._skipAttrChange = false;\n }\n /** Sets or retrieves whether the option in the list box is the default item. */\n get defaultSelected() {\n return this[SELECTED];\n }\n set defaultSelected(value) {\n this[SELECTED] = value;\n }\n get disabled() {\n return attr(this, DISABLED) !== null;\n }\n set disabled(value) {\n attr(this, DISABLED, value ? \"\" : null);\n }\n /** Retrieves a reference to the form that the object is embedded in. */\n get form() {\n return this.closest(\"form\");\n }\n /** Sets or retrieves the ordinal position of an option in a list box. */\n get index() {\n var _a2;\n return [\n ...((_a2 = this.parentElement) == null ? void 0 : _a2.options) || [this]\n ].indexOf(this);\n }\n /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */\n get label() {\n var _a2;\n return (_a2 = attr(this, \"label\")) != null ? _a2 : this.text;\n }\n set label(value) {\n attr(this, \"label\", value);\n }\n get selected() {\n return attr(this, SELECTED) !== null;\n }\n set selected(value) {\n attr(this, SELECTED, value ? \"\" : null);\n }\n /** Sets or retrieves the text string specified by the option tag. */\n get text() {\n var _a2;\n return ((_a2 = this.textContent) == null ? void 0 : _a2.trim()) || \"\";\n }\n set text(text) {\n this.textContent = text;\n }\n /** Sets or retrieves the value which is returned to the server when the form control is submitted. */\n get value() {\n var _a2;\n return (_a2 = attr(this, \"value\")) != null ? _a2 : this.text;\n }\n set value(value) {\n attr(this, \"value\", value);\n }\n};\ncustomElements.define(\"u-option\", UHTMLOptionElement);\n\n// u-datalist.ts\nvar DATA_ACTIVE = \"data-activedescendant\";\nvar ARIA_HIDDEN = \"aria-hidden\";\nvar UHTMLDataListStyle = `${DISPLAY_BLOCK}\n::slotted([role=\"option\"]) { display: block; cursor: pointer }\n::slotted([role=\"option\"][${DATA_ACTIVE}]) { ${FOCUS_OUTLINE} }\n::slotted([role=\"option\"]:is([${ARIA_HIDDEN}=\"true\"], [disabled], [hidden])) { display: none !important }`;\nvar UHTMLDataListShadowRoot = declarativeShadowRoot(UHTMLDataListStyle);\nvar LIVE_TIMER;\nvar EVENTS_IDLE_CAPTURE = \"focus click keydown\";\nvar EVENTS_ACTIVE_BUBBLE = \"focusout input pointerdown\";\nvar TEXTS = {\n of: \"of\",\n plural: \"%d hits\",\n singular: \"%d hit\"\n};\nvar UHTMLDataListElement = class extends UHTMLElement {\n constructor() {\n super();\n // Used to consistently remember root for event delegation\n this._texts = __spreadValues({}, TEXTS);\n attachStyle(this, UHTMLDataListStyle);\n }\n static get observedAttributes() {\n return [\"id\", ...Object.keys(TEXTS).map((key) => `data-sr-${key}`)];\n }\n connectedCallback() {\n this._root = getRoot(this);\n attr(this, \"hidden\", \"\");\n attr(this, \"role\", \"listbox\");\n attr(this, \"tabindex\", \"-1\");\n on(this._root, EVENTS_IDLE_CAPTURE, this, true);\n this._umutate = onMutation(this, onMutations, {\n attributeFilter: [\"disabled\", \"hidden\", \"label\", \"value\"],\n // Listening to hidden attribute to update on open\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true\n });\n }\n disconnectedCallback() {\n var _a2;\n if (this._root) off(this._root, EVENTS_IDLE_CAPTURE, this, true);\n if (this._root) off(this._root, EVENTS_ACTIVE_BUBBLE, this);\n setInputAttributes(this, null);\n (_a2 = this._umutate) == null ? void 0 : _a2.call(this);\n this._umutate = this._root = this._input = void 0;\n }\n attributeChangedCallback(prop, _prev, next) {\n const text = prop == null ? void 0 : prop.split(\"data-sr-\")[1];\n if (TEXTS[text]) this._texts[text] = next || TEXTS[text];\n else if (this.id) {\n const selector = `input[list=\"${this.id}\"]`;\n const input = getRoot(this).querySelector(selector);\n if (input) setInputAttributes(this, input);\n }\n }\n handleEvent(event) {\n if (event.defaultPrevented) return;\n if (event.type === \"focus\") onFocus(this, event);\n if (event.type === \"focusout\") onBlur(this, event);\n if (event.type === \"click\") onClick(this, event);\n if (event.type === \"input\") onMutations(this);\n if (event.type === \"keydown\") onKeyDown(this, event);\n if (event.type === \"pointerdown\") onPointerDown(this, event);\n }\n get options() {\n const el = !this._options && this.querySelector('[role=\"option\"],option');\n if (el) this._options = this.getElementsByTagName(el == null ? void 0 : el.nodeName);\n return this._options || this.getElementsByTagName(\"option\");\n }\n};\nvar isDisabled = (el) => el.disabled || el.readOnly;\nvar isInput = (el) => el instanceof HTMLInputElement;\nvar isVisible = (el) => attr(el, ARIA_HIDDEN) !== \"true\" && el.clientHeight;\nvar setExpanded = (self, open) => {\n if (self._input) attr(self._input, \"aria-expanded\", `${open}`);\n if (!self.isConnected || self.hidden !== open) return;\n if (!open) setActive(self);\n if (self.popover) self.togglePopover(open);\n if (open) setTimeout(() => clearTimeout(LIVE_TIMER));\n self.hidden = !open;\n};\nvar setActive = (self, opt) => {\n if (self._input) attr(self._input, \"aria-activedescendant\", useId(opt));\n for (const o of self.options) attr(o, DATA_ACTIVE, o === opt ? \"\" : null);\n opt == null ? void 0 : opt.scrollIntoView({ block: \"nearest\" });\n};\nvar setInputAttributes = (self, setup) => {\n const input = setup || self._input;\n if (!input) return;\n if (self.popover) {\n attr(self, \"popover\", \"manual\");\n attr(input, \"popovertarget\", setup && useId(self));\n }\n attr(input, \"aria-autocomplete\", setup && \"list\");\n attr(input, \"aria-controls\", setup && useId(self));\n attr(input, \"autocomplete\", setup && \"off\");\n attr(input, \"enterkeyhint\", \"done\");\n attr(input, \"role\", setup && !isDisabled(input) ? \"combobox\" : null);\n};\nvar onFocus = (self, { target: el }) => {\n var _a2, _b;\n if (self._input === el) return;\n if (isInput(el) && el.getAttribute(\"list\") === self.id) {\n setInputAttributes(self, null);\n setInputAttributes(self, el);\n if (isDisabled(el)) return;\n if (self._root) on(self._root, EVENTS_ACTIVE_BUBBLE, self);\n attr(self, \"aria-label\", ((_b = (_a2 = el.labels) == null ? void 0 : _a2[0]) == null ? void 0 : _b.textContent.trim()) || null);\n speak();\n self._input = el;\n if (IS_ANDROID) setExpanded(self, true);\n } else onBlurred(self);\n};\nvar onBlur = (self, event) => {\n isPointerDown() ? event.stopImmediatePropagation() : IS_ANDROID || setTimeout(onBlurred, 0, self, event);\n};\nvar onBlurred = (self) => {\n const focus = getFocusedElement(self);\n if (self._input === focus || self.contains(focus)) return;\n if (self._root) off(self._root, EVENTS_ACTIVE_BUBBLE, self);\n setExpanded(self, false);\n self._input = void 0;\n};\nvar onPointerDown = (self, event) => self.contains(event.target) && isPointerDown(event);\nvar onClick = (self, event) => {\n var _a2;\n if (isInput(event.target)) onFocus(self, event);\n if (self._input === event.target) return setExpanded(self, true);\n if (!self.contains(event.target)) return onBlurred(self);\n for (const opt of self.options)\n if (opt.contains(event.target)) {\n (_a2 = self._input) == null ? void 0 : _a2.focus();\n if (self._input) setValue(self._input, opt.value);\n return setExpanded(self, attr(self, SAFE_MULTISELECTABLE) === \"true\");\n }\n};\nvar onKeyDown = (self, event) => {\n if (isInput(event.target)) onFocus(self, event);\n if (self._input !== event.target) return;\n const { key, ctrlKey: c, metaKey: m, shiftKey: s, altKey: alt } = event;\n if (c || m || s || key === \"Tab\" || alt && !key.startsWith(\"Arrow\")) return;\n if (key === \"Escape\" && !self.hidden) event.preventDefault();\n setExpanded(self, key !== \"Escape\");\n const isEnter = key === \"Enter\";\n const active = attr(self._input, \"aria-activedescendant\");\n const opts = [];\n let prev = -1;\n let next = -1;\n for (const opt of self.options)\n if (isVisible(opt)) {\n opts.push(opt);\n if (opt.id === active) prev = opts.length - 1;\n }\n if (!alt && key === \"ArrowDown\") next = (prev + 1) % opts.length;\n if (!alt && key === \"ArrowUp\") next = (prev || opts.length) - 1;\n if (~prev) {\n if (key === \"Home\" || key === \"PageUp\") next = 0;\n if (key === \"End\" || key === \"PageDown\") next = opts.length - 1;\n if (isEnter) next = prev;\n }\n if (opts[next]) {\n event.preventDefault();\n self._input.focus();\n }\n if (isEnter && opts[next]) {\n event.stopImmediatePropagation();\n preventSubmit(self._input);\n opts[next].click();\n } else setActive(self, opts[next]);\n};\nvar onMutations = (self) => {\n var _a2;\n if (!self._input || self.hidden) return;\n const query = self._input.value.toLowerCase().trim() || \"\";\n const filter = !self.hasAttribute(\"data-nofilter\");\n const hide = [];\n const show = [];\n for (const opt of self.options) (opt.disabled || opt.hidden || filter && !opt.label.toLowerCase().includes(query) ? hide : show).push(opt);\n for (const opt of hide) attr(opt, ARIA_HIDDEN, \"true\");\n for (const opt of show) attr(opt, ARIA_HIDDEN, \"false\");\n clearTimeout(LIVE_TIMER);\n LIVE_TIMER = setTimeout(speakHits, 500, self, show);\n if (IS_IOS)\n show.forEach((opt, index, { length }) => {\n attr(opt, \"title\", `${index + 1} ${self._texts.of} ${length}`);\n });\n (_a2 = self._umutate) == null ? void 0 : _a2.takeRecords();\n};\nvar speakHits = (self, show) => !self.hidden && self._input === getFocusedElement(self) && speak(\n `${show.some(({ value }) => value) ? `${self._texts[show[1] ? \"plural\" : \"singular\"]}`.replace(\"%d\", `${show.length}`) : self.innerText}`\n);\nif (isBrowser())\n Object.defineProperty(HTMLInputElement.prototype, \"list\", {\n configurable: true,\n enumerable: true,\n get() {\n const id = attr(this, \"list\");\n return id && getRoot(this).getElementById(id);\n }\n });\ncustomElements.define(\"u-datalist\", UHTMLDataListElement);\n\nexport { UHTMLDataListElement, UHTMLDataListShadowRoot, UHTMLDataListStyle };\n","import {\n attr,\n attrOrCSS,\n customElements,\n DSElement,\n debounce,\n on,\n onMutation,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-breadcrumbs': DSBreadcrumbsElement;\n }\n}\n\nconst ATTR_LABEL = 'aria-label';\n\nexport class DSBreadcrumbsElement extends DSElement {\n _items?: HTMLCollectionOf<HTMLAnchorElement>; // Using underscore instead of private fields for backwards compatibility\n _label: string | null = null;\n _unresize?: () => void;\n _unmutate?: () => void;\n\n static get observedAttributes() {\n return [ATTR_LABEL]; // Using ES2015 syntax for backwards compatibility\n }\n connectedCallback() {\n const resize = debounce(() => render(this), 100);\n this._label = attrOrCSS(this, ATTR_LABEL); // Label can have been set by attributeChangedCallback before connectedCallback\n this._items = this.getElementsByTagName('a'); // Speed up by caching HTMLCollection\n this._unresize = on(window, 'resize', resize);\n this._unmutate = onMutation(this, render, {\n childList: true,\n subtree: true,\n });\n }\n attributeChangedCallback(_name: string, _prev?: string, next?: string) {\n if (!this._unmutate || !next) return; // Ensure we do not run unless connected and we have a label to set\n this._label = next; // Update cacheed label if aria-label attribute changes\n render(this);\n }\n disconnectedCallback() {\n this._unresize?.();\n this._unmutate?.();\n this._unresize = this._unmutate = this._items = undefined;\n }\n}\n\nconst render = (self: DSBreadcrumbsElement) => {\n const lastItem = self._items?.[self._items.length - 1];\n const lastItemInList = lastItem?.parentElement === self ? null : lastItem;\n const isListHidden = !lastItemInList?.offsetHeight;\n\n attr(self, 'role', isListHidden ? null : 'navigation');\n attr(self, ATTR_LABEL, isListHidden ? null : self._label); // Remove aria-label if list is hidden to prevent screen readers from announcing as breadcrumbs\n\n for (const item of self._items || [])\n attr(item, 'aria-current', item === lastItemInList ? 'page' : null);\n};\n\ncustomElements.define('ds-breadcrumbs', DSBreadcrumbsElement);\n","import {\n attr,\n customElements,\n DSElement,\n off,\n on,\n onMutation,\n QUICK_EVENT,\n useId,\n warn,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-error-summary': DSErrorSummaryElement;\n }\n}\n\nexport class DSErrorSummaryElement extends DSElement {\n _unmutate?: () => void; // Using underscore instead of private fields for backwards compatibility\n\n connectedCallback() {\n on(this, 'animationend', this, QUICK_EVENT); // Using animationend to detect when element is visible\n attr(this, 'role', 'group');\n attr(this, 'tabindex', '-1');\n this._unmutate = onMutation(this, render, {\n childList: true,\n subtree: true,\n });\n this.focus();\n }\n handleEvent({ target }: Event) {\n if (target === this) this.focus(); // Ignore if animation event was triggered by child\n }\n disconnectedCallback() {\n off(this, 'animationend', this, QUICK_EVENT);\n this._unmutate?.();\n this._unmutate = undefined;\n }\n}\n\nconst render = (self: DSErrorSummaryElement) => {\n const label = attr(self, 'aria-label')?.trim();\n const labelledBy = attr(self, 'aria-labelledby')?.trim();\n const heading = self.querySelector('h2,h3,h4,h5,h6');\n if (heading && !label && !labelledBy) {\n attr(self, 'aria-labelledby', useId(heading));\n }\n if (!heading && !label && !labelledBy) {\n warn(\n 'Missing accessible name on:',\n self,\n '\\nAdd a heading (h2–h6), or set aria-label or aria-labelledby to provide an accessible name for screen readers.',\n );\n }\n};\n\ncustomElements.define('ds-error-summary', DSErrorSummaryElement);\n","import {\n announce,\n attr,\n attrOrCSS,\n customElements,\n DSElement,\n debounce,\n isWindows,\n on,\n onHotReload,\n onMutation,\n QUICK_EVENT,\n useId,\n warn,\n} from '../utils/utils';\n\n// TODO: Document that Validation must be hidden with \"hidden\" attribute (or completely removed from DOM), not display: none\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-field': DSFieldElement;\n }\n}\n\nconst ATTR_INVALID = 'aria-invalid';\nconst ATTR_DESCRIBEDBY = 'aria-describedby';\nconst ATTR_INDETERMINATE = 'data-indeterminate';\nconst COUNTER_DEBOUNCE = isWindows() ? 800 : 200; // Longer debounce on Windows due to NVDA performance\nconst COUNTS = new WeakMap<HTMLInputElement, Element>(); // Using WeakMap so removed inputs/counts does not cause memory leaks\nconst FIELDS = new Map<DSFieldElement, string[]>(); // Map of Field and its describedby IDs so we can identify the ones we add/remove\nconst VALIDATIONS = new WeakSet<HTMLInputElement>(); // Used to ensure we only take control of aria-invalid if the current is or has been a validation element\nconst WARNING_MULTIPLE_INPUTS = `Fields should only have one input element. Use <fieldset> to group multiple fields:`;\n\nconst handleFieldMutations = (_doc: Node, records: MutationRecord[] = []) => {\n for (const { target } of records) {\n const isFieldset = target instanceof HTMLFieldSetElement;\n for (const [field] of FIELDS)\n if (isFieldset ? target.contains(field) : field.contains(target))\n handleFieldMutation(field);\n }\n};\n\nconst handleFieldMutation = (field: DSFieldElement) => {\n const labels: HTMLLabelElement[] = [];\n const nextDescs: string[] = []; // Keep track of descriptions we are adding in this mutation\n const prevDescs = FIELDS.get(field) || []; // Retrieve previously managed IDs for this field\n let input: HTMLInputElement | undefined;\n let counter: Element | undefined;\n let hasValidation = false;\n let invalid = false;\n\n for (const el of field.getElementsByTagName('*')) {\n if (el instanceof HTMLLabelElement) labels.push(el);\n if ((el as HTMLElement).hidden) continue; // Skip hidden elements except labels\n if (isInputLike(el)) {\n if (input) warn(WARNING_MULTIPLE_INPUTS, field);\n else input = el; // Only register if visible input\n } else {\n const type = el.getAttribute('data-field'); // Using getAttribute instead of attr for best performance\n if (type === 'counter') counter = el;\n if (type === 'validation') {\n nextDescs.unshift(useId(el));\n hasValidation = true;\n invalid = invalid || isInvalid(el);\n } else if (type) nextDescs.push(useId(el)); // Adds both counter and descriptions\n }\n }\n\n if (!input) return; // Do not warn about missing input as virtual DOM libraries might give false positives\n if (counter) COUNTS.set(input, counter);\n for (const label of labels) attr(label, 'for', useId(input));\n\n const fieldsetValidation = field\n .closest('fieldset')\n ?.querySelector<HTMLElement>(':scope > [data-field=\"validation\"]');\n\n // Connect fieldset validation to inputs\n if (fieldsetValidation && !fieldsetValidation?.hidden) {\n hasValidation = true;\n invalid = invalid || isInvalid(fieldsetValidation);\n nextDescs.unshift(useId(fieldsetValidation));\n }\n\n // Add support for data-indeterminate attribute as this normally can only be set by javascript\n const indeterminate = attr(input, ATTR_INDETERMINATE);\n if (indeterminate) input.indeterminate = indeterminate === 'true';\n\n // Expand click area to ds-field if radio/checkbox\n const isBoolish = input.type === 'radio' || input.type === 'checkbox';\n if (isBoolish) attr(field, 'data-clickdelegatefor', useId(input));\n\n // Setup aria-describedby, but repsect existing ids in aria-describedby\n const describedby = attr(input, ATTR_DESCRIBEDBY)?.trim().split(/\\s+/);\n const keep = describedby?.filter((id) => !prevDescs.includes(id)) || []; // Find non-ds-field-managed aria-describedby IDs\n attr(input, ATTR_DESCRIBEDBY, [...nextDescs, ...keep].join(' ') || null);\n FIELDS.set(field, nextDescs);\n\n // Only manage aria-invalid when field has validation elements, and aria-invalid does not already exist\n const hadValidation = VALIDATIONS.has(input);\n if (hasValidation && !hadValidation && !input.hasAttribute(ATTR_INVALID)) {\n attr(input, ATTR_INVALID, 'true');\n VALIDATIONS.add(input);\n } else if (!hasValidation && hadValidation) {\n attr(input, ATTR_INVALID, null); // Remove aria-invalid\n VALIDATIONS.delete(input);\n }\n\n handleFieldInput(input); // Update counter and textarea sizing\n};\n\n// Used as fallback in tests when CSS is not loaded\nconst TEXTS = {\n over: '%d tegn for mye',\n under: '%d tegn igjen',\n};\n\nconst handleFieldInput = (e: Event | Element) => {\n const input = ((e as Event).target || e) as HTMLInputElement;\n const counter = COUNTS.get(input);\n\n if (counter?.isConnected) {\n const limit = Number(attr(counter, 'data-limit')) || 0;\n const count = limit - input.value.length;\n const state = count < 0 ? 'over' : 'under';\n const label = (\n attrOrCSS(counter, `data-${state}`) || TEXTS[state]\n )?.replace('%d', `${Math.abs(count)}`);\n\n attr(counter, 'data-label', label); // Using attribute to prevent hydation errors, not using aria-label to make axe tests happy\n attr(counter, 'data-state', state);\n attr(counter, 'data-color', count < 0 ? 'danger' : null);\n\n // Only update live region when user is actually typing\n if ((e as Event).type === 'input' && label)\n debouncedCounterLiveRegion(input, label); // Debounce live region to avoid NVDA interupting announcing typed text\n }\n if (input instanceof HTMLTextAreaElement) {\n input.style.setProperty('--_ds-field-sizing', 'auto');\n input.style.setProperty('--_ds-field-sizing', `${input.scrollHeight}px`);\n }\n};\n\nconst debouncedCounterLiveRegion = debounce((input: Element, text: string) => {\n if (document.activeElement === input) announce(text); // Only announce if input is still focused\n}, COUNTER_DEBOUNCE);\n\nconst isInvalid = (el: Element) => el.getAttribute('data-color') !== 'success';\nconst isInputLike = (el: unknown): el is HTMLInputElement =>\n el instanceof HTMLElement &&\n 'validity' in el && // Adds support for custom elements implemeted with attachInternals()\n !(el instanceof HTMLButtonElement) && // But skip <button> elements\n (el as HTMLInputElement).type !== 'hidden'; // And skip input type=\"hidden\"\n\n// Custom element is used to performantly keep track of fields on the page\nexport class DSFieldElement extends DSElement {\n connectedCallback() {\n FIELDS.set(this, []); // Register field\n handleFieldMutation(this); // Initial setup\n }\n disconnectedCallback() {\n FIELDS.delete(this);\n }\n}\n\ncustomElements.define('ds-field', DSFieldElement);\n\nonHotReload('field', () => [\n on(document, 'input', handleFieldInput, QUICK_EVENT),\n onMutation(document, handleFieldMutations, {\n attributeFilter: [\n 'data-field',\n 'data-limit',\n 'hidden', // Needed to check validation visibility\n 'id', // Needed to sync label \"for\" when ID of input/selec/textarea changes\n 'value', // Needed to detect changes in controlled React inputs as they do not trigger input events\n ATTR_INDETERMINATE,\n ],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","import {\n attr,\n attrOrCSS,\n customElements,\n DSElement,\n onMutation,\n warn,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-pagination': DSPaginationElement;\n }\n}\n\nconst ATTR_LABEL = 'aria-label';\nconst ATTR_CURRENT = 'data-current';\nconst ATTR_TOTAL = 'data-total';\nconst ATTR_HREF = 'data-href';\n\n// Expose pagination logic if wanting to do custom rendering (i.e. in React/Vue/etc)\nexport const pagination = ({ current = 1, total = 10, show = 7 }) => ({\n prev: current > 1 ? current - 1 : 0,\n next: current < total ? current + 1 : 0,\n pages: getSteps(current, total, show).map((page, index) => ({\n current: page === current && ('page' as const),\n key: `key-${page}-${index}`,\n page,\n })),\n});\n\nexport class DSPaginationElement extends DSElement {\n _unmutate?: () => void; // Using underscore instead of private fields for backwards compatibility\n _render?: () => void;\n\n static get observedAttributes() {\n return [ATTR_LABEL, ATTR_CURRENT, ATTR_TOTAL, ATTR_HREF]; // Using ES2015 syntax for backwards compatibility\n }\n connectedCallback() {\n // Check for required attributes\n const total = attr(this, ATTR_TOTAL);\n const current = attr(this, ATTR_CURRENT);\n if (current && !total) warn(`Missing ${ATTR_TOTAL} attribute on:`, this);\n if (total && !current) warn(`Missing ${ATTR_CURRENT} attribute on:`, this);\n\n attr(this, ATTR_LABEL, attrOrCSS(this, ATTR_LABEL));\n attr(this, 'role', 'navigation');\n this._unmutate = onMutation(this, render, {\n childList: true,\n subtree: true,\n });\n }\n attributeChangedCallback() {\n if (this._unmutate) render(this); // Ensure we do not run any renders before connectedCallback\n }\n disconnectedCallback() {\n this._unmutate?.();\n this._unmutate = this._render = undefined;\n }\n}\n\nconst render = (self: DSPaginationElement) => {\n const current = Number(attr(self, ATTR_CURRENT));\n const total = Number(attr(self, ATTR_TOTAL));\n\n // Allowing server side generated pagination, buy only doing client side updates if total/current attributes are provided\n if (current && total) {\n const items = self.querySelectorAll('button,a');\n const show = items.length - 2;\n const href = attr(self, ATTR_HREF);\n const { next, prev, pages } = pagination({ current, total, show });\n items.forEach((item, i) => {\n const page = i ? (items[i + 1] ? pages[i - 1]?.page : next) : prev; // First is prev, last is next\n attr(item, 'aria-current', pages[i - 1]?.current ? 'true' : null);\n attr(item, 'aria-label', `${page ?? 'hidden'}`); // Used for CSS content and to hide if more items than pages, using aria-label to make Axe tests and VoiceOver rotor happy\n attr(item, 'role', page ? null : 'none'); // Prevent validation errors for aria-hidden buttons\n attr(item, 'tabindex', page ? null : '-1');\n if (item instanceof HTMLButtonElement) attr(item, 'value', `${page}`);\n if (href && item instanceof HTMLAnchorElement)\n attr(item, 'href', href.replace('%d', `${page}`));\n });\n }\n};\n\nconst getSteps = (\n now: number,\n max: number,\n show = Number.POSITIVE_INFINITY,\n) => {\n const offset = (show - 1) / 2;\n const start = Math.max(Math.min(now - Math.floor(offset), max - show + 1), 1);\n const end = Math.min(Math.max(now + Math.ceil(offset), show), max);\n const pages = Array.from({ length: end + 1 - start }, (_, i) => i + start);\n\n if (show > 4 && start > 1) pages.splice(0, 2, 1, 0);\n if (show > 3 && end < max) pages.splice(-2, 2, 0, max);\n return pages;\n};\n\ncustomElements.define('ds-pagination', DSPaginationElement);\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar IS_FIREFOX = /firefox/i.test(AGENT);\nvar IS_IOS = /iPad|iPhone|iPod/.test(AGENT);\nvar _a;\nvar IS_MAC = IS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar SUPPORTS_CONSTRUCTED_CSS = IS_BROWSER && window.CSSStyleSheet && document.adoptedStyleSheets;\nvar EVENT_ONCE = { once: true, capture: true, passive: true };\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar FOCUS_OUTLINE = `outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color`;\nvar SAFE_MULTISELECTABLE = `${IS_ANDROID ? \"data\" : \"aria\"}-multiselectable`;\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar on = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\nvar off = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.removeEventListener(type, ...options);\n};\nvar attachStyle = (el, css) => {\n const root = el.shadowRoot || el.attachShadow({ mode: \"open\" });\n if (!root.querySelector(\"slot\")) root.append(tag(\"slot\"));\n if (!root.querySelector(\"style\")) {\n if (!SUPPORTS_CONSTRUCTED_CSS) root.append(tag(\"style\", null, css));\n else {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n }\n }\n return root;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? void 0 : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar getFocusedElement = (node) => getRoot(node).activeElement;\nvar getInputLabel = (el) => {\n var _a2;\n const label = attr(el, \"aria-label\") || \"\";\n const labels = ((_a2 = attr(el, \"aria-labelledby\")) == null ? void 0 : _a2.split(\" \")) || [];\n return [\n ...labels.map((id) => document.getElementById(id.trim() || \"-\")),\n // Get all labelledby elements\n ...Array.from(el.labels || [])\n // Get all <label> elements\n ].reduce((acc, el2) => {\n var _a3;\n return acc || ((_a3 = el2 == null ? void 0 : el2.innerText) == null ? void 0 : _a3.trim()) || \"\";\n }, label).trim();\n};\nvar useId = (el) => {\n if (!el || !IS_BROWSER) return null;\n if (!window.uElementsId) window.uElementsId = {};\n if (!el.id) {\n const node = el.nodeName.toLowerCase();\n if (!window.uElementsId[node]) window.uElementsId[node] = 1;\n el.id = `:${node}${window.uElementsId[node]++}`;\n }\n return el.id;\n};\nvar tag = (tagName, attrs, content) => {\n const el = document.createElement(tagName);\n if (content) el.textContent = content;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !isBrowser() || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar setValue = (input, data, type = \"\") => {\n var _a2, _b;\n const event = { bubbles: true, composed: true, data, inputType: type };\n const proto = HTMLInputElement.prototype;\n input.dispatchEvent(new InputEvent(\"beforeinput\", event));\n (_b = (_a2 = Object.getOwnPropertyDescriptor(proto, \"value\")) == null ? void 0 : _a2.set) == null ? void 0 : _b.call(input, data);\n input.dispatchEvent(new InputEvent(\"input\", event));\n input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\nvar IS_PRESS = /* @__PURE__ */ new WeakSet();\nvar isPointerDown = (el, e) => {\n if ((e == null ? void 0 : e.type) === \"pointerdown\") {\n IS_PRESS.add(el);\n on(document, \"pointerup\", () => IS_PRESS.delete(el), EVENT_ONCE);\n }\n return IS_PRESS.has(el);\n};\nvar declarativeShadowRoot = (style, slot = \"<slot></slot>\") => `<template shadowrootmode=\"open\">${slot}<style>${style}</style></template>`;\nvar preventSubmit = (input) => {\n const form = attr(input, \"form\");\n attr(input, \"form\", \"#\");\n setTimeout(restoreSubmit, 0, input, form);\n};\nvar restoreSubmit = (input, form) => attr(input, \"form\", form);\nvar getText = (el) => {\n var _a2;\n return ((_a2 = el == null ? void 0 : el.textContent) == null ? void 0 : _a2.trim()) || \"\";\n};\nvar LIVE;\nvar LIVE_SR_FIX = 0;\nvar LIVE_CLEAR = 0;\nvar speak = (text) => {\n clearTimeout(LIVE_CLEAR);\n if (!LIVE) {\n LIVE = tag(\"div\", { \"aria-live\": \"assertive\" });\n LIVE.style.overflow = \"hidden\";\n LIVE.style.position = \"fixed\";\n LIVE.style.whiteSpace = \"nowrap\";\n LIVE.style.width = \"1px\";\n }\n if (!LIVE.isConnected) document.body.append(LIVE);\n if (text === \"\") LIVE.textContent = \"\";\n if (text) {\n LIVE.textContent = `${text}${LIVE_SR_FIX++ % 2 ? \"\\xA0\" : \"\"}`;\n LIVE_CLEAR = setTimeout(speak, !IS_MAC && IS_FIREFOX ? 2e3 : 300, \"\");\n }\n};\n\n// u-combobox.ts\nvar UHTMLComboboxStyle = `${DISPLAY_BLOCK}\n:is(:host(:not([data-multiple])), :host([data-multiple=\"false\"])) [part=\"items\"] { display: none }\n[role=\"listbox\"] { display: inline-flex } /* Can not be \"contents\" as this confuses VoiceOver */\n::slotted(button[type=\"reset\"]),::slotted(del) { font: inherit; border: 0; padding: 0; background: none; color: inherit; cursor: pointer; text-decoration: none }\n::slotted(data) { cursor: pointer; pointer-events: none }\n::slotted(data)::after { padding-inline: .5ch; pointer-events: auto }\n::slotted(data)::after,::slotted(button[type=\"reset\"]:empty)::before,::slotted(del:empty)::before { content: '\\\\00D7'; content: '\\\\00D7' / '' }\n::slotted(data:focus),::slotted(del:focus),::slotted(button[type=\"reset\"]:focus) { ${FOCUS_OUTLINE} }`;\nvar UHTMLComboboxShadowRoot = declarativeShadowRoot(UHTMLComboboxStyle);\nvar IS_LIST_HIDDEN = false;\nvar ARIA_LABEL = \"aria-label\";\nvar CSS_CLEAR = `button[type=\"reset\"],del`;\nvar CSS_DATALIST = `datalist,u-datalist,[role=\"listbox\"]`;\nvar CSS_OPTION = `option,u-option,[role=\"option\"]`;\nvar EVENTS = \"blur focus click input keydown pointerdown\";\nvar FALSE = \"false\";\nvar TEXTS = {\n added: \"Added\",\n clear: \"Clear input\",\n empty: \"No selected\",\n found: \"Navigate left to find %d selected\",\n invalid: \"Invalid value\",\n items: \"Selected\",\n // Note: Not announced by NVDA\n of: \"of\",\n remove: \"Press to remove\",\n removed: \"Removed\"\n};\nvar UHTMLComboboxElement = class extends UHTMLElement {\n constructor() {\n super();\n this._focusMoved = false;\n // Used to determine if we announce through aria-live or aria-label when items are added or removed\n this._itemSingleVale = \"\";\n // Used to store current match\n this._speak = \"\";\n this._texts = __spreadValues({}, TEXTS);\n this._value = \"\";\n const root = attachStyle(this, UHTMLComboboxStyle);\n this._listbox = root.querySelector('[role=\"listbox\"]') || tag(\"div\");\n this._listbox.innerHTML = `<slot name=\"items\"></slot>`;\n attr(this._listbox, \"aria-orientation\", \"horizontal\");\n attr(this._listbox, \"role\", \"listbox\");\n attr(this._listbox, \"part\", \"items\");\n attr(this._listbox, \"tabindex\", \"-1\");\n root.prepend(this._listbox);\n }\n // Locally store value to store value before input-click\n static get observedAttributes() {\n return Object.keys(TEXTS).map((key) => `data-sr-${key}`);\n }\n connectedCallback() {\n on(this, EVENTS, this, true);\n this._umutate = onMutation(this, onMutations, {\n attributeFilter: [\"id\", \"value\", \"role\"],\n // Respond to changes in <data> value or id or role of <datalist>\n attributes: true,\n characterData: true,\n // Respond to changes in <data> textContent\n childList: true,\n subtree: true\n });\n syncInputWithItemSingleMode(this);\n syncClearWithInput(this);\n }\n attributeChangedCallback(prop, _, val) {\n const text = prop.split(\"data-sr-\")[1];\n if (TEXTS[text]) this._texts[text] = val || TEXTS[text];\n if (text === \"clear\" && this.clear)\n attr(this.clear, ARIA_LABEL, this._texts.clear);\n }\n disconnectedCallback() {\n var _a2;\n off(this, EVENTS, this, true);\n (_a2 = this._umutate) == null ? void 0 : _a2.call(this);\n this._umutate = this._list = this._options = this._match = void 0;\n this._items = this._clear = this._control = this._select = void 0;\n }\n handleEvent(event) {\n var _a2, _b, _c;\n if (((_a2 = this.control) == null ? void 0 : _a2.disabled) || ((_b = this.control) == null ? void 0 : _b.readOnly)) return;\n if (event.type === \"blur\") onBlur(this);\n if (event.type === \"click\") onClick(this, event);\n if (event.type === \"focus\") speak();\n if (event.type === \"input\") onInput(this, event);\n if (event.type === \"keydown\") onKeyDown(this, event);\n if (event.type === \"pointerdown\") {\n IS_LIST_HIDDEN = !!((_c = this.list) == null ? void 0 : _c.hidden);\n isPointerDown(this, event);\n }\n }\n get multiple() {\n var _a2;\n return ((_a2 = attr(this, \"data-multiple\")) != null ? _a2 : FALSE) !== FALSE;\n }\n set multiple(value) {\n attr(this, \"data-multiple\", value ? \"\" : null);\n }\n get creatable() {\n var _a2;\n return ((_a2 = attr(this, \"data-creatable\")) != null ? _a2 : FALSE) !== FALSE;\n }\n set creatable(value) {\n attr(this, \"data-creatable\", value ? \"\" : null);\n }\n get control() {\n var _a2;\n if (!((_a2 = this._control) == null ? void 0 : _a2.isConnected))\n this._control = this.querySelector(\"input\");\n return this._control;\n }\n get list() {\n var _a2;\n if (!((_a2 = this._list) == null ? void 0 : _a2.isConnected)) {\n this._list = this.querySelector(CSS_DATALIST);\n this._options = void 0;\n }\n return this._list;\n }\n get clear() {\n var _a2;\n if (!((_a2 = this._clear) == null ? void 0 : _a2.isConnected)) this._clear = this.querySelector(CSS_CLEAR);\n return this._clear;\n }\n get items() {\n if (!this._items) this._items = this.getElementsByTagName(\"data\");\n return this._items;\n }\n get options() {\n var _a2, _b, _c;\n const el = !this._options && ((_b = (_a2 = this.list) == null ? void 0 : _a2.querySelector(CSS_OPTION)) == null ? void 0 : _b.nodeName);\n if (el) this._options = (_c = this.list) == null ? void 0 : _c.getElementsByTagName(el);\n return this._options || this.getElementsByTagName(\"-\");\n }\n get values() {\n return Array.from(this.items, ({ value }) => value);\n }\n};\nvar dispatchMatch = (self) => {\n var _a2;\n const { creatable, control, options, multiple } = self;\n const value = ((_a2 = control == null ? void 0 : control.value) == null ? void 0 : _a2.trim()) || \"\";\n const query = value.toLowerCase() || null;\n let match = [...options].find(\n (o) => getLabel(o).trim().toLowerCase() === query\n );\n const event = { bubbles: true, cancelable: true, detail: match };\n if (!self.dispatchEvent(new CustomEvent(\"comboboxbeforematch\", event)))\n match = [...options].find(getSelected);\n if (!multiple) for (const o of options) setSelected(o, o === match);\n else syncOptionsWithItems(self);\n if (!match && creatable && value) return { value, label: value };\n return match && { value: getValue(match), label: getLabel(match) };\n};\nvar dispatchSelect = (self, item, canRemove = true) => {\n const { _texts, control, items, multiple } = self;\n if (!item) {\n if (multiple) return speak(_texts.invalid);\n if (!(control == null ? void 0 : control.value) && items[0]) return dispatchSelect(self, items[0]);\n return syncInputWithItemSingleMode(self);\n }\n const index = [...items].findIndex((i) => i.value === item.value);\n const remove = items[index];\n const focus = remove === getFocusedElement(self) && (multiple ? items[index - 1] || items[index + 1] || control : control);\n if (remove && !canRemove) return syncInputWithItemSingleMode(self);\n if (focus) focus.focus();\n self._focusMoved = !!focus;\n const add = tag(\"data\", { value: item.value }, item.label || item.value);\n const event = { bubbles: true, cancelable: true, detail: remove || add };\n if (self.dispatchEvent(new CustomEvent(\"comboboxbeforeselect\", event))) {\n if (!multiple) for (const item2 of [...items]) item2.remove();\n if (remove) remove.remove();\n else control == null ? void 0 : control.insertAdjacentElement(\"beforebegin\", add);\n self.dispatchEvent(new CustomEvent(\"comboboxafterselect\", event));\n }\n};\nvar onBlur = (self) => isPointerDown(self) || setTimeout(onBlurred, 0, self);\nvar onBlurred = (self) => self.multiple || self.contains(getFocusedElement(self)) || dispatchSelect(self, self._match, false);\nvar onClick = (self, event) => {\n const { clientX: x, clientY: y, target } = event;\n const { clear, control, items } = self;\n if (control && (clear == null ? void 0 : clear.contains(target))) {\n event.preventDefault();\n setValue(control, \"\", \"deleteContentBackward\");\n control.focus();\n return IS_LIST_HIDDEN || control.click();\n }\n for (const item of items) {\n if (item.contains(target)) return dispatchSelect(self, item);\n const rect = item.getBoundingClientRect();\n const { top: t, right: r, bottom: b, left: l, width: w, height: h } = rect;\n if (w && h && y >= t && y <= b && x >= l && x <= r) return item.focus();\n }\n if (target === self) control == null ? void 0 : control.focus();\n};\nvar onInput = (self, event) => {\n var _a2;\n const { control, options, multiple } = self;\n const value = (control == null ? void 0 : control.value) || null;\n const isDatalistClick = event instanceof InputEvent ? !event.inputType || event.inputType === \"insertReplacementText\" : !!(control == null ? void 0 : control.value);\n if (!isDatalistClick) self._value = (control == null ? void 0 : control.value) || \"\";\n if (isDatalistClick) {\n (_a2 = event.stopImmediatePropagation) == null ? void 0 : _a2.call(event);\n const clicked = [...options].find((o) => getValue(o) === value);\n if (control) control.value = self._value;\n if (clicked) return dispatchSelect(self, clicked, multiple);\n } else if (!multiple) self._match = dispatchMatch(self);\n syncClearWithInput(self);\n};\nvar onKeyDown = (self, e) => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.key === \"Alt\") return;\n if (self.control === e.target) onKeyDownControl(self, e);\n else onKeyDownItems(self, e);\n};\nvar onKeyDownControl = (self, e) => {\n var _a2;\n const { _match, clear, control: input, items, multiple } = self;\n if ((e.key === \"ArrowLeft\" || e.key === \"Backspace\") && !(input == null ? void 0 : input.selectionEnd))\n (_a2 = items[items.length - 1]) == null ? void 0 : _a2.focus();\n if (e.key === \"Enter\" && input) {\n preventSubmit(input);\n dispatchSelect(self, multiple ? dispatchMatch(self) : _match, multiple);\n }\n if (e.key === \"Tab\" && !e.shiftKey && clear && !clear.hidden) {\n e.preventDefault();\n attr(clear, \"aria-hidden\", \"false\");\n attr(clear, \"tabindex\", \"0\");\n clear.focus();\n on(clear, \"blur\", () => syncClearWithInput(self), EVENT_ONCE);\n }\n};\nvar onKeyDownItems = (self, event) => {\n var _a2, _b, _c;\n const { clear, control, items } = self;\n const { key, repeat, target } = event;\n const index = [...items].indexOf(target);\n const isKeyClick = key === \" \" || key === \"Enter\";\n if (isKeyClick && (items[index] || target === clear)) {\n (_a2 = items[index] || clear) == null ? void 0 : _a2.click();\n return event.preventDefault();\n }\n if (!items[index]) return;\n if (key === \"ArrowLeft\") return (_b = items[index - 1]) == null ? void 0 : _b.focus();\n if (key === \"ArrowRight\") return (_c = items[index + 1] || control) == null ? void 0 : _c.focus();\n if (key === \"Backspace\") {\n event.preventDefault();\n return repeat || dispatchSelect(self, items[index]);\n }\n control == null ? void 0 : control.focus();\n};\nvar onMutations = (self, edit) => {\n var _a2;\n if (!self.control) return;\n const { _texts, control, items, list, multiple } = self;\n const edits = [];\n for (const { addedNodes: add, removedNodes: del } of edit || []) {\n for (const el of add) if (el instanceof HTMLDataElement) edits.unshift(el);\n for (const el of del) if (el instanceof HTMLDataElement) edits.push(el);\n }\n const focus = getFocusedElement(self);\n const doSpeak = multiple ? edits.length === 1 : edits[0] === focus;\n if (doSpeak && self.contains(focus)) {\n const label = control ? attr(control, ARIA_LABEL) : null;\n self._speak = `${_texts[edits[0].isConnected ? \"added\" : \"removed\"]} ${getText(edits[0])}, `;\n attr(control, ARIA_LABEL, `${self._speak}${getInputLabel(control)}`);\n if (!self._focusMoved) setTimeout(() => speak(self._speak.slice(0, -2)));\n setTimeout(speakReset, 300, self, label);\n }\n if (!multiple) {\n const item = getText(items[0]);\n if (item !== self._itemSingleVale) syncInputWithItemSingleMode(self);\n self._itemSingleVale = item;\n }\n syncItems(self);\n syncOptionsWithItems(self);\n syncSelectWithItems(self);\n const hint = `${items.length ? _texts.found.replace(\"%d\", `${items.length}`) : _texts.empty}`;\n attr(control, \"aria-description\", multiple ? hint : null);\n attr(control, \"list\", useId(list));\n attr(self._listbox, ARIA_LABEL, _texts.items);\n (_a2 = self._umutate) == null ? void 0 : _a2.takeRecords();\n};\nvar speakReset = (self, label) => {\n self._speak = \"\";\n if (self.control) attr(self.control, ARIA_LABEL, label);\n syncItems(self);\n};\nvar syncItems = (self) => {\n const { _texts, _speak, items } = self;\n let idx = 0;\n for (const item of items) {\n const text = `${_speak}${getText(item)}, ${_texts.remove}${IS_IOS ? `, ${++idx} ${_texts.of} ${items.length}` : \"\"}`;\n attr(item, ARIA_LABEL, text);\n attr(item, \"role\", \"option\");\n attr(item, \"slot\", \"items\");\n attr(item, \"tabindex\", \"-1\");\n attr(item, \"value\", getValue(item));\n }\n};\nvar syncSelectWithItems = (self) => {\n var _a2, _b;\n if (!((_a2 = self._select) == null ? void 0 : _a2.isConnected)) self._select = self.querySelector(\"select\");\n if (!self._select) return;\n const { _select, items, multiple } = self;\n const append = [];\n let idx = 0;\n attr(_select, \"multiple\", multiple ? \"\" : null);\n for (const item of items) {\n const option = _select == null ? void 0 : _select.options[idx++];\n const text = getText(item);\n const value = getValue(item);\n if (!option) append.push(new Option(text, value, true, true));\n else\n Object.assign(option, {\n defaultSelected: true,\n selected: true,\n text,\n value\n });\n }\n if (append.length) _select.append(...append);\n else for (const opt of [..._select.options].slice(idx)) opt.remove();\n (_b = self._umutate) == null ? void 0 : _b.takeRecords();\n};\nvar syncClearWithInput = (self) => {\n if (!self.clear) return;\n const { clear, control } = self;\n const hidden = !(control == null ? void 0 : control.value) || (control == null ? void 0 : control.disabled) || (control == null ? void 0 : control.readOnly);\n if (clear.nodeName === \"DEL\") attr(clear, \"role\", \"button\");\n if (!attr(clear, ARIA_LABEL)) attr(clear, ARIA_LABEL, self._texts.clear);\n attr(clear, \"aria-hidden\", `${IS_IOS || IS_ANDROID}`);\n attr(clear, \"hidden\", hidden ? \"\" : null);\n attr(clear, \"tabindex\", \"-1\");\n};\nvar syncOptionsWithItems = (self) => {\n if (!self.list) return;\n const { _texts, list, multiple, options, values } = self;\n attr(list, \"data-sr-of\", _texts.of);\n attr(list, SAFE_MULTISELECTABLE, `${multiple}`);\n for (const opt of options) setSelected(opt, values.includes(getValue(opt)));\n};\nvar syncInputWithItemSingleMode = (self) => {\n if (!self.control || self.multiple) return;\n const { control, items } = self;\n const value = getText(items[0]);\n const action = value ? \"insertText\" : \"deleteContentBackward\";\n if (value !== control.value) setValue(control, value, action);\n};\nvar getLabel = (el) => {\n var _a2;\n return (_a2 = attr(el, \"label\")) != null ? _a2 : getText(el);\n};\nvar getValue = (el) => {\n var _a2;\n return (_a2 = attr(el, \"value\")) != null ? _a2 : getText(el);\n};\nvar setSelected = (el, selected) => attr(el, \"selected\", selected ? \"\" : null);\nvar getSelected = (el) => {\n var _a2;\n return (_a2 = el.selected) != null ? _a2 : el.hasAttribute(\"selected\");\n};\ncustomElements.define(\"u-combobox\", UHTMLComboboxElement);\n\nexport { UHTMLComboboxElement, UHTMLComboboxShadowRoot, UHTMLComboboxStyle };\n","import { UHTMLComboboxElement } from '@u-elements/u-combobox';\nimport {\n attr,\n customElements,\n off,\n on,\n onMutation,\n QUICK_EVENT,\n useId,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-suggestion': DSSuggestionElement;\n }\n}\n\nexport class DSSuggestionElement extends UHTMLComboboxElement {\n _unmutate?: ReturnType<typeof onMutation>; // Using underscore instead of private fields for backwards compatibility\n\n connectedCallback() {\n super.connectedCallback();\n this._unmutate = onMutation(this, render, { childList: true }); // .control and .list are direct children of the custom element\n on(this, 'toggle', polyfillToggleSource, QUICK_EVENT);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this._unmutate?.();\n this._unmutate = undefined;\n off(this, 'toggle', polyfillToggleSource, QUICK_EVENT);\n }\n}\n\n// A non-empty placeholder attribute is required to activate the :placeholder-shown pseudo selector used in our chevron styling\nconst render = (self: DSSuggestionElement) => {\n const { control, list } = self;\n const datalist = list || self.querySelector('u-datalist'); // Fallback to u-datalist since React can render the ds-suggestion before u-datalist is connected\n\n if (control && !control.placeholder) attr(control, 'placeholder', ' '); // .control comes from UHTMLComboboxElement\n if (control) attr(control, 'popovertarget', useId(list) || null);\n if (datalist) attr(datalist, 'popover', 'manual'); // Ensure popover attribute is set on the list\n if (datalist) attr(datalist, 'data-is-floating', 'true'); // identifier for css to toggle opacity when it is placed by floating-ui.\n};\n\n// Since showPopover({ source }) is not supported in all browsers yet:\nconst polyfillToggleSource = (event: Partial<ToggleEvent>) => {\n const self = event.currentTarget as DSSuggestionElement;\n const detail = event.newState === 'open' && self.control; // .control comes from UHTMLComboboxElement\n\n if (detail)\n self.list?.dispatchEvent(new CustomEvent('ds-toggle-source', { detail }));\n};\n\n// Ensure u-datalist is defined before ds-suggestion\ncustomElements.define('ds-suggestion', DSSuggestionElement);\n","// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar _a;\nIS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar SUPPORTS_CONSTRUCTED_CSS = IS_BROWSER && window.CSSStyleSheet && document.adoptedStyleSheets;\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar SAFE_LABELLEDBY = `${IS_ANDROID ? \"data\" : \"aria\"}-labelledby`;\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar on = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\nvar off = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.removeEventListener(type, ...options);\n};\nvar attachStyle = (el, css) => {\n const root = el.shadowRoot || el.attachShadow({ mode: \"open\" });\n if (!root.querySelector(\"slot\")) root.append(tag(\"slot\"));\n if (!root.querySelector(\"style\")) {\n if (!SUPPORTS_CONSTRUCTED_CSS) root.append(tag(\"style\", null, css));\n else {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n }\n }\n return root;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? void 0 : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar useId = (el) => {\n if (!el || !IS_BROWSER) return null;\n if (!window.uElementsId) window.uElementsId = {};\n if (!el.id) {\n const node = el.nodeName.toLowerCase();\n if (!window.uElementsId[node]) window.uElementsId[node] = 1;\n el.id = `:${node}${window.uElementsId[node]++}`;\n }\n return el.id;\n};\nvar tag = (tagName, attrs, content) => {\n const el = document.createElement(tagName);\n if (content) el.textContent = content;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !isBrowser() || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar declarativeShadowRoot = (style, slot = \"<slot></slot>\") => `<template shadowrootmode=\"open\">${slot}<style>${style}</style></template>`;\n\n// u-tabs.ts\nvar ARIA_CONTROLS = \"aria-controls\";\nvar ARIA_DISABLED = \"aria-disabled\";\nvar ARIA_SELECTED = \"aria-selected\";\nvar TABINDEX = \"tabindex\";\nvar UHTMLTabsStyle = DISPLAY_BLOCK;\nvar UHTMLTabPanelStyle = DISPLAY_BLOCK;\nvar UHTMLTabStyle = \"\";\nvar UHTMLTabListStyle = `${DISPLAY_BLOCK}\n::slotted([role=\"tab\"]:not([hidden])) { display: inline-block; cursor: pointer }\n::slotted([role=\"tab\"][${ARIA_DISABLED}=\"true\"]) { cursor: default }`;\nvar UHTMLTabsShadowRoot = declarativeShadowRoot(UHTMLTabsStyle);\nvar UHTMLTabListShadowRoot = declarativeShadowRoot(UHTMLTabListStyle);\nvar UHTMLTabShadowRoot = \"\";\nvar UHTMLTabPanelShadowRoot = declarativeShadowRoot(UHTMLTabPanelStyle);\nvar UHTMLTabsElement = class extends UHTMLElement {\n constructor() {\n super();\n attachStyle(this, UHTMLTabsStyle);\n }\n get tabList() {\n return this.querySelector(\n '[role=\"tablist\"]:not(:scope [role=\"tabpanel\"] [role=\"tablist\"])'\n );\n }\n get selectedIndex() {\n const tabs = getTabs(this.tabList);\n return tabs.indexOf(findSelected(tabs));\n }\n set selectedIndex(index) {\n setSelected(this.tabs[index]);\n }\n get tabs() {\n return this.querySelectorAll(\n '[role=\"tab\"]:not(:scope [role=\"tabpanel\"] [role=\"tab\"])'\n );\n }\n get panels() {\n return this.querySelectorAll(\n `[role=\"tabpanel\"]:not(:scope [role=\"tabpanel\"] [role=\"tabpanel\"])`\n );\n }\n};\nvar UHTMLTabListElement = class extends UHTMLElement {\n // Using underscore instead of private fields for backwards compatibility\n constructor() {\n super();\n attachStyle(this, UHTMLTabListStyle);\n }\n connectedCallback() {\n attr(this, \"role\", \"tablist\");\n on(this, \"click keydown\", this);\n this._umutate = onMutation(this, onMutations, {\n attributeFilter: [\"id\", \"role\", ARIA_CONTROLS, ARIA_SELECTED],\n // Needed if role=\"tab|tabpanel\" and not u-tab|u-tabpanel is used\n attributes: true,\n childList: true,\n subtree: true\n // Needed to catch changes of attributes in children\n });\n }\n disconnectedCallback() {\n var _a2;\n off(this, \"click keydown\", this);\n (_a2 = this._umutate) == null ? void 0 : _a2.call(this);\n this._umutate = void 0;\n }\n handleEvent(event) {\n var _a2, _b, _c, _d;\n const { key, type, target } = event;\n const tabs = getTabs(this);\n const prev = tabs.findIndex((tab) => tab.contains(target));\n const isKeyClick = key === \" \" || key === \"Enter\";\n let next = prev;\n if (event.defaultPrevented || prev === -1) return;\n if (type === \"click\") setSelected(tabs[prev]);\n if (type === \"keydown\") {\n if (isKeyClick) {\n (_a2 = event.preventDefault) == null ? void 0 : _a2.call(event);\n const click = { bubbles: true, cancelable: true, composed: true };\n return tabs[prev].dispatchEvent(new MouseEvent(\"click\", click));\n }\n if (key === \"ArrowDown\" || key === \"ArrowRight\")\n next = (prev + 1) % tabs.length;\n else if (key === \"ArrowUp\" || key === \"ArrowLeft\")\n next = (prev || tabs.length) - 1;\n else if (key === \"End\") next = tabs.length - 1;\n else if (key === \"Home\") next = 0;\n else if (key === \"Tab\" && !isSelected(tabs[prev])) {\n const selected = findSelected(tabs);\n if (selected) attr(selected, TABINDEX, \"-1\");\n return selected && setTimeout(() => attr(selected, TABINDEX, \"0\"));\n } else return;\n (_b = event.preventDefault) == null ? void 0 : _b.call(event);\n (_d = (_c = tabs[next]).focus) == null ? void 0 : _d.call(_c);\n }\n }\n get tabsElement() {\n return getTabsElement(this);\n }\n get tabs() {\n return this.querySelectorAll(':scope > [role=\"tab\"]');\n }\n get selectedIndex() {\n const tabs = getTabs(this);\n return tabs.indexOf(findSelected(tabs));\n }\n set selectedIndex(index) {\n setSelected(this.tabs[index]);\n }\n};\nvar UHTMLTabElement = class extends UHTMLElement {\n static get observedAttributes() {\n return [\"id\", ARIA_SELECTED, ARIA_CONTROLS];\n }\n connectedCallback() {\n var _a2;\n attr(this, \"role\", \"tab\");\n attr(this, ARIA_SELECTED, `${this.selected}`);\n attr(this, TABINDEX, this.selected ? \"0\" : \"-1\");\n if (!findSelected((_a2 = this.parentElement) == null ? void 0 : _a2.children)) setSelected(this);\n }\n attributeChangedCallback() {\n if (!SKIP_TABS_UPDATE.has(this.parentElement) && this.selected)\n setSelected(this);\n }\n get tabsElement() {\n return getTabsElement(this);\n }\n get tabList() {\n const tablist = this.parentElement;\n return tablist instanceof UHTMLTabListElement ? tablist : null;\n }\n get selected() {\n return isSelected(this);\n }\n set selected(value) {\n if (value) setSelected(this);\n }\n /** Retrieves the ordinal position of an tab in a tablist. */\n get index() {\n return Math.max(getTabs(this.parentElement).indexOf(this), 0);\n }\n get panel() {\n var _a2;\n const panels = (_a2 = getTabsElement(this)) == null ? void 0 : _a2.panels;\n const index = getTabs(this.parentElement).indexOf(this);\n return getPanel(this, panels == null ? void 0 : panels[index]);\n }\n};\nvar UHTMLTabPanelElement = class extends UHTMLElement {\n constructor() {\n super();\n attachStyle(this, UHTMLTabPanelStyle);\n }\n connectedCallback() {\n attr(this, \"role\", \"tabpanel\");\n const tabs = new Set(this.tabs);\n const root = getTabsElement(this);\n const idx = root == null ? void 0 : root.tabs[Array.prototype.indexOf.call(root == null ? void 0 : root.panels, this)];\n if (idx && !idx.hasAttribute(ARIA_CONTROLS)) tabs.add(idx);\n const tab = findSelected(tabs) || tabs.values().next().value;\n skipTabsUpdate(tab, () => syncPanel(this, tab, !!tab && isSelected(tab)));\n }\n get tabsElement() {\n return getTabsElement(this);\n }\n get tabs() {\n return getRoot(this).querySelectorAll(\n `[${ARIA_CONTROLS}=\"${useId(this)}\"]`\n );\n }\n};\nvar onMutations = (self, records = []) => {\n let selected;\n const tabs = getTabs(self);\n for (const { target: el } of records) {\n const tab = el instanceof Element && attr(el, \"role\") === \"tab\";\n if (tab && isSelected(el)) selected = el;\n }\n if (!selected && !findSelected(tabs)) selected = tabs.find(isEnabled);\n setSelected(selected);\n};\nvar syncPanel = (panel, tab, show = false) => {\n attr(panel, \"aria-hidden\", `${!show}`);\n attr(panel, \"hidden\", show ? null : \"\");\n attr(panel, TABINDEX, show ? \"0\" : null);\n if (tab) attr(tab, ARIA_CONTROLS, useId(panel));\n if (tab && show && isSelected(tab)) attr(panel, SAFE_LABELLEDBY, useId(tab));\n};\nvar SKIP_TABS_UPDATE = /* @__PURE__ */ new Set();\nvar skipTabsUpdate = (tab, fn) => {\n var _a2;\n const tablist = tab == null ? void 0 : tab.parentElement;\n if (tablist) SKIP_TABS_UPDATE.add(tablist);\n fn();\n if (tablist) SKIP_TABS_UPDATE.delete(tablist);\n (_a2 = tablist == null ? void 0 : tablist._umutate) == null ? void 0 : _a2.takeRecords();\n};\nvar isEnabled = (el) => attr(el, ARIA_DISABLED) !== \"true\";\nvar isSelected = (el) => attr(el, ARIA_SELECTED) === \"true\";\nvar findSelected = (elems = []) => {\n for (const el of elems) if (isSelected(el)) return el;\n};\nvar getTabs = (tablist) => {\n const tabs = [];\n for (const el of (tablist == null ? void 0 : tablist.children) || [])\n if (el.getAttribute(\"role\") === \"tab\") tabs.push(el);\n return tabs;\n};\nvar getPanel = (tab, panel = null) => {\n const id = attr(tab, ARIA_CONTROLS);\n const el = id ? getRoot(tab).getElementById(id) : panel;\n return el;\n};\nvar getTabsElement = (self) => {\n for (let el = self; el; el = el.parentNode || el.host)\n if (el instanceof UHTMLTabsElement) return el;\n return null;\n};\nvar setSelected = (selected) => selected && isEnabled(selected) && skipTabsUpdate(selected, () => {\n var _a2;\n const tabs = getTabs(selected.parentElement);\n const panels = ((_a2 = getTabsElement(selected)) == null ? void 0 : _a2.panels) || [];\n const nextPanel = getPanel(selected, panels == null ? void 0 : panels[tabs.indexOf(selected)]);\n let idx = 0;\n for (const tab of tabs) {\n const panel = getPanel(tab, panels[idx++]);\n attr(tab, ARIA_SELECTED, `${tab === selected}`);\n attr(tab, TABINDEX, tab === selected ? \"0\" : \"-1\");\n if (panel) syncPanel(panel, tab, panel === nextPanel);\n }\n});\ncustomElements.define(\"u-tabs\", UHTMLTabsElement);\ncustomElements.define(\"u-tablist\", UHTMLTabListElement);\ncustomElements.define(\"u-tab\", UHTMLTabElement);\ncustomElements.define(\"u-tabpanel\", UHTMLTabPanelElement);\n\nexport { UHTMLTabElement, UHTMLTabListElement, UHTMLTabListShadowRoot, UHTMLTabListStyle, UHTMLTabPanelElement, UHTMLTabPanelShadowRoot, UHTMLTabPanelStyle, UHTMLTabShadowRoot, UHTMLTabStyle, UHTMLTabsElement, UHTMLTabsShadowRoot, UHTMLTabsStyle };\n","import * as UTabs from '@u-elements/u-tabs';\nimport { customElements } from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-tabs': DSTabsElement;\n 'ds-tablist': DSTabListElement;\n 'ds-tab': DSTabElement;\n 'ds-tabpanel': DSTabPanelElement;\n }\n}\n\nexport class DSTabsElement extends UTabs.UHTMLTabsElement {}\nexport class DSTabListElement extends UTabs.UHTMLTabListElement {}\nexport class DSTabElement extends UTabs.UHTMLTabElement {}\nexport class DSTabPanelElement extends UTabs.UHTMLTabPanelElement {}\n\ncustomElements.define('ds-tabs', DSTabsElement);\ncustomElements.define('ds-tablist', DSTabListElement);\ncustomElements.define('ds-tab', DSTabElement);\ncustomElements.define('ds-tabpanel', DSTabPanelElement);\n"],"x_google_ignoreList":[2,5,7,8,9,10,11,16,21,23],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["isBrowser","attr","on","off","onMutation","tag","customElements","useId","LIVE_CLEAR","on","isBrowser","IS_BROWSER","AGENT","IS_ANDROID","IS_FIREFOX","_a","attr","onMutation","attr","isBrowser","handleAriaAttributes","on","onMutation","isBrowser","useId","onMutation","isSupported","apply","isBrowser","isSupported","computePosition","flip","offset","shift","limitShift","size","getComputedStyle","ShadowRoot","HTMLDialogElement","isBrowser","attr","on","attr","on","ARIA_LABEL","handleAriaAttributes","attr","on","onMutation","IS_IOS","isBrowser","ARIA_LABEL","attr","tag","on","onMutation","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","isBrowser","IS_BROWSER","AGENT","IS_ANDROID","IS_FIREFOX","IS_IOS","_a","IS_MAC","SUPPORTS_CONSTRUCTED_CSS","EVENT_ONCE","DISPLAY_BLOCK","FOCUS_OUTLINE","SAFE_MULTISELECTABLE","UHTMLElement","attr","on","off","attachStyle","tag","onMutation","getRoot","getFocusedElement","useId","customElements","setValue","IS_PRESS","isPointerDown","declarativeShadowRoot","preventSubmit","restoreSubmit","LIVE","LIVE_SR_FIX","LIVE_CLEAR","speak","TEXTS","onMutations","onBlur","onBlurred","onClick","onKeyDown","ATTR_LABEL","render","on","onMutation","onMutation","render","attr","useId","useId","attr","TEXTS","on","onMutation","attr","onMutation","render","isBrowser","IS_BROWSER","AGENT","IS_ANDROID","_a","SUPPORTS_CONSTRUCTED_CSS","DISPLAY_BLOCK","UHTMLElement","attr","on","off","attachStyle","tag","onMutation","getRoot","useId","customElements","declarativeShadowRoot","onMutations","setSelected","onMutation","useId","UTabs.UHTMLTabsElement","UTabs.UHTMLTabListElement","UTabs.UHTMLTabElement","UTabs.UHTMLTabPanelElement"],"sources":["../../src/utils/utils.ts","../../src/clickdelegatefor/clickdelegatefor.ts","../../../../node_modules/.pnpm/@u-elements+u-details@1.0.0/node_modules/@u-elements/u-details/dist/polyfill.js","../../src/dialog/dialog.ts","../../src/fieldset/fieldset.ts","../../../../node_modules/.pnpm/invokers-polyfill@1.0.3/node_modules/invokers-polyfill/invoker.js","../../src/invokers/invokers.ts","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../node_modules/.pnpm/@oddbird+popover-polyfill@0.6.1/node_modules/@oddbird/popover-polyfill/dist/popover-fn.js","../../src/popover/popover.ts","../../src/readonly/readonly.ts","../../src/toggle-group/toggle-group.ts","../../src/tooltip/tooltip.ts","../../../../node_modules/.pnpm/@u-elements+u-datalist@2.0.1/node_modules/@u-elements/u-datalist/dist/u-datalist.js","../../src/breadcrumbs/breadcrumbs.ts","../../src/error-summary/error-summary.ts","../../src/field/field.ts","../../src/pagination/pagination.ts","../../../../node_modules/.pnpm/@u-elements+u-combobox@2.0.5/node_modules/@u-elements/u-combobox/dist/u-combobox.js","../../src/suggestion/suggestion.ts","../../../../node_modules/.pnpm/@u-elements+u-tabs@1.0.4/node_modules/@u-elements/u-tabs/dist/u-tabs.js","../../src/tabs/tabs.ts"],"sourcesContent":["export const QUICK_EVENT = { passive: true, capture: true };\n\n// Using function instead of constant to support evnironments where DOM can be unloaded (like Vitest with jsdom)\nexport const isBrowser = () =>\n typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport const isWindows = () =>\n isBrowser() &&\n // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n /^Win/i.test(navigator.userAgentData?.platform || navigator.platform);\n\n// Make sure we have a HTMLElement to extend (for server side rendering)\nexport const DSElement =\n typeof HTMLElement === 'undefined'\n ? (class {} as typeof HTMLElement)\n : HTMLElement;\n\nexport function debounce<T extends unknown[]>(\n callback: (...args: T) => void,\n delay: number,\n) {\n let timer: ReturnType<typeof setTimeout>;\n\n return function (this: unknown, ...args: T) {\n clearTimeout(timer);\n timer = setTimeout(() => callback.apply(this, args), delay);\n };\n}\n\n/**\n * warn\n * @description Utility to console.log, but can be silenced in production with window.dsWarnings = false;\n */\ndeclare global {\n interface Window {\n dsWarnings?: boolean;\n }\n}\nexport const warn = (\n message: string,\n ...args: Parameters<typeof console.log> // Using console.log, not console.warn, to prevent stopping test runners such as Jest\n) =>\n !isBrowser() ||\n window.dsWarnings === false ||\n console.log(`\\x1B[1mDesignsystemet:\\x1B[m ${message}`, ...args);\n\n/**\n * attr\n * @description Utility to quickly get, set and remove attributes\n * @param el The Element to read/write attributes from\n * @param name The attribute name to get, set or remove, or a object to set multiple attributes\n * @param value A valid attribute value or null to remove attribute\n */\nexport const attr = (\n el: Element,\n name: string,\n value?: string | null,\n): string | null => {\n if (value === undefined) return el.getAttribute(name) ?? null; // Fallback to null only if el is undefined\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\n\n/**\n * getCSSProp\n * @description Retrieves and CSS property value and trims it\n * @param el The Element to read attributes/CSS from\n * @param name Attribute or CSS property to get\n * @return string CSS property value\n */\nexport const getCSSProp = (el: Element, prop: string) =>\n getComputedStyle(el).getPropertyValue(prop).trim();\n\nconst STRIP_QUOTES = /^[\"']|[\"']$/g; // Matches surrounding single or double quotes\n/**\n * attrOrCSS\n * @description Retrieves and updates attribute based on attribute or CSS property value\n * @param el The Element to read attributes/CSS from\n * @param name Attribute or CSS property to get\n * @return string attribute or CSS property value\n */\nexport const attrOrCSS = (el: Element, name: string) => {\n let value = attr(el, name);\n if (!value)\n value = getCSSProp(el, `--_ds-${name}`).replace(STRIP_QUOTES, '').trim();\n if (!value) warn(`Missing ${name} on:`, el);\n return value || null;\n};\n\n/**\n * on\n * @param el The Element to use as EventTarget\n * @param types A space separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const on = (\n el: Node | Window | ShadowRoot,\n ...rest: Parameters<typeof Element.prototype.addEventListener>\n): (() => void) => {\n const [types, ...options] = rest;\n for (const type of types.split(' ')) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\n\n/**\n * off\n * @param el The Element to use as EventTarget\n * @param types A space separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const off = (\n el: Node | Window | ShadowRoot,\n ...rest: Parameters<typeof Element.prototype.removeEventListener>\n): void => {\n const [types, ...options] = rest;\n for (const type of types.split(' ')) el.removeEventListener(type, ...options);\n};\n\n// Used to store cleanup functions for hot-reloading\ndeclare global {\n interface Window {\n _dsHotReloadCleanup?: Map<string, Array<() => void>>;\n }\n}\n\n/**\n * onHotReload\n * @description Runs a callback when window is loaded in browser, and ensures cleanup when hot-reloading\n * @param key The key to identify setup and corresponding cleanup\n * @param callback The callback to run when the page is ready\n */\nexport const onHotReload = (key: string, setup: () => Array<() => void>) => {\n if (!isBrowser()) return; // Skip if not in modern browser environment, but on each call as Vitest might have unloaded jsdom between tests\n if (!window._dsHotReloadCleanup) window._dsHotReloadCleanup = new Map(); // Hot reload cleanup support supporting all build tools\n\n window._dsHotReloadCleanup?.get(key)?.map((cleanup) => cleanup()); // Run previous cleanup\n window._dsHotReloadCleanup?.set(key, setup()); // Store new cleanup\n};\n\n/**\n * MutationObserver wrapper with automatic cleanup\n * @return new MutaionObserver\n */\nexport const onMutation = <T extends Node>(\n el: T,\n callback: (el: T, records?: MutationRecord[]) => void,\n options: MutationObserverInit,\n) => {\n const cleanup = () => observer.disconnect();\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup(); // Stop observing if element is removed from DOM or document is removed by jdsom tests\n callback(el, records);\n });\n\n callback(el); // Initial is run instantly to make test markup predictable\n observer.observe(el, options);\n return cleanup;\n};\n\n/**\n * tag\n * @description creates element and assigns properties\n * @param tagName The tagname of element to create\n * @param attrs Optional attributes to add to the element\n * @param text Optional text content to add to the element\n * @return HTMLElement with props\n */\nexport const tag = <TagName extends keyof HTMLElementTagNameMap>(\n tagName: TagName,\n attrs?: Record<string, string | null> | null,\n): HTMLElementTagNameMap[TagName] => {\n const el = document.createElement(tagName);\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\n\n/**\n * customElements.define\n * @description Defines a customElement if running in browser and if not already registered\n * Scoped/named \"customElements.define\" so @custom-elements-manifest/analyzer can find tag names\n */\nexport const customElements = {\n define: (name: string, instance: CustomElementConstructor) =>\n !isBrowser() ||\n window.customElements.get(name) ||\n window.customElements.define(name, instance),\n};\n\n/**\n * useId\n * @return A generated unique ID\n */\ndeclare global {\n interface Window {\n dsUseId?: number; // Use a global counter to ensure this works even when loading designsystemet multiple times\n }\n}\nlet id = 0;\nexport function useId(el?: Element | null) {\n if (!isBrowser()) return `:ds:${++id}`; // Emulate browser environment if window not available\n if (!window.dsUseId) window.dsUseId = 0; // Make sure we have a global to support multiple instances of designsystemet in same page\n if (el && !el.id) el.id = `:ds:${++window.dsUseId}`;\n return el?.id || '';\n}\n\n/**\n * @description Based off speak function from [U-elements](https://github.com/u-elements/u-elements/blob/main/packages/utils.ts#L210)\n * @param text The text to announce\n */\nlet LIVE_EL: HTMLElement | undefined;\nlet LIVE_FIX = 0;\nlet LIVE_CLEAR: ReturnType<typeof setTimeout> | number = 0;\nexport const announce = (text: string) => {\n clearTimeout(LIVE_CLEAR);\n if (LIVE_EL) LIVE_EL.textContent = `${text}${LIVE_FIX++ % 2 ? '\\u00A0' : ''}`; // Non-breaking space to ensure screen reader announces\n if (text) LIVE_CLEAR = setTimeout(announce, 2000, ''); // Clear prevent old announcements being found by screen readers, with 2 seconds brace period to avoid cutting of Android Talkback\n};\n\n// Mount live region on first focus so its ready to be used\nconst announceMount = () => {\n if (document.readyState !== 'complete') return; // Ensure page is loaded trying to avoid issues with React hydration\n if (!LIVE_EL) {\n LIVE_EL = tag('div', { 'aria-live': 'assertive' });\n LIVE_EL.style.overflow = 'hidden'; // Settings styles individually to prevent issues with CSP\n LIVE_EL.style.position = 'fixed';\n LIVE_EL.style.whiteSpace = 'nowrap';\n LIVE_EL.style.width = '1px';\n }\n if (!LIVE_EL.isConnected) document.body.appendChild(LIVE_EL);\n};\nonHotReload('announce', () => [\n on(document, 'focus mouseover', announceMount, QUICK_EVENT),\n]);\n","// Adding support for click deletagtion, following\n// https://open-ui.org/components/link-area-delegation-explainer/\n// and https://github.com/openui/open-ui/issues/1104#issuecomment-3151387080\nimport { on, onHotReload, QUICK_EVENT } from '../utils/utils';\n\nconst CLASS_HOVER = ':click-delegate-hover';\nconst ATTR_CLICKDELEGATEFOR = 'data-clickdelegatefor';\nconst SELECTOR_CLICKDELEGATEFOR = `[${ATTR_CLICKDELEGATEFOR}]`;\nconst SELECTOR_SKIP =\n 'a,button,label,input,select,textarea,details,dialog,[role=\"button\"],[popover],[contenteditable]';\n\nconst handleClickDelegateFor = (event: MouseEvent) => {\n const isNewTab = event.button === 1 || event.metaKey || event.ctrlKey; // Middle click or cmd/ctrl + click should open in new tab\n const delegateTarget = event.button < 2 && getDelegateTarget(event); // Only accept left or middle clicks\n\n if (!delegateTarget || delegateTarget.contains(event.target as Node)) return; // Only proxy event if delegated target isn't part of the original target\n if (isNewTab && delegateTarget instanceof HTMLAnchorElement)\n return window.open(delegateTarget.href, undefined, delegateTarget.rel); // If middle click or cmd/ctrl click on link, open in new tab\n event.stopImmediatePropagation(); // We'll trigger a new click event anyway, so prevent actions on this one\n delegateTarget.click(); // Forward click to the clickable element\n};\n\nlet HOVER: Element | undefined;\nconst handleMouseOver = (event: Event) => {\n const delegateTarget = getDelegateTarget(event);\n if (HOVER === delegateTarget) return; // No change\n if (HOVER) HOVER.classList.remove(CLASS_HOVER);\n if (delegateTarget) delegateTarget.classList.add(CLASS_HOVER);\n HOVER = delegateTarget;\n};\n\nconst getDelegateTarget = ({ target: el }: Event) => {\n const scope =\n el instanceof Element ? el.closest(SELECTOR_CLICKDELEGATEFOR) : null;\n const id = scope?.getAttribute(ATTR_CLICKDELEGATEFOR);\n const target = (id && document.getElementById(id)) || undefined;\n const skip = target && (el as Element).closest(SELECTOR_SKIP); // Ignore if interactive\n\n return (!skip || skip === target) && !(target as HTMLInputElement)?.disabled\n ? target\n : undefined; // Skip disabled inputs\n};\n\nonHotReload('clickdelegatefor', () => [\n on(window, 'click auxclick', handleClickDelegateFor as EventListener, true), // Use capture to ensure we run before other click listeners\n on(document, 'mouseover', handleMouseOver, QUICK_EVENT), // Use passive for better performance\n]);\n","// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar IS_FIREFOX = /firefox/i.test(AGENT);\nvar _a;\nIS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\n\n// polyfill.ts\nvar KEY = \"__uDetailsPolyfillSummarys\";\nif (isBrowser() && IS_ANDROID && IS_FIREFOX && !window[KEY]) {\n const summaries = document.getElementsByTagName(\"summary\");\n const onMutations = () => {\n for (const summary of summaries) {\n const details = summary.parentElement;\n attr(summary, \"role\", \"button\");\n attr(summary, \"aria-expanded\", `${!!(details == null ? void 0 : details.open)}`);\n }\n };\n window[KEY] = onMutation(document, onMutations, {\n attributeFilter: [\"open\"],\n attributes: true,\n childList: true,\n subtree: true\n });\n}\n","import {\n attr,\n isBrowser,\n on,\n onHotReload,\n onMutation,\n QUICK_EVENT,\n} from '../utils/utils';\n\n// Polyfill closedby functionaliy in Safari\n// Also in Safari 26.2 where `closedBy` property is supported natively,\n// but no corresponding functionality/behavior is implemented.\nlet DOWN_INSIDE = false; // Prevent close if selecting text inside dialog\nconst handleClosedbyAny = ({\n type,\n target: el,\n clientX: x = 0,\n clientY: y = 0,\n}: Partial<MouseEvent>) => {\n if (type === 'pointerdown') {\n const r = (el as Element)?.closest?.('dialog')?.getBoundingClientRect();\n const isInside =\n r && r.top <= y && y <= r.bottom && r.left <= x && x <= r.right;\n\n DOWN_INSIDE = !!isInside;\n } else {\n const isDialog = el instanceof HTMLDialogElement;\n const isClose = isDialog && !DOWN_INSIDE && attr(el, 'closedby') === 'any';\n\n DOWN_INSIDE = false; // Reset on every pointerup\n if (isClose) requestAnimationFrame(() => el.open && el.close()); // Close if browser did not do it\n }\n};\n\n// Ensure buttons that trigger a modeal dialog has aria-haspopup=\"dialog\" for better screen reader experience\nconst BUTTONS = isBrowser() ? document.getElementsByTagName('button') : [];\nconst handleAriaAttributes = () => {\n for (const btn of BUTTONS)\n if (btn.getAttribute('command')?.endsWith('-modal'))\n btn.setAttribute('aria-haspopup', 'dialog'); // Using get/setAttribute for performance\n};\n\nconst handleCommand = ({ command, target }: Event & { command?: string }) =>\n command === '--show-non-modal' &&\n target instanceof HTMLDialogElement &&\n target.show();\n\nonHotReload('dialog', () => [\n on(document, 'command', handleCommand, QUICK_EVENT),\n on(document, 'pointerdown pointerup', handleClosedbyAny, QUICK_EVENT),\n onMutation(document, handleAriaAttributes, {\n attributeFilter: ['command'],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","import {\n attr,\n isBrowser,\n onHotReload,\n onMutation,\n useId,\n} from '../utils/utils';\n\nconst FIELDSETS = isBrowser() ? document.getElementsByTagName('fieldset') : [];\n\n// NOTE:\n// <fieldset> descriptions should be accessible to screen reader users. However, using aria-describedby\n// on <fieldset> causes all child <input> elements to inherit the same description, resulting in redundant and confusing announcements.\n// To avoid this, we use aria-labelledby to reference both the legend and the description.\n// aria-labelledby is only announced when screen readers enter the fieldset, not when navigating its child elements.\n// This means the accessible name of <fieldset> includes both the legend and description, which may differ from some test expectations,\n// but as of March 2026, this approach provides the best user experience across assistive technologies.\n// This approach is also verified by the chief of accessibility at NRK and the accessibility expert at NAV\nconst handleFieldsetMutations = () => {\n for (const el of FIELDSETS) {\n if (el.hasAttribute('aria-labelledby')) continue; // Speed up by skipping labelled fieldsets\n const labelledby = `${useId(el.querySelector('legend'))} ${useId(el.querySelector(':scope > :is([data-field=\"description\"],legend + p)'))}`;\n attr(el, 'aria-labelledby', labelledby.trim() || null);\n }\n};\n\nonHotReload('fieldset', () => [\n onMutation(document, handleFieldsetMutations, {\n childList: true,\n subtree: true,\n }),\n]);\n","export function isSupported() {\n return (\n typeof HTMLButtonElement !== \"undefined\" &&\n \"command\" in HTMLButtonElement.prototype &&\n \"source\" in ((globalThis.CommandEvent || {}).prototype || {})\n );\n}\n\nexport function isPolyfilled() {\n return !/native code/i.test((globalThis.CommandEvent || {}).toString());\n}\n\nexport function apply() {\n // XXX: Invoker Buttons used to dispatch 'invoke' events instead of\n // 'command' events. We should ensure to prevent 'invoke' events being\n // fired in those browsers.\n // XXX: https://bugs.chromium.org/p/chromium/issues/detail?id=1523183\n // Chrome will dispatch invoke events even with the flag disabled; so\n // we need to capture those to prevent duplicate events.\n document.addEventListener(\n \"invoke\",\n (e) => {\n if (e.type == \"invoke\" && e.isTrusted) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n },\n true,\n );\n document.addEventListener(\n \"command\",\n (e) => {\n if (e.type == \"command\" && e.isTrusted) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n },\n true,\n );\n\n function enumerate(obj, key, enumerable = true) {\n Object.defineProperty(obj, key, {\n ...Object.getOwnPropertyDescriptor(obj, key),\n enumerable,\n });\n }\n\n function getRootNode(node) {\n if (node && typeof node.getRootNode === \"function\") {\n return node.getRootNode();\n }\n if (node && node.parentNode) return getRootNode(node.parentNode);\n return node;\n }\n\n const commandEventSourceElements = new WeakMap();\n const commandEventActions = new WeakMap();\n\n class CommandEvent extends Event {\n constructor(type, invokeEventInit = {}) {\n super(type, invokeEventInit);\n const { source, command } = invokeEventInit;\n if (source != null && !(source instanceof Element)) {\n throw new TypeError(`source must be an element`);\n }\n commandEventSourceElements.set(this, source || null);\n commandEventActions.set(\n this,\n command !== undefined ? String(command) : \"\",\n );\n }\n\n get [Symbol.toStringTag]() {\n return \"CommandEvent\";\n }\n\n get source() {\n if (!commandEventSourceElements.has(this)) {\n throw new TypeError(\"illegal invocation\");\n }\n const source = commandEventSourceElements.get(this);\n if (!(source instanceof Element)) return null;\n const invokerRoot = getRootNode(source);\n if (invokerRoot !== getRootNode(this.target || document)) {\n return invokerRoot.host;\n }\n return source;\n }\n\n get command() {\n if (!commandEventActions.has(this)) {\n throw new TypeError(\"illegal invocation\");\n }\n return commandEventActions.get(this);\n }\n }\n enumerate(CommandEvent.prototype, \"source\");\n enumerate(CommandEvent.prototype, \"command\");\n\n const invokerAssociatedElements = new WeakMap();\n\n function applyInvokerMixin(ElementClass) {\n Object.defineProperties(ElementClass.prototype, {\n commandForElement: {\n enumerable: true,\n configurable: true,\n set(targetElement) {\n if (targetElement === null) {\n this.removeAttribute(\"commandfor\");\n invokerAssociatedElements.delete(this);\n } else if (!(targetElement instanceof Element)) {\n throw new TypeError(`commandForElement must be an element or null`);\n } else {\n this.setAttribute(\"commandfor\", \"\");\n const targetRootNode = getRootNode(targetElement);\n const thisRootNode = getRootNode(this);\n if (\n thisRootNode === targetRootNode ||\n targetRootNode === this.ownerDocument\n ) {\n invokerAssociatedElements.set(this, targetElement);\n } else {\n invokerAssociatedElements.delete(this);\n }\n }\n },\n get() {\n if (this.localName !== \"button\") {\n return null;\n }\n if (this.disabled) {\n return null;\n }\n if (this.form && this.getAttribute(\"type\") !== \"button\") {\n console.warn(\n \"Element with `commandFor` is a form participant. \" +\n \"It should explicitly set `type=button` in order for `commandFor` to work\",\n );\n return null;\n }\n const targetElement = invokerAssociatedElements.get(this);\n if (targetElement) {\n if (targetElement.isConnected) {\n return targetElement;\n } else {\n invokerAssociatedElements.delete(this);\n return null;\n }\n }\n const root = getRootNode(this);\n const idref = this.getAttribute(\"commandfor\");\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 command: {\n enumerable: true,\n configurable: true,\n get() {\n const value = this.getAttribute(\"command\") || \"\";\n if (value.startsWith(\"--\")) return value;\n const valueLower = value.toLowerCase();\n switch (valueLower) {\n case \"show-modal\":\n case \"request-close\":\n case \"close\":\n case \"toggle-popover\":\n case \"hide-popover\":\n case \"show-popover\":\n return valueLower;\n }\n return \"\";\n },\n set(value) {\n this.setAttribute(\"command\", value);\n },\n },\n });\n }\n\n const onHandlers = new WeakMap();\n Object.defineProperties(HTMLElement.prototype, {\n oncommand: {\n enumerable: true,\n configurable: true,\n get() {\n oncommandObserver.takeRecords();\n return onHandlers.get(this) || null;\n },\n set(handler) {\n const existing = onHandlers.get(this) || null;\n if (existing) {\n this.removeEventListener(\"command\", existing);\n }\n onHandlers.set(\n this,\n typeof handler === \"object\" || typeof handler === \"function\"\n ? handler\n : null,\n );\n if (typeof handler == \"function\") {\n this.addEventListener(\"command\", handler);\n }\n },\n },\n });\n function applyOnCommandHandler(els) {\n for (const el of els) {\n el.oncommand = new Function(\"event\", el.getAttribute(\"oncommand\"));\n }\n }\n const oncommandObserver = new MutationObserver((records) => {\n for (const record of records) {\n const { target } = record;\n if (record.type === \"childList\") {\n applyOnCommandHandler(target.querySelectorAll(\"[oncommand]\"));\n } else {\n applyOnCommandHandler([target]);\n }\n }\n });\n oncommandObserver.observe(document, {\n subtree: true,\n childList: true,\n attributeFilter: [\"oncommand\"],\n });\n applyOnCommandHandler(document.querySelectorAll(\"[oncommand]\"));\n\n const processedEvents = new WeakSet();\n\n function handleInvokerActivation(event) {\n if (processedEvents.has(event)) return;\n\n processedEvents.add(event);\n\n if (event.defaultPrevented) return;\n if (event.type !== \"click\") return;\n const source = event.composedPath().find((el) => el.matches?.(\"button[commandfor], button[command]\"));\n if (!source) return;\n\n if (source.form && source.getAttribute(\"type\") !== \"button\") {\n event.preventDefault();\n throw new Error(\n \"Element with `commandFor` is a form participant. \" +\n \"It should explicitly set `type=button` in order for `commandFor` to work. \" +\n \"In order for it to act as a Submit button, it must not have command or commandfor attributes\",\n );\n }\n\n if (source.hasAttribute(\"command\") !== source.hasAttribute(\"commandfor\")) {\n const attr = source.hasAttribute(\"command\") ? \"command\" : \"commandfor\";\n const missing = source.hasAttribute(\"command\") ? \"commandfor\" : \"command\";\n throw new Error(\n `Element with ${attr} attribute must also have a ${missing} attribute to function.`,\n );\n }\n\n if (\n source.command !== \"show-popover\" &&\n source.command !== \"hide-popover\" &&\n source.command !== \"toggle-popover\" &&\n source.command !== \"show-modal\" &&\n source.command !== \"request-close\" &&\n source.command !== \"close\" &&\n !source.command.startsWith(\"--\")\n ) {\n console.warn(\n `\"${source.command}\" is not a valid command value. Custom commands must begin with --`,\n );\n return;\n }\n\n const invokee = source.commandForElement;\n if (!invokee) return;\n const invokeEvent = new CommandEvent(\"command\", {\n command: source.command,\n source,\n cancelable: true,\n });\n invokee.dispatchEvent(invokeEvent);\n if (invokeEvent.defaultPrevented) return;\n\n const command = invokeEvent.command.toLowerCase();\n\n if (invokee.popover) {\n const canShow = !invokee.matches(\":popover-open\");\n const shouldShow =\n canShow && (command === \"toggle-popover\" || command === \"show-popover\");\n const shouldHide = !canShow && command === \"hide-popover\";\n\n if (shouldShow) {\n invokee.showPopover({ source });\n } else if (shouldHide) {\n invokee.hidePopover();\n }\n } else if (invokee.localName === \"dialog\") {\n const canShow = !invokee.hasAttribute(\"open\");\n\n if (canShow && command == \"show-modal\") {\n invokee.showModal();\n } else if (!canShow && command == \"close\") {\n invokee.close(source.value ? source.value : undefined);\n } else if (!canShow && command == \"request-close\") {\n // requestClose is only supported from Safari 18.4, so we polyfill it on older browsers\n if (!HTMLDialogElement.prototype.requestClose) {\n HTMLDialogElement.prototype.requestClose = function () {\n const cancelEvent = new Event(\"cancel\", { cancelable: true });\n this.dispatchEvent(cancelEvent);\n\n if (!cancelEvent.defaultPrevented) {\n this.close();\n }\n };\n }\n\n invokee.requestClose(source.value ? source.value : undefined);\n }\n }\n }\n\n function setupInvokeListeners(target) {\n target.addEventListener(\"click\", handleInvokerActivation, true);\n }\n\n function observeShadowRoots(ElementClass, callback) {\n const attachShadow = ElementClass.prototype.attachShadow;\n ElementClass.prototype.attachShadow = function (init) {\n const shadow = attachShadow.call(this, init);\n callback(shadow);\n return shadow;\n };\n const attachInternals = ElementClass.prototype.attachInternals;\n ElementClass.prototype.attachInternals = function () {\n const internals = attachInternals.call(this);\n if (internals.shadowRoot) callback(internals.shadowRoot);\n return internals;\n };\n }\n\n applyInvokerMixin(HTMLButtonElement);\n\n observeShadowRoots(HTMLElement, (shadow) => {\n setupInvokeListeners(shadow);\n oncommandObserver.observe(shadow, { attributeFilter: [\"oncommand\"] });\n applyOnCommandHandler(shadow.querySelectorAll(\"[oncommand]\"));\n });\n\n setupInvokeListeners(document);\n\n Object.assign(globalThis, { CommandEvent });\n}\n","import { isSupported, apply as polyfillInvokers } from 'invokers-polyfill/fn';\nimport { isBrowser } from '../utils/utils';\n\nif (isBrowser() && !isSupported()) polyfillInvokers(); // Ensure invoker commands polyfill is loaded in browser environment only\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","// src/events.ts\nvar ToggleEvent = class extends Event {\n oldState;\n newState;\n constructor(type, { oldState = \"\", newState = \"\", ...init } = {}) {\n super(type, init);\n this.oldState = String(oldState || \"\");\n this.newState = String(newState || \"\");\n }\n};\nvar popoverToggleTaskQueue = /* @__PURE__ */ new WeakMap();\nfunction queuePopoverToggleEventTask(element, oldState, newState) {\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\n// src/popover-helpers.ts\nvar ShadowRoot = globalThis.ShadowRoot || function() {\n};\nvar HTMLDialogElement = globalThis.HTMLDialogElement || function() {\n};\nvar topLayerElements = /* @__PURE__ */ new WeakMap();\nvar autoPopoverList = /* @__PURE__ */ new WeakMap();\nvar hintPopoverList = /* @__PURE__ */ new WeakMap();\nvar visibilityState = /* @__PURE__ */ new WeakMap();\nfunction getPopoverVisibilityState(popover) {\n return visibilityState.get(popover) || \"hidden\";\n}\nvar popoverInvoker = /* @__PURE__ */ new WeakMap();\nfunction lastSetElement(set) {\n return [...set].pop();\n}\nfunction popoverTargetAttributeActivationBehavior(element) {\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}\nfunction checkPopoverValidity(element, expectedToBeShowing) {\n if (element.popover !== \"auto\" && element.popover !== \"manual\" && element.popover !== \"hint\") {\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}\nfunction getStackPosition(popover) {\n if (!popover) return 0;\n const autoPopovers = autoPopoverList.get(document) || /* @__PURE__ */ new Set();\n const hintPopovers = hintPopoverList.get(document) || /* @__PURE__ */ new Set();\n if (hintPopovers.has(popover)) {\n return [...hintPopovers].indexOf(popover) + autoPopovers.size + 1;\n }\n if (autoPopovers.has(popover)) {\n return [...autoPopovers].indexOf(popover) + 1;\n }\n return 0;\n}\nfunction topMostClickedPopover(target) {\n const clickedPopover = nearestInclusiveOpenPopover(target);\n const invokerPopover = nearestInclusiveTargetPopoverForInvoker(target);\n if (getStackPosition(clickedPopover) > getStackPosition(invokerPopover)) {\n return clickedPopover;\n }\n return invokerPopover;\n}\nfunction topmostAutoOrHintPopover(document2) {\n let topmostPopover;\n const hintPopovers = hintPopoverList.get(document2) || /* @__PURE__ */ new Set();\n const autoPopovers = autoPopoverList.get(document2) || /* @__PURE__ */ new Set();\n const usedStack = hintPopovers.size > 0 ? hintPopovers : autoPopovers.size > 0 ? autoPopovers : null;\n if (usedStack) {\n topmostPopover = lastSetElement(usedStack);\n if (!topmostPopover.isConnected) {\n usedStack.delete(topmostPopover);\n return topmostAutoOrHintPopover(document2);\n }\n return topmostPopover;\n }\n return null;\n}\nfunction topMostPopoverInList(list) {\n for (const popover of list || []) {\n if (!popover.isConnected) {\n list.delete(popover);\n } else {\n return popover;\n }\n }\n return null;\n}\nfunction getRootNode(node) {\n if (typeof node.getRootNode === \"function\") {\n return node.getRootNode();\n }\n if (node.parentNode) return getRootNode(node.parentNode);\n return node;\n}\nfunction nearestInclusiveOpenPopover(node) {\n while (node) {\n if (node instanceof HTMLElement && node.popover === \"auto\" && visibilityState.get(node) === \"showing\") {\n return node;\n }\n node = node instanceof Element && node.assignedSlot || node.parentElement || getRootNode(node);\n if (node instanceof ShadowRoot) node = node.host;\n if (node instanceof Document) return;\n }\n}\nfunction nearestInclusiveTargetPopoverForInvoker(node) {\n while (node) {\n const nodePopover = node.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}\nfunction topMostPopoverAncestor(newPopover, list) {\n const popoverPositions = /* @__PURE__ */ new Map();\n let i = 0;\n for (const popover of list || []) {\n popoverPositions.set(popover, i);\n i += 1;\n }\n popoverPositions.set(newPopover, i);\n i += 1;\n let topMostPopoverAncestor2 = null;\n function checkAncestor(candidate) {\n if (!candidate) return;\n let okNesting = false;\n let candidateAncestor = null;\n let candidatePosition = null;\n while (!okNesting) {\n candidateAncestor = nearestInclusiveOpenPopover(candidate) || null;\n if (candidateAncestor === null) return;\n if (!popoverPositions.has(candidateAncestor)) return;\n if (newPopover.popover === \"hint\" || candidateAncestor.popover === \"auto\") {\n okNesting = true;\n }\n if (!okNesting) {\n candidate = candidateAncestor.parentElement;\n }\n }\n candidatePosition = popoverPositions.get(candidateAncestor);\n if (topMostPopoverAncestor2 === null || popoverPositions.get(topMostPopoverAncestor2) < candidatePosition) {\n topMostPopoverAncestor2 = candidateAncestor;\n }\n }\n checkAncestor(newPopover.parentElement || getRootNode(newPopover));\n return topMostPopoverAncestor2;\n}\nfunction isFocusable(focusTarget) {\n if (focusTarget.hidden || focusTarget instanceof ShadowRoot) return false;\n if (focusTarget instanceof HTMLButtonElement || focusTarget instanceof HTMLInputElement || focusTarget instanceof HTMLSelectElement || focusTarget instanceof HTMLTextAreaElement || focusTarget instanceof HTMLOptGroupElement || focusTarget instanceof HTMLOptionElement || focusTarget instanceof HTMLFieldSetElement) {\n if (focusTarget.disabled) return false;\n }\n if (focusTarget instanceof HTMLInputElement && focusTarget.type === \"hidden\") {\n return false;\n }\n if (focusTarget instanceof HTMLAnchorElement && focusTarget.href === \"\") {\n return false;\n }\n return typeof focusTarget.tabIndex === \"number\" && focusTarget.tabIndex !== -1;\n}\nfunction focusDelegate(focusTarget) {\n if (focusTarget.shadowRoot && focusTarget.shadowRoot.delegatesFocus !== true) {\n return null;\n }\n let whereToLook = 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 = walker.currentNode;\n while (descendant) {\n if (isFocusable(descendant)) {\n return descendant;\n }\n descendant = walker.nextNode();\n }\n}\nfunction popoverFocusingSteps(subject) {\n var _a;\n (_a = focusDelegate(subject)) == null ? void 0 : _a.focus();\n}\nvar previouslyFocusedElements = /* @__PURE__ */ new WeakMap();\nfunction showPopover(element) {\n if (!checkPopoverValidity(element, false)) {\n return;\n }\n const document2 = element.ownerDocument;\n if (!element.dispatchEvent(\n new ToggleEvent(\"beforetoggle\", {\n cancelable: true,\n oldState: \"closed\",\n newState: \"open\"\n })\n )) {\n return;\n }\n if (!checkPopoverValidity(element, false)) {\n return;\n }\n let shouldRestoreFocus = false;\n const originalType = element.popover;\n let stackToAppendTo = null;\n const autoAncestor = topMostPopoverAncestor(\n element,\n autoPopoverList.get(document2) || /* @__PURE__ */ new Set()\n );\n const hintAncestor = topMostPopoverAncestor(\n element,\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set()\n );\n if (originalType === \"auto\") {\n closeAllOpenPopoversInList(\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n shouldRestoreFocus,\n true\n );\n const ancestor = autoAncestor || document2;\n hideAllPopoversUntil(ancestor, shouldRestoreFocus, true);\n stackToAppendTo = \"auto\";\n }\n if (originalType === \"hint\") {\n if (hintAncestor) {\n hideAllPopoversUntil(hintAncestor, shouldRestoreFocus, true);\n stackToAppendTo = \"hint\";\n } else {\n closeAllOpenPopoversInList(\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n shouldRestoreFocus,\n true\n );\n if (autoAncestor) {\n hideAllPopoversUntil(autoAncestor, shouldRestoreFocus, true);\n stackToAppendTo = \"auto\";\n } else {\n stackToAppendTo = \"hint\";\n }\n }\n }\n if (originalType === \"auto\" || originalType === \"hint\") {\n if (originalType !== element.popover || !checkPopoverValidity(element, false)) {\n return;\n }\n if (!topmostAutoOrHintPopover(document2)) {\n shouldRestoreFocus = true;\n }\n if (stackToAppendTo === \"auto\") {\n if (!autoPopoverList.has(document2)) {\n autoPopoverList.set(document2, /* @__PURE__ */ new Set());\n }\n autoPopoverList.get(document2).add(element);\n } else if (stackToAppendTo === \"hint\") {\n if (!hintPopoverList.has(document2)) {\n hintPopoverList.set(document2, /* @__PURE__ */ new Set());\n }\n hintPopoverList.get(document2).add(element);\n }\n }\n previouslyFocusedElements.delete(element);\n const originallyFocusedElement = document2.activeElement;\n element.classList.add(\":popover-open\");\n visibilityState.set(element, \"showing\");\n if (!topLayerElements.has(document2)) {\n topLayerElements.set(document2, /* @__PURE__ */ new Set());\n }\n topLayerElements.get(document2).add(element);\n setInvokerAriaExpanded(popoverInvoker.get(element), true);\n popoverFocusingSteps(element);\n if (shouldRestoreFocus && originallyFocusedElement && element.popover === \"auto\") {\n previouslyFocusedElements.set(element, originallyFocusedElement);\n }\n queuePopoverToggleEventTask(element, \"closed\", \"open\");\n}\nfunction hidePopover(element, focusPreviousElement = false, fireEvents = false) {\n var _a, _b;\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n const document2 = element.ownerDocument;\n if ([\"auto\", \"hint\"].includes(element.popover)) {\n hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n }\n const autoList = autoPopoverList.get(document2) || /* @__PURE__ */ new Set();\n const autoPopoverListContainsElement = autoList.has(element) && lastSetElement(autoList) === element;\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 (autoPopoverListContainsElement && lastSetElement(autoList) !== element) {\n hideAllPopoversUntil(element, focusPreviousElement, fireEvents);\n }\n if (!checkPopoverValidity(element, true)) {\n return;\n }\n }\n (_a = topLayerElements.get(document2)) == null ? void 0 : _a.delete(element);\n autoList.delete(element);\n (_b = hintPopoverList.get(document2)) == null ? void 0 : _b.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}\nfunction closeAllOpenPopovers(document2, focusPreviousElement = false, fireEvents = false) {\n let popover = topmostAutoOrHintPopover(document2);\n while (popover) {\n hidePopover(popover, focusPreviousElement, fireEvents);\n popover = topmostAutoOrHintPopover(document2);\n }\n}\nfunction closeAllOpenPopoversInList(list, focusPreviousElement = false, fireEvents = false) {\n let popover = topMostPopoverInList(list);\n while (popover) {\n hidePopover(popover, focusPreviousElement, fireEvents);\n popover = topMostPopoverInList(list);\n }\n}\nfunction hidePopoverStackUntil(endpoint, set, focusPreviousElement, fireEvents) {\n let repeatingHide = false;\n let hasRunOnce = false;\n while (repeatingHide || !hasRunOnce) {\n hasRunOnce = true;\n let lastToHide = null;\n let foundEndpoint = false;\n for (const popover of set) {\n if (popover === endpoint) {\n foundEndpoint = true;\n } else if (foundEndpoint) {\n lastToHide = popover;\n break;\n }\n }\n if (!lastToHide) return;\n while (getPopoverVisibilityState(lastToHide) === \"showing\" && set.size) {\n hidePopover(lastSetElement(set), focusPreviousElement, fireEvents);\n }\n if (set.has(endpoint) && lastSetElement(set) !== endpoint) {\n repeatingHide = true;\n }\n if (repeatingHide) {\n fireEvents = false;\n }\n }\n}\nfunction hideAllPopoversUntil(endpoint, focusPreviousElement, fireEvents) {\n var _a, _b;\n const document2 = endpoint.ownerDocument || endpoint;\n if (endpoint instanceof Document) {\n return closeAllOpenPopovers(document2, focusPreviousElement, fireEvents);\n }\n if ((_a = hintPopoverList.get(document2)) == null ? void 0 : _a.has(endpoint)) {\n hidePopoverStackUntil(\n endpoint,\n hintPopoverList.get(document2),\n focusPreviousElement,\n fireEvents\n );\n return;\n }\n closeAllOpenPopoversInList(\n hintPopoverList.get(document2) || /* @__PURE__ */ new Set(),\n focusPreviousElement,\n fireEvents\n );\n if (!((_b = autoPopoverList.get(document2)) == null ? void 0 : _b.has(endpoint))) {\n return;\n }\n hidePopoverStackUntil(\n endpoint,\n autoPopoverList.get(document2),\n focusPreviousElement,\n fireEvents\n );\n}\nvar popoverPointerDownTargets = /* @__PURE__ */ new WeakMap();\nfunction lightDismissOpenPopovers(event) {\n if (!event.isTrusted) return;\n const target = event.composedPath()[0];\n if (!target) return;\n const document2 = target.ownerDocument;\n const topMostPopover = topmostAutoOrHintPopover(document2);\n if (!topMostPopover) return;\n const ancestor = topMostClickedPopover(target);\n if (ancestor && event.type === \"pointerdown\") {\n popoverPointerDownTargets.set(document2, ancestor);\n } else if (event.type === \"pointerup\") {\n const sameTarget = popoverPointerDownTargets.get(document2) === ancestor;\n popoverPointerDownTargets.delete(document2);\n if (sameTarget) {\n hideAllPopoversUntil(ancestor || document2, false, true);\n }\n }\n}\nvar initialAriaExpandedValue = /* @__PURE__ */ new WeakMap();\nfunction setInvokerAriaExpanded(el, force = false) {\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\n// src/popover.ts\nvar ShadowRoot2 = globalThis.ShadowRoot || function() {\n};\nfunction isSupported() {\n return typeof HTMLElement !== \"undefined\" && typeof HTMLElement.prototype === \"object\" && \"popover\" in HTMLElement.prototype;\n}\nfunction isHintSupported() {\n const el = document.createElement(\"div\");\n el.setAttribute(\"popover\", \"hint\");\n return el.popover === \"hint\";\n}\nfunction isPolyfilled() {\n var _a;\n return Boolean(\n ((_a = document.body) == null ? void 0 : _a.showPopover) && !/native code/i.test(document.body.showPopover.toString())\n );\n}\nfunction patchSelectorFn(object, name, mapper) {\n const original = object[name];\n Object.defineProperty(object, name, {\n value(selector) {\n return original.call(this, mapper(selector));\n }\n });\n}\nvar nonEscapedPopoverSelector = /(^|[^\\\\]):popover-open\\b/g;\nfunction hasLayerSupport() {\n return typeof globalThis.CSSLayerBlockRule === \"function\";\n}\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}\nvar popoverStyleSheet = null;\nfunction injectStyles(root) {\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}\nfunction apply() {\n if (typeof window === \"undefined\") return;\n window.ToggleEvent = window.ToggleEvent || ToggleEvent;\n function rewriteSelector(selector) {\n if (selector == null ? void 0 : selector.includes(\":popover-open\")) {\n selector = selector.replace(\n nonEscapedPopoverSelector,\n \"$1.\\\\:popover-open\"\n );\n }\n return selector;\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 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 if (value == \"hint\") return \"hint\";\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 showPopover: {\n enumerable: true,\n configurable: true,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n value(options = {}) {\n showPopover(this);\n }\n },\n hidePopover: {\n enumerable: true,\n configurable: true,\n value() {\n hidePopover(this, true, true);\n }\n },\n togglePopover: {\n enumerable: true,\n configurable: true,\n value(options = {}) {\n if (typeof options === \"boolean\") {\n options = { force: options };\n }\n if (visibilityState.get(this) === \"showing\" && options.force === void 0 || options.force === false) {\n hidePopover(this, true, true);\n } else if (options.force === void 0 || options.force === true) {\n showPopover(this);\n }\n return visibilityState.get(this) === \"showing\";\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) {\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 const popoverTargetAssociatedElements = /* @__PURE__ */ new WeakMap();\n function applyPopoverInvokerElementMixin(ElementClass) {\n Object.defineProperties(ElementClass.prototype, {\n popoverTargetElement: {\n enumerable: true,\n configurable: true,\n set(targetElement) {\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 (this.localName === \"input\" && this.type !== \"reset\" && this.type !== \"image\" && this.type !== \"button\") {\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 ((root instanceof Document || root instanceof ShadowRoot2) && idref) {\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 = (this.getAttribute(\"popovertargetaction\") || \"\").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 applyPopoverInvokerElementMixin(HTMLButtonElement);\n applyPopoverInvokerElementMixin(HTMLInputElement);\n const handleInvokerActivation = (event) => {\n if (event.defaultPrevented) {\n return;\n }\n const composedPath = event.composedPath();\n const target = composedPath[0];\n if (!(target instanceof Element) || (target == null ? void 0 : target.shadowRoot)) {\n return;\n }\n const root = getRootNode(target);\n if (!(root instanceof ShadowRoot2 || root instanceof Document)) {\n return;\n }\n const invoker = composedPath.find(\n (el) => {\n var _a;\n return (_a = el.matches) == null ? void 0 : _a.call(el, \"[popovertargetaction],[popovertarget]\");\n }\n );\n if (invoker) {\n popoverTargetAttributeActivationBehavior(invoker);\n event.preventDefault();\n return;\n }\n };\n const onKeydown = (event) => {\n const key = event.key;\n const target = event.target;\n if (!event.defaultPrevented && target && (key === \"Escape\" || key === \"Esc\")) {\n hideAllPopoversUntil(target.ownerDocument, true, true);\n }\n };\n const addEventListeners = (root) => {\n root.addEventListener(\"click\", handleInvokerActivation);\n root.addEventListener(\"keydown\", onKeydown);\n root.addEventListener(\"pointerdown\", lightDismissOpenPopovers);\n root.addEventListener(\"pointerup\", lightDismissOpenPopovers);\n };\n addEventListeners(document);\n injectStyles(document);\n}\nexport {\n apply,\n injectStyles,\n isHintSupported,\n isPolyfilled,\n isSupported\n};\n//# sourceMappingURL=popover-fn.js.map\n","import type { ComputePositionConfig, MiddlewareState } from '@floating-ui/dom';\nimport {\n autoUpdate,\n computePosition,\n flip,\n limitShift,\n offset,\n shift,\n size,\n} from '@floating-ui/dom';\nimport {\n isSupported,\n apply as polyfillPopover,\n} from '@oddbird/popover-polyfill/fn';\nimport {\n attr,\n getCSSProp,\n isBrowser,\n on,\n onHotReload,\n QUICK_EVENT,\n} from '../utils/utils';\n\nif (isBrowser() && !isSupported()) polyfillPopover(); // Ensure popover polyfill is loaded in browser environment only\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'ds-toggle-source': CustomEvent<Element>;\n }\n}\n\nconst ATTR_PLACE = 'data-placement';\nconst ATTR_AUTO = 'data-autoplacement';\nconst POPOVERS = new Map<HTMLElement, () => void>();\n\n// Sometimes use \"ds-toggle\" event while waiting for better support of\n// event.source (https://developer.mozilla.org/en-US/docs/Web/API/ToggleEvent/source)\nfunction handleToggle(\n event: Partial<ToggleEvent> & {\n detail?: HTMLElement;\n source?: HTMLElement;\n },\n) {\n let { newState, oldState, target: el, source = event.detail } = event;\n const isPopover = el instanceof HTMLElement && attr(el, 'popover') !== null;\n const float = isPopover && getCSSProp(el, '--_ds-floating');\n\n if (!float) return;\n if (newState === 'closed') return POPOVERS.get(el)?.(); // Cleanup on close\n if (!source) {\n const root = el.getRootNode() as Document; // Support shadow DOM\n const css = `[popovertarget=\"${el.id}\"],[commandfor=\"${el.id}\"]`;\n source = (el.id && root?.querySelector?.<HTMLElement>(css)) || undefined; // Polyfill ToggleEvent .source for older browsers\n }\n if (!source || source === el || (oldState && oldState === newState)) return; // No need to update\n\n // Use scroll-margin-bottom to measure computed arrow-size property as this does\n // not affect layout or position, makes the browser calculate the pixel value instead\n // of returning the calc() (as it would if reading the --_ds-floating-arrow-size directly)\n // and makes it possible to read the value even if ::before is not used to draw the arrow.\n el.style.scrollMarginBottom = `var(--_ds-floating-arrow-size)`;\n\n const padding = 10;\n const overscroll = getCSSProp(el, '--_ds-floating-overscroll');\n const placement = attr(el, ATTR_PLACE) || attr(source, ATTR_PLACE) || float;\n const auto = attr(el, ATTR_AUTO) || attr(source, ATTR_AUTO);\n const arrowSize = parseFloat(getCSSProp(el, 'scroll-margin-bottom')) || 0;\n const shiftProp = placement.match(/left|right/gi) ? 'Height' : 'Width';\n const shiftLimit = source[`offset${shiftProp}`] / 2 + arrowSize;\n\n if (placement === 'none') return; // No need to position\n\n const options = {\n strategy: 'absolute',\n placement,\n middleware: [\n offset(arrowSize),\n shift({\n padding,\n limiter: limitShift({ offset: { mainAxis: shiftLimit } }), // Prevent from shifing away from source\n }),\n arrowPseudo(),\n ...(auto !== 'false' ? [flip({ padding, crossAxis: false })] : []),\n ...(overscroll\n ? [\n size({\n apply({ availableHeight }) {\n if (overscroll === 'fit')\n el.style.width = `${source.offsetWidth}px`; // Use offsetWidth to include padding, matching the width of the source element\n el.style.maxHeight = `${Math.max(50, availableHeight - padding * 2)}px`;\n },\n }),\n ]\n : []),\n ],\n } as ComputePositionConfig;\n const unfloat = autoUpdate(source, el, async () => {\n if (!source?.isConnected) return POPOVERS.get(el)?.(); // Cleanup if source element is removed\n const { x, y } = await computePosition(source, el, options);\n el.style.translate = `${x}px ${y}px`;\n });\n POPOVERS.set(el, () => POPOVERS.delete(el) && unfloat());\n}\n\n// Prevent closing when mouse interacts with scrollbar\nlet IS_SCROLL: boolean | undefined;\nconst handleScrollbar = ({ type }: Event) => {\n if (type === 'mousedown') IS_SCROLL = false;\n if (type === 'scroll' && IS_SCROLL === false) IS_SCROLL = true;\n if (type === 'mouseup' && IS_SCROLL)\n for (const [popover] of POPOVERS) popover.showPopover(); // Immediately show again to prevent flicker\n};\n\nonHotReload('popover', () => [\n on(document, 'mousedown scroll mouseup', handleScrollbar, true),\n on(document, 'toggle ds-toggle-source', handleToggle, QUICK_EVENT), // Use capture since the toggle event does not bubble\n]);\n\nconst arrowPseudo = () => ({\n name: 'arrowPseudo',\n fn(data: MiddlewareState) {\n const target = data.elements.floating;\n const source = data.rects.reference;\n const x = `${Math.round(source.width / 2 + source.x - data.x)}px`;\n const y = `${Math.round(source.height / 2 + source.y - data.y)}px`;\n\n target.style.setProperty('--_ds-floating-arrow-x', x);\n target.style.setProperty('--_ds-floating-arrow-y', y);\n attr(target, 'data-floating', data.placement);\n return data;\n },\n});\n","import { attr, on, onHotReload } from '../utils/utils';\n\nconst isReadOnly = (el: unknown): el is HTMLInputElement | HTMLSelectElement =>\n (el instanceof HTMLSelectElement || el instanceof HTMLInputElement) &&\n (el.hasAttribute('readonly') || attr(el, 'aria-readonly') === 'true');\n\n// Allow tabbing when readonly, and only fix readonly input/select elements (since type select and non-text-inputs do not support readonly)\n// If radio buttons, move focus without changing checked state\nconst handleKeyDown = (e: Event & Partial<KeyboardEvent>) => {\n if (e.key !== 'Tab' && isReadOnly(e.target)) {\n const isArrow = e.key?.startsWith('Arrow'); // Always control arrow keys\n const isModifier = e.altKey || e.ctrlKey || e.metaKey; // Allow modifier keys so native functions like CMD + D to bookmark etc. still works\n\n if (isArrow || !isModifier) e.preventDefault(); // Prevent changing <select> value with keyboard, but allow non-arrow modifier keys\n if (isArrow && attr(e.target, 'type') === 'radio') {\n const all = document.querySelectorAll(`input[name=\"${e.target.name}\"]`);\n const move = e.key?.match(/Arrow(Right|Down)/) ? 1 : -1;\n const next = all.length + [...all].indexOf(e.target) + move;\n (all[next % all.length] as HTMLElement)?.focus();\n }\n }\n};\n\nconst handleClick = (e: Event) => {\n const input = (e.target as Element)?.closest?.('label')?.control || e.target;\n if (isReadOnly(input)) {\n e.preventDefault();\n input.focus();\n }\n};\n\nconst handleMouseDown = (e: Event) => {\n if (e.target instanceof HTMLSelectElement && isReadOnly(e.target))\n e.preventDefault();\n};\n\nonHotReload('readonly', () => [\n on(document, 'keydown', handleKeyDown),\n on(document, 'click', handleClick), // click needed for <label> and <input>\n on(document, 'mousedown', handleMouseDown), // mousedown needed for <select>\n]);\n","import { attr, attrOrCSS, on, onHotReload, onMutation } from '../utils/utils';\n\nconst ARIA_LABELLEDBY = 'aria-labelledby';\nconst ARIA_LABEL = 'aria-label';\nconst ATTR_TOGGLEGROUP = 'data-toggle-group';\nconst SELECTOR_TOGGLEGROUP = `[${ATTR_TOGGLEGROUP}]`;\n\nconst handleAriaAttributes = () => {\n for (const group of document.querySelectorAll(SELECTOR_TOGGLEGROUP))\n attr(group, 'aria-label', attrOrCSS(group, ATTR_TOGGLEGROUP));\n};\n\nconst handleKeydown = (event: Partial<KeyboardEvent>) => {\n const { key, target: el } = event;\n const group =\n el instanceof HTMLInputElement && el.closest(SELECTOR_TOGGLEGROUP);\n\n if (!group) return;\n if (!attr(group, ARIA_LABEL) && !attr(group, ARIA_LABELLEDBY))\n attr(group, ARIA_LABEL, attrOrCSS(group, ATTR_TOGGLEGROUP));\n if (key === 'Enter') el.click(); // Forward Enter, but no need to listen for space key, as this is handled by the browser\n if (key?.startsWith('Arrow')) {\n event.preventDefault?.();\n const inputs = [...group.getElementsByTagName('input')];\n const index = inputs.indexOf(el);\n const move = key.match(/Arrow(Right|Down)/) ? 1 : -1;\n let nextIndex = index;\n\n for (let i = 0; i < inputs.length; i++) {\n nextIndex = (inputs.length + nextIndex + move) % inputs.length;\n if (!inputs[nextIndex]?.disabled) {\n inputs[nextIndex]?.focus();\n break;\n }\n }\n }\n};\n\nonHotReload('toggle-group', () => [\n on(document, 'keydown', handleKeydown),\n onMutation(document, handleAriaAttributes, {\n attributeFilter: [ATTR_TOGGLEGROUP],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","import '../popover/popover'; // Ensure popover is imported when using individual imports, since tooltip relies on it\nimport {\n announce,\n attr,\n attrOrCSS,\n isBrowser,\n on,\n onHotReload,\n onMutation,\n QUICK_EVENT,\n tag,\n warn,\n} from '../utils/utils';\n\nlet TIP: HTMLElement | undefined;\nlet SOURCE: Element | undefined;\nlet IS_HOVERING = false;\nlet HOVER_TIMER: number | ReturnType<typeof setTimeout> = 0;\nlet SKIP_TIMER: number | ReturnType<typeof setTimeout> = 0;\nconst IS_IOS = isBrowser() && /iPad|iPhone|iPod/.test(navigator.userAgent); // Needed to omit DELAY_HOVER since iOS triggers mouseover before click\nconst ATTR_TOOLTIP = 'data-tooltip';\nconst ATTR_COLOR = 'data-color';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_DESC = 'aria-description';\nconst SELECTOR_COLOR = `[${ATTR_COLOR}]`;\nconst SELECTOR_TOOLTIP = `[${ATTR_TOOLTIP}]`;\nconst ATTR_SCHEME = 'data-color-scheme';\nconst SELECTOR_SCHEME = `[${ATTR_SCHEME}]`;\nconst SELECTOR_INTERACTIVE = 'a,button,input,label,select,textarea,[tabindex]';\nconst DELAY_HOVER = 300;\nconst DELAY_SKIP = 300;\n\n/**\n * setTooltipElement\n * @description Allows setting a custom tooltip element. It does not need to, and should not, be injected to document.body, as we inject on hover to ensure React hydration works as expected.\n * @param el The HTMLElement to use as tooltip\n */\nexport const setTooltipElement = (el?: HTMLElement | null) => {\n if (el && !(el instanceof HTMLElement))\n warn('setTooltipElement expects an HTMLElement, got: ', el);\n clearTimeout(SKIP_TIMER); // Reset when changing source\n clearTimeout(HOVER_TIMER);\n SOURCE = undefined;\n IS_HOVERING = false;\n TIP = el || undefined;\n};\n\nconst handleAriaAttributes = () => {\n for (const el of document.querySelectorAll(SELECTOR_TOOLTIP)) {\n const text = attrOrCSS(el, ATTR_TOOLTIP);\n\n if (!text) return; // Early return if no tooltip text\n if (text !== (el.getAttribute(ARIA_LABEL) || el.getAttribute(ARIA_DESC))) {\n const hasText = attr(el, 'role') !== 'img' && el.textContent?.trim(); // If role=\"img\", ignore text\n attr(el, ATTR_TOOLTIP, text); // Set data-tooltip attribute to speed up future mutations\n attr(el, ARIA_LABEL, hasText ? null : text); // Set aria-label if element does not have text\n attr(el, ARIA_DESC, hasText ? text : null); // Set aria-description if element has text\n if (!el.matches(SELECTOR_INTERACTIVE))\n warn('Missing tabindex=\"0\" attribute on: ', el);\n }\n\n // If an existing tooltip has changed programmatically, update tooltip text and announce change\n const isCurrent = el === SOURCE && TIP?.offsetHeight && TIP?.offsetWidth; // Using offsetHeight+Width to check visibility as :popover-open is not well supported by JSDOM\n const isChanged = isCurrent && text && TIP?.textContent !== text; // Only update if mutation is on source element and tooltip is open to avoid unnecessary updates\n if (isCurrent && isChanged) {\n if (TIP) TIP.textContent = text;\n if (document.activeElement === el) announce(text); // Only announce if focus is on the button\n }\n }\n};\n\nconst handleInterest = (event: Event) => {\n const { type, target } = event;\n clearTimeout(HOVER_TIMER);\n\n if (target === TIP) return; // Allow tooltip to be hovered, following https://www.w3.org/TR/WCAG21/#content-on-hover-or-focus\n\n const source = (target as Element)?.closest?.(SELECTOR_TOOLTIP);\n\n // This prevents the tooltip from reappearing on mousedown/click\n if (type === 'blur') {\n const next = (event as FocusEvent).relatedTarget as Element | null;\n if (source === SOURCE && !next?.closest?.(SELECTOR_TOOLTIP)) hideTooltip();\n return;\n }\n\n if (type === 'mouseover' && !IS_HOVERING && !IS_IOS) {\n HOVER_TIMER = setTimeout(handleInterest, DELAY_HOVER, { target }); // Delay mouse showing tooltip if not already shown\n return;\n }\n\n if (source === SOURCE) return; // No need to update\n if (!source) return hideTooltip(); // If no new anchor, cleanup previous autoUpdate\n if (!TIP) TIP = tag('div', { class: 'ds-tooltip' });\n if (!TIP.isConnected) document.body.appendChild(TIP); // Ensure connected\n\n const color = source.closest(SELECTOR_COLOR); // Match source color of source element\n const scheme = source.closest(SELECTOR_SCHEME); // Match source color-scheme of source element\n const isReset = color !== scheme && color?.contains(scheme as Node); // If data-scheme is closer to target, it will reset data-color\n\n clearTimeout(SKIP_TIMER);\n attr(TIP, 'popover', 'manual'); // Ensure popover behavior\n attr(TIP, ATTR_SCHEME, scheme?.getAttribute(ATTR_SCHEME) || null); // Fallback to null to reset if not scheme found\n attr(TIP, ATTR_COLOR, (isReset && color?.getAttribute(ATTR_COLOR)) || null); // Fallback to null to reset if not scheme found\n TIP.textContent = attr(source, ATTR_TOOLTIP);\n TIP.showPopover();\n TIP.dispatchEvent(new CustomEvent('ds-toggle-source', { detail: source })); // Since showPopover({ source }) is not supported in all browsers yet\n IS_HOVERING = true;\n SOURCE = source;\n};\n\nconst hideTooltip = () => TIP?.isConnected && TIP.popover && TIP.hidePopover(); // Only hide if connected and activated\n\nconst handleClose = (event?: Partial<ToggleEvent & KeyboardEvent>) => {\n if (event?.type === 'keydown')\n return event?.key === 'Escape' && hideTooltip();\n if (!event) IS_HOVERING = false;\n else if (event.target === TIP && event.newState === 'closed') {\n SOURCE = undefined;\n SKIP_TIMER = setTimeout(handleClose, DELAY_SKIP);\n }\n};\n\nonHotReload('tooltip', () => [\n on(document, 'blur focus mouseover', handleInterest, QUICK_EVENT),\n on(document, 'toggle keydown', handleClose, QUICK_EVENT),\n onMutation(document, handleAriaAttributes, {\n attributeFilter: [ATTR_TOOLTIP],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar IS_FIREFOX = /firefox/i.test(AGENT);\nvar IS_IOS = /iPad|iPhone|iPod/.test(AGENT);\nvar _a;\nvar IS_MAC = IS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar SUPPORTS_CONSTRUCTED_CSS = IS_BROWSER && window.CSSStyleSheet && document.adoptedStyleSheets;\nvar EVENT_ONCE = { once: true, capture: true, passive: true };\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar FOCUS_OUTLINE = `outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color`;\nvar SAFE_MULTISELECTABLE = `${IS_ANDROID ? \"data\" : \"aria\"}-multiselectable`;\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar on = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\nvar off = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.removeEventListener(type, ...options);\n};\nvar attachStyle = (el, css) => {\n const root = el.shadowRoot || el.attachShadow({ mode: \"open\" });\n if (!root.querySelector(\"slot\")) root.append(tag(\"slot\"));\n if (!root.querySelector(\"style\")) {\n if (!SUPPORTS_CONSTRUCTED_CSS) root.append(tag(\"style\", null, css));\n else {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n }\n }\n return root;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? void 0 : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar getFocusedElement = (node) => getRoot(node).activeElement;\nvar useId = (el) => {\n if (!el || !IS_BROWSER) return null;\n if (!window.uElementsId) window.uElementsId = {};\n if (!el.id) {\n const node = el.nodeName.toLowerCase();\n if (!window.uElementsId[node]) window.uElementsId[node] = 1;\n el.id = `:${node}${window.uElementsId[node]++}`;\n }\n return el.id;\n};\nvar tag = (tagName, attrs, content) => {\n const el = document.createElement(tagName);\n if (content) el.textContent = content;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !isBrowser() || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar setValue = (input, data, type = \"\") => {\n var _a2, _b;\n const event = { bubbles: true, composed: true, data, inputType: type };\n const proto = HTMLInputElement.prototype;\n input.dispatchEvent(new InputEvent(\"beforeinput\", event));\n (_b = (_a2 = Object.getOwnPropertyDescriptor(proto, \"value\")) == null ? void 0 : _a2.set) == null ? void 0 : _b.call(input, data);\n input.dispatchEvent(new InputEvent(\"input\", event));\n input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\nvar IS_PRESS = false;\nvar isPointerDown = (e) => {\n if ((e == null ? void 0 : e.type) === \"pointerup\") IS_PRESS = false;\n if ((e == null ? void 0 : e.type) === \"pointerdown\") {\n IS_PRESS = true;\n on(document, \"pointerup\", isPointerDown, EVENT_ONCE);\n }\n return IS_PRESS;\n};\nvar declarativeShadowRoot = (style, slot = \"<slot></slot>\") => `<template shadowrootmode=\"open\">${slot}<style>${style}</style></template>`;\nvar preventSubmit = (input) => {\n const form = attr(input, \"form\");\n attr(input, \"form\", \"#\");\n setTimeout(restoreSubmit, 0, input, form);\n};\nvar restoreSubmit = (input, form) => attr(input, \"form\", form);\nvar LIVE;\nvar LIVE_SR_FIX = 0;\nvar LIVE_CLEAR = 0;\nvar speak = (text) => {\n clearTimeout(LIVE_CLEAR);\n if (!LIVE) {\n LIVE = tag(\"div\", { \"aria-live\": \"assertive\" });\n LIVE.style.overflow = \"hidden\";\n LIVE.style.position = \"fixed\";\n LIVE.style.whiteSpace = \"nowrap\";\n LIVE.style.width = \"1px\";\n }\n if (!LIVE.isConnected) document.body.append(LIVE);\n if (text === \"\") LIVE.textContent = \"\";\n if (text) {\n LIVE.textContent = `${text}${LIVE_SR_FIX++ % 2 ? \"\\xA0\" : \"\"}`;\n LIVE_CLEAR = setTimeout(speak, !IS_MAC && IS_FIREFOX ? 2e3 : 300, \"\");\n }\n};\n\n// u-option.ts\nvar DISABLED = \"disabled\";\nvar SELECTED = \"selected\";\nvar UHTMLOptionElement = class extends UHTMLElement {\n constructor() {\n super(...arguments);\n this._skipAttrChange = false;\n }\n // Using ES2015 syntax for backwards compatibility\n static get observedAttributes() {\n return [\"id\", DISABLED, SELECTED];\n }\n connectedCallback() {\n if (IS_ANDROID) this.tabIndex = -1;\n if (!this.hasAttribute(\"role\")) attr(this, \"role\", \"option\");\n attr(this, \"aria-disabled\", `${this.disabled}`);\n attr(this, \"aria-selected\", `${this.selected}`);\n useId(this);\n }\n attributeChangedCallback(name) {\n if (this._skipAttrChange) return;\n this._skipAttrChange = true;\n if (name === \"id\") useId(this);\n else attr(this, `aria-${name}`, `${this[name]}`);\n this._skipAttrChange = false;\n }\n /** Sets or retrieves whether the option in the list box is the default item. */\n get defaultSelected() {\n return this[SELECTED];\n }\n set defaultSelected(value) {\n this[SELECTED] = value;\n }\n get disabled() {\n return attr(this, DISABLED) !== null;\n }\n set disabled(value) {\n attr(this, DISABLED, value ? \"\" : null);\n }\n /** Retrieves a reference to the form that the object is embedded in. */\n get form() {\n return this.closest(\"form\");\n }\n /** Sets or retrieves the ordinal position of an option in a list box. */\n get index() {\n var _a2;\n return [\n ...((_a2 = this.parentElement) == null ? void 0 : _a2.options) || [this]\n ].indexOf(this);\n }\n /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */\n get label() {\n var _a2;\n return (_a2 = attr(this, \"label\")) != null ? _a2 : this.text;\n }\n set label(value) {\n attr(this, \"label\", value);\n }\n get selected() {\n return attr(this, SELECTED) !== null;\n }\n set selected(value) {\n attr(this, SELECTED, value ? \"\" : null);\n }\n /** Sets or retrieves the text string specified by the option tag. */\n get text() {\n var _a2;\n return ((_a2 = this.textContent) == null ? void 0 : _a2.trim()) || \"\";\n }\n set text(text) {\n this.textContent = text;\n }\n /** Sets or retrieves the value which is returned to the server when the form control is submitted. */\n get value() {\n var _a2;\n return (_a2 = attr(this, \"value\")) != null ? _a2 : this.text;\n }\n set value(value) {\n attr(this, \"value\", value);\n }\n};\ncustomElements.define(\"u-option\", UHTMLOptionElement);\n\n// u-datalist.ts\nvar DATA_ACTIVE = \"data-activedescendant\";\nvar ARIA_HIDDEN = \"aria-hidden\";\nvar UHTMLDataListStyle = `${DISPLAY_BLOCK}\n::slotted([role=\"option\"]) { display: block; cursor: pointer }\n::slotted([role=\"option\"][${DATA_ACTIVE}]) { ${FOCUS_OUTLINE} }\n::slotted([role=\"option\"]:is([${ARIA_HIDDEN}=\"true\"], [disabled], [hidden])) { display: none !important }`;\nvar UHTMLDataListShadowRoot = declarativeShadowRoot(UHTMLDataListStyle);\nvar LIVE_TIMER;\nvar EVENTS_IDLE_CAPTURE = \"focus click keydown\";\nvar EVENTS_ACTIVE_BUBBLE = \"focusout input pointerdown\";\nvar TEXTS = {\n of: \"of\",\n plural: \"%d hits\",\n singular: \"%d hit\"\n};\nvar UHTMLDataListElement = class extends UHTMLElement {\n constructor() {\n super();\n // Used to consistently remember root for event delegation\n this._texts = __spreadValues({}, TEXTS);\n attachStyle(this, UHTMLDataListStyle);\n }\n static get observedAttributes() {\n return [\"id\", ...Object.keys(TEXTS).map((key) => `data-sr-${key}`)];\n }\n connectedCallback() {\n this._root = getRoot(this);\n attr(this, \"hidden\", \"\");\n attr(this, \"role\", \"listbox\");\n attr(this, \"tabindex\", \"-1\");\n on(this._root, EVENTS_IDLE_CAPTURE, this, true);\n this._umutate = onMutation(this, onMutations, {\n attributeFilter: [\"disabled\", \"hidden\", \"label\", \"value\"],\n // Listening to hidden attribute to update on open\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true\n });\n }\n disconnectedCallback() {\n var _a2;\n if (this._root) off(this._root, EVENTS_IDLE_CAPTURE, this, true);\n if (this._root) off(this._root, EVENTS_ACTIVE_BUBBLE, this);\n setInputAttributes(this, null);\n (_a2 = this._umutate) == null ? void 0 : _a2.call(this);\n this._umutate = this._root = this._input = void 0;\n }\n attributeChangedCallback(prop, _prev, next) {\n const text = prop == null ? void 0 : prop.split(\"data-sr-\")[1];\n if (TEXTS[text]) this._texts[text] = next || TEXTS[text];\n else if (this.id) {\n const selector = `input[list=\"${this.id}\"]`;\n const input = getRoot(this).querySelector(selector);\n if (input) setInputAttributes(this, input);\n }\n }\n handleEvent(event) {\n if (event.defaultPrevented) return;\n if (event.type === \"focus\") onFocus(this, event);\n if (event.type === \"focusout\") onBlur(this, event);\n if (event.type === \"click\") onClick(this, event);\n if (event.type === \"input\") onMutations(this);\n if (event.type === \"keydown\") onKeyDown(this, event);\n if (event.type === \"pointerdown\") onPointerDown(this, event);\n }\n get options() {\n const el = !this._options && this.querySelector('[role=\"option\"],option');\n if (el) this._options = this.getElementsByTagName(el == null ? void 0 : el.nodeName);\n return this._options || this.getElementsByTagName(\"option\");\n }\n};\nvar isDisabled = (el) => el.disabled || el.readOnly;\nvar isInput = (el) => el instanceof HTMLInputElement;\nvar isVisible = (el) => attr(el, ARIA_HIDDEN) !== \"true\" && el.clientHeight;\nvar setExpanded = (self, open) => {\n if (self._input) attr(self._input, \"aria-expanded\", `${open}`);\n if (!self.isConnected || self.hidden !== open) return;\n if (!open) setActive(self);\n if (self.popover) self.togglePopover(open);\n if (open) setTimeout(() => clearTimeout(LIVE_TIMER));\n self.hidden = !open;\n};\nvar setActive = (self, opt) => {\n if (self._input) attr(self._input, \"aria-activedescendant\", useId(opt));\n for (const o of self.options) attr(o, DATA_ACTIVE, o === opt ? \"\" : null);\n opt == null ? void 0 : opt.scrollIntoView({ block: \"nearest\" });\n};\nvar setInputAttributes = (self, setup) => {\n const input = setup || self._input;\n if (!input) return;\n if (self.popover) {\n attr(self, \"popover\", \"manual\");\n attr(input, \"popovertarget\", setup && useId(self));\n }\n attr(input, \"aria-autocomplete\", setup && \"list\");\n attr(input, \"aria-controls\", setup && useId(self));\n attr(input, \"autocomplete\", setup && \"off\");\n attr(input, \"enterkeyhint\", \"done\");\n attr(input, \"role\", setup && !isDisabled(input) ? \"combobox\" : null);\n};\nvar onFocus = (self, { target: el }) => {\n var _a2, _b;\n if (self._input === el) return;\n if (isInput(el) && el.getAttribute(\"list\") === self.id) {\n setInputAttributes(self, null);\n setInputAttributes(self, el);\n if (isDisabled(el)) return;\n if (self._root) on(self._root, EVENTS_ACTIVE_BUBBLE, self);\n attr(self, \"aria-label\", ((_b = (_a2 = el.labels) == null ? void 0 : _a2[0]) == null ? void 0 : _b.textContent.trim()) || null);\n speak();\n self._input = el;\n if (IS_ANDROID) setExpanded(self, true);\n } else onBlurred(self);\n};\nvar onBlur = (self, event) => {\n isPointerDown() ? event.stopImmediatePropagation() : IS_ANDROID || setTimeout(onBlurred, 0, self, event);\n};\nvar onBlurred = (self) => {\n const focus = getFocusedElement(self);\n if (self._input === focus || self.contains(focus)) return;\n if (self._root) off(self._root, EVENTS_ACTIVE_BUBBLE, self);\n setExpanded(self, false);\n self._input = void 0;\n};\nvar onPointerDown = (self, event) => self.contains(event.target) && isPointerDown(event);\nvar onClick = (self, event) => {\n var _a2;\n if (isInput(event.target)) onFocus(self, event);\n if (self._input === event.target) return setExpanded(self, true);\n if (!self.contains(event.target)) return onBlurred(self);\n for (const opt of self.options)\n if (opt.contains(event.target)) {\n (_a2 = self._input) == null ? void 0 : _a2.focus();\n if (self._input) setValue(self._input, opt.value);\n return setExpanded(self, attr(self, SAFE_MULTISELECTABLE) === \"true\");\n }\n};\nvar onKeyDown = (self, event) => {\n if (isInput(event.target)) onFocus(self, event);\n if (self._input !== event.target) return;\n const { key, ctrlKey: c, metaKey: m, shiftKey: s, altKey: alt } = event;\n if (c || m || s || key === \"Tab\" || alt && !key.startsWith(\"Arrow\")) return;\n if (key === \"Escape\" && !self.hidden) event.preventDefault();\n setExpanded(self, key !== \"Escape\");\n const isEnter = key === \"Enter\";\n const active = attr(self._input, \"aria-activedescendant\");\n const opts = [];\n let prev = -1;\n let next = -1;\n for (const opt of self.options)\n if (isVisible(opt)) {\n opts.push(opt);\n if (opt.id === active) prev = opts.length - 1;\n }\n if (!alt && key === \"ArrowDown\") next = (prev + 1) % opts.length;\n if (!alt && key === \"ArrowUp\") next = (prev || opts.length) - 1;\n if (~prev) {\n if (key === \"Home\" || key === \"PageUp\") next = 0;\n if (key === \"End\" || key === \"PageDown\") next = opts.length - 1;\n if (isEnter) next = prev;\n }\n if (opts[next]) {\n event.preventDefault();\n self._input.focus();\n }\n if (isEnter && opts[next]) {\n event.stopImmediatePropagation();\n preventSubmit(self._input);\n opts[next].click();\n } else setActive(self, opts[next]);\n};\nvar onMutations = (self) => {\n var _a2;\n if (!self._input || self.hidden) return;\n const query = self._input.value.toLowerCase().trim() || \"\";\n const filter = !self.hasAttribute(\"data-nofilter\");\n const hide = [];\n const show = [];\n for (const opt of self.options) (opt.disabled || opt.hidden || filter && !opt.label.toLowerCase().includes(query) ? hide : show).push(opt);\n for (const opt of hide) attr(opt, ARIA_HIDDEN, \"true\");\n for (const opt of show) attr(opt, ARIA_HIDDEN, \"false\");\n clearTimeout(LIVE_TIMER);\n LIVE_TIMER = setTimeout(speakHits, 500, self, show);\n if (IS_IOS)\n show.forEach((opt, index, { length }) => {\n attr(opt, \"title\", `${index + 1} ${self._texts.of} ${length}`);\n });\n (_a2 = self._umutate) == null ? void 0 : _a2.takeRecords();\n};\nvar speakHits = (self, show) => !self.hidden && self._input === getFocusedElement(self) && speak(\n `${show.some(({ value }) => value) ? `${self._texts[show[1] ? \"plural\" : \"singular\"]}`.replace(\"%d\", `${show.length}`) : self.innerText}`\n);\nif (isBrowser())\n Object.defineProperty(HTMLInputElement.prototype, \"list\", {\n configurable: true,\n enumerable: true,\n get() {\n const id = attr(this, \"list\");\n return id && getRoot(this).getElementById(id);\n }\n });\ncustomElements.define(\"u-datalist\", UHTMLDataListElement);\n\nexport { UHTMLDataListElement, UHTMLDataListShadowRoot, UHTMLDataListStyle };\n","import {\n attr,\n attrOrCSS,\n customElements,\n DSElement,\n debounce,\n on,\n onMutation,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-breadcrumbs': DSBreadcrumbsElement;\n }\n}\n\nconst ATTR_LABEL = 'aria-label';\n\nexport class DSBreadcrumbsElement extends DSElement {\n _items?: HTMLCollectionOf<HTMLAnchorElement>; // Using underscore instead of private fields for backwards compatibility\n _label: string | null = null;\n _unresize?: () => void;\n _unmutate?: () => void;\n\n static get observedAttributes() {\n return [ATTR_LABEL]; // Using ES2015 syntax for backwards compatibility\n }\n connectedCallback() {\n const resize = debounce(() => render(this), 100);\n this._label = attrOrCSS(this, ATTR_LABEL); // Label can have been set by attributeChangedCallback before connectedCallback\n this._items = this.getElementsByTagName('a'); // Speed up by caching HTMLCollection\n this._unresize = on(window, 'resize', resize);\n this._unmutate = onMutation(this, render, {\n childList: true,\n subtree: true,\n });\n }\n attributeChangedCallback(_name: string, _prev?: string, next?: string) {\n if (!this._unmutate || !next) return; // Ensure we do not run unless connected and we have a label to set\n this._label = next; // Update cacheed label if aria-label attribute changes\n render(this);\n }\n disconnectedCallback() {\n this._unresize?.();\n this._unmutate?.();\n this._unresize = this._unmutate = this._items = undefined;\n }\n}\n\nconst render = (self: DSBreadcrumbsElement) => {\n const lastItem = self._items?.[self._items.length - 1];\n const lastItemInList = lastItem?.parentElement === self ? null : lastItem;\n const isListHidden = !lastItemInList?.offsetHeight;\n\n attr(self, 'role', isListHidden ? null : 'navigation');\n attr(self, ATTR_LABEL, isListHidden ? null : self._label); // Remove aria-label if list is hidden to prevent screen readers from announcing as breadcrumbs\n\n for (const item of self._items || [])\n attr(item, 'aria-current', item === lastItemInList ? 'page' : null);\n};\n\ncustomElements.define('ds-breadcrumbs', DSBreadcrumbsElement);\n","import {\n attr,\n customElements,\n DSElement,\n off,\n on,\n onMutation,\n QUICK_EVENT,\n useId,\n warn,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-error-summary': DSErrorSummaryElement;\n }\n}\n\nexport class DSErrorSummaryElement extends DSElement {\n _unmutate?: () => void; // Using underscore instead of private fields for backwards compatibility\n\n connectedCallback() {\n on(this, 'animationend', this, QUICK_EVENT); // Using animationend to detect when element is visible\n attr(this, 'role', 'group');\n attr(this, 'tabindex', '-1');\n this._unmutate = onMutation(this, render, {\n childList: true,\n subtree: true,\n });\n this.focus();\n }\n handleEvent({ target }: Event) {\n if (target === this) this.focus(); // Ignore if animation event was triggered by child\n }\n disconnectedCallback() {\n off(this, 'animationend', this, QUICK_EVENT);\n this._unmutate?.();\n this._unmutate = undefined;\n }\n}\n\nconst render = (self: DSErrorSummaryElement) => {\n const label = attr(self, 'aria-label')?.trim();\n const labelledBy = attr(self, 'aria-labelledby')?.trim();\n const heading = self.querySelector('h2,h3,h4,h5,h6');\n if (heading && !label && !labelledBy) {\n attr(self, 'aria-labelledby', useId(heading));\n }\n if (!heading && !label && !labelledBy) {\n warn(\n 'Missing accessible name on:',\n self,\n '\\nAdd a heading (h2–h6), or set aria-label or aria-labelledby to provide an accessible name for screen readers.',\n );\n }\n};\n\ncustomElements.define('ds-error-summary', DSErrorSummaryElement);\n","import {\n announce,\n attr,\n attrOrCSS,\n customElements,\n DSElement,\n debounce,\n isWindows,\n on,\n onHotReload,\n onMutation,\n QUICK_EVENT,\n useId,\n warn,\n} from '../utils/utils';\n\n// TODO: Document that Validation must be hidden with \"hidden\" attribute (or completely removed from DOM), not display: none\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-field': DSFieldElement;\n }\n}\n\nconst ATTR_INVALID = 'aria-invalid';\nconst ATTR_DESCRIBEDBY = 'aria-describedby';\nconst ATTR_INDETERMINATE = 'data-indeterminate';\nconst COUNTER_DEBOUNCE = isWindows() ? 800 : 200; // Longer debounce on Windows due to NVDA performance\nconst COUNTS = new WeakMap<HTMLInputElement, Element>(); // Using WeakMap so removed inputs/counts does not cause memory leaks\nconst FIELDS = new Map<DSFieldElement, string[]>(); // Map of Field and its describedby IDs so we can identify the ones we add/remove\nconst VALIDATIONS = new WeakSet<HTMLInputElement>(); // Used to ensure we only take control of aria-invalid if the current is or has been a validation element\nconst WARNING_MULTIPLE_INPUTS = `Fields should only have one input element. Use <fieldset> to group multiple fields:`;\n\nconst handleFieldMutations = (_doc: Node, records: MutationRecord[] = []) => {\n for (const { target } of records) {\n const isFieldset = target instanceof HTMLFieldSetElement;\n for (const [field] of FIELDS)\n if (isFieldset ? target.contains(field) : field.contains(target))\n handleFieldMutation(field);\n }\n};\n\nconst handleFieldMutation = (field: DSFieldElement) => {\n const labels: HTMLLabelElement[] = [];\n const nextDescs: string[] = []; // Keep track of descriptions we are adding in this mutation\n const prevDescs = FIELDS.get(field) || []; // Retrieve previously managed IDs for this field\n let input: HTMLInputElement | undefined;\n let counter: Element | undefined;\n let hasValidation = false;\n let invalid = false;\n\n for (const el of field.getElementsByTagName('*')) {\n if (el instanceof HTMLLabelElement) labels.push(el);\n if ((el as HTMLElement).hidden) continue; // Skip hidden elements except labels\n if (isInputLike(el)) {\n if (input) warn(WARNING_MULTIPLE_INPUTS, field);\n else input = el; // Only register if visible input\n } else {\n const type = el.getAttribute('data-field'); // Using getAttribute instead of attr for best performance\n if (type === 'counter') counter = el;\n if (type === 'validation') {\n nextDescs.unshift(useId(el));\n hasValidation = true;\n invalid = invalid || isInvalid(el);\n } else if (type) nextDescs.push(useId(el)); // Adds both counter and descriptions\n }\n }\n\n if (!input) return; // Do not warn about missing input as virtual DOM libraries might give false positives\n if (counter) COUNTS.set(input, counter);\n for (const label of labels) attr(label, 'for', useId(input));\n\n const fieldsetValidation = field\n .closest('fieldset')\n ?.querySelector<HTMLElement>(':scope > [data-field=\"validation\"]');\n\n // Connect fieldset validation to inputs\n if (fieldsetValidation && !fieldsetValidation?.hidden) {\n hasValidation = true;\n invalid = invalid || isInvalid(fieldsetValidation);\n nextDescs.unshift(useId(fieldsetValidation));\n }\n\n // Add support for data-indeterminate attribute as this normally can only be set by javascript\n const indeterminate = attr(input, ATTR_INDETERMINATE);\n if (indeterminate) input.indeterminate = indeterminate === 'true';\n\n // Expand click area to ds-field if radio/checkbox\n const isBoolish = input.type === 'radio' || input.type === 'checkbox';\n if (isBoolish) attr(field, 'data-clickdelegatefor', useId(input));\n\n // Setup aria-describedby, but repsect existing ids in aria-describedby\n const describedby = attr(input, ATTR_DESCRIBEDBY)?.trim().split(/\\s+/);\n const keep = describedby?.filter((id) => !prevDescs.includes(id)) || []; // Find non-ds-field-managed aria-describedby IDs\n attr(input, ATTR_DESCRIBEDBY, [...nextDescs, ...keep].join(' ') || null);\n FIELDS.set(field, nextDescs);\n\n // Only manage aria-invalid when field has validation elements, and aria-invalid does not already exist\n const hadValidation = VALIDATIONS.has(input);\n if (hasValidation && !hadValidation && !input.hasAttribute(ATTR_INVALID)) {\n attr(input, ATTR_INVALID, 'true');\n VALIDATIONS.add(input);\n } else if (!hasValidation && hadValidation) {\n attr(input, ATTR_INVALID, null); // Remove aria-invalid\n VALIDATIONS.delete(input);\n }\n\n handleFieldInput(input); // Update counter and textarea sizing\n};\n\n// Used as fallback in tests when CSS is not loaded\nconst TEXTS = {\n over: '%d tegn for mye',\n under: '%d tegn igjen',\n};\n\nconst handleFieldInput = (e: Event | Element) => {\n const input = ((e as Event).target || e) as HTMLInputElement;\n const counter = COUNTS.get(input);\n\n if (counter?.isConnected) {\n const limit = Number(attr(counter, 'data-limit')) || 0;\n const count = limit - input.value.length;\n const state = count < 0 ? 'over' : 'under';\n const label = (\n attrOrCSS(counter, `data-${state}`) || TEXTS[state]\n )?.replace('%d', `${Math.abs(count)}`);\n\n attr(counter, 'data-label', label); // Using attribute to prevent hydation errors, not using aria-label to make axe tests happy\n attr(counter, 'data-state', state);\n attr(counter, 'data-color', count < 0 ? 'danger' : null);\n\n // Only update live region when user is actually typing\n if ((e as Event).type === 'input' && label)\n debouncedCounterLiveRegion(input, label); // Debounce live region to avoid NVDA interupting announcing typed text\n }\n if (input instanceof HTMLTextAreaElement) {\n input.style.setProperty('--_ds-field-sizing', 'auto');\n input.style.setProperty('--_ds-field-sizing', `${input.scrollHeight}px`);\n }\n};\n\nconst debouncedCounterLiveRegion = debounce((input: Element, text: string) => {\n if (document.activeElement === input) announce(text); // Only announce if input is still focused\n}, COUNTER_DEBOUNCE);\n\nconst isInvalid = (el: Element) => el.getAttribute('data-color') !== 'success';\nconst isInputLike = (el: unknown): el is HTMLInputElement =>\n el instanceof HTMLElement &&\n 'validity' in el && // Adds support for custom elements implemeted with attachInternals()\n !(el instanceof HTMLButtonElement) && // But skip <button> elements\n (el as HTMLInputElement).type !== 'hidden'; // And skip input type=\"hidden\"\n\n// Custom element is used to performantly keep track of fields on the page\nexport class DSFieldElement extends DSElement {\n connectedCallback() {\n FIELDS.set(this, []); // Register field\n handleFieldMutation(this); // Initial setup\n }\n disconnectedCallback() {\n FIELDS.delete(this);\n }\n}\n\ncustomElements.define('ds-field', DSFieldElement);\n\nonHotReload('field', () => [\n on(document, 'input', handleFieldInput, QUICK_EVENT),\n onMutation(document, handleFieldMutations, {\n attributeFilter: [\n 'data-field',\n 'data-limit',\n 'hidden', // Needed to check validation visibility\n 'id', // Needed to sync label \"for\" when ID of input/selec/textarea changes\n 'value', // Needed to detect changes in controlled React inputs as they do not trigger input events\n ATTR_INDETERMINATE,\n ],\n attributes: true,\n childList: true,\n subtree: true,\n }),\n]);\n","import {\n attr,\n attrOrCSS,\n customElements,\n DSElement,\n onMutation,\n warn,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-pagination': DSPaginationElement;\n }\n}\n\nconst ATTR_LABEL = 'aria-label';\nconst ATTR_CURRENT = 'data-current';\nconst ATTR_TOTAL = 'data-total';\nconst ATTR_HREF = 'data-href';\n\n// Expose pagination logic if wanting to do custom rendering (i.e. in React/Vue/etc)\nexport const pagination = ({ current = 1, total = 10, show = 7 }) => ({\n prev: current > 1 ? current - 1 : 0,\n next: current < total ? current + 1 : 0,\n pages: getSteps(current, total, show).map((page, index) => ({\n current: page === current && ('page' as const),\n key: `key-${page}-${index}`,\n page,\n })),\n});\n\nexport class DSPaginationElement extends DSElement {\n _unmutate?: () => void; // Using underscore instead of private fields for backwards compatibility\n _render?: () => void;\n\n static get observedAttributes() {\n return [ATTR_LABEL, ATTR_CURRENT, ATTR_TOTAL, ATTR_HREF]; // Using ES2015 syntax for backwards compatibility\n }\n connectedCallback() {\n // Check for required attributes\n const total = attr(this, ATTR_TOTAL);\n const current = attr(this, ATTR_CURRENT);\n if (current && !total) warn(`Missing ${ATTR_TOTAL} attribute on:`, this);\n if (total && !current) warn(`Missing ${ATTR_CURRENT} attribute on:`, this);\n\n attr(this, ATTR_LABEL, attrOrCSS(this, ATTR_LABEL));\n attr(this, 'role', 'navigation');\n this._unmutate = onMutation(this, render, {\n childList: true,\n subtree: true,\n });\n }\n attributeChangedCallback() {\n if (this._unmutate) render(this); // Ensure we do not run any renders before connectedCallback\n }\n disconnectedCallback() {\n this._unmutate?.();\n this._unmutate = this._render = undefined;\n }\n}\n\nconst render = (self: DSPaginationElement) => {\n const current = Number(attr(self, ATTR_CURRENT));\n const total = Number(attr(self, ATTR_TOTAL));\n\n // Allowing server side generated pagination, buy only doing client side updates if total/current attributes are provided\n if (current && total) {\n const items = self.querySelectorAll('button,a');\n const show = items.length - 2;\n const href = attr(self, ATTR_HREF);\n const { next, prev, pages } = pagination({ current, total, show });\n items.forEach((item, i) => {\n const page = i ? (items[i + 1] ? pages[i - 1]?.page : next) : prev; // First is prev, last is next\n attr(item, 'aria-current', pages[i - 1]?.current ? 'true' : null);\n attr(item, 'aria-label', `${page ?? 'hidden'}`); // Used for CSS content and to hide if more items than pages, using aria-label to make Axe tests and VoiceOver rotor happy\n attr(item, 'role', page ? null : 'none'); // Prevent validation errors for aria-hidden buttons\n attr(item, 'tabindex', page ? null : '-1');\n if (item instanceof HTMLButtonElement) attr(item, 'value', `${page}`);\n if (href && item instanceof HTMLAnchorElement)\n attr(item, 'href', href.replace('%d', `${page}`));\n });\n }\n};\n\nconst getSteps = (\n now: number,\n max: number,\n show = Number.POSITIVE_INFINITY,\n) => {\n const offset = (show - 1) / 2;\n const start = Math.max(Math.min(now - Math.floor(offset), max - show + 1), 1);\n const end = Math.min(Math.max(now + Math.ceil(offset), show), max);\n const pages = Array.from({ length: end + 1 - start }, (_, i) => i + start);\n\n if (show > 4 && start > 1) pages.splice(0, 2, 1, 0);\n if (show > 3 && end < max) pages.splice(-2, 2, 0, max);\n return pages;\n};\n\ncustomElements.define('ds-pagination', DSPaginationElement);\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar IS_FIREFOX = /firefox/i.test(AGENT);\nvar IS_IOS = /iPad|iPhone|iPod/.test(AGENT);\nvar _a;\nvar IS_MAC = IS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar SUPPORTS_CONSTRUCTED_CSS = IS_BROWSER && window.CSSStyleSheet && document.adoptedStyleSheets;\nvar EVENT_ONCE = { once: true, capture: true, passive: true };\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar FOCUS_OUTLINE = `outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color`;\nvar SAFE_MULTISELECTABLE = `${IS_ANDROID ? \"data\" : \"aria\"}-multiselectable`;\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar on = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\nvar off = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.removeEventListener(type, ...options);\n};\nvar attachStyle = (el, css) => {\n const root = el.shadowRoot || el.attachShadow({ mode: \"open\" });\n if (!root.querySelector(\"slot\")) root.append(tag(\"slot\"));\n if (!root.querySelector(\"style\")) {\n if (!SUPPORTS_CONSTRUCTED_CSS) root.append(tag(\"style\", null, css));\n else {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n }\n }\n return root;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? void 0 : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar getFocusedElement = (node) => getRoot(node).activeElement;\nvar getInputLabel = (el) => {\n var _a2;\n const label = attr(el, \"aria-label\") || \"\";\n const labels = ((_a2 = attr(el, \"aria-labelledby\")) == null ? void 0 : _a2.split(\" \")) || [];\n return [\n ...labels.map((id) => document.getElementById(id.trim() || \"-\")),\n // Get all labelledby elements\n ...Array.from(el.labels || [])\n // Get all <label> elements\n ].reduce((acc, el2) => {\n var _a3;\n return acc || ((_a3 = el2 == null ? void 0 : el2.innerText) == null ? void 0 : _a3.trim()) || \"\";\n }, label).trim();\n};\nvar useId = (el) => {\n if (!el || !IS_BROWSER) return null;\n if (!window.uElementsId) window.uElementsId = {};\n if (!el.id) {\n const node = el.nodeName.toLowerCase();\n if (!window.uElementsId[node]) window.uElementsId[node] = 1;\n el.id = `:${node}${window.uElementsId[node]++}`;\n }\n return el.id;\n};\nvar tag = (tagName, attrs, content) => {\n const el = document.createElement(tagName);\n if (content) el.textContent = content;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !isBrowser() || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar setValue = (input, data, type = \"\") => {\n var _a2, _b;\n const event = { bubbles: true, composed: true, data, inputType: type };\n const proto = HTMLInputElement.prototype;\n input.dispatchEvent(new InputEvent(\"beforeinput\", event));\n (_b = (_a2 = Object.getOwnPropertyDescriptor(proto, \"value\")) == null ? void 0 : _a2.set) == null ? void 0 : _b.call(input, data);\n input.dispatchEvent(new InputEvent(\"input\", event));\n input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n};\nvar IS_PRESS = /* @__PURE__ */ new WeakSet();\nvar isPointerDown = (el, e) => {\n if ((e == null ? void 0 : e.type) === \"pointerdown\") {\n IS_PRESS.add(el);\n on(document, \"pointerup\", () => IS_PRESS.delete(el), EVENT_ONCE);\n }\n return IS_PRESS.has(el);\n};\nvar declarativeShadowRoot = (style, slot = \"<slot></slot>\") => `<template shadowrootmode=\"open\">${slot}<style>${style}</style></template>`;\nvar preventSubmit = (input) => {\n const form = attr(input, \"form\");\n attr(input, \"form\", \"#\");\n setTimeout(restoreSubmit, 0, input, form);\n};\nvar restoreSubmit = (input, form) => attr(input, \"form\", form);\nvar getText = (el) => {\n var _a2;\n return ((_a2 = el == null ? void 0 : el.textContent) == null ? void 0 : _a2.trim()) || \"\";\n};\nvar LIVE;\nvar LIVE_SR_FIX = 0;\nvar LIVE_CLEAR = 0;\nvar speak = (text) => {\n clearTimeout(LIVE_CLEAR);\n if (!LIVE) {\n LIVE = tag(\"div\", { \"aria-live\": \"assertive\" });\n LIVE.style.overflow = \"hidden\";\n LIVE.style.position = \"fixed\";\n LIVE.style.whiteSpace = \"nowrap\";\n LIVE.style.width = \"1px\";\n }\n if (!LIVE.isConnected) document.body.append(LIVE);\n if (text === \"\") LIVE.textContent = \"\";\n if (text) {\n LIVE.textContent = `${text}${LIVE_SR_FIX++ % 2 ? \"\\xA0\" : \"\"}`;\n LIVE_CLEAR = setTimeout(speak, !IS_MAC && IS_FIREFOX ? 2e3 : 300, \"\");\n }\n};\n\n// u-combobox.ts\nvar UHTMLComboboxStyle = `${DISPLAY_BLOCK}\n:is(:host(:not([data-multiple])), :host([data-multiple=\"false\"])) [part=\"items\"] { display: none }\n[role=\"listbox\"] { display: inline-flex } /* Can not be \"contents\" as this confuses VoiceOver */\n::slotted(button[type=\"reset\"]),::slotted(del) { font: inherit; border: 0; padding: 0; background: none; color: inherit; cursor: pointer; text-decoration: none }\n::slotted(data) { cursor: pointer; pointer-events: none }\n::slotted(data)::after { padding-inline: .5ch; pointer-events: auto }\n::slotted(data)::after,::slotted(button[type=\"reset\"]:empty)::before,::slotted(del:empty)::before { content: '\\\\00D7'; content: '\\\\00D7' / '' }\n::slotted(data:focus),::slotted(del:focus),::slotted(button[type=\"reset\"]:focus) { ${FOCUS_OUTLINE} }`;\nvar UHTMLComboboxShadowRoot = declarativeShadowRoot(UHTMLComboboxStyle);\nvar IS_LIST_HIDDEN = false;\nvar ARIA_LABEL = \"aria-label\";\nvar CSS_CLEAR = `button[type=\"reset\"],del`;\nvar CSS_DATALIST = `datalist,u-datalist,[role=\"listbox\"]`;\nvar CSS_OPTION = `option,u-option,[role=\"option\"]`;\nvar EVENTS = \"blur focus click input keydown pointerdown\";\nvar FALSE = \"false\";\nvar TEXTS = {\n added: \"Added\",\n clear: \"Clear input\",\n empty: \"No selected\",\n found: \"Navigate left to find %d selected\",\n invalid: \"Invalid value\",\n items: \"Selected\",\n // Note: Not announced by NVDA\n of: \"of\",\n remove: \"Press to remove\",\n removed: \"Removed\"\n};\nvar UHTMLComboboxElement = class extends UHTMLElement {\n constructor() {\n super();\n this._focusMoved = false;\n // Used to determine if we announce through aria-live or aria-label when items are added or removed\n this._itemSingleVale = \"\";\n // Used to store current match\n this._speak = \"\";\n this._texts = __spreadValues({}, TEXTS);\n this._value = \"\";\n const root = attachStyle(this, UHTMLComboboxStyle);\n this._listbox = root.querySelector('[role=\"listbox\"]') || tag(\"div\");\n this._listbox.innerHTML = `<slot name=\"items\"></slot>`;\n attr(this._listbox, \"aria-orientation\", \"horizontal\");\n attr(this._listbox, \"role\", \"listbox\");\n attr(this._listbox, \"part\", \"items\");\n attr(this._listbox, \"tabindex\", \"-1\");\n root.prepend(this._listbox);\n }\n // Locally store value to store value before input-click\n static get observedAttributes() {\n return Object.keys(TEXTS).map((key) => `data-sr-${key}`);\n }\n connectedCallback() {\n on(this, EVENTS, this, true);\n this._umutate = onMutation(this, onMutations, {\n attributeFilter: [\"id\", \"value\", \"role\"],\n // Respond to changes in <data> value or id or role of <datalist>\n attributes: true,\n characterData: true,\n // Respond to changes in <data> textContent\n childList: true,\n subtree: true\n });\n syncInputWithItemSingleMode(this);\n syncClearWithInput(this);\n }\n attributeChangedCallback(prop, _, val) {\n const text = prop.split(\"data-sr-\")[1];\n if (TEXTS[text]) this._texts[text] = val || TEXTS[text];\n if (text === \"clear\" && this.clear)\n attr(this.clear, ARIA_LABEL, this._texts.clear);\n }\n disconnectedCallback() {\n var _a2;\n off(this, EVENTS, this, true);\n (_a2 = this._umutate) == null ? void 0 : _a2.call(this);\n this._umutate = this._list = this._options = this._match = void 0;\n this._items = this._clear = this._control = this._select = void 0;\n }\n handleEvent(event) {\n var _a2, _b, _c;\n if (((_a2 = this.control) == null ? void 0 : _a2.disabled) || ((_b = this.control) == null ? void 0 : _b.readOnly)) return;\n if (event.type === \"blur\") onBlur(this);\n if (event.type === \"click\") onClick(this, event);\n if (event.type === \"focus\") speak();\n if (event.type === \"input\") onInput(this, event);\n if (event.type === \"keydown\") onKeyDown(this, event);\n if (event.type === \"pointerdown\") {\n IS_LIST_HIDDEN = !!((_c = this.list) == null ? void 0 : _c.hidden);\n isPointerDown(this, event);\n }\n }\n get multiple() {\n var _a2;\n return ((_a2 = attr(this, \"data-multiple\")) != null ? _a2 : FALSE) !== FALSE;\n }\n set multiple(value) {\n attr(this, \"data-multiple\", value ? \"\" : null);\n }\n get creatable() {\n var _a2;\n return ((_a2 = attr(this, \"data-creatable\")) != null ? _a2 : FALSE) !== FALSE;\n }\n set creatable(value) {\n attr(this, \"data-creatable\", value ? \"\" : null);\n }\n get control() {\n var _a2;\n if (!((_a2 = this._control) == null ? void 0 : _a2.isConnected))\n this._control = this.querySelector(\"input\");\n return this._control;\n }\n get list() {\n var _a2;\n if (!((_a2 = this._list) == null ? void 0 : _a2.isConnected)) {\n this._list = this.querySelector(CSS_DATALIST);\n this._options = void 0;\n }\n return this._list;\n }\n get clear() {\n var _a2;\n if (!((_a2 = this._clear) == null ? void 0 : _a2.isConnected)) this._clear = this.querySelector(CSS_CLEAR);\n return this._clear;\n }\n get items() {\n if (!this._items) this._items = this.getElementsByTagName(\"data\");\n return this._items;\n }\n get options() {\n var _a2, _b, _c;\n const el = !this._options && ((_b = (_a2 = this.list) == null ? void 0 : _a2.querySelector(CSS_OPTION)) == null ? void 0 : _b.nodeName);\n if (el) this._options = (_c = this.list) == null ? void 0 : _c.getElementsByTagName(el);\n return this._options || this.getElementsByTagName(\"-\");\n }\n get values() {\n return Array.from(this.items, ({ value }) => value);\n }\n};\nvar dispatchMatch = (self) => {\n var _a2;\n const { creatable, control, options, multiple } = self;\n const value = ((_a2 = control == null ? void 0 : control.value) == null ? void 0 : _a2.trim()) || \"\";\n const query = value.toLowerCase() || null;\n let match = [...options].find(\n (o) => getLabel(o).trim().toLowerCase() === query\n );\n const event = { bubbles: true, cancelable: true, detail: match };\n if (!self.dispatchEvent(new CustomEvent(\"comboboxbeforematch\", event)))\n match = [...options].find(getSelected);\n if (!multiple) for (const o of options) setSelected(o, o === match);\n else syncOptionsWithItems(self);\n if (!match && creatable && value) return { value, label: value };\n return match && { value: getValue(match), label: getLabel(match) };\n};\nvar dispatchSelect = (self, item, canRemove = true) => {\n const { _texts, control, items, multiple } = self;\n if (!item) {\n if (multiple) return speak(_texts.invalid);\n if (!(control == null ? void 0 : control.value) && items[0]) return dispatchSelect(self, items[0]);\n return syncInputWithItemSingleMode(self);\n }\n const index = [...items].findIndex((i) => i.value === item.value);\n const remove = items[index];\n const focus = remove === getFocusedElement(self) && (multiple ? items[index - 1] || items[index + 1] || control : control);\n if (remove && !canRemove) return syncInputWithItemSingleMode(self);\n if (focus) focus.focus();\n self._focusMoved = !!focus;\n const add = tag(\"data\", { value: item.value }, item.label || item.value);\n const event = { bubbles: true, cancelable: true, detail: remove || add };\n if (self.dispatchEvent(new CustomEvent(\"comboboxbeforeselect\", event))) {\n if (!multiple) for (const item2 of [...items]) item2.remove();\n if (remove) remove.remove();\n else control == null ? void 0 : control.insertAdjacentElement(\"beforebegin\", add);\n self.dispatchEvent(new CustomEvent(\"comboboxafterselect\", event));\n }\n};\nvar onBlur = (self) => isPointerDown(self) || setTimeout(onBlurred, 0, self);\nvar onBlurred = (self) => self.multiple || self.contains(getFocusedElement(self)) || dispatchSelect(self, self._match, false);\nvar onClick = (self, event) => {\n const { clientX: x, clientY: y, target } = event;\n const { clear, control, items } = self;\n if (control && (clear == null ? void 0 : clear.contains(target))) {\n event.preventDefault();\n setValue(control, \"\", \"deleteContentBackward\");\n control.focus();\n return IS_LIST_HIDDEN || control.click();\n }\n for (const item of items) {\n if (item.contains(target)) return dispatchSelect(self, item);\n const rect = item.getBoundingClientRect();\n const { top: t, right: r, bottom: b, left: l, width: w, height: h } = rect;\n if (w && h && y >= t && y <= b && x >= l && x <= r) return item.focus();\n }\n if (target === self) control == null ? void 0 : control.focus();\n};\nvar onInput = (self, event) => {\n var _a2;\n const { control, options, multiple } = self;\n const value = (control == null ? void 0 : control.value) || null;\n const isDatalistClick = event instanceof InputEvent ? !event.inputType || event.inputType === \"insertReplacementText\" : !!(control == null ? void 0 : control.value);\n if (!isDatalistClick) self._value = (control == null ? void 0 : control.value) || \"\";\n if (isDatalistClick) {\n (_a2 = event.stopImmediatePropagation) == null ? void 0 : _a2.call(event);\n const clicked = [...options].find((o) => getValue(o) === value);\n if (control) control.value = self._value;\n if (clicked) return dispatchSelect(self, clicked, multiple);\n } else if (!multiple) self._match = dispatchMatch(self);\n syncClearWithInput(self);\n};\nvar onKeyDown = (self, e) => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.key === \"Alt\") return;\n if (self.control === e.target) onKeyDownControl(self, e);\n else onKeyDownItems(self, e);\n};\nvar onKeyDownControl = (self, e) => {\n var _a2;\n const { _match, clear, control: input, items, multiple } = self;\n if ((e.key === \"ArrowLeft\" || e.key === \"Backspace\") && !(input == null ? void 0 : input.selectionEnd))\n (_a2 = items[items.length - 1]) == null ? void 0 : _a2.focus();\n if (e.key === \"Enter\" && input) {\n preventSubmit(input);\n dispatchSelect(self, multiple ? dispatchMatch(self) : _match, multiple);\n }\n if (e.key === \"Tab\" && !e.shiftKey && clear && !clear.hidden) {\n e.preventDefault();\n attr(clear, \"aria-hidden\", \"false\");\n attr(clear, \"tabindex\", \"0\");\n clear.focus();\n on(clear, \"blur\", () => syncClearWithInput(self), EVENT_ONCE);\n }\n};\nvar onKeyDownItems = (self, event) => {\n var _a2, _b, _c;\n const { clear, control, items } = self;\n const { key, repeat, target } = event;\n const index = [...items].indexOf(target);\n const isKeyClick = key === \" \" || key === \"Enter\";\n if (isKeyClick && (items[index] || target === clear)) {\n (_a2 = items[index] || clear) == null ? void 0 : _a2.click();\n return event.preventDefault();\n }\n if (!items[index]) return;\n if (key === \"ArrowLeft\") return (_b = items[index - 1]) == null ? void 0 : _b.focus();\n if (key === \"ArrowRight\") return (_c = items[index + 1] || control) == null ? void 0 : _c.focus();\n if (key === \"Backspace\") {\n event.preventDefault();\n return repeat || dispatchSelect(self, items[index]);\n }\n control == null ? void 0 : control.focus();\n};\nvar onMutations = (self, edit) => {\n var _a2;\n if (!self.control) return;\n const { _texts, control, items, list, multiple } = self;\n const edits = [];\n for (const { addedNodes: add, removedNodes: del } of edit || []) {\n for (const el of add) if (el instanceof HTMLDataElement) edits.unshift(el);\n for (const el of del) if (el instanceof HTMLDataElement) edits.push(el);\n }\n const focus = getFocusedElement(self);\n const doSpeak = multiple ? edits.length === 1 : edits[0] === focus;\n if (doSpeak && self.contains(focus)) {\n const label = control ? attr(control, ARIA_LABEL) : null;\n self._speak = `${_texts[edits[0].isConnected ? \"added\" : \"removed\"]} ${getText(edits[0])}, `;\n attr(control, ARIA_LABEL, `${self._speak}${getInputLabel(control)}`);\n if (!self._focusMoved) setTimeout(() => speak(self._speak.slice(0, -2)));\n setTimeout(speakReset, 300, self, label);\n }\n if (!multiple) {\n const item = getText(items[0]);\n if (item !== self._itemSingleVale) syncInputWithItemSingleMode(self);\n self._itemSingleVale = item;\n }\n syncItems(self);\n syncOptionsWithItems(self);\n syncSelectWithItems(self);\n const hint = `${items.length ? _texts.found.replace(\"%d\", `${items.length}`) : _texts.empty}`;\n attr(control, \"aria-description\", multiple ? hint : null);\n attr(control, \"list\", useId(list));\n attr(self._listbox, ARIA_LABEL, _texts.items);\n (_a2 = self._umutate) == null ? void 0 : _a2.takeRecords();\n};\nvar speakReset = (self, label) => {\n self._speak = \"\";\n if (self.control) attr(self.control, ARIA_LABEL, label);\n syncItems(self);\n};\nvar syncItems = (self) => {\n const { _texts, _speak, items } = self;\n let idx = 0;\n for (const item of items) {\n const text = `${_speak}${getText(item)}, ${_texts.remove}${IS_IOS ? `, ${++idx} ${_texts.of} ${items.length}` : \"\"}`;\n attr(item, ARIA_LABEL, text);\n attr(item, \"role\", \"option\");\n attr(item, \"slot\", \"items\");\n attr(item, \"tabindex\", \"-1\");\n attr(item, \"value\", getValue(item));\n }\n};\nvar syncSelectWithItems = (self) => {\n var _a2, _b;\n if (!((_a2 = self._select) == null ? void 0 : _a2.isConnected)) self._select = self.querySelector(\"select\");\n if (!self._select) return;\n const { _select, items, multiple } = self;\n const append = [];\n let idx = 0;\n attr(_select, \"multiple\", multiple ? \"\" : null);\n for (const item of items) {\n const option = _select == null ? void 0 : _select.options[idx++];\n const text = getText(item);\n const value = getValue(item);\n if (!option) append.push(new Option(text, value, true, true));\n else\n Object.assign(option, {\n defaultSelected: true,\n selected: true,\n text,\n value\n });\n }\n if (append.length) _select.append(...append);\n else for (const opt of [..._select.options].slice(idx)) opt.remove();\n (_b = self._umutate) == null ? void 0 : _b.takeRecords();\n};\nvar syncClearWithInput = (self) => {\n if (!self.clear) return;\n const { clear, control } = self;\n const hidden = !(control == null ? void 0 : control.value) || (control == null ? void 0 : control.disabled) || (control == null ? void 0 : control.readOnly);\n if (clear.nodeName === \"DEL\") attr(clear, \"role\", \"button\");\n if (!attr(clear, ARIA_LABEL)) attr(clear, ARIA_LABEL, self._texts.clear);\n attr(clear, \"aria-hidden\", `${IS_IOS || IS_ANDROID}`);\n attr(clear, \"hidden\", hidden ? \"\" : null);\n attr(clear, \"tabindex\", \"-1\");\n};\nvar syncOptionsWithItems = (self) => {\n if (!self.list) return;\n const { _texts, list, multiple, options, values } = self;\n attr(list, \"data-sr-of\", _texts.of);\n attr(list, SAFE_MULTISELECTABLE, `${multiple}`);\n for (const opt of options) setSelected(opt, values.includes(getValue(opt)));\n};\nvar syncInputWithItemSingleMode = (self) => {\n if (!self.control || self.multiple) return;\n const { control, items } = self;\n const value = getText(items[0]);\n const action = value ? \"insertText\" : \"deleteContentBackward\";\n if (value !== control.value) setValue(control, value, action);\n};\nvar getLabel = (el) => {\n var _a2;\n return (_a2 = attr(el, \"label\")) != null ? _a2 : getText(el);\n};\nvar getValue = (el) => {\n var _a2;\n return (_a2 = attr(el, \"value\")) != null ? _a2 : getText(el);\n};\nvar setSelected = (el, selected) => attr(el, \"selected\", selected ? \"\" : null);\nvar getSelected = (el) => {\n var _a2;\n return (_a2 = el.selected) != null ? _a2 : el.hasAttribute(\"selected\");\n};\ncustomElements.define(\"u-combobox\", UHTMLComboboxElement);\n\nexport { UHTMLComboboxElement, UHTMLComboboxShadowRoot, UHTMLComboboxStyle };\n","import { UHTMLComboboxElement } from '@u-elements/u-combobox';\nimport {\n attr,\n customElements,\n off,\n on,\n onMutation,\n QUICK_EVENT,\n useId,\n} from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-suggestion': DSSuggestionElement;\n }\n}\n\nexport class DSSuggestionElement extends UHTMLComboboxElement {\n _unmutate?: ReturnType<typeof onMutation>; // Using underscore instead of private fields for backwards compatibility\n\n connectedCallback() {\n super.connectedCallback();\n this._unmutate = onMutation(this, render, { childList: true }); // .control and .list are direct children of the custom element\n on(this, 'toggle', polyfillToggleSource, QUICK_EVENT);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this._unmutate?.();\n this._unmutate = undefined;\n off(this, 'toggle', polyfillToggleSource, QUICK_EVENT);\n }\n}\n\n// A non-empty placeholder attribute is required to activate the :placeholder-shown pseudo selector used in our chevron styling\nconst render = (self: DSSuggestionElement) => {\n const { control, list } = self;\n const datalist = list || self.querySelector('u-datalist'); // Fallback to u-datalist since React can render the ds-suggestion before u-datalist is connected\n\n if (control && !control.placeholder) attr(control, 'placeholder', ' '); // .control comes from UHTMLComboboxElement\n if (control) attr(control, 'popovertarget', useId(list) || null);\n if (datalist) attr(datalist, 'popover', 'manual'); // Ensure popover attribute is set on the list\n if (datalist) attr(datalist, 'data-is-floating', 'true'); // identifier for css to toggle opacity when it is placed by floating-ui.\n};\n\n// Since showPopover({ source }) is not supported in all browsers yet:\nconst polyfillToggleSource = (event: Partial<ToggleEvent>) => {\n const self = event.currentTarget as DSSuggestionElement;\n const detail = event.newState === 'open' && self.control; // .control comes from UHTMLComboboxElement\n\n if (detail)\n self.list?.dispatchEvent(new CustomEvent('ds-toggle-source', { detail }));\n};\n\n// Ensure u-datalist is defined before ds-suggestion\ncustomElements.define('ds-suggestion', DSSuggestionElement);\n","// ../utils.ts\nvar isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_BROWSER = isBrowser();\nvar AGENT = IS_BROWSER ? navigator.userAgent : \"\";\nvar IS_ANDROID = /android/i.test(AGENT);\nvar _a;\nIS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? void 0 : _a.platform) || navigator.platform);\nvar SUPPORTS_CONSTRUCTED_CSS = IS_BROWSER && window.CSSStyleSheet && document.adoptedStyleSheets;\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar SAFE_LABELLEDBY = `${IS_ANDROID ? \"data\" : \"aria\"}-labelledby`;\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nvar attr = (el, name, value) => {\n if (value === void 0) return el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n};\nvar on = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.addEventListener(type, ...options);\n return () => off(el, ...rest);\n};\nvar off = (el, ...rest) => {\n const [types, ...options] = rest;\n for (const type of types.split(\" \")) el.removeEventListener(type, ...options);\n};\nvar attachStyle = (el, css) => {\n const root = el.shadowRoot || el.attachShadow({ mode: \"open\" });\n if (!root.querySelector(\"slot\")) root.append(tag(\"slot\"));\n if (!root.querySelector(\"style\")) {\n if (!SUPPORTS_CONSTRUCTED_CSS) root.append(tag(\"style\", null, css));\n else {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n }\n }\n return root;\n};\nvar onMutation = (el, callback, options) => {\n const observer = new MutationObserver((records) => {\n if (!isBrowser() || !el.isConnected) return cleanup();\n callback(el, records);\n });\n const cleanup = Object.assign(() => observer.disconnect(), {\n takeRecords: () => observer.takeRecords()\n // Expose takeRecords - useful if mutating a attribute that is observed\n });\n callback(el);\n observer.observe(el, options);\n return cleanup;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? void 0 : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar useId = (el) => {\n if (!el || !IS_BROWSER) return null;\n if (!window.uElementsId) window.uElementsId = {};\n if (!el.id) {\n const node = el.nodeName.toLowerCase();\n if (!window.uElementsId[node]) window.uElementsId[node] = 1;\n el.id = `:${node}${window.uElementsId[node]++}`;\n }\n return el.id;\n};\nvar tag = (tagName, attrs, content) => {\n const el = document.createElement(tagName);\n if (content) el.textContent = content;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !isBrowser() || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar declarativeShadowRoot = (style, slot = \"<slot></slot>\") => `<template shadowrootmode=\"open\">${slot}<style>${style}</style></template>`;\n\n// u-tabs.ts\nvar ARIA_CONTROLS = \"aria-controls\";\nvar ARIA_DISABLED = \"aria-disabled\";\nvar ARIA_SELECTED = \"aria-selected\";\nvar TABINDEX = \"tabindex\";\nvar UHTMLTabsStyle = DISPLAY_BLOCK;\nvar UHTMLTabPanelStyle = DISPLAY_BLOCK;\nvar UHTMLTabStyle = \"\";\nvar UHTMLTabListStyle = `${DISPLAY_BLOCK}\n::slotted([role=\"tab\"]:not([hidden])) { display: inline-block; cursor: pointer }\n::slotted([role=\"tab\"][${ARIA_DISABLED}=\"true\"]) { cursor: default }`;\nvar UHTMLTabsShadowRoot = declarativeShadowRoot(UHTMLTabsStyle);\nvar UHTMLTabListShadowRoot = declarativeShadowRoot(UHTMLTabListStyle);\nvar UHTMLTabShadowRoot = \"\";\nvar UHTMLTabPanelShadowRoot = declarativeShadowRoot(UHTMLTabPanelStyle);\nvar UHTMLTabsElement = class extends UHTMLElement {\n constructor() {\n super();\n attachStyle(this, UHTMLTabsStyle);\n }\n get tabList() {\n return this.querySelector(\n '[role=\"tablist\"]:not(:scope [role=\"tabpanel\"] [role=\"tablist\"])'\n );\n }\n get selectedIndex() {\n const tabs = getTabs(this.tabList);\n return tabs.indexOf(findSelected(tabs));\n }\n set selectedIndex(index) {\n setSelected(this.tabs[index]);\n }\n get tabs() {\n return this.querySelectorAll(\n '[role=\"tab\"]:not(:scope [role=\"tabpanel\"] [role=\"tab\"])'\n );\n }\n get panels() {\n return this.querySelectorAll(\n `[role=\"tabpanel\"]:not(:scope [role=\"tabpanel\"] [role=\"tabpanel\"])`\n );\n }\n};\nvar UHTMLTabListElement = class extends UHTMLElement {\n // Using underscore instead of private fields for backwards compatibility\n constructor() {\n super();\n attachStyle(this, UHTMLTabListStyle);\n }\n connectedCallback() {\n attr(this, \"role\", \"tablist\");\n on(this, \"click keydown\", this);\n this._umutate = onMutation(this, onMutations, {\n attributeFilter: [\"id\", \"role\", ARIA_CONTROLS, ARIA_SELECTED],\n // Needed if role=\"tab|tabpanel\" and not u-tab|u-tabpanel is used\n attributes: true,\n childList: true,\n subtree: true\n // Needed to catch changes of attributes in children\n });\n }\n disconnectedCallback() {\n var _a2;\n off(this, \"click keydown\", this);\n (_a2 = this._umutate) == null ? void 0 : _a2.call(this);\n this._umutate = void 0;\n }\n handleEvent(event) {\n var _a2, _b, _c, _d;\n const { key, type, target } = event;\n const tabs = getTabs(this);\n const prev = tabs.findIndex((tab) => tab.contains(target));\n const isKeyClick = key === \" \" || key === \"Enter\";\n let next = prev;\n if (event.defaultPrevented || prev === -1) return;\n if (type === \"click\") setSelected(tabs[prev]);\n if (type === \"keydown\") {\n if (isKeyClick) {\n (_a2 = event.preventDefault) == null ? void 0 : _a2.call(event);\n const click = { bubbles: true, cancelable: true, composed: true };\n return tabs[prev].dispatchEvent(new MouseEvent(\"click\", click));\n }\n if (key === \"ArrowDown\" || key === \"ArrowRight\")\n next = (prev + 1) % tabs.length;\n else if (key === \"ArrowUp\" || key === \"ArrowLeft\")\n next = (prev || tabs.length) - 1;\n else if (key === \"End\") next = tabs.length - 1;\n else if (key === \"Home\") next = 0;\n else if (key === \"Tab\" && !isSelected(tabs[prev])) {\n const selected = findSelected(tabs);\n if (selected) attr(selected, TABINDEX, \"-1\");\n return selected && setTimeout(() => attr(selected, TABINDEX, \"0\"));\n } else return;\n (_b = event.preventDefault) == null ? void 0 : _b.call(event);\n (_d = (_c = tabs[next]).focus) == null ? void 0 : _d.call(_c);\n }\n }\n get tabsElement() {\n return getTabsElement(this);\n }\n get tabs() {\n return this.querySelectorAll(':scope > [role=\"tab\"]');\n }\n get selectedIndex() {\n const tabs = getTabs(this);\n return tabs.indexOf(findSelected(tabs));\n }\n set selectedIndex(index) {\n setSelected(this.tabs[index]);\n }\n};\nvar UHTMLTabElement = class extends UHTMLElement {\n static get observedAttributes() {\n return [\"id\", ARIA_SELECTED, ARIA_CONTROLS];\n }\n connectedCallback() {\n var _a2;\n attr(this, \"role\", \"tab\");\n attr(this, ARIA_SELECTED, `${this.selected}`);\n attr(this, TABINDEX, this.selected ? \"0\" : \"-1\");\n if (!findSelected((_a2 = this.parentElement) == null ? void 0 : _a2.children)) setSelected(this);\n }\n attributeChangedCallback() {\n if (!SKIP_TABS_UPDATE.has(this.parentElement) && this.selected)\n setSelected(this);\n }\n get tabsElement() {\n return getTabsElement(this);\n }\n get tabList() {\n const tablist = this.parentElement;\n return tablist instanceof UHTMLTabListElement ? tablist : null;\n }\n get selected() {\n return isSelected(this);\n }\n set selected(value) {\n if (value) setSelected(this);\n }\n /** Retrieves the ordinal position of an tab in a tablist. */\n get index() {\n return Math.max(getTabs(this.parentElement).indexOf(this), 0);\n }\n get panel() {\n var _a2;\n const panels = (_a2 = getTabsElement(this)) == null ? void 0 : _a2.panels;\n const index = getTabs(this.parentElement).indexOf(this);\n return getPanel(this, panels == null ? void 0 : panels[index]);\n }\n};\nvar UHTMLTabPanelElement = class extends UHTMLElement {\n constructor() {\n super();\n attachStyle(this, UHTMLTabPanelStyle);\n }\n connectedCallback() {\n attr(this, \"role\", \"tabpanel\");\n const tabs = new Set(this.tabs);\n const root = getTabsElement(this);\n const idx = root == null ? void 0 : root.tabs[Array.prototype.indexOf.call(root == null ? void 0 : root.panels, this)];\n if (idx && !idx.hasAttribute(ARIA_CONTROLS)) tabs.add(idx);\n const tab = findSelected(tabs) || tabs.values().next().value;\n skipTabsUpdate(tab, () => syncPanel(this, tab, !!tab && isSelected(tab)));\n }\n get tabsElement() {\n return getTabsElement(this);\n }\n get tabs() {\n return getRoot(this).querySelectorAll(\n `[${ARIA_CONTROLS}=\"${useId(this)}\"]`\n );\n }\n};\nvar onMutations = (_self, records = []) => {\n let selected;\n for (const { target: el } of records) {\n const tab = el instanceof Element && attr(el, \"role\") === \"tab\";\n if (tab && isSelected(el)) selected = el;\n }\n setSelected(selected);\n};\nvar syncPanel = (panel, tab, show = false) => {\n attr(panel, \"aria-hidden\", `${!show}`);\n attr(panel, \"hidden\", show ? null : \"\");\n attr(panel, TABINDEX, show ? \"0\" : null);\n if (tab) attr(tab, ARIA_CONTROLS, useId(panel));\n if (tab && show && isSelected(tab)) attr(panel, SAFE_LABELLEDBY, useId(tab));\n};\nvar SKIP_TABS_UPDATE = /* @__PURE__ */ new Set();\nvar skipTabsUpdate = (tab, fn) => {\n var _a2;\n const tablist = tab == null ? void 0 : tab.parentElement;\n if (tablist) SKIP_TABS_UPDATE.add(tablist);\n fn();\n if (tablist) SKIP_TABS_UPDATE.delete(tablist);\n (_a2 = tablist == null ? void 0 : tablist._umutate) == null ? void 0 : _a2.takeRecords();\n};\nvar isEnabled = (el) => attr(el, ARIA_DISABLED) !== \"true\";\nvar isSelected = (el) => attr(el, ARIA_SELECTED) === \"true\";\nvar findSelected = (elems = []) => {\n for (const el of elems) if (isSelected(el)) return el;\n};\nvar getTabs = (tablist) => {\n const tabs = [];\n for (const el of (tablist == null ? void 0 : tablist.children) || [])\n if (el.getAttribute(\"role\") === \"tab\") tabs.push(el);\n return tabs;\n};\nvar getPanel = (tab, panel = null) => {\n const id = attr(tab, ARIA_CONTROLS);\n const el = id ? getRoot(tab).getElementById(id) : panel;\n return el;\n};\nvar getTabsElement = (self) => {\n for (let el = self; el; el = el.parentNode || el.host)\n if (el instanceof UHTMLTabsElement) return el;\n return null;\n};\nvar setSelected = (selected) => selected && isEnabled(selected) && skipTabsUpdate(selected, () => {\n var _a2;\n const tabs = getTabs(selected.parentElement);\n const panels = ((_a2 = getTabsElement(selected)) == null ? void 0 : _a2.panels) || [];\n const nextPanel = getPanel(selected, panels == null ? void 0 : panels[tabs.indexOf(selected)]);\n let idx = 0;\n for (const tab of tabs) {\n const panel = getPanel(tab, panels[idx++]);\n attr(tab, ARIA_SELECTED, `${tab === selected}`);\n attr(tab, TABINDEX, tab === selected ? \"0\" : \"-1\");\n if (panel) syncPanel(panel, tab, panel === nextPanel);\n }\n});\ncustomElements.define(\"u-tabs\", UHTMLTabsElement);\ncustomElements.define(\"u-tablist\", UHTMLTabListElement);\ncustomElements.define(\"u-tab\", UHTMLTabElement);\ncustomElements.define(\"u-tabpanel\", UHTMLTabPanelElement);\n\nexport { UHTMLTabElement, UHTMLTabListElement, UHTMLTabListShadowRoot, UHTMLTabListStyle, UHTMLTabPanelElement, UHTMLTabPanelShadowRoot, UHTMLTabPanelStyle, UHTMLTabShadowRoot, UHTMLTabStyle, UHTMLTabsElement, UHTMLTabsShadowRoot, UHTMLTabsStyle };\n","import * as UTabs from '@u-elements/u-tabs';\nimport { customElements } from '../utils/utils';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ds-tabs': DSTabsElement;\n 'ds-tablist': DSTabListElement;\n 'ds-tab': DSTabElement;\n 'ds-tabpanel': DSTabPanelElement;\n }\n}\n\nexport class DSTabsElement extends UTabs.UHTMLTabsElement {}\nexport class DSTabListElement extends UTabs.UHTMLTabListElement {}\nexport class DSTabElement extends UTabs.UHTMLTabElement {}\nexport class DSTabPanelElement extends UTabs.UHTMLTabPanelElement {}\n\ncustomElements.define('ds-tabs', DSTabsElement);\ncustomElements.define('ds-tablist', DSTabListElement);\ncustomElements.define('ds-tab', DSTabElement);\ncustomElements.define('ds-tabpanel', DSTabPanelElement);\n"],"x_google_ignoreList":[2,5,7,8,9,10,11,16,21,23],"mappings":"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"}