comic-plus
Version:
<p align="center"> <img width="200px" src="./logo.png"/> </p>
119 lines (118 loc) • 3.78 kB
JavaScript
import { defineComponent, ref, computed, openBlock, createElementBlock, Fragment, createVNode, unref, withCtx, renderSlot, createElementVNode, normalizeStyle, toDisplayString, createCommentVNode } from "vue";
import "../style/popover.css";
import { useElementHover, onClickOutside, useEventListener } from "@vueuse/core";
import OnlyChild from "../../only-child/index.mjs";
import { CuPopper } from "../../popper/index.mjs";
import "../../../utils/config.mjs";
import { isBoolean } from "../../../utils/typescript.mjs";
import { popoverProps } from "./main.props.mjs";
const _hoisted_1 = {
key: 0,
class: "cu-popover__title"
};
const _hoisted_2 = {
key: 1,
class: "cu-popover__content"
};
const _sfc_main = /* @__PURE__ */ defineComponent({
...{
name: "CuPopover"
},
__name: "main",
props: popoverProps,
setup(__props) {
var _a;
const props = __props;
const popperRef = ref();
const triggerRef = ref();
const containerStyle = computed(() => {
return {
width: props.width + "px"
};
});
const hoverProper = useElementHover(popperRef, {
delayLeave: 300
});
const triggerFn = {
hover: () => {
return useElementHover(triggerRef, {
delayLeave: 300
});
},
click: () => {
const clicks = ref(false);
useEventListener(triggerRef, "click", () => {
clicks.value = !isShow.value;
});
return clicks;
},
contextmenu: () => {
const clicks = ref(false);
useEventListener(triggerRef, "contextmenu", (e) => {
e.preventDefault();
clicks.value = !isShow.value;
});
return clicks;
}
};
const isShow = isBoolean(props.visible) ? void 0 : (_a = triggerFn[props.trigger]) == null ? void 0 : _a.call(triggerFn);
if (props.trigger === "click" || props.trigger === "contextmenu") {
onClickOutside(
popperRef,
() => {
isShow.value && (isShow.value = false);
},
{
ignore: [triggerRef]
}
);
}
const show = computed(() => {
if (isBoolean(props.visible)) return props.visible;
if (props.trigger === "hover") {
return isShow.value || hoverProper.value;
}
return isShow.value;
});
return (_ctx, _cache) => {
return openBlock(), createElementBlock(Fragment, null, [
createVNode(unref(OnlyChild), {
ref_key: "triggerRef",
ref: triggerRef
}, {
default: withCtx(() => [
renderSlot(_ctx.$slots, "default")
]),
_: 3
}, 512),
createVNode(unref(CuPopper), {
show: show.value,
effect: _ctx.effect,
offset: _ctx.offset,
"custom-class": _ctx.popperClass,
trigger: triggerRef.value,
placement: _ctx.placement,
"transition-name": "cu-fade"
}, {
default: withCtx(() => [
createElementVNode("div", {
class: "cu-popover__container",
style: normalizeStyle(containerStyle.value),
ref_key: "popperRef",
ref: popperRef
}, [
renderSlot(_ctx.$slots, "content", {}, () => [
_ctx.title ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString(_ctx.title), 1)) : createCommentVNode("", true),
_ctx.content ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(_ctx.content), 1)) : createCommentVNode("", true)
])
], 4)
]),
_: 3
}, 8, ["show", "effect", "offset", "custom-class", "trigger", "placement"])
], 64);
};
}
});
export {
_sfc_main as default
};