@animxyz/vue3
Version:
AnimXYZ is a composable animation library that makes your site shine
36 lines (28 loc) • 832 B
JavaScript
import { TransitionGroup, h } from 'vue'
import { getTransitionRawChildren } from '@vue/runtime-core'
import { xyzTransitionGroupProps, mergeData, getXyzTransitionData } from '../utils'
function XyzTransitionGroup(props, context) {
const data = getXyzTransitionData({
...context.attrs,
...props,
})
function childrenFn() {
const children = context.slots.default ? context.slots.default() : []
const rawChildren = getTransitionRawChildren(children)
rawChildren.forEach((node, index) => {
node.props = mergeData(
{
style: {
'--xyz-index': index,
'--xyz-index-rev': rawChildren.length - index - 1,
},
},
node.props
)
})
return children
}
return h(TransitionGroup, data, childrenFn)
}
XyzTransitionGroup.props = xyzTransitionGroupProps
export default XyzTransitionGroup