import type { PropType } from 'vue'; import { defineComponent, Transition, TransitionGroup } from 'vue'; import { getSlot } from '/@/utils/helper/tsxHelper'; type Mode = 'in-out' | 'out-in' | 'default' | undefined; export function createSimpleTransition(name: string, origin = 'top center 0', mode?: Mode) { return defineComponent({ name, props: { group: { type: Boolean as PropType, default: false, }, // hideOnLeave: { // type: Boolean as PropType, // default: false, // }, // leaveAbsolute: { // type: Boolean as PropType, // default: false, // }, mode: { type: String as PropType, default: mode, }, origin: { type: String as PropType, default: origin, }, }, setup(props, { slots, attrs }) { const onBeforeEnter = (el: HTMLElement) => { el.style.transformOrigin = props.origin; }; return () => { const Tag = !props.group ? Transition : TransitionGroup; return ( {() => getSlot(slots)} ); }; }, }); } export function createJavascriptTransition( name: string, functions: Record, mode: Mode = 'in-out' ) { return defineComponent({ name, props: { mode: { type: String as PropType, default: mode, }, }, setup(props, { attrs, slots }) { return () => { return ( {() => getSlot(slots)} ); }; }, }); }