tav-ui
Version:
65 lines (60 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var domUtils = require('../../utils/domUtils2.js');
var is = require('../../utils/is2.js');
const nodeList = /* @__PURE__ */ new Map();
let startClick;
if (!is.isServer) {
domUtils.on(document, "mousedown", (e) => startClick = e);
domUtils.on(document, "mouseup", (e) => {
for (const { documentHandler } of nodeList.values()) {
documentHandler(e, startClick);
}
});
}
function createDocumentHandler(el, binding) {
let excludes = [];
if (Array.isArray(binding.arg)) {
excludes = binding.arg;
} else {
excludes.push(binding.arg);
}
return function(mouseup, mousedown) {
const popperRef = binding.instance.popperRef;
const mouseUpTarget = mouseup.target;
const mouseDownTarget = mousedown.target;
const isBound = !binding || !binding.instance;
const isTargetExists = !mouseUpTarget || !mouseDownTarget;
const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);
const isSelf = el === mouseUpTarget;
const isTargetExcluded = excludes.length && excludes.some((item) => item?.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);
const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));
if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) {
return;
}
binding.value();
};
}
const ClickOutsideDirective = {
beforeMount(el, binding) {
nodeList.set(el, {
documentHandler: createDocumentHandler(el, binding),
bindingFn: binding.value
});
},
updated(el, binding) {
nodeList.set(el, {
documentHandler: createDocumentHandler(el, binding),
bindingFn: binding.value
});
},
unmounted(el) {
nodeList.delete(el);
}
};
function setupClickOutsideDirective(app) {
app.directive("clickOutside", ClickOutsideDirective);
}
exports["default"] = ClickOutsideDirective;
exports.setupClickOutsideDirective = setupClickOutsideDirective;
//# sourceMappingURL=clickOutside2.js.map