vrembem 4.0.0-next.26 → 4.0.0-next.28

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/Breakpoint.js","../../core/src/js/Collection.js","../../core/src/js/FocusTrap.js","../../core/src/js/getPrefix.js","../../core/src/js/cssVar.js","../../core/src/js/getConfig.js","../../core/src/js/getCustomProps.js","../../core/src/js/getElement.js","../../core/src/js/localStore.js","../../core/src/js/teleport.js","../../core/src/js/themeStore.js","../../core/src/js/toCamel.js","../../core/src/js/toKebab.js","../../core/src/js/transition.js","../../core/src/js/updateGlobalState.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/handlers.js","../../drawer/src/js/deregister.js","../../drawer/src/js/open.js","../../drawer/src/js/close.js","../../drawer/src/js/toggle.js","../../drawer/src/js/switchMode.js","../../drawer/src/js/register.js","../../drawer/src/js/index.js","../../modal/src/js/defaults.js","../../modal/src/js/helpers/getModal.js","../../modal/src/js/helpers/updateFocusState.js","../../modal/src/js/handlers.js","../../modal/src/js/deregister.js","../../modal/src/js/open.js","../../modal/src/js/close.js","../../modal/src/js/closeAll.js","../../modal/src/js/replace.js","../../modal/src/js/register.js","../../modal/src/js/stack.js","../../modal/src/js/index.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/helpers/getPopoverID.js","../../popover/src/js/helpers/getPopoverElements.js","../../popover/src/js/close.js","../../popover/src/js/handlers.js","../../popover/src/js/deregister.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/register.js","../../popover/src/js/index.js"],"sourcesContent":["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 { \n getConfig,\n getCustomProps,\n getElement,\n teleport,\n toCamel,\n toKebab\n} from \"@vrembem/core\";\n\nexport class Collection {\n #entryPrototype;\n\n constructor(options = {}) {\n const root = this;\n this.module = this.constructor.name;\n this.collection = [];\n this.settings = Object.assign({ dataConfig: \"config\" }, options);\n this.#entryPrototype = {\n applySettings(obj) {\n return Object.assign(this.settings, obj);\n },\n getDataConfig() {\n return Object.assign(this.dataConfig, getConfig(this.el, this.getSetting(\"dataConfig\")));\n },\n getCustomProps() {\n return Object.assign(this.customProps, getCustomProps(this.el, root.module, this.customPropKeys));\n },\n getSetting(key) {\n // Store our key in both camel and kebab naming conventions.\n const camel = toCamel(key);\n const kebab = toKebab(key);\n \n // Check the data config object.\n if (\"dataConfig\" in this && camel in this.dataConfig) {\n return this.dataConfig[camel];\n }\n \n // Check the custom properties object.\n if (\"customProps\" in this && kebab in this.customProps) {\n return this.customProps[kebab];\n }\n \n // Check the entry settings.\n if (\"settings\" in this && camel in this.settings) {\n return this.settings[camel];\n }\n \n // Check the root settings.\n if (\"settings\" in root && camel in root.settings) {\n return root.settings[camel];\n }\n \n // Throw error if setting does not exist.\n throw(new Error(`${root.module} setting does not exist: ${key}`));\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 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 }\n\n createEntry(query, overrides = {}) {\n const el = getElement(query);\n const entry = Object.create(this.#entryPrototype);\n Object.assign(entry, {\n id: el?.id,\n el: el,\n settings: {},\n dataConfig: {},\n customProps: {},\n customPropKeys: [],\n returnRef: null,\n }, overrides);\n return entry;\n }\n\n async register(item) {\n await this.deregister(item);\n this.collection.push(item);\n return this.collection;\n }\n\n async deregister(ref) {\n const index = this.collection.findIndex((entry) => {\n return (entry === ref);\n });\n if (index >= 0) {\n const entry = this.collection[index];\n Object.getOwnPropertyNames(entry).forEach((prop) => {\n delete entry[prop];\n });\n this.collection.splice(index, 1);\n }\n return this.collection;\n }\n\n async registerCollection(items) {\n await Promise.all(Array.from(items, (item) => {\n this.register(item);\n }));\n return this.collection;\n }\n\n async deregisterCollection() {\n while (this.collection.length > 0) {\n await this.deregister(this.collection[0]);\n }\n return this.collection;\n }\n\n get(value, key = \"id\") {\n return this.collection.find((entry) => entry[key] === value);\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 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 } from \"@vrembem/core\";\n\nexport function getCustomProps(el, module, array) {\n // Get the computed styles of the element.\n const styles = getComputedStyle(el);\n\n // Initialize the results object for storing custom property key/value pairs.\n const result = {};\n\n // Loop through the custom properties object.\n for (let i = 0; i < array.length; i++) {\n // Get the custom property value.\n const prefix = getPrefix();\n const value = styles.getPropertyValue(`--${prefix}${module.toLowerCase()}-${array[i]}`).trim();\n\n // If a value was found, add it to our results object.\n if (value) {\n result[array[i]] = 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 }\n return undefined;\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 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","import { cssVar } from \"./cssVar\";\n\n/**\n * Get the value of a CSS custom property (variable).\n * @param {Node} el - The element to transition.\n * @param {Object} from - An object with a start and finish classes to \n * transition from.\n * @param {Object} to - An object with a start and finish classes to \n * transition to.\n * @param {String || Number} [duration=\"transition-duration\"] - 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, from, to, duration = \"transition-duration\") {\n return new Promise((resolve) => {\n // If duration is a string, query for the css var value.\n if (typeof duration === \"string\") {\n const cssValue = cssVar(duration, { element: el });\n // Convert value to ms if needed.\n const ms = (cssValue.includes(\"ms\")) ? true : false;\n duration = parseFloat(cssValue) * ((ms) ? 1 : 1000);\n }\n\n // Toggle classes for start of transition.\n el.classList.remove(from.finish);\n el.classList.add(to.start);\n\n // Setup the transition timing.\n setTimeout(() => {\n // Toggle classes for end of transition.\n el.classList.add(to.finish);\n el.classList.remove(to.start);\n\n // Resolve the promise.\n resolve(el);\n }, 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\n// TODO: Look into refactoring how this works.\nexport function updateGlobalState(state, selectorInert, selectorOverflow) {\n setInert(!!state, selectorInert);\n setOverflowHidden(!!state, selectorOverflow);\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 selectorDrawer: \".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 breakpoints: null,\n customEventPrefix: \"drawer:\",\n eventListeners: true,\n store: true,\n storeKey: \"VB:DrawerState\",\n setTabindex: true,\n teleport: null,\n teleportMethod: \"prepend\",\n transition: true,\n transitionDuration: \"drawer-transition-duration\"\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) : 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(`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 { 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.selectorDrawer);\n // If a parent drawer was found, close it.\n if (parent) return this.close(parent);\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);\n }\n}\n","export async function deregister(obj, close = true) {\n // Check if entry has been registered in the collection.\n const index = this.collection.findIndex((entry) => {\n return (entry.id === obj.id);\n });\n\n if (index >= 0) {\n // Get the collection entry.\n const entry = this.collection[index];\n\n // If entry is in the opened state.\n if (close && entry.state === \"opened\") {\n // Close the drawer.\n await entry.close(false);\n }\n\n // Remove entry from local store.\n this.store.set(entry.id);\n\n // Unmount the MatchMedia functionality.\n entry.unmountBreakpoint();\n\n // Delete properties from collection entry.\n Object.getOwnPropertyNames(entry).forEach((prop) => {\n delete entry[prop];\n });\n\n // Remove entry from collection.\n this.collection.splice(index, 1);\n }\n\n // Return the modified collection.\n return this.collection;\n}\n","import { transition, updateGlobalState } 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(entry.el, {\n start: entry.getSetting(\"stateClosing\"),\n finish: entry.getSetting(\"stateClosed\")\n }, {\n start: entry.getSetting(\"stateOpening\"),\n finish: entry.getSetting(\"stateOpened\")\n }, entry.getSetting(\"transitionDuration\"));\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\") updateGlobalState(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, updateGlobalState } 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(entry.el, {\n start: entry.getSetting(\"stateOpening\"),\n finish: entry.getSetting(\"stateOpened\")\n }, {\n start: entry.getSetting(\"stateClosing\"),\n finish: entry.getSetting(\"stateClosed\")\n }, entry.getSetting(\"transitionDuration\"));\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\") updateGlobalState(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 { updateGlobalState } from \"@vrembem/core\";\nimport { close } from \"./close\";\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 updateGlobalState(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\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 { Breakpoint } from \"@vrembem/core\";\n\nimport { deregister } from \"./deregister\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { toggle } from \"./toggle\";\nimport { switchMode } from \"./switchMode\";\nimport { applyInitialState } from \"./helpers\";\nimport { getBreakpoint } from \"./helpers\";\n\nexport async function register(el, config = {}) {\n // Deregister entry incase it has already been registered.\n await deregister.call(this, el, false);\n\n // Save root this for use inside methods API.\n const root = this;\n\n // Create an instance of the Breakpoint class.\n const breakpoint = new Breakpoint();\n\n // Setup private variables and their default values if any.\n let _mode, _state = \"indeterminate\";\n\n // Create the entry object.\n const entry = this.createEntry(el);\n\n // Build on the entry object.\n Object.assign(entry, {\n dialog: null,\n trigger: null,\n inlineState: \"indeterminate\",\n open(transition, focus) {\n return open.call(root, this, transition, focus);\n },\n close(transition, focus) {\n return close.call(root, this, transition, focus);\n },\n toggle(transition, focus) {\n return toggle.call(root, this, transition, focus);\n },\n deregister() {\n return deregister.call(root, this);\n },\n mountBreakpoint() {\n const value = this.breakpoint;\n const handler = this.handleBreakpoint.bind(this);\n breakpoint.mount(value, handler);\n return this;\n },\n unmountBreakpoint() {\n breakpoint.unmount();\n return this;\n },\n handleBreakpoint(event) {\n const bpMode = (event.matches) ? \"inline\" : \"modal\";\n if (this.mode != bpMode) {\n this.mode = bpMode;\n }\n return this;\n }\n });\n\n // Create getters and setters.\n Object.defineProperties(entry, Object.getOwnPropertyDescriptors({\n get breakpoint() {\n return getBreakpoint.call(root, el);\n },\n get store() {\n return root.store.get(this.id);\n },\n get mode() {\n return _mode;\n },\n set mode(value) {\n _mode = value;\n switchMode.call(root, this);\n },\n get state() {\n return _state;\n },\n set state(value) {\n _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 root.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\n // Build the setting objects.\n entry.applySettings(config);\n entry.getDataConfig();\n\n // Teleport drawer if a reference has been set.\n if (entry.getSetting(\"teleport\")) {\n entry.teleport();\n }\n\n // Add entry to collection.\n this.collection.push(entry);\n\n // Set the dialog element. If none is found, use the root element.\n const dialog = el.querySelector(entry.getSetting(\"selectorDialog\"));\n entry.dialog = (dialog) ? dialog : el;\n\n // Set tabindex=\"-1\" so dialog is focusable via JS or click.\n if (entry.getSetting(\"setTabindex\")) {\n entry.dialog.setAttribute(\"tabindex\", \"-1\");\n }\n\n // Set both the initial state and inline state.\n applyInitialState(entry);\n\n // Set the inline state.\n entry.inlineState = entry.state;\n\n // Set the initial mode.\n entry.mode = (el.classList.contains(entry.getSetting(\"classModal\"))) ? \"modal\" : \"inline\";\n\n // If the entry has a breakpoint, get it mounted.\n if (entry.breakpoint) {\n entry.mountBreakpoint();\n }\n\n // Return the registered entry.\n return entry;\n}\n","import { Collection, FocusTrap, localStore } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { handleClick, handleKeydown } from \"./handlers\";\nimport { register } from \"./register\";\nimport { deregister } from \"./deregister\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { toggle } from \"./toggle\";\n\nexport default class Drawer extends Collection {\n #handleClick;\n #handleKeydown;\n\n constructor(options) {\n super({ ...defaults, ...options});\n this.focusTrap = new FocusTrap();\n\n // Setup local store for inline drawer state management.\n this.store = localStore(this.settings.storeKey, this.settings.store);\n\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 mount(options = null) {\n // Update settings with passed options.\n if (options) this.settings = { ...this.settings, ...options };\n\n // Get all the modals.\n const drawers = document.querySelectorAll(this.settings.selectorDrawer);\n\n // Register the collections array with modal instances.\n await this.registerCollection(drawers);\n\n // If eventListeners are enabled, mount event listeners.\n if (this.settings.eventListeners) {\n this.mountEventListeners();\n }\n\n return this;\n }\n\n async unmount() {\n // Remove all entries from the collection.\n await this.deregisterCollection();\n\n // If eventListeners are enabled, unmount event listeners.\n if (this.settings.eventListeners) {\n this.unmountEventListeners();\n }\n\n return this;\n }\n\n mountEventListeners() {\n document.addEventListener(\"click\", this.#handleClick, false);\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n unmountEventListeners() {\n document.removeEventListener(\"click\", this.#handleClick, false);\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n register(query, config = {}) {\n let el = (typeof query == \"string\") ?\n document.getElementById(query) : query;\n return (el) ?\n register.call(this, el, config) :\n Promise.reject(new Error(`Failed to register; drawer not found with ID of: \"${query.id || query}\".`));\n }\n\n deregister(query) {\n let obj = this.get((query.id || query));\n return (obj) ?\n deregister.call(this, obj) :\n Promise.reject(new Error(`Failed to deregister; drawer does not exist in collection with ID of: \"${query.id || query}\".`));\n }\n\n open(id, transition, focus) {\n return open.call(this, id, transition, focus);\n }\n\n close(id, transition, focus) {\n return close.call(this, id, transition, focus);\n }\n\n toggle(id, transition, focus) {\n return toggle.call(this, id, transition, focus);\n }\n}\n","export default {\n // Data attributes\n dataOpen: \"modal-open\",\n dataClose: \"modal-close\",\n dataReplace: \"modal-replace\",\n\n // Selectors\n selectorModal: \".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 customEventPrefix: \"modal:\",\n eventListeners: true,\n setTabindex: true,\n teleport: null,\n teleportMethod: \"append\",\n transition: true,\n transitionDuration: \"modal-transition-duration\"\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.selectorModal);\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.selectorModal);\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","export async function deregister(obj, close = true) {\n // Check if entry has been registered in the collection.\n const index = this.collection.findIndex((entry) => {\n return (entry.id === obj.id);\n });\n\n if (index >= 0) {\n // Get the collection entry.\n const entry = this.collection[index];\n\n // If entry is in the opened state, close it.\n if (close && entry.state === \"opened\") {\n await entry.close(false);\n } else {\n // Remove modal from stack.\n this.stack.remove(entry);\n }\n\n // Return teleported modal if a reference has been set.\n if (entry.getSetting(\"teleport\")) {\n entry.teleportReturn();\n }\n\n // Delete properties from collection entry.\n Object.getOwnPropertyNames(entry).forEach((prop) => {\n delete entry[prop];\n });\n\n // Remove entry from collection.\n this.collection.splice(index, 1);\n }\n\n // Return the modified collection.\n return this.collection;\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(entry.el, {\n start: entry.getSetting(\"stateClosing\"),\n finish: entry.getSetting(\"stateClosed\")\n }, {\n start: entry.getSetting(\"stateOpening\"),\n finish: entry.getSetting(\"stateOpened\")\n }, entry.getSetting(\"transitionDuration\"));\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(entry.el, {\n start: entry.getSetting(\"stateOpening\"),\n finish: entry.getSetting(\"stateOpened\")\n }, {\n start: entry.getSetting(\"stateClosing\"),\n finish: entry.getSetting(\"stateClosed\")\n }, entry.getSetting(\"transitionDuration\"));\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 { deregister } from \"./deregister\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { replace } from \"./replace\";\n\nexport async function register(el, config = {}) {\n // Deregister entry incase it has already been registered.\n await deregister.call(this, el, false);\n\n // Save root this for use inside methods API.\n const root = this;\n\n // Create the entry object.\n const entry = this.createEntry(el);\n\n // Build on the entry object.\n Object.assign(entry, {\n state: \"closed\",\n dialog: null,\n open(transition, focus) {\n return open.call(root, this, transition, focus);\n },\n close(transition, focus) {\n return close.call(root, this, transition, focus);\n },\n replace(transition, focus) {\n return replace.call(root, this, transition, focus);\n },\n deregister() {\n return deregister.call(root, this);\n }\n });\n\n // Create getters and setters.\n Object.defineProperties(entry, Object.getOwnPropertyDescriptors({\n get isRequired() {\n return this.dialog.matches(this.getSetting(\"selectorRequired\"));\n },\n }));\n\n // Build the setting objects.\n entry.applySettings(config);\n entry.getDataConfig();\n\n // Set the dialog element. If none is found, use the root element.\n const dialog = el.querySelector(entry.getSetting(\"selectorDialog\"));\n entry.dialog = (dialog) ? dialog : el;\n\n // Set aria-modal attribute to true.\n entry.dialog.setAttribute(\"aria-modal\", \"true\");\n\n // If a role attribute is not set, set it to \"dialog\" as the default.\n if (!entry.dialog.hasAttribute(\"role\")) {\n entry.dialog.setAttribute(\"role\", \"dialog\");\n }\n\n // Set tabindex=\"-1\" so dialog is focusable via JS or click.\n if (entry.getSetting(\"setTabindex\")) {\n entry.dialog.setAttribute(\"tabindex\", \"-1\");\n }\n\n // Teleport modal if a reference has been set.\n if (entry.getSetting(\"teleport\")) {\n entry.teleport();\n }\n\n // Add entry to collection.\n this.collection.push(entry);\n\n // Setup initial state.\n if (entry.el.classList.contains(entry.getSetting(\"stateOpened\"))) {\n // Open entry with transitions disabled.\n await entry.open(false);\n } else {\n // Remove transition state classes.\n entry.el.classList.remove(entry.getSetting(\"stateOpening\"));\n entry.el.classList.remove(entry.getSetting(\"stateClosing\"));\n // Add closed state class.\n entry.el.classList.add(entry.getSetting(\"stateClosed\"));\n }\n\n // Return the registered entry.\n return entry;\n}\n","import { updateGlobalState } 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 updateGlobalState() {\n updateGlobalState(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.updateGlobalState();\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.updateGlobalState();\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 { handleClick, handleKeydown } from \"./handlers\";\nimport { register } from \"./register\";\nimport { deregister } from \"./deregister\";\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 default 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\n // Setup stack module.\n this.stack = stack(this.settings);\n\n this.#handleClick = handleClick.bind(this);\n this.#handleKeydown = handleKeydown.bind(this);\n }\n\n get active() {\n return this.stack.top;\n }\n\n async mount(options) {\n // Update settings with passed options.\n if (options) this.settings = { ...this.settings, ...options };\n\n // Get all the modals.\n const modals = document.querySelectorAll(this.settings.selectorModal);\n\n // Register the collections array with modal instances.\n await this.registerCollection(modals);\n\n // If eventListeners are enabled, mount event listeners.\n if (this.settings.eventListeners) {\n this.mountEventListeners();\n }\n\n return this;\n }\n\n async unmount() {\n // Clear stored trigger.\n this.trigger = null;\n\n // Remove all entries from the collection.\n await this.deregisterCollection();\n\n // If eventListeners are enabled, unmount event listeners.\n if (this.settings.eventListeners) {\n this.unmountEventListeners();\n }\n\n return this;\n }\n\n mountEventListeners() {\n document.addEventListener(\"click\", this.#handleClick, false);\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n unmountEventListeners() {\n document.removeEventListener(\"click\", this.#handleClick, false);\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n register(query, config = {}) {\n let el = (typeof query == \"string\") ?\n document.getElementById(query) : query;\n return (el) ?\n register.call(this, el, config) :\n Promise.reject(new Error(`Failed to register; modal not found with ID of: \"${query.id || query}\".`));\n }\n\n deregister(query) {\n let obj = this.get((query.id || query));\n return (obj) ?\n deregister.call(this, obj) :\n Promise.reject(new Error(`Failed to deregister; modal does not exist in collection with ID of: \"${query.id || query}\".`));\n }\n\n open(id, transition, focus) {\n return open.call(this, id, transition, focus);\n }\n\n close(id, transition, focus) {\n return close.call(this, id, transition, focus);\n }\n\n 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","export default {\n // Selectors\n selectorPopover: \".popover\",\n selectorTooltip: \".popover_tooltip\",\n selectorArrow: \".popover__arrow\",\n\n // State classes\n stateActive: \"is-active\",\n\n // Custom property defaults\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 eventListeners: true,\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","export function getPopoverID(obj) {\n // If it's a string, return the string.\n if (typeof obj === \"string\") {\n return obj;\n }\n\n // If it's an HTML element.\n else if (typeof obj.hasAttribute === \"function\") {\n // If it's a popover element, return the id.\n if (obj.closest(this.settings.selectorPopover)) {\n obj = obj.closest(this.settings.selectorPopover);\n return obj.id;\n }\n\n // If it's a popover trigger, return value of aria-controls.\n else if (obj.hasAttribute(\"aria-controls\")) {\n return obj.getAttribute(\"aria-controls\");\n }\n\n // If it's a popover tooltip trigger, return the value of aria-describedby.\n else if (obj.hasAttribute(\"aria-describedby\")) {\n return obj.getAttribute(\"aria-describedby\");\n }\n\n // Return false if no id was found.\n else return false;\n }\n\n // Return false if no id was found.\n else return false;\n}\n","import { getPopoverID } from \"./getPopoverID\";\n\nexport function getPopoverElements(query) {\n const id = getPopoverID.call(this, query);\n if (id) {\n const popover = document.querySelector(`#${id}`);\n const trigger =\n document.querySelector(`[aria-controls=\"${id}\"]`) ||\n document.querySelector(`[aria-describedby=\"${id}\"]`);\n\n if (!trigger && !popover) {\n return { error: new Error(`No popover elements found using the ID: \"${id}\".`) };\n } else if (!trigger) {\n return { error: new Error(`No popover trigger associated with the provided popover: \"${id}\".`) };\n } else if (!popover) {\n return { error: new Error(`No popover associated with the provided popover trigger: \"${id}\".`) };\n } else {\n return { popover, trigger };\n }\n } else {\n return { error: new Error(\"Could not resolve the popover ID.\") };\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.cleanup();\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 handleDocumentClick.call(this, popover);\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","export async function deregister(obj) {\n // Check if entry has been registered in the collection.\n const index = this.collection.findIndex((entry) => {\n return (entry.id === obj.id);\n });\n\n if (index >= 0) {\n // Get the collection entry.\n const entry = this.collection[index];\n\n // If entry is in the opened state, close it.\n if (entry.state === \"opened\") {\n entry.close();\n }\n\n // Clean up the floating UI instance.\n entry.cleanup();\n\n // Remove event listeners.\n deregisterEventListeners(entry);\n\n // Return teleported modal if a reference has been set.\n if (entry.getSetting(\"teleport\")) {\n entry.teleportReturn();\n }\n\n // Delete properties from collection entry.\n Object.getOwnPropertyNames(entry).forEach((prop) => {\n delete entry[prop];\n });\n\n // Remove entry from collection.\n this.collection.splice(index, 1);\n }\n\n // Return the modified collection.\n return this.collection;\n}\n\nexport function deregisterEventListeners(entry) {\n // If event listeners have been setup.\n if (entry._eventListeners) {\n // Loop through listeners and remove from the appropriate elements.\n entry._eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n entry[el].removeEventListener(type, evObj.listener, false);\n });\n });\n });\n\n // Remove eventListeners object from collection.\n delete entry._eventListeners;\n }\n\n // Return the entry object.\n return entry;\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\";\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.cleanup = 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 // Return the popover.\n return popover;\n}\n","import { handleClick, handleTooltipClick, handleMouseEnter, handleMouseLeave, handleDocumentClick } from \"./handlers\";\nimport { deregister } from \"./deregister\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\n\nexport async function register(el, trigger, config = {}) {\n // Deregister entry incase it has already been registered.\n await deregister.call(this, el);\n \n // Save root this for use inside methods API.\n const root = this;\n\n // Setup a private object for keeping track of the hover state.\n const _isHovered = {\n el: false,\n trigger: false\n };\n\n // An array of custom properties to search for.\n const _customPropKeys = [\n \"placement\",\n \"event\",\n \"offset\",\n \"flip-padding\",\n \"shift-padding\",\n \"arrow-padding\",\n \"toggle-delay\",\n ];\n\n // Create the entry object.\n const entry = this.createEntry(el, { customPropKeys: _customPropKeys });\n\n // Build on the entry object.\n Object.assign(entry, {\n state: \"closed\",\n trigger: trigger,\n toggleDelayId: null,\n cleanup: () => {},\n open() {\n return open.call(root, this);\n },\n close() {\n return close.call(root, this);\n },\n deregister() {\n return deregister.call(root, this);\n }\n });\n\n // Create getters and setters.\n Object.defineProperties(entry, Object.getOwnPropertyDescriptors({\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 _isHovered.el = state;\n break;\n case this.trigger:\n _isHovered.trigger = state;\n break;\n }\n },\n get isHovered() {\n return _isHovered.el || _isHovered.trigger;\n },\n get isTooltip() {\n return !!el.closest(root.settings.selectorTooltip) || el.getAttribute(\"role\") == \"tooltip\";\n }\n }));\n\n // If it's a tooltip set the event to hover.\n if (entry.isTooltip) {\n entry.settings.event = \"hover\";\n }\n\n // Build the setting objects.\n entry.applySettings(config);\n entry.getDataConfig();\n entry.getCustomProps();\n\n // Set role=\"tooltip\" attribute if the popover is a tooltip.\n if (entry.isTooltip) {\n entry.el.setAttribute(\"role\", \"tooltip\");\n }\n\n // Set aria-expanded to false if trigger has aria-controls attribute.\n if (!entry.isTooltip) {\n entry.trigger.setAttribute(\"aria-expanded\", \"false\");\n }\n\n // Setup event listeners.\n registerEventListeners.call(this, entry);\n\n // Teleport popover if a reference has been set.\n if (entry.getSetting(\"teleport\")) {\n entry.teleport();\n }\n\n // Add entry to collection.\n this.collection.push(entry);\n\n // Set initial state.\n if (entry.el.classList.contains(this.settings.stateActive)) {\n await entry.open();\n handleDocumentClick.call(this, entry);\n } else {\n entry.el.inert = true;\n }\n\n // Return the registered entry.\n return entry;\n}\n\nexport function registerEventListeners(entry) {\n // If event listeners aren't already setup.\n if (!entry._eventListeners) {\n // Add event listeners based on event type.\n const eventType = entry.getSetting(\"event\");\n\n // If the event type is hover.\n if (eventType === \"hover\") {\n // Setup event listeners object for hover.\n entry._eventListeners = [{\n el: [\"el\", \"trigger\"],\n type: [\"mouseenter\", \"focus\"],\n listener: handleMouseEnter.bind(this, entry)\n }, {\n el: [\"el\", \"trigger\"],\n type: [\"mouseleave\", \"focusout\"],\n listener: handleMouseLeave.bind(this, entry)\n }, {\n el: [\"trigger\"],\n type: [\"click\"],\n listener: handleTooltipClick.bind(this, entry)\n }];\n\n // Loop through listeners and apply to the appropriate elements.\n entry._eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n entry[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 entry._eventListeners = [{\n el: [\"trigger\"],\n type: [\"click\"],\n listener: handleClick.bind(this, entry)\n }];\n\n // Loop through listeners and apply to the appropriate elements.\n entry._eventListeners.forEach((evObj) => {\n evObj.el.forEach((el) => {\n evObj.type.forEach((type) => {\n entry[el].addEventListener(type, evObj.listener, false);\n });\n });\n });\n }\n }\n\n // Return the entry object.\n return entry;\n}\n","import { Collection } from \"@vrembem/core\";\n\nimport defaults from \"./defaults\";\nimport { handleKeydown } from \"./handlers\";\nimport { register, registerEventListeners } from \"./register\";\nimport { deregister, deregisterEventListeners } from \"./deregister\";\nimport { open } from \"./open\";\nimport { close } from \"./close\";\nimport { getPopoverElements } from \"./helpers\";\n\nexport default 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.collection.find((popover) => popover.state == \"opened\");\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 mount(options) {\n // Update settings with passed options.\n if (options) this.settings = { ...this.settings, ...options };\n\n // Get all the popovers.\n const popovers = document.querySelectorAll(this.settings.selectorPopover);\n\n // Register the collections array with popover instances.\n await this.registerCollection(popovers);\n\n // If eventListeners are enabled, mount event listeners.\n if (this.settings.eventListeners) {\n // Pass false to mountEventListeners() since registerCollection()\n // already adds event listeners to popovers.\n this.mountEventListeners(false);\n }\n\n return this;\n }\n\n async unmount() {\n // Clear stored trigger.\n this.trigger = null;\n\n // Remove all entries from the collection.\n await this.deregisterCollection();\n\n // If eventListeners are enabled, unmount event listeners.\n if (this.settings.eventListeners) {\n // Pass false to unmountEventListeners() since deregisterCollection()\n // already removes event listeners from popovers.\n this.unmountEventListeners(false);\n }\n\n return this;\n }\n\n mountEventListeners(processCollection = true) {\n if (processCollection) {\n // Loop through collection and setup event listeners.\n this.collection.forEach((popover) => {\n registerEventListeners.call(this, popover);\n });\n }\n\n // Add keydown global event listener.\n document.addEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n unmountEventListeners(processCollection = true) {\n if (processCollection) {\n // Loop through collection and remove event listeners.\n this.collection.forEach((popover) => {\n deregisterEventListeners(popover);\n });\n }\n\n // Remove keydown global event listener.\n document.removeEventListener(\"keydown\", this.#handleKeydown, false);\n }\n\n register(query, config = {}) {\n const els = getPopoverElements.call(this, query);\n if (els.error) return Promise.reject(els.error);\n return register.call(this, els.popover, els.trigger, config);\n }\n\n deregister(query) {\n let obj = this.get((query.id || query));\n return (obj) ?\n deregister.call(this, obj) :\n Promise.reject(new Error(`Failed to deregister; popover does not exist in collection with ID of: \"${query.id || query}\".`));\n }\n\n open(id) {\n return open.call(this, id);\n }\n\n close(id) {\n return close.call(this, id);\n }\n}\n"],"names":["Breakpoint","value","handler","__privateAdd","_handler","__privateSet","__privateGet","func","Collection","options","_entryPrototype","root","obj","getConfig","getCustomProps","key","camel","toCamel","kebab","toKebab","ref","method","teleport","query","overrides","el","getElement","entry","item","index","prop","items","FocusTrap","selectorFocus","_focusable","_handleFocusTrap","_handleFocusLock","handleFocusTrap","handleFocusLock","focusable","initFocus","initScrollTop","selector","focusableSelectors","notInert","notNegTabIndex","notDisabled","event","getPrefix","cssVar","property","settings","prefixValue","cssValue","dataConfig","json","module","array","styles","result","i","prefix","localStore","enable","local","store","what","where","how","isComment","isElement","returnRef","themeStore","callbacks","profile","api","name","theme","word","transition","from","to","duration","resolve","ms","setOverflowHidden","state","setInert","updateGlobalState","selectorInert","selectorOverflow","defaults$2","applyInitialState","applyInlineState","getBreakpoint","drawer","bp","getDrawer","updateFocusState","handleClick","trigger","parent","handleKeydown","deregister","close","open","transitionOverride","focus","toggle","switchMode","toInline","toModal","register","config","breakpoint","_mode","_state","bpMode","dialog","Drawer","defaults","_handleClick","_handleKeydown","drawers","id","defaults$1","getModal","closeAll","exclude","modal","replace","resultOpened","resultClosed","stack","stackArray","Modal","modals","applyPositionStyle","x","y","getDelay","popover","number","getPadding","padding","getMiddlewareOptions","getPopover","getPopoverID","getPopoverElements","closeCheck","isHovered","isFocused","handleDocumentClick","handleTooltipClick","handleMouseEnter","isExpanded","delay","handleMouseLeave","_f","deregisterEventListeners","evObj","type","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","_isHovered","_customPropKeys","registerEventListeners","Popover","popovers","processCollection","els"],"mappings":"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","x_google_ignoreList":[52,53,54,55]}
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/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 = Object.keys(entry.context.settings);\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","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 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 toCamel,\n toKebab,\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) {\n // Store our key in both camel and kebab naming conventions.\n const camel = toCamel(key);\n const kebab = toKebab(key);\n\n // Check the data config object.\n if (\"dataConfig\" in this && camel in this.dataConfig) {\n return this.dataConfig[camel];\n }\n\n // Check the custom properties object.\n if (\"customProps\" in this && kebab in this.customProps) {\n return this.customProps[kebab];\n }\n\n // Check the entry settings.\n if (\"settings\" in this && camel in this.settings) {\n return this.settings[camel];\n }\n\n // Check the context settings.\n if (\"settings\" in this.context && camel in this.context.settings) {\n return this.context.settings[camel];\n }\n\n // Throw error if setting does not exist.\n throw(new Error(`${this.context.module} setting does not exist: ${key}`));\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 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: \"drawer-transition-duration\"\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 customEventPrefix: \"modal:\",\n setTabindex: true,\n teleport: null,\n teleportMethod: \"append\",\n transition: true,\n transitionDuration: \"modal-transition-duration\"\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 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","lifecycleHook","name","args","transition","init","interim","final","duration","resolve","setOverflowHidden","state","selector","setInert","setGlobalState","selectorInert","selectorOverflow","Breakpoint","handler","__privateAdd","_handler","__privateSet","__privateGet","func","Collection","obj","config","CollectionEntry","id","reReg","prop","els","context","camel","kebab","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","type","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":[51,52,53,54]}