yuang-framework-ui-pc
Version:
yuang-framework-ui-pc Library
106 lines (105 loc) • 3.71 kB
JavaScript
import { defineComponent, ref, computed, resolveComponent, openBlock, createBlock, mergeProps, withCtx, createElementVNode, normalizeClass, normalizeStyle, renderSlot, createElementBlock, createTextVNode, toDisplayString, createCommentVNode } from "vue";
import { pick } from "../utils/core";
import EleTooltip from "../ele-tooltip/index";
import { tooltipPropKeys } from "../ele-tooltip/props";
import { popoverProps, popoverEmits } from "./props";
const _sfc_main = defineComponent({
name: "ElePopover",
components: { EleTooltip },
props: popoverProps,
emits: popoverEmits,
setup(props, { emit }) {
const tooltipRef = ref(null);
const tooltipProps = computed(() => {
const keys = tooltipPropKeys.filter(
(k) => !["content", "bodyStyle"].includes(k)
);
const options = pick(props, keys);
options.ariaLabel = props.title;
options.gpuAcceleration = props.transition === "el-fade-in-linear";
return options;
});
const hide = () => {
tooltipRef.value && tooltipRef.value.hide();
};
const handleUpdateVisible = (visible) => {
emit("update:visible", visible);
};
const handlePopBeforeEnter = () => {
emit("before-enter");
};
const handlePopBeforeLeave = () => {
emit("before-leave");
};
const handlePopAfterEnter = () => {
emit("after-enter");
};
const handlePopAfterLeave = () => {
emit("after-leave");
};
return {
tooltipRef,
tooltipProps,
hide,
handleUpdateVisible,
handlePopBeforeEnter,
handlePopBeforeLeave,
handlePopAfterEnter,
handlePopAfterLeave
};
}
});
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_EleTooltip = resolveComponent("EleTooltip");
return openBlock(), createBlock(_component_EleTooltip, mergeProps({ tabindex: _ctx.tabindex }, _ctx.tooltipProps, {
ref: "tooltipRef",
isPopover: true,
"onUpdate:visible": _ctx.handleUpdateVisible,
onBeforeShow: _ctx.handlePopBeforeEnter,
onBeforeHide: _ctx.handlePopBeforeLeave,
onShow: _ctx.handlePopAfterEnter,
onHide: _ctx.handlePopAfterLeave
}), {
body: withCtx(() => [
createElementVNode("div", {
class: normalizeClass(["ele-popover-body", _ctx.bodyClass]),
style: normalizeStyle(_ctx.bodyStyle)
}, [
renderSlot(_ctx.$slots, "body", {}, () => [
_ctx.title != null && _ctx.title != "" || _ctx.$slots.title ? (openBlock(), createElementBlock("div", {
key: 0,
class: "ele-popover-title",
style: normalizeStyle(_ctx.titleStyle)
}, [
renderSlot(_ctx.$slots, "title", {}, () => [
createTextVNode(toDisplayString(_ctx.title), 1)
])
], 4)) : createCommentVNode("", true),
createElementVNode("div", {
class: "ele-popover-content",
style: normalizeStyle(_ctx.contentStyle)
}, [
renderSlot(_ctx.$slots, "default", {}, () => [
createTextVNode(toDisplayString(_ctx.content), 1)
])
], 4)
])
], 6)
]),
default: withCtx(() => [
_ctx.$slots.reference ? renderSlot(_ctx.$slots, "reference", { key: 0 }) : createCommentVNode("", true)
]),
_: 3
}, 16, ["tabindex", "onUpdate:visible", "onBeforeShow", "onBeforeHide", "onShow", "onHide"]);
}
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
index as default
};