51 lines
1.3 KiB
TypeScript
Raw Permalink Normal View History

2026-05-31 13:21:13 +02:00
import type { SlideRoute } from '@slidev/types'
import type { TransitionGroupProps } from 'vue'
import { configs } from '../env'
const transitionResolveMap: Record<string, string | undefined> = {
'slide-left': 'slide-left | slide-right',
'slide-right': 'slide-right | slide-left',
'slide-up': 'slide-up | slide-down',
'slide-down': 'slide-down | slide-up',
}
export function resolveTransition(transition?: string | TransitionGroupProps, isBackward = false): TransitionGroupProps | undefined {
if (!transition)
return undefined
if (typeof transition === 'string') {
transition = {
name: transition,
}
}
if (!transition.name)
return undefined
let name = transition.name.includes('|')
? transition.name
: (transitionResolveMap[transition.name] || transition.name)
if (name.includes('|')) {
const [forward, backward] = name.split('|').map(i => i.trim())
name = isBackward ? backward : forward
}
if (!name)
return undefined
return {
...transition,
name,
}
}
export function getCurrentTransition(direction: number, currentRoute?: SlideRoute, prevRoute?: SlideRoute) {
let transition = direction > 0
? prevRoute?.meta?.transition
: currentRoute?.meta?.transition
if (!transition)
transition = configs.transition || undefined
return resolveTransition(transition, direction < 0)
}