UNPKG

tav-ui

Version:
65 lines (60 loc) 2.15 kB
'use strict'; 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