vrembem 4.0.0-next.30 → 4.0.0-next.31

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.umd.cjs","sources":["../../core/src/js/utilities/toCamel.js","../../core/src/js/utilities/toKebab.js","../../core/src/js/utilities/toMilliseconds.js","../../core/src/js/helpers/getPrefix.js","../../core/src/js/helpers/cssVar.js","../../core/src/js/helpers/getConfig.js","../../core/src/js/helpers/getCustomProps.js","../../core/src/js/helpers/getElement.js","../../core/src/js/helpers/getSetting.js","../../core/src/js/helpers/lifecycleHook.js","../../core/src/js/helpers/transition.js","../../core/src/js/helpers/setGlobalState.js","../../core/src/js/Breakpoint.js","../../core/src/js/Collection.js","../../core/src/js/CollectionEntry.js","../../core/src/js/FocusTrap.js","../../core/src/js/localStore.js","../../core/src/js/teleport.js","../../core/src/js/themeStore.js","../../drawer/src/js/defaults.js","../../drawer/src/js/helpers/applyInitialState.js","../../drawer/src/js/helpers/applyInlineState.js","../../drawer/src/js/helpers/getBreakpoint.js","../../drawer/src/js/helpers/getDrawer.js","../../drawer/src/js/helpers/updateFocusState.js","../../drawer/src/js/switchMode.js","../../drawer/src/js/DrawerEntry.js","../../drawer/src/js/handlers.js","../../drawer/src/js/open.js","../../drawer/src/js/close.js","../../drawer/src/js/toggle.js","../../drawer/src/js/Drawer.js","../../modal/src/js/defaults.js","../../modal/src/js/ModalEntry.js","../../modal/src/js/helpers/getModal.js","../../modal/src/js/helpers/updateFocusState.js","../../modal/src/js/handlers.js","../../modal/src/js/open.js","../../modal/src/js/close.js","../../modal/src/js/closeAll.js","../../modal/src/js/replace.js","../../modal/src/js/stack.js","../../modal/src/js/Modal.js","../../popover/src/js/defaults.js","../../popover/src/js/helpers/applyPositionStyle.js","../../popover/src/js/helpers/getDelay.js","../../popover/src/js/helpers/getPadding.js","../../popover/src/js/helpers/getMiddlewareOptions.js","../../popover/src/js/helpers/getPopover.js","../../popover/src/js/close.js","../../popover/src/js/handlers.js","../../popover/src/js/PopoverEntry.js","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../popover/src/js/open.js","../../popover/src/js/Popover.js"],"sourcesContent":["export function toCamel(value) {\n return value\n .split(\"-\")\n .map((word, index) => index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n}\n","export function toKebab(value) {\n return value\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n}\n","export function toMilliseconds(value) {\n // Return the value directly if it's a number\n if (typeof value === \"number\") {\n return value;\n }\n\n const parsed = parseFloat(value);\n\n // Check if parsed value is a valid number\n if (!Number.isNaN(parsed)) {\n const isMilliseconds = value.includes(\"ms\");\n return parsed * (isMilliseconds ? 1 : 1000);\n }\n\n // Throw an error if the value could not be converted.\n throw new Error(`Could not convert value to milliseconds: ${value}`);\n}\n","export function getPrefix() {\n return getComputedStyle(document.body).getPropertyValue(\"--vb-prefix\").trim();\n}\n","import { getPrefix } from \"./getPrefix\";\n\n/**\n * Get the value of a CSS custom property (variable).\n * @param {String} property\n * The CSS custom property to query for.\n * @param {Object} options\n * An options object with optional configuration.\n * @return {String || Error} \n * Return the CSS value, a provided fallback or an error if none is found.\n */\nexport function cssVar(property, options) {\n const settings = {\n fallback: null,\n element: document.body,\n ...options\n };\n\n // If property doesn't have CSS variable double dash...\n if (property.slice(0, 2) !== \"--\") {\n // Get the prefix value.\n const prefixValue = getPrefix();\n\n // If a prefix was found, add it to the property name.\n if (prefixValue) {\n property = `${prefixValue}${property}`;\n }\n\n // Add the double dash for CSS variables to the property name.\n property = `--${property}`;\n }\n\n // Get the CSS value.\n const cssValue = getComputedStyle(settings.element).getPropertyValue(property).trim();\n\n // If a CSS value was found, return the CSS value.\n if (cssValue) {\n return cssValue;\n }\n \n // Else, return the fallback or a blocking error.\n else {\n if (settings.fallback) {\n return settings.fallback;\n } else {\n throw new Error(`CSS variable \"${property}\" was not found!`);\n }\n }\n}\n","export function getConfig(el, dataConfig = \"config\") {\n const string = el.getAttribute(`data-${dataConfig}`) || \"\";\n const json = string.replace(/'/g, \"\\\"\");\n return (json) ? JSON.parse(json) : {};\n}\n","import { getPrefix, toKebab } from \"@vrembem/core\";\n\nexport function getCustomProps(entry) {\n // Get the computed styles of the element.\n const styles = getComputedStyle(entry.el);\n\n // Initialize the results object for storing custom property key/value pairs.\n const result = {};\n\n // Get the custom property keys.\n const keys = entry.getSetting(\"customProps\");\n\n // Loop through the custom properties object.\n for (let i = 0; i < keys.length; i++) {\n // Get the custom property value.\n const prefix = getPrefix();\n const module = entry.context.module.toLowerCase();\n const key = toKebab(keys[i]);\n const value = styles.getPropertyValue(`--${prefix}${module}-${key}`).trim();\n // If a value was found, add it to our results object.\n if (value) {\n result[key] = value;\n }\n }\n\n // Return the config object.\n return result;\n}\n","export function getElement(query) {\n if (typeof query === \"string\") {\n return document.getElementById(query);\n } else if (query instanceof HTMLElement) {\n return query;\n } else {\n return null;\n }\n}\n","import { toCamel, toKebab } from \"@vrembem/core\";\n\nfunction maybeReturnSetting(prop, key, type = \"camel\") {\n // Convert the key case based on provided type.\n key = (type === \"camel\") ? toCamel(key) : toKebab(key);\n // Return the setting if it exists, otherwise return undefined.\n return prop.split(\".\").concat(key).reduce((obj, key) => obj?.[key], this);\n}\n\nexport function getSetting(key, options = {}) {\n // Get the initial props to query and the fallback if provided.\n const {\n fallback,\n props = [\"dataConfig\", \"customProps\", \"settings\", \"context.settings\"],\n } = options;\n\n // Loop through the props for the setting and return if found.\n for (const prop of props) {\n const type = (prop !== \"customProps\") ? \"camel\" : \"kebab\";\n const result = maybeReturnSetting.call(this, prop, key, type);\n if (result !== undefined) {\n return result;\n }\n }\n\n // Return fallback if one was provided.\n if (fallback !== undefined) {\n return fallback;\n }\n\n // Otherwise, throw an error.\n throw new Error(`${this.context.module} setting does not exist: ${key}`);\n}\n","export async function lifecycleHook(name, ...args) {\n if (name in this && typeof this[name] === \"function\") {\n await this[name](...args);\n }\n}\n","// import { cssVar } from \"./cssVar\";\nimport { toMilliseconds } from \"../utilities/toMilliseconds\";\n\n/**\n * Get the value of a CSS custom property (variable).\n * @param {Node} el - The element to transition.\n * @param {String} init - The initial state class. \n * @param {String} interim - The interim state class.\n * @param {String} final - The final state class.\n * @param {Number || String} [duration=0] - Either a CSS \n * custom property to get a duration value from or a millisecond value used \n * for the transition duration.\n * @return {Promise} Return a promise that resolves when the transition \n * has finished.\n */\nexport function transition(el, init, interim, final, duration = 0) {\n return new Promise((resolve) => {\n // Toggle classes for start of transition.\n el.classList.remove(init);\n el.classList.add(interim);\n\n // Setup the transition timing.\n setTimeout(() => {\n // Toggle classes for end of transition.\n el.classList.add(final);\n el.classList.remove(interim);\n\n // Resolve the promise.\n resolve(el);\n }, toMilliseconds(duration));\n });\n}\n","function setOverflowHidden(state, selector) {\n if (selector) {\n const els = document.querySelectorAll(selector);\n els.forEach((el) => {\n if (state) {\n el.style.overflow = \"hidden\";\n } else {\n el.style.removeProperty(\"overflow\");\n }\n });\n }\n}\n\nfunction setInert(state, selector) {\n if (selector) {\n const els = document.querySelectorAll(selector);\n els.forEach((el) => {\n if (state) {\n el.inert = true;\n el.setAttribute(\"aria-hidden\", true);\n } else {\n el.inert = null;\n el.removeAttribute(\"aria-hidden\");\n }\n });\n }\n}\n\nexport function setGlobalState(state, selectorInert, selectorOverflow) {\n setInert(!!state, selectorInert);\n setOverflowHidden(!!state, selectorOverflow);\n}\n","export class Breakpoint {\n #handler;\n\n constructor(value, handler) {\n this.value = value;\n this.#handler = handler;\n this.mql = null;\n }\n\n get handler() {\n return this.#handler;\n }\n\n // Unmount existing handler before setting a new one.\n set handler(func) {\n if (this.mql) {\n this.mql.removeEventListener(\"change\", this.#handler);\n }\n this.#handler = func;\n }\n\n mount(value, handler) {\n // Update passed params.\n if (value) this.value = value;\n if (handler) this.#handler = handler;\n\n // Guard if no breakpoint was set.\n if (!this.value) return this;\n\n // Setup and store the MediaQueryList instance.\n this.mql = window.matchMedia(`(min-width: ${this.value})`);\n\n // Add event listener.\n this.mql.addEventListener(\"change\", this.#handler);\n\n // Run the handler.\n this.#handler(this.mql);\n\n return this;\n }\n\n unmount() {\n // Guard if no MediaQueryList instance exists.\n if (!this.mql) return this;\n\n // Add event listener.\n this.mql.removeEventListener(\"change\", this.#handler);\n\n // Set value, handler and MediaQueryList to null.\n this.value = null;\n this.#handler = null;\n this.mql = null;\n\n return this;\n }\n}\n","import { CollectionEntry, lifecycleHook } from \"@vrembem/core\";\n\nexport class Collection {\n constructor(options = {}) {\n this.module = this.constructor.name;\n this.collection = [];\n this.settings = Object.assign({ \n dataConfig: \"config\",\n customProps: [],\n teleport: null,\n teleportMethod: \"append\"\n }, options);\n }\n\n get(value, key = \"id\") {\n return this.collection.find((entry) => entry[key] === value);\n }\n\n applySettings(obj) {\n return Object.assign(this.settings, obj);\n }\n\n async createEntry(query, config) {\n return new CollectionEntry(this, query, config);\n }\n\n async register(query, config = {}) {\n // Deregister the element in case it has already been registered.\n await this.deregister(query?.id || query, true);\n\n // Create the collection entry object and mount it.\n const entry = await this.createEntry(query, config);\n await entry.mount();\n await lifecycleHook.call(this, \"beforeRegister\", entry);\n await lifecycleHook.call(entry, \"beforeRegister\");\n \n // Add the entry to the collection.\n this.collection.push(entry);\n\n await lifecycleHook.call(entry, \"afterRegister\");\n await lifecycleHook.call(this, \"afterRegister\", entry);\n return entry;\n }\n\n async deregister(id, reReg = false) {\n const index = this.collection.findIndex((entry) => entry.id === id);\n if (~index) {\n // Get the collection entry object from the collection and unmount it.\n const entry = this.collection[index];\n await entry.unmount(reReg);\n await lifecycleHook.call(this, \"beforeDeregister\", entry);\n await lifecycleHook.call(entry, \"beforeDeregister\", reReg);\n \n // Remove all the owned properties from the entry.\n Object.getOwnPropertyNames(entry).forEach((prop) => {\n if (prop != \"beforeDeregister\" && prop != \"afterDeregister\") {\n delete entry[prop];\n }\n });\n\n // Remove the entry from the collection.\n this.collection.splice(index, 1);\n\n await lifecycleHook.call(entry, \"afterDeregister\", reReg);\n await lifecycleHook.call(this, \"afterDeregister\", entry);\n }\n\n return this.collection;\n }\n\n async mount(options = {}) {\n // Apply settings with passed options.\n this.applySettings(options);\n await lifecycleHook.call(this, \"beforeMount\");\n // Get all the selector elements and register them.\n const els = document.querySelectorAll(this.settings.selector);\n for (const el of els) {\n await this.register(el);\n }\n await lifecycleHook.call(this, \"afterMount\");\n return this;\n }\n\n async unmount() {\n await lifecycleHook.call(this, \"beforeUnmount\");\n // Loop through the collection and deregister each entry.\n while (this.collection.length > 0) {\n await this.deregister(this.collection[0].id);\n }\n await lifecycleHook.call(this, \"afterUnmount\");\n return this;\n }\n}\n","import { \n getConfig,\n getCustomProps,\n getElement,\n lifecycleHook,\n teleport,\n getSetting,\n} from \"@vrembem/core\";\n\nexport class CollectionEntry {\n constructor(context, query, options = {}) {\n this.context = context;\n this.id = query?.id || query;\n this.el = getElement(query);\n this.settings = Object.assign({}, options);\n this.dataConfig = {};\n this.customProps = {};\n this.returnRef = null;\n }\n\n applySettings(obj) {\n return Object.assign(this.settings, obj);\n }\n\n getDataConfig() {\n return Object.assign(this.dataConfig, getConfig(this.el, this.getSetting(\"dataConfig\")));\n }\n\n getCustomProps() {\n return Object.assign(this.customProps, getCustomProps(this));\n }\n\n getSetting(key, options = {}) {\n return getSetting.call(this, key, options);\n }\n\n async mount(options = {}) {\n // Throw an error if the element for this entry was not found.\n if (this.el === null) {\n throw new Error(`${this.context.module} element was not found with ID: \"${this.id}\"`);\n }\n\n // Apply settings with passed options.\n this.applySettings(options);\n\n // Build the data attribute and custom property setting objects.\n this.getDataConfig();\n this.getCustomProps();\n\n await lifecycleHook.call(this, \"beforeMount\");\n\n // Teleport entry if a reference has been set.\n if (this.getSetting(\"teleport\")) {\n this.teleport();\n }\n\n await lifecycleHook.call(this, \"afterMount\");\n }\n\n async unmount(reMount = false) {\n await lifecycleHook.call(this, \"beforeUnmount\", reMount);\n\n // Return teleported entry if a reference has been set.\n if (this.getSetting(\"teleport\")) {\n this.teleportReturn();\n }\n\n await lifecycleHook.call(this, \"afterUnmount\", reMount);\n }\n\n teleport(ref = this.getSetting(\"teleport\"), method = this.getSetting(\"teleportMethod\")) {\n if (!this.returnRef) {\n this.returnRef = teleport(this.el, ref, method);\n return this.el;\n } else {\n console.error(\"Element has already been teleported:\", this.el);\n return false;\n }\n }\n\n teleportReturn() {\n if (this.returnRef) {\n this.returnRef = teleport(this.el, this.returnRef);\n return this.el;\n } else {\n console.error(\"No return reference found:\", this.el);\n return false;\n }\n }\n}\n","export class FocusTrap {\n #focusable;\n #handleFocusTrap;\n #handleFocusLock;\n\n constructor(el = null, selectorFocus = \"[data-focus]\") {\n this.el = el;\n this.selectorFocus = selectorFocus;\n this.#handleFocusTrap = handleFocusTrap.bind(this);\n this.#handleFocusLock = handleFocusLock.bind(this);\n }\n\n get focusable() {\n return this.#focusable;\n }\n\n set focusable(value) {\n // Update the focusable value.\n this.#focusable = value;\n\n // Apply event listeners based on new focusable array length.\n if (this.#focusable.length) {\n document.removeEventListener(\"keydown\", this.#handleFocusLock);\n document.addEventListener(\"keydown\", this.#handleFocusTrap);\n } else {\n document.removeEventListener(\"keydown\", this.#handleFocusTrap);\n document.addEventListener(\"keydown\", this.#handleFocusLock);\n }\n }\n\n get focusableFirst() {\n return this.focusable[0];\n }\n\n get focusableLast() {\n return this.focusable[this.focusable.length - 1];\n }\n\n mount(el, selectorFocus) {\n // Update passed params.\n if (el) this.el = el;\n if (selectorFocus) this.selectorFocus = selectorFocus;\n\n // Get the focusable elements.\n this.focusable = this.getFocusable();\n\n // Set the focus on the element.\n this.focus();\n }\n\n unmount() {\n // Set element to null.\n this.el = null;\n\n // Apply empty array to focusable.\n this.focusable = [];\n\n // Remove event listeners\n document.removeEventListener(\"keydown\", this.#handleFocusTrap);\n document.removeEventListener(\"keydown\", this.#handleFocusLock);\n }\n\n focus(el = this.el, selectorFocus = this.selectorFocus) {\n // Query for the focus selector, otherwise return this element.\n const result = el.querySelector(selectorFocus) || el;\n // Give the returned element focus.\n result.focus();\n }\n\n getFocusable(el = this.el) {\n // Create the focusable array.\n const focusable = [];\n\n // Store the initial focus and scroll position.\n const initFocus = document.activeElement;\n const initScrollTop = el.scrollTop;\n\n // Query for all the focusable elements.\n const selector = focusableSelectors.join(\",\");\n const els = el.querySelectorAll(selector);\n\n // Loop through all focusable elements.\n els.forEach((el) => {\n // Set them to focus and check \n el.focus();\n // Test that the element took focus.\n if (document.activeElement === el) {\n // Add element to the focusable array.\n focusable.push(el);\n }\n });\n\n // Restore the initial scroll position and focus.\n el.scrollTop = initScrollTop;\n initFocus.focus();\n\n // Return the focusable array.\n return focusable;\n }\n}\n\n// This has been copied over from focusable-selectors package and modified.\n// https://github.com/KittyGiraudel/focusable-selectors\nconst notInert = \":not([inert])\"; // Previously `:not([inert]):not([inert] *)`\nconst notNegTabIndex = \":not([tabindex^=\\\"-\\\"])\";\nconst notDisabled = \":not(:disabled)\";\nconst focusableSelectors = [\n `a[href]${notInert}${notNegTabIndex}`,\n `area[href]${notInert}${notNegTabIndex}`,\n `input:not([type=\"hidden\"]):not([type=\"radio\"])${notInert}${notNegTabIndex}${notDisabled}`,\n `input[type=\"radio\"]${notInert}${notNegTabIndex}${notDisabled}`,\n `select${notInert}${notNegTabIndex}${notDisabled}`,\n `textarea${notInert}${notNegTabIndex}${notDisabled}`,\n `button${notInert}${notNegTabIndex}${notDisabled}`,\n `details${notInert} > summary:first-of-type${notNegTabIndex}`,\n `iframe${notInert}${notNegTabIndex}`,\n `audio[controls]${notInert}${notNegTabIndex}`,\n `video[controls]${notInert}${notNegTabIndex}`,\n `[contenteditable]${notInert}${notNegTabIndex}`,\n `[tabindex]${notInert}${notNegTabIndex}`,\n];\n\nfunction handleFocusTrap(event) {\n // Check if the click was a tab and return if not.\n const isTab = (event.key === \"Tab\" || event.keyCode === 9);\n if (!isTab) return;\n\n // If the shift key is pressed.\n if (event.shiftKey) {\n // If the active element is either the root el or first focusable.\n if (\n document.activeElement === this.focusableFirst ||\n document.activeElement === this.el\n ) {\n // Prevent default and focus the last focusable element instead.\n event.preventDefault();\n this.focusableLast.focus();\n }\n } else {\n // If the active element is either the root el or last focusable.\n if (\n document.activeElement === this.focusableLast ||\n document.activeElement === this.el\n ) {\n // Prevent default and focus the first focusable element instead.\n event.preventDefault();\n this.focusableFirst.focus();\n }\n }\n}\n\nfunction handleFocusLock(event) {\n // Ignore the tab key by preventing default.\n const isTab = (event.key === \"Tab\" || event.keyCode === 9);\n if (isTab) event.preventDefault();\n}\n","export function localStore(key, enable = true) {\n const local = localStorage.getItem(key);\n const store = (local) ? JSON.parse(local) : {};\n\n return {\n get(prop) {\n return (prop) ? store[prop] : store;\n },\n\n set(prop, value) {\n if (value) {\n store[prop] = value;\n } else {\n delete store[prop];\n }\n if (enable) localStorage.setItem(key, JSON.stringify(store));\n return store;\n }\n };\n}\n","/**\n * Teleports an element in the DOM based on a reference and teleport method.\n * Provide the comment node as the reference to teleport the element back to its\n * previous location.\n * @param {Node} what - What element to teleport.\n * @param {String || Node} where - Where to teleport the element.\n * @param {String} how - How (method) to teleport the element, e.g: 'after',\n * 'before', 'append' or 'prepend'.\n * @return {Node} Return the return reference if it was teleported else return\n * null if it was returned to a comment reference.\n */\nexport function teleport(what, where, how) {\n // Check if ref is either a comment or element node.\n const isComment = (where.nodeType === Node.COMMENT_NODE);\n const isElement = (where.nodeType === Node.ELEMENT_NODE);\n\n // Get the reference element.\n where = (isComment || isElement) ? where : document.querySelector(where);\n\n // If ref is a comment, set teleport type to 'after'.\n if (isComment) how = \"after\";\n\n // Must be a valid reference element and method.\n if (!where) throw new Error(`Not a valid teleport reference: '${where}'`);\n if (typeof where[how] != \"function\") throw new Error(`Not a valid teleport method: '${how}'`);\n\n // Initial return ref is null.\n let returnRef = null;\n\n // If ref is not a comment, set a return reference comment.\n if (!isComment) {\n returnRef = document.createComment(\"teleported #\" + what.id);\n what.before(returnRef);\n }\n\n // Teleport the target node.\n where[how](what);\n\n // Delete the comment node if element was returned to a comment reference.\n if (isComment) {\n where.remove();\n }\n\n // Return the return reference if it was teleported else return null if it was\n // returned to a comment reference.\n return returnRef;\n}\n","import { localStore } from \"@vrembem/core\";\nimport { cssVar } from \"@vrembem/core\";\n\nexport function themeStore(options) {\n // Setup the default settings object.\n const settings = {\n prefix: cssVar(\"prefix-themes\", { fallback: \"vb-theme-\" }),\n themes: [\"root\", \"light\", \"dark\"],\n storeKey: \"VB:Profile\",\n };\n\n // Override all settings values with provided options.\n for (const [key] of Object.entries(settings)) {\n if (options && options[key]) {\n settings[key] = options[key];\n }\n }\n\n // Setup the default callbacks object.\n const callbacks = {\n onInit() {},\n onChange() {},\n };\n\n // Override all callback values with provided options.\n for (const [key] of Object.entries(callbacks)) {\n if (options && options[key]) {\n callbacks[key] = options[key];\n }\n }\n\n // Get the local storage profile.\n const profile = localStore(settings.storeKey);\n\n // Setup the API object.\n const api = {\n // Store our settings in the API.\n settings,\n\n // Actions.\n add(value) {\n settings.themes.push(value);\n },\n remove(value) {\n const index = settings.themes.indexOf(value);\n (~index && settings.themes.splice(index, 1));\n },\n callback(name) {\n callbacks[name].call(this);\n },\n\n // Getters.\n get class() {\n return `${settings.prefix}${this.theme}`;\n },\n get classes() {\n return settings.themes.map((theme) => `${settings.prefix}${theme}`);\n },\n get themes() {\n return settings.themes;\n },\n\n // Setup the theme get and set methods.\n get theme() {\n return profile.get(\"theme\") || \"root\";\n },\n set theme(value) {\n // Check if the value exists as a theme option.\n if (settings.themes.includes(value)) {\n // Check if the value is actually different from the one currently set.\n if (this.theme != value) {\n // Save the theme value to local storage.\n profile.set(\"theme\", value);\n // Remove the theme classes from the html element.\n document.documentElement.classList.remove(...this.classes);\n // Add the new theme class to the html element.\n document.documentElement.classList.add(`${settings.prefix}${value}`);\n // Run the on change callback.\n this.callback(\"onChange\");\n }\n } else {\n // Throw a console error if the theme doesn't exist as an option.\n console.error(`Not a valid theme value: \"${value}\"`);\n }\n },\n };\n\n // Run the on initialization callback.\n api.callback(\"onInit\");\n\n // Return the API.\n return api;\n}\n","export default {\n // Data attributes\n dataOpen: \"drawer-open\",\n dataClose: \"drawer-close\",\n dataToggle: \"drawer-toggle\",\n dataBreakpoint: \"drawer-breakpoint\",\n\n // Selectors\n selector: \".drawer\",\n selectorDialog: \".drawer__dialog\",\n selectorScreen: \".drawer\",\n selectorFocus: \"[data-focus]\",\n selectorInert: null,\n selectorOverflow: \"body\",\n\n // State classes\n stateOpened: \"is-opened\",\n stateOpening: \"is-opening\",\n stateClosing: \"is-closing\",\n stateClosed: \"is-closed\",\n\n // Classes\n classModal: \"drawer_modal\",\n\n // Feature toggles\n customProps: [\n \"transition-duration\"\n ],\n breakpoints: null,\n customEventPrefix: \"drawer:\",\n store: true,\n storeKey: \"VB:DrawerState\",\n setTabindex: true,\n teleport: null,\n teleportMethod: \"prepend\",\n transition: true,\n transitionDuration: 300\n};\n","export function applyInitialState(entry) {\n if (entry.store === \"opened\") {\n entry.open(false, false);\n } else if (entry.store === \"closed\") {\n entry.close(false, false);\n } else if (entry.store === \"indeterminate\") {\n entry.state = \"indeterminate\";\n } else {\n if (entry.el.classList.contains(entry.getSetting(\"stateOpened\"))) {\n entry.open(false, false);\n } else if (entry.el.classList.contains(entry.getSetting(\"stateClosed\"))) {\n entry.close(false, false);\n } else {\n entry.state = \"indeterminate\";\n }\n }\n}\n","export async function applyInlineState(entry) {\n if (entry.store === \"opened\") {\n await entry.open(false, false);\n } else if (entry.store === \"closed\") {\n await entry.close(false, false);\n } else if (entry.store === \"indeterminate\") {\n if (entry.state != \"indeterminate\") {\n entry.state = \"indeterminate\";\n }\n } else {\n if (entry.state != entry.inlineState) {\n entry.state = entry.inlineState;\n }\n if (entry.inlineState === \"opened\") {\n await entry.open(false, false);\n } else if (entry.inlineState === \"closed\") {\n await entry.close(false, false);\n }\n }\n}\n","import { getPrefix } from \"@vrembem/core\";\n\nexport function getBreakpoint(drawer) {\n const prefix = getPrefix();\n const bp = drawer.getAttribute(`data-${this.settings.dataBreakpoint}`);\n if (this.settings.breakpoints && this.settings.breakpoints[bp]) {\n return this.settings.breakpoints[bp];\n } else if (getComputedStyle(document.body).getPropertyValue(`--${prefix}breakpoint-${bp}`).trim()) {\n return getComputedStyle(document.body).getPropertyValue(`--${prefix}breakpoint-${bp}`).trim();\n } else {\n return bp;\n }\n}\n","export function getDrawer(query) {\n // Get the entry from collection.\n const entry = (typeof query === \"string\") ? this.get(query) : query;\n\n // Return entry if it was resolved, otherwise throw error.\n if (entry) {\n return entry;\n } else {\n throw new Error(`Drawer not found in collection with id of \"${query.id || query}\".`);\n }\n}\n","export function updateFocusState(entry) {\n // Check if there's an active modal\n if (entry.state === \"opened\") {\n // Mount the focus trap on the opened drawer.\n if (entry.mode === \"modal\") {\n this.focusTrap.mount(entry.dialog, this.settings.selectorFocus);\n } else {\n this.focusTrap.focus(entry.dialog, this.settings.selectorFocus);\n }\n } else {\n // Set focus to root trigger and unmount the focus trap.\n if (entry.trigger) {\n entry.trigger.focus();\n entry.trigger = null;\n }\n this.focusTrap.unmount();\n }\n}\n","import { setGlobalState } from \"@vrembem/core\";\nimport { applyInlineState } from \"./helpers\";\n\nexport function switchMode(entry) {\n switch (entry.mode) {\n case \"inline\":\n return toInline.call(this, entry);\n case \"modal\":\n return toModal.call(this, entry);\n default:\n throw new Error(`\"${entry.mode}\" is not a valid drawer mode.`);\n }\n}\n\nasync function toInline(entry) {\n // Remove the modal class.\n entry.el.classList.remove(entry.getSetting(\"classModal\"));\n\n // Remove the aria-modal attribute.\n entry.dialog.removeAttribute(\"aria-modal\");\n\n // Update the global state.\n setGlobalState(false, entry.getSetting(\"selectorInert\"), entry.getSetting(\"selectorOverflow\"));\n\n // Remove any focus traps.\n this.focusTrap.unmount();\n\n // Apply the inline state.\n await applyInlineState(entry);\n\n // Dispatch custom switch event.\n entry.el.dispatchEvent(new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"switchMode\", {\n detail: this,\n bubbles: true\n }));\n\n // Return the entry.\n return entry;\n}\n\nasync function toModal(entry) {\n // Add the modal class.\n entry.el.classList.add(entry.getSetting(\"classModal\"));\n\n // Set aria-modal attribute to true.\n entry.dialog.setAttribute(\"aria-modal\", \"true\");\n\n // Modal drawer defaults to closed state.\n // await close.call(this, entry, false, false);\n await entry.close(false, false);\n\n // Dispatch custom switch event.\n entry.el.dispatchEvent(new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"switchMode\", {\n detail: this,\n bubbles: true\n }));\n\n // Return the entry.\n return entry;\n}\n","import { CollectionEntry, Breakpoint } from \"@vrembem/core\";\nimport { switchMode } from \"./switchMode\";\nimport { applyInitialState } from \"./helpers\";\nimport { getBreakpoint } from \"./helpers\";\n\nexport class DrawerEntry extends CollectionEntry {\n #mode;\n #state;\n #breakpoint;\n\n constructor(context, query, options = {}) {\n super(context, query, options);\n this.dialog = null;\n this.trigger = null;\n // Create an instance of the Breakpoint class.\n this.#breakpoint = new Breakpoint();\n // Set indeterminate values of mode, state and inlineState.\n this.#mode = \"indeterminate\";\n this.#state = \"indeterminate\";\n this.inlineState = \"indeterminate\";\n }\n\n get breakpoint() {\n return getBreakpoint.call(this.context, this.el);\n }\n\n get store() {\n return this.context.store.get(this.id);\n }\n\n get mode() {\n return this.#mode;\n }\n\n set mode(value) {\n this.#mode = value;\n switchMode.call(this.context, this);\n }\n\n get state() {\n return this.#state;\n }\n\n set state(value) {\n this.#state = value;\n\n // If mode is inline and not in a transitioning state...\n if (this.mode === \"inline\" && value != \"opening\" && value != \"closing\") {\n // Save the inline state.\n this.inlineState = value;\n\n // Save the store state if enabled.\n if (this.getSetting(\"store\")) {\n this.context.store.set(this.id, value);\n }\n }\n\n // If state is indeterminate, remove the state classes.\n if (value === \"indeterminate\") {\n this.el.classList.remove(this.getSetting(\"stateOpened\"));\n this.el.classList.remove(this.getSetting(\"stateOpening\"));\n this.el.classList.remove(this.getSetting(\"stateClosed\"));\n this.el.classList.remove(this.getSetting(\"stateClosing\"));\n }\n }\n\n async open(transition, focus) {\n return this.context.open(this, transition, focus);\n }\n\n async close(transition, focus) {\n return this.context.close(this, transition, focus);\n }\n\n async toggle(transition, focus) {\n return this.context.toggle(this, transition, focus);\n }\n\n async deregister() {\n return this.context.deregister(this.id);\n }\n\n mountBreakpoint() {\n const value = this.breakpoint;\n const handler = this.handleBreakpoint.bind(this);\n this.#breakpoint.mount(value, handler);\n }\n\n unmountBreakpoint() {\n this.#breakpoint.unmount();\n }\n\n handleBreakpoint(event) {\n const bpMode = (event.matches) ? \"inline\" : \"modal\";\n if (this.mode != bpMode) {\n this.mode = bpMode;\n }\n }\n\n async beforeMount() {\n // Set the dialog element. If none is found, use the root element.\n const dialog = this.el.querySelector(this.getSetting(\"selectorDialog\"));\n this.dialog = (dialog) ? dialog : this.el;\n\n // Set tabindex=\"-1\" so dialog is focusable via JS or click.\n if (this.getSetting(\"setTabindex\")) {\n this.dialog.setAttribute(\"tabindex\", \"-1\");\n }\n\n // Set both the initial state and inline state.\n applyInitialState(this);\n\n // Set the inline state.\n this.inlineState = this.state;\n\n // Set the initial mode.\n this.mode = (this.el.classList.contains(this.getSetting(\"classModal\"))) ? \"modal\" : \"inline\";\n\n if (this.breakpoint) {\n this.mountBreakpoint();\n }\n }\n\n async beforeUnmount(close = true) {\n // If entry is in the opened state, close it.\n if (close && this.state === \"opened\") {\n await this.close(false);\n }\n\n // Remove entry from local store.\n this.context.store.set(this.id);\n\n // Unmount the MatchMedia functionality.\n this.unmountBreakpoint();\n }\n}\n","import { getDrawer } from \"./helpers\";\n\nexport async function handleClick(event) {\n // If an open, close or toggle button was clicked, handle the click event.\n const trigger = event.target.closest(`\n [data-${this.settings.dataOpen}],\n [data-${this.settings.dataToggle}],\n [data-${this.settings.dataClose}]\n `);\n\n if (trigger) {\n // Prevent the default behavior of the trigger.\n event.preventDefault();\n\n // If it's a toggle trigger...\n if (trigger.matches(`[data-${this.settings.dataToggle}]`)) {\n const selectors = trigger.getAttribute(`data-${this.settings.dataToggle}`).trim().split(\" \");\n selectors.forEach((selector) => {\n // Get the entry from collection using the attribute value.\n const entry = getDrawer.call(this, selector);\n // Store the trigger on the entry.\n entry.trigger = trigger;\n // Toggle the drawer\n return entry.toggle();\n });\n }\n\n // If it's a open trigger...\n if (trigger.matches(`[data-${this.settings.dataOpen}]`)) {\n const selectors = trigger.getAttribute(`data-${this.settings.dataOpen}`).trim().split(\" \");\n selectors.forEach((selector) => {\n // Get the entry from collection using the attribute value.\n const entry = getDrawer.call(this, selector);\n // Store the trigger on the entry.\n entry.trigger = trigger;\n // Open the drawer.\n return entry.open();\n });\n }\n\n // If it's a close trigger...\n if (trigger.matches(`[data-${this.settings.dataClose}]`)) {\n const selectors = trigger.getAttribute(`data-${this.settings.dataClose}`).trim().split(\" \");\n selectors.forEach((selector) => {\n if (selector) {\n // Get the entry from collection using the attribute value.\n const entry = getDrawer.call(this, selector);\n // Store the trigger on the entry.\n entry.trigger = trigger;\n // Close the drawer.\n return entry.close();\n } else {\n // If no value is set on close trigger, get the parent drawer.\n const parent = event.target.closest(this.settings.selector);\n // If a parent drawer was found, close it.\n if (parent) return this.close(parent.id);\n }\n });\n }\n\n return;\n }\n\n // If there is an active modal drawer and the screen was clicked...\n if (this.activeModal && event.target.matches(this.settings.selectorScreen)) {\n // Close the modal drawer.\n return this.close(this.activeModal.id);\n }\n}\n\nexport function handleKeydown(event) {\n // If escape key was pressed.\n if (event.key === \"Escape\") {\n // If a modal is opened, close the modal.\n if (this.activeModal) return this.close(this.activeModal.id);\n }\n}\n","import { transition, setGlobalState } from \"@vrembem/core\";\nimport { updateFocusState, getDrawer } from \"./helpers\";\n\nexport async function open(query, transitionOverride, focus = true) {\n // Get the drawer from collection.\n const entry = getDrawer.call(this, query);\n\n // If drawer is closed or indeterminate.\n if (entry.state === \"closed\" || entry.state === \"indeterminate\") {\n // Update drawer state.\n entry.state = \"opening\";\n\n // Run the open transition.\n if ((transitionOverride != undefined) ? transitionOverride : entry.getSetting(\"transition\")) {\n await transition(\n entry.el, \n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"stateOpening\"),\n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateOpened\"));\n entry.el.classList.remove(entry.getSetting(\"stateClosed\"));\n }\n\n // Update drawer state.\n entry.state = \"opened\";\n\n // Update the global state if mode is modal.\n if (entry.mode === \"modal\") setGlobalState(true, entry.getSetting(\"selectorInert\"), entry.getSetting(\"selectorOverflow\"));\n\n // Set focus to the drawer element if the focus param is true.\n if (focus) {\n updateFocusState.call(this, entry);\n }\n\n // Dispatch custom opened event.\n entry.el.dispatchEvent(new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"opened\", {\n detail: this,\n bubbles: true\n }));\n }\n\n // Return the drawer.\n return entry;\n}\n","import { transition, setGlobalState } from \"@vrembem/core\";\nimport { updateFocusState, getDrawer } from \"./helpers\";\n\nexport async function close(query, transitionOverride, focus = true) {\n // Get the drawer from collection.\n const entry = getDrawer.call(this, query);\n\n // If drawer is opened or indeterminate.\n if (entry.state === \"opened\" || entry.state === \"indeterminate\") {\n // Update drawer state.\n entry.state = \"closing\";\n\n // Remove focus from active element.\n document.activeElement.blur();\n\n // Run the close transition.\n if ((transitionOverride != undefined) ? transitionOverride : entry.getSetting(\"transition\")) {\n await transition(\n entry.el, \n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"stateClosing\"),\n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateClosed\"));\n entry.el.classList.remove(entry.getSetting(\"stateOpened\"));\n }\n\n // Update drawer state.\n entry.state = \"closed\";\n\n // Update the global state if mode is modal.\n if (entry.mode === \"modal\") setGlobalState(false, entry.getSetting(\"selectorInert\"), entry.getSetting(\"selectorOverflow\"));\n\n // Set focus to the trigger element if the focus param is true.\n if (focus) {\n updateFocusState.call(this, entry);\n }\n\n // Dispatch custom closed event.\n entry.el.dispatchEvent(new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"closed\", {\n detail: this,\n bubbles: true\n }));\n }\n\n // Return the drawer.\n return entry;\n}\n","import { open } from \"./open\";\nimport { close } from \"./close\";\nimport { getDrawer } from \"./helpers\";\n\nexport async function toggle(query, transition, focus) {\n // Get the drawer from collection.\n const entry = getDrawer.call(this, query);\n\n // Open or close the drawer based on its current state.\n if (entry.state === \"closed\") {\n return open.call(this, entry, transition, focus);\n } else {\n return close.call(this, entry, transition, focus);\n }\n}\n","import { Collection, FocusTrap, localStore } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { DrawerEntry } from \"./DrawerEntry\";\nimport { handleClick, handleKeydown } from \"./handlers\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { toggle } from \"./toggle\";\n\nexport class Drawer extends Collection {\n #handleClick;\n #handleKeydown;\n\n constructor(options) {\n super({ ...defaults, ...options});\n this.focusTrap = new FocusTrap();\n this.#handleClick = handleClick.bind(this);\n this.#handleKeydown = handleKeydown.bind(this);\n\n // Setup local store for inline drawer state management.\n this.store = localStore(this.settings.storeKey, this.settings.store);\n }\n\n get activeModal() {\n return this.collection.find((entry) => {\n return entry.state === \"opened\" && entry.mode === \"modal\";\n });\n }\n\n async createEntry(query, config) {\n return new DrawerEntry(this, query, config);\n }\n\n async open(id, transition, focus) {\n return open.call(this, id, transition, focus);\n }\n\n async close(id, transition, focus) {\n return close.call(this, id, transition, focus);\n }\n\n async toggle(id, transition, focus) {\n return toggle.call(this, id, transition, focus);\n }\n\n async afterMount() {\n document.addEventListener(\"click\", this.#handleClick, false);\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n async beforeUnmount() {\n this.trigger = null;\n }\n\n async afterUnmount() {\n document.removeEventListener(\"click\", this.#handleClick, false);\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n}\n","export default {\n // Data attributes\n dataOpen: \"modal-open\",\n dataClose: \"modal-close\",\n dataReplace: \"modal-replace\",\n\n // Selectors\n selector: \".modal\",\n selectorDialog: \".modal__dialog\",\n selectorScreen: \".modal\",\n selectorRequired: \"[role=\\\"alertdialog\\\"]\",\n selectorFocus: \"[data-focus]\",\n selectorInert: null,\n selectorOverflow: \"body\",\n\n // State classes\n stateOpened: \"is-opened\",\n stateOpening: \"is-opening\",\n stateClosing: \"is-closing\",\n stateClosed: \"is-closed\",\n\n // Feature settings\n customProps: [\n \"transition-duration\"\n ],\n customEventPrefix: \"modal:\",\n setTabindex: true,\n teleport: null,\n teleportMethod: \"append\",\n transition: true,\n transitionDuration: 300\n};\n","import { CollectionEntry } from \"@vrembem/core\";\n\nexport class ModalEntry extends CollectionEntry {\n constructor(context, query, options = {}) {\n super(context, query, options);\n this.state = \"closed\";\n this.dialog = null;\n }\n\n get isRequired() {\n return this.dialog.matches(this.getSetting(\"selectorRequired\"));\n }\n\n async open(transition, focus) {\n return this.context.open(this, transition, focus);\n }\n\n async close(transition, focus) {\n return this.context.close(this, transition, focus);\n }\n\n async replace(transition, focus) {\n return this.context.replace(this, transition, focus);\n }\n\n async deregister() {\n return this.context.deregister(this.id);\n }\n\n async beforeMount() {\n // Set the dialog element. If none is found, use the root element.\n const dialog = this.el.querySelector(this.getSetting(\"selectorDialog\"));\n this.dialog = (dialog) ? dialog : this.el;\n\n // Set aria-modal attribute to true.\n this.dialog.setAttribute(\"aria-modal\", \"true\");\n\n // If a role attribute is not set, set it to \"dialog\" as the default.\n if (!this.dialog.hasAttribute(\"role\")) {\n this.dialog.setAttribute(\"role\", \"dialog\");\n }\n\n // Set tabindex=\"-1\" so dialog is focusable via JS or click.\n if (this.getSetting(\"setTabindex\")) {\n this.dialog.setAttribute(\"tabindex\", \"-1\");\n }\n }\n\n async afterRegister() {\n // Setup initial state.\n if (this.el.classList.contains(this.getSetting(\"stateOpened\"))) {\n // Open entry with transitions disabled.\n await this.open(false);\n } else {\n // Remove transition state classes.\n this.el.classList.remove(this.getSetting(\"stateOpening\"));\n this.el.classList.remove(this.getSetting(\"stateClosing\"));\n // Add closed state class.\n this.el.classList.add(this.getSetting(\"stateClosed\"));\n }\n }\n\n async beforeUnmount(reMount = false) {\n // If entry is in the opened state, close it.\n if (!reMount && this.state === \"opened\") {\n await this.close(false);\n } else {\n // Remove modal from stack.\n this.context.stack.remove(this);\n }\n }\n}\n","export function getModal(query) {\n // Get the entry from collection.\n const entry = (typeof query === \"string\") ? this.get(query) : this.get(query.id);\n\n // Return entry if it was resolved, otherwise throw error.\n if (entry) {\n return entry;\n } else {\n throw new Error(`Modal not found in collection with id of \"${query.id || query}\".`);\n }\n}\n","export function updateFocusState() {\n // Check if there's an active modal\n if (this.active) {\n // Mount the focus trap on the active modal.\n this.focusTrap.mount(this.active.dialog, this.settings.selectorFocus);\n } else {\n // Set focus to root trigger and unmount the focus trap.\n if (this.trigger) {\n this.trigger.focus();\n this.trigger = null;\n }\n this.focusTrap.unmount();\n }\n}\n","import { getModal } from \"./helpers\";\n\nexport async function handleClick(event) {\n // If an open, close or replace button was clicked, handle the click event.\n const trigger = event.target.closest(`\n [data-${this.settings.dataOpen}],\n [data-${this.settings.dataReplace}],\n [data-${this.settings.dataClose}]\n `);\n\n if (trigger) {\n // Prevent the default behavior of the trigger.\n event.preventDefault();\n\n // If it's a open trigger...\n if (trigger.matches(`[data-${this.settings.dataOpen}]`)) {\n const selector = trigger.getAttribute(`data-${this.settings.dataOpen}`).trim();\n // Get the entry from collection using the attribute value.\n const entry = getModal.call(this, selector);\n // Store the trigger on the entry if it's not from inside a modal.\n const fromModal = event.target.closest(this.settings.selector);\n if (!fromModal) this.trigger = trigger;\n // Toggle the drawer\n return entry.open();\n }\n\n // If it's a replace trigger...\n if (trigger.matches(`[data-${this.settings.dataReplace}]`)) {\n const selector = trigger.getAttribute(`data-${this.settings.dataReplace}`).trim();\n // Get the entry from collection using the attribute value.\n const entry = getModal.call(this, selector);\n // Store the trigger on the entry if it's not from inside a modal.\n const fromModal = event.target.closest(this.settings.selector);\n if (!fromModal) this.trigger = trigger;\n // Toggle the drawer\n return entry.replace();\n }\n\n if (trigger.matches(`[data-${this.settings.dataClose}]`)) {\n const selector = trigger.getAttribute(`data-${this.settings.dataClose}`).trim();\n return (selector === \"*\") ? this.closeAll() : this.close(selector);\n }\n }\n\n // If there is an active modal and the screen was clicked...\n if (\n this.active &&\n event.target.matches(this.settings.selectorScreen) &&\n !this.active.isRequired\n ) {\n // Close the modal.\n return this.close(this.active.id);\n }\n}\n\nexport function handleKeydown(event) {\n // If escape key was pressed.\n if (event.key === \"Escape\") {\n // If a modal is opened and not required, close the modal.\n if (this.active && !this.active.dialog.matches(this.settings.selectorRequired)) {\n return this.close();\n }\n }\n}\n","import { transition } from \"@vrembem/core\";\nimport { updateFocusState, getModal } from \"./helpers\";\n\nexport async function open(query, transitionOverride = undefined, focus = true) {\n // Get the modal from collection.\n const entry = getModal.call(this, query);\n \n // Maybe add modal to top of stack.\n this.stack.moveToTop(entry);\n\n // If modal is closed.\n if (entry.state === \"closed\") {\n // Update modal state.\n entry.state = \"opening\";\n\n // Add modal to stack.\n this.stack.add(entry);\n\n // Run the open transition.\n if ((transitionOverride != undefined) ? transitionOverride : entry.getSetting(\"transition\")) {\n await transition(\n entry.el, \n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"stateOpening\"),\n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateOpened\"));\n entry.el.classList.remove(entry.getSetting(\"stateClosed\"));\n }\n\n // Update modal state.\n entry.state = \"opened\";\n }\n\n // Update focus if the focus param is true.\n if (focus) {\n updateFocusState.call(this);\n }\n\n // Dispatch custom opened event.\n entry.el.dispatchEvent(new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"opened\", {\n detail: this,\n bubbles: true\n }));\n \n // Return the modal.\n return entry;\n}\n","import { transition } from \"@vrembem/core\";\nimport { updateFocusState, getModal } from \"./helpers\";\n\nexport async function close(query, transitionOverride, focus = true) {\n // Get the modal from collection, or top modal in stack if no query is provided.\n const entry = (query) ? getModal.call(this, query) : this.active;\n\n // If a modal exists and its state is opened.\n if (entry && entry.state === \"opened\") {\n // Update modal state.\n entry.state = \"closing\";\n\n // Remove focus from active element.\n document.activeElement.blur();\n\n // Run the close transition.\n if ((transitionOverride != undefined) ? transitionOverride : entry.getSetting(\"transition\")) {\n await transition(\n entry.el, \n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"stateClosing\"),\n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateClosed\"));\n entry.el.classList.remove(entry.getSetting(\"stateOpened\"));\n }\n\n // Remove modal from stack.\n this.stack.remove(entry);\n\n // Update modal state.\n entry.state = \"closed\";\n\n // Update focus if the focus param is true.\n if (focus) {\n updateFocusState.call(this);\n }\n\n // Dispatch custom closed event.\n entry.el.dispatchEvent(new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"closed\", {\n detail: this,\n bubbles: true\n }));\n }\n\n // Return the modal.\n return entry;\n}\n","import { close } from \"./close\";\n\nexport async function closeAll(exclude, transition) {\n const result = [];\n await Promise.all(this.stack.value.map(async (modal) => {\n if (exclude && exclude === modal.id) {\n Promise.resolve();\n } else {\n result.push(await close.call(this, modal, transition, false));\n }\n modal.trigger = null;\n }));\n return result;\n}\n","import { open } from \"./open\";\nimport { closeAll } from \"./closeAll\";\nimport { updateFocusState, getModal } from \"./helpers\";\n\nexport async function replace(query, transition, focus = true) {\n // Get the modal from collection.\n const entry = getModal.call(this, query);\n\n // Setup results for return.\n let resultOpened, resultClosed;\n\n if (entry.state === \"opened\") {\n // If modal is open, close all modals except for replacement.\n resultOpened = entry;\n resultClosed = await closeAll.call(this, entry.id, transition);\n } else {\n // If modal is closed, close all and open replacement at the same time.\n resultClosed = closeAll.call(this, false, transition);\n resultOpened = open.call(this, entry, transition, false);\n await Promise.all([resultOpened, resultClosed]);\n }\n\n // Update focus if the focus param is true.\n if (focus) {\n updateFocusState.call(this);\n }\n\n // Return the modals there were opened and closed.\n return { opened: resultOpened, closed: resultClosed };\n}\n","import { setGlobalState } from \"@vrembem/core\";\n\nexport function stack(settings) {\n\n const stackArray = [];\n\n return {\n get value() {\n return [...stackArray];\n },\n\n get top() {\n const result = stackArray[stackArray.length - 1];\n return (result) ? result : null;\n },\n\n updateIndex() {\n stackArray.forEach((entry, index) => {\n entry.el.style.zIndex = null;\n const value = getComputedStyle(entry.el)[\"z-index\"];\n entry.el.style.zIndex = parseInt(value) + index + 1;\n });\n },\n\n setGlobalState() {\n setGlobalState(this.top, settings.selectorInert, settings.selectorOverflow);\n this.updateIndex();\n },\n\n add(entry) {\n // Apply z-index styles based on stack length.\n entry.el.style.zIndex = null;\n const value = getComputedStyle(entry.el)[\"z-index\"];\n entry.el.style.zIndex = parseInt(value) + stackArray.length + 1;\n\n // Move back to end of stack.\n stackArray.push(entry);\n\n // Update the global state.\n this.setGlobalState();\n },\n\n remove(entry) {\n // Get the index of the entry.\n const index = stackArray.findIndex((item) => {\n return (item.id === entry.id);\n });\n\n // If entry is in stack...\n if (index >= 0) {\n // Remove z-index styles.\n entry.el.style.zIndex = null;\n\n // Remove entry from stack array.\n stackArray.splice(index, 1);\n\n // Update the global state.\n this.setGlobalState();\n }\n },\n\n moveToTop(entry) {\n // Get the index of the entry.\n const index = stackArray.findIndex((item) => {\n return (item.id === entry.id);\n });\n\n // If entry is in stack...\n if (index >= 0) {\n // Remove entry from stack array.\n stackArray.splice(index, 1);\n\n // Add entry back to top of stack.\n this.add(entry);\n }\n }\n };\n}\n","import { Collection, FocusTrap } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { ModalEntry } from \"./ModalEntry\";\nimport { handleClick, handleKeydown } from \"./handlers\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { closeAll } from \"./closeAll\";\nimport { replace } from \"./replace\";\nimport { stack } from \"./stack\";\nimport { updateFocusState } from \"./helpers\";\n\nexport class Modal extends Collection {\n #handleClick;\n #handleKeydown;\n\n constructor(options) {\n super({ ...defaults, ...options});\n this.trigger = null;\n this.focusTrap = new FocusTrap();\n this.#handleClick = handleClick.bind(this);\n this.#handleKeydown = handleKeydown.bind(this);\n\n // Setup stack module.\n this.stack = stack(this.settings);\n }\n\n get active() {\n return this.stack.top;\n }\n\n async createEntry(query, config) {\n return new ModalEntry(this, query, config);\n }\n\n async open(id, transition, focus) {\n return open.call(this, id, transition, focus);\n }\n\n async close(id, transition, focus) {\n return close.call(this, id, transition, focus);\n }\n\n async replace(id, transition, focus) {\n return replace.call(this, id, transition, focus);\n }\n\n async closeAll(exclude = false, transition, focus = true) {\n const result = await closeAll.call(this, exclude, transition);\n // Update focus if the focus param is true.\n if (focus) {\n updateFocusState.call(this);\n }\n return result;\n }\n\n async afterMount() {\n document.addEventListener(\"click\", this.#handleClick, false);\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n async beforeUnmount() {\n this.trigger = null;\n }\n\n async afterUnmount() {\n document.removeEventListener(\"click\", this.#handleClick, false);\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n}\n","export default {\n // Selectors\n selector: \".popover\",\n selectorTooltip: \".popover_tooltip\",\n selectorArrow: \".popover__arrow\",\n\n // State classes\n stateActive: \"is-active\",\n\n // Custom properties and their defaults\n customProps: [\n \"placement\",\n \"event\",\n \"offset\",\n \"flip-padding\",\n \"shift-padding\",\n \"arrow-padding\",\n \"toggle-delay\"\n ],\n placement: \"bottom\",\n event: \"click\",\n offset: 0,\n flipPadding: 0,\n shiftPadding: 0,\n arrowPadding: 0,\n toggleDelay: 0,\n\n // Feature settings\n teleport: null,\n teleportMethod: \"append\",\n};\n","export function applyPositionStyle(el, x, y) {\n Object.assign(el.style, {\n left: x != null ? `${x}px` : \"\",\n top: y != null ? `${y}px` : \"\"\n });\n}\n","export function getDelay(popover, index) {\n // Get the initial toggle delay value from settings.\n let value = popover.getSetting(\"toggle-delay\");\n\n // Check if value is a string.\n if (typeof value == \"string\") {\n // Convert it to an array if value contains a comma.\n if (value.indexOf(\",\") > -1) {\n value = value.split(\",\");\n }\n // Convert it to an array if value contains a space.\n if (value.indexOf(\" \") > -1) {\n value = value.split(\" \");\n }\n }\n\n // Check if value is an array and get the index.\n if (Array.isArray(value)) {\n value = value[index];\n }\n \n // Convert the value to a number if possible.\n const number = Number(value);\n\n // Check if the number is in fact a number.\n if (!Number.isNaN(number)) {\n return number;\n } else {\n throw(new Error(`Provided delay value is not a number: \"${value}\"`));\n }\n}\n","export function getPadding(value) {\n // Initialize the padding var.\n let padding;\n\n // Split the value by spaces if it's a string.\n const array = (typeof value === \"string\") ? value.trim().split(\" \") : [value];\n\n // Convert individual values to integers.\n for (let index = 0; index < array.length; index++) {\n array[index] = Number(array[index]);\n }\n\n // Build the padding object based on the number of values passed.\n switch (array.length) {\n case 1:\n padding = array[0];\n break;\n case 2:\n padding = {\n top: array[0],\n right: array[1],\n bottom: array[0],\n left: array[1]\n };\n break;\n case 3:\n padding = {\n top: array[0],\n right: array[1],\n bottom: array[2],\n left: array[1]\n };\n break;\n case 4:\n padding = {\n top: array[0],\n right: array[1],\n bottom: array[2],\n left: array[3]\n };\n break;\n default:\n padding = false;\n break;\n }\n\n // Return the padding object.\n return padding;\n}\n","import { getPadding } from \"./getPadding\";\n\nexport function getMiddlewareOptions(popover) { \n return {\n offset: Number(popover.getSetting(\"offset\")),\n flip: {\n padding: getPadding(popover.getSetting(\"flip-padding\"))\n },\n shift: {\n padding: getPadding(popover.getSetting(\"shift-padding\"))\n },\n arrow: {\n element: popover.getSetting(\"selectorArrow\"),\n padding: getPadding(popover.getSetting(\"arrow-padding\"))\n }\n };\n}\n","export function getPopover(query) {\n // Get the entry from collection.\n const entry = (typeof query === \"string\") ? this.get(query) : this.get(query.id);\n\n // Return entry if it was resolved, otherwise throw error.\n if (entry) {\n return entry;\n } else {\n throw new Error(`Popover not found in collection with id of \"${query}\".`);\n }\n}\n","import { getPopover } from \"./helpers\";\n\nexport async function close(query) {\n // Get the popover from collection.\n const popover = (query) ? getPopover.call(this, query) : await closeAll.call(this);\n\n // If a modal exists and its state is opened.\n if (popover && popover.state === \"opened\") {\n\n // Update inert state and state class.\n popover.el.inert = true;\n popover.el.classList.remove(this.settings.stateActive);\n\n // Update accessibility attribute(s).\n if (!popover.isTooltip) {\n popover.trigger.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Clean up the floating UI instance.\n popover.floatingCleanup();\n\n // Update popover state.\n popover.state = \"closed\";\n\n // Clear root trigger if popover trigger matches.\n if (popover.trigger === this.trigger) {\n this.trigger = null;\n }\n }\n\n // Return the popover.\n return popover;\n}\n\nexport async function closeAll() {\n const result = [];\n await Promise.all(this.collection.map(async (popover) => {\n if (popover.state === \"opened\") {\n result.push(await close.call(this, popover));\n }\n }));\n return result;\n}\n\nexport function closeCheck(popover) {\n // Only run closeCheck if provided popover is currently open.\n if (popover.state != \"opened\") return;\n\n // Needed to correctly check which element is currently being focused.\n setTimeout(() => {\n // Check if trigger or element are being hovered.\n const isHovered =\n popover.el.matches(\":hover\") === popover.el ||\n popover.trigger.matches(\":hover\") === popover.trigger;\n\n // Check if trigger or element are being focused.\n let isFocused = document.activeElement.closest(\n `#${popover.id}, [aria-controls=\"${popover.id}\"], [aria-describedby=\"${popover.id}\"]`\n );\n\n // If a focused element was returned, ensure that it is focus-visible.\n isFocused = (isFocused) ? isFocused.matches(\":focus-visible\") : false;\n\n // Close if the trigger and element are not currently hovered or focused.\n if (!isHovered && !isFocused) {\n popover.close();\n }\n\n // Return the popover.\n return popover;\n }, 1);\n}\n","import { getDelay } from \"./helpers\";\nimport { closeAll, closeCheck } from \"./close\";\n\nexport function handleClick(popover) {\n if (popover.state === \"opened\") {\n popover.close();\n } else {\n this.trigger = popover.trigger;\n popover.open();\n }\n}\n\nexport function handleTooltipClick(popover) {\n if (popover.isTooltip) {\n if (popover.toggleDelayId) {\n clearTimeout(popover.toggleDelayId);\n }\n popover.close();\n }\n}\n\nexport function handleMouseEnter(popover, event) {\n // Store our hover state.\n popover.isHovered = event;\n\n // Guard to ensure only focus-visible triggers the tooltip on focus events.\n if (event.type == \"focus\" && !popover.trigger.matches(\":focus-visible\")) {\n return;\n }\n\n // Clear any existing toggle delays.\n if (popover.toggleDelayId) {\n clearTimeout(popover.toggleDelayId);\n }\n\n // Guard to ensure a popover is not already open for this trigger.\n const isExpanded = popover.trigger.getAttribute(\"aria-expanded\");\n if (isExpanded && isExpanded == \"true\") return;\n\n // Remove the open delay if a hover popover is already active.\n const delay = (this.activeHover) ? 0 : getDelay(popover, 0);\n\n // Close any active hover popovers.\n if (this.activeHover) this.activeHover.close();\n\n // Set the toggle delay before opening the popover.\n popover.toggleDelayId = setTimeout(() => {\n // If the popover still exists, open it.\n if (popover.id) popover.open();\n }, delay);\n}\n\nexport function handleMouseLeave(popover, event) {\n // Add a tiny delay to ensure hover isn't being moved to the popover element.\n setTimeout(() => {\n // Update our hover state.\n popover.isHovered = event;\n\n // Guard to prevent closing popover if either elements are being hovered.\n if (popover.isHovered) return;\n\n // Clear any existing toggle delays.\n if (popover.toggleDelayId) {\n clearTimeout(popover.toggleDelayId);\n }\n\n // Set the toggle delay before closing the popover.\n popover.toggleDelayId = setTimeout(() => {\n closeCheck.call(this, popover);\n }, getDelay(popover, 1));\n }, 1);\n}\n\nexport function handleKeydown(event) {\n switch (event.key) {\n case \"Escape\":\n if (this.trigger) {\n this.trigger.focus();\n }\n closeAll.call(this);\n return;\n\n case \"Tab\":\n this.collection.forEach((popover) => {\n closeCheck.call(this, popover);\n });\n return;\n\n default:\n return;\n }\n}\n\nexport function handleDocumentClick(popover) {\n const root = this;\n document.addEventListener(\"click\", function _f(event) {\n // Check if a popover or its trigger was clicked.\n const wasClicked = event.target.closest(\n `#${popover.id}, [aria-controls=\"${popover.id}\"], [aria-describedby=\"${popover.id}\"]`\n );\n\n // If popover or popover trigger was clicked...\n if (wasClicked) {\n // If popover element exists and is not active...\n if (popover.el && !popover.el.classList.contains(root.settings.stateActive)) {\n this.removeEventListener(\"click\", _f);\n }\n\n } else {\n // If popover element exists and is active...\n if (popover.el && popover.el.classList.contains(root.settings.stateActive)) {\n popover.close();\n }\n this.removeEventListener(\"click\", _f);\n }\n });\n}\n","import { CollectionEntry } from \"@vrembem/core\";\n\nimport {\n handleClick,\n handleTooltipClick,\n handleMouseEnter,\n handleMouseLeave\n} from \"./handlers\";\n\nexport class PopoverEntry extends CollectionEntry {\n #eventListeners;\n #isHovered;\n\n constructor(context, query, options = {}) {\n super(context, query, options);\n this.state = \"closed\";\n this.toggleDelayId = null;\n this.trigger = null;\n this.#eventListeners = null;\n this.#isHovered = {\n el: false,\n trigger: false\n };\n this.floatingCleanup = () => {};\n }\n \n get isTooltip() {\n return !!this.el.closest(this.getSetting(\"selectorTooltip\")) || this.el.getAttribute(\"role\") == \"tooltip\";\n }\n\n get isHovered() {\n return this.#isHovered.el || this.#isHovered.trigger;\n }\n\n set isHovered(event) {\n // The state can either be true, false or undefined based on event type.\n const state = (event.type == \"mouseenter\") ? true : (event.type == \"mouseleave\") ? false : undefined;\n // Guard in case the event type is not \"mouseenter\" or \"mouseleave\".\n if (state == undefined) return;\n // Store the hover state if the event target matches the el or trigger.\n switch (event.target) {\n case this.el:\n this.#isHovered.el = state;\n break;\n case this.trigger:\n this.#isHovered.trigger = state;\n break;\n }\n }\n \n async open() {\n return this.context.open(this);\n }\n\n async close() {\n return this.context.close(this);\n }\n \n async deregister() {\n return this.context.deregister(this.id);\n }\n\n registerEventListeners() {\n // If event listeners aren't already setup.\n if (!this.#eventListeners) {\n // Add event listeners based on event type.\n const eventType = this.getSetting(\"event\");\n \n // If the event type is hover.\n if (eventType === \"hover\") {\n // Setup event listeners object for hover.\n this.#eventListeners = [{\n el: [\"el\", \"trigger\"],\n type: [\"mouseenter\", \"focus\"],\n listener: handleMouseEnter.bind(this.context, this)\n }, {\n el: [\"el\", \"trigger\"],\n type: [\"mouseleave\", \"focusout\"],\n listener: handleMouseLeave.bind(this.context, this)\n }, {\n el: [\"trigger\"],\n type: [\"click\"],\n listener: handleTooltipClick.bind(this.context, this)\n }];\n \n // Loop through listeners and apply to the appropriate elements.\n this.#eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n this[el].addEventListener(type, evObj.listener, false);\n });\n });\n });\n }\n \n // Else the event type is click.\n else {\n // Setup event listeners object for click.\n this.#eventListeners = [{\n el: [\"trigger\"],\n type: [\"click\"],\n listener: handleClick.bind(this.context, this)\n }];\n \n // Loop through listeners and apply to the appropriate elements.\n this.#eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n this[el].addEventListener(type, evObj.listener, false);\n });\n });\n });\n }\n }\n }\n \n deregisterEventListeners() {\n // If event listeners have been setup.\n if (this.#eventListeners) {\n // Loop through listeners and remove from the appropriate elements.\n this.#eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n this[el].removeEventListener(type, evObj.listener, false);\n });\n });\n });\n \n // Remove eventListeners object from collection.\n this.#eventListeners = null;\n }\n }\n\n async beforeMount() {\n // Get the trigger element.\n this.trigger = document.querySelector(\n `[aria-controls=\"${this.id}\"], [aria-describedby=\"${this.id}\"]`\n );\n\n // If it's a tooltip...\n if (this.isTooltip) {\n // Set the event to hover role=\"tooltip\" attribute.\n this.settings.event = \"hover\";\n this.el.setAttribute(\"role\", \"tooltip\");\n } else {\n // Set aria-expanded to false if trigger has aria-controls attribute.\n this.trigger.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Setup event listeners.\n this.registerEventListeners();\n }\n\n async afterRegister() {\n // Set initial state based on the presence of the active class.\n if (this.el.classList.contains(this.getSetting(\"stateActive\"))) {\n await this.open();\n } else {\n this.el.inert = true;\n }\n }\n\n async beforeUnmount() {\n // If entry is in the opened state, close it.\n if (this.state === \"opened\") {\n await this.close();\n }\n\n // Clean up the floating UI instance.\n this.floatingCleanup();\n \n // Remove event listeners.\n this.deregisterEventListeners();\n }\n}\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};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\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 return ['top', 'bottom'].includes(getSide(placement)) ? '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.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\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 return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\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 * 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 validMiddleware = middleware.filter(Boolean);\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 middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\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,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\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 * 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/**\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 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 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 // 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 // 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 } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await 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 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\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 = ['left', 'top'].includes(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 } = 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 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 = ['top', 'left'].includes(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 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) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\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 return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\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 (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(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 }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\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, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getNodeScroll, 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(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(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\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 (isHTMLElement(offsetParent)) {\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 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,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\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\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(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\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 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 ...clippingAncestor,\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y\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(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(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(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 && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || 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 firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.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 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 // 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 offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n let htmlX = 0;\n let htmlY = 0;\n if (documentElement && !isOffsetParentAnElement && !isFixed) {\n const htmlRect = documentElement.getBoundingClientRect();\n htmlY = htmlRect.top + scroll.scrollTop;\n htmlX = htmlRect.left + scroll.scrollLeft -\n // RTL <body> scrollbar.\n getWindowScrollBarX(documentElement, htmlRect);\n }\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlX;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlY;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(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(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\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 {\n left,\n top,\n width,\n height\n } = element.getBoundingClientRect();\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 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) : []), ...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) {\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 resizeObserver.observe(floating);\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 && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\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","import {\n computePosition,\n autoUpdate,\n flip,\n shift,\n limitShift,\n offset,\n arrow\n} from \"@floating-ui/dom\";\nimport {\n applyPositionStyle,\n getMiddlewareOptions,\n getPopover\n} from \"./helpers\";\nimport { handleDocumentClick } from \"./handlers\";\n\nexport async function open(query) {\n // Get the popover from collection.\n const popover = getPopover.call(this, query);\n\n // Update inert state and state class.\n popover.el.inert = false;\n popover.el.classList.add(this.settings.stateActive);\n\n // Update accessibility attribute(s).\n if (!popover.isTooltip) {\n popover.trigger.setAttribute(\"aria-expanded\", \"true\");\n }\n\n // Get the custom property data before opening the popover.\n popover.getCustomProps();\n\n // Get the middleware options for floating ui.\n const middlewareOptions = getMiddlewareOptions(popover);\n\n // Get the arrow element.\n const arrowEl = popover.el.querySelector(middlewareOptions.arrow.element);\n middlewareOptions.arrow.element = arrowEl ? arrowEl : undefined;\n\n // Setup the autoUpdate of popover positioning and store the cleanup function.\n popover.floatingCleanup = autoUpdate(popover.trigger, popover.el, () => {\n computePosition(popover.trigger, popover.el, {\n placement: popover.getSetting(\"placement\"),\n middleware: [\n flip(middlewareOptions.flip),\n shift({ ...middlewareOptions.shift, limiter: limitShift() }),\n offset(middlewareOptions.offset),\n arrow(middlewareOptions.arrow)\n ]\n }).then(({ x, y, placement, middlewareData }) => {\n // Guard in case there is no popover element.\n if (!popover.el) { return; }\n\n // Apply popover left and top position.\n applyPositionStyle(popover.el, x, y);\n\n // Maybe apply arrow left or top position.\n if (middlewareOptions.arrow.element && middlewareData.arrow) {\n const { x, y } = middlewareData.arrow;\n applyPositionStyle(middlewareOptions.arrow.element, x, y);\n }\n\n // Apply the current placement as a data attribute.\n // This is used in our CSS to determine the vertical position of arrows.\n popover.el.setAttribute(\"data-floating-placement\", placement);\n });\n });\n\n // Update popover state.\n popover.state = \"opened\";\n\n // Apply document click handler.\n if (popover.getSetting(\"event\") === \"click\") {\n handleDocumentClick.call(this, popover);\n }\n\n // Return the popover.\n return popover;\n}\n","import { Collection } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { PopoverEntry } from \"./PopoverEntry\";\nimport { handleKeydown } from \"./handlers\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\n\nexport class Popover extends Collection {\n #handleKeydown;\n\n constructor(options = {}) {\n super({ ...defaults, ...options});\n this.trigger = null;\n this.#handleKeydown = handleKeydown.bind(this);\n }\n\n get active() {\n return this.get(\"opened\", \"state\");\n }\n\n get activeHover() {\n return this.collection.find((popover) => {\n return popover.state == \"opened\" && popover.getSetting(\"event\") == \"hover\";\n });\n }\n\n async createEntry(query, config) {\n return new PopoverEntry(this, query, config);\n }\n\n async open(id) {\n return open.call(this, id);\n }\n\n async close(id) {\n return close.call(this, id);\n }\n\n async afterMount() {\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n async beforeUnmount() {\n this.trigger = null;\n }\n\n async afterUnmount() {\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n}\n"],"names":["toCamel","value","word","index","toKebab","toMilliseconds","parsed","isMilliseconds","getPrefix","cssVar","property","options","settings","prefixValue","cssValue","getConfig","el","dataConfig","json","getCustomProps","entry","styles","result","keys","i","prefix","module","key","getElement","query","maybeReturnSetting","prop","type","obj","getSetting","fallback","props","lifecycleHook","name","args","transition","init","interim","final","duration","resolve","setOverflowHidden","state","selector","setInert","setGlobalState","selectorInert","selectorOverflow","Breakpoint","handler","__privateAdd","_handler","__privateSet","__privateGet","func","Collection","config","CollectionEntry","id","reReg","els","context","reMount","ref","method","teleport","FocusTrap","selectorFocus","_focusable","_handleFocusTrap","_handleFocusLock","handleFocusTrap","handleFocusLock","focusable","initFocus","initScrollTop","focusableSelectors","notInert","notNegTabIndex","notDisabled","event","localStore","enable","local","store","what","where","how","isComment","isElement","returnRef","themeStore","callbacks","profile","api","theme","defaults$2","applyInitialState","applyInlineState","getBreakpoint","drawer","bp","getDrawer","updateFocusState","switchMode","toInline","toModal","DrawerEntry","_mode","_state","_breakpoint","focus","bpMode","dialog","close","handleClick","trigger","parent","handleKeydown","open","transitionOverride","toggle","Drawer","defaults","_handleClick","_handleKeydown","defaults$1","ModalEntry","getModal","closeAll","exclude","modal","replace","resultOpened","resultClosed","stack","stackArray","item","Modal","applyPositionStyle","x","y","getDelay","popover","number","getPadding","padding","array","getMiddlewareOptions","getPopover","closeCheck","isHovered","isFocused","handleTooltipClick","handleMouseEnter","isExpanded","delay","handleMouseLeave","handleDocumentClick","root","_f","PopoverEntry","_eventListeners","_isHovered","evObj","min","max","round","floor","createCoords","v","oppositeSideMap","oppositeAlignmentMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","side","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","getPaddingObject","rectToClientRect","rect","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","fn","nextX","nextY","data","reset","detectOverflow","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","d","a","b","_overflowsData$filter2","currentSideAxis","acc","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","convertOffsetParentRelativeRectToViewportRelativeRect","documentElement","topLayer","scroll","offsets","isOffsetParentAnElement","offsetRect","getClientRects","getWindowScrollBarX","leftScroll","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","htmlX","htmlY","htmlRect","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","observeMove","onMove","io","timeoutId","cleanup","_io","refresh","skip","threshold","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","middlewareOptions","arrowEl","Popover"],"mappings":"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","x_google_ignoreList":[52,53,54,55]}
1
+ {"version":3,"file":"index.umd.cjs","sources":["../../core/src/js/utilities/focusableSelectors.ts","../../core/src/js/utilities/getDataConfig.ts","../../core/src/js/utilities/getElement.ts","../../core/src/js/utilities/maybeRunMethod.ts","../../core/src/js/utilities/teleportElement.ts","../../core/src/js/utilities/toCamel.ts","../../core/src/js/utilities/toKebab.ts","../../core/src/js/utilities/toMilliseconds.ts","../../core/src/js/utilities/transition.ts","../../core/src/js/helpers/cssVar.ts","../../core/src/js/helpers/dispatchLifecycleHook.ts","../../core/src/js/helpers/getCustomProps.ts","../../core/src/js/helpers/getPrefix.ts","../../core/src/js/helpers/getSetting.ts","../../core/src/js/helpers/setGlobalState.ts","../../core/src/js/modules/eventEmitter.js","../../core/src/js/modules/FocusableArray.js","../../core/src/js/modules/FocusTrap.js","../../core/src/js/modules/localStore.js","../../core/src/js/modules/PluginsArray.js","../../core/src/js/modules/StackArray.js","../../core/src/js/plugins/debug.js","../../core/src/js/plugins/focusTrap.js","../../core/src/js/plugins/mediaQuery.js","../../core/src/js/plugins/propStore.js","../../core/src/js/plugins/teleport.js","../../core/src/js/defaults.js","../../core/src/js/CollectionEntry.js","../../core/src/js/Collection.js","../../core/src/js/themeStore.js","../../drawer/src/js/defaults.js","../../drawer/src/js/presets.js","../../drawer/src/js/switchMode.js","../../drawer/src/js/DrawerEntry.js","../../drawer/src/js/helpers/getDrawer.js","../../drawer/src/js/handlers.js","../../drawer/src/js/helpers/updateFocusState.js","../../drawer/src/js/open.js","../../drawer/src/js/close.js","../../drawer/src/js/toggle.js","../../drawer/src/js/Drawer.js","../../modal/src/js/defaults.js","../../modal/src/js/ModalEntry.js","../../modal/src/js/helpers/getModal.js","../../modal/src/js/handlers.js","../../modal/src/js/helpers/updateFocusState.js","../../modal/src/js/open.js","../../modal/src/js/close.js","../../modal/src/js/closeAll.js","../../modal/src/js/replace.js","../../modal/src/js/Modal.js","../../popover/src/js/defaults.js","../../popover/src/js/helpers/applyPositionStyle.js","../../popover/src/js/helpers/getDelay.js","../../popover/src/js/helpers/getPadding.js","../../popover/src/js/helpers/getMiddlewareOptions.js","../../popover/src/js/helpers/getPopover.js","../../popover/src/js/close.js","../../popover/src/js/handlers.js","../../popover/src/js/PopoverEntry.js","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../popover/src/js/open.js","../../popover/src/js/Popover.js"],"sourcesContent":["// This has been copied over from focusable-selectors package and modified.\n// Source: https://github.com/KittyGiraudel/focusable-selectors\nconst notInert = \":not([inert])\"; // Previously `:not([inert]):not([inert] *)`\nconst notNegTabIndex = ':not([tabindex^=\"-\"])';\nconst notDisabled = \":not(:disabled)\";\n\nexport const focusableSelectors: Array<string> = [\n `a[href]${notInert}${notNegTabIndex}`,\n `area[href]${notInert}${notNegTabIndex}`,\n `input:not([type=\"hidden\"]):not([type=\"radio\"])${notInert}${notNegTabIndex}${notDisabled}`,\n `input[type=\"radio\"]${notInert}${notNegTabIndex}${notDisabled}`,\n `select${notInert}${notNegTabIndex}${notDisabled}`,\n `textarea${notInert}${notNegTabIndex}${notDisabled}`,\n `button${notInert}${notNegTabIndex}${notDisabled}`,\n `details${notInert} > summary:first-of-type${notNegTabIndex}`,\n `iframe${notInert}${notNegTabIndex}`,\n `audio[controls]${notInert}${notNegTabIndex}`,\n `video[controls]${notInert}${notNegTabIndex}`,\n `[contenteditable]${notInert}${notNegTabIndex}`,\n `[tabindex]${notInert}${notNegTabIndex}`\n];\n","/**\n * Get and parses a JSON object from a `data-*` attribute of an HTML element.\n *\n * @param {HTMLElement} el\n * Element to get the query the data from.\n * @param {string} [dataConfig=\"config\"]\n * The name of the data attribute to get.\n *\n * @returns {JSON}\n * A parsed JSON object from the `data-*` attribute, or an empty object\n * if the attribute is not found or invalid.\n */\nexport function getDataConfig(\n el: HTMLElement,\n dataConfig: string = \"config\"\n): JSON {\n const string = el.getAttribute(`data-${dataConfig}`) || \"\";\n const json = string.replace(/'/g, '\"');\n return json ? JSON.parse(json) : {};\n}\n","/**\n * Retrieves an HTML element by its ID or returns the element directly if it's\n * already provided.\n *\n * @param {string|HTMLElement} query\n * A string representing an element's ID or an `HTMLElement`.\n * - If a string is provided, it will be used with `getElementById`.\n * - If an `HTMLElement` is provided, it will be returned directly.\n *\n * @returns {HTMLElement|null}\n * An `HTMLElement` or `null` if no element was found.\n */\nexport function getElement(query: string | HTMLElement): HTMLElement | null {\n if (typeof query === \"string\") {\n return document.getElementById(query);\n } else if (query instanceof HTMLElement) {\n return query;\n } else {\n return null;\n }\n}\n","/**\n * Conditionally calls a method on an object if it exists and is a function.\n *\n * @param {object} obj - The object to check the method against and maybe call.\n * @param {string} name - The name of the method to potentially call.\n * @param {any} args - Arguments to pass to the method if it is called.\n *\n * @return {promise}\n * A promise that resolves when the method (if called) completes, or\n * immediately if no method is called.\n */\nexport async function maybeRunMethod(\n obj: Record<string, any>,\n name: string,\n ...args: unknown[]\n): Promise<void> {\n if (name in obj && typeof obj[name] === \"function\") {\n await obj[name](...args);\n }\n}\n","/**\n * Teleports an element in the DOM based on a reference and teleport method.\n *\n * @param {HTMLElement} what - What element to teleport.\n * @param {HTMLElement|string} where - Where to teleport the element.\n * @param {string} how - How (method) to teleport the element.\n * Available options: \"after\", \"before\", \"append\" or \"prepend\".\n *\n * @return {function}\n * The return function for returning the node back to its reference location.\n */\nexport function teleportElement(\n what: HTMLElement,\n where: HTMLElement | string,\n how: \"after\" | \"before\" | \"append\" | \"prepend\"\n): Function {\n // If `where` is a string, ensure that it returns an HTML element\n if (typeof where === \"string\") {\n const whereEl = document.querySelector(where);\n if (!whereEl) {\n throw new Error(`No teleport reference found for selector: ${where}`);\n }\n where = whereEl as HTMLElement;\n } else if (!(where instanceof HTMLElement)) {\n // If `where` is not a string or HTML element, throw an error\n throw new Error(`Not a valid teleport reference: '${where}'`);\n }\n\n // Ensure that `how` is a valid teleport method\n if (typeof where[how] != \"function\")\n throw new Error(`Not a valid teleport method: '${how}'`);\n\n // If the return element isn't already a return reference comment create a\n // return reference comment and add it before the `what` node.\n let returnRef: Comment | null = document.createComment(\n \"teleported #\" + what.id\n );\n what.before(returnRef);\n\n // Teleport the target node\n where[how](what);\n\n // Return cleanup function for returning node to its original location\n return () => {\n if (returnRef) {\n // Teleport the element back to the return reference\n returnRef.after(what);\n // Delete the return reference comment and set value to null\n returnRef.remove();\n returnRef = null;\n }\n };\n}\n","/**\n * Converts a kebab-case string into a camelCase string.\n *\n * @param {string} value - The string to convert from kebab-case to camelCase.\n *\n * @returns {string} A string in camelCase format.\n */\nexport function toCamel(value: string): string {\n return value\n .split(\"-\")\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join(\"\");\n}\n","/**\n * Converts a camelCase or PascalCase string into a kebab-case string.\n *\n * @param {string} value - The string to convert into kebab-case.\n *\n * @returns {string} A string in kebab-case format.\n */\nexport function toKebab(value: string): string {\n return value.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n","/**\n * Converts a string number value to milliseconds.\n *\n * @param {string|number} value\n * The string value to convert. If the value is already a number, it's\n * returned directly.\n *\n * @returns {number}\n * A number representing the equivalent value in milliseconds.\n *\n * @throws {Error} If the value cannot be converted to a valid number.\n */\nexport function toMilliseconds(value: string | number): number {\n // Return the value directly if it's a number\n if (typeof value === \"number\") {\n return value;\n }\n\n const parsed = parseFloat(value);\n\n // Check if parsed value is a valid number\n if (!Number.isNaN(parsed)) {\n const isMilliseconds = value.includes(\"ms\");\n return parsed * (isMilliseconds ? 1 : 1000);\n }\n\n // Throw an error if the value could not be converted\n throw new Error(`Could not convert value to milliseconds: ${value}`);\n}\n","import { toMilliseconds } from \"./toMilliseconds\";\n\n/**\n * Get the value of a CSS custom property (variable).\n *\n * @param {Node} el - The element to transition.\n * @param {string} init - The initial state class.\n * @param {string} interim - The interim state class.\n * @param {string} final - The final state class.\n * @param {number|string} [duration=0]\n * Either a CSS custom property to get a duration value from or a millisecond\n * value used for the transition duration.\n *\n * @return {Promise} Promise that resolves when the transition has finished.\n */\nexport function transition(\n el: HTMLElement,\n init: string,\n interim: string,\n final: string,\n duration: number = 0\n): Promise<HTMLElement> {\n return new Promise((resolve) => {\n // Toggle classes for start of transition\n el.classList.remove(init);\n el.classList.add(interim);\n\n // Setup the transition timing\n setTimeout(() => {\n // Toggle classes for end of transition\n el.classList.add(final);\n el.classList.remove(interim);\n\n // Resolve the promise\n resolve(el);\n }, toMilliseconds(duration));\n });\n}\n","import { getPrefix } from \"./\";\n\ntype cssVarOptions = {\n fallback?: string;\n element?: HTMLElement;\n};\n\n/**\n * Get the value of a CSS custom property (variable).\n *\n * @param {string} property\n * The CSS custom property to query for. If not prefixed with `--`, a prefix\n * will be added automatically.\n * @param {cssVarOptions} options\n * An optional configuration object:\n * - `fallback` (string): A fallback value to return if the custom property is\n * not found. Defaults to `null` for no fallback.\n * - `element` (HTMLElement): The HTML element to query the CSS variable from.\n * Defaults to `document.body`.\n *\n * @return {string}\n * The CSS value of the custom property, the fallback value, or an error if\n * the property is not found and no fallback is provided.\n */\nexport function cssVar(property: string, options: cssVarOptions = {}): string {\n const settings = {\n fallback: null,\n element: document.body,\n ...options\n };\n\n // If property doesn't have CSS variable double dash...\n if (!property.startsWith(\"--\")) {\n // Get the prefix value\n const prefixValue = getPrefix();\n\n // If a prefix was found, add it to the property name\n if (prefixValue) {\n property = `${prefixValue}${property}`;\n }\n\n // Add the double dash for CSS variables to the property name\n property = `--${property}`;\n }\n\n // Get the CSS value\n const cssValue = getComputedStyle(settings.element)\n .getPropertyValue(property)\n .trim();\n\n // If a CSS value was found, return the CSS value\n if (cssValue) {\n return cssValue;\n }\n\n // Else, return the fallback or a blocking error\n else {\n if (settings.fallback) {\n return settings.fallback;\n } else {\n throw new Error(`CSS variable \"${property}\" was not found!`);\n }\n }\n}\n","import { maybeRunMethod } from \"../utilities\";\n\ntype Parent = {\n plugins: Record<string, any>[];\n emit: (name: string, entry?: object) => Promise<void>;\n};\n\n/**\n * Dispatches a lifecycle hook to the parent, entry, and its plugins.\n *\n * @param {string} name\n * The name of the lifecycle hook to dispatch.\n * @param {Parent} parent\n * The parent object that contains a plugins array and an `emit` function.\n * @param {object} entry\n * (Optional) An entry object to run the lifecycle hook on.\n *\n * @returns A promise that resolves once all hooks and emissions are completed.\n */\nexport async function dispatchLifecycleHook(\n name: string,\n parent: Parent,\n entry?: object\n): Promise<void> {\n // Run the lifecycle hook on the parent object\n await maybeRunMethod(parent, name, entry);\n\n // If an entry was provided, run the lifecycle hook\n if (entry) {\n await maybeRunMethod(entry, name);\n }\n\n // Run the lifecycle hook on any plugins that have them\n for (const plugin of parent.plugins) {\n await maybeRunMethod(plugin, name, { plugin, parent, entry });\n }\n\n // Emit the lifecycle hook event\n await parent.emit(name, entry);\n}\n","import { toKebab } from \"../utilities\";\nimport { getPrefix } from \"./\";\n\ntype Entry = {\n el: HTMLElement;\n parent: {\n module: string;\n };\n getSetting: (key: string) => string[];\n};\n\n/**\n * Extracts CSS custom properties for a given entry based on its settings.\n *\n * @param {Entry} entry - An object representing the entry with its associated\n * settings and element.\n *\n * @returns {object} A key/value object of custom property names (in kebab-case)\n * to their corresponding CSS values.\n */\nexport function getCustomProps(entry: Entry): Record<string, string> {\n // Get the computed styles of the element\n const styles = getComputedStyle(entry.el);\n\n // Initialize the results object for storing custom property key/value pairs\n const result = {};\n\n // Get the custom property keys\n const keys = entry.getSetting(\"customProps\");\n\n // Loop through the custom properties object\n for (let i = 0; i < keys.length; i++) {\n // Get the custom property value\n const prefix = getPrefix();\n const module = entry.parent.module.toLowerCase();\n const key = toKebab(keys[i]);\n const value = styles.getPropertyValue(`--${prefix}${module}-${key}`).trim();\n // If a value was found, add it to our results object\n if (value) {\n result[key] = value;\n }\n }\n\n // Return the config object\n return result;\n}\n","/**\n * Get the Vrembem variables prefix from the `--vb-prefix` custom property.\n *\n * @returns {string} The value of the defined prefix variable.\n */\nexport function getPrefix(): string {\n return getComputedStyle(document.body).getPropertyValue(\"--vb-prefix\").trim();\n}\n","import { toCamel, toKebab } from \"../utilities\";\n\n/**\n * Attempts to retrieve a deeply nested property from the context (`this`)\n * object using a key and a case transformation (camelCase or kebab-case).\n *\n * @param {string} prop - The initial property path to start the query.\n * @param {string} key - The key to look for within the property.\n * @param {string} type - The case format for the key (`\"camel\"` or `\"kebab\"`).\n * Defaults to `\"camel\"`.\n *\n * @returns The value of the property if found, or `undefined` if not found.\n */\nfunction maybeReturnSetting(\n this: Record<string, any>,\n prop: string,\n key: string,\n type: \"camel\" | \"kebab\" = \"camel\"\n): unknown {\n // Convert the key case based on provided type\n key = type === \"camel\" ? toCamel(key) : toKebab(key);\n // Return the setting if it exists, otherwise return undefined\n return prop\n .split(\".\")\n .concat(key)\n .reduce((obj, key) => obj?.[key], this);\n}\n\n/**\n * Retrieves a setting from the context (`this`) object, searching through\n * multiple properties (`props`) in the context. Optionally returns a fallback\n * if the setting is not found or throws an error if no fallback is provided.\n *\n * @param {string} key - The key of the setting to retrieve.\n * @param {object} options - Options for fallback and the props array.\n * @param {unknown} options.fallback - The fallback value to return if the\n * setting is not found.\n * @param {string} options.props - An array of properties to search for the\n * setting.\n *\n * @returns The value of the setting if found, or the fallback if provided.\n * @throws An error if the setting is not found and no fallback is provided.\n */\nexport function getSetting(\n this: Record<string, any>,\n key: string,\n options: {\n fallback?: unknown;\n props?: string[];\n } = {}\n): unknown {\n // Get the initial props to query and the fallback if provided\n const {\n fallback,\n props = [\"dataConfig\", \"customProps\", \"settings\", \"parent.settings\"]\n } = options;\n\n // Loop through the props for the setting and return if found\n for (const prop of props) {\n const type = prop !== \"customProps\" ? \"camel\" : \"kebab\";\n const result = maybeReturnSetting.call(this, prop, key, type);\n if (result !== undefined) {\n return result;\n }\n }\n\n // Return fallback if one was provided\n if (fallback !== undefined) {\n return fallback;\n }\n\n // Otherwise, throw an error\n throw new Error(`${this.parent.module} setting does not exist: ${key}`);\n}\n","/**\n * Sets the `overflow` style to `hidden` or removes it based on the state.\n *\n * @param {boolean} state - Whether to set or remove `overflow: hidden`.\n * @param {string} selector - A CSS selector to query the elements.\n */\nfunction setOverflowHidden(state: boolean, selector: string): void {\n if (selector) {\n const els = document.querySelectorAll<HTMLElement>(selector);\n els.forEach((el) => {\n if (state) {\n el.style.overflow = \"hidden\";\n } else {\n el.style.removeProperty(\"overflow\");\n }\n });\n }\n}\n\n/**\n * Sets the `inert` and `aria-hidden` attributes on elements based on the state.\n *\n * @param {boolean} state - Whether to set or remove `inert` and `aria-hidden`.\n * @param {string} selector - A CSS selector to query the elements.\n */\nfunction setInert(state: boolean, selector: string): void {\n if (selector) {\n const els = document.querySelectorAll<HTMLElement>(selector);\n els.forEach((el) => {\n if (state) {\n (el as HTMLElement & { inert?: boolean }).inert = true;\n el.setAttribute(\"aria-hidden\", \"true\");\n } else {\n (el as HTMLElement & { inert?: boolean }).inert = false;\n el.removeAttribute(\"aria-hidden\");\n }\n });\n }\n}\n\n/**\n * Updates the global state by setting `inert` and `overflow` styles on\n * specified elements.\n *\n * @param {boolean} state - The global state to toggle.\n * @param {string} selectorInert - The CSS selector for elements to toggle\n * `inert` attribute.\n * @param {string} selectorOverflow - The CSS selector for elements to toggle\n * `overflow: hidden` styles.\n */\nexport function setGlobalState(\n state: boolean,\n selectorInert: string,\n selectorOverflow: string\n): void {\n setInert(!!state, selectorInert);\n setOverflowHidden(!!state, selectorOverflow);\n}\n","export const eventEmitter = {\n on(event, listener, ...args) {\n // Initialize the event if it doesn't exist\n if (!this.events[event]) {\n this.events[event] = [];\n }\n\n // Check if this listener already exists to prevent duplicate listeners\n const listenerExists = this.events[event].some(\n (entry) => entry.listener === listener\n );\n\n // Add listener to the events array\n if (!listenerExists) {\n this.events[event].push({ listener, args });\n }\n },\n\n off(event, listenerRef) {\n // Guard incase the event doesn't exist\n if (!this.events[event]) return;\n\n // Filter out the listener from the event array\n this.events[event] = this.events[event].filter(\n (entry) => entry.listener !== listenerRef\n );\n },\n\n async emit(event, data) {\n // If the event starts with \"on\":\n // - Get the third letter of the string and lowercase it\n // - Concatenate it with the rest of the string\n // e.g., \"onMount\" > \"mount\", \"onRegister\" > \"register\", etc\n event = event.startsWith(\"on\")\n ? event.slice(2, 3).toLowerCase() + event.slice(3)\n : event;\n\n // Guard incase the event doesn't exist\n if (!this.events[event]) return;\n\n // Run all the listeners for the emitted event\n for (const { listener, args } of this.events[event]) {\n // Await each listener in case it's a promise\n await listener(data, ...args);\n }\n }\n};\n","import { focusableSelectors } from \"../utilities\";\n\nexport class FocusableArray extends Array {\n constructor(el = null) {\n super();\n this.el = el;\n if (this.el) this.set();\n }\n\n get first() {\n return this[0];\n }\n\n get last() {\n return this[this.length - 1];\n }\n\n set(el = this.el) {\n this.length = 0;\n this.push(...el.querySelectorAll(focusableSelectors.join(\",\")));\n }\n\n clear() {\n this.length = 0;\n }\n}\n","import { FocusableArray } from \"./\";\n\nexport class FocusTrap {\n constructor(el = null) {\n this.el = el;\n this.focusable = new FocusableArray();\n this.handleFocusTrap = handleFocusTrap.bind(this);\n }\n\n on(el = this.el) {\n // Get the focusable elements\n this.focusable.set(el);\n\n // Either focus trap or lock depending on focusable length\n this.focusable.length\n ? document.addEventListener(\"keydown\", this.handleFocusTrap)\n : document.addEventListener(\"keydown\", handleFocusLock);\n }\n\n off() {\n // Clear the focusable elements\n this.focusable.clear();\n\n // Remove event listeners\n document.removeEventListener(\"keydown\", this.handleFocusTrap);\n document.removeEventListener(\"keydown\", handleFocusLock);\n }\n}\n\nfunction handleFocusLock(event) {\n // Ignore the tab key by preventing default\n if (event.key === \"Tab\" || event.keyCode === 9) event.preventDefault();\n}\n\nfunction handleFocusTrap(event) {\n // Check if the click was a tab and return if not\n if (event.key !== \"Tab\" && event.keyCode !== 9) return;\n\n // Destructure variables for brevity\n const { activeElement } = document;\n const { el, focusable } = this;\n\n // Set variables of conditionals\n const isShiftTab = event.shiftKey;\n const isFirstOrRoot =\n activeElement === focusable.first || activeElement === el;\n const isLastOrRoot = activeElement === focusable.last || activeElement === el;\n\n if ((isShiftTab && isFirstOrRoot) || (!isShiftTab && isLastOrRoot)) {\n event.preventDefault();\n // Loop to next tab focus based on direction (shift)\n (isShiftTab ? focusable.last : focusable.first).focus();\n }\n}\n","export function localStore(key, enable = true) {\n const local = localStorage.getItem(key);\n const store = local ? JSON.parse(local) : {};\n\n return {\n get(prop, fallback = undefined) {\n if (!prop) return store;\n return prop in store ? store[prop] : fallback;\n },\n\n set(prop, value) {\n if (value) {\n store[prop] = value;\n } else {\n delete store[prop];\n }\n if (enable) localStorage.setItem(key, JSON.stringify(store));\n return store;\n }\n };\n}\n","export class PluginsArray extends Array {\n constructor(presets = {}) {\n super();\n this.presets = presets;\n }\n\n applySettings(plugin) {\n // Get the defaults, presets and provided configuration of the plugin\n const defaults = plugin?.defaults || {};\n const preset = this.presets?.[plugin.name] || {};\n const options = plugin?.options || {};\n\n // Create the settings property by merging the plugin defaults, preset and\n // any provided options.\n plugin.settings = { ...defaults, ...preset, ...options };\n }\n\n validate(plugin) {\n if (!(\"name\" in plugin) || typeof plugin.name !== \"string\") {\n console.error(\"Plugin requires a name!\");\n return false;\n }\n\n return true;\n }\n\n get(name) {\n return this.find((plugin) => plugin.name === name);\n }\n\n add(plugin) {\n if (Array.isArray(plugin)) {\n plugin.forEach((plugin) => this.add(plugin));\n } else {\n // Process the plugin object\n this.applySettings(plugin);\n // Ensure the plugin is valid\n if (this.validate(plugin)) {\n // Either replace the plugin if it already exists in the array,\n // otherwise push the new plugin to the array.\n const index = this.findIndex((item) => item.name === plugin.name);\n if (~index) {\n this[index] = plugin;\n } else {\n this.push(plugin);\n }\n }\n }\n }\n\n remove(name) {\n const index = this.findIndex((plugin) => plugin.name === name);\n if (~index) {\n this.splice(index, 1);\n }\n }\n}\n","export class StackArray extends Array {\n constructor(settings = {}) {\n super();\n this.settings = settings;\n }\n\n get copy() {\n return [...this];\n }\n\n get top() {\n const result = this[this.length - 1];\n return result ? result : null;\n }\n\n updateIndex() {\n this.forEach((entry, index) => {\n entry.el.style.zIndex = null;\n const value = getComputedStyle(entry.el)[\"z-index\"];\n entry.el.style.zIndex = parseInt(value) + index + 1;\n });\n }\n\n onChange() {\n this.updateIndex();\n if (typeof this.settings.onChange === \"function\") {\n this.settings.onChange();\n }\n }\n\n add(entry) {\n this.push(entry);\n this.onChange();\n }\n\n remove(entry) {\n // Get the index of the entry\n const index = this.findIndex((item) => item.id === entry.id);\n if (~index) {\n // Remove the z-index styles from the entry\n entry.el.style.zIndex = null;\n // Splice the entry from the stack array\n this.splice(index, 1);\n // Run the onChange callback\n this.onChange();\n }\n }\n\n moveToTop(entry) {\n // Get the index of the entry\n const index = this.findIndex((item) => item.id === entry.id);\n if (~index) {\n // Splice the entry from the stack array\n this.splice(index, 1);\n // Add entry back to the stack array\n this.add(entry);\n }\n }\n}\n","const defaults = {\n condition: true\n};\n\nconst colors = {\n primary: \"hsl(152deg 60% 50%)\",\n secondary: \"hsl(214deg 50% 50%)\",\n neutral: \"hsl(214deg 20% 50%)\",\n important: \"hsl(0deg 80% 50%)\"\n};\n\nexport function debug(options = {}) {\n const props = {\n name: \"debug\",\n defaults,\n options\n };\n\n function log(name, args = [], colorKeys = [\"primary\", \"secondary\"]) {\n const colorStyles = colorKeys.map((key) => `color: ${colors[key]}`);\n console.log(`%c📡 DEBUG: %c${name}`, ...colorStyles, ...args);\n }\n\n function getValue(obj, ...args) {\n return typeof obj === \"function\" ? obj(...args) : obj;\n }\n\n // Create event listener references\n const refs = {\n beforeMountRef: log.bind(null, \"Event > beforeMount()\"),\n afterMountRef: log.bind(null, \"Event > afterMount()\"),\n beforeUnmountRef: log.bind(\n null,\n \"Event > beforeUnmount()\",\n [],\n [\"important\", \"neutral\"]\n ),\n afterUnmountRef: log.bind(\n null,\n \"Event > afterUnmount()\",\n [],\n [\"important\", \"neutral\"]\n ),\n createEntryRef: (entry, { parent, plugin }) => {\n if (getValue(plugin.settings.condition, entry)) {\n const count = parent.collection.length;\n log(`Event > createEntry() > [${count}] #${entry.id}`);\n }\n },\n registerEntryRef: (entry, { parent, plugin }) => {\n if (getValue(plugin.settings.condition, entry)) {\n const count = parent.collection.length;\n log(`Event > registerEntry() > [${count}] #${entry.id}`);\n }\n },\n destroyEntryRef: (entry, { parent, plugin }) => {\n if (getValue(plugin.settings.condition, entry)) {\n const count = parent.collection.length;\n log(\n `Event > destroyEntry() > [${count}] #${entry.id}`,\n [],\n [\"important\", \"neutral\"]\n );\n }\n },\n deregisterEntryRef: (entry, { parent, plugin }) => {\n if (getValue(plugin.settings.condition, entry)) {\n const count = parent.collection.length;\n log(\n `Event > deregisterEntry() > [${count}] #${entry.id}`,\n [],\n [\"important\", \"neutral\"]\n );\n }\n }\n };\n\n const methods = {\n // Plugin setup/teardown methods\n setup({ parent }) {\n log(\"Plugin > setup()\", arguments, [\"secondary\", \"neutral\"]);\n // Mount event lifecycle hooks\n parent.on(\"beforeMount\", refs.beforeMountRef);\n parent.on(\"createEntry\", refs.createEntryRef, { parent, plugin: this });\n parent.on(\"registerEntry\", refs.registerEntryRef, {\n parent,\n plugin: this\n });\n parent.on(\"afterMount\", refs.afterMountRef);\n // Unmount event lifecycle hooks\n parent.on(\"beforeUnmount\", refs.beforeUnmountRef);\n parent.on(\"destroyEntry\", refs.destroyEntryRef, { parent, plugin: this });\n parent.on(\"deregisterEntry\", refs.deregisterEntryRef, {\n parent,\n plugin: this\n });\n parent.on(\"afterUnmount\", refs.afterUnmountRef);\n },\n\n teardown({ parent }) {\n log(\"Plugin > teardown()\", arguments, [\"secondary\", \"neutral\"]);\n // Mount event lifecycle hooks\n parent.off(\"beforeMount\", refs.beforeMountRef);\n parent.off(\"createEntry\", refs.createEntryRef);\n parent.off(\"registerEntry\", refs.registerEntryRef);\n parent.off(\"afterMount\", refs.afterMountRef);\n // Unmount event lifecycle hooks\n parent.off(\"beforeUnmount\", refs.beforeUnmountRef);\n parent.off(\"destroyEntry\", refs.destroyEntryRef);\n parent.off(\"deregisterEntry\", refs.deregisterEntryRef);\n parent.off(\"afterUnmount\", refs.afterUnmountRef);\n },\n\n // Mount lifecycle hooks\n\n beforeMount() {\n log(\"Hook > beforeMount()\", arguments);\n },\n\n onCreateEntry({ parent, entry }) {\n if (getValue(this.settings.condition, entry)) {\n const count = parent.collection.length;\n log(`Hook > onCreateEntry() > [${count}] #${entry.id}`, arguments);\n }\n },\n\n onRegisterEntry({ parent, entry }) {\n if (getValue(this.settings.condition, entry)) {\n const count = parent.collection.length - 1;\n log(`Hook > onRegisterEntry() > [${count}] #${entry.id}`, arguments);\n }\n },\n\n afterMount() {\n log(\"Hook > afterMount()\", arguments);\n },\n\n // Unmount lifecycle hooks\n\n beforeUnmount() {\n log(\"Hook > beforeUnmount()\", arguments, [\"important\", \"neutral\"]);\n },\n\n onDestroyEntry({ parent, entry }) {\n if (getValue(this.settings.condition, entry)) {\n const count = parent.collection.length - 1;\n log(`Hook > onDestroyEntry() > [${count}] #${entry.id}`, arguments, [\n \"important\",\n \"neutral\"\n ]);\n }\n },\n\n onDeregisterEntry({ parent, entry }) {\n if (getValue(this.settings.condition, entry)) {\n const count = parent.collection.length;\n log(`Hook > onDeregisterEntry() > [${count}] #${entry.id}`, arguments, [\n \"important\",\n \"neutral\"\n ]);\n }\n },\n\n afterUnmount() {\n log(\"Hook > afterUnmount()\", arguments, [\"important\", \"neutral\"]);\n }\n };\n\n return { ...props, ...methods };\n}\n","import { FocusTrap } from \"../modules\";\n\nconst defaults = {\n condition: true\n};\n\nexport function focusTrap(options = {}) {\n const props = {\n name: \"focusTrap\",\n defaults,\n options\n };\n\n const methods = {\n setup({ parent }) {\n parent.on(\"opened\", enableFocusTrap, this);\n parent.on(\"closed\", disableFocusTrap, this);\n },\n\n teardown({ parent }) {\n parent.off(\"opened\", enableFocusTrap);\n parent.off(\"closed\", disableFocusTrap);\n },\n\n onCreateEntry({ entry }) {\n entry.focusTrap = new FocusTrap();\n }\n };\n\n function getValue(obj, ...args) {\n return typeof obj === \"function\" ? obj(...args) : obj;\n }\n\n function enableFocusTrap(entry, plugin) {\n const contextObj = { plugin, parent: entry.parent, entry };\n if (getValue(plugin.settings.condition, contextObj)) {\n entry.focusTrap?.on(entry.dialog);\n }\n }\n\n function disableFocusTrap(entry, plugin) {\n const contextObj = { plugin, parent: entry.parent, entry };\n if (getValue(plugin.settings.condition, contextObj)) {\n entry.focusTrap?.off();\n }\n }\n\n return { ...props, ...methods };\n}\n","import { getPrefix } from \"../helpers\";\n\nconst defaults = {\n // The data attributes to get the breakpoint values from.\n dataBreakpoint: \"breakpoint\",\n\n // The data attributes to get the media query value from.\n dataMediaQuery: \"media-query\",\n\n // The string token to replace in the media query string.\n token: \"{{BP}}\",\n\n // Sets a global breakpoint. Can be overridden by setting a data attribute\n // value. Notice: setting this option will enable a media query breakpoint on\n // all entries.\n breakpoint: null,\n\n // The default media query string to use. Can be overridden by setting a data\n // attribute value.\n mediaQuery: \"(min-width: {{BP}})\",\n\n // Maps entry ID or breakpoint key to breakpoint values. This is referenced\n // when getting an entries breakpoint value.\n breakpoints: {},\n\n // Maps entry ID's to a media query strings. Media query may contain a token.\n // This is referenced when getting an entries media query string.\n mediaQueries: {},\n\n // The function to run when the MediaQueryList triggers a \"change\" event.\n // This is run once on initial mount.\n onChange: () => {}\n};\n\nexport function mediaQuery(options = {}) {\n const props = {\n name: \"mediaQuery\",\n defaults,\n options\n };\n\n const methods = {\n onCreateEntry({ entry }) {\n setupMediaQueryList.call(this, entry);\n },\n\n onDestroyEntry({ entry }) {\n removeMediaQueryList(entry);\n }\n };\n\n function getMediaQuery(entry) {\n // Get the media query from the data attribute\n const value = entry.el.getAttribute(`data-${this.settings.dataMediaQuery}`);\n\n // Check if a media query exists in mediaQueries object using entry ID\n if (!value && entry.id in this.settings.mediaQueries) {\n return this.settings.mediaQueries[entry.id];\n }\n\n return value;\n }\n\n // Get the breakpoint value\n function getBreakpointValue(entry) {\n // Get the breakpoint from the data attribute\n let value = entry.el.getAttribute(`data-${this.settings.dataBreakpoint}`);\n\n // If no value was returned, is there a breakpoint mapped to the entry id?\n if (!value && entry.id in this.settings.breakpoints) {\n value = this.settings.breakpoints[entry.id];\n }\n\n // If a value exists is it a key mapped to a value in breakpoints?\n if (value && value in this.settings.breakpoints) {\n value = this.settings.breakpoints[value];\n }\n\n // Is the value a key of a breakpoint custom property?\n if (value) {\n const customProp = getComputedStyle(document.body)\n .getPropertyValue(`--${getPrefix()}breakpoint-${value}`)\n .trim();\n value = customProp || value;\n }\n\n // Return the value or the default value\n return value || this.settings.breakpoint;\n }\n\n function setupMediaQueryList(entry) {\n // Get the media query and breakpoint value\n let mq = getMediaQuery.call(this, entry);\n const bp = getBreakpointValue.call(this, entry);\n\n // If no breakpoint value or media query was found, return\n if (!bp && !mq) return;\n\n // Use the default media query if a custom one wasn't found\n if (bp && !mq) {\n mq = this.settings.mediaQuery;\n }\n\n // Create the media query string\n const mqs = mq.replace(new RegExp(`${this.settings.token}`, \"g\"), bp);\n\n // Setup MediaQueryList object and event listener\n entry.mql = window.matchMedia(mqs);\n entry.mql.onchange = (event) => {\n this.settings.onChange(event, entry);\n };\n\n // Run the on change function for the initial match check\n this.settings.onChange(entry.mql, entry);\n }\n\n function removeMediaQueryList(entry) {\n if (!entry.mql) return;\n entry.mql.onchange = null;\n entry.mql = null;\n }\n\n return { ...props, ...methods };\n}\n","import { localStore } from \"../modules\";\n\nconst defaults = {\n // The property on entry objects to watch.\n prop: \"state\",\n\n // The default value or a function to compute the initial value.\n value: null,\n\n // The local storage key prefix.\n keyPrefix: \"VB:\",\n\n // The local storage key to use. If not provided, module name and prop value\n // will be used e.g., \"VB:ModalState\".\n key: null,\n\n // Condition to determine whether or not to store the value in local storage.\n condition: false,\n\n // The function to run whenever the value changes.\n onChange() {}\n};\n\nexport function propStore(options = {}) {\n const props = {\n name: \"propStore\",\n defaults,\n options,\n store: null\n };\n\n const methods = {\n setup({ parent }) {\n this.store = localStore(getKey.call(this, parent.module));\n },\n\n async onCreateEntry({ entry }) {\n await setupPropStore.call(this, entry);\n },\n\n onDestroyEntry({ entry }) {\n removePropStore.call(this, entry);\n }\n };\n\n async function setupPropStore(entry) {\n // Store the initial property value. Set to null if property doesn't exist\n let _value = entry[this.settings.prop] || null;\n const contextObj = { plugin: this, parent: entry.parent, entry };\n\n // Define a getter and setter for the property\n Object.defineProperty(entry, this.settings.prop, {\n configurable: true,\n get() {\n return _value;\n },\n set: async (newValue) => {\n // Guard if value hasn't changed\n if (_value === newValue) return;\n const oldValue = _value;\n _value = newValue;\n\n // Conditionally store the value in local storage\n const condition = getValue(\n this.settings.condition,\n contextObj,\n newValue,\n oldValue\n );\n\n if (condition) {\n this.store.set(entry.id, newValue);\n }\n\n // Run the on change callback\n await this.settings.onChange(contextObj, newValue, oldValue);\n }\n });\n\n // Create the store object for binding entry to its local store value\n Object.defineProperty(entry, \"store\", {\n configurable: true,\n get: () => {\n return this.store.get(entry.id);\n },\n set: (value) => {\n entry[this.settings.prop] = value;\n }\n });\n\n // Conditionally set the initial value (must be truthy)\n entry[this.settings.prop] =\n (await getValue(this.settings.value, contextObj)) ||\n entry[this.settings.prop];\n }\n\n function getValue(obj, ...args) {\n return typeof obj === \"function\" ? obj(...args) : obj;\n }\n\n async function removePropStore(entry) {\n // Remove the getter/setters and restore properties to its current value\n const currentValue = entry[this.settings.prop];\n delete entry[this.settings.prop];\n entry[this.settings.prop] = currentValue;\n\n // Remove value from local store\n this.store.set(entry.id, null);\n }\n\n function getKey(moduleName) {\n const prop =\n this.settings.prop.charAt(0).toUpperCase() + this.settings.prop.slice(1);\n const key = this.settings.key || moduleName + prop;\n return this.settings.keyPrefix + key;\n }\n\n return { ...props, ...methods };\n}\n","import { teleportElement } from \"../utilities\";\n\nconst defaults = {\n where: null,\n how: \"append\"\n};\n\nexport function teleport(options = {}) {\n const props = {\n name: \"teleport\",\n defaults,\n options\n };\n\n const methods = {\n onCreateEntry({ plugin, entry }) {\n teleport(plugin, entry);\n },\n\n onDestroyEntry({ plugin, entry }) {\n teleportReturn(plugin, entry);\n }\n };\n\n function teleport(plugin, entry) {\n // Store the teleportElement function in entry\n entry.teleport = () => {\n if (typeof entry.teleportReturn === \"function\") {\n entry.teleportReturn();\n }\n entry.teleportReturn = teleportElement(\n entry.el,\n entry.getSetting(\"teleport\", { fallback: plugin.settings.where }),\n entry.getSetting(\"teleportMethod\", { fallback: plugin.settings.how })\n );\n };\n\n // Call the teleport function\n entry.teleport();\n\n // Fire the teleport event\n entry.parent.emit(\"teleport\", { plugin, parent, entry });\n }\n\n function teleportReturn(plugin, entry) {\n // Return teleported element if the cleanup function exists\n if (typeof entry.teleportReturn === \"function\") {\n entry.teleportReturn();\n }\n\n // Fire the teleport return event\n entry.parent.emit(\"teleportReturn\", { plugin, parent, entry });\n }\n\n return { ...props, ...methods };\n}\n","export default {\n dataConfig: \"config\",\n customProps: []\n};\n","import { getCustomProps, getSetting } from \"./helpers\";\nimport { getDataConfig, getElement } from \"./utilities\";\n\nexport class CollectionEntry {\n constructor(parent, query, options = {}) {\n this.parent = parent;\n this.id = query?.id || query;\n this.el = getElement(query);\n this.settings = { ...options };\n this.dataConfig = {};\n this.customProps = {};\n }\n\n applySettings(options) {\n return Object.assign(this.settings, options);\n }\n\n getSetting(key, options) {\n return getSetting.call(this, key, options);\n }\n\n buildDataConfig() {\n return Object.assign(\n this.dataConfig,\n getDataConfig(this.el, this.getSetting(\"dataConfig\"))\n );\n }\n\n buildCustomProps() {\n return Object.assign(this.customProps, getCustomProps(this));\n }\n\n async init(options = {}) {\n // Throw an error if the element for this entry was not found\n if (this.el === null) {\n throw new Error(\n `${this.parent.module} element was not found with ID: \"${this.id}\"`\n );\n }\n\n // Apply settings with passed options\n this.applySettings(options);\n\n // Build the data attribute and custom property setting objects\n this.buildDataConfig();\n this.buildCustomProps();\n }\n\n async destroy() {\n // Remove all the owned properties from the entry except for the id\n Object.getOwnPropertyNames(this).forEach((prop) => {\n if (prop !== \"id\") {\n delete this[prop];\n }\n });\n }\n}\n","import defaults from \"./defaults\";\nimport { CollectionEntry } from \"./CollectionEntry\";\nimport { eventEmitter, PluginsArray } from \"./modules\";\nimport { dispatchLifecycleHook } from \"./helpers\";\nimport { getElement, maybeRunMethod } from \"./utilities\";\n\nexport class Collection {\n constructor(options = {}) {\n this.module = this.constructor.name;\n this.collection = [];\n this.entryClass = CollectionEntry;\n this.settings = { ...defaults, ...options };\n\n // Create the plugins array and provide any presets\n this.plugins = new PluginsArray(this.settings.presets);\n\n // Add event emitter prop and methods\n this.events = {};\n Object.assign(this, eventEmitter);\n }\n\n get(value, key = \"id\") {\n return this.collection.find((entry) => entry[key] === value);\n }\n\n applySettings(options) {\n return Object.assign(this.settings, options);\n }\n\n async createEntry(query, config) {\n const entry = new this.entryClass(this, query, config);\n await maybeRunMethod(entry, \"init\");\n await dispatchLifecycleHook(\"onCreateEntry\", this, entry);\n return entry;\n }\n\n async destroyEntry(entry) {\n await dispatchLifecycleHook(\"onDestroyEntry\", this, entry);\n await maybeRunMethod(entry, \"destroy\");\n return entry;\n }\n\n async register(query, config = {}) {\n // Get the element to register\n const element = getElement(query);\n\n // Throw an error if element wasn't found\n if (element === null) {\n throw new Error(\n `${this.module} element was not found with ID: \"${query?.id || query}\"`\n );\n }\n\n // Check if the element with the provided ID has already been registered\n const index = this.collection.findIndex((item) => item.id === element.id);\n if (~index) {\n // Get the entry from the collection\n const entry = this.collection[index];\n\n // Override the element property with the provided element\n entry.el = element;\n\n // Run the entry init() method if it exists\n if (typeof entry.init === \"function\") {\n await entry.init(config);\n }\n\n // Return the registered entry\n return entry;\n } else {\n // Create the collection entry object\n const entry = await this.createEntry(element, config);\n\n // Add the entry to the collection\n this.collection.push(entry);\n\n // Dispatch onRegisterEntry lifecycle hooks\n await dispatchLifecycleHook(\"onRegisterEntry\", this, entry);\n\n // Return the registered entry\n return entry;\n }\n }\n\n async deregister(id) {\n const index = this.collection.findIndex((entry) => entry.id === id);\n if (~index) {\n // Get the collection entry object from the collection and destroy it\n const entry = await this.destroyEntry(this.collection[index]);\n\n // Dispatch onDeregisterEntry lifecycle hooks\n await dispatchLifecycleHook(\n \"onDeregisterEntry\",\n this,\n this.collection[index]\n );\n\n // Remove the entry from the collection\n this.collection.splice(index, 1);\n\n return entry;\n }\n\n return null;\n }\n\n async mount(options = {}) {\n // Apply settings with passed options\n this.applySettings(options);\n\n // Add plugins\n for (const plugin of this.settings?.plugins || []) {\n this.plugins.add(plugin);\n }\n\n // Run setup methods on plugins\n for (const plugin of this.plugins) {\n await maybeRunMethod(plugin, \"setup\", { plugin, parent: this });\n }\n\n // Dispatch beforeMount lifecycle hooks\n await dispatchLifecycleHook(\"beforeMount\", this);\n\n // Get all the selector elements and register them\n const els = document.querySelectorAll(this.settings.selector);\n for (const el of els) {\n await this.register(el);\n }\n\n // Dispatch afterMount lifecycle hooks\n await dispatchLifecycleHook(\"afterMount\", this);\n\n return this;\n }\n\n async unmount() {\n // Dispatch beforeUnmount lifecycle hooks\n await dispatchLifecycleHook(\"beforeUnmount\", this);\n\n // Loop through the collection and deregister each entry\n while (this.collection.length > 0) {\n await this.deregister(this.collection[0].id);\n }\n\n // Dispatch afterUnmount lifecycle hooks\n await dispatchLifecycleHook(\"afterUnmount\", this);\n\n // Run teardown methods on plugins\n for (const plugin of this.plugins) {\n await maybeRunMethod(plugin, \"teardown\", { plugin, parent: this });\n }\n\n // Remove plugins\n for (const plugin of [...this.plugins]) {\n this.plugins.remove(plugin.name);\n }\n\n return this;\n }\n}\n","import { localStore } from \"./modules\";\nimport { cssVar } from \"./helpers\";\n\nexport function themeStore(options) {\n // Setup the default settings object\n const settings = {\n prefix: cssVar(\"prefix-themes\", { fallback: \"vb-theme-\" }),\n themes: [\"root\", \"light\", \"dark\"],\n storeKey: \"VB:Profile\"\n };\n\n // Override all settings values with provided options\n for (const [key] of Object.entries(settings)) {\n if (options && options[key]) {\n settings[key] = options[key];\n }\n }\n\n // Setup the default callbacks object\n const callbacks = {\n onInit() {},\n onChange() {}\n };\n\n // Override all callback values with provided options\n for (const [key] of Object.entries(callbacks)) {\n if (options && options[key]) {\n callbacks[key] = options[key];\n }\n }\n\n // Get the local storage profile\n const profile = localStore(settings.storeKey);\n\n // Setup the API object\n const api = {\n // Store our settings in the API\n settings,\n\n // Actions\n add(value) {\n settings.themes.push(value);\n },\n remove(value) {\n const index = settings.themes.indexOf(value);\n ~index && settings.themes.splice(index, 1);\n },\n callback(name) {\n callbacks[name].call(this);\n },\n\n // Getters\n get class() {\n return `${settings.prefix}${this.theme}`;\n },\n get classes() {\n return settings.themes.map((theme) => `${settings.prefix}${theme}`);\n },\n get themes() {\n return settings.themes;\n },\n\n // Setup the theme get and set methods\n get theme() {\n return profile.get(\"theme\") || \"root\";\n },\n set theme(value) {\n // Check if the value exists as a theme option\n if (settings.themes.includes(value)) {\n // Check if the value is actually different from the one currently set\n if (this.theme != value) {\n // Save the theme value to local storage\n profile.set(\"theme\", value);\n\n // Remove the theme classes from the html element\n document.documentElement.classList.remove(...this.classes);\n\n // Add the new theme class to the html element\n document.documentElement.classList.add(`${settings.prefix}${value}`);\n\n // Run the on change callback\n this.callback(\"onChange\");\n }\n } else {\n // Throw a console error if the theme doesn't exist as an option\n console.error(`Not a valid theme value: \"${value}\"`);\n }\n }\n };\n\n // Run the on initialization callback\n api.callback(\"onInit\");\n\n // Return the API\n return api;\n}\n","import presets from \"./presets\";\n\nexport default {\n // Plugin presets\n presets,\n\n // Data attributes\n dataOpen: \"drawer-open\",\n dataClose: \"drawer-close\",\n dataToggle: \"drawer-toggle\",\n\n // Selectors\n selector: \".drawer\",\n selectorDialog: \".drawer__dialog\",\n selectorScreen: \".drawer\",\n selectorFocus: \"[data-focus]\",\n selectorInert: null,\n selectorOverflow: \"body\",\n\n // State classes\n stateOpened: \"is-opened\",\n stateOpening: \"is-opening\",\n stateClosing: \"is-closing\",\n stateClosed: \"is-closed\",\n\n // Classes\n classModal: \"drawer_modal\",\n\n // Feature toggles\n customProps: [\"transition-duration\"],\n breakpoints: null,\n customEventPrefix: \"drawer:\",\n setTabindex: true,\n transition: true,\n transitionDuration: 300\n};\n","export default {\n focusTrap: {\n condition: ({ entry }) => {\n return (\n entry.state === \"closed\" ||\n (entry.state === \"opened\" && entry.mode === \"modal\")\n );\n }\n },\n mediaQuery: {\n onChange(event, entry) {\n entry.mode = event.matches ? \"inline\" : \"modal\";\n }\n },\n propStore: {\n prop: \"inlineState\",\n value: ({ entry }) => entry.store,\n condition: ({ entry }) =>\n [\"opened\", \"closed\", \"indeterminate\"].includes(entry.state),\n onChange: ({ entry }) => entry.applyState()\n }\n};\n","import { setGlobalState } from \"@vrembem/core\";\n\nexport function switchMode(entry) {\n switch (entry.mode) {\n case \"inline\":\n return toInline.call(this, entry);\n case \"modal\":\n return toModal.call(this, entry);\n default:\n throw new Error(`\"${entry.mode}\" is not a valid drawer mode.`);\n }\n}\n\nasync function toInline(entry) {\n // Remove the modal class\n entry.el.classList.remove(entry.getSetting(\"classModal\"));\n\n // Remove the aria-modal attribute\n entry.dialog.removeAttribute(\"aria-modal\");\n\n // Update the global state\n setGlobalState(\n false,\n entry.getSetting(\"selectorInert\"),\n entry.getSetting(\"selectorOverflow\")\n );\n\n // Apply the inline state\n entry.applyState();\n\n // Dispatch custom switch event\n entry.el.dispatchEvent(\n new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"switchMode\", {\n detail: this,\n bubbles: true\n })\n );\n\n // Emit the switchMode event\n await entry.parent.emit(\"switchMode\", entry);\n\n // Return the entry\n return entry;\n}\n\nasync function toModal(entry) {\n // Add the modal class\n entry.el.classList.add(entry.getSetting(\"classModal\"));\n\n // Set aria-modal attribute to true\n entry.dialog.setAttribute(\"aria-modal\", \"true\");\n\n // Modal drawer defaults to closed state\n await entry.close(false, false);\n\n // Dispatch custom switch event\n entry.el.dispatchEvent(\n new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"switchMode\", {\n detail: this,\n bubbles: true\n })\n );\n\n // Emit the switchMode event\n await entry.parent.emit(\"switchMode\", entry);\n\n // Return the entry\n return entry;\n}\n","import { CollectionEntry } from \"@vrembem/core\";\nimport { switchMode } from \"./switchMode\";\n\nexport class DrawerEntry extends CollectionEntry {\n #mode;\n\n constructor(parent, query, options = {}) {\n super(parent, query, options);\n this.dialog = null;\n this.trigger = null;\n this.state = null;\n this.inlineState = null;\n this.#mode = \"indeterminate\";\n }\n\n get mode() {\n return this.#mode;\n }\n\n set mode(value) {\n if (this.#mode === value) return;\n this.#mode = value;\n switchMode.call(this.parent, this);\n }\n\n setState(value) {\n this.state = value;\n\n // If mode is inline and not in a transitioning state...\n const ignoreStates = [\"opening\", \"closing\"];\n if (this.mode === \"inline\" && !ignoreStates.includes(value)) {\n // Save the inline state\n this.inlineState = value;\n }\n\n // If state is indeterminate, remove all state classes\n if (value === \"indeterminate\") {\n this.el.classList.remove(this.getSetting(\"stateOpened\"));\n this.el.classList.remove(this.getSetting(\"stateOpening\"));\n this.el.classList.remove(this.getSetting(\"stateClosed\"));\n this.el.classList.remove(this.getSetting(\"stateClosing\"));\n }\n }\n\n async applyState() {\n // Only apply state if mode is not set to \"modal\"\n if (this.mode === \"modal\") return;\n\n // Check the state stored in inline state\n if (this.inlineState === \"opened\") {\n return await this.open(false, false);\n }\n if (this.inlineState === \"closed\") {\n return await this.close(false, false);\n }\n\n // Determine the state based on the presence of a state class. This handles\n // the initial state which is the only time `this.state` should be `null`.\n if (this.state === null) {\n if (this.el.classList.contains(this.getSetting(\"stateOpened\"))) {\n return await this.open(false, false);\n }\n if (this.el.classList.contains(this.getSetting(\"stateClosed\"))) {\n return await this.close(false, false);\n }\n }\n\n // If state cannot be determined, set it to indeterminate\n return this.setState(\"indeterminate\");\n }\n\n async open(transition, focus) {\n return this.parent.open(this, transition, focus);\n }\n\n async close(transition, focus) {\n return this.parent.close(this, transition, focus);\n }\n\n async toggle(transition, focus) {\n return this.parent.toggle(this, transition, focus);\n }\n\n async deregister() {\n return this.parent.deregister(this.id);\n }\n\n async onCreateEntry() {\n // Set the dialog element. If none is found, use the root element\n const dialog = this.el.querySelector(this.getSetting(\"selectorDialog\"));\n this.dialog = dialog ? dialog : this.el;\n\n // Set tabindex=\"-1\" so dialog is focusable via JS or click\n if (this.getSetting(\"setTabindex\")) {\n this.dialog.setAttribute(\"tabindex\", \"-1\");\n }\n\n // Apply the initial state\n await this.applyState();\n\n // Set the inline state\n this.inlineState = this.state;\n\n // Set the initial mode\n this.mode = this.el.classList.contains(this.getSetting(\"classModal\"))\n ? \"modal\"\n : \"inline\";\n }\n\n async onDestroyEntry() {\n // If entry is a modal and in the opened state, close it\n if (this.mode === \"modal\" && this.state === \"opened\") {\n await this.close(false);\n }\n }\n}\n","export function getDrawer(query) {\n // Get the entry from collection\n const entry = typeof query === \"string\" ? this.get(query) : query;\n\n // Return entry if it was resolved, otherwise throw error\n if (entry) {\n return entry;\n } else {\n throw new Error(\n `Drawer not found in collection with id of \"${query.id || query}\".`\n );\n }\n}\n","import { getDrawer } from \"./helpers/getDrawer\";\n\nexport async function handleClick(event) {\n // If an open, close or toggle button was clicked, handle the click event\n const trigger = event.target.closest(`\n [data-${this.settings.dataOpen}],\n [data-${this.settings.dataToggle}],\n [data-${this.settings.dataClose}]\n `);\n\n if (trigger) {\n // Prevent the default behavior of the trigger\n event.preventDefault();\n\n // If it's a toggle trigger...\n if (trigger.matches(`[data-${this.settings.dataToggle}]`)) {\n const selectors = trigger\n .getAttribute(`data-${this.settings.dataToggle}`)\n .trim()\n .split(\" \");\n selectors.forEach((selector) => {\n // Get the entry from collection using the attribute value\n const entry = getDrawer.call(this, selector);\n // Store the trigger on the entry\n entry.trigger = trigger;\n // Toggle the drawer\n return entry.toggle();\n });\n }\n\n // If it's a open trigger...\n if (trigger.matches(`[data-${this.settings.dataOpen}]`)) {\n const selectors = trigger\n .getAttribute(`data-${this.settings.dataOpen}`)\n .trim()\n .split(\" \");\n selectors.forEach((selector) => {\n // Get the entry from collection using the attribute value\n const entry = getDrawer.call(this, selector);\n // Store the trigger on the entry\n entry.trigger = trigger;\n // Open the drawer\n return entry.open();\n });\n }\n\n // If it's a close trigger...\n if (trigger.matches(`[data-${this.settings.dataClose}]`)) {\n const selectors = trigger\n .getAttribute(`data-${this.settings.dataClose}`)\n .trim()\n .split(\" \");\n selectors.forEach((selector) => {\n if (selector) {\n // Get the entry from collection using the attribute value\n const entry = getDrawer.call(this, selector);\n // Store the trigger on the entry\n entry.trigger = trigger;\n // Close the drawer\n return entry.close();\n } else {\n // If no value is set on close trigger, get the parent drawer\n const parent = event.target.closest(this.settings.selector);\n // If a parent drawer was found, close it\n if (parent) return this.close(parent.id);\n }\n });\n }\n\n return;\n }\n\n // If there is an active modal drawer and the screen was clicked...\n if (this.activeModal && event.target.matches(this.settings.selectorScreen)) {\n // Close the modal drawer\n return this.close(this.activeModal.id);\n }\n}\n\nexport function handleKeydown(event) {\n // If escape key was pressed\n if (event.key === \"Escape\") {\n // If a modal is opened, close the modal\n if (this.activeModal) return this.close(this.activeModal.id);\n }\n}\n","export function updateFocusState(entry) {\n // Check if there's an active modal\n if (entry.state === \"opened\") {\n (\n entry.dialog.querySelector(this.settings.selectorFocus) || entry.dialog\n ).focus();\n } else {\n // Set focus to root trigger and unmount the focus trap\n if (entry.trigger) {\n entry.trigger.focus();\n entry.trigger = null;\n }\n }\n}\n","import { transition, setGlobalState } from \"@vrembem/core\";\nimport { getDrawer } from \"./helpers/getDrawer\";\nimport { updateFocusState } from \"./helpers/updateFocusState\";\n\nexport async function open(query, transitionOverride, focus = true) {\n // Get the drawer from collection\n const entry = getDrawer.call(this, query);\n\n // If drawer is closed or indeterminate\n if (\n entry.state === \"closed\" ||\n entry.state === \"indeterminate\" ||\n entry.state === null\n ) {\n // Update drawer state\n entry.setState(\"opening\");\n\n // Run the open transition\n if (\n transitionOverride != undefined\n ? transitionOverride\n : entry.getSetting(\"transition\")\n ) {\n await transition(\n entry.el,\n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"stateOpening\"),\n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateOpened\"));\n entry.el.classList.remove(entry.getSetting(\"stateClosed\"));\n }\n\n // Update drawer state\n entry.setState(\"opened\");\n\n // Update the global state if mode is modal\n if (entry.mode === \"modal\")\n setGlobalState(\n true,\n entry.getSetting(\"selectorInert\"),\n entry.getSetting(\"selectorOverflow\")\n );\n\n // Set focus to the drawer element if the focus param is true\n if (focus) {\n updateFocusState.call(this, entry);\n }\n\n // Dispatch custom opened event\n entry.el.dispatchEvent(\n new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"opened\", {\n detail: this,\n bubbles: true\n })\n );\n\n // Emit the opened event\n await entry.parent.emit(\"opened\", entry);\n }\n\n // Return the drawer\n return entry;\n}\n","import { transition, setGlobalState } from \"@vrembem/core\";\nimport { getDrawer } from \"./helpers/getDrawer\";\nimport { updateFocusState } from \"./helpers/updateFocusState\";\n\nexport async function close(query, transitionOverride, focus = true) {\n // Get the drawer from collection\n const entry = getDrawer.call(this, query);\n\n // If drawer is opened or indeterminate\n if (\n entry.state === \"opened\" ||\n entry.state === \"indeterminate\" ||\n entry.state === null\n ) {\n // Update drawer state\n entry.setState(\"closing\");\n\n // Remove focus from active element\n document.activeElement.blur();\n\n // Run the close transition\n if (\n transitionOverride != undefined\n ? transitionOverride\n : entry.getSetting(\"transition\")\n ) {\n await transition(\n entry.el,\n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"stateClosing\"),\n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateClosed\"));\n entry.el.classList.remove(entry.getSetting(\"stateOpened\"));\n }\n\n // Update drawer state\n entry.setState(\"closed\");\n\n // Update the global state if mode is modal\n if (entry.mode === \"modal\")\n setGlobalState(\n false,\n entry.getSetting(\"selectorInert\"),\n entry.getSetting(\"selectorOverflow\")\n );\n\n // Set focus to the trigger element if the focus param is true\n if (focus) {\n updateFocusState.call(this, entry);\n }\n\n // Dispatch custom closed event\n entry.el.dispatchEvent(\n new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"closed\", {\n detail: this,\n bubbles: true\n })\n );\n\n // Emit the closed event\n await entry.parent.emit(\"closed\", entry);\n }\n\n // Return the drawer\n return entry;\n}\n","import { open } from \"./open\";\nimport { close } from \"./close\";\nimport { getDrawer } from \"./helpers/getDrawer\";\n\nexport async function toggle(query, transition, focus) {\n // Get the drawer from collection\n const entry = getDrawer.call(this, query);\n\n // Open or close the drawer based on its current state\n if (entry.state === \"closed\") {\n return open.call(this, entry, transition, focus);\n } else {\n return close.call(this, entry, transition, focus);\n }\n}\n","import { Collection } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { DrawerEntry } from \"./DrawerEntry\";\nimport { handleClick, handleKeydown } from \"./handlers\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { toggle } from \"./toggle\";\n\nexport class Drawer extends Collection {\n #handleClick;\n #handleKeydown;\n\n constructor(options) {\n super({ ...defaults, ...options });\n this.module = \"Drawer\";\n this.entryClass = DrawerEntry;\n this.#handleClick = handleClick.bind(this);\n this.#handleKeydown = handleKeydown.bind(this);\n }\n\n get activeModal() {\n return this.collection.find((entry) => {\n return entry.state === \"opened\" && entry.mode === \"modal\";\n });\n }\n\n async open(id, transition, focus) {\n return open.call(this, id, transition, focus);\n }\n\n async close(id, transition, focus) {\n return close.call(this, id, transition, focus);\n }\n\n async toggle(id, transition, focus) {\n return toggle.call(this, id, transition, focus);\n }\n\n async afterMount() {\n document.addEventListener(\"click\", this.#handleClick, false);\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n async beforeUnmount() {\n this.trigger = null;\n }\n\n async afterUnmount() {\n document.removeEventListener(\"click\", this.#handleClick, false);\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n}\n","export default {\n // Data attributes\n dataOpen: \"modal-open\",\n dataClose: \"modal-close\",\n dataReplace: \"modal-replace\",\n\n // Selectors\n selector: \".modal\",\n selectorDialog: \".modal__dialog\",\n selectorScreen: \".modal\",\n selectorRequired: '[role=\"alertdialog\"]',\n selectorFocus: \"[data-focus]\",\n selectorInert: null,\n selectorOverflow: \"body\",\n\n // State classes\n stateOpened: \"is-opened\",\n stateOpening: \"is-opening\",\n stateClosing: \"is-closing\",\n stateClosed: \"is-closed\",\n\n // Feature settings\n customProps: [\"transition-duration\"],\n customEventPrefix: \"modal:\",\n setTabindex: true,\n transition: true,\n transitionDuration: 300\n};\n","import { CollectionEntry } from \"@vrembem/core\";\n\nexport class ModalEntry extends CollectionEntry {\n constructor(parent, query, options = {}) {\n super(parent, query, options);\n this.state = \"closed\";\n this.dialog = null;\n }\n\n get isRequired() {\n return this.dialog.matches(this.getSetting(\"selectorRequired\"));\n }\n\n async open(transition, focus) {\n return this.parent.open(this, transition, focus);\n }\n\n async close(transition, focus) {\n return this.parent.close(this, transition, focus);\n }\n\n async replace(transition, focus) {\n return this.parent.replace(this, transition, focus);\n }\n\n async deregister() {\n return this.parent.deregister(this.id);\n }\n\n async onCreateEntry() {\n // Set the dialog element. If none is found, use the root element\n const dialog = this.el.querySelector(this.getSetting(\"selectorDialog\"));\n this.dialog = dialog ? dialog : this.el;\n\n // Set aria-modal attribute to true\n this.dialog.setAttribute(\"aria-modal\", \"true\");\n\n // If a role attribute is not set, set it to \"dialog\" as the default\n if (!this.dialog.hasAttribute(\"role\")) {\n this.dialog.setAttribute(\"role\", \"dialog\");\n }\n\n // Set tabindex=\"-1\" so dialog is focusable via JS or click\n if (this.getSetting(\"setTabindex\")) {\n this.dialog.setAttribute(\"tabindex\", \"-1\");\n }\n }\n\n async onRegisterEntry() {\n // Setup initial state\n if (this.el.classList.contains(this.getSetting(\"stateOpened\"))) {\n // Open entry with transitions disabled\n await this.open(false);\n } else {\n // Remove transition state classes\n this.el.classList.remove(this.getSetting(\"stateOpening\"));\n this.el.classList.remove(this.getSetting(\"stateClosing\"));\n // Add closed state class\n this.el.classList.add(this.getSetting(\"stateClosed\"));\n }\n }\n\n async onDestroyEntry() {\n // If entry is in the opened state, close it\n if (this.state === \"opened\") {\n await this.close(false);\n }\n }\n}\n","export function getModal(query) {\n // Get the entry from collection\n const entry =\n typeof query === \"string\" ? this.get(query) : this.get(query.id);\n\n // Return entry if it was resolved, otherwise throw error\n if (entry) {\n return entry;\n } else {\n throw new Error(\n `Modal not found in collection with id of \"${query.id || query}\".`\n );\n }\n}\n","import { getModal } from \"./helpers/getModal\";\n\nexport async function handleClick(event) {\n // If an open, close or replace button was clicked, handle the click event\n const trigger = event.target.closest(`\n [data-${this.settings.dataOpen}],\n [data-${this.settings.dataReplace}],\n [data-${this.settings.dataClose}]\n `);\n\n if (trigger) {\n // Prevent the default behavior of the trigger\n event.preventDefault();\n\n // If it's a open trigger...\n if (trigger.matches(`[data-${this.settings.dataOpen}]`)) {\n const selector = trigger\n .getAttribute(`data-${this.settings.dataOpen}`)\n .trim();\n // Get the entry from collection using the attribute value\n const entry = getModal.call(this, selector);\n // Store the trigger on the entry if it's not from inside a modal\n const fromModal = event.target.closest(this.settings.selector);\n if (!fromModal) this.trigger = trigger;\n // Toggle the drawer\n return entry.open();\n }\n\n // If it's a replace trigger...\n if (trigger.matches(`[data-${this.settings.dataReplace}]`)) {\n const selector = trigger\n .getAttribute(`data-${this.settings.dataReplace}`)\n .trim();\n // Get the entry from collection using the attribute value\n const entry = getModal.call(this, selector);\n // Store the trigger on the entry if it's not from inside a modal\n const fromModal = event.target.closest(this.settings.selector);\n if (!fromModal) this.trigger = trigger;\n // Toggle the drawer\n return entry.replace();\n }\n\n if (trigger.matches(`[data-${this.settings.dataClose}]`)) {\n const selector = trigger\n .getAttribute(`data-${this.settings.dataClose}`)\n .trim();\n return selector === \"*\" ? this.closeAll() : this.close(selector);\n }\n }\n\n // If there is an active modal and the screen was clicked...\n if (\n this.active &&\n event.target.matches(this.settings.selectorScreen) &&\n !this.active.isRequired\n ) {\n // Close the modal\n return this.close(this.active.id);\n }\n}\n\nexport function handleKeydown(event) {\n // If escape key was pressed\n if (event.key === \"Escape\") {\n // If a modal is opened and not required, close the modal\n if (\n this.active &&\n !this.active.dialog.matches(this.settings.selectorRequired)\n ) {\n return this.close();\n }\n }\n}\n","export function updateFocusState() {\n // Check if there's an active modal\n if (this.active) {\n (\n this.active.dialog.querySelector(this.settings.selectorFocus) ||\n this.active.dialog\n ).focus();\n } else {\n // Set focus to root trigger and unmount the focus trap\n if (this.trigger) {\n this.trigger.focus();\n this.trigger = null;\n }\n }\n}\n","import { transition } from \"@vrembem/core\";\nimport { getModal } from \"./helpers/getModal\";\nimport { updateFocusState } from \"./helpers/updateFocusState\";\n\nexport async function open(\n query,\n transitionOverride = undefined,\n focus = true\n) {\n // Get the modal from collection\n const entry = getModal.call(this, query);\n\n // Maybe add modal to top of stack\n this.stack.moveToTop(entry);\n\n // If modal is closed\n if (entry.state === \"closed\") {\n // Update modal state\n entry.state = \"opening\";\n\n // Add modal to stack\n this.stack.add(entry);\n\n // Run the open transition\n if (\n transitionOverride != undefined\n ? transitionOverride\n : entry.getSetting(\"transition\")\n ) {\n await transition(\n entry.el,\n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"stateOpening\"),\n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateOpened\"));\n entry.el.classList.remove(entry.getSetting(\"stateClosed\"));\n }\n\n // Update modal state\n entry.state = \"opened\";\n }\n\n // Update focus if the focus param is true\n if (focus) {\n updateFocusState.call(this);\n }\n\n // Dispatch custom opened event\n entry.el.dispatchEvent(\n new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"opened\", {\n detail: entry,\n bubbles: true\n })\n );\n\n // Emit the opened event\n await entry.parent.emit(\"opened\", entry);\n\n // Return the modal\n return entry;\n}\n","import { transition } from \"@vrembem/core\";\nimport { getModal } from \"./helpers/getModal\";\nimport { updateFocusState } from \"./helpers/updateFocusState\";\n\nexport async function close(query, transitionOverride, focus = true) {\n // Get the modal from collection or top modal in stack if no query is provided\n const entry = query ? getModal.call(this, query) : this.active;\n\n // If a modal exists and its state is opened\n if (entry && entry.state === \"opened\") {\n // Update modal state\n entry.state = \"closing\";\n\n // Remove focus from active element\n document.activeElement.blur();\n\n // Run the close transition\n if (\n transitionOverride != undefined\n ? transitionOverride\n : entry.getSetting(\"transition\")\n ) {\n await transition(\n entry.el,\n entry.getSetting(\"stateOpened\"),\n entry.getSetting(\"stateClosing\"),\n entry.getSetting(\"stateClosed\"),\n entry.getSetting(\"transitionDuration\")\n );\n } else {\n entry.el.classList.add(entry.getSetting(\"stateClosed\"));\n entry.el.classList.remove(entry.getSetting(\"stateOpened\"));\n }\n\n // Remove modal from stack\n this.stack.remove(entry);\n\n // Update modal state\n entry.state = \"closed\";\n\n // Update focus if the focus param is true\n if (focus) {\n updateFocusState.call(this);\n }\n\n // Dispatch custom closed event\n entry.el.dispatchEvent(\n new CustomEvent(entry.getSetting(\"customEventPrefix\") + \"closed\", {\n detail: entry,\n bubbles: true\n })\n );\n\n // Emit the closed event\n await entry.parent.emit(\"closed\", entry);\n }\n\n // Return the modal\n return entry;\n}\n","import { close } from \"./close\";\n\nexport async function closeAll(exclude, transition) {\n const result = [];\n await Promise.all(\n this.stack.copy.map(async (entry) => {\n if (exclude && exclude === entry.id) return;\n result.push(await close.call(this, entry, transition, false));\n entry.trigger = null;\n })\n );\n return result;\n}\n","import { open } from \"./open\";\nimport { closeAll } from \"./closeAll\";\nimport { getModal } from \"./helpers/getModal\";\nimport { updateFocusState } from \"./helpers/updateFocusState\";\n\nexport async function replace(query, transition, focus = true) {\n // Get the modal from collection\n const entry = getModal.call(this, query);\n\n // Setup results for return\n let resultOpened, resultClosed;\n\n if (entry.state === \"opened\") {\n // If modal is open, close all modals except for replacement\n resultOpened = entry;\n resultClosed = await closeAll.call(this, entry.id, transition);\n } else {\n // If modal is closed, close all and open replacement at the same time\n resultClosed = closeAll.call(this, false, transition);\n resultOpened = open.call(this, entry, transition, false);\n await Promise.all([resultOpened, resultClosed]);\n }\n\n // Update focus if the focus param is true\n if (focus) {\n updateFocusState.call(this);\n }\n\n // Return the modals there were opened and closed\n return { opened: resultOpened, closed: resultClosed };\n}\n","import { Collection, StackArray, setGlobalState } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { ModalEntry } from \"./ModalEntry\";\nimport { handleClick, handleKeydown } from \"./handlers\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { closeAll } from \"./closeAll\";\nimport { replace } from \"./replace\";\nimport { updateFocusState } from \"./helpers/updateFocusState\";\n\nexport class Modal extends Collection {\n #handleClick;\n #handleKeydown;\n\n constructor(options) {\n super({ ...defaults, ...options });\n this.module = \"Modal\";\n this.entryClass = ModalEntry;\n this.trigger = null;\n this.#handleClick = handleClick.bind(this);\n this.#handleKeydown = handleKeydown.bind(this);\n\n // Setup stack property using StackArray\n this.stack = new StackArray({\n onChange: () => {\n setGlobalState(\n this.stack.top,\n this.settings.selectorInert,\n this.settings.selectorOverflow\n );\n }\n });\n }\n\n get active() {\n return this.stack.top;\n }\n\n async open(id, transition, focus) {\n return open.call(this, id, transition, focus);\n }\n\n async close(id, transition, focus) {\n return close.call(this, id, transition, focus);\n }\n\n async replace(id, transition, focus) {\n return replace.call(this, id, transition, focus);\n }\n\n async closeAll(exclude = false, transition, focus = true) {\n const result = await closeAll.call(this, exclude, transition);\n // Update focus if the focus param is true\n if (focus) {\n updateFocusState.call(this);\n }\n return result;\n }\n\n async afterMount() {\n document.addEventListener(\"click\", this.#handleClick, false);\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n async beforeUnmount() {\n this.trigger = null;\n }\n\n async afterUnmount() {\n document.removeEventListener(\"click\", this.#handleClick, false);\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n}\n","export default {\n // Selectors\n selector: \".popover\",\n selectorTooltip: \".popover_tooltip\",\n selectorArrow: \".popover__arrow\",\n\n // State classes\n stateActive: \"is-active\",\n\n // Custom properties and their defaults\n customProps: [\n \"placement\",\n \"event\",\n \"offset\",\n \"flip-padding\",\n \"shift-padding\",\n \"arrow-padding\",\n \"toggle-delay\"\n ],\n customEventPrefix: \"popover:\",\n placement: \"bottom\",\n event: \"click\",\n offset: 0,\n flipPadding: 0,\n shiftPadding: 0,\n arrowPadding: 0,\n toggleDelay: 0\n};\n","export function applyPositionStyle(el, x, y) {\n Object.assign(el.style, {\n left: x != null ? `${x}px` : \"\",\n top: y != null ? `${y}px` : \"\"\n });\n}\n","export function getDelay(popover, index) {\n // Get the initial toggle delay value from settings\n let value = popover.getSetting(\"toggle-delay\");\n\n // Check if value is a string\n if (typeof value == \"string\") {\n // Convert it to an array if value contains a comma\n if (value.indexOf(\",\") > -1) {\n value = value.split(\",\");\n }\n // Convert it to an array if value contains a space\n if (value.indexOf(\" \") > -1) {\n value = value.split(\" \");\n }\n }\n\n // Check if value is an array and get the index\n if (Array.isArray(value)) {\n value = value[index];\n }\n\n // Convert the value to a number if possible\n const number = Number(value);\n\n // Check if the number is in fact a number\n if (!Number.isNaN(number)) {\n return number;\n } else {\n throw new Error(`Provided delay value is not a number: \"${value}\"`);\n }\n}\n","export function getPadding(value) {\n // Initialize the padding var\n let padding;\n\n // Split the value by spaces if it's a string\n const array = typeof value === \"string\" ? value.trim().split(\" \") : [value];\n\n // Convert individual values to integers\n for (let index = 0; index < array.length; index++) {\n array[index] = Number(array[index]);\n }\n\n // Build the padding object based on the number of values passed\n switch (array.length) {\n case 1:\n padding = array[0];\n break;\n case 2:\n padding = {\n top: array[0],\n right: array[1],\n bottom: array[0],\n left: array[1]\n };\n break;\n case 3:\n padding = {\n top: array[0],\n right: array[1],\n bottom: array[2],\n left: array[1]\n };\n break;\n case 4:\n padding = {\n top: array[0],\n right: array[1],\n bottom: array[2],\n left: array[3]\n };\n break;\n default:\n padding = false;\n break;\n }\n\n // Return the padding object\n return padding;\n}\n","import { getPadding } from \"./getPadding\";\n\nexport function getMiddlewareOptions(popover) {\n return {\n offset: Number(popover.getSetting(\"offset\")),\n flip: {\n padding: getPadding(popover.getSetting(\"flip-padding\"))\n },\n shift: {\n padding: getPadding(popover.getSetting(\"shift-padding\"))\n },\n arrow: {\n element: popover.getSetting(\"selectorArrow\"),\n padding: getPadding(popover.getSetting(\"arrow-padding\"))\n }\n };\n}\n","export function getPopover(query) {\n // Get the entry from collection\n const entry =\n typeof query === \"string\" ? this.get(query) : this.get(query.id);\n\n // Return entry if it was resolved, otherwise throw error\n if (entry) {\n return entry;\n } else {\n throw new Error(`Popover not found in collection with id of \"${query}\".`);\n }\n}\n","import { getPopover } from \"./helpers\";\n\nexport async function close(query) {\n // Get the popover from collection\n const popover = query\n ? getPopover.call(this, query)\n : await closeAll.call(this);\n\n // If a modal exists and its state is opened\n if (popover && popover.state === \"opened\") {\n // Update inert state and state class\n popover.el.inert = true;\n popover.el.classList.remove(this.settings.stateActive);\n\n // Update accessibility attribute(s)\n if (!popover.isTooltip) {\n popover.trigger.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Clean up the floating UI instance\n popover.floatingCleanup();\n\n // Update popover state\n popover.state = \"closed\";\n\n // Clear root trigger if popover trigger matches\n if (popover.trigger === this.trigger) {\n this.trigger = null;\n }\n\n // Dispatch custom closed event\n popover.el.dispatchEvent(\n new CustomEvent(popover.getSetting(\"customEventPrefix\") + \"closed\", {\n detail: this,\n bubbles: true\n })\n );\n\n // Emit the closed event\n await popover.parent.emit(\"closed\", popover);\n }\n\n // Return the popover\n return popover;\n}\n\nexport async function closeAll() {\n const result = [];\n await Promise.all(\n this.collection.map(async (popover) => {\n if (popover.state === \"opened\") {\n result.push(await close.call(this, popover));\n }\n })\n );\n return result;\n}\n\nexport function closeCheck(popover) {\n // Only run closeCheck if provided popover is currently open\n if (popover.state != \"opened\") return;\n\n // Needed to correctly check which element is currently being focused\n setTimeout(() => {\n // Check if trigger or element are being hovered\n const isHovered =\n popover.el.matches(\":hover\") === popover.el ||\n popover.trigger.matches(\":hover\") === popover.trigger;\n\n // Check if trigger or element are being focused\n let isFocused = document.activeElement.closest(\n `#${popover.id}, [aria-controls=\"${popover.id}\"], [aria-describedby=\"${popover.id}\"]`\n );\n\n // Close if the trigger and element are not currently hovered or focused\n if (!isHovered && !isFocused) {\n popover.close();\n }\n\n // Return the popover\n return popover;\n }, 1);\n}\n","import { getDelay } from \"./helpers\";\nimport { closeAll, closeCheck } from \"./close\";\n\nexport function handleClick(popover) {\n if (popover.state === \"opened\") {\n popover.close();\n } else {\n this.trigger = popover.trigger;\n popover.open();\n }\n}\n\nexport function handleTooltipClick(popover) {\n if (popover.isTooltip) {\n if (popover.toggleDelayId) {\n clearTimeout(popover.toggleDelayId);\n }\n popover.close();\n }\n}\n\nexport function handleMouseEnter(popover, event) {\n // Store our hover state\n popover.isHovered = event;\n\n // Guard to ensure only focus-visible triggers the tooltip on focus events\n if (event.type == \"focus\" && !popover.trigger.matches(\":focus-visible\")) {\n return;\n }\n\n // Clear any existing toggle delays\n if (popover.toggleDelayId) {\n clearTimeout(popover.toggleDelayId);\n }\n\n // Guard to ensure a popover is not already open for this trigger\n const isExpanded = popover.trigger.getAttribute(\"aria-expanded\");\n if (isExpanded && isExpanded == \"true\") return;\n\n // Remove the open delay if a hover popover is already active\n const delay = this.activeHover ? 0 : getDelay(popover, 0);\n\n // Close any active hover popovers\n if (this.activeHover) this.activeHover.close();\n\n // Set the toggle delay before opening the popover\n popover.toggleDelayId = setTimeout(() => {\n // If the popover still exists, open it\n if (popover.id) popover.open();\n }, delay);\n}\n\nexport function handleMouseLeave(popover, event) {\n // Add a tiny delay to ensure hover isn't being moved to the popover element\n setTimeout(() => {\n // Update our hover state\n popover.isHovered = event;\n\n // Guard to prevent closing popover if either elements are being hovered\n if (popover.isHovered) return;\n\n // Clear any existing toggle delays\n if (popover.toggleDelayId) {\n clearTimeout(popover.toggleDelayId);\n }\n\n // Set the toggle delay before closing the popover\n popover.toggleDelayId = setTimeout(\n () => {\n closeCheck.call(this, popover);\n },\n getDelay(popover, 1)\n );\n }, 1);\n}\n\nexport function handleKeydown(event) {\n switch (event.key) {\n case \"Escape\":\n if (this.trigger) {\n this.trigger.focus();\n }\n closeAll.call(this);\n return;\n\n case \"Tab\":\n this.collection.forEach((popover) => {\n closeCheck.call(this, popover);\n });\n return;\n\n default:\n return;\n }\n}\n\nexport function handleDocumentClick(popover) {\n const root = this;\n document.addEventListener(\"click\", function _f(event) {\n // Check if a popover or its trigger was clicked\n const wasClicked = event.target.closest(\n `#${popover.id}, [aria-controls=\"${popover.id}\"], [aria-describedby=\"${popover.id}\"]`\n );\n\n // If popover or popover trigger was clicked...\n if (wasClicked) {\n // If popover element exists and is not active...\n if (\n popover.el &&\n !popover.el.classList.contains(root.settings.stateActive)\n ) {\n this.removeEventListener(\"click\", _f);\n }\n } else {\n // If popover element exists and is active...\n if (\n popover.el &&\n popover.el.classList.contains(root.settings.stateActive)\n ) {\n popover.close();\n }\n this.removeEventListener(\"click\", _f);\n }\n });\n}\n","import { CollectionEntry } from \"@vrembem/core\";\n\nimport {\n handleClick,\n handleTooltipClick,\n handleMouseEnter,\n handleMouseLeave\n} from \"./handlers\";\n\nexport class PopoverEntry extends CollectionEntry {\n #eventListeners;\n #isHovered;\n\n constructor(parent, query, options = {}) {\n super(parent, query, options);\n this.state = \"closed\";\n this.toggleDelayId = null;\n this.trigger = null;\n this.#eventListeners = null;\n this.#isHovered = {\n el: false,\n trigger: false\n };\n this.floatingCleanup = () => {};\n }\n\n get isTooltip() {\n return (\n !!this.el.closest(this.getSetting(\"selectorTooltip\")) ||\n this.el.getAttribute(\"role\") == \"tooltip\"\n );\n }\n\n get isHovered() {\n return this.#isHovered.el || this.#isHovered.trigger;\n }\n\n set isHovered(event) {\n // The state can either be true, false or undefined based on event type\n const state =\n event.type == \"mouseenter\"\n ? true\n : event.type == \"mouseleave\"\n ? false\n : undefined;\n // Guard in case the event type is not \"mouseenter\" or \"mouseleave\"\n if (state == undefined) return;\n // Store the hover state if the event target matches the el or trigger\n switch (event.target) {\n case this.el:\n this.#isHovered.el = state;\n break;\n case this.trigger:\n this.#isHovered.trigger = state;\n break;\n }\n }\n\n async open() {\n return this.parent.open(this);\n }\n\n async close() {\n return this.parent.close(this);\n }\n\n async deregister() {\n return this.parent.deregister(this.id);\n }\n\n registerEventListeners() {\n // If event listeners aren't already setup\n if (!this.#eventListeners) {\n // Add event listeners based on event type\n const eventType = this.getSetting(\"event\");\n\n // If the event type is hover\n if (eventType === \"hover\") {\n // Setup event listeners object for hover\n this.#eventListeners = [\n {\n el: [\"el\", \"trigger\"],\n type: [\"mouseenter\", \"focus\"],\n listener: handleMouseEnter.bind(this.parent, this)\n },\n {\n el: [\"el\", \"trigger\"],\n type: [\"mouseleave\", \"focusout\"],\n listener: handleMouseLeave.bind(this.parent, this)\n },\n {\n el: [\"trigger\"],\n type: [\"click\"],\n listener: handleTooltipClick.bind(this.parent, this)\n }\n ];\n\n // Loop through listeners and apply to the appropriate elements\n this.#eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n this[el].addEventListener(type, evObj.listener, false);\n });\n });\n });\n }\n\n // Else the event type is click\n else {\n // Setup event listeners object for click\n this.#eventListeners = [\n {\n el: [\"trigger\"],\n type: [\"click\"],\n listener: handleClick.bind(this.parent, this)\n }\n ];\n\n // Loop through listeners and apply to the appropriate elements\n this.#eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n this[el].addEventListener(type, evObj.listener, false);\n });\n });\n });\n }\n }\n }\n\n deregisterEventListeners() {\n // If event listeners have been setup\n if (this.#eventListeners) {\n // Loop through listeners and remove from the appropriate elements\n this.#eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n this[el].removeEventListener(type, evObj.listener, false);\n });\n });\n });\n\n // Remove eventListeners object from collection\n this.#eventListeners = null;\n }\n }\n\n async onCreateEntry() {\n // Get the trigger element\n this.trigger = document.querySelector(\n `[aria-controls=\"${this.id}\"], [aria-describedby=\"${this.id}\"]`\n );\n\n // If it's a tooltip...\n if (this.isTooltip) {\n // Set the event to hover role=\"tooltip\" attribute\n this.settings.event = \"hover\";\n this.el.setAttribute(\"role\", \"tooltip\");\n } else {\n // Set aria-expanded to false if trigger has aria-controls attribute\n this.trigger.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Setup event listeners\n this.registerEventListeners();\n }\n\n async onRegisterEntry() {\n // Set initial state based on the presence of the active class\n if (this.el.classList.contains(this.getSetting(\"stateActive\"))) {\n await this.open();\n } else {\n this.el.inert = true;\n }\n }\n\n async onDestroyEntry() {\n // If entry is in the opened state, close it\n if (this.state === \"opened\") {\n await this.close();\n }\n\n // Clean up the floating UI instance\n this.floatingCleanup();\n\n // Remove event listeners\n this.deregisterEventListeners();\n }\n}\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};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\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 return ['top', 'bottom'].includes(getSide(placement)) ? '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.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\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 return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\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 * 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 validMiddleware = middleware.filter(Boolean);\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 middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\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,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\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 * 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/**\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 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 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 var _overflowsData$;\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n const hasInitialMainAxisOverflow = ((_overflowsData$ = overflowsData[0]) == null ? void 0 : _overflowsData$.overflows[0]) > 0;\n if (!ignoreCrossAxisOverflow || hasInitialMainAxisOverflow) {\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 } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await 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 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\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 = ['left', 'top'].includes(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 } = 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 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 = ['top', 'left'].includes(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 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) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\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 ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\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 (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(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 }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\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, 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(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(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, ignoreScrollbarX) {\n if (ignoreScrollbarX === void 0) {\n ignoreScrollbarX = false;\n }\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n // RTL <body> scrollbar.\n 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 (isHTMLElement(offsetParent)) {\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, true) : 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(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\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 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(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(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(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 && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || 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 firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.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(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(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(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) : []), ...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) {\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 resizeObserver.observe(floating);\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","import {\n computePosition,\n autoUpdate,\n flip,\n shift,\n limitShift,\n offset,\n arrow\n} from \"@floating-ui/dom\";\nimport {\n applyPositionStyle,\n getMiddlewareOptions,\n getPopover\n} from \"./helpers\";\nimport { handleDocumentClick } from \"./handlers\";\n\nexport async function open(query) {\n // Get the popover from collection\n const popover = getPopover.call(this, query);\n\n // Update inert state and state class\n popover.el.inert = false;\n popover.el.classList.add(this.settings.stateActive);\n\n // Update accessibility attribute(s)\n if (!popover.isTooltip) {\n popover.trigger.setAttribute(\"aria-expanded\", \"true\");\n }\n\n // Get the custom property data before opening the popover\n popover.buildCustomProps();\n\n // Get the middleware options for floating ui\n const middlewareOptions = getMiddlewareOptions(popover);\n\n // Get the arrow element\n const arrowEl = popover.el.querySelector(middlewareOptions.arrow.element);\n middlewareOptions.arrow.element = arrowEl ? arrowEl : undefined;\n\n // Setup the autoUpdate of popover positioning and store the cleanup function\n popover.floatingCleanup = autoUpdate(popover.trigger, popover.el, () => {\n computePosition(popover.trigger, popover.el, {\n placement: popover.getSetting(\"placement\"),\n middleware: [\n flip(middlewareOptions.flip),\n shift({ ...middlewareOptions.shift, limiter: limitShift() }),\n offset(middlewareOptions.offset),\n arrow(middlewareOptions.arrow)\n ]\n }).then(({ x, y, placement, middlewareData }) => {\n // Guard in case there is no popover element\n if (!popover.el) {\n return;\n }\n\n // Apply popover left and top position\n applyPositionStyle(popover.el, x, y);\n\n // Maybe apply arrow left or top position\n if (middlewareOptions.arrow.element && middlewareData.arrow) {\n const { x, y } = middlewareData.arrow;\n applyPositionStyle(middlewareOptions.arrow.element, x, y);\n }\n\n // Apply the current placement as a data attribute. This is used in our\n // CSS to determine the vertical position of arrows.\n popover.el.setAttribute(\"data-floating-placement\", placement);\n });\n });\n\n // Update popover state\n popover.state = \"opened\";\n\n // Apply document click handler\n if (popover.getSetting(\"event\") === \"click\") {\n handleDocumentClick.call(this, popover);\n }\n\n // Dispatch custom opened event\n popover.el.dispatchEvent(\n new CustomEvent(popover.getSetting(\"customEventPrefix\") + \"opened\", {\n detail: this,\n bubbles: true\n })\n );\n\n // Emit the opened event\n await popover.parent.emit(\"opened\", popover);\n\n // Return the popover\n return popover;\n}\n","import { Collection } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { PopoverEntry } from \"./PopoverEntry\";\nimport { handleKeydown } from \"./handlers\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\n\nexport class Popover extends Collection {\n #handleKeydown;\n\n constructor(options = {}) {\n super({ ...defaults, ...options });\n this.module = \"Popover\";\n this.entryClass = PopoverEntry;\n this.trigger = null;\n this.#handleKeydown = handleKeydown.bind(this);\n }\n\n get active() {\n return this.get(\"opened\", \"state\");\n }\n\n get activeHover() {\n return this.collection.find((popover) => {\n return (\n popover.state == \"opened\" && popover.getSetting(\"event\") == \"hover\"\n );\n });\n }\n\n async open(id) {\n return open.call(this, id);\n }\n\n async close(id) {\n return close.call(this, id);\n }\n\n async afterMount() {\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n async beforeUnmount() {\n this.trigger = null;\n }\n\n async afterUnmount() {\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n}\n"],"names":["notInert","notNegTabIndex","notDisabled","focusableSelectors","getDataConfig","el","dataConfig","json","getElement","query","maybeRunMethod","obj","name","args","teleportElement","what","where","how","whereEl","returnRef","toCamel","value","word","index","toKebab","toMilliseconds","parsed","isMilliseconds","transition","init","interim","final","duration","resolve","cssVar","property","options","settings","prefixValue","getPrefix","cssValue","dispatchLifecycleHook","parent","entry","plugin","getCustomProps","styles","result","keys","i","prefix","module","key","maybeReturnSetting","prop","type","getSetting","fallback","props","setOverflowHidden","state","selector","setInert","setGlobalState","selectorInert","selectorOverflow","eventEmitter","event","listener","listenerRef","data","FocusableArray","FocusTrap","handleFocusTrap","handleFocusLock","activeElement","focusable","isShiftTab","isFirstOrRoot","isLastOrRoot","localStore","enable","local","store","PluginsArray","presets","defaults","preset","_a","item","StackArray","colors","debug","log","colorKeys","colorStyles","getValue","refs","count","focusTrap","methods","enableFocusTrap","disableFocusTrap","contextObj","mediaQuery","setupMediaQueryList","removeMediaQueryList","getMediaQuery","getBreakpointValue","mq","bp","mqs","propStore","getKey","setupPropStore","removePropStore","_value","newValue","oldValue","currentValue","moduleName","teleport","teleportReturn","defaults$3","CollectionEntry","Collection","config","element","id","els","themeStore","callbacks","profile","api","theme","defaults$2","switchMode","toInline","toModal","DrawerEntry","__privateAdd","_mode","__privateSet","__privateGet","ignoreStates","focus","dialog","getDrawer","handleClick","trigger","handleKeydown","updateFocusState","open","transitionOverride","close","toggle","Drawer","_handleClick","_handleKeydown","defaults$1","ModalEntry","getModal","closeAll","exclude","replace","resultOpened","resultClosed","Modal","applyPositionStyle","x","y","getDelay","popover","number","getPadding","padding","array","getMiddlewareOptions","getPopover","closeCheck","isHovered","isFocused","handleTooltipClick","handleMouseEnter","isExpanded","delay","handleMouseLeave","handleDocumentClick","root","_f","PopoverEntry","_eventListeners","_isHovered","evObj","min","max","round","floor","createCoords","v","oppositeSideMap","oppositeAlignmentMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","side","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","getPaddingObject","rectToClientRect","rect","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","fn","nextX","nextY","reset","detectOverflow","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","_overflowsData$","ignoreCrossAxisOverflow","hasInitialMainAxisOverflow","resetPlacement","d","a","b","_overflowsData$filter2","currentSideAxis","acc","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","ignoreScrollbarX","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","timeoutId","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","middlewareOptions","arrowEl","Popover"],"mappings":"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","x_google_ignoreList":[60,61,62,63]}