UNPKG

element-plus

Version:

A Component Library for Vue 3

119 lines (116 loc) 4.75 kB
import { defineComponent, inject, ref, provide, computed, unref, onMounted, watch, openBlock, createElementBlock, normalizeStyle, normalizeClass, renderSlot } from 'vue'; import { createPopper } from '@popperjs/core'; import '../../../hooks/index.mjs'; import '../../../tokens/index.mjs'; import { usePopperContentProps } from './content.mjs'; import { unwrapMeasurableEl, buildPopperOptions } from './utils.mjs'; import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs'; import { POPPER_INJECTION_KEY, POPPER_CONTENT_INJECTION_KEY } from '../../../tokens/popper.mjs'; import { useZIndex } from '../../../hooks/use-z-index/index.mjs'; import { useNamespace } from '../../../hooks/use-namespace/index.mjs'; const __default__ = { name: "ElPopperContent" }; const _sfc_main = /* @__PURE__ */ defineComponent({ ...__default__, props: usePopperContentProps, emits: ["mouseenter", "mouseleave"], setup(__props, { expose }) { const props = __props; const { popperInstanceRef, contentRef, triggerRef } = inject(POPPER_INJECTION_KEY, void 0); const { nextZIndex } = useZIndex(); const ns = useNamespace("popper"); const popperContentRef = ref(); const arrowRef = ref(); const arrowOffset = ref(); provide(POPPER_CONTENT_INJECTION_KEY, { arrowRef, arrowOffset }); const contentZIndex = ref(props.zIndex || nextZIndex()); const computedReference = computed(() => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef)); const contentStyle = computed(() => [{ zIndex: unref(contentZIndex) }, props.popperStyle]); const contentClass = computed(() => [ ns.b(), ns.is("pure", props.pure), ns.is(props.effect), props.popperClass ]); const createPopperInstance = ({ referenceEl, popperContentEl, arrowEl }) => { const options = buildPopperOptions(props, { arrowEl, arrowOffset: unref(arrowOffset) }); return createPopper(referenceEl, popperContentEl, options); }; const updatePopper = (shouldUpdateZIndex = true) => { var _a; (_a = unref(popperInstanceRef)) == null ? void 0 : _a.update(); shouldUpdateZIndex && (contentZIndex.value = props.zIndex || nextZIndex()); }; const togglePopperAlive = () => { var _a, _b; const monitorable = { name: "eventListeners", enabled: props.visible }; (_b = (_a = unref(popperInstanceRef)) == null ? void 0 : _a.setOptions) == null ? void 0 : _b.call(_a, (options) => ({ ...options, modifiers: [...options.modifiers || [], monitorable] })); updatePopper(false); }; onMounted(() => { let updateHandle; watch(computedReference, (referenceEl) => { var _a; updateHandle == null ? void 0 : updateHandle(); const popperInstance = unref(popperInstanceRef); (_a = popperInstance == null ? void 0 : popperInstance.destroy) == null ? void 0 : _a.call(popperInstance); if (referenceEl) { const popperContentEl = unref(popperContentRef); contentRef.value = popperContentEl; popperInstanceRef.value = createPopperInstance({ referenceEl, popperContentEl, arrowEl: unref(arrowRef) }); updateHandle = watch(() => referenceEl.getBoundingClientRect(), () => updatePopper(), { immediate: true }); } else { popperInstanceRef.value = void 0; } }, { immediate: true }); watch(() => props.visible, togglePopperAlive, { immediate: true }); watch(() => buildPopperOptions(props, { arrowEl: unref(arrowRef), arrowOffset: unref(arrowOffset) }), (option) => { var _a; return (_a = popperInstanceRef.value) == null ? void 0 : _a.setOptions(option); }); }); expose({ popperContentRef, popperInstanceRef, updatePopper, contentStyle }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { ref_key: "popperContentRef", ref: popperContentRef, style: normalizeStyle(unref(contentStyle)), class: normalizeClass(unref(contentClass)), role: "tooltip", onMouseenter: _cache[0] || (_cache[0] = (e) => _ctx.$emit("mouseenter", e)), onMouseleave: _cache[1] || (_cache[1] = (e) => _ctx.$emit("mouseleave", e)) }, [ renderSlot(_ctx.$slots, "default") ], 38); }; } }); var ElPopperContent = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/popper/src/content.vue"]]); export { ElPopperContent as default }; //# sourceMappingURL=content2.mjs.map