various-ui
Version:
This is a test version of the Vue 3 component library
105 lines (102 loc) • 3.49 kB
JavaScript
import { ref, nextTick, computed } from 'vue';
import '../../../../utils/index.mjs';
import { append } from '../../../../utils/src/node/index.mjs';
import { relativeContainerBody } from '../../../../utils/src/dispose/boundary/src/relativeContainerBody.mjs';
import { tooltip } from '../../../../utils/src/animation/index.mjs';
const useComposable = (define, emits) => {
const vars = {
observer: void 0
};
const refs = {
active: ref(false),
//* 激活状态
visible: ref(false),
//* 隐藏状态
visibleTimer: ref()
//* 隐藏状态延迟器
};
const nodes = {
container: ref(),
triangle: ref(),
tooltip: ref()
};
const methods = {
//* 视图控制器 显示
show: () => {
refs.visibleTimer.value && clearTimeout(refs.visibleTimer.value);
refs.visibleTimer.value = void 0;
refs.visible.value = true;
nextTick(() => {
var _a;
if (!nodes.container.value || !nodes.tooltip.value) return;
else {
append(document.body, nodes.tooltip.value);
(_a = vars.observer) == null ? void 0 : _a.disconnect();
vars.observer = new ResizeObserver(() => {
if (!nodes.container.value || !nodes.tooltip.value) return;
else {
const data = { container: nodes.container.value, triangle: nodes.triangle.value, view: nodes.tooltip.value };
relativeContainerBody(data, {
direction: define.direction,
offset: define.offset,
align: define.align,
width: define.width
});
}
});
vars.observer.observe(document.documentElement);
}
});
},
//* 视图控制器 隐藏
hidden: (delay = 200) => {
refs.visibleTimer.value && clearTimeout(refs.visibleTimer.value);
refs.visibleTimer.value = setTimeout(() => {
var _a;
refs.visible.value = false;
(_a = vars.observer) == null ? void 0 : _a.disconnect();
}, delay);
}
};
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");
}
}),
container: {
//* 鼠标点击事件
click: () => !define.disabled && define.trigger == "click" && methods.show(),
//* 鼠标移入事件
mouseenter: () => !define.disabled && define.trigger == "hover" && methods.show(),
//* 鼠标移出事件
mouseleave: () => !define.disabled && (define.trigger == "hover" || define.trigger == "click") && methods.hidden()
},
content: {
//* 鼠标移入事件
mouseenter: () => !define.disabled && (define.trigger == "hover" || define.trigger == "click") && methods.show(),
//* 鼠标移出事件
mouseleave: () => !define.disabled && (define.trigger == "hover" || define.trigger == "click") && methods.hidden()
}
};
return { ons, vars, refs, nodes, methods, computeds };
};
export { useComposable };
//# sourceMappingURL=composable.mjs.map