{"version":3,"file":"index.mjs","sources":["../../../../../packages/directives/click-outside/index.ts"],"sourcesContent":["import { isClient } from '@vueuse/core'\r\n\r\nimport type {\r\n  ComponentPublicInstance,\r\n  DirectiveBinding,\r\n  ObjectDirective,\r\n} from 'vue'\r\n\r\ntype DocumentHandler = <T extends MouseEvent>(mouseup: T, mousedown: T) => void\r\ntype FlushList = Map<\r\n  HTMLElement,\r\n  {\r\n    documentHandler: DocumentHandler\r\n    bindingFn: (...args: unknown[]) => unknown\r\n  }[]\r\n>\r\n\r\nconst nodeList: FlushList = new Map()\r\n\r\nlet startClick: MouseEvent\r\n\r\nif (isClient) {\r\n  document.addEventListener('mousedown', (e: MouseEvent) => (startClick = e))\r\n  document.addEventListener('mouseup', (e: MouseEvent) => {\r\n    for (const handlers of nodeList.values()) {\r\n      for (const { documentHandler } of handlers) {\r\n        documentHandler(e as MouseEvent, startClick)\r\n      }\r\n    }\r\n  })\r\n}\r\n\r\nfunction createDocumentHandler(\r\n  el: HTMLElement,\r\n  binding: DirectiveBinding\r\n): DocumentHandler {\r\n  let excludes: HTMLElement[] = []\r\n  if (Array.isArray(binding.arg)) {\r\n    excludes = binding.arg\r\n  } else if ((binding.arg as unknown) instanceof HTMLElement) {\r\n    // due to current implementation on binding type is wrong the type casting is necessary here\r\n    excludes.push(binding.arg as unknown as HTMLElement)\r\n  }\r\n  return function (mouseup, mousedown) {\r\n    const popperRef = (\r\n      binding.instance as ComponentPublicInstance<{\r\n        popperRef: HTMLElement\r\n      }>\r\n    ).popperRef\r\n    const mouseUpTarget = mouseup.target as Node\r\n    const mouseDownTarget = mousedown?.target as Node\r\n    const isBound = !binding || !binding.instance\r\n    const isTargetExists = !mouseUpTarget || !mouseDownTarget\r\n    const isContainedByEl =\r\n      el.contains(mouseUpTarget) || el.contains(mouseDownTarget)\r\n    const isSelf = el === mouseUpTarget\r\n\r\n    const isTargetExcluded =\r\n      (excludes.length &&\r\n        excludes.some((item) => item?.contains(mouseUpTarget))) ||\r\n      (excludes.length && excludes.includes(mouseDownTarget as HTMLElement))\r\n    const isContainedByPopper =\r\n      popperRef &&\r\n      (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget))\r\n    if (\r\n      isBound ||\r\n      isTargetExists ||\r\n      isContainedByEl ||\r\n      isSelf ||\r\n      isTargetExcluded ||\r\n      isContainedByPopper\r\n    ) {\r\n      return\r\n    }\r\n    binding.value(mouseup, mousedown)\r\n  }\r\n}\r\n\r\nconst ClickOutside: ObjectDirective = {\r\n  beforeMount(el: HTMLElement, binding: DirectiveBinding) {\r\n    // there could be multiple handlers on the element\r\n    if (!nodeList.has(el)) {\r\n      nodeList.set(el, [])\r\n    }\r\n\r\n    nodeList.get(el)!.push({\r\n      documentHandler: createDocumentHandler(el, binding),\r\n      bindingFn: binding.value,\r\n    })\r\n  },\r\n  updated(el: HTMLElement, binding: DirectiveBinding) {\r\n    if (!nodeList.has(el)) {\r\n      nodeList.set(el, [])\r\n    }\r\n\r\n    const handlers = nodeList.get(el)!\r\n    const oldHandlerIndex = handlers.findIndex(\r\n      (item) => item.bindingFn === binding.oldValue\r\n    )\r\n    const newHandler = {\r\n      documentHandler: createDocumentHandler(el, binding),\r\n      bindingFn: binding.value,\r\n    }\r\n\r\n    if (oldHandlerIndex >= 0) {\r\n      // replace the old handler to the new handler\r\n      handlers.splice(oldHandlerIndex, 1, newHandler)\r\n    } else {\r\n      handlers.push(newHandler)\r\n    }\r\n  },\r\n  unmounted(el: HTMLElement) {\r\n    // remove all listeners when a component unmounted\r\n    nodeList.delete(el)\r\n  },\r\n}\r\n\r\nexport default ClickOutside\r\n"],"names":[],"mappings":"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"}