UNPKG

various-ui

Version:

This is a test version of the Vue 3 component library

96 lines (93 loc) 2.87 kB
import { ref, nextTick, computed } from 'vue'; import '../../../../utils/index.mjs'; import { append } from '../../../../utils/src/node/index.mjs'; import { relativeMouseBody } from '../../../../utils/src/dispose/boundary/src/relativeMouseBody.mjs'; import { tooltip } from '../../../../utils/src/animation/index.mjs'; const useComposable = (define, emits) => { const refs = { data: ref(), //* 数据缓存 active: ref(false), //* 激活状态 visible: ref(false), //* 隐藏状态 visibleTimer: ref() //* 隐藏状态延迟器 }; const nodes = { tooltip: ref() }; const methods = { //* 视图控制器 显示 show: (align, option) => { refs.visibleTimer.value && clearTimeout(refs.visibleTimer.value); refs.visibleTimer.value = void 0; refs.visible.value = true; nextTick(() => { if (nodes.tooltip.value) { refs.data.value = { align, option }; append(document.body, nodes.tooltip.value); relativeMouseBody(option, nodes.tooltip.value, { align: { x: option.alignX, y: align }, offsetX: define.offsetX, offsetY: define.offsetY, initialization: option.initialization }); } }); }, //* 视图控制器 隐藏 hidden: (delay = 200) => { refs.visibleTimer.value && clearTimeout(refs.visibleTimer.value); refs.visibleTimer.value = setTimeout(() => { refs.visible.value = false; }, delay); }, //* 入场前样式调整 entrancePreAnimation: (el) => { gsap.set(el, { opacity: 0 }); }, //* 入场动画 entranceAnimation: (el, done) => { gsap.to(el, { duration: 0.2, opacity: 1, onComplete: () => done() }); }, //* 离场动画 departureAnimation: (el, done) => { gsap.to(el, { duration: 0.2, opacity: 0, onComplete: () => done() }); } }; const computeds = { //* 样式 style: computed(() => { const result = { zIndex: define.zIndex || 66 }; if (define.width) result["max-width"] = `${define.width}px`; return result; }) }; const ons = { animation: tooltip({ afterEnter: () => emits("after-enter"), afterLeave: () => emits("after-leave"), beforeEnter: () => { refs.active.value = true; emits("before-enter"); }, beforeLeave: () => { refs.active.value = false; emits("before-leave"); } }), content: { mouseleave: () => define.trigger != "none" && methods.hidden(), mouseenter: () => { refs.visible.value = true; refs.data.value && methods.show(refs.data.value.align, refs.data.value.option); } } }; return { ons, refs, nodes, methods, computeds }; }; export { useComposable }; //# sourceMappingURL=composable.mjs.map