UNPKG

yuang-framework-ui-pc

Version:

yuang-framework-ui-pc Library

106 lines (105 loc) 3.71 kB
import { defineComponent, ref, computed, resolveComponent, createBlock, openBlock, mergeProps, withCtx, renderSlot, createCommentVNode, createElementVNode, normalizeStyle, normalizeClass, createElementBlock, createTextVNode, toDisplayString } from "vue"; import { pick } from "../utils/core"; import EleTooltip from "../ele-tooltip/index"; import { tooltipPropKeys } from "../ele-tooltip/props"; import { popoverEmits, popoverProps } 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 };