* Copyright (c) 2022 - present TinyVue Authors.
* Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
*
* Use of this source code is governed by an MIT-style license.
*
* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
*
*/
import {
processIndex,
calculateTranslate,
translateItem,
handleItemClick,
computedTransform,
resetAnimatingMf,
setDelta
} from './index'
export const api = [
'state',
'hover',
'translate',
'scale',
'active',
'ready',
'inStage',
'animating',
'isOblique',
'hasTitle',
'getTransform',
'processIndex',
'calculateTranslate',
'translateItem',
'handleItemClick',
'resetAnimatingMf',
'setDelta'
]
export const renderless = (
props,
{ computed, onMounted, onUnmounted, reactive, inject },
{ parent, dispatch, mode, vm }
) => {
const api = {}
const CARD_SCALE = parent.$constants.CARD_SCALE
const TYPE_VERTICAL = parent.$constants.TYPE_VERTICAL
const carouselParent = inject('CarouselVm')
const state = reactive({
scale: 1,
translate: 0,
hover: false,
ready: false,
active: false,
inStage: false,
animating: false,
animatingMf: false,
isOblique: false,
carouselParent,
hasTitle: computed(() => !!props.title),
moving: computed(() => carouselParent.state.moving),
animate: computed(() => (Math.abs(carouselParent.state.delta) > 0 ? !state.animatingMf : state.animating)),
getTransform: computed(() => api.computedTransform()),
delta: 0
})
Object.assign(api, {
state,
processIndex,
handleItemClick: handleItemClick({ state, parent, carouselParent }),
computedTransform: computedTransform({ carouselParent, TYPE_VERTICAL, mode, state }),
calculateTranslate: calculateTranslate({ CARD_SCALE, state }),
translateItem: translateItem({ api, CARD_SCALE, parent, state, carouselParent }),
setDelta: setDelta({ state }),
resetAnimatingMf: resetAnimatingMf(state)
})
onMounted(() => {
dispatch('Carousel', 'updateItems', [vm])
dispatch('Carousel', 'complete', [])
})
onUnmounted(() => {
carouselParent && carouselParent.updateItems()
})
return api
}