routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
+274
@@ -0,0 +1,274 @@
|
||||
import type { PropType } from 'vue';
|
||||
export declare const makeTransitionProps: <Defaults extends {
|
||||
disabled?: unknown;
|
||||
group?: unknown;
|
||||
hideOnLeave?: unknown;
|
||||
leaveAbsolute?: unknown;
|
||||
mode?: unknown;
|
||||
origin?: unknown;
|
||||
} = {}>(defaults?: Defaults | undefined) => {
|
||||
disabled: unknown extends Defaults["disabled"] ? BooleanConstructor : {
|
||||
type: PropType<unknown extends Defaults["disabled"] ? boolean : boolean | Defaults["disabled"]>;
|
||||
default: unknown extends Defaults["disabled"] ? boolean : boolean | Defaults["disabled"];
|
||||
};
|
||||
group: unknown extends Defaults["group"] ? BooleanConstructor : {
|
||||
type: PropType<unknown extends Defaults["group"] ? boolean : boolean | Defaults["group"]>;
|
||||
default: unknown extends Defaults["group"] ? boolean : boolean | Defaults["group"];
|
||||
};
|
||||
hideOnLeave: unknown extends Defaults["hideOnLeave"] ? BooleanConstructor : {
|
||||
type: PropType<unknown extends Defaults["hideOnLeave"] ? boolean : boolean | Defaults["hideOnLeave"]>;
|
||||
default: unknown extends Defaults["hideOnLeave"] ? boolean : boolean | Defaults["hideOnLeave"];
|
||||
};
|
||||
leaveAbsolute: unknown extends Defaults["leaveAbsolute"] ? BooleanConstructor : {
|
||||
type: PropType<unknown extends Defaults["leaveAbsolute"] ? boolean : boolean | Defaults["leaveAbsolute"]>;
|
||||
default: unknown extends Defaults["leaveAbsolute"] ? boolean : boolean | Defaults["leaveAbsolute"];
|
||||
};
|
||||
mode: unknown extends Defaults["mode"] ? StringConstructor : {
|
||||
type: PropType<unknown extends Defaults["mode"] ? string : string | Defaults["mode"]>;
|
||||
default: unknown extends Defaults["mode"] ? string : string | Defaults["mode"];
|
||||
};
|
||||
origin: unknown extends Defaults["origin"] ? StringConstructor : {
|
||||
type: PropType<unknown extends Defaults["origin"] ? string : string | Defaults["origin"]>;
|
||||
default: unknown extends Defaults["origin"] ? string : string | Defaults["origin"];
|
||||
};
|
||||
};
|
||||
export declare function createCssTransition(name: string, origin?: string, mode?: string): {
|
||||
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
leaveAbsolute: boolean;
|
||||
mode: string;
|
||||
origin: string;
|
||||
} & {} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
leaveAbsolute: boolean;
|
||||
mode: string | undefined;
|
||||
origin: string | undefined;
|
||||
}, true, {}, import("vue").SlotsType<Partial<{
|
||||
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>[];
|
||||
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
||||
P: {};
|
||||
B: {};
|
||||
D: {};
|
||||
C: {};
|
||||
M: {};
|
||||
Defaults: {};
|
||||
}, {
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
leaveAbsolute: boolean;
|
||||
mode: string;
|
||||
origin: string;
|
||||
} & {} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>, {}, {}, {}, {
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
leaveAbsolute: boolean;
|
||||
mode: string | undefined;
|
||||
origin: string | undefined;
|
||||
}>;
|
||||
__isFragment?: never;
|
||||
__isTeleport?: never;
|
||||
__isSuspense?: never;
|
||||
} & import("vue").ComponentOptionsBase<{
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
leaveAbsolute: boolean;
|
||||
mode: string;
|
||||
origin: string;
|
||||
} & {} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
leaveAbsolute: boolean;
|
||||
mode: string | undefined;
|
||||
origin: string | undefined;
|
||||
}, {}, string, import("vue").SlotsType<Partial<{
|
||||
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>[];
|
||||
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
|
||||
disabled: BooleanConstructor;
|
||||
group: BooleanConstructor;
|
||||
hideOnLeave: BooleanConstructor;
|
||||
leaveAbsolute: BooleanConstructor;
|
||||
mode: {
|
||||
type: PropType<string | undefined>;
|
||||
default: string | undefined;
|
||||
};
|
||||
origin: {
|
||||
type: PropType<string | undefined>;
|
||||
default: string | undefined;
|
||||
};
|
||||
}, import("vue").ExtractPropTypes<{
|
||||
disabled: BooleanConstructor;
|
||||
group: BooleanConstructor;
|
||||
hideOnLeave: BooleanConstructor;
|
||||
leaveAbsolute: BooleanConstructor;
|
||||
mode: {
|
||||
type: PropType<string | undefined>;
|
||||
default: string | undefined;
|
||||
};
|
||||
origin: {
|
||||
type: PropType<string | undefined>;
|
||||
default: string | undefined;
|
||||
};
|
||||
}>>;
|
||||
export declare function createJavascriptTransition(name: string, functions: Record<string, any>, mode?: string): {
|
||||
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
|
||||
mode: "default" | "in-out" | "out-in";
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
} & {} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
|
||||
mode: "default" | "in-out" | "out-in";
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
}, true, {}, import("vue").SlotsType<Partial<{
|
||||
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>[];
|
||||
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
||||
P: {};
|
||||
B: {};
|
||||
D: {};
|
||||
C: {};
|
||||
M: {};
|
||||
Defaults: {};
|
||||
}, {
|
||||
mode: "default" | "in-out" | "out-in";
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
} & {} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>, {}, {}, {}, {
|
||||
mode: "default" | "in-out" | "out-in";
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
}>;
|
||||
__isFragment?: never;
|
||||
__isTeleport?: never;
|
||||
__isSuspense?: never;
|
||||
} & import("vue").ComponentOptionsBase<{
|
||||
mode: "default" | "in-out" | "out-in";
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
} & {} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
|
||||
mode: "default" | "in-out" | "out-in";
|
||||
disabled: boolean;
|
||||
group: boolean;
|
||||
hideOnLeave: boolean;
|
||||
}, {}, string, import("vue").SlotsType<Partial<{
|
||||
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>[];
|
||||
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
|
||||
mode: {
|
||||
type: PropType<'in-out' | 'out-in' | 'default'>;
|
||||
default: string;
|
||||
};
|
||||
disabled: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
group: BooleanConstructor;
|
||||
hideOnLeave: BooleanConstructor;
|
||||
}, import("vue").ExtractPropTypes<{
|
||||
mode: {
|
||||
type: PropType<'in-out' | 'out-in' | 'default'>;
|
||||
default: string;
|
||||
};
|
||||
disabled: {
|
||||
type: BooleanConstructor;
|
||||
default: boolean;
|
||||
};
|
||||
group: BooleanConstructor;
|
||||
hideOnLeave: BooleanConstructor;
|
||||
}>>;
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
// Utilities
|
||||
import { h, Transition, TransitionGroup } from 'vue';
|
||||
import { genericComponent, PREFERS_REDUCED_MOTION, propsFactory } from "../../util/index.js"; // Types
|
||||
export const makeTransitionProps = propsFactory({
|
||||
disabled: Boolean,
|
||||
group: Boolean,
|
||||
hideOnLeave: Boolean,
|
||||
leaveAbsolute: Boolean,
|
||||
mode: String,
|
||||
origin: String
|
||||
}, 'transition');
|
||||
export 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 () => {
|
||||
const tag = props.group ? TransitionGroup : Transition;
|
||||
return h(tag, {
|
||||
name: props.disabled ? '' : name,
|
||||
css: !props.disabled,
|
||||
...(props.group ? undefined : {
|
||||
mode: props.mode
|
||||
}),
|
||||
...(props.disabled ? {} : functions)
|
||||
}, slots.default);
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
export 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,
|
||||
// mode: props.mode, // TODO: vuejs/vue-next#3104
|
||||
...(props.disabled ? {} : {
|
||||
...functions,
|
||||
onLeave: el => {
|
||||
if (props.hideOnLeave) {
|
||||
el.style.setProperty('display', 'none', 'important');
|
||||
} else {
|
||||
functions.onLeave?.(el);
|
||||
}
|
||||
}
|
||||
})
|
||||
}, slots.default);
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=createTransition.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+74
@@ -0,0 +1,74 @@
|
||||
import type { PropType } from 'vue';
|
||||
export declare const makeVDialogTransitionProps: <Defaults extends {
|
||||
target?: unknown;
|
||||
} = {}>(defaults?: Defaults | undefined) => {
|
||||
target: unknown extends Defaults["target"] ? PropType<HTMLElement | [x: number, y: number]> : {
|
||||
type: PropType<unknown extends Defaults["target"] ? HTMLElement | [x: number, y: number] : HTMLElement | [x: number, y: number] | Defaults["target"]>;
|
||||
default: unknown extends Defaults["target"] ? HTMLElement | [x: number, y: number] : Defaults["target"] | NonNullable<HTMLElement | [x: number, y: number]>;
|
||||
};
|
||||
};
|
||||
export declare const VDialogTransition: {
|
||||
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{} & {
|
||||
target?: HTMLElement | [x: number, y: number] | undefined;
|
||||
} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {}, true, {}, import("vue").SlotsType<Partial<{
|
||||
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>[];
|
||||
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
||||
P: {};
|
||||
B: {};
|
||||
D: {};
|
||||
C: {};
|
||||
M: {};
|
||||
Defaults: {};
|
||||
}, {} & {
|
||||
target?: HTMLElement | [x: number, y: number] | undefined;
|
||||
} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => JSX.Element, {}, {}, {}, {}>;
|
||||
__isFragment?: never;
|
||||
__isTeleport?: never;
|
||||
__isSuspense?: never;
|
||||
} & import("vue").ComponentOptionsBase<{} & {
|
||||
target?: HTMLElement | [x: number, y: number] | undefined;
|
||||
} & {
|
||||
$children?: {
|
||||
default?: (() => import("vue").VNodeChild) | undefined;
|
||||
} | {
|
||||
$stable?: boolean;
|
||||
} | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
|
||||
'v-slots'?: {
|
||||
default?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
} | undefined;
|
||||
} & {
|
||||
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
||||
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {}, {}, string, import("vue").SlotsType<Partial<{
|
||||
default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
||||
[key: string]: any;
|
||||
}>[];
|
||||
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
|
||||
target: PropType<HTMLElement | [x: number, y: number]>;
|
||||
}, import("vue").ExtractPropTypes<{
|
||||
target: PropType<HTMLElement | [x: number, y: number]>;
|
||||
}>>;
|
||||
export type VDialogTransition = InstanceType<typeof VDialogTransition>;
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
// Utilities
|
||||
import { Transition, mergeProps as _mergeProps, createVNode as _createVNode } from 'vue';
|
||||
import { acceleratedEasing, animate, deceleratedEasing, genericComponent, nullifyTransforms, PREFERS_REDUCED_MOTION, propsFactory, standardEasing } from "../../util/index.js";
|
||||
import { getTargetBox } from "../../util/box.js"; // Types
|
||||
export const makeVDialogTransitionProps = propsFactory({
|
||||
target: [Object, Array]
|
||||
}, 'v-dialog-transition');
|
||||
const saved = new WeakMap();
|
||||
export const 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: 0.33
|
||||
}, {}], {
|
||||
duration: 225 * 2 * 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 {
|
||||
const animation = animate(el, [{}, {
|
||||
transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,
|
||||
opacity: 0
|
||||
}], {
|
||||
duration: 125 * speed,
|
||||
easing: acceleratedEasing
|
||||
});
|
||||
animation.finished.then(() => done());
|
||||
getChildren(el)?.forEach(el => {
|
||||
animate(el, [{}, {
|
||||
opacity: 0,
|
||||
offset: 0.2
|
||||
}, {
|
||||
opacity: 0
|
||||
}], {
|
||||
duration: 125 * 2 * 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;
|
||||
|
||||
// Animate elements larger than 12% of the screen area up to 1.5x slower
|
||||
const asa = elBox.width * elBox.height / (window.innerWidth * window.innerHeight);
|
||||
const speed = asa > 0.12 ? Math.min(1.5, (asa - 0.12) * 10 + 1) : 1;
|
||||
return {
|
||||
x: offsetX - (originX + elBox.left),
|
||||
y: offsetY - (originY + elBox.top),
|
||||
sx,
|
||||
sy,
|
||||
speed
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=dialog-transition.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
+19
@@ -0,0 +1,19 @@
|
||||
interface HTMLExpandElement extends HTMLElement {
|
||||
_parent?: (Node & ParentNode & HTMLElement) | null;
|
||||
_initialStyle?: {
|
||||
transition: string;
|
||||
overflow: string;
|
||||
height?: string | null;
|
||||
width?: string | null;
|
||||
};
|
||||
}
|
||||
export default function (expandedParentClass?: string, type?: 'x' | 'y' | 'both'): {
|
||||
onBeforeEnter(el: HTMLExpandElement): void;
|
||||
onEnter(el: HTMLExpandElement): void;
|
||||
onAfterEnter: (el: HTMLExpandElement) => void;
|
||||
onEnterCancelled: (el: HTMLExpandElement) => void;
|
||||
onLeave(el: HTMLExpandElement): void;
|
||||
onAfterLeave: (el: HTMLExpandElement) => void;
|
||||
onLeaveCancelled: (el: HTMLExpandElement) => void;
|
||||
};
|
||||
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
export default function (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');
|
||||
// Hide overflow to account for collapsed margins in the calculated height
|
||||
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';
|
||||
void el.offsetHeight; // force reflow
|
||||
|
||||
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`;
|
||||
void el.offsetHeight; // force reflow
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=expand-transition.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
+2016
File diff suppressed because it is too large
Load Diff
+24
@@ -0,0 +1,24 @@
|
||||
import { createCssTransition, createJavascriptTransition } from "./createTransition.js";
|
||||
import ExpandTransitionGenerator from "./expand-transition.js"; // Component specific transitions
|
||||
export const VFabTransition = createCssTransition('fab-transition', 'center center', 'out-in');
|
||||
|
||||
// Generic transitions
|
||||
export const VDialogBottomTransition = createCssTransition('dialog-bottom-transition');
|
||||
export const VDialogTopTransition = createCssTransition('dialog-top-transition');
|
||||
export const VFadeTransition = createCssTransition('fade-transition');
|
||||
export const VScaleTransition = createCssTransition('scale-transition');
|
||||
export const VScrollXTransition = createCssTransition('scroll-x-transition');
|
||||
export const VScrollXReverseTransition = createCssTransition('scroll-x-reverse-transition');
|
||||
export const VScrollYTransition = createCssTransition('scroll-y-transition');
|
||||
export const VScrollYReverseTransition = createCssTransition('scroll-y-reverse-transition');
|
||||
export const VSlideXTransition = createCssTransition('slide-x-transition');
|
||||
export const VSlideXReverseTransition = createCssTransition('slide-x-reverse-transition');
|
||||
export const VSlideYTransition = createCssTransition('slide-y-transition');
|
||||
export const VSlideYReverseTransition = createCssTransition('slide-y-reverse-transition');
|
||||
|
||||
// Javascript transitions
|
||||
export const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator());
|
||||
export const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', 'x'));
|
||||
export const VExpandBothTransition = createJavascriptTransition('expand-both-transition', ExpandTransitionGenerator('', 'both'));
|
||||
export { VDialogTransition } from "./dialog-transition.js";
|
||||
//# sourceMappingURL=index.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","names":["createCssTransition","createJavascriptTransition","ExpandTransitionGenerator","VFabTransition","VDialogBottomTransition","VDialogTopTransition","VFadeTransition","VScaleTransition","VScrollXTransition","VScrollXReverseTransition","VScrollYTransition","VScrollYReverseTransition","VSlideXTransition","VSlideXReverseTransition","VSlideYTransition","VSlideYReverseTransition","VExpandTransition","VExpandXTransition","VExpandBothTransition","VDialogTransition"],"sources":["../../../src/components/transitions/index.ts"],"sourcesContent":["import {\n createCssTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VFabTransition = createCssTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogBottomTransition = createCssTransition('dialog-bottom-transition')\nexport const VDialogTopTransition = createCssTransition('dialog-top-transition')\nexport const VFadeTransition = createCssTransition('fade-transition')\nexport const VScaleTransition = createCssTransition('scale-transition')\nexport const VScrollXTransition = createCssTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createCssTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createCssTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createCssTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createCssTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createCssTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createCssTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createCssTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', 'x'))\nexport const VExpandBothTransition = createJavascriptTransition('expand-both-transition', ExpandTransitionGenerator('', 'both'))\n\nexport { VDialogTransition } from './dialog-transition'\n\nexport type VFabTransition = InstanceType<typeof VFabTransition>\nexport type VDialogBottomTransition = InstanceType<typeof VDialogBottomTransition>\nexport type VDialogTopTransition = InstanceType<typeof VDialogTopTransition>\nexport type VFadeTransition = InstanceType<typeof VFadeTransition>\nexport type VScaleTransition = InstanceType<typeof VScaleTransition>\nexport type VScrollXTransition = InstanceType<typeof VScrollXTransition>\nexport type VScrollXReverseTransition = InstanceType<typeof VScrollXReverseTransition>\nexport type VScrollYTransition = InstanceType<typeof VScrollYTransition>\nexport type VScrollYReverseTransition = InstanceType<typeof VScrollYReverseTransition>\nexport type VSlideXTransition = InstanceType<typeof VSlideXTransition>\nexport type VSlideXReverseTransition = InstanceType<typeof VSlideXReverseTransition>\nexport type VSlideYTransition = InstanceType<typeof VSlideYTransition>\nexport type VSlideYReverseTransition = InstanceType<typeof VSlideYReverseTransition>\nexport type VExpandTransition = InstanceType<typeof VExpandTransition>\nexport type VExpandXTransition = InstanceType<typeof VExpandXTransition>\n"],"mappings":"SACEA,mBAAmB,EACnBC,0BAA0B;AAAA,OAGrBC,yBAAyB,gCAEhC;AACA,OAAO,MAAMC,cAAc,GAAGH,mBAAmB,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC;;AAE9F;AACA,OAAO,MAAMI,uBAAuB,GAAGJ,mBAAmB,CAAC,0BAA0B,CAAC;AACtF,OAAO,MAAMK,oBAAoB,GAAGL,mBAAmB,CAAC,uBAAuB,CAAC;AAChF,OAAO,MAAMM,eAAe,GAAGN,mBAAmB,CAAC,iBAAiB,CAAC;AACrE,OAAO,MAAMO,gBAAgB,GAAGP,mBAAmB,CAAC,kBAAkB,CAAC;AACvE,OAAO,MAAMQ,kBAAkB,GAAGR,mBAAmB,CAAC,qBAAqB,CAAC;AAC5E,OAAO,MAAMS,yBAAyB,GAAGT,mBAAmB,CAAC,6BAA6B,CAAC;AAC3F,OAAO,MAAMU,kBAAkB,GAAGV,mBAAmB,CAAC,qBAAqB,CAAC;AAC5E,OAAO,MAAMW,yBAAyB,GAAGX,mBAAmB,CAAC,6BAA6B,CAAC;AAC3F,OAAO,MAAMY,iBAAiB,GAAGZ,mBAAmB,CAAC,oBAAoB,CAAC;AAC1E,OAAO,MAAMa,wBAAwB,GAAGb,mBAAmB,CAAC,4BAA4B,CAAC;AACzF,OAAO,MAAMc,iBAAiB,GAAGd,mBAAmB,CAAC,oBAAoB,CAAC;AAC1E,OAAO,MAAMe,wBAAwB,GAAGf,mBAAmB,CAAC,4BAA4B,CAAC;;AAEzF;AACA,OAAO,MAAMgB,iBAAiB,GAAGf,0BAA0B,CAAC,mBAAmB,EAAEC,yBAAyB,CAAC,CAAC,CAAC;AAC7G,OAAO,MAAMe,kBAAkB,GAAGhB,0BAA0B,CAAC,qBAAqB,EAAEC,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACvH,OAAO,MAAMgB,qBAAqB,GAAGjB,0BAA0B,CAAC,wBAAwB,EAAEC,yBAAyB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,SAEvHiB,iBAAiB","ignoreList":[]}
|
||||
Reference in New Issue
Block a user