import { $TRACK, DEV, Dynamic, For, Index, Match, Portal, Show, Switch, addEventListener, batch, className, clearDelegatedEvents, convertRemToPixels, createComponent, createComputed, createContext, createEffect, createMemo, createRenderEffect, createRoot, createSignal, createUniqueId, delegateEvents, deleteNestedDataByPath, displayValue, getMutationStatusColor, getOwner, getQueryStatusColor, getQueryStatusColorByLabel, getQueryStatusLabel, getSidedProp, insert, isServer, memo, mergeProps, mutationSortFns, on, onCleanup, onMount, serialize, setAttribute, sortFns, splitProps, spread, stringify, template, untrack, updateNestedDataByPath, use, useContext, useTransition } from "./chunk-Y4ZU6YGQ.js"; import { __publicField } from "./chunk-4B2QHNJT.js"; // ../../node_modules/@tanstack/query-devtools/build/chunk/YTSEMULZ.js var isClient = !isServer; var isDev = isClient && !!DEV; var noop = () => void 0; var isNonNullable = (i2) => i2 != null; var filterNonNullable = (arr) => arr.filter(isNonNullable); function chain(callbacks) { return (...args) => { for (const callback of callbacks) callback && callback(...args); }; } var access = (v) => typeof v === "function" && !v.length ? v() : v; var asArray = (value) => Array.isArray(value) ? value : value ? [value] : []; function accessWith(valueOrFn, ...args) { return typeof valueOrFn === "function" ? valueOrFn(...args) : valueOrFn; } var tryOnCleanup = isDev ? (fn) => getOwner() ? onCleanup(fn) : fn : onCleanup; function handleDiffArray(current, prev, handleAdded, handleRemoved) { const currLength = current.length; const prevLength = prev.length; let i2 = 0; if (!prevLength) { for (; i2 < currLength; i2++) handleAdded(current[i2]); return; } if (!currLength) { for (; i2 < prevLength; i2++) handleRemoved(prev[i2]); return; } for (; i2 < prevLength; i2++) { if (prev[i2] !== current[i2]) break; } let prevEl; let currEl; prev = prev.slice(i2); current = current.slice(i2); for (prevEl of prev) { if (!current.includes(prevEl)) handleRemoved(prevEl); } for (currEl of current) { if (!prev.includes(currEl)) handleAdded(currEl); } } function createStorage(props) { const [error, setError] = createSignal(); const handleError = (props == null ? void 0 : props.throw) ? (err, fallback) => { setError(err instanceof Error ? err : new Error(fallback)); throw err; } : (err, fallback) => { setError(err instanceof Error ? err : new Error(fallback)); }; const apis = (props == null ? void 0 : props.api) ? Array.isArray(props.api) ? props.api : [props.api] : [globalThis.localStorage].filter(Boolean); const prefix = (props == null ? void 0 : props.prefix) ? `${props.prefix}.` : ""; const signals = /* @__PURE__ */ new Map(); const store = new Proxy( {}, { get(_, key) { let node = signals.get(key); if (!node) { node = createSignal(void 0, { equals: false }); signals.set(key, node); } node[0](); const value = apis.reduce( (result, api) => { if (result !== null || !api) { return result; } try { return api.getItem(`${prefix}${key}`); } catch (err) { handleError(err, `Error reading ${prefix}${key} from ${api["name"]}`); return null; } }, null ); if (value !== null && (props == null ? void 0 : props.deserializer)) { return props.deserializer(value, key, props.options); } return value; } } ); const setter = (key, value, options) => { const filteredValue = (props == null ? void 0 : props.serializer) ? props.serializer(value, key, options ?? props.options) : value; const apiKey = `${prefix}${key}`; apis.forEach((api) => { try { api.getItem(apiKey) !== filteredValue && api.setItem(apiKey, filteredValue); } catch (err) { handleError(err, `Error setting ${prefix}${key} to ${filteredValue} in ${api.name}`); } }); const node = signals.get(key); node && node[1](); }; const remove = (key) => apis.forEach((api) => { try { api.removeItem(`${prefix}${key}`); } catch (err) { handleError(err, `Error removing ${prefix}${key} from ${api.name}`); } }); const clear = () => apis.forEach((api) => { try { api.clear(); } catch (err) { handleError(err, `Error clearing ${api.name}`); } }); const toJSON = () => { const result = {}; const addValue = (key, value) => { if (!result.hasOwnProperty(key)) { const filteredValue = value && (props == null ? void 0 : props.deserializer) ? props.deserializer(value, key, props.options) : value; if (filteredValue) { result[key] = filteredValue; } } }; apis.forEach((api) => { if (typeof api.getAll === "function") { let values; try { values = api.getAll(); } catch (err) { handleError(err, `Error getting all values from in ${api.name}`); } for (const key of values) { addValue(key, values[key]); } } else { let index = 0, key; try { while (key = api.key(index++)) { if (!result.hasOwnProperty(key)) { addValue(key, api.getItem(key)); } } } catch (err) { handleError(err, `Error getting all values from ${api.name}`); } } }); return result; }; (props == null ? void 0 : props.sync) !== false && onMount(() => { const listener = (ev) => { var _a; let changed = false; apis.forEach((api) => { try { if (api !== ev.storageArea && ev.key && ev.newValue !== api.getItem(ev.key)) { ev.newValue ? api.setItem(ev.key, ev.newValue) : api.removeItem(ev.key); changed = true; } } catch (err) { handleError( err, `Error synching api ${api.name} from storage event (${ev.key}=${ev.newValue})` ); } }); changed && ev.key && ((_a = signals.get(ev.key)) == null ? void 0 : _a[1]()); }; if ("addEventListener" in globalThis) { globalThis.addEventListener("storage", listener); onCleanup(() => globalThis.removeEventListener("storage", listener)); } else { apis.forEach((api) => { var _a; return (_a = api.addEventListener) == null ? void 0 : _a.call(api, "storage", listener); }); onCleanup(() => apis.forEach((api) => { var _a; return (_a = api.removeEventListener) == null ? void 0 : _a.call(api, "storage", listener); })); } }); return [ store, setter, { clear, error, remove, toJSON } ]; } var createLocalStorage = createStorage; var addClearMethod = (storage) => { if (typeof storage.clear === "function") { return storage; } storage.clear = () => { let key; while (key = storage.key(0)) { storage.removeItem(key); } }; return storage; }; var serializeCookieOptions = (options) => { if (!options) { return ""; } let memo2 = ""; for (const key in options) { if (!options.hasOwnProperty(key)) { continue; } const value = options[key]; memo2 += value instanceof Date ? `; ${key}=${value.toUTCString()}` : typeof value === "boolean" ? `; ${key}` : `; ${key}=${value}`; } return memo2; }; var cookieStorage = addClearMethod({ _cookies: [globalThis.document, "cookie"], getItem: (key) => { var _a; return ((_a = cookieStorage._cookies[0][cookieStorage._cookies[1]].match("(^|;)\\s*" + key + "\\s*=\\s*([^;]+)")) == null ? void 0 : _a.pop()) ?? null; }, setItem: (key, value, options) => { const oldValue = cookieStorage.getItem(key); cookieStorage._cookies[0][cookieStorage._cookies[1]] = `${key}=${value}${serializeCookieOptions( options )}`; const storageEvent = Object.assign(new Event("storage"), { key, oldValue, newValue: value, url: globalThis.document.URL, storageArea: cookieStorage }); window.dispatchEvent(storageEvent); }, removeItem: (key) => { cookieStorage._cookies[0][cookieStorage._cookies[1]] = `${key}=deleted${serializeCookieOptions({ expires: /* @__PURE__ */ new Date(0) })}`; }, key: (index) => { let key = null; let count = 0; cookieStorage._cookies[0][cookieStorage._cookies[1]].replace( /(?:^|;)\s*(.+?)\s*=\s*[^;]+/g, (_, found) => { if (!key && found && count++ === index) { key = found; } return ""; } ); return key; }, get length() { let length = 0; cookieStorage._cookies[0][cookieStorage._cookies[1]].replace( /(?:^|;)\s*.+?\s*=\s*[^;]+/g, (found) => { length += found ? 1 : 0; return ""; } ); return length; } }); var firstBreakpoint = 1024; var secondBreakpoint = 796; var thirdBreakpoint = 700; var BUTTON_POSITION = "bottom-right"; var POSITION = "bottom"; var THEME_PREFERENCE = "system"; var INITIAL_IS_OPEN = false; var DEFAULT_HEIGHT = 500; var PIP_DEFAULT_HEIGHT = 500; var DEFAULT_WIDTH = 500; var DEFAULT_SORT_FN_NAME = Object.keys(sortFns)[0]; var DEFAULT_SORT_ORDER = 1; var DEFAULT_MUTATION_SORT_FN_NAME = Object.keys(mutationSortFns)[0]; var QueryDevtoolsContext = createContext({ client: void 0, onlineManager: void 0, queryFlavor: "", version: "", shadowDOMTarget: void 0 }); function useQueryDevtoolsContext() { return useContext(QueryDevtoolsContext); } var PiPContext = createContext(void 0); var PiPProvider = (props) => { const [pipWindow, setPipWindow] = createSignal(null); const closePipWindow = () => { const w = pipWindow(); if (w != null) { w.close(); setPipWindow(null); } }; const requestPipWindow = (width, height) => { if (pipWindow() != null) { return; } const pip = window.open("", "TSQD-Devtools-Panel", `width=${width},height=${height},popup`); if (!pip) { throw new Error("Failed to open popup. Please allow popups for this site to view the devtools in picture-in-picture mode."); } pip.document.head.innerHTML = ""; pip.document.body.innerHTML = ""; clearDelegatedEvents(pip.document); pip.document.title = "TanStack Query Devtools"; pip.document.body.style.margin = "0"; pip.addEventListener("pagehide", () => { props.setLocalStore("pip_open", "false"); setPipWindow(null); }); [...(useQueryDevtoolsContext().shadowDOMTarget || document).styleSheets].forEach((styleSheet) => { try { const cssRules = [...styleSheet.cssRules].map((rule) => rule.cssText).join(""); const style = document.createElement("style"); const style_node = styleSheet.ownerNode; let style_id = ""; if (style_node && "id" in style_node) { style_id = style_node.id; } if (style_id) { style.setAttribute("id", style_id); } style.textContent = cssRules; pip.document.head.appendChild(style); } catch (e2) { const link = document.createElement("link"); if (styleSheet.href == null) { return; } link.rel = "stylesheet"; link.type = styleSheet.type; link.media = styleSheet.media.toString(); link.href = styleSheet.href; pip.document.head.appendChild(link); } }); delegateEvents(["focusin", "focusout", "pointermove", "keydown", "pointerdown", "pointerup", "click", "mousedown", "input"], pip.document); props.setLocalStore("pip_open", "true"); setPipWindow(pip); }; createEffect(() => { const pip_open = props.localStore.pip_open ?? "false"; if (pip_open === "true" && !props.disabled) { requestPipWindow(Number(window.innerWidth), Number(props.localStore.height || PIP_DEFAULT_HEIGHT)); } }); createEffect(() => { const gooberStyles = (useQueryDevtoolsContext().shadowDOMTarget || document).querySelector("#_goober"); const w = pipWindow(); if (gooberStyles && w) { const observer = new MutationObserver(() => { const pip_style = (useQueryDevtoolsContext().shadowDOMTarget || w.document).querySelector("#_goober"); if (pip_style) { pip_style.textContent = gooberStyles.textContent; } }); observer.observe(gooberStyles, { childList: true, // observe direct children subtree: true, // and lower descendants too characterDataOldValue: true // pass old data to callback }); onCleanup(() => { observer.disconnect(); }); } }); const value = createMemo(() => ({ pipWindow: pipWindow(), requestPipWindow, closePipWindow, disabled: props.disabled ?? false })); return createComponent(PiPContext.Provider, { value, get children() { return props.children; } }); }; var usePiPWindow = () => { const context = createMemo(() => { const ctx = useContext(PiPContext); if (!ctx) { throw new Error("usePiPWindow must be used within a PiPProvider"); } return ctx(); }); return context; }; var ThemeContext = createContext( () => "dark" ); function useTheme() { return useContext(ThemeContext); } var characterMap = { À: "A", Á: "A", Â: "A", Ã: "A", Ä: "A", Å: "A", Ấ: "A", Ắ: "A", Ẳ: "A", Ẵ: "A", Ặ: "A", Æ: "AE", Ầ: "A", Ằ: "A", Ȃ: "A", Ç: "C", Ḉ: "C", È: "E", É: "E", Ê: "E", Ë: "E", Ế: "E", Ḗ: "E", Ề: "E", Ḕ: "E", Ḝ: "E", Ȇ: "E", Ì: "I", Í: "I", Î: "I", Ï: "I", Ḯ: "I", Ȋ: "I", Ð: "D", Ñ: "N", Ò: "O", Ó: "O", Ô: "O", Õ: "O", Ö: "O", Ø: "O", Ố: "O", Ṍ: "O", Ṓ: "O", Ȏ: "O", Ù: "U", Ú: "U", Û: "U", Ü: "U", Ý: "Y", à: "a", á: "a", â: "a", ã: "a", ä: "a", å: "a", ấ: "a", ắ: "a", ẳ: "a", ẵ: "a", ặ: "a", æ: "ae", ầ: "a", ằ: "a", ȃ: "a", ç: "c", ḉ: "c", è: "e", é: "e", ê: "e", ë: "e", ế: "e", ḗ: "e", ề: "e", ḕ: "e", ḝ: "e", ȇ: "e", ì: "i", í: "i", î: "i", ï: "i", ḯ: "i", ȋ: "i", ð: "d", ñ: "n", ò: "o", ó: "o", ô: "o", õ: "o", ö: "o", ø: "o", ố: "o", ṍ: "o", ṓ: "o", ȏ: "o", ù: "u", ú: "u", û: "u", ü: "u", ý: "y", ÿ: "y", Ā: "A", ā: "a", Ă: "A", ă: "a", Ą: "A", ą: "a", Ć: "C", ć: "c", Ĉ: "C", ĉ: "c", Ċ: "C", ċ: "c", Č: "C", č: "c", C̆: "C", c̆: "c", Ď: "D", ď: "d", Đ: "D", đ: "d", Ē: "E", ē: "e", Ĕ: "E", ĕ: "e", Ė: "E", ė: "e", Ę: "E", ę: "e", Ě: "E", ě: "e", Ĝ: "G", Ǵ: "G", ĝ: "g", ǵ: "g", Ğ: "G", ğ: "g", Ġ: "G", ġ: "g", Ģ: "G", ģ: "g", Ĥ: "H", ĥ: "h", Ħ: "H", ħ: "h", Ḫ: "H", ḫ: "h", Ĩ: "I", ĩ: "i", Ī: "I", ī: "i", Ĭ: "I", ĭ: "i", Į: "I", į: "i", İ: "I", ı: "i", IJ: "IJ", ij: "ij", Ĵ: "J", ĵ: "j", Ķ: "K", ķ: "k", Ḱ: "K", ḱ: "k", K̆: "K", k̆: "k", Ĺ: "L", ĺ: "l", Ļ: "L", ļ: "l", Ľ: "L", ľ: "l", Ŀ: "L", ŀ: "l", Ł: "l", ł: "l", Ḿ: "M", ḿ: "m", M̆: "M", m̆: "m", Ń: "N", ń: "n", Ņ: "N", ņ: "n", Ň: "N", ň: "n", ʼn: "n", N̆: "N", n̆: "n", Ō: "O", ō: "o", Ŏ: "O", ŏ: "o", Ő: "O", ő: "o", Œ: "OE", œ: "oe", P̆: "P", p̆: "p", Ŕ: "R", ŕ: "r", Ŗ: "R", ŗ: "r", Ř: "R", ř: "r", R̆: "R", r̆: "r", Ȓ: "R", ȓ: "r", Ś: "S", ś: "s", Ŝ: "S", ŝ: "s", Ş: "S", Ș: "S", ș: "s", ş: "s", Š: "S", š: "s", Ţ: "T", ţ: "t", ț: "t", Ț: "T", Ť: "T", ť: "t", Ŧ: "T", ŧ: "t", T̆: "T", t̆: "t", Ũ: "U", ũ: "u", Ū: "U", ū: "u", Ŭ: "U", ŭ: "u", Ů: "U", ů: "u", Ű: "U", ű: "u", Ų: "U", ų: "u", Ȗ: "U", ȗ: "u", V̆: "V", v̆: "v", Ŵ: "W", ŵ: "w", Ẃ: "W", ẃ: "w", X̆: "X", x̆: "x", Ŷ: "Y", ŷ: "y", Ÿ: "Y", Y̆: "Y", y̆: "y", Ź: "Z", ź: "z", Ż: "Z", ż: "z", Ž: "Z", ž: "z", ſ: "s", ƒ: "f", Ơ: "O", ơ: "o", Ư: "U", ư: "u", Ǎ: "A", ǎ: "a", Ǐ: "I", ǐ: "i", Ǒ: "O", ǒ: "o", Ǔ: "U", ǔ: "u", Ǖ: "U", ǖ: "u", Ǘ: "U", ǘ: "u", Ǚ: "U", ǚ: "u", Ǜ: "U", ǜ: "u", Ứ: "U", ứ: "u", Ṹ: "U", ṹ: "u", Ǻ: "A", ǻ: "a", Ǽ: "AE", ǽ: "ae", Ǿ: "O", ǿ: "o", Þ: "TH", þ: "th", Ṕ: "P", ṕ: "p", Ṥ: "S", ṥ: "s", X́: "X", x́: "x", Ѓ: "Г", ѓ: "г", Ќ: "К", ќ: "к", A̋: "A", a̋: "a", E̋: "E", e̋: "e", I̋: "I", i̋: "i", Ǹ: "N", ǹ: "n", Ồ: "O", ồ: "o", Ṑ: "O", ṑ: "o", Ừ: "U", ừ: "u", Ẁ: "W", ẁ: "w", Ỳ: "Y", ỳ: "y", Ȁ: "A", ȁ: "a", Ȅ: "E", ȅ: "e", Ȉ: "I", ȉ: "i", Ȍ: "O", ȍ: "o", Ȑ: "R", ȑ: "r", Ȕ: "U", ȕ: "u", B̌: "B", b̌: "b", Č̣: "C", č̣: "c", Ê̌: "E", ê̌: "e", F̌: "F", f̌: "f", Ǧ: "G", ǧ: "g", Ȟ: "H", ȟ: "h", J̌: "J", ǰ: "j", Ǩ: "K", ǩ: "k", M̌: "M", m̌: "m", P̌: "P", p̌: "p", Q̌: "Q", q̌: "q", Ř̩: "R", ř̩: "r", Ṧ: "S", ṧ: "s", V̌: "V", v̌: "v", W̌: "W", w̌: "w", X̌: "X", x̌: "x", Y̌: "Y", y̌: "y", A̧: "A", a̧: "a", B̧: "B", b̧: "b", Ḑ: "D", ḑ: "d", Ȩ: "E", ȩ: "e", Ɛ̧: "E", ɛ̧: "e", Ḩ: "H", ḩ: "h", I̧: "I", i̧: "i", Ɨ̧: "I", ɨ̧: "i", M̧: "M", m̧: "m", O̧: "O", o̧: "o", Q̧: "Q", q̧: "q", U̧: "U", u̧: "u", X̧: "X", x̧: "x", Z̧: "Z", z̧: "z" }; var chars = Object.keys(characterMap).join("|"); var allAccents = new RegExp(chars, "g"); function removeAccents(str) { return str.replace(allAccents, (match) => { return characterMap[match]; }); } var rankings = { CASE_SENSITIVE_EQUAL: 7, EQUAL: 6, STARTS_WITH: 5, WORD_STARTS_WITH: 4, CONTAINS: 3, ACRONYM: 2, MATCHES: 1, NO_MATCH: 0 }; function rankItem(item, value, options) { var _options$threshold; options = options || {}; options.threshold = (_options$threshold = options.threshold) != null ? _options$threshold : rankings.MATCHES; if (!options.accessors) { const rank = getMatchRanking(item, value, options); return { // ends up being duplicate of 'item' in matches but consistent rankedValue: item, rank, accessorIndex: -1, accessorThreshold: options.threshold, passed: rank >= options.threshold }; } const valuesToRank = getAllValuesToRank(item, options.accessors); const rankingInfo = { rankedValue: item, rank: rankings.NO_MATCH, accessorIndex: -1, accessorThreshold: options.threshold, passed: false }; for (let i2 = 0; i2 < valuesToRank.length; i2++) { const rankValue = valuesToRank[i2]; let newRank = getMatchRanking(rankValue.itemValue, value, options); const { minRanking, maxRanking, threshold = options.threshold } = rankValue.attributes; if (newRank < minRanking && newRank >= rankings.MATCHES) { newRank = minRanking; } else if (newRank > maxRanking) { newRank = maxRanking; } newRank = Math.min(newRank, maxRanking); if (newRank >= threshold && newRank > rankingInfo.rank) { rankingInfo.rank = newRank; rankingInfo.passed = true; rankingInfo.accessorIndex = i2; rankingInfo.accessorThreshold = threshold; rankingInfo.rankedValue = rankValue.itemValue; } } return rankingInfo; } function getMatchRanking(testString, stringToRank, options) { testString = prepareValueForComparison(testString, options); stringToRank = prepareValueForComparison(stringToRank, options); if (stringToRank.length > testString.length) { return rankings.NO_MATCH; } if (testString === stringToRank) { return rankings.CASE_SENSITIVE_EQUAL; } testString = testString.toLowerCase(); stringToRank = stringToRank.toLowerCase(); if (testString === stringToRank) { return rankings.EQUAL; } if (testString.startsWith(stringToRank)) { return rankings.STARTS_WITH; } if (testString.includes(` ${stringToRank}`)) { return rankings.WORD_STARTS_WITH; } if (testString.includes(stringToRank)) { return rankings.CONTAINS; } else if (stringToRank.length === 1) { return rankings.NO_MATCH; } if (getAcronym(testString).includes(stringToRank)) { return rankings.ACRONYM; } return getClosenessRanking(testString, stringToRank); } function getAcronym(string) { let acronym = ""; const wordsInString = string.split(" "); wordsInString.forEach((wordInString) => { const splitByHyphenWords = wordInString.split("-"); splitByHyphenWords.forEach((splitByHyphenWord) => { acronym += splitByHyphenWord.substr(0, 1); }); }); return acronym; } function getClosenessRanking(testString, stringToRank) { let matchingInOrderCharCount = 0; let charNumber = 0; function findMatchingCharacter(matchChar, string, index) { for (let j = index, J = string.length; j < J; j++) { const stringChar = string[j]; if (stringChar === matchChar) { matchingInOrderCharCount += 1; return j + 1; } } return -1; } function getRanking(spread3) { const spreadPercentage = 1 / spread3; const inOrderPercentage = matchingInOrderCharCount / stringToRank.length; const ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage; return ranking; } const firstIndex = findMatchingCharacter(stringToRank[0], testString, 0); if (firstIndex < 0) { return rankings.NO_MATCH; } charNumber = firstIndex; for (let i2 = 1, I = stringToRank.length; i2 < I; i2++) { const matchChar = stringToRank[i2]; charNumber = findMatchingCharacter(matchChar, testString, charNumber); const found = charNumber > -1; if (!found) { return rankings.NO_MATCH; } } const spread2 = charNumber - firstIndex; return getRanking(spread2); } function prepareValueForComparison(value, _ref) { let { keepDiacritics } = _ref; value = `${value}`; if (!keepDiacritics) { value = removeAccents(value); } return value; } function getItemValues(item, accessor) { let accessorFn = accessor; if (typeof accessor === "object") { accessorFn = accessor.accessor; } const value = accessorFn(item); if (value == null) { return []; } if (Array.isArray(value)) { return value; } return [String(value)]; } function getAllValuesToRank(item, accessors) { const allValues = []; for (let j = 0, J = accessors.length; j < J; j++) { const accessor = accessors[j]; const attributes = getAccessorAttributes(accessor); const itemValues = getItemValues(item, accessor); for (let i2 = 0, I = itemValues.length; i2 < I; i2++) { allValues.push({ itemValue: itemValues[i2], attributes }); } } return allValues; } var defaultKeyAttributes = { maxRanking: Infinity, minRanking: -Infinity }; function getAccessorAttributes(accessor) { if (typeof accessor === "function") { return defaultKeyAttributes; } return { ...defaultKeyAttributes, ...accessor }; } var e = { data: "" }; var t = (t2) => "object" == typeof window ? ((t2 ? t2.querySelector("#_goober") : window._goober) || Object.assign((t2 || document.head).appendChild(document.createElement("style")), { innerHTML: " ", id: "_goober" })).firstChild : t2 || e; var l = /(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g; var a = /\/\*[^]*?\*\/| +/g; var n = /\n+/g; var o = (e2, t2) => { let r2 = "", l2 = "", a2 = ""; for (let n2 in e2) { let c2 = e2[n2]; "@" == n2[0] ? "i" == n2[1] ? r2 = n2 + " " + c2 + ";" : l2 += "f" == n2[1] ? o(c2, n2) : n2 + "{" + o(c2, "k" == n2[1] ? "" : t2) + "}" : "object" == typeof c2 ? l2 += o(c2, t2 ? t2.replace(/([^,])+/g, (e3) => n2.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g, (t3) => /&/.test(t3) ? t3.replace(/&/g, e3) : e3 ? e3 + " " + t3 : t3)) : n2) : null != c2 && (n2 = /^--/.test(n2) ? n2 : n2.replace(/[A-Z]/g, "-$&").toLowerCase(), a2 += o.p ? o.p(n2, c2) : n2 + ":" + c2 + ";"); } return r2 + (t2 && a2 ? t2 + "{" + a2 + "}" : a2) + l2; }; var c = {}; var s = (e2) => { if ("object" == typeof e2) { let t2 = ""; for (let r2 in e2) t2 += r2 + s(e2[r2]); return t2; } return e2; }; var i = (e2, t2, r2, i2, p2) => { let u2 = s(e2), d = c[u2] || (c[u2] = ((e3) => { let t3 = 0, r3 = 11; for (; t3 < e3.length; ) r3 = 101 * r3 + e3.charCodeAt(t3++) >>> 0; return "go" + r3; })(u2)); if (!c[d]) { let t3 = u2 !== e2 ? e2 : ((e3) => { let t4, r3, o2 = [{}]; for (; t4 = l.exec(e3.replace(a, "")); ) t4[4] ? o2.shift() : t4[3] ? (r3 = t4[3].replace(n, " ").trim(), o2.unshift(o2[0][r3] = o2[0][r3] || {})) : o2[0][t4[1]] = t4[2].replace(n, " ").trim(); return o2[0]; })(e2); c[d] = o(p2 ? { ["@keyframes " + d]: t3 } : t3, r2 ? "" : "." + d); } let f = r2 && c.g ? c.g : null; return r2 && (c.g = c[d]), ((e3, t3, r3, l2) => { l2 ? t3.data = t3.data.replace(l2, e3) : -1 === t3.data.indexOf(e3) && (t3.data = r3 ? e3 + t3.data : t3.data + e3); })(c[d], t2, i2, f), d; }; var p = (e2, t2, r2) => e2.reduce((e3, l2, a2) => { let n2 = t2[a2]; if (n2 && n2.call) { let e4 = n2(r2), t3 = e4 && e4.props && e4.props.className || /^go/.test(e4) && e4; n2 = t3 ? "." + t3 : e4 && "object" == typeof e4 ? e4.props ? "" : o(e4, "") : false === e4 ? "" : e4; } return e3 + l2 + (null == n2 ? "" : n2); }, ""); function u(e2) { let r2 = this || {}, l2 = e2.call ? e2(r2.p) : e2; return i(l2.unshift ? l2.raw ? p(l2, [].slice.call(arguments, 1), r2.p) : l2.reduce((e3, t2) => Object.assign(e3, t2 && t2.call ? t2(r2.p) : t2), {}) : l2, t(r2.target), r2.g, r2.o, r2.k); } u.bind({ g: 1 }); u.bind({ k: 1 }); function r(e2) { var t2, f, n2 = ""; if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; else if ("object" == typeof e2) if (Array.isArray(e2)) { var o2 = e2.length; for (t2 = 0; t2 < o2; t2++) e2[t2] && (f = r(e2[t2])) && (n2 && (n2 += " "), n2 += f); } else for (f in e2) e2[f] && (n2 && (n2 += " "), n2 += f); return n2; } function clsx() { for (var e2, t2, f = 0, n2 = "", o2 = arguments.length; f < o2; f++) (e2 = arguments[f]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); return n2; } function createListTransition(source, options) { const initSource = untrack(source); if (isServer) { const copy = initSource.slice(); return () => copy; } const { onChange } = options; let prevSet = new Set(options.appear ? void 0 : initSource); const exiting = /* @__PURE__ */ new WeakSet(); const [toRemove, setToRemove] = createSignal([], { equals: false }); const [isTransitionPending] = useTransition(); const finishRemoved = (els) => { setToRemove((p2) => (p2.push.apply(p2, els), p2)); for (const el of els) exiting.delete(el); }; const handleRemoved = (els, el, i2) => els.splice(i2, 0, el); return createMemo( (prev) => { const elsToRemove = toRemove(); const sourceList = source(); sourceList[$TRACK]; if (untrack(isTransitionPending)) { isTransitionPending(); return prev; } if (elsToRemove.length) { const next = prev.filter((e2) => !elsToRemove.includes(e2)); elsToRemove.length = 0; onChange({ list: next, added: [], removed: [], unchanged: next, finishRemoved }); return next; } return untrack(() => { const nextSet = new Set(sourceList); const next = sourceList.slice(); const added = []; const removed = []; const unchanged = []; for (const el of sourceList) { (prevSet.has(el) ? unchanged : added).push(el); } let nothingChanged = !added.length; for (let i2 = 0; i2 < prev.length; i2++) { const el = prev[i2]; if (!nextSet.has(el)) { if (!exiting.has(el)) { removed.push(el); exiting.add(el); } handleRemoved(next, el, i2); } if (nothingChanged && el !== next[i2]) nothingChanged = false; } if (!removed.length && nothingChanged) return prev; onChange({ list: next, added, removed, unchanged, finishRemoved }); prevSet = nextSet; return next; }); }, options.appear ? [] : initSource.slice() ); } function mergeRefs(...refs) { return chain(refs); } var defaultElementPredicate = isServer ? (item) => item != null && typeof item === "object" && "t" in item : (item) => item instanceof Element; function getResolvedElements(value, predicate) { if (predicate(value)) return value; if (typeof value === "function" && !value.length) return getResolvedElements(value(), predicate); if (Array.isArray(value)) { const results = []; for (const item of value) { const result = getResolvedElements(item, predicate); if (result) Array.isArray(result) ? results.push.apply(results, result) : results.push(result); } return results.length ? results : null; } return null; } function resolveElements(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) { const children2 = createMemo(fn); const memo2 = createMemo( () => getResolvedElements(children2(), isServer ? serverPredicate : predicate) ); memo2.toArray = () => { const value = memo2(); return Array.isArray(value) ? value : value ? [value] : []; }; return memo2; } function createClassnames(props) { return createMemo(() => { const name = props.name || "s"; return { enterActive: (props.enterActiveClass || name + "-enter-active").split(" "), enter: (props.enterClass || name + "-enter").split(" "), enterTo: (props.enterToClass || name + "-enter-to").split(" "), exitActive: (props.exitActiveClass || name + "-exit-active").split(" "), exit: (props.exitClass || name + "-exit").split(" "), exitTo: (props.exitToClass || name + "-exit-to").split(" "), move: (props.moveClass || name + "-move").split(" ") }; }); } function nextFrame(fn) { requestAnimationFrame(() => requestAnimationFrame(fn)); } function enterTransition(classes, events, el, done) { const { onBeforeEnter, onEnter, onAfterEnter } = events; onBeforeEnter == null ? void 0 : onBeforeEnter(el); el.classList.add(...classes.enter); el.classList.add(...classes.enterActive); queueMicrotask(() => { if (!el.parentNode) return done == null ? void 0 : done(); onEnter == null ? void 0 : onEnter(el, () => endTransition()); }); nextFrame(() => { el.classList.remove(...classes.enter); el.classList.add(...classes.enterTo); if (!onEnter || onEnter.length < 2) { el.addEventListener("transitionend", endTransition); el.addEventListener("animationend", endTransition); } }); function endTransition(e2) { if (!e2 || e2.target === el) { el.removeEventListener("transitionend", endTransition); el.removeEventListener("animationend", endTransition); el.classList.remove(...classes.enterActive); el.classList.remove(...classes.enterTo); onAfterEnter == null ? void 0 : onAfterEnter(el); } } } function exitTransition(classes, events, el, done) { const { onBeforeExit, onExit, onAfterExit } = events; if (!el.parentNode) return done == null ? void 0 : done(); onBeforeExit == null ? void 0 : onBeforeExit(el); el.classList.add(...classes.exit); el.classList.add(...classes.exitActive); onExit == null ? void 0 : onExit(el, () => endTransition()); nextFrame(() => { el.classList.remove(...classes.exit); el.classList.add(...classes.exitTo); if (!onExit || onExit.length < 2) { el.addEventListener("transitionend", endTransition); el.addEventListener("animationend", endTransition); } }); function endTransition(e2) { if (!e2 || e2.target === el) { done == null ? void 0 : done(); el.removeEventListener("transitionend", endTransition); el.removeEventListener("animationend", endTransition); el.classList.remove(...classes.exitActive); el.classList.remove(...classes.exitTo); onAfterExit == null ? void 0 : onAfterExit(el); } } } var TransitionGroup = (props) => { const classnames = createClassnames(props); return createListTransition(resolveElements(() => props.children).toArray, { appear: props.appear, onChange({ added, removed, finishRemoved, list }) { const classes = classnames(); for (const el of added) { enterTransition(classes, props, el); } const toMove = []; for (const el of list) { if (el.isConnected && (el instanceof HTMLElement || el instanceof SVGElement)) { toMove.push({ el, rect: el.getBoundingClientRect() }); } } queueMicrotask(() => { const moved = []; for (const { el, rect } of toMove) { if (el.isConnected) { const newRect = el.getBoundingClientRect(), dX = rect.left - newRect.left, dY = rect.top - newRect.top; if (dX || dY) { el.style.transform = `translate(${dX}px, ${dY}px)`; el.style.transitionDuration = "0s"; moved.push(el); } } } document.body.offsetHeight; for (const el of moved) { let endTransition2 = function(e2) { if (e2.target === el || /transform$/.test(e2.propertyName)) { el.removeEventListener("transitionend", endTransition2); el.classList.remove(...classes.move); } }; el.classList.add(...classes.move); el.style.transform = el.style.transitionDuration = ""; el.addEventListener("transitionend", endTransition2); } }); for (const el of removed) { exitTransition(classes, props, el, () => finishRemoved([el])); } } }); }; var FALLBACK = Symbol("fallback"); function dispose(list) { for (const o2 of list) o2.dispose(); } function keyArray(items, keyFn, mapFn, options = {}) { if (isServer) { const itemsRef = items(); let s2 = []; if (itemsRef && itemsRef.length) { for (let i2 = 0, len = itemsRef.length; i2 < len; i2++) s2.push( mapFn( () => itemsRef[i2], () => i2 ) ); } else if (options.fallback) s2 = [options.fallback()]; return () => s2; } const prev = /* @__PURE__ */ new Map(); onCleanup(() => dispose(prev.values())); return () => { const list = items() || []; list[$TRACK]; return untrack(() => { var _a, _b; if (!list.length) { dispose(prev.values()); prev.clear(); if (!options.fallback) return []; const fb2 = createRoot((dispose2) => { prev.set(FALLBACK, { dispose: dispose2 }); return options.fallback(); }); return [fb2]; } const result = new Array(list.length); const fb = prev.get(FALLBACK); if (!prev.size || fb) { fb == null ? void 0 : fb.dispose(); prev.delete(FALLBACK); for (let i2 = 0; i2 < list.length; i2++) { const item = list[i2]; const key = keyFn(item, i2); addNewItem(result, item, i2, key); } return result; } const prevKeys = new Set(prev.keys()); for (let i2 = 0; i2 < list.length; i2++) { const item = list[i2]; const key = keyFn(item, i2); prevKeys.delete(key); const lookup = prev.get(key); if (lookup) { result[i2] = lookup.mapped; (_a = lookup.setIndex) == null ? void 0 : _a.call(lookup, i2); lookup.setItem(() => item); } else addNewItem(result, item, i2, key); } for (const key of prevKeys) { (_b = prev.get(key)) == null ? void 0 : _b.dispose(); prev.delete(key); } return result; }); }; function addNewItem(list, item, i2, key) { createRoot((dispose2) => { const [getItem, setItem] = createSignal(item); const save = { setItem, dispose: dispose2 }; if (mapFn.length > 1) { const [index, setIndex] = createSignal(i2); save.setIndex = setIndex; save.mapped = mapFn(getItem, index); } else save.mapped = mapFn(getItem); prev.set(key, save); list[i2] = save.mapped; }); } } function Key(props) { const { by } = props; return createMemo( keyArray( () => props.each, typeof by === "function" ? by : (v) => v[by], props.children, "fallback" in props ? { fallback: () => props.fallback } : void 0 ) ); } function makeEventListener(target, type, handler, options) { target.addEventListener(type, handler, options); return tryOnCleanup(target.removeEventListener.bind(target, type, handler, options)); } function createEventListener(targets, type, handler, options) { if (isServer) return; const attachListeners = () => { asArray(access(targets)).forEach((el) => { if (el) asArray(access(type)).forEach((type2) => makeEventListener(el, type2, handler, options)); }); }; if (typeof targets === "function") createEffect(attachListeners); else createRenderEffect(attachListeners); } function makeResizeObserver(callback, options) { if (isServer) { return { observe: noop, unobserve: noop }; } const observer = new ResizeObserver(callback); onCleanup(observer.disconnect.bind(observer)); return { observe: (ref) => observer.observe(ref, options), unobserve: observer.unobserve.bind(observer) }; } function createResizeObserver(targets, onResize, options) { if (isServer) return; const previousMap = /* @__PURE__ */ new WeakMap(), { observe, unobserve } = makeResizeObserver((entries2) => { for (const entry of entries2) { const { contentRect, target } = entry, width = Math.round(contentRect.width), height = Math.round(contentRect.height), previous = previousMap.get(target); if (!previous || previous.width !== width || previous.height !== height) { onResize(contentRect, target, entry); previousMap.set(target, { width, height }); } } }, options); createEffect((prev) => { const refs = filterNonNullable(asArray(access(targets))); handleDiffArray(refs, prev, observe, unobserve); return refs; }, []); } var extractCSSregex = /((?:--)?(?:\w+-?)+)\s*:\s*([^;]*)/g; function stringStyleToObject(style) { const object = {}; let match; while (match = extractCSSregex.exec(style)) { object[match[1]] = match[2]; } return object; } function combineStyle(a2, b2) { if (typeof a2 === "string") { if (typeof b2 === "string") return `${a2};${b2}`; a2 = stringStyleToObject(a2); } else if (typeof b2 === "string") { b2 = stringStyleToObject(b2); } return { ...a2, ...b2 }; } function addItemToArray(array, item, index = -1) { if (!(index in array)) { return [...array, item]; } return [...array.slice(0, index), item, ...array.slice(index)]; } function removeItemFromArray(array, item) { const updatedArray = [...array]; const index = updatedArray.indexOf(item); if (index !== -1) { updatedArray.splice(index, 1); } return updatedArray; } function isNumber(value) { return typeof value === "number"; } function isString(value) { return Object.prototype.toString.call(value) === "[object String]"; } function isFunction(value) { return typeof value === "function"; } function createGenerateId(baseId) { return (suffix) => `${baseId()}-${suffix}`; } function contains(parent, child) { if (!parent) { return false; } return parent === child || parent.contains(child); } function getActiveElement(node, activeDescendant = false) { const { activeElement } = getDocument(node); if (!(activeElement == null ? void 0 : activeElement.nodeName)) { return null; } if (isFrame(activeElement) && activeElement.contentDocument) { return getActiveElement(activeElement.contentDocument.body, activeDescendant); } if (activeDescendant) { const id = activeElement.getAttribute("aria-activedescendant"); if (id) { const element = getDocument(activeElement).getElementById(id); if (element) { return element; } } } return activeElement; } function getWindow(node) { return getDocument(node).defaultView || window; } function getDocument(node) { return node ? node.ownerDocument || node : document; } function isFrame(element) { return element.tagName === "IFRAME"; } var EventKey = ((EventKey2) => { EventKey2["Escape"] = "Escape"; EventKey2["Enter"] = "Enter"; EventKey2["Tab"] = "Tab"; EventKey2["Space"] = " "; EventKey2["ArrowDown"] = "ArrowDown"; EventKey2["ArrowLeft"] = "ArrowLeft"; EventKey2["ArrowRight"] = "ArrowRight"; EventKey2["ArrowUp"] = "ArrowUp"; EventKey2["End"] = "End"; EventKey2["Home"] = "Home"; EventKey2["PageDown"] = "PageDown"; EventKey2["PageUp"] = "PageUp"; return EventKey2; })(EventKey || {}); function testPlatform(re) { var _a; return typeof window !== "undefined" && window.navigator != null ? ( // @ts-ignore re.test(((_a = window.navigator["userAgentData"]) == null ? void 0 : _a.platform) || window.navigator.platform) ) : false; } function isMac() { return testPlatform(/^Mac/i); } function isIPhone() { return testPlatform(/^iPhone/i); } function isIPad() { return testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support. isMac() && navigator.maxTouchPoints > 1; } function isIOS() { return isIPhone() || isIPad(); } function isAppleDevice() { return isMac() || isIOS(); } function callHandler(event, handler) { if (handler) { if (isFunction(handler)) { handler(event); } else { handler[0](handler[1], event); } } return event == null ? void 0 : event.defaultPrevented; } function composeEventHandlers(handlers) { return (event) => { for (const handler of handlers) { callHandler(event, handler); } }; } function isCtrlKey(e2) { if (isMac()) { return e2.metaKey && !e2.ctrlKey; } return e2.ctrlKey && !e2.metaKey; } function focusWithoutScrolling(element) { if (!element) { return; } if (supportsPreventScroll()) { element.focus({ preventScroll: true }); } else { const scrollableElements = getScrollableElements(element); element.focus(); restoreScrollPosition(scrollableElements); } } var supportsPreventScrollCached = null; function supportsPreventScroll() { if (supportsPreventScrollCached == null) { supportsPreventScrollCached = false; try { const focusElem = document.createElement("div"); focusElem.focus({ get preventScroll() { supportsPreventScrollCached = true; return true; } }); } catch (e2) { } } return supportsPreventScrollCached; } function getScrollableElements(element) { let parent = element.parentNode; const scrollableElements = []; const rootScrollingElement = document.scrollingElement || document.documentElement; while (parent instanceof HTMLElement && parent !== rootScrollingElement) { if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) { scrollableElements.push({ element: parent, scrollTop: parent.scrollTop, scrollLeft: parent.scrollLeft }); } parent = parent.parentNode; } if (rootScrollingElement instanceof HTMLElement) { scrollableElements.push({ element: rootScrollingElement, scrollTop: rootScrollingElement.scrollTop, scrollLeft: rootScrollingElement.scrollLeft }); } return scrollableElements; } function restoreScrollPosition(scrollableElements) { for (const { element, scrollTop, scrollLeft } of scrollableElements) { element.scrollTop = scrollTop; element.scrollLeft = scrollLeft; } } var focusableElements = [ "input:not([type='hidden']):not([disabled])", "select:not([disabled])", "textarea:not([disabled])", "button:not([disabled])", "a[href]", "area[href]", "[tabindex]", "iframe", "object", "embed", "audio[controls]", "video[controls]", "[contenteditable]:not([contenteditable='false'])" ]; var tabbableElements = [...focusableElements, '[tabindex]:not([tabindex="-1"]):not([disabled])']; var FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(":not([hidden]),") + ",[tabindex]:not([disabled]):not([hidden])"; var TABBABLE_ELEMENT_SELECTOR = tabbableElements.join( ':not([hidden]):not([tabindex="-1"]),' ); function getAllTabbableIn(container, includeContainer) { const elements = Array.from(container.querySelectorAll(FOCUSABLE_ELEMENT_SELECTOR)); const tabbableElements2 = elements.filter(isTabbable); if (includeContainer && isTabbable(container)) { tabbableElements2.unshift(container); } tabbableElements2.forEach((element, i2) => { if (isFrame(element) && element.contentDocument) { const frameBody = element.contentDocument.body; const allFrameTabbable = getAllTabbableIn(frameBody, false); tabbableElements2.splice(i2, 1, ...allFrameTabbable); } }); return tabbableElements2; } function isTabbable(element) { return isFocusable(element) && !hasNegativeTabIndex(element); } function isFocusable(element) { return element.matches(FOCUSABLE_ELEMENT_SELECTOR) && isElementVisible(element); } function hasNegativeTabIndex(element) { const tabIndex = parseInt(element.getAttribute("tabindex") || "0", 10); return tabIndex < 0; } function isElementVisible(element, childElement) { return element.nodeName !== "#comment" && isStyleVisible(element) && isAttributeVisible(element, childElement) && (!element.parentElement || isElementVisible(element.parentElement, element)); } function isStyleVisible(element) { if (!(element instanceof HTMLElement) && !(element instanceof SVGElement)) { return false; } const { display, visibility } = element.style; let isVisible = display !== "none" && visibility !== "hidden" && visibility !== "collapse"; if (isVisible) { if (!element.ownerDocument.defaultView) { return isVisible; } const { getComputedStyle: getComputedStyle3 } = element.ownerDocument.defaultView; const { display: computedDisplay, visibility: computedVisibility } = getComputedStyle3(element); isVisible = computedDisplay !== "none" && computedVisibility !== "hidden" && computedVisibility !== "collapse"; } return isVisible; } function isAttributeVisible(element, childElement) { return !element.hasAttribute("hidden") && (element.nodeName === "DETAILS" && childElement && childElement.nodeName !== "SUMMARY" ? element.hasAttribute("open") : true); } function getFocusableTreeWalker(root, opts, scope) { const selector = (opts == null ? void 0 : opts.tabbable) ? TABBABLE_ELEMENT_SELECTOR : FOCUSABLE_ELEMENT_SELECTOR; const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, { acceptNode(node) { var _a; if ((_a = opts == null ? void 0 : opts.from) == null ? void 0 : _a.contains(node)) { return NodeFilter.FILTER_REJECT; } if (node.matches(selector) && isElementVisible(node) && true && (!(opts == null ? void 0 : opts.accept) || opts.accept(node))) { return NodeFilter.FILTER_ACCEPT; } return NodeFilter.FILTER_SKIP; } }); if (opts == null ? void 0 : opts.from) { walker.currentNode = opts.from; } return walker; } function getScrollParent(node) { while (node && !isScrollable(node)) { node = node.parentElement; } return node || document.scrollingElement || document.documentElement; } function isScrollable(node) { const style = window.getComputedStyle(node); return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY); } function noop3() { return; } function isPointInPolygon(point, polygon) { const [x, y] = point; let inside = false; const length = polygon.length; for (let l2 = length, i2 = 0, j = l2 - 1; i2 < l2; j = i2++) { const [xi, yi] = polygon[i2]; const [xj, yj] = polygon[j]; const [, vy] = polygon[j === 0 ? l2 - 1 : j - 1] || [0, 0]; const where = (yi - yj) * (x - xi) - (xi - xj) * (y - yi); if (yj < yi) { if (y >= yj && y < yi) { if (where === 0) return true; if (where > 0) { if (y === yj) { if (y > vy) { inside = !inside; } } else { inside = !inside; } } } } else if (yi < yj) { if (y > yi && y <= yj) { if (where === 0) return true; if (where < 0) { if (y === yj) { if (y < vy) { inside = !inside; } } else { inside = !inside; } } } } else if (y == yi && (x >= xj && x <= xi || x >= xi && x <= xj)) { return true; } } return inside; } function mergeDefaultProps(defaultProps, props) { return mergeProps(defaultProps, props); } var transitionsByElement = /* @__PURE__ */ new Map(); var transitionCallbacks = /* @__PURE__ */ new Set(); function setupGlobalEvents() { if (typeof window === "undefined") { return; } const onTransitionStart = (e2) => { if (!e2.target) { return; } let transitions = transitionsByElement.get(e2.target); if (!transitions) { transitions = /* @__PURE__ */ new Set(); transitionsByElement.set(e2.target, transitions); e2.target.addEventListener("transitioncancel", onTransitionEnd); } transitions.add(e2.propertyName); }; const onTransitionEnd = (e2) => { if (!e2.target) { return; } const properties = transitionsByElement.get(e2.target); if (!properties) { return; } properties.delete(e2.propertyName); if (properties.size === 0) { e2.target.removeEventListener("transitioncancel", onTransitionEnd); transitionsByElement.delete(e2.target); } if (transitionsByElement.size === 0) { for (const cb of transitionCallbacks) { cb(); } transitionCallbacks.clear(); } }; document.body.addEventListener("transitionrun", onTransitionStart); document.body.addEventListener("transitionend", onTransitionEnd); } if (typeof document !== "undefined") { if (document.readyState !== "loading") { setupGlobalEvents(); } else { document.addEventListener("DOMContentLoaded", setupGlobalEvents); } } function scrollIntoView(scrollView, element) { const offsetX = relativeOffset(scrollView, element, "left"); const offsetY = relativeOffset(scrollView, element, "top"); const width = element.offsetWidth; const height = element.offsetHeight; let x = scrollView.scrollLeft; let y = scrollView.scrollTop; const maxX = x + scrollView.offsetWidth; const maxY = y + scrollView.offsetHeight; if (offsetX <= x) { x = offsetX; } else if (offsetX + width > maxX) { x += offsetX + width - maxX; } if (offsetY <= y) { y = offsetY; } else if (offsetY + height > maxY) { y += offsetY + height - maxY; } scrollView.scrollLeft = x; scrollView.scrollTop = y; } function relativeOffset(ancestor, child, axis) { const prop = axis === "left" ? "offsetLeft" : "offsetTop"; let sum = 0; while (child.offsetParent) { sum += child[prop]; if (child.offsetParent === ancestor) { break; } else if (child.offsetParent.contains(ancestor)) { sum -= ancestor[prop]; break; } child = child.offsetParent; } return sum; } function scrollIntoViewport(targetElement, opts) { var _a, _b; if (document.contains(targetElement)) { const root = document.scrollingElement || document.documentElement; const isScrollPrevented = window.getComputedStyle(root).overflow === "hidden"; if (!isScrollPrevented) { const { left: originalLeft, top: originalTop } = targetElement.getBoundingClientRect(); (_a = targetElement == null ? void 0 : targetElement.scrollIntoView) == null ? void 0 : _a.call(targetElement, { block: "nearest" }); const { left: newLeft, top: newTop } = targetElement.getBoundingClientRect(); if (Math.abs(originalLeft - newLeft) > 1 || Math.abs(originalTop - newTop) > 1) { (_b = targetElement.scrollIntoView) == null ? void 0 : _b.call(targetElement, { block: "nearest" }); } } else { let scrollParent = getScrollParent(targetElement); while (targetElement && scrollParent && targetElement !== root && scrollParent !== root) { scrollIntoView(scrollParent, targetElement); targetElement = scrollParent; scrollParent = getScrollParent(targetElement); } } } } var visuallyHiddenStyles = { border: "0", clip: "rect(0 0 0 0)", "clip-path": "inset(50%)", height: "1px", margin: "0 -1px -1px 0", overflow: "hidden", padding: "0", position: "absolute", width: "1px", "white-space": "nowrap" }; function createRegisterId(setter) { return (id) => { setter(id); return () => setter(void 0); }; } function createTagName(ref, fallback) { const [tagName, setTagName] = createSignal(stringOrUndefined(fallback == null ? void 0 : fallback())); createEffect(() => { var _a; setTagName(((_a = ref()) == null ? void 0 : _a.tagName.toLowerCase()) || stringOrUndefined(fallback == null ? void 0 : fallback())); }); return tagName; } function stringOrUndefined(value) { return isString(value) ? value : void 0; } function Polymorphic(props) { const [local, others] = splitProps(props, ["as"]); if (!local.as) { throw new Error("[kobalte]: Polymorphic is missing the required `as` prop."); } return ( // @ts-ignore: Props are valid but not worth calculating createComponent(Dynamic, mergeProps(others, { get component() { return local.as; } })) ); } var FORM_CONTROL_PROP_NAMES = ["id", "name", "validationState", "required", "disabled", "readOnly"]; function createFormControl(props) { const defaultId = `form-control-${createUniqueId()}`; const mergedProps = mergeDefaultProps({ id: defaultId }, props); const [labelId, setLabelId] = createSignal(); const [fieldId, setFieldId] = createSignal(); const [descriptionId, setDescriptionId] = createSignal(); const [errorMessageId, setErrorMessageId] = createSignal(); const getAriaLabelledBy = (fieldId2, fieldAriaLabel, fieldAriaLabelledBy) => { const hasAriaLabelledBy = fieldAriaLabelledBy != null || labelId() != null; return [ fieldAriaLabelledBy, labelId(), // If there is both an aria-label and aria-labelledby, add the field itself has an aria-labelledby hasAriaLabelledBy && fieldAriaLabel != null ? fieldId2 : void 0 ].filter(Boolean).join(" ") || void 0; }; const getAriaDescribedBy = (fieldAriaDescribedBy) => { return [ descriptionId(), // Use aria-describedby for error message because aria-errormessage is unsupported using VoiceOver or NVDA. // See https://github.com/adobe/react-spectrum/issues/1346#issuecomment-740136268 errorMessageId(), fieldAriaDescribedBy ].filter(Boolean).join(" ") || void 0; }; const dataset = createMemo(() => ({ "data-valid": access(mergedProps.validationState) === "valid" ? "" : void 0, "data-invalid": access(mergedProps.validationState) === "invalid" ? "" : void 0, "data-required": access(mergedProps.required) ? "" : void 0, "data-disabled": access(mergedProps.disabled) ? "" : void 0, "data-readonly": access(mergedProps.readOnly) ? "" : void 0 })); const formControlContext = { name: () => access(mergedProps.name) ?? access(mergedProps.id), dataset, validationState: () => access(mergedProps.validationState), isRequired: () => access(mergedProps.required), isDisabled: () => access(mergedProps.disabled), isReadOnly: () => access(mergedProps.readOnly), labelId, fieldId, descriptionId, errorMessageId, getAriaLabelledBy, getAriaDescribedBy, generateId: createGenerateId(() => access(mergedProps.id)), registerLabel: createRegisterId(setLabelId), registerField: createRegisterId(setFieldId), registerDescription: createRegisterId(setDescriptionId), registerErrorMessage: createRegisterId(setErrorMessageId) }; return { formControlContext }; } var FormControlContext = createContext(); function useFormControlContext() { const context = useContext(FormControlContext); if (context === void 0) { throw new Error("[kobalte]: `useFormControlContext` must be used within a `FormControlContext.Provider` component"); } return context; } function FormControlDescription(props) { const context = useFormControlContext(); const mergedProps = mergeDefaultProps({ id: context.generateId("description") }, props); createEffect(() => onCleanup(context.registerDescription(mergedProps.id))); return createComponent(Polymorphic, mergeProps({ as: "div" }, () => context.dataset(), mergedProps)); } function FormControlErrorMessage(props) { const context = useFormControlContext(); const mergedProps = mergeDefaultProps({ id: context.generateId("error-message") }, props); const [local, others] = splitProps(mergedProps, ["forceMount"]); const isInvalid = () => context.validationState() === "invalid"; createEffect(() => { if (!isInvalid()) { return; } onCleanup(context.registerErrorMessage(others.id)); }); return createComponent(Show, { get when() { return local.forceMount || isInvalid(); }, get children() { return createComponent(Polymorphic, mergeProps({ as: "div" }, () => context.dataset(), others)); } }); } function FormControlLabel(props) { let ref; const context = useFormControlContext(); const mergedProps = mergeDefaultProps({ id: context.generateId("label") }, props); const [local, others] = splitProps(mergedProps, ["ref"]); const tagName = createTagName(() => ref, () => "label"); createEffect(() => onCleanup(context.registerLabel(others.id))); return createComponent(Polymorphic, mergeProps({ as: "label", ref(r$) { const _ref$ = mergeRefs((el) => ref = el, local.ref); typeof _ref$ === "function" && _ref$(r$); }, get ["for"]() { return memo(() => tagName() === "label")() ? context.fieldId() : void 0; } }, () => context.dataset(), others)); } function createFormResetListener(element, handler) { createEffect( on(element, (element2) => { if (element2 == null) { return; } const form = getClosestForm(element2); if (form == null) { return; } form.addEventListener("reset", handler, { passive: true }); onCleanup(() => { form.removeEventListener("reset", handler); }); }) ); } function getClosestForm(element) { return isFormElement(element) ? element.form : element.closest("form"); } function isFormElement(element) { return element.matches("textarea, input, select, button"); } function createControllableSignal(props) { var _a; const [_value, _setValue] = createSignal((_a = props.defaultValue) == null ? void 0 : _a.call(props)); const isControlled = createMemo(() => { var _a2; return ((_a2 = props.value) == null ? void 0 : _a2.call(props)) !== void 0; }); const value = createMemo(() => { var _a2; return isControlled() ? (_a2 = props.value) == null ? void 0 : _a2.call(props) : _value(); }); const setValue = (next) => { untrack(() => { var _a2; const nextValue = accessWith(next, value()); if (!Object.is(nextValue, value())) { if (!isControlled()) { _setValue(nextValue); } (_a2 = props.onChange) == null ? void 0 : _a2.call(props, nextValue); } return nextValue; }); }; return [value, setValue]; } function createControllableBooleanSignal(props) { const [_value, setValue] = createControllableSignal(props); const value = () => _value() ?? false; return [value, setValue]; } function createControllableArraySignal(props) { const [_value, setValue] = createControllableSignal(props); const value = () => _value() ?? []; return [value, setValue]; } function createToggleState(props = {}) { const [isSelected, _setIsSelected] = createControllableBooleanSignal({ value: () => access(props.isSelected), defaultValue: () => !!access(props.defaultIsSelected), onChange: (value) => { var _a; return (_a = props.onSelectedChange) == null ? void 0 : _a.call(props, value); } }); const setIsSelected = (value) => { if (!access(props.isReadOnly) && !access(props.isDisabled)) { _setIsSelected(value); } }; const toggle = () => { if (!access(props.isReadOnly) && !access(props.isDisabled)) { _setIsSelected(!isSelected()); } }; return { isSelected, setIsSelected, toggle }; } var __defProp = Object.defineProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var DomCollectionContext = createContext(); function useOptionalDomCollectionContext() { return useContext(DomCollectionContext); } function useDomCollectionContext() { const context = useOptionalDomCollectionContext(); if (context === void 0) { throw new Error( "[kobalte]: `useDomCollectionContext` must be used within a `DomCollectionProvider` component" ); } return context; } function isElementPreceding(a2, b2) { return Boolean( b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING ); } function findDOMIndex(items, item) { var _a; const itemEl = item.ref(); if (!itemEl) { return -1; } let length = items.length; if (!length) { return -1; } while (length--) { const currentItemEl = (_a = items[length]) == null ? void 0 : _a.ref(); if (!currentItemEl) { continue; } if (isElementPreceding(currentItemEl, itemEl)) { return length + 1; } } return 0; } function sortBasedOnDOMPosition(items) { const pairs = items.map((item, index) => [index, item]); let isOrderDifferent = false; pairs.sort(([indexA, a2], [indexB, b2]) => { const elementA = a2.ref(); const elementB = b2.ref(); if (elementA === elementB) { return 0; } if (!elementA || !elementB) { return 0; } if (isElementPreceding(elementA, elementB)) { if (indexA > indexB) { isOrderDifferent = true; } return -1; } if (indexA < indexB) { isOrderDifferent = true; } return 1; }); if (isOrderDifferent) { return pairs.map(([_, item]) => item); } return items; } function setItemsBasedOnDOMPosition(items, setItems) { const sortedItems = sortBasedOnDOMPosition(items); if (items !== sortedItems) { setItems(sortedItems); } } function getCommonParent(items) { var _a, _b; const firstItem = items[0]; const lastItemEl = (_a = items[items.length - 1]) == null ? void 0 : _a.ref(); let parentEl = (_b = firstItem == null ? void 0 : firstItem.ref()) == null ? void 0 : _b.parentElement; while (parentEl) { if (lastItemEl && parentEl.contains(lastItemEl)) { return parentEl; } parentEl = parentEl.parentElement; } return getDocument(parentEl).body; } function createTimeoutObserver(items, setItems) { createEffect(() => { const timeout = setTimeout(() => { setItemsBasedOnDOMPosition(items(), setItems); }); onCleanup(() => clearTimeout(timeout)); }); } function createSortBasedOnDOMPosition(items, setItems) { if (typeof IntersectionObserver !== "function") { createTimeoutObserver(items, setItems); return; } let previousItems = []; createEffect(() => { const callback = () => { const hasPreviousItems = !!previousItems.length; previousItems = items(); if (!hasPreviousItems) { return; } setItemsBasedOnDOMPosition(items(), setItems); }; const root = getCommonParent(items()); const observer = new IntersectionObserver(callback, { root }); for (const item of items()) { const itemEl = item.ref(); if (itemEl) { observer.observe(itemEl); } } onCleanup(() => observer.disconnect()); }); } function createDomCollection(props = {}) { const [items, setItems] = createControllableArraySignal({ value: () => access(props.items), onChange: (value) => { var _a; return (_a = props.onItemsChange) == null ? void 0 : _a.call(props, value); } }); createSortBasedOnDOMPosition(items, setItems); const registerItem = (item) => { setItems((prevItems) => { const index = findDOMIndex(prevItems, item); return addItemToArray(prevItems, item, index); }); return () => { setItems((prevItems) => { const nextItems = prevItems.filter( (prevItem) => prevItem.ref() !== item.ref() ); if (prevItems.length === nextItems.length) { return prevItems; } return nextItems; }); }; }; const DomCollectionProvider = (props2) => { return createComponent(DomCollectionContext.Provider, { value: { registerItem }, get children() { return props2.children; } }); }; return { DomCollectionProvider }; } function createDomCollectionItem(props) { const context = useDomCollectionContext(); const mergedProps = mergeDefaultProps({ shouldRegisterItem: true }, props); createEffect(() => { if (!mergedProps.shouldRegisterItem) { return; } const unregister = context.registerItem(mergedProps.getItem()); onCleanup(unregister); }); } function buildNodes(params) { let index = params.startIndex ?? 0; const level = params.startLevel ?? 0; const nodes = []; const getKey = (data) => { if (data == null) { return ""; } const _getKey = params.getKey ?? "key"; const dataKey = isString(_getKey) ? data[_getKey] : _getKey(data); return dataKey != null ? String(dataKey) : ""; }; const getTextValue = (data) => { if (data == null) { return ""; } const _getTextValue = params.getTextValue ?? "textValue"; const dataTextValue = isString(_getTextValue) ? data[_getTextValue] : _getTextValue(data); return dataTextValue != null ? String(dataTextValue) : ""; }; const getDisabled = (data) => { if (data == null) { return false; } const _getDisabled = params.getDisabled ?? "disabled"; return (isString(_getDisabled) ? data[_getDisabled] : _getDisabled(data)) ?? false; }; const getSectionChildren = (data) => { var _a; if (data == null) { return void 0; } if (isString(params.getSectionChildren)) { return data[params.getSectionChildren]; } return (_a = params.getSectionChildren) == null ? void 0 : _a.call(params, data); }; for (const data of params.dataSource) { if (isString(data) || isNumber(data)) { nodes.push({ type: "item", rawValue: data, key: String(data), textValue: String(data), disabled: getDisabled(data), level, index }); index++; continue; } if (getSectionChildren(data) != null) { nodes.push({ type: "section", rawValue: data, key: "", // not applicable here textValue: "", // not applicable here disabled: false, // not applicable here level, index }); index++; const sectionChildren = getSectionChildren(data) ?? []; if (sectionChildren.length > 0) { const childNodes = buildNodes({ dataSource: sectionChildren, getKey: params.getKey, getTextValue: params.getTextValue, getDisabled: params.getDisabled, getSectionChildren: params.getSectionChildren, startIndex: index, startLevel: level + 1 }); nodes.push(...childNodes); index += childNodes.length; } } else { nodes.push({ type: "item", rawValue: data, key: getKey(data), textValue: getTextValue(data), disabled: getDisabled(data), level, index }); index++; } } return nodes; } function createCollection(props, deps = []) { return createMemo(() => { const nodes = buildNodes({ dataSource: access(props.dataSource), getKey: access(props.getKey), getTextValue: access(props.getTextValue), getDisabled: access(props.getDisabled), getSectionChildren: access(props.getSectionChildren) }); for (let i2 = 0; i2 < deps.length; i2++) deps[i2](); return props.factory(nodes); }); } var RTL_SCRIPTS = /* @__PURE__ */ new Set([ "Avst", "Arab", "Armi", "Syrc", "Samr", "Mand", "Thaa", "Mend", "Nkoo", "Adlm", "Rohg", "Hebr" ]); var RTL_LANGS = /* @__PURE__ */ new Set([ "ae", "ar", "arc", "bcc", "bqi", "ckb", "dv", "fa", "glk", "he", "ku", "mzn", "nqo", "pnb", "ps", "sd", "ug", "ur", "yi" ]); function isRTL(locale) { if (Intl.Locale) { const script = new Intl.Locale(locale).maximize().script ?? ""; return RTL_SCRIPTS.has(script); } const lang = locale.split("-")[0]; return RTL_LANGS.has(lang); } function getReadingDirection(locale) { return isRTL(locale) ? "rtl" : "ltr"; } function getDefaultLocale() { let locale = typeof navigator !== "undefined" && // @ts-ignore (navigator.language || navigator.userLanguage) || "en-US"; return { locale, direction: getReadingDirection(locale) }; } var currentLocale = getDefaultLocale(); var listeners = /* @__PURE__ */ new Set(); function updateLocale() { currentLocale = getDefaultLocale(); for (const listener of listeners) { listener(currentLocale); } } function createDefaultLocale() { const defaultSSRLocale = { locale: "en-US", direction: "ltr" }; const [defaultClientLocale, setDefaultClientLocale] = createSignal(currentLocale); const defaultLocale = createMemo( () => isServer ? defaultSSRLocale : defaultClientLocale() ); onMount(() => { if (listeners.size === 0) { window.addEventListener("languagechange", updateLocale); } listeners.add(setDefaultClientLocale); onCleanup(() => { listeners.delete(setDefaultClientLocale); if (listeners.size === 0) { window.removeEventListener("languagechange", updateLocale); } }); }); return { locale: () => defaultLocale().locale, direction: () => defaultLocale().direction }; } var I18nContext = createContext(); function useLocale() { const defaultLocale = createDefaultLocale(); const context = useContext(I18nContext); return context || defaultLocale; } var cache = /* @__PURE__ */ new Map(); function createCollator(options) { const { locale } = useLocale(); const cacheKey = createMemo(() => { return locale() + (options ? Object.entries(options).sort((a2, b2) => a2[0] < b2[0] ? -1 : 1).join() : ""); }); return createMemo(() => { const key = cacheKey(); let collator; if (cache.has(key)) { collator = cache.get(key); } if (!collator) { collator = new Intl.Collator(locale(), options); cache.set(key, collator); } return collator; }); } var Selection = class _Selection extends Set { constructor(keys2, anchorKey, currentKey) { super(keys2); __publicField(this, "anchorKey"); __publicField(this, "currentKey"); if (keys2 instanceof _Selection) { this.anchorKey = anchorKey || keys2.anchorKey; this.currentKey = currentKey || keys2.currentKey; } else { this.anchorKey = anchorKey; this.currentKey = currentKey; } } }; function createControllableSelectionSignal(props) { const [_value, setValue] = createControllableSignal(props); const value = () => _value() ?? new Selection(); return [value, setValue]; } function isNonContiguousSelectionModifier(e2) { return isAppleDevice() ? e2.altKey : e2.ctrlKey; } function isCtrlKeyPressed(e2) { if (isMac()) { return e2.metaKey; } return e2.ctrlKey; } function convertSelection(selection) { return new Selection(selection); } function isSameSelection(setA, setB) { if (setA.size !== setB.size) { return false; } for (const item of setA) { if (!setB.has(item)) { return false; } } return true; } function createMultipleSelectionState(props) { const mergedProps = mergeDefaultProps( { selectionMode: "none", selectionBehavior: "toggle" }, props ); const [isFocused, setFocused] = createSignal(false); const [focusedKey, setFocusedKey] = createSignal(); const selectedKeysProp = createMemo(() => { const selection = access(mergedProps.selectedKeys); if (selection != null) { return convertSelection(selection); } return selection; }); const defaultSelectedKeys = createMemo(() => { const defaultSelection = access(mergedProps.defaultSelectedKeys); if (defaultSelection != null) { return convertSelection(defaultSelection); } return new Selection(); }); const [selectedKeys, _setSelectedKeys] = createControllableSelectionSignal({ value: selectedKeysProp, defaultValue: defaultSelectedKeys, onChange: (value) => { var _a; return (_a = mergedProps.onSelectionChange) == null ? void 0 : _a.call(mergedProps, value); } }); const [selectionBehavior, setSelectionBehavior] = createSignal(access(mergedProps.selectionBehavior)); const selectionMode = () => access(mergedProps.selectionMode); const disallowEmptySelection = () => access(mergedProps.disallowEmptySelection) ?? false; const setSelectedKeys = (keys2) => { if (access(mergedProps.allowDuplicateSelectionEvents) || !isSameSelection(keys2, selectedKeys())) { _setSelectedKeys(keys2); } }; createEffect(() => { const selection = selectedKeys(); if (access(mergedProps.selectionBehavior) === "replace" && selectionBehavior() === "toggle" && typeof selection === "object" && selection.size === 0) { setSelectionBehavior("replace"); } }); createEffect(() => { setSelectionBehavior(access(mergedProps.selectionBehavior) ?? "toggle"); }); return { selectionMode, disallowEmptySelection, selectionBehavior, setSelectionBehavior, isFocused, setFocused, focusedKey, setFocusedKey, selectedKeys, setSelectedKeys }; } function createTypeSelect(props) { const [search, setSearch] = createSignal(""); const [timeoutId, setTimeoutId] = createSignal(-1); const onKeyDown = (e2) => { var _a; if (access(props.isDisabled)) { return; } const delegate = access(props.keyboardDelegate); const manager = access(props.selectionManager); if (!delegate.getKeyForSearch) { return; } const character = getStringForKey(e2.key); if (!character || e2.ctrlKey || e2.metaKey) { return; } if (character === " " && search().trim().length > 0) { e2.preventDefault(); e2.stopPropagation(); } let newSearch = setSearch((prev) => prev + character); let key = delegate.getKeyForSearch(newSearch, manager.focusedKey()) ?? delegate.getKeyForSearch(newSearch); if (key == null && isAllSameLetter(newSearch)) { newSearch = newSearch[0]; key = delegate.getKeyForSearch(newSearch, manager.focusedKey()) ?? delegate.getKeyForSearch(newSearch); } if (key != null) { manager.setFocusedKey(key); (_a = props.onTypeSelect) == null ? void 0 : _a.call(props, key); } clearTimeout(timeoutId()); setTimeoutId(window.setTimeout(() => setSearch(""), 500)); }; return { typeSelectHandlers: { onKeyDown } }; } function getStringForKey(key) { if (key.length === 1 || !/^[A-Z]/i.test(key)) { return key; } return ""; } function isAllSameLetter(search) { return search.split("").every((letter) => letter === search[0]); } function createSelectableCollection(props, ref, scrollRef) { const defaultProps = { selectOnFocus: () => access(props.selectionManager).selectionBehavior() === "replace" }; const mergedProps = mergeProps(defaultProps, props); const finalScrollRef = () => ref(); const { direction } = useLocale(); let scrollPos = { top: 0, left: 0 }; createEventListener( () => !access(mergedProps.isVirtualized) ? finalScrollRef() : void 0, "scroll", () => { const scrollEl = finalScrollRef(); if (!scrollEl) { return; } scrollPos = { top: scrollEl.scrollTop, left: scrollEl.scrollLeft }; } ); const { typeSelectHandlers } = createTypeSelect({ isDisabled: () => access(mergedProps.disallowTypeAhead), keyboardDelegate: () => access(mergedProps.keyboardDelegate), selectionManager: () => access(mergedProps.selectionManager) }); const orientation = () => access(mergedProps.orientation) ?? "vertical"; const onKeyDown = (e2) => { var _a, _b, _c, _d, _e, _f, _g, _h; callHandler(e2, typeSelectHandlers.onKeyDown); if (e2.altKey && e2.key === "Tab") { e2.preventDefault(); } const refEl = ref(); if (!(refEl == null ? void 0 : refEl.contains(e2.target))) { return; } const manager = access(mergedProps.selectionManager); const selectOnFocus = access(mergedProps.selectOnFocus); const navigateToKey = (key) => { if (key != null) { manager.setFocusedKey(key); if (e2.shiftKey && manager.selectionMode() === "multiple") { manager.extendSelection(key); } else if (selectOnFocus && !isNonContiguousSelectionModifier(e2)) { manager.replaceSelection(key); } } }; const delegate = access(mergedProps.keyboardDelegate); const shouldFocusWrap = access(mergedProps.shouldFocusWrap); const focusedKey = manager.focusedKey(); switch (e2.key) { case (orientation() === "vertical" ? "ArrowDown" : "ArrowRight"): { if (delegate.getKeyBelow) { e2.preventDefault(); let nextKey; if (focusedKey != null) { nextKey = delegate.getKeyBelow(focusedKey); } else { nextKey = (_a = delegate.getFirstKey) == null ? void 0 : _a.call(delegate); } if (nextKey == null && shouldFocusWrap) { nextKey = (_b = delegate.getFirstKey) == null ? void 0 : _b.call(delegate, focusedKey); } navigateToKey(nextKey); } break; } case (orientation() === "vertical" ? "ArrowUp" : "ArrowLeft"): { if (delegate.getKeyAbove) { e2.preventDefault(); let nextKey; if (focusedKey != null) { nextKey = delegate.getKeyAbove(focusedKey); } else { nextKey = (_c = delegate.getLastKey) == null ? void 0 : _c.call(delegate); } if (nextKey == null && shouldFocusWrap) { nextKey = (_d = delegate.getLastKey) == null ? void 0 : _d.call(delegate, focusedKey); } navigateToKey(nextKey); } break; } case (orientation() === "vertical" ? "ArrowLeft" : "ArrowUp"): { if (delegate.getKeyLeftOf) { e2.preventDefault(); const isRTL3 = direction() === "rtl"; let nextKey; if (focusedKey != null) { nextKey = delegate.getKeyLeftOf(focusedKey); } else { nextKey = isRTL3 ? (_e = delegate.getFirstKey) == null ? void 0 : _e.call(delegate) : (_f = delegate.getLastKey) == null ? void 0 : _f.call(delegate); } navigateToKey(nextKey); } break; } case (orientation() === "vertical" ? "ArrowRight" : "ArrowDown"): { if (delegate.getKeyRightOf) { e2.preventDefault(); const isRTL3 = direction() === "rtl"; let nextKey; if (focusedKey != null) { nextKey = delegate.getKeyRightOf(focusedKey); } else { nextKey = isRTL3 ? (_g = delegate.getLastKey) == null ? void 0 : _g.call(delegate) : (_h = delegate.getFirstKey) == null ? void 0 : _h.call(delegate); } navigateToKey(nextKey); } break; } case "Home": if (delegate.getFirstKey) { e2.preventDefault(); const firstKey = delegate.getFirstKey( focusedKey, isCtrlKeyPressed(e2) ); if (firstKey != null) { manager.setFocusedKey(firstKey); if (isCtrlKeyPressed(e2) && e2.shiftKey && manager.selectionMode() === "multiple") { manager.extendSelection(firstKey); } else if (selectOnFocus) { manager.replaceSelection(firstKey); } } } break; case "End": if (delegate.getLastKey) { e2.preventDefault(); const lastKey = delegate.getLastKey(focusedKey, isCtrlKeyPressed(e2)); if (lastKey != null) { manager.setFocusedKey(lastKey); if (isCtrlKeyPressed(e2) && e2.shiftKey && manager.selectionMode() === "multiple") { manager.extendSelection(lastKey); } else if (selectOnFocus) { manager.replaceSelection(lastKey); } } } break; case "PageDown": if (delegate.getKeyPageBelow && focusedKey != null) { e2.preventDefault(); const nextKey = delegate.getKeyPageBelow(focusedKey); navigateToKey(nextKey); } break; case "PageUp": if (delegate.getKeyPageAbove && focusedKey != null) { e2.preventDefault(); const nextKey = delegate.getKeyPageAbove(focusedKey); navigateToKey(nextKey); } break; case "a": if (isCtrlKeyPressed(e2) && manager.selectionMode() === "multiple" && access(mergedProps.disallowSelectAll) !== true) { e2.preventDefault(); manager.selectAll(); } break; case "Escape": if (!e2.defaultPrevented) { e2.preventDefault(); if (!access(mergedProps.disallowEmptySelection)) { manager.clearSelection(); } } break; case "Tab": { if (!access(mergedProps.allowsTabNavigation)) { if (e2.shiftKey) { refEl.focus(); } else { const walker = getFocusableTreeWalker(refEl, { tabbable: true }); let next; let last; do { last = walker.lastChild(); if (last) { next = last; } } while (last); if (next && !next.contains(document.activeElement)) { focusWithoutScrolling(next); } } break; } } } }; const onFocusIn = (e2) => { var _a, _b; const manager = access(mergedProps.selectionManager); const delegate = access(mergedProps.keyboardDelegate); const selectOnFocus = access(mergedProps.selectOnFocus); if (manager.isFocused()) { if (!e2.currentTarget.contains(e2.target)) { manager.setFocused(false); } return; } if (!e2.currentTarget.contains(e2.target)) { return; } manager.setFocused(true); if (manager.focusedKey() == null) { const navigateToFirstKey = (key) => { if (key == null) { return; } manager.setFocusedKey(key); if (selectOnFocus) { manager.replaceSelection(key); } }; const relatedTarget = e2.relatedTarget; if (relatedTarget && e2.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING) { navigateToFirstKey( manager.lastSelectedKey() ?? ((_a = delegate.getLastKey) == null ? void 0 : _a.call(delegate)) ); } else { navigateToFirstKey( manager.firstSelectedKey() ?? ((_b = delegate.getFirstKey) == null ? void 0 : _b.call(delegate)) ); } } else if (!access(mergedProps.isVirtualized)) { const scrollEl = finalScrollRef(); if (scrollEl) { scrollEl.scrollTop = scrollPos.top; scrollEl.scrollLeft = scrollPos.left; const element = scrollEl.querySelector( `[data-key="${manager.focusedKey()}"]` ); if (element) { focusWithoutScrolling(element); scrollIntoView(scrollEl, element); } } } }; const onFocusOut = (e2) => { const manager = access(mergedProps.selectionManager); if (!e2.currentTarget.contains(e2.relatedTarget)) { manager.setFocused(false); } }; const onMouseDown = (e2) => { if (finalScrollRef() === e2.target) { e2.preventDefault(); } }; const tryAutoFocus = () => { var _a, _b; const autoFocus = access(mergedProps.autoFocus); if (!autoFocus) { return; } const manager = access(mergedProps.selectionManager); const delegate = access(mergedProps.keyboardDelegate); let focusedKey; if (autoFocus === "first") { focusedKey = (_a = delegate.getFirstKey) == null ? void 0 : _a.call(delegate); } if (autoFocus === "last") { focusedKey = (_b = delegate.getLastKey) == null ? void 0 : _b.call(delegate); } const selectedKeys = manager.selectedKeys(); if (selectedKeys.size) { focusedKey = selectedKeys.values().next().value; } manager.setFocused(true); manager.setFocusedKey(focusedKey); const refEl = ref(); if (refEl && focusedKey == null && !access(mergedProps.shouldUseVirtualFocus)) { focusWithoutScrolling(refEl); } }; onMount(() => { if (mergedProps.deferAutoFocus) { setTimeout(tryAutoFocus, 0); } else { tryAutoFocus(); } }); createEffect( on( [ finalScrollRef, () => access(mergedProps.isVirtualized), () => access(mergedProps.selectionManager).focusedKey() ], (newValue) => { var _a; const [scrollEl, isVirtualized, focusedKey] = newValue; if (isVirtualized) { focusedKey && ((_a = mergedProps.scrollToKey) == null ? void 0 : _a.call(mergedProps, focusedKey)); } else { if (focusedKey && scrollEl) { const element = scrollEl.querySelector( `[data-key="${focusedKey}"]` ); if (element) { scrollIntoView(scrollEl, element); } } } } ) ); const tabIndex = createMemo(() => { if (access(mergedProps.shouldUseVirtualFocus)) { return void 0; } return access(mergedProps.selectionManager).focusedKey() == null ? 0 : -1; }); return { tabIndex, onKeyDown, onMouseDown, onFocusIn, onFocusOut }; } function createSelectableItem(props, ref) { const manager = () => access(props.selectionManager); const key = () => access(props.key); const shouldUseVirtualFocus = () => access(props.shouldUseVirtualFocus); const onSelect = (e2) => { if (manager().selectionMode() === "none") { return; } if (manager().selectionMode() === "single") { if (manager().isSelected(key()) && !manager().disallowEmptySelection()) { manager().toggleSelection(key()); } else { manager().replaceSelection(key()); } } else if (e2 == null ? void 0 : e2.shiftKey) { manager().extendSelection(key()); } else if (manager().selectionBehavior() === "toggle" || isCtrlKeyPressed(e2) || "pointerType" in e2 && e2.pointerType === "touch") { manager().toggleSelection(key()); } else { manager().replaceSelection(key()); } }; const isSelected = () => manager().isSelected(key()); const isDisabled = () => access(props.disabled) || manager().isDisabled(key()); const allowsSelection = () => !isDisabled() && manager().canSelectItem(key()); let pointerDownType = null; const onPointerDown = (e2) => { if (!allowsSelection()) { return; } pointerDownType = e2.pointerType; if (e2.pointerType === "mouse" && e2.button === 0 && !access(props.shouldSelectOnPressUp)) { onSelect(e2); } }; const onPointerUp = (e2) => { if (!allowsSelection()) { return; } if (e2.pointerType === "mouse" && e2.button === 0 && access(props.shouldSelectOnPressUp) && access(props.allowsDifferentPressOrigin)) { onSelect(e2); } }; const onClick = (e2) => { if (!allowsSelection()) { return; } if (access(props.shouldSelectOnPressUp) && !access(props.allowsDifferentPressOrigin) || pointerDownType !== "mouse") { onSelect(e2); } }; const onKeyDown = (e2) => { if (!allowsSelection() || !["Enter", " "].includes(e2.key)) { return; } if (isNonContiguousSelectionModifier(e2)) { manager().toggleSelection(key()); } else { onSelect(e2); } }; const onMouseDown = (e2) => { if (isDisabled()) { e2.preventDefault(); } }; const onFocus = (e2) => { const refEl = ref(); if (shouldUseVirtualFocus() || isDisabled() || !refEl) { return; } if (e2.target === refEl) { manager().setFocusedKey(key()); } }; const tabIndex = createMemo(() => { if (shouldUseVirtualFocus() || isDisabled()) { return void 0; } return key() === manager().focusedKey() ? 0 : -1; }); const dataKey = createMemo(() => { return access(props.virtualized) ? void 0 : key(); }); createEffect( on( [ ref, key, shouldUseVirtualFocus, () => manager().focusedKey(), () => manager().isFocused() ], ([refEl, key2, shouldUseVirtualFocus2, focusedKey, isFocused]) => { if (refEl && key2 === focusedKey && isFocused && !shouldUseVirtualFocus2 && document.activeElement !== refEl) { if (props.focus) { props.focus(); } else { focusWithoutScrolling(refEl); } } } ) ); return { isSelected, isDisabled, allowsSelection, tabIndex, dataKey, onPointerDown, onPointerUp, onClick, onKeyDown, onMouseDown, onFocus }; } var SelectionManager = class { constructor(collection, state) { __publicField(this, "collection"); __publicField(this, "state"); this.collection = collection; this.state = state; } /** The type of selection that is allowed in the collection. */ selectionMode() { return this.state.selectionMode(); } /** Whether the collection allows empty selection. */ disallowEmptySelection() { return this.state.disallowEmptySelection(); } /** The selection behavior for the collection. */ selectionBehavior() { return this.state.selectionBehavior(); } /** Sets the selection behavior for the collection. */ setSelectionBehavior(selectionBehavior) { this.state.setSelectionBehavior(selectionBehavior); } /** Whether the collection is currently focused. */ isFocused() { return this.state.isFocused(); } /** Sets whether the collection is focused. */ setFocused(isFocused) { this.state.setFocused(isFocused); } /** The current focused key in the collection. */ focusedKey() { return this.state.focusedKey(); } /** Sets the focused key. */ setFocusedKey(key) { if (key == null || this.collection().getItem(key)) { this.state.setFocusedKey(key); } } /** The currently selected keys in the collection. */ selectedKeys() { return this.state.selectedKeys(); } /** Returns whether a key is selected. */ isSelected(key) { if (this.state.selectionMode() === "none") { return false; } const retrievedKey = this.getKey(key); if (retrievedKey == null) { return false; } return this.state.selectedKeys().has(retrievedKey); } /** Whether the selection is empty. */ isEmpty() { return this.state.selectedKeys().size === 0; } /** Whether all items in the collection are selected. */ isSelectAll() { if (this.isEmpty()) { return false; } const selectedKeys = this.state.selectedKeys(); return this.getAllSelectableKeys().every((k) => selectedKeys.has(k)); } firstSelectedKey() { let first; for (const key of this.state.selectedKeys()) { const item = this.collection().getItem(key); const isItemBeforeFirst = (item == null ? void 0 : item.index) != null && (first == null ? void 0 : first.index) != null && item.index < first.index; if (!first || isItemBeforeFirst) { first = item; } } return first == null ? void 0 : first.key; } lastSelectedKey() { let last; for (const key of this.state.selectedKeys()) { const item = this.collection().getItem(key); const isItemAfterLast = (item == null ? void 0 : item.index) != null && (last == null ? void 0 : last.index) != null && item.index > last.index; if (!last || isItemAfterLast) { last = item; } } return last == null ? void 0 : last.key; } /** Extends the selection to the given key. */ extendSelection(toKey) { if (this.selectionMode() === "none") { return; } if (this.selectionMode() === "single") { this.replaceSelection(toKey); return; } const retrievedToKey = this.getKey(toKey); if (retrievedToKey == null) { return; } const selectedKeys = this.state.selectedKeys(); const anchorKey = selectedKeys.anchorKey || retrievedToKey; const selection = new Selection(selectedKeys, anchorKey, retrievedToKey); for (const key of this.getKeyRange( anchorKey, selectedKeys.currentKey || retrievedToKey )) { selection.delete(key); } for (const key of this.getKeyRange(retrievedToKey, anchorKey)) { if (this.canSelectItem(key)) { selection.add(key); } } this.state.setSelectedKeys(selection); } getKeyRange(from, to) { const fromItem = this.collection().getItem(from); const toItem = this.collection().getItem(to); if (fromItem && toItem) { if (fromItem.index != null && toItem.index != null && fromItem.index <= toItem.index) { return this.getKeyRangeInternal(from, to); } return this.getKeyRangeInternal(to, from); } return []; } getKeyRangeInternal(from, to) { const keys2 = []; let key = from; while (key != null) { const item = this.collection().getItem(key); if (item && item.type === "item") { keys2.push(key); } if (key === to) { return keys2; } key = this.collection().getKeyAfter(key); } return []; } getKey(key) { const item = this.collection().getItem(key); if (!item) { return key; } if (!item || item.type !== "item") { return null; } return item.key; } /** Toggles whether the given key is selected. */ toggleSelection(key) { if (this.selectionMode() === "none") { return; } if (this.selectionMode() === "single" && !this.isSelected(key)) { this.replaceSelection(key); return; } const retrievedKey = this.getKey(key); if (retrievedKey == null) { return; } const keys2 = new Selection(this.state.selectedKeys()); if (keys2.has(retrievedKey)) { keys2.delete(retrievedKey); } else if (this.canSelectItem(retrievedKey)) { keys2.add(retrievedKey); keys2.anchorKey = retrievedKey; keys2.currentKey = retrievedKey; } if (this.disallowEmptySelection() && keys2.size === 0) { return; } this.state.setSelectedKeys(keys2); } /** Replaces the selection with only the given key. */ replaceSelection(key) { if (this.selectionMode() === "none") { return; } const retrievedKey = this.getKey(key); if (retrievedKey == null) { return; } const selection = this.canSelectItem(retrievedKey) ? new Selection([retrievedKey], retrievedKey, retrievedKey) : new Selection(); this.state.setSelectedKeys(selection); } /** Replaces the selection with the given keys. */ setSelectedKeys(keys2) { if (this.selectionMode() === "none") { return; } const selection = new Selection(); for (const key of keys2) { const retrievedKey = this.getKey(key); if (retrievedKey != null) { selection.add(retrievedKey); if (this.selectionMode() === "single") { break; } } } this.state.setSelectedKeys(selection); } /** Selects all items in the collection. */ selectAll() { if (this.selectionMode() === "multiple") { this.state.setSelectedKeys(new Set(this.getAllSelectableKeys())); } } /** * Removes all keys from the selection. */ clearSelection() { const selectedKeys = this.state.selectedKeys(); if (!this.disallowEmptySelection() && selectedKeys.size > 0) { this.state.setSelectedKeys(new Selection()); } } /** * Toggles between select all and an empty selection. */ toggleSelectAll() { if (this.isSelectAll()) { this.clearSelection(); } else { this.selectAll(); } } select(key, e2) { if (this.selectionMode() === "none") { return; } if (this.selectionMode() === "single") { if (this.isSelected(key) && !this.disallowEmptySelection()) { this.toggleSelection(key); } else { this.replaceSelection(key); } } else if (this.selectionBehavior() === "toggle" || e2 && e2.pointerType === "touch") { this.toggleSelection(key); } else { this.replaceSelection(key); } } /** Returns whether the current selection is equal to the given selection. */ isSelectionEqual(selection) { if (selection === this.state.selectedKeys()) { return true; } const selectedKeys = this.selectedKeys(); if (selection.size !== selectedKeys.size) { return false; } for (const key of selection) { if (!selectedKeys.has(key)) { return false; } } for (const key of selectedKeys) { if (!selection.has(key)) { return false; } } return true; } canSelectItem(key) { if (this.state.selectionMode() === "none") { return false; } const item = this.collection().getItem(key); return item != null && !item.disabled; } isDisabled(key) { const item = this.collection().getItem(key); return !item || item.disabled; } getAllSelectableKeys() { const keys2 = []; const addKeys = (key) => { while (key != null) { if (this.canSelectItem(key)) { const item = this.collection().getItem(key); if (!item) { continue; } if (item.type === "item") { keys2.push(key); } } key = this.collection().getKeyAfter(key); } }; addKeys(this.collection().getFirstKey()); return keys2; } }; var ListCollection = class { constructor(nodes) { __publicField(this, "keyMap", /* @__PURE__ */ new Map()); __publicField(this, "iterable"); __publicField(this, "firstKey"); __publicField(this, "lastKey"); this.iterable = nodes; for (const node of nodes) { this.keyMap.set(node.key, node); } if (this.keyMap.size === 0) { return; } let last; let index = 0; for (const [key, node] of this.keyMap) { if (last) { last.nextKey = key; node.prevKey = last.key; } else { this.firstKey = key; node.prevKey = void 0; } if (node.type === "item") { node.index = index++; } last = node; last.nextKey = void 0; } this.lastKey = last.key; } *[Symbol.iterator]() { yield* this.iterable; } getSize() { return this.keyMap.size; } getKeys() { return this.keyMap.keys(); } getKeyBefore(key) { var _a; return (_a = this.keyMap.get(key)) == null ? void 0 : _a.prevKey; } getKeyAfter(key) { var _a; return (_a = this.keyMap.get(key)) == null ? void 0 : _a.nextKey; } getFirstKey() { return this.firstKey; } getLastKey() { return this.lastKey; } getItem(key) { return this.keyMap.get(key); } at(idx) { const keys2 = [...this.getKeys()]; return this.getItem(keys2[idx]); } }; function createListState(props) { const selectionState = createMultipleSelectionState(props); const factory = (nodes) => { return props.filter ? new ListCollection(props.filter(nodes)) : new ListCollection(nodes); }; const collection = createCollection( { dataSource: () => access(props.dataSource), getKey: () => access(props.getKey), getTextValue: () => access(props.getTextValue), getDisabled: () => access(props.getDisabled), getSectionChildren: () => access(props.getSectionChildren), factory }, [() => props.filter] ); const selectionManager = new SelectionManager(collection, selectionState); createComputed(() => { const focusedKey = selectionState.focusedKey(); if (focusedKey != null && !collection().getItem(focusedKey)) { selectionState.setFocusedKey(void 0); } }); return { collection, selectionManager: () => selectionManager }; } var access2 = (v) => typeof v === "function" ? v() : v; var createPresence = (props) => { const refStyles = createMemo(() => { const element = access2(props.element); if (!element) return; return getComputedStyle(element); }); const getAnimationName = () => { var _a; return ((_a = refStyles()) == null ? void 0 : _a.animationName) ?? "none"; }; const [presentState, setPresentState] = createSignal(access2(props.show) ? "present" : "hidden"); let animationName = "none"; createEffect((prevShow) => { const show = access2(props.show); untrack(() => { var _a; if (prevShow === show) return show; const prevAnimationName = animationName; const currentAnimationName = getAnimationName(); if (show) { setPresentState("present"); } else if (currentAnimationName === "none" || ((_a = refStyles()) == null ? void 0 : _a.display) === "none") { setPresentState("hidden"); } else { const isAnimating = prevAnimationName !== currentAnimationName; if (prevShow === true && isAnimating) { setPresentState("hiding"); } else { setPresentState("hidden"); } } }); return show; }); createEffect(() => { const element = access2(props.element); if (!element) return; const handleAnimationStart = (event) => { if (event.target === element) { animationName = getAnimationName(); } }; const handleAnimationEnd = (event) => { const currentAnimationName = getAnimationName(); const isCurrentAnimation = currentAnimationName.includes( event.animationName ); if (event.target === element && isCurrentAnimation && presentState() === "hiding") { setPresentState("hidden"); } }; element.addEventListener("animationstart", handleAnimationStart); element.addEventListener("animationcancel", handleAnimationEnd); element.addEventListener("animationend", handleAnimationEnd); onCleanup(() => { element.removeEventListener("animationstart", handleAnimationStart); element.removeEventListener("animationcancel", handleAnimationEnd); element.removeEventListener("animationend", handleAnimationEnd); }); }); return { present: () => presentState() === "present" || presentState() === "hiding", state: presentState }; }; var presence_default = createPresence; var src_default = presence_default; var DATA_TOP_LAYER_ATTR = "data-kb-top-layer"; var originalBodyPointerEvents; var hasDisabledBodyPointerEvents = false; var layers = []; function indexOf(node) { return layers.findIndex((layer) => layer.node === node); } function find(node) { return layers[indexOf(node)]; } function isTopMostLayer(node) { return layers[layers.length - 1].node === node; } function getPointerBlockingLayers() { return layers.filter((layer) => layer.isPointerBlocking); } function getTopMostPointerBlockingLayer() { return [...getPointerBlockingLayers()].slice(-1)[0]; } function hasPointerBlockingLayer() { return getPointerBlockingLayers().length > 0; } function isBelowPointerBlockingLayer(node) { var _a; const highestBlockingIndex = indexOf((_a = getTopMostPointerBlockingLayer()) == null ? void 0 : _a.node); return indexOf(node) < highestBlockingIndex; } function addLayer(layer) { layers.push(layer); } function removeLayer(node) { const index = indexOf(node); if (index < 0) { return; } layers.splice(index, 1); } function assignPointerEventToLayers() { for (const { node } of layers) { node.style.pointerEvents = isBelowPointerBlockingLayer(node) ? "none" : "auto"; } } function disableBodyPointerEvents(node) { if (hasPointerBlockingLayer() && !hasDisabledBodyPointerEvents) { const ownerDocument = getDocument(node); originalBodyPointerEvents = document.body.style.pointerEvents; ownerDocument.body.style.pointerEvents = "none"; hasDisabledBodyPointerEvents = true; } } function restoreBodyPointerEvents(node) { if (hasPointerBlockingLayer()) { return; } const ownerDocument = getDocument(node); ownerDocument.body.style.pointerEvents = originalBodyPointerEvents; if (ownerDocument.body.style.length === 0) { ownerDocument.body.removeAttribute("style"); } hasDisabledBodyPointerEvents = false; } var layerStack = { layers, isTopMostLayer, hasPointerBlockingLayer, isBelowPointerBlockingLayer, addLayer, removeLayer, indexOf, find, assignPointerEventToLayers, disableBodyPointerEvents, restoreBodyPointerEvents }; var button_exports = {}; __export(button_exports, { Button: () => Button, Root: () => ButtonRoot }); var BUTTON_INPUT_TYPES = [ "button", "color", "file", "image", "reset", "submit" ]; function isButton(element) { const tagName = element.tagName.toLowerCase(); if (tagName === "button") { return true; } if (tagName === "input" && element.type) { return BUTTON_INPUT_TYPES.indexOf(element.type) !== -1; } return false; } function ButtonRoot(props) { let ref; const mergedProps = mergeDefaultProps({ type: "button" }, props); const [local, others] = splitProps(mergedProps, ["ref", "type", "disabled"]); const tagName = createTagName(() => ref, () => "button"); const isNativeButton = createMemo(() => { const elementTagName = tagName(); if (elementTagName == null) { return false; } return isButton({ tagName: elementTagName, type: local.type }); }); const isNativeInput = createMemo(() => { return tagName() === "input"; }); const isNativeLink = createMemo(() => { return tagName() === "a" && (ref == null ? void 0 : ref.getAttribute("href")) != null; }); return createComponent(Polymorphic, mergeProps({ as: "button", ref(r$) { const _ref$ = mergeRefs((el) => ref = el, local.ref); typeof _ref$ === "function" && _ref$(r$); }, get type() { return isNativeButton() || isNativeInput() ? local.type : void 0; }, get role() { return !isNativeButton() && !isNativeLink() ? "button" : void 0; }, get tabIndex() { return !isNativeButton() && !isNativeLink() && !local.disabled ? 0 : void 0; }, get disabled() { return isNativeButton() || isNativeInput() ? local.disabled : void 0; }, get ["aria-disabled"]() { return !isNativeButton() && !isNativeInput() && local.disabled ? true : void 0; }, get ["data-disabled"]() { return local.disabled ? "" : void 0; } }, others)); } var Button = ButtonRoot; var sides = ["top", "right", "bottom", "left"]; var min = Math.min; var max = Math.max; var round = Math.round; var floor = Math.floor; var createCoords = (v) => ({ x: v, y: v }); var oppositeSideMap = { left: "right", right: "left", bottom: "top", top: "bottom" }; var oppositeAlignmentMap = { start: "end", end: "start" }; function clamp2(start, value, end) { return max(start, min(value, end)); } function evaluate(value, param) { return typeof value === "function" ? value(param) : value; } function getSide(placement) { return placement.split("-")[0]; } function getAlignment(placement) { return placement.split("-")[1]; } function getOppositeAxis(axis) { return axis === "x" ? "y" : "x"; } function getAxisLength(axis) { return axis === "y" ? "height" : "width"; } function getSideAxis(placement) { return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x"; } function getAlignmentAxis(placement) { return getOppositeAxis(getSideAxis(placement)); } function getAlignmentSides(placement, rects, rtl) { if (rtl === void 0) { rtl = false; } const alignment = getAlignment(placement); const alignmentAxis = getAlignmentAxis(placement); const length = getAxisLength(alignmentAxis); let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; if (rects.reference[length] > rects.floating[length]) { mainAlignmentSide = getOppositePlacement(mainAlignmentSide); } return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; } function getExpandedPlacements(placement) { const oppositePlacement = getOppositePlacement(placement); return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; } function getOppositeAlignmentPlacement(placement) { return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]); } function getSideList(side, isStart, rtl) { const lr = ["left", "right"]; const rl = ["right", "left"]; const tb = ["top", "bottom"]; const bt = ["bottom", "top"]; switch (side) { case "top": case "bottom": if (rtl) return isStart ? rl : lr; return isStart ? lr : rl; case "left": case "right": return isStart ? tb : bt; default: return []; } } function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { const alignment = getAlignment(placement); let list = getSideList(getSide(placement), direction === "start", rtl); if (alignment) { list = list.map((side) => side + "-" + alignment); if (flipAlignment) { list = list.concat(list.map(getOppositeAlignmentPlacement)); } } return list; } function getOppositePlacement(placement) { return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]); } function expandPaddingObject(padding) { return { top: 0, right: 0, bottom: 0, left: 0, ...padding }; } function getPaddingObject(padding) { return typeof padding !== "number" ? expandPaddingObject(padding) : { top: padding, right: padding, bottom: padding, left: padding }; } function rectToClientRect(rect) { const { x, y, width, height } = rect; return { width, height, top: y, left: x, right: x + width, bottom: y + height, x, y }; } function computeCoordsFromPlacement(_ref, placement, rtl) { let { reference, floating } = _ref; const sideAxis = getSideAxis(placement); const alignmentAxis = getAlignmentAxis(placement); const alignLength = getAxisLength(alignmentAxis); const side = getSide(placement); const isVertical = sideAxis === "y"; const commonX = reference.x + reference.width / 2 - floating.width / 2; const commonY = reference.y + reference.height / 2 - floating.height / 2; const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; let coords; switch (side) { case "top": coords = { x: commonX, y: reference.y - floating.height }; break; case "bottom": coords = { x: commonX, y: reference.y + reference.height }; break; case "right": coords = { x: reference.x + reference.width, y: commonY }; break; case "left": coords = { x: reference.x - floating.width, y: commonY }; break; default: coords = { x: reference.x, y: reference.y }; } switch (getAlignment(placement)) { case "start": coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); break; case "end": coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); break; } return coords; } var computePosition = async (reference, floating, config) => { const { placement = "bottom", strategy = "absolute", middleware = [], platform: platform2 } = config; const validMiddleware = middleware.filter(Boolean); const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(floating)); let rects = await platform2.getElementRects({ reference, floating, strategy }); let { x, y } = computeCoordsFromPlacement(rects, placement, rtl); let statefulPlacement = placement; let middlewareData = {}; let resetCount = 0; for (let i2 = 0; i2 < validMiddleware.length; i2++) { const { name, fn } = validMiddleware[i2]; const { x: nextX, y: nextY, data, reset } = await fn({ x, y, initialPlacement: placement, placement: statefulPlacement, strategy, middlewareData, rects, platform: platform2, elements: { reference, floating } }); x = nextX != null ? nextX : x; y = nextY != null ? nextY : y; middlewareData = { ...middlewareData, [name]: { ...middlewareData[name], ...data } }; if (reset && resetCount <= 50) { resetCount++; if (typeof reset === "object") { if (reset.placement) { statefulPlacement = reset.placement; } if (reset.rects) { rects = reset.rects === true ? await platform2.getElementRects({ reference, floating, strategy }) : reset.rects; } ({ x, y } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); } i2 = -1; } } return { x, y, placement: statefulPlacement, strategy, middlewareData }; }; async function detectOverflow(state, options) { var _await$platform$isEle; if (options === void 0) { options = {}; } const { x, y, platform: platform2, rects, elements, strategy } = state; const { boundary = "clippingAncestors", rootBoundary = "viewport", elementContext = "floating", altBoundary = false, padding = 0 } = evaluate(options, state); const paddingObject = getPaddingObject(padding); const altContext = elementContext === "floating" ? "reference" : "floating"; const element = elements[altBoundary ? altContext : elementContext]; const clippingClientRect = rectToClientRect(await platform2.getClippingRect({ element: ((_await$platform$isEle = await (platform2.isElement == null ? void 0 : platform2.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform2.getDocumentElement == null ? void 0 : platform2.getDocumentElement(elements.floating)), boundary, rootBoundary, strategy })); const rect = elementContext === "floating" ? { x, y, width: rects.floating.width, height: rects.floating.height } : rects.reference; const offsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(elements.floating)); const offsetScale = await (platform2.isElement == null ? void 0 : platform2.isElement(offsetParent)) ? await (platform2.getScale == null ? void 0 : platform2.getScale(offsetParent)) || { x: 1, y: 1 } : { x: 1, y: 1 }; const elementClientRect = rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({ elements, rect, offsetParent, strategy }) : rect); return { top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x }; } var arrow = (options) => ({ name: "arrow", options, async fn(state) { const { x, y, placement, rects, platform: platform2, elements, middlewareData } = state; const { element, padding = 0 } = evaluate(options, state) || {}; if (element == null) { return {}; } const paddingObject = getPaddingObject(padding); const coords = { x, y }; const axis = getAlignmentAxis(placement); const length = getAxisLength(axis); const arrowDimensions = await platform2.getDimensions(element); const isYAxis = axis === "y"; const minProp = isYAxis ? "top" : "left"; const maxProp = isYAxis ? "bottom" : "right"; const clientProp = isYAxis ? "clientHeight" : "clientWidth"; const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; const startDiff = coords[axis] - rects.reference[axis]; const arrowOffsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(element)); let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0; if (!clientSize || !await (platform2.isElement == null ? void 0 : platform2.isElement(arrowOffsetParent))) { clientSize = elements.floating[clientProp] || rects.floating[length]; } const centerToReference = endDiff / 2 - startDiff / 2; const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; const minPadding = min(paddingObject[minProp], largestPossiblePadding); const maxPadding = min(paddingObject[maxProp], largestPossiblePadding); const min$1 = minPadding; const max2 = clientSize - arrowDimensions[length] - maxPadding; const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; const offset3 = clamp2(min$1, center, max2); const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset3 && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max2 : 0; return { [axis]: coords[axis] + alignmentOffset, data: { [axis]: offset3, centerOffset: center - offset3 - alignmentOffset, ...shouldAddOffset && { alignmentOffset } }, reset: shouldAddOffset }; } }); var flip = function(options) { if (options === void 0) { options = {}; } return { name: "flip", options, async fn(state) { var _middlewareData$arrow, _middlewareData$flip; const { placement, middlewareData, rects, initialPlacement, platform: platform2, elements } = state; const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = "bestFit", fallbackAxisSideDirection = "none", flipAlignment = true, ...detectOverflowOptions } = evaluate(options, state); if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { return {}; } const side = getSide(placement); const initialSideAxis = getSideAxis(initialPlacement); const isBasePlacement = getSide(initialPlacement) === initialPlacement; const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)); const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); } const placements2 = [initialPlacement, ...fallbackPlacements]; const overflow = await detectOverflow(state, detectOverflowOptions); const overflows = []; let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; if (checkMainAxis) { overflows.push(overflow[side]); } if (checkCrossAxis) { const sides2 = getAlignmentSides(placement, rects, rtl); overflows.push(overflow[sides2[0]], overflow[sides2[1]]); } overflowsData = [...overflowsData, { placement, overflows }]; if (!overflows.every((side2) => side2 <= 0)) { var _middlewareData$flip2, _overflowsData$filter; const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; const nextPlacement = placements2[nextIndex]; if (nextPlacement) { return { data: { index: nextIndex, overflows: overflowsData }, reset: { placement: nextPlacement } }; } let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a2, b2) => a2.overflows[1] - b2.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; if (!resetPlacement) { switch (fallbackStrategy) { case "bestFit": { var _overflowsData$filter2; const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => { if (hasFallbackAxisSideDirection) { const currentSideAxis = getSideAxis(d.placement); return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal // reading directions favoring greater width. currentSideAxis === "y"; } return true; }).map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a2, b2) => a2[1] - b2[1])[0]) == null ? void 0 : _overflowsData$filter2[0]; if (placement2) { resetPlacement = placement2; } break; } case "initialPlacement": resetPlacement = initialPlacement; break; } } if (placement !== resetPlacement) { return { reset: { placement: resetPlacement } }; } } return {}; } }; }; function getSideOffsets(overflow, rect) { return { top: overflow.top - rect.height, right: overflow.right - rect.width, bottom: overflow.bottom - rect.height, left: overflow.left - rect.width }; } function isAnySideFullyClipped(overflow) { return sides.some((side) => overflow[side] >= 0); } var hide = function(options) { if (options === void 0) { options = {}; } return { name: "hide", options, async fn(state) { const { rects } = state; const { strategy = "referenceHidden", ...detectOverflowOptions } = evaluate(options, state); switch (strategy) { case "referenceHidden": { const overflow = await detectOverflow(state, { ...detectOverflowOptions, elementContext: "reference" }); const offsets = getSideOffsets(overflow, rects.reference); return { data: { referenceHiddenOffsets: offsets, referenceHidden: isAnySideFullyClipped(offsets) } }; } case "escaped": { const overflow = await detectOverflow(state, { ...detectOverflowOptions, altBoundary: true }); const offsets = getSideOffsets(overflow, rects.floating); return { data: { escapedOffsets: offsets, escaped: isAnySideFullyClipped(offsets) } }; } default: { return {}; } } } }; }; async function convertValueToCoords(state, options) { const { placement, platform: platform2, elements } = state; const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)); const side = getSide(placement); const alignment = getAlignment(placement); const isVertical = getSideAxis(placement) === "y"; const mainAxisMulti = ["left", "top"].includes(side) ? -1 : 1; const crossAxisMulti = rtl && isVertical ? -1 : 1; const rawValue = evaluate(options, state); let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === "number" ? { mainAxis: rawValue, crossAxis: 0, alignmentAxis: null } : { mainAxis: 0, crossAxis: 0, alignmentAxis: null, ...rawValue }; if (alignment && typeof alignmentAxis === "number") { crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; } return isVertical ? { x: crossAxis * crossAxisMulti, y: mainAxis * mainAxisMulti } : { x: mainAxis * mainAxisMulti, y: crossAxis * crossAxisMulti }; } var offset = function(options) { if (options === void 0) { options = 0; } return { name: "offset", options, async fn(state) { var _middlewareData$offse, _middlewareData$arrow; const { x, y, placement, middlewareData } = state; const diffCoords = await convertValueToCoords(state, options); if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { return {}; } return { x: x + diffCoords.x, y: y + diffCoords.y, data: { ...diffCoords, placement } }; } }; }; var shift = function(options) { if (options === void 0) { options = {}; } return { name: "shift", options, async fn(state) { const { x, y, placement } = state; const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { fn: (_ref) => { let { x: x2, y: y2 } = _ref; return { x: x2, y: y2 }; } }, ...detectOverflowOptions } = evaluate(options, state); const coords = { x, y }; const overflow = await detectOverflow(state, detectOverflowOptions); const crossAxis = getSideAxis(getSide(placement)); const mainAxis = getOppositeAxis(crossAxis); let mainAxisCoord = coords[mainAxis]; let crossAxisCoord = coords[crossAxis]; if (checkMainAxis) { const minSide = mainAxis === "y" ? "top" : "left"; const maxSide = mainAxis === "y" ? "bottom" : "right"; const min2 = mainAxisCoord + overflow[minSide]; const max2 = mainAxisCoord - overflow[maxSide]; mainAxisCoord = clamp2(min2, mainAxisCoord, max2); } if (checkCrossAxis) { const minSide = crossAxis === "y" ? "top" : "left"; const maxSide = crossAxis === "y" ? "bottom" : "right"; const min2 = crossAxisCoord + overflow[minSide]; const max2 = crossAxisCoord - overflow[maxSide]; crossAxisCoord = clamp2(min2, crossAxisCoord, max2); } const limitedCoords = limiter.fn({ ...state, [mainAxis]: mainAxisCoord, [crossAxis]: crossAxisCoord }); return { ...limitedCoords, data: { x: limitedCoords.x - x, y: limitedCoords.y - y } }; } }; }; var size = function(options) { if (options === void 0) { options = {}; } return { name: "size", options, async fn(state) { const { placement, rects, platform: platform2, elements } = state; const { apply = () => { }, ...detectOverflowOptions } = evaluate(options, state); const overflow = await detectOverflow(state, detectOverflowOptions); const side = getSide(placement); const alignment = getAlignment(placement); const isYAxis = getSideAxis(placement) === "y"; const { width, height } = rects.floating; let heightSide; let widthSide; if (side === "top" || side === "bottom") { heightSide = side; widthSide = alignment === (await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; } else { widthSide = side; heightSide = alignment === "end" ? "top" : "bottom"; } const maximumClippingHeight = height - overflow.top - overflow.bottom; const maximumClippingWidth = width - overflow.left - overflow.right; const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); const noShift = !state.middlewareData.shift; let availableHeight = overflowAvailableHeight; let availableWidth = overflowAvailableWidth; if (isYAxis) { availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth; } else { availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight; } if (noShift && !alignment) { const xMin = max(overflow.left, 0); const xMax = max(overflow.right, 0); const yMin = max(overflow.top, 0); const yMax = max(overflow.bottom, 0); if (isYAxis) { availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); } else { availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); } } await apply({ ...state, availableWidth, availableHeight }); const nextDimensions = await platform2.getDimensions(elements.floating); if (width !== nextDimensions.width || height !== nextDimensions.height) { return { reset: { rects: true } }; } return {}; } }; }; function getNodeName(node) { if (isNode(node)) { return (node.nodeName || "").toLowerCase(); } return "#document"; } function getWindow2(node) { var _node$ownerDocument; return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; } function getDocumentElement(node) { var _ref; return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; } function isNode(value) { return value instanceof Node || value instanceof getWindow2(value).Node; } function isElement(value) { return value instanceof Element || value instanceof getWindow2(value).Element; } function isHTMLElement(value) { return value instanceof HTMLElement || value instanceof getWindow2(value).HTMLElement; } function isShadowRoot(value) { if (typeof ShadowRoot === "undefined") { return false; } return value instanceof ShadowRoot || value instanceof getWindow2(value).ShadowRoot; } function isOverflowElement(element) { const { overflow, overflowX, overflowY, display } = getComputedStyle2(element); return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !["inline", "contents"].includes(display); } function isTableElement(element) { return ["table", "td", "th"].includes(getNodeName(element)); } function isTopLayer(element) { return [":popover-open", ":modal"].some((selector) => { try { return element.matches(selector); } catch (e2) { return false; } }); } function isContainingBlock(elementOrCss) { const webkit = isWebKit(); const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; 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)); } function getContainingBlock(element) { let currentNode = getParentNode(element); while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { if (isContainingBlock(currentNode)) { return currentNode; } else if (isTopLayer(currentNode)) { return null; } currentNode = getParentNode(currentNode); } return null; } function isWebKit() { if (typeof CSS === "undefined" || !CSS.supports) return false; return CSS.supports("-webkit-backdrop-filter", "none"); } function isLastTraversableNode(node) { return ["html", "body", "#document"].includes(getNodeName(node)); } function getComputedStyle2(element) { return getWindow2(element).getComputedStyle(element); } function getNodeScroll(element) { if (isElement(element)) { return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop }; } return { scrollLeft: element.scrollX, scrollTop: element.scrollY }; } function getParentNode(node) { if (getNodeName(node) === "html") { return node; } const result = ( // Step into the shadow DOM of the parent of a slotted node. node.assignedSlot || // DOM Element detected. node.parentNode || // ShadowRoot detected. isShadowRoot(node) && node.host || // Fallback. getDocumentElement(node) ); return isShadowRoot(result) ? result.host : result; } function getNearestOverflowAncestor(node) { const parentNode = getParentNode(node); if (isLastTraversableNode(parentNode)) { return node.ownerDocument ? node.ownerDocument.body : node.body; } if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { return parentNode; } return getNearestOverflowAncestor(parentNode); } function getOverflowAncestors(node, list, traverseIframes) { var _node$ownerDocument2; if (list === void 0) { list = []; } if (traverseIframes === void 0) { traverseIframes = true; } const scrollableAncestor = getNearestOverflowAncestor(node); const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); const win = getWindow2(scrollableAncestor); if (isBody) { return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []); } return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); } function getCssDimensions(element) { const css = getComputedStyle2(element); let width = parseFloat(css.width) || 0; let height = parseFloat(css.height) || 0; const hasOffset = isHTMLElement(element); const offsetWidth = hasOffset ? element.offsetWidth : width; const offsetHeight = hasOffset ? element.offsetHeight : height; const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; if (shouldFallback) { width = offsetWidth; height = offsetHeight; } return { width, height, $: shouldFallback }; } function unwrapElement(element) { return !isElement(element) ? element.contextElement : element; } function getScale(element) { const domElement = unwrapElement(element); if (!isHTMLElement(domElement)) { return createCoords(1); } const rect = domElement.getBoundingClientRect(); const { width, height, $ } = getCssDimensions(domElement); let x = ($ ? round(rect.width) : rect.width) / width; let y = ($ ? round(rect.height) : rect.height) / height; if (!x || !Number.isFinite(x)) { x = 1; } if (!y || !Number.isFinite(y)) { y = 1; } return { x, y }; } var noOffsets = createCoords(0); function getVisualOffsets(element) { const win = getWindow2(element); if (!isWebKit() || !win.visualViewport) { return noOffsets; } return { x: win.visualViewport.offsetLeft, y: win.visualViewport.offsetTop }; } function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { if (isFixed === void 0) { isFixed = false; } if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow2(element)) { return false; } return isFixed; } function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { if (includeScale === void 0) { includeScale = false; } if (isFixedStrategy === void 0) { isFixedStrategy = false; } const clientRect = element.getBoundingClientRect(); const domElement = unwrapElement(element); let scale = createCoords(1); if (includeScale) { if (offsetParent) { if (isElement(offsetParent)) { scale = getScale(offsetParent); } } else { scale = getScale(element); } } const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); let x = (clientRect.left + visualOffsets.x) / scale.x; let y = (clientRect.top + visualOffsets.y) / scale.y; let width = clientRect.width / scale.x; let height = clientRect.height / scale.y; if (domElement) { const win = getWindow2(domElement); const offsetWin = offsetParent && isElement(offsetParent) ? getWindow2(offsetParent) : offsetParent; let currentWin = win; let currentIFrame = currentWin.frameElement; while (currentIFrame && offsetParent && offsetWin !== currentWin) { const iframeScale = getScale(currentIFrame); const iframeRect = currentIFrame.getBoundingClientRect(); const css = getComputedStyle2(currentIFrame); const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; x *= iframeScale.x; y *= iframeScale.y; width *= iframeScale.x; height *= iframeScale.y; x += left; y += top; currentWin = getWindow2(currentIFrame); currentIFrame = currentWin.frameElement; } } return rectToClientRect({ width, height, x, y }); } function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { let { elements, rect, offsetParent, strategy } = _ref; const isFixed = strategy === "fixed"; const documentElement = getDocumentElement(offsetParent); const topLayer = elements ? isTopLayer(elements.floating) : false; if (offsetParent === documentElement || topLayer && isFixed) { return rect; } let scroll = { scrollLeft: 0, scrollTop: 0 }; let scale = createCoords(1); const offsets = createCoords(0); const isOffsetParentAnElement = isHTMLElement(offsetParent); if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isHTMLElement(offsetParent)) { const offsetRect = getBoundingClientRect(offsetParent); scale = getScale(offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } } return { width: rect.width * scale.x, height: rect.height * scale.y, x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x, y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y }; } function getClientRects(element) { return Array.from(element.getClientRects()); } function getWindowScrollBarX(element) { return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft; } function getDocumentRect(element) { const html = getDocumentElement(element); const scroll = getNodeScroll(element); const body = element.ownerDocument.body; const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); let x = -scroll.scrollLeft + getWindowScrollBarX(element); const y = -scroll.scrollTop; if (getComputedStyle2(body).direction === "rtl") { x += max(html.clientWidth, body.clientWidth) - width; } return { width, height, x, y }; } function getViewportRect(element, strategy) { const win = getWindow2(element); const html = getDocumentElement(element); const visualViewport = win.visualViewport; let width = html.clientWidth; let height = html.clientHeight; let x = 0; let y = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; const visualViewportBased = isWebKit(); if (!visualViewportBased || visualViewportBased && strategy === "fixed") { x = visualViewport.offsetLeft; y = visualViewport.offsetTop; } } return { width, height, x, y }; } function getInnerBoundingClientRect(element, strategy) { const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); const top = clientRect.top + element.clientTop; const left = clientRect.left + element.clientLeft; const scale = isHTMLElement(element) ? getScale(element) : createCoords(1); const width = element.clientWidth * scale.x; const height = element.clientHeight * scale.y; const x = left * scale.x; const y = top * scale.y; return { width, height, x, y }; } function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { let rect; if (clippingAncestor === "viewport") { rect = getViewportRect(element, strategy); } else if (clippingAncestor === "document") { rect = getDocumentRect(getDocumentElement(element)); } else if (isElement(clippingAncestor)) { rect = getInnerBoundingClientRect(clippingAncestor, strategy); } else { const visualOffsets = getVisualOffsets(element); rect = { ...clippingAncestor, x: clippingAncestor.x - visualOffsets.x, y: clippingAncestor.y - visualOffsets.y }; } return rectToClientRect(rect); } function hasFixedPositionAncestor(element, stopNode) { const parentNode = getParentNode(element); if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) { return false; } return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode); } function getClippingElementAncestors(element, cache2) { const cachedResult = cache2.get(element); if (cachedResult) { return cachedResult; } let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); let currentContainingBlockComputedStyle = null; const elementIsFixed = getComputedStyle2(element).position === "fixed"; let currentNode = elementIsFixed ? getParentNode(element) : element; while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { const computedStyle = getComputedStyle2(currentNode); const currentNodeIsContaining = isContainingBlock(currentNode); if (!currentNodeIsContaining && computedStyle.position === "fixed") { currentContainingBlockComputedStyle = null; } const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && ["absolute", "fixed"].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); if (shouldDropCurrentNode) { result = result.filter((ancestor) => ancestor !== currentNode); } else { currentContainingBlockComputedStyle = computedStyle; } currentNode = getParentNode(currentNode); } cache2.set(element, result); return result; } function getClippingRect(_ref) { let { element, boundary, rootBoundary, strategy } = _ref; const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); const clippingAncestors = [...elementClippingAncestors, rootBoundary]; const firstClippingAncestor = clippingAncestors[0]; const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => { const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy); accRect.top = max(rect.top, accRect.top); accRect.right = min(rect.right, accRect.right); accRect.bottom = min(rect.bottom, accRect.bottom); accRect.left = max(rect.left, accRect.left); return accRect; }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy)); return { width: clippingRect.right - clippingRect.left, height: clippingRect.bottom - clippingRect.top, x: clippingRect.left, y: clippingRect.top }; } function getDimensions(element) { const { width, height } = getCssDimensions(element); return { width, height }; } function getRectRelativeToOffsetParent(element, offsetParent, strategy) { const isOffsetParentAnElement = isHTMLElement(offsetParent); const documentElement = getDocumentElement(offsetParent); const isFixed = strategy === "fixed"; const rect = getBoundingClientRect(element, true, isFixed, offsetParent); let scroll = { scrollLeft: 0, scrollTop: 0 }; const offsets = createCoords(0); if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isOffsetParentAnElement) { const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } else if (documentElement) { offsets.x = getWindowScrollBarX(documentElement); } } const x = rect.left + scroll.scrollLeft - offsets.x; const y = rect.top + scroll.scrollTop - offsets.y; return { x, y, width: rect.width, height: rect.height }; } function isStaticPositioned(element) { return getComputedStyle2(element).position === "static"; } function getTrueOffsetParent(element, polyfill) { if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { return null; } if (polyfill) { return polyfill(element); } return element.offsetParent; } function getOffsetParent(element, polyfill) { const win = getWindow2(element); if (isTopLayer(element)) { return win; } if (!isHTMLElement(element)) { let svgOffsetParent = getParentNode(element); while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { return svgOffsetParent; } svgOffsetParent = getParentNode(svgOffsetParent); } return win; } let offsetParent = getTrueOffsetParent(element, polyfill); while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { offsetParent = getTrueOffsetParent(offsetParent, polyfill); } if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { return win; } return offsetParent || getContainingBlock(element) || win; } var getElementRects = async function(data) { const getOffsetParentFn = this.getOffsetParent || getOffsetParent; const getDimensionsFn = this.getDimensions; const floatingDimensions = await getDimensionsFn(data.floating); return { reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), floating: { x: 0, y: 0, width: floatingDimensions.width, height: floatingDimensions.height } }; }; function isRTL2(element) { return getComputedStyle2(element).direction === "rtl"; } var platform = { convertOffsetParentRelativeRectToViewportRelativeRect, getDocumentElement, getClippingRect, getOffsetParent, getElementRects, getClientRects, getDimensions, getScale, isElement, isRTL: isRTL2 }; function observeMove(element, onMove) { let io = null; let timeoutId; const root = getDocumentElement(element); function cleanup() { var _io; clearTimeout(timeoutId); (_io = io) == null || _io.disconnect(); io = null; } function refresh(skip, threshold) { if (skip === void 0) { skip = false; } if (threshold === void 0) { threshold = 1; } cleanup(); const { left, top, width, height } = element.getBoundingClientRect(); if (!skip) { onMove(); } if (!width || !height) { return; } const insetTop = floor(top); const insetRight = floor(root.clientWidth - (left + width)); const insetBottom = floor(root.clientHeight - (top + height)); const insetLeft = floor(left); const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; const options = { rootMargin, threshold: max(0, min(1, threshold)) || 1 }; let isFirstUpdate = true; function handleObserve(entries2) { const ratio = entries2[0].intersectionRatio; if (ratio !== threshold) { if (!isFirstUpdate) { return refresh(); } if (!ratio) { timeoutId = setTimeout(() => { refresh(false, 1e-7); }, 1e3); } else { refresh(false, ratio); } } isFirstUpdate = false; } try { io = new IntersectionObserver(handleObserve, { ...options, // Handle