import { C as vShow, Cn as withDirectives, Dt as mergeProps, Ft as onMounted, Gn as readonly, I as Teleport, Kn as ref, M as Fragment, Mn as effectScope, Ot as nextTick, Qn as toRef, U as computed, Ut as provide, Vn as onScopeDispose, W as createBaseVNode, Wn as reactive, Yn as shallowRef, Zn as toRaw, _n as watchEffect, er as toValue, et as createVNode, gn as watch, hn as warn, jt as onBeforeUnmount, n as Transition, xt as inject } from "./vue.runtime.esm-bundler-BvoXUmaf.js"; import { B as matchesSelector, C as eventName, H as omit, L as isOn, Q as IN_BROWSER, Y as templateRef, _ as convertToUnit, g as clamp, l as propsFactory, n as genericComponent, rt as consoleError, s as getCurrentInstance, u as CircularBuffer, x as destructComputed } from "./defineComponent-DB6xIcDy.js"; import { a as parseAnchor, i as getAxis, n as flipCorner, r as flipSide, t as flipAlign } from "./anchor-DB_quObT.js"; import { i as getTargetBox, n as getElementBox, r as getOverflow, t as Box } from "./box-BNWMOtF7.js"; import { c as nullifyTransforms, s as animate } from "./transitions-DCQ3sjjZ.js"; import { t as makeComponentProps } from "./component-DdiwBe6i.js"; import { t as deepEqual } from "./deepEqual-DDqmGqyF.js"; import "./easing-DfcvkbkS.js"; import { n as getScrollParents, r as hasScrollbar, t as getScrollParent } from "./getScrollParent-DuXs8SPu.js"; import { t as useRender } from "./useRender-fVtVsZgv.js"; import { t as useBackgroundColor } from "./color-B6vuQruj.js"; import { i as provideTheme, r as makeThemeProps } from "./theme-Cx5kFg0-.js"; import { n as useToggleScope, t as useProxiedModel } from "./proxiedModel-DSlSIQ0y.js"; import { i as useRtl } from "./locale-DDGMqzqb.js"; import { a as useDisplay } from "./display-DKaCj-_K.js"; import { n as useDimension, t as makeDimensionProps } from "./dimensions-BDdmuRdK.js"; import { n as makeTransitionProps, t as MaybeTransition } from "./transition-DqoZ8fA1.js"; import { i as useRouter, n as useBackButton } from "./router-D_jP4Uwb.js"; import { i as useDelay, n as useFocusTrap, r as makeDelayProps, t as makeFocusTrapProps } from "./focusTrap-rHoJd0qS.js"; import { n as useLazy, t as makeLazyProps } from "./lazy-DhsobH97.js"; import { t as useScopeId } from "./scopeId-CyMkmyzM.js"; import "/Users/thackmaster/Development/routie2/frontend/node_modules/vuetify/lib/components/VOverlay/VOverlay.css"; //#region node_modules/vuetify/lib/util/bindProps.js var handlers = /* @__PURE__ */ new WeakMap(); function bindProps(el, props) { Object.keys(props).forEach((k) => { if (isOn(k)) { const name = eventName(k); const handler = handlers.get(el); if (props[k] == null) handler?.forEach((v) => { const [n, fn] = v; if (n === name) { el.removeEventListener(name, fn); handler.delete(v); } }); else if (!handler || ![...handler]?.some((v) => v[0] === name && v[1] === props[k])) { el.addEventListener(name, props[k]); const _handler = handler || /* @__PURE__ */ new Set(); _handler.add([name, props[k]]); if (!handlers.has(el)) handlers.set(el, _handler); } } else if (props[k] == null) el.removeAttribute(k); else el.setAttribute(k, props[k]); }); } function unbindProps(el, props) { Object.keys(props).forEach((k) => { if (isOn(k)) { const name = eventName(k); const handler = handlers.get(el); handler?.forEach((v) => { const [n, fn] = v; if (n === name) { el.removeEventListener(name, fn); handler.delete(v); } }); } else el.removeAttribute(k); }); } //#endregion //#region node_modules/vuetify/lib/util/dom.js /** * Returns: * - 'null' if the node is not attached to the DOM * - the root node (HTMLDocument | ShadowRoot) otherwise */ function attachedRoot(node) { /* istanbul ignore next */ if (typeof node.getRootNode !== "function") { while (node.parentNode) node = node.parentNode; if (node !== document) return null; return document; } const root = node.getRootNode(); if (root !== document && root.getRootNode({ composed: true }) !== document) return null; return root; } //#endregion //#region node_modules/vuetify/lib/util/isFixedPosition.js function isFixedPosition(el) { while (el) { if (window.getComputedStyle(el).position === "fixed") return true; el = el.offsetParent; } return false; } //#endregion //#region node_modules/vuetify/lib/components/VOverlay/util/point.js /** Convert a point in local space to viewport space */ function elementToViewport(point, offset) { return { x: point.x + offset.x, y: point.y + offset.y }; } /** Get the difference between two points */ function getOffset(a, b) { return { x: a.x - b.x, y: a.y - b.y }; } /** Convert an anchor object to a point in local space */ function anchorToPoint(anchor, box) { if (anchor.side === "top" || anchor.side === "bottom") { const { side, align } = anchor; return elementToViewport({ x: align === "left" ? 0 : align === "center" ? box.width / 2 : align === "right" ? box.width : align, y: side === "top" ? 0 : side === "bottom" ? box.height : side }, box); } else if (anchor.side === "left" || anchor.side === "right") { const { side, align } = anchor; return elementToViewport({ x: side === "left" ? 0 : side === "right" ? box.width : side, y: align === "top" ? 0 : align === "center" ? box.height / 2 : align === "bottom" ? box.height : align }, box); } return elementToViewport({ x: box.width / 2, y: box.height / 2 }, box); } //#endregion //#region node_modules/vuetify/lib/components/VOverlay/locationStrategies.js var locationStrategies = { static: staticLocationStrategy, connected: connectedLocationStrategy }; var makeLocationStrategyProps = propsFactory({ locationStrategy: { type: [String, Function], default: "static", validator: (val) => typeof val === "function" || val in locationStrategies }, location: { type: String, default: "bottom" }, origin: { type: String, default: "auto" }, offset: [ Number, String, Array ], stickToTarget: Boolean, viewportMargin: { type: [Number, String], default: 12 } }, "VOverlay-location-strategies"); function useLocationStrategies(props, data) { const contentStyles = ref({}); const updateLocation = ref(); if (IN_BROWSER) useToggleScope(() => !!(data.isActive.value && props.locationStrategy), (reset) => { watch(() => props.locationStrategy, reset); onScopeDispose(() => { window.removeEventListener("resize", onResize); visualViewport?.removeEventListener("resize", onVisualResize); visualViewport?.removeEventListener("scroll", onVisualScroll); updateLocation.value = void 0; }); window.addEventListener("resize", onResize, { passive: true }); visualViewport?.addEventListener("resize", onVisualResize, { passive: true }); visualViewport?.addEventListener("scroll", onVisualScroll, { passive: true }); if (typeof props.locationStrategy === "function") updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation; else updateLocation.value = locationStrategies[props.locationStrategy](data, props, contentStyles)?.updateLocation; }); function onResize(e) { updateLocation.value?.(e); } function onVisualResize(e) { updateLocation.value?.(e); } function onVisualScroll(e) { updateLocation.value?.(e); } return { contentStyles, updateLocation }; } function staticLocationStrategy() {} /** Get size of element ignoring max-width/max-height */ function getIntrinsicSize(el, isRtl) { const contentBox = nullifyTransforms(el); if (isRtl) contentBox.x += parseFloat(el.style.right || 0); else contentBox.x -= parseFloat(el.style.left || 0); contentBox.y -= parseFloat(el.style.top || 0); return contentBox; } function connectedLocationStrategy(data, props, contentStyles) { if (Array.isArray(data.target.value) || isFixedPosition(data.target.value)) Object.assign(contentStyles.value, { position: "fixed", top: 0, [data.isRtl.value ? "right" : "left"]: 0 }); const { preferredAnchor, preferredOrigin } = destructComputed(() => { const parsedAnchor = parseAnchor(props.location, data.isRtl.value); const parsedOrigin = props.origin === "overlap" ? parsedAnchor : props.origin === "auto" ? flipSide(parsedAnchor) : parseAnchor(props.origin, data.isRtl.value); if (parsedAnchor.side === parsedOrigin.side && parsedAnchor.align === flipAlign(parsedOrigin).align) return { preferredAnchor: flipCorner(parsedAnchor), preferredOrigin: flipCorner(parsedOrigin) }; else return { preferredAnchor: parsedAnchor, preferredOrigin: parsedOrigin }; }); const [minWidth, minHeight, maxWidth, maxHeight] = [ "minWidth", "minHeight", "maxWidth", "maxHeight" ].map((key) => { return computed(() => { const val = parseFloat(props[key]); return isNaN(val) ? Infinity : val; }); }); const offset = computed(() => { if (Array.isArray(props.offset)) return props.offset; if (typeof props.offset === "string") { const offset = props.offset.split(" ").map(parseFloat); if (offset.length < 2) offset.push(0); return offset; } return typeof props.offset === "number" ? [props.offset, 0] : [0, 0]; }); let observe = false; let lastFrame = -1; const flipped = new CircularBuffer(4); const observer = new ResizeObserver(() => { if (!observe) return; requestAnimationFrame((newTime) => { if (newTime !== lastFrame) flipped.clear(); requestAnimationFrame((newNewTime) => { lastFrame = newNewTime; }); }); if (flipped.isFull) { const values = flipped.values(); if (deepEqual(values.at(-1), values.at(-3)) && !deepEqual(values.at(-1), values.at(-2))) return; } const result = updateLocation(); if (result) flipped.push(result.flipped); }); let targetBox = new Box({ x: 0, y: 0, width: 0, height: 0 }); watch(data.target, (newTarget, oldTarget) => { if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget); if (!Array.isArray(newTarget)) { if (newTarget) observer.observe(newTarget); } else if (!deepEqual(newTarget, oldTarget)) updateLocation(); }, { immediate: true }); watch(data.contentEl, (newContentEl, oldContentEl) => { if (oldContentEl) observer.unobserve(oldContentEl); if (newContentEl) observer.observe(newContentEl); }, { immediate: true }); onScopeDispose(() => { observer.disconnect(); }); function updateLocation() { observe = false; requestAnimationFrame(() => observe = true); if (!data.target.value || !data.contentEl.value) return; if (Array.isArray(data.target.value) || data.target.value.offsetParent || data.target.value.getClientRects().length) targetBox = getTargetBox(data.target.value); const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value); const scrollParents = getScrollParents(data.contentEl.value); const viewportMargin = Number(props.viewportMargin); if (!scrollParents.length) { scrollParents.push(document.documentElement); if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) { contentBox.x -= parseFloat(document.documentElement.style.getPropertyValue("--v-body-scroll-x") || 0); contentBox.y -= parseFloat(document.documentElement.style.getPropertyValue("--v-body-scroll-y") || 0); } } const viewport = scrollParents.reduce((box, el) => { const scrollBox = getElementBox(el); if (box) return new Box({ x: Math.max(box.left, scrollBox.left), y: Math.max(box.top, scrollBox.top), width: Math.min(box.right, scrollBox.right) - Math.max(box.left, scrollBox.left), height: Math.min(box.bottom, scrollBox.bottom) - Math.max(box.top, scrollBox.top) }); return scrollBox; }, void 0); if (props.stickToTarget) { viewport.x += Math.min(viewportMargin, targetBox.x); viewport.y += Math.min(viewportMargin, targetBox.y); viewport.width = Math.max(viewport.width - viewportMargin * 2, targetBox.x + targetBox.width - viewportMargin); viewport.height = Math.max(viewport.height - viewportMargin * 2, targetBox.y + targetBox.height - viewportMargin); } else { viewport.x += viewportMargin; viewport.y += viewportMargin; viewport.width -= viewportMargin * 2; viewport.height -= viewportMargin * 2; } let placement = { anchor: preferredAnchor.value, origin: preferredOrigin.value }; function checkOverflow(_placement) { const box = new Box(contentBox); let { x, y } = getOffset(anchorToPoint(_placement.anchor, targetBox), anchorToPoint(_placement.origin, box)); switch (_placement.anchor.side) { case "top": y -= offset.value[0]; break; case "bottom": y += offset.value[0]; break; case "left": x -= offset.value[0]; break; case "right": x += offset.value[0]; break; } switch (_placement.anchor.align) { case "top": y -= offset.value[1]; break; case "bottom": y += offset.value[1]; break; case "left": x -= offset.value[1]; break; case "right": x += offset.value[1]; break; } box.x += x; box.y += y; box.width = Math.min(box.width, maxWidth.value); box.height = Math.min(box.height, maxHeight.value); return { overflows: getOverflow(box, viewport), x, y }; } let x = 0; let y = 0; const available = { x: 0, y: 0 }; const flipped = { x: false, y: false }; let resets = -1; while (true) { if (resets++ > 10) { consoleError("Infinite loop detected in connectedLocationStrategy"); break; } const { x: _x, y: _y, overflows } = checkOverflow(placement); x += _x; y += _y; contentBox.x += _x; contentBox.y += _y; { const axis = getAxis(placement.anchor); const hasOverflowX = overflows.x.before || overflows.x.after; const hasOverflowY = overflows.y.before || overflows.y.after; let reset = false; ["x", "y"].forEach((key) => { if (key === "x" && hasOverflowX && !flipped.x || key === "y" && hasOverflowY && !flipped.y) { const newPlacement = { anchor: { ...placement.anchor }, origin: { ...placement.origin } }; const flip = key === "x" ? axis === "y" ? flipAlign : flipSide : axis === "y" ? flipSide : flipAlign; newPlacement.anchor = flip(newPlacement.anchor); newPlacement.origin = flip(newPlacement.origin); const { overflows: newOverflows } = checkOverflow(newPlacement); if (newOverflows[key].before <= overflows[key].before && newOverflows[key].after <= overflows[key].after || newOverflows[key].before + newOverflows[key].after < (overflows[key].before + overflows[key].after) / 2) { placement = newPlacement; reset = flipped[key] = true; } } }); if (reset) continue; } if (overflows.x.before) { x += overflows.x.before; contentBox.x += overflows.x.before; } if (overflows.x.after) { x -= overflows.x.after; contentBox.x -= overflows.x.after; } if (overflows.y.before) { y += overflows.y.before; contentBox.y += overflows.y.before; } if (overflows.y.after) { y -= overflows.y.after; contentBox.y -= overflows.y.after; } { const overflows = getOverflow(contentBox, viewport); available.x = viewport.width - overflows.x.before - overflows.x.after; available.y = viewport.height - overflows.y.before - overflows.y.after; x += overflows.x.before; contentBox.x += overflows.x.before; y += overflows.y.before; contentBox.y += overflows.y.before; } break; } const axis = getAxis(placement.anchor); Object.assign(contentStyles.value, { "--v-overlay-anchor-origin": `${placement.anchor.side} ${placement.anchor.align}`, transformOrigin: `${placement.origin.side} ${placement.origin.align}`, top: convertToUnit(pixelRound(y)), left: data.isRtl.value ? void 0 : convertToUnit(pixelRound(x)), right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : void 0, minWidth: convertToUnit(axis === "y" ? Math.min(minWidth.value, targetBox.width) : minWidth.value), maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))), maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value))) }); return { available, contentBox, flipped }; } watch(() => [ preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight ], () => updateLocation()); nextTick(() => { const result = updateLocation(); if (!result) return; const { available, contentBox } = result; if (contentBox.height > available.y) requestAnimationFrame(() => { updateLocation(); requestAnimationFrame(() => { updateLocation(); }); }); }); return { updateLocation }; } function pixelRound(val) { return Math.round(val * devicePixelRatio) / devicePixelRatio; } function pixelCeil(val) { return Math.ceil(val * devicePixelRatio) / devicePixelRatio; } //#endregion //#region node_modules/vuetify/lib/components/VOverlay/requestNewFrame.js var clean = true; var frames = []; /** * Schedule a task to run in an animation frame on its own * This is useful for heavy tasks that may cause jank if all ran together */ function requestNewFrame(cb) { if (!clean || frames.length) { frames.push(cb); run(); } else { clean = false; cb(); run(); } } var raf = -1; function run() { cancelAnimationFrame(raf); raf = requestAnimationFrame(() => { const frame = frames.shift(); if (frame) frame(); if (frames.length) run(); else clean = true; }); } //#endregion //#region node_modules/vuetify/lib/components/VOverlay/scrollStrategies.js var scrollStrategies = { none: null, close: closeScrollStrategy, block: blockScrollStrategy, reposition: repositionScrollStrategy }; var makeScrollStrategyProps = propsFactory({ scrollStrategy: { type: [String, Function], default: "block", validator: (val) => typeof val === "function" || val in scrollStrategies } }, "VOverlay-scroll-strategies"); function useScrollStrategies(props, data) { if (!IN_BROWSER) return; let scope; watchEffect(async () => { scope?.stop(); if (!(data.isActive.value && props.scrollStrategy)) return; scope = effectScope(); await new Promise((resolve) => setTimeout(resolve)); scope.active && scope.run(() => { if (typeof props.scrollStrategy === "function") props.scrollStrategy(data, props, scope); else scrollStrategies[props.scrollStrategy]?.(data, props, scope); }); }); onScopeDispose(() => { scope?.stop(); }); } function closeScrollStrategy(data) { function onScroll(e) { data.isActive.value = false; } bindScroll(getTargetEl(data.target.value, data.contentEl.value), onScroll); } function blockScrollStrategy(data, props) { const offsetParent = data.root.value?.offsetParent; const target = getTargetEl(data.target.value, data.contentEl.value); const scrollElements = [...new Set([...getScrollParents(target, props.contained ? offsetParent : void 0), ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : void 0)])].filter((el) => !el.classList.contains("v-overlay-scroll-blocked")); const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth; const scrollableParent = ((el) => hasScrollbar(el) && el)(offsetParent || document.documentElement); if (scrollableParent) data.root.value.classList.add("v-overlay--scroll-blocked"); scrollElements.forEach((el, i) => { el.style.setProperty("--v-body-scroll-x", convertToUnit(-el.scrollLeft)); el.style.setProperty("--v-body-scroll-y", convertToUnit(-el.scrollTop)); if (el !== document.documentElement || getComputedStyle(el).overflowY !== "scroll") el.style.setProperty("--v-scrollbar-offset", convertToUnit(scrollbarWidth)); el.classList.add("v-overlay-scroll-blocked"); }); onScopeDispose(() => { scrollElements.forEach((el, i) => { const x = parseFloat(el.style.getPropertyValue("--v-body-scroll-x")); const y = parseFloat(el.style.getPropertyValue("--v-body-scroll-y")); const scrollBehavior = el.style.scrollBehavior; el.style.scrollBehavior = "auto"; el.style.removeProperty("--v-body-scroll-x"); el.style.removeProperty("--v-body-scroll-y"); el.style.removeProperty("--v-scrollbar-offset"); el.classList.remove("v-overlay-scroll-blocked"); el.scrollLeft = -x; el.scrollTop = -y; el.style.scrollBehavior = scrollBehavior; }); if (scrollableParent) data.root.value.classList.remove("v-overlay--scroll-blocked"); }); } function repositionScrollStrategy(data, props, scope) { let slow = false; let raf = -1; let ric = -1; function update(e) { requestNewFrame(() => { const start = performance.now(); data.updateLocation.value?.(e); slow = (performance.now() - start) / (1e3 / 60) > 2; }); } ric = (typeof requestIdleCallback === "undefined" ? (cb) => cb() : requestIdleCallback)(() => { scope.run(() => { bindScroll(getTargetEl(data.target.value, data.contentEl.value), (e) => { if (slow) { cancelAnimationFrame(raf); raf = requestAnimationFrame(() => { raf = requestAnimationFrame(() => { update(e); }); }); } else update(e); }); }); }); onScopeDispose(() => { typeof cancelIdleCallback !== "undefined" && cancelIdleCallback(ric); cancelAnimationFrame(raf); }); } function getTargetEl(target, contentEl) { return Array.isArray(target) ? document.elementsFromPoint(...target).find((el) => !contentEl?.contains(el)) : target ?? contentEl; } function bindScroll(el, onScroll) { const scrollElements = [document, ...getScrollParents(el)]; scrollElements.forEach((el) => { el.addEventListener("scroll", onScroll, { passive: true }); }); onScopeDispose(() => { scrollElements.forEach((el) => { el.removeEventListener("scroll", onScroll); }); }); } //#endregion //#region node_modules/vuetify/lib/components/VMenu/shared.js var VMenuSymbol = Symbol.for("vuetify:v-menu"); //#endregion //#region node_modules/vuetify/lib/components/VOverlay/useActivator.js var makeActivatorProps = propsFactory({ target: [String, Object], activator: [String, Object], activatorProps: { type: Object, default: () => ({}) }, openOnClick: { type: Boolean, default: void 0 }, openOnHover: Boolean, openOnFocus: { type: Boolean, default: void 0 }, closeOnContentClick: Boolean, ...makeDelayProps() }, "VOverlay-activator"); function useActivator(props, { isActive, isTop, contentEl }) { const vm = getCurrentInstance("useActivator"); const activatorEl = ref(); let isHovered = false; let isFocused = false; let firstEnter = true; const openOnFocus = computed(() => props.openOnFocus || props.openOnFocus == null && props.openOnHover); const openOnClick = computed(() => props.openOnClick || props.openOnClick == null && !props.openOnHover && !openOnFocus.value); const { runOpenDelay, runCloseDelay } = useDelay(props, (value) => { if (value === (props.openOnHover && isHovered || openOnFocus.value && isFocused) && !(props.openOnHover && isActive.value && !isTop.value)) { if (isActive.value !== value) firstEnter = true; isActive.value = value; } }); const cursorTarget = ref(); const availableEvents = { onClick: (e) => { e.stopPropagation(); activatorEl.value = e.currentTarget || e.target; if (!isActive.value) cursorTarget.value = [e.clientX, e.clientY]; isActive.value = !isActive.value; }, onMouseenter: (e) => { isHovered = true; activatorEl.value = e.currentTarget || e.target; runOpenDelay(); }, onMouseleave: (e) => { isHovered = false; runCloseDelay(); }, onFocus: (e) => { if (matchesSelector(e.target, ":focus-visible") === false) return; isFocused = true; e.stopPropagation(); activatorEl.value = e.currentTarget || e.target; runOpenDelay(); }, onBlur: (e) => { isFocused = false; e.stopPropagation(); runCloseDelay({ minDelay: 1 }); } }; const activatorEvents = computed(() => { const events = {}; if (openOnClick.value) events.onClick = availableEvents.onClick; if (props.openOnHover) { events.onMouseenter = availableEvents.onMouseenter; events.onMouseleave = availableEvents.onMouseleave; } if (openOnFocus.value) { events.onFocus = availableEvents.onFocus; events.onBlur = availableEvents.onBlur; } return events; }); const contentEvents = computed(() => { const events = {}; if (props.openOnHover) { events.onMouseenter = () => { isHovered = true; runOpenDelay(); }; events.onMouseleave = () => { isHovered = false; runCloseDelay(); }; } if (openOnFocus.value) { events.onFocusin = (e) => { if (!e.target.matches(":focus-visible")) return; isFocused = true; runOpenDelay(); }; events.onFocusout = () => { isFocused = false; runCloseDelay({ minDelay: 1 }); }; } if (props.closeOnContentClick) { const menu = inject(VMenuSymbol, null); events.onClick = () => { isActive.value = false; menu?.closeParents(); }; } return events; }); const scrimEvents = computed(() => { const events = {}; if (props.openOnHover) { events.onMouseenter = () => { if (firstEnter) { isHovered = true; firstEnter = false; runOpenDelay(); } }; events.onMouseleave = () => { isHovered = false; runCloseDelay(); }; } return events; }); watch(isTop, (val) => { if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(document.activeElement)) runCloseDelay(); }); watch(isActive, (val) => { if (!val) setTimeout(() => { cursorTarget.value = void 0; }); }, { flush: "post" }); const activatorRef = templateRef(); watchEffect(() => { if (!activatorRef.value) return; nextTick(() => { activatorEl.value = activatorRef.el; }); }); const targetRef = templateRef(); const target = computed(() => { if (props.target === "cursor" && cursorTarget.value) return cursorTarget.value; if (targetRef.value) return targetRef.el; return getTarget(props.target, vm) || activatorEl.value; }); const targetEl = computed(() => { return Array.isArray(target.value) ? void 0 : target.value; }); let scope; watch(() => !!props.activator, (val) => { if (val && IN_BROWSER) { scope = effectScope(); scope.run(() => { _useActivator(props, vm, { activatorEl, activatorEvents }); }); } else if (scope) scope.stop(); }, { flush: "post", immediate: true }); onScopeDispose(() => { scope?.stop(); }); return { activatorEl, activatorRef, target, targetEl, targetRef, activatorEvents, contentEvents, scrimEvents }; } function _useActivator(props, vm, { activatorEl, activatorEvents }) { watch(() => props.activator, (val, oldVal) => { if (oldVal && val !== oldVal) { const activator = getActivator(oldVal); activator && unbindActivatorProps(activator); } if (val) nextTick(() => bindActivatorProps()); }, { immediate: true }); watch(() => props.activatorProps, () => { bindActivatorProps(); }); onScopeDispose(() => { unbindActivatorProps(); }); function bindActivatorProps(el = getActivator(), _props = props.activatorProps) { if (!el) return; bindProps(el, mergeProps(activatorEvents.value, _props)); } function unbindActivatorProps(el = getActivator(), _props = props.activatorProps) { if (!el) return; unbindProps(el, mergeProps(activatorEvents.value, _props)); } function getActivator(selector = props.activator) { const activator = getTarget(selector, vm); activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : void 0; return activatorEl.value; } } function getTarget(selector, vm) { if (!selector) return; let target; if (selector === "parent") { let el = vm?.proxy?.$el?.parentNode; while (el?.hasAttribute("data-no-activator")) el = el.parentNode; target = el; } else if (typeof selector === "string") target = document.querySelector(selector); else if ("$el" in selector) target = selector.$el; else target = selector; return target; } //#endregion //#region node_modules/vuetify/lib/composables/hydration.js function useHydration() { if (!IN_BROWSER) return shallowRef(false); const { ssr } = useDisplay(); if (ssr) { const isMounted = shallowRef(false); onMounted(() => { isMounted.value = true; }); return isMounted; } else return shallowRef(true); } //#endregion //#region node_modules/vuetify/lib/composables/stack.js var StackSymbol = Symbol.for("vuetify:stack"); var globalStack = reactive([]); function useStack(isActive, zIndex, disableGlobalStack) { const vm = getCurrentInstance("useStack"); const createStackEntry = !disableGlobalStack; const parent = inject(StackSymbol, void 0); const stack = reactive({ activeChildren: /* @__PURE__ */ new Set() }); provide(StackSymbol, stack); const _zIndex = shallowRef(Number(toValue(zIndex))); useToggleScope(isActive, () => { const lastZIndex = globalStack.at(-1)?.[1]; _zIndex.value = lastZIndex ? lastZIndex + 10 : Number(toValue(zIndex)); if (createStackEntry) globalStack.push([vm.uid, _zIndex.value]); parent?.activeChildren.add(vm.uid); onScopeDispose(() => { if (createStackEntry) { const idx = toRaw(globalStack).findIndex((v) => v[0] === vm.uid); globalStack.splice(idx, 1); } parent?.activeChildren.delete(vm.uid); }); }); const globalTop = shallowRef(true); if (createStackEntry) watchEffect(() => { const _isTop = globalStack.at(-1)?.[0] === vm.uid; setTimeout(() => globalTop.value = _isTop); }); const localTop = toRef(() => !stack.activeChildren.size); return { globalTop: readonly(globalTop), localTop, stackStyles: toRef(() => ({ zIndex: _zIndex.value })) }; } //#endregion //#region node_modules/vuetify/lib/composables/teleport.js function useTeleport(target) { return { teleportTarget: computed(() => { const _target = target(); if (_target === true || !IN_BROWSER) return void 0; const targetElement = _target === false ? document.body : typeof _target === "string" ? document.querySelector(_target) : _target; if (targetElement == null) { warn(`Unable to locate target ${_target}`); return; } let container = [...targetElement.children].find((el) => el.matches(".v-overlay-container")); if (!container) { container = document.createElement("div"); container.className = "v-overlay-container"; targetElement.appendChild(container); } return container; }) }; } //#endregion //#region node_modules/vuetify/lib/directives/click-outside/index.js function defaultConditional() { return true; } function checkEvent(e, el, binding) { if (!e || checkIsActive(e, binding) === false) return false; const root = attachedRoot(el); if (typeof ShadowRoot !== "undefined" && root instanceof ShadowRoot && root.host === e.target) return false; const elements = (typeof binding.value === "object" && binding.value.include || (() => []))(); elements.push(el); return !elements.some((el) => el?.contains(e.target)); } function checkIsActive(e, binding) { return (typeof binding.value === "object" && binding.value.closeConditional || defaultConditional)(e); } function directive(e, el, binding) { const handler = typeof binding.value === "function" ? binding.value : binding.value.handler; e.shadowTarget = e.target; el._clickOutside.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => { checkIsActive(e, binding) && handler && handler(e); }, 0); } function handleShadow(el, callback) { const root = attachedRoot(el); callback(document); if (typeof ShadowRoot !== "undefined" && root instanceof ShadowRoot) callback(root); } var ClickOutside = { mounted(el, binding) { const onClick = (e) => directive(e, el, binding); const onMousedown = (e) => { el._clickOutside.lastMousedownWasOutside = checkEvent(e, el, binding); }; handleShadow(el, (app) => { app.addEventListener("click", onClick, true); app.addEventListener("mousedown", onMousedown, true); }); if (!el._clickOutside) el._clickOutside = { lastMousedownWasOutside: false }; el._clickOutside[binding.instance.$.uid] = { onClick, onMousedown }; }, beforeUnmount(el, binding) { if (!el._clickOutside) return; handleShadow(el, (app) => { if (!app || !el._clickOutside?.[binding.instance.$.uid]) return; const { onClick, onMousedown } = el._clickOutside[binding.instance.$.uid]; app.removeEventListener("click", onClick, true); app.removeEventListener("mousedown", onMousedown, true); }); delete el._clickOutside[binding.instance.$.uid]; } }; //#endregion //#region node_modules/vuetify/lib/components/VOverlay/VOverlay.js function Scrim(props) { const { modelValue, color, ...rest } = props; return createVNode(Transition, { "name": "fade-transition", "appear": true }, { default: () => [props.modelValue && createBaseVNode("div", mergeProps({ "class": ["v-overlay__scrim", props.color.backgroundColorClasses.value], "style": props.color.backgroundColorStyles.value }, rest), null)] }); } var makeVOverlayProps = propsFactory({ absolute: Boolean, attach: [ Boolean, String, Object ], closeOnBack: { type: Boolean, default: true }, contained: Boolean, contentClass: null, contentProps: null, disabled: Boolean, opacity: [Number, String], noClickAnimation: Boolean, modelValue: Boolean, persistent: Boolean, scrim: { type: [Boolean, String], default: true }, zIndex: { type: [Number, String], default: 2e3 }, ...makeActivatorProps(), ...makeComponentProps(), ...makeDimensionProps(), ...makeLazyProps(), ...makeLocationStrategyProps(), ...makeScrollStrategyProps(), ...makeFocusTrapProps(), ...makeThemeProps(), ...makeTransitionProps() }, "VOverlay"); var VOverlay = genericComponent()({ name: "VOverlay", directives: { vClickOutside: ClickOutside }, inheritAttrs: false, props: { _disableGlobalStack: Boolean, ...omit(makeVOverlayProps(), ["disableInitialFocus"]) }, emits: { "click:outside": (e) => true, "update:modelValue": (value) => true, keydown: (e) => true, afterEnter: () => true, afterLeave: () => true }, setup(props, { slots, attrs, emit }) { const vm = getCurrentInstance("VOverlay"); const root = ref(); const scrimEl = ref(); const contentEl = ref(); const model = useProxiedModel(props, "modelValue"); const isActive = computed({ get: () => model.value, set: (v) => { if (!(v && props.disabled)) model.value = v; } }); const { themeClasses } = provideTheme(props); const { rtlClasses, isRtl } = useRtl(); const { hasContent, onAfterLeave: _onAfterLeave } = useLazy(props, isActive); const scrimColor = useBackgroundColor(() => { return typeof props.scrim === "string" ? props.scrim : null; }); const { globalTop, localTop, stackStyles } = useStack(isActive, () => props.zIndex, props._disableGlobalStack); const { activatorEl, activatorRef, target, targetEl, targetRef, activatorEvents, contentEvents, scrimEvents } = useActivator(props, { isActive, isTop: localTop, contentEl }); const { teleportTarget } = useTeleport(() => { const target = props.attach || props.contained; if (target) return target; const rootNode = activatorEl?.value?.getRootNode() || vm.proxy?.$el?.getRootNode(); if (rootNode instanceof ShadowRoot) return rootNode; return false; }); const { dimensionStyles } = useDimension(props); const isMounted = useHydration(); const { scopeId } = useScopeId(); watch(() => props.disabled, (v) => { if (v) isActive.value = false; }); const { contentStyles, updateLocation } = useLocationStrategies(props, { isRtl, contentEl, target, isActive }); useScrollStrategies(props, { root, contentEl, targetEl, target, isActive, updateLocation }); function onClickOutside(e) { emit("click:outside", e); if (!props.persistent) isActive.value = false; else animateClick(); } function closeConditional(e) { return isActive.value && localTop.value && (!props.scrim || e.target === scrimEl.value || e instanceof MouseEvent && e.shadowTarget === scrimEl.value); } useFocusTrap(props, { isActive, localTop, contentEl, activatorEl }); IN_BROWSER && watch(isActive, (val) => { if (val) window.addEventListener("keydown", onKeydown); else window.removeEventListener("keydown", onKeydown); }, { immediate: true }); onBeforeUnmount(() => { if (!IN_BROWSER) return; window.removeEventListener("keydown", onKeydown); }); function onKeydown(e) { if (e.key === "Escape" && globalTop.value) { if (!contentEl.value?.contains(document.activeElement)) emit("keydown", e); if (!props.persistent) { isActive.value = false; if (contentEl.value?.contains(document.activeElement)) activatorEl.value?.focus(); } else animateClick(); } } function onKeydownSelf(e) { if (e.key === "Escape" && !globalTop.value) return; emit("keydown", e); } const router = useRouter(); useToggleScope(() => props.closeOnBack, () => { useBackButton(router, () => { if (globalTop.value && isActive.value) { if (!props.persistent) isActive.value = false; else animateClick(); return false; } }); }); const top = ref(); watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, (val) => { if (val) { const scrollParent = getScrollParent(root.value); if (scrollParent && scrollParent !== document.scrollingElement) top.value = scrollParent.scrollTop; } }); function animateClick() { if (props.noClickAnimation) return; contentEl.value && animate(contentEl.value, [ { transformOrigin: "center" }, { transform: "scale(1.03)" }, { transformOrigin: "center" } ], { duration: 150, easing: "cubic-bezier(0.4, 0, 0.2, 1)" }); } function onAfterEnter() { emit("afterEnter"); } function onAfterLeave() { _onAfterLeave(); emit("afterLeave"); } useRender(() => createBaseVNode(Fragment, null, [slots.activator?.({ isActive: isActive.value, targetRef, props: mergeProps({ ref: activatorRef }, activatorEvents.value, props.activatorProps) }), isMounted.value && hasContent.value && createVNode(Teleport, { "disabled": !teleportTarget.value, "to": teleportTarget.value }, { default: () => [createBaseVNode("div", mergeProps({ "class": [ "v-overlay", { "v-overlay--absolute": props.absolute || props.contained, "v-overlay--active": isActive.value, "v-overlay--contained": props.contained }, themeClasses.value, rtlClasses.value, props.class ], "style": [ stackStyles.value, { "--v-overlay-opacity": props.opacity, top: convertToUnit(top.value) }, props.style ], "ref": root, "onKeydown": onKeydownSelf }, scopeId, attrs), [createVNode(Scrim, mergeProps({ "color": scrimColor, "modelValue": isActive.value && !!props.scrim, "ref": scrimEl }, scrimEvents.value), null), createVNode(MaybeTransition, { "appear": true, "persisted": true, "transition": props.transition, "target": target.value, "onAfterEnter": onAfterEnter, "onAfterLeave": onAfterLeave }, { default: () => [withDirectives(createBaseVNode("div", mergeProps({ "ref": contentEl, "class": ["v-overlay__content", props.contentClass], "style": [dimensionStyles.value, contentStyles.value] }, contentEvents.value, props.contentProps), [slots.default?.({ isActive })]), [[vShow, isActive.value], [ClickOutside, { handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }]])] })])] })])); return { activatorEl, scrimEl, target, animateClick, contentEl, rootEl: root, globalTop, localTop, updateLocation }; } }); //#endregion export { makeVOverlayProps as n, VMenuSymbol as r, VOverlay as t }; //# sourceMappingURL=VOverlay-BS8OrX3g.js.map