index.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var core = require('@vueuse/core');
  4. require('../../utils/index.js');
  5. var types = require('../../utils/types.js');
  6. const nodeList = /* @__PURE__ */ new Map();
  7. let startClick;
  8. if (core.isClient) {
  9. document.addEventListener("mousedown", (e) => startClick = e);
  10. document.addEventListener("mouseup", (e) => {
  11. for (const handlers of nodeList.values()) {
  12. for (const { documentHandler } of handlers) {
  13. documentHandler(e, startClick);
  14. }
  15. }
  16. });
  17. }
  18. function createDocumentHandler(el, binding) {
  19. let excludes = [];
  20. if (Array.isArray(binding.arg)) {
  21. excludes = binding.arg;
  22. } else if (types.isElement(binding.arg)) {
  23. excludes.push(binding.arg);
  24. }
  25. return function(mouseup, mousedown) {
  26. const popperRef = binding.instance.popperRef;
  27. const mouseUpTarget = mouseup.target;
  28. const mouseDownTarget = mousedown == null ? void 0 : mousedown.target;
  29. const isBound = !binding || !binding.instance;
  30. const isTargetExists = !mouseUpTarget || !mouseDownTarget;
  31. const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);
  32. const isSelf = el === mouseUpTarget;
  33. const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);
  34. const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));
  35. if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) {
  36. return;
  37. }
  38. binding.value(mouseup, mousedown);
  39. };
  40. }
  41. const ClickOutside = {
  42. beforeMount(el, binding) {
  43. if (!nodeList.has(el)) {
  44. nodeList.set(el, []);
  45. }
  46. nodeList.get(el).push({
  47. documentHandler: createDocumentHandler(el, binding),
  48. bindingFn: binding.value
  49. });
  50. },
  51. updated(el, binding) {
  52. if (!nodeList.has(el)) {
  53. nodeList.set(el, []);
  54. }
  55. const handlers = nodeList.get(el);
  56. const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue);
  57. const newHandler = {
  58. documentHandler: createDocumentHandler(el, binding),
  59. bindingFn: binding.value
  60. };
  61. if (oldHandlerIndex >= 0) {
  62. handlers.splice(oldHandlerIndex, 1, newHandler);
  63. } else {
  64. handlers.push(newHandler);
  65. }
  66. },
  67. unmounted(el) {
  68. nodeList.delete(el);
  69. }
  70. };
  71. exports["default"] = ClickOutside;
  72. //# sourceMappingURL=index.js.map