import { Dt as mergeProps, et as createVNode, n as Transition, pt as h, r as TransitionGroup } from "./vue.runtime.esm-bundler-BvoXUmaf.js";
import { $ as PREFERS_REDUCED_MOTION, l as propsFactory, n as genericComponent } from "./defineComponent-DB6xIcDy.js";
import { i as getTargetBox, t as Box } from "./box-BNWMOtF7.js";
import { i as standardEasing, n as deceleratedEasing, t as acceleratedEasing } from "./easing-DfcvkbkS.js";
//#region node_modules/vuetify/lib/util/animation.js
/** @see https://stackoverflow.com/a/57876601/2074736 */
function nullifyTransforms(el) {
	const rect = new Box(el);
	const style = getComputedStyle(el);
	const tx = style.transform;
	if (tx) {
		let ta, sx, sy, dx, dy;
		if (tx.startsWith("matrix3d(")) {
			ta = tx.slice(9, -1).split(/, /);
			sx = Number(ta[0]);
			sy = Number(ta[5]);
			dx = Number(ta[12]);
			dy = Number(ta[13]);
		} else if (tx.startsWith("matrix(")) {
			ta = tx.slice(7, -1).split(/, /);
			sx = Number(ta[0]);
			sy = Number(ta[3]);
			dx = Number(ta[4]);
			dy = Number(ta[5]);
		} else return new Box(rect);
		const to = style.transformOrigin;
		return new Box({
			x: rect.x - dx - (1 - sx) * parseFloat(to),
			y: rect.y - dy - (1 - sy) * parseFloat(to.slice(to.indexOf(" ") + 1)),
			width: sx ? rect.width / sx : el.offsetWidth + 1,
			height: sy ? rect.height / sy : el.offsetHeight + 1
		});
	} else return new Box(rect);
}
function animate(el, keyframes, options) {
	if (typeof el.animate === "undefined") return { finished: Promise.resolve() };
	let animation;
	try {
		animation = el.animate(keyframes, options);
	} catch (err) {
		return { finished: Promise.resolve() };
	}
	if (typeof animation.finished === "undefined") animation.finished = new Promise((resolve) => {
		animation.onfinish = () => {
			resolve(animation);
		};
	});
	return animation;
}
//#endregion
//#region node_modules/vuetify/lib/components/transitions/createTransition.js
var makeTransitionProps = propsFactory({
	disabled: Boolean,
	group: Boolean,
	hideOnLeave: Boolean,
	leaveAbsolute: Boolean,
	mode: String,
	origin: String
}, "transition");
function createCssTransition(name, origin, mode) {
	return genericComponent()({
		name,
		props: makeTransitionProps({
			mode,
			origin
		}),
		setup(props, { slots }) {
			const functions = {
				onBeforeEnter(el) {
					if (props.origin) el.style.transformOrigin = props.origin;
				},
				onLeave(el) {
					if (props.leaveAbsolute) {
						const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = el;
						el._transitionInitialStyles = {
							position: el.style.position,
							top: el.style.top,
							left: el.style.left,
							width: el.style.width,
							height: el.style.height
						};
						el.style.position = "absolute";
						el.style.top = `${offsetTop}px`;
						el.style.left = `${offsetLeft}px`;
						el.style.width = `${offsetWidth}px`;
						el.style.height = `${offsetHeight}px`;
					}
					if (props.hideOnLeave) el.style.setProperty("display", "none", "important");
				},
				onAfterLeave(el) {
					if (props.leaveAbsolute && el?._transitionInitialStyles) {
						const { position, top, left, width, height } = el._transitionInitialStyles;
						delete el._transitionInitialStyles;
						el.style.position = position || "";
						el.style.top = top || "";
						el.style.left = left || "";
						el.style.width = width || "";
						el.style.height = height || "";
					}
				}
			};
			return () => {
				return h(props.group ? TransitionGroup : Transition, {
					name: props.disabled ? "" : name,
					css: !props.disabled,
					...props.group ? void 0 : { mode: props.mode },
					...props.disabled ? {} : functions
				}, slots.default);
			};
		}
	});
}
function createJavascriptTransition(name, functions, mode = "in-out") {
	return genericComponent()({
		name,
		props: {
			mode: {
				type: String,
				default: mode
			},
			disabled: {
				type: Boolean,
				default: PREFERS_REDUCED_MOTION()
			},
			group: Boolean,
			hideOnLeave: Boolean
		},
		setup(props, { slots }) {
			const tag = props.group ? TransitionGroup : Transition;
			return () => {
				return h(tag, {
					name: props.disabled ? "" : name,
					css: !props.disabled,
					...props.disabled ? {} : {
						...functions,
						onLeave: (el) => {
							if (props.hideOnLeave) el.style.setProperty("display", "none", "important");
							else functions.onLeave?.(el);
						}
					}
				}, slots.default);
			};
		}
	});
}
//#endregion
//#region node_modules/vuetify/lib/components/transitions/expand-transition.js
function expand_transition_default(expandedParentClass = "", type = "y") {
	return {
		onBeforeEnter(el) {
			el._parent = el.parentNode;
			el._initialStyle = {
				transition: el.style.transition,
				overflow: el.style.overflow,
				width: el.style.width,
				height: el.style.height
			};
		},
		onEnter(el) {
			const initialStyle = el._initialStyle;
			if (!initialStyle) return;
			el.style.setProperty("transition", "none", "important");
			el.style.overflow = "hidden";
			const offsetWidth = `${el.offsetWidth}px`;
			const offsetHeight = `${el.offsetHeight}px`;
			if (["x", "both"].includes(type)) el.style.width = "0";
			if (["y", "both"].includes(type)) el.style.height = "0";
			el.offsetHeight;
			el.style.transition = initialStyle.transition;
			if (expandedParentClass && el._parent) el._parent.classList.add(expandedParentClass);
			requestAnimationFrame(() => {
				if (["x", "both"].includes(type)) el.style.width = offsetWidth;
				if (["y", "both"].includes(type)) el.style.height = offsetHeight;
			});
		},
		onAfterEnter: resetStyles,
		onEnterCancelled: resetStyles,
		onLeave(el) {
			el._initialStyle = {
				transition: "",
				overflow: el.style.overflow,
				width: el.style.width,
				height: el.style.height
			};
			el.style.overflow = "hidden";
			if (["x", "both"].includes(type)) el.style.width = `${el.offsetWidth}px`;
			if (["y", "both"].includes(type)) el.style.height = `${el.offsetHeight}px`;
			el.offsetHeight;
			requestAnimationFrame(() => {
				if (["x", "both"].includes(type)) el.style.width = "0";
				if (["y", "both"].includes(type)) el.style.height = "0";
			});
		},
		onAfterLeave,
		onLeaveCancelled: onAfterLeave
	};
	function onAfterLeave(el) {
		if (expandedParentClass && el._parent) el._parent.classList.remove(expandedParentClass);
		resetStyles(el);
	}
	function resetStyles(el) {
		if (!el._initialStyle) return;
		const { width: w, height: h } = el._initialStyle;
		el.style.overflow = el._initialStyle.overflow;
		if (w != null && ["x", "both"].includes(type)) el.style.width = w;
		if (h != null && ["y", "both"].includes(type)) el.style.height = h;
		delete el._initialStyle;
	}
}
//#endregion
//#region node_modules/vuetify/lib/components/transitions/dialog-transition.js
var makeVDialogTransitionProps = propsFactory({ target: [Object, Array] }, "v-dialog-transition");
var saved = /* @__PURE__ */ new WeakMap();
var VDialogTransition = genericComponent()({
	name: "VDialogTransition",
	props: makeVDialogTransitionProps(),
	setup(props, { slots }) {
		const functions = {
			onBeforeEnter(el) {
				el.style.pointerEvents = "none";
				el.style.visibility = "hidden";
			},
			async onEnter(el, done) {
				await new Promise((resolve) => requestAnimationFrame(resolve));
				await new Promise((resolve) => requestAnimationFrame(resolve));
				el.style.visibility = "";
				const dimensions = getDimensions(props.target, el);
				const { x, y, sx, sy, speed } = dimensions;
				saved.set(el, dimensions);
				if (PREFERS_REDUCED_MOTION()) animate(el, [{ opacity: 0 }, {}], {
					duration: 125 * speed,
					easing: deceleratedEasing
				}).finished.then(() => done());
				else {
					const animation = animate(el, [{
						transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,
						opacity: 0
					}, {}], {
						duration: 225 * speed,
						easing: deceleratedEasing
					});
					getChildren(el)?.forEach((el) => {
						animate(el, [
							{ opacity: 0 },
							{
								opacity: 0,
								offset: .33
							},
							{}
						], {
							duration: 450 * speed,
							easing: standardEasing
						});
					});
					animation.finished.then(() => done());
				}
			},
			onAfterEnter(el) {
				el.style.removeProperty("pointer-events");
			},
			onBeforeLeave(el) {
				el.style.pointerEvents = "none";
			},
			async onLeave(el, done) {
				await new Promise((resolve) => requestAnimationFrame(resolve));
				let dimensions;
				if (!saved.has(el) || Array.isArray(props.target) || props.target.offsetParent || props.target.getClientRects().length) dimensions = getDimensions(props.target, el);
				else dimensions = saved.get(el);
				const { x, y, sx, sy, speed } = dimensions;
				if (PREFERS_REDUCED_MOTION()) animate(el, [{}, { opacity: 0 }], {
					duration: 85 * speed,
					easing: acceleratedEasing
				}).finished.then(() => done());
				else {
					animate(el, [{}, {
						transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,
						opacity: 0
					}], {
						duration: 125 * speed,
						easing: acceleratedEasing
					}).finished.then(() => done());
					getChildren(el)?.forEach((el) => {
						animate(el, [
							{},
							{
								opacity: 0,
								offset: .2
							},
							{ opacity: 0 }
						], {
							duration: 250 * speed,
							easing: standardEasing
						});
					});
				}
			},
			onAfterLeave(el) {
				el.style.removeProperty("pointer-events");
			}
		};
		return () => {
			return props.target ? createVNode(Transition, mergeProps({ "name": "dialog-transition" }, functions, { "css": false }), slots) : createVNode(Transition, { "name": "dialog-transition" }, slots);
		};
	}
});
/** Animatable children (card, sheet, list) */
function getChildren(el) {
	const els = el.querySelector(":scope > .v-card, :scope > .v-sheet, :scope > .v-list")?.children;
	return els && [...els];
}
function getDimensions(target, el) {
	const targetBox = getTargetBox(target);
	const elBox = nullifyTransforms(el);
	const [originX, originY] = getComputedStyle(el).transformOrigin.split(" ").map((v) => parseFloat(v));
	const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue("--v-overlay-anchor-origin").split(" ");
	let offsetX = targetBox.left + targetBox.width / 2;
	if (anchorSide === "left" || anchorOffset === "left") offsetX -= targetBox.width / 2;
	else if (anchorSide === "right" || anchorOffset === "right") offsetX += targetBox.width / 2;
	let offsetY = targetBox.top + targetBox.height / 2;
	if (anchorSide === "top" || anchorOffset === "top") offsetY -= targetBox.height / 2;
	else if (anchorSide === "bottom" || anchorOffset === "bottom") offsetY += targetBox.height / 2;
	const tsx = targetBox.width / elBox.width;
	const tsy = targetBox.height / elBox.height;
	const maxs = Math.max(1, tsx, tsy);
	const sx = tsx / maxs || 0;
	const sy = tsy / maxs || 0;
	const asa = elBox.width * elBox.height / (window.innerWidth * window.innerHeight);
	const speed = asa > .12 ? Math.min(1.5, (asa - .12) * 10 + 1) : 1;
	return {
		x: offsetX - (originX + elBox.left),
		y: offsetY - (originY + elBox.top),
		sx,
		sy,
		speed
	};
}
createCssTransition("fab-transition", "center center", "out-in");
createCssTransition("dialog-bottom-transition");
createCssTransition("dialog-top-transition");
var VFadeTransition = createCssTransition("fade-transition");
var VScaleTransition = createCssTransition("scale-transition");
createCssTransition("scroll-x-transition");
createCssTransition("scroll-x-reverse-transition");
createCssTransition("scroll-y-transition");
createCssTransition("scroll-y-reverse-transition");
createCssTransition("slide-x-transition");
createCssTransition("slide-x-reverse-transition");
var VSlideYTransition = createCssTransition("slide-y-transition");
createCssTransition("slide-y-reverse-transition");
var VExpandTransition = createJavascriptTransition("expand-transition", expand_transition_default());
var VExpandXTransition = createJavascriptTransition("expand-x-transition", expand_transition_default("", "x"));
createJavascriptTransition("expand-both-transition", expand_transition_default("", "both"));
//#endregion
export { VSlideYTransition as a, nullifyTransforms as c, VScaleTransition as i, VExpandXTransition as n, VDialogTransition as o, VFadeTransition as r, animate as s, VExpandTransition as t };

//# sourceMappingURL=transitions-DCQ3sjjZ.js.map