UNPKG

label-print-design

Version:

操作简单,组件丰富的一站式打印解决方案打印设计器

230 lines (225 loc) 5.83 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var vueDemi = require('vue-demi'); var core = require('@popperjs/core'); var core$1 = require('@vueuse/core'); var lodash = require('lodash'); var _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "my-popover", props: { disabled: { type: Boolean }, placement: { default: "top" }, trigger: { default: "hover" }, class: {} }, emits: ["show"], setup(__props, { expose: __expose, emit: __emit }) { __expose({ close }); const emit = __emit; const props = __props; const data = vueDemi.reactive({ visible: false }); const referenceRef = vueDemi.ref(); const contentRef = vueDemi.ref(); let popperInstance = null; const styles = vueDemi.ref({}); function deriveState(state) { const elements = Object.keys(state.elements); const styles2 = lodash.fromPairs( elements.map( (element) => [element, state.styles[element] || {}] ) ); const attributes = lodash.fromPairs( elements.map( (element) => [element, state.attributes[element]] ) ); return { styles: styles2, attributes }; } const stateUpdater = { name: "updateState", enabled: true, phase: "write", fn: ({ state }) => { if (!data.visible) { return; } const sss = core.detectOverflow(state, { // elementContext: 'reference', // 'popper' by default }); console.log(sss); const derivedState = deriveState(state); Object.assign(styles.value, derivedState.styles.popper); }, requires: ["computeStyles"] }; const createPopperInstance = () => { popperInstance = core.createPopper(referenceRef.value, contentRef.value, { modifiers: [ { name: "preventOverflow", options: { altAxis: true, mainAxis: true, tether: false // boundary: document, // true by default // rootBoundary: document // true by default } }, { name: "flip", enabled: false, options: { fallbackPlacements: ["top", "right"] } }, { name: "offset", options: { // 偏移值 左右,上下 offset: [0, 10] } }, // stateUpdater, { name: "arrow", options: { element: ".popper-arrow" } } // { name: 'applyStyles', enabled: false } ], placement: props.placement }); vueDemi.nextTick(() => { if (popperInstance != null) { popperInstance.update(); } }); }; const destroyPopperInstance = () => { popperInstance?.destroy?.(); popperInstance = null; }; vueDemi.watch(() => data.visible, (visible, _o) => { if (visible) { createPopperInstance(); } else { } }); vueDemi.onMounted(() => { createPopperInstance(); }); vueDemi.onUnmounted(() => { destroyPopperInstance(); }); let stopHandle; function mouseenter() { if (props.trigger != "hover") { return; } show(); } function mouseleave() { if (props.trigger != "hover") { return; } close(); } const togglePopperShow = () => { if (props.trigger != "click") { return; } if (props.disabled) { return; } if (data.visible) { onClose(); } else { if (stopHandle == null) { stopHandle = core$1.onClickOutside(contentRef, () => { close(); }, { ignore: [referenceRef] }); } show(); } }; function onClose() { stopHandle?.(); stopHandle = null; data.visible = false; } function close() { onClose(); } function show() { emit("show"); data.visible = true; } vueDemi.watch( () => data.visible, (val) => { if (!val) { onClose(); } }, { flush: "post" } ); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock( vue.Fragment, null, [ vue.createElementVNode( "div", { class: vue.normalizeClass(["my-popover_reference", [props.class]]), ref_key: "referenceRef", ref: referenceRef, onMouseenter: mouseenter, onMouseleave: mouseleave, onClick: vue.withModifiers(togglePopperShow, ["stop", "prevent"]) }, [ vue.renderSlot(_ctx.$slots, "reference") ], 34 /* CLASS, NEED_HYDRATION */ ), (vue.openBlock(), vue.createBlock(vue.Teleport, { to: ".my-popover_container" }, [ vue.withDirectives(vue.createElementVNode( "div", { class: "my-popover_content", ref_key: "contentRef", ref: contentRef, style: vue.normalizeStyle(vue.unref(styles)) }, [ vue.renderSlot(_ctx.$slots, "default") ], 4 /* STYLE */ ), [ [vue.vShow, vue.unref(data).visible] ]) ])) ], 64 /* STABLE_FRAGMENT */ ); }; } }); exports.default = _sfc_main; //# sourceMappingURL=my-popover.vue2.js.map