dk-plus
Version:
55 lines (54 loc) • 1.79 kB
JavaScript
import { defineComponent as R, reactive as k, ref as g, computed as u, onBeforeUnmount as p, provide as L, toRefs as O } from "vue";
import { sizeChange as _ } from "../../_utils/filtration/index.js";
import { dkTriggerProps as D, TRIGGER_CLOSE_KEY as T } from "./index3.js";
import { getReturn as U } from "../../_hooks/public/get-return/index.js";
import "../../_icon/index.js";
const w = R({
name: "DkTrigger",
props: D,
setup(e, { expose: m }) {
const f = k({}), { getRun: r } = U(), l = g(), t = g(!1), v = () => {
e.disabled || (t.value = !0, r(e.onOpen, t.value), r(e.onChange, t.value));
}, s = () => {
t.value = !1, r(e.onClose, t.value), r(e.onChange, t.value), document.removeEventListener("click", i);
};
m({
handelOpen: v,
handelClose: s,
showContent: t
});
const d = u(() => e.trigger === "hover" ? "mouseover" : "click"), h = u(() => e.trigger === "hover" ? "mouseleave" : ""), C = u(() => {
const { spanInterval: c, popUpDuration: n, offUpDuration: o } = e;
return {
"--trigger-spacing-size": _(c),
"--trigger-enter-duration": n && n + "s",
"--trigger-leave-duration": o && o + "s"
};
}), i = (c) => {
const n = l.value, o = e.contentRef, a = c.target;
n && a && n.contains(a) || o && a && o.contains(a) || s();
}, E = () => {
document.addEventListener("click", i);
};
return p(() => {
document.removeEventListener("click", i);
}), L(T, {
handelOnClose: () => {
t.value = !1;
}
}), {
styleList: C,
showContent: t,
closeEvent: h,
openEvent: d,
handelOpen: v,
handelClose: s,
onBeforeEnter: E,
rootRef: l,
...O(f)
};
}
});
export {
w as default
};