UNPKG

comic-plus

Version:

<p align="center"> <img width="200px" src="./logo.png"/> </p>

88 lines (87 loc) 2.92 kB
import { defineComponent, ref, inject, computed, watch, openBlock, createBlock, Teleport, createElementVNode, normalizeStyle, unref, createVNode, Transition, withCtx, withDirectives, renderSlot, vShow } from "vue"; import { getNextZIndex } from "../../../utils/config.mjs"; import "@vueuse/core"; import { MENU_PROVIDE } from "./type.mjs"; import { offset, flip, shift, useFloating, autoUpdate } from "@floating-ui/vue"; const _hoisted_1 = ["data-placement"]; const _sfc_main = /* @__PURE__ */ defineComponent({ ...{ name: "CuMenuPopper" }, __name: "menu-popper", props: { disabled: Boolean, fixed: Boolean, show: Boolean, trigger: HTMLElement }, emits: ["mouse-in", "mouse-out"], setup(__props, { emit: __emit }) { const props = __props; const emit = __emit; const zIndex = ref(0); const { props: injectProps } = inject(MENU_PROVIDE); const popperRef = ref(null); const triggerRef = computed(() => props.trigger); var cleanup; const middleware = computed(() => { return [offset(10), flip(), shift({ padding: 10 })]; }); const { floatingStyles, placement, update } = useFloating(triggerRef, popperRef, { placement: injectProps.mode === "vertical" || !props.fixed ? "right-start" : "bottom", middleware }); watch( () => props.show, (val, old) => { if (val) { if (val && val !== old) { zIndex.value = getNextZIndex(); } if (val) { if (triggerRef.value && popperRef.value) { cleanup = autoUpdate(triggerRef.value, popperRef.value, update); } } else { cleanup(); } } } ); return (_ctx, _cache) => { return openBlock(), createBlock(Teleport, { to: "body", disabled: !__props.fixed }, [ createElementVNode("div", { class: "cu-menu-popper-warpper", ref_key: "popperRef", ref: popperRef, style: normalizeStyle({ ...unref(floatingStyles), zIndex: zIndex.value }) }, [ createVNode(Transition, { name: "cu-menu-popper", onAfterLeave: _cache[2] || (_cache[2] = () => zIndex.value = 0) }, { default: withCtx(() => [ withDirectives(createElementVNode("div", { class: "cu-menu-popper", "data-placement": unref(placement), onMouseenter: _cache[0] || (_cache[0] = ($event) => emit("mouse-in")), onMouseleave: _cache[1] || (_cache[1] = ($event) => emit("mouse-out")) }, [ renderSlot(_ctx.$slots, "default") ], 40, _hoisted_1), [ [vShow, __props.show] ]) ]), _: 3 }) ], 4) ], 8, ["disabled"]); }; } }); export { _sfc_main as default };