You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
9.3 KiB
1 lines
9.3 KiB
{"ast":null,"code":"import { isClient } from '@vueuse/core';\nimport { isArray } from '@vue/shared';\nimport { isElement } from '../../utils/types.mjs';\nconst nodeList = /* @__PURE__ */new Map();\nif (isClient) {\n let startClick;\n document.addEventListener(\"mousedown\", e => startClick = e);\n document.addEventListener(\"mouseup\", e => {\n if (startClick) {\n for (const handlers of nodeList.values()) {\n for (const {\n documentHandler\n } of handlers) {\n documentHandler(e, startClick);\n }\n }\n startClick = void 0;\n }\n });\n}\nfunction createDocumentHandler(el, binding) {\n let excludes = [];\n if (isArray(binding.arg)) {\n excludes = binding.arg;\n } else if (isElement(binding.arg)) {\n excludes.push(binding.arg);\n }\n return function (mouseup, mousedown) {\n const popperRef = binding.instance.popperRef;\n const mouseUpTarget = mouseup.target;\n const mouseDownTarget = mousedown == null ? void 0 : mousedown.target;\n const isBound = !binding || !binding.instance;\n const isTargetExists = !mouseUpTarget || !mouseDownTarget;\n const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);\n const isSelf = el === mouseUpTarget;\n const isTargetExcluded = excludes.length && excludes.some(item => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);\n const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));\n if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) {\n return;\n }\n binding.value(mouseup, mousedown);\n };\n}\nconst ClickOutside = {\n beforeMount(el, binding) {\n if (!nodeList.has(el)) {\n nodeList.set(el, []);\n }\n nodeList.get(el).push({\n documentHandler: createDocumentHandler(el, binding),\n bindingFn: binding.value\n });\n },\n updated(el, binding) {\n if (!nodeList.has(el)) {\n nodeList.set(el, []);\n }\n const handlers = nodeList.get(el);\n const oldHandlerIndex = handlers.findIndex(item => item.bindingFn === binding.oldValue);\n const newHandler = {\n documentHandler: createDocumentHandler(el, binding),\n bindingFn: binding.value\n };\n if (oldHandlerIndex >= 0) {\n handlers.splice(oldHandlerIndex, 1, newHandler);\n } else {\n handlers.push(newHandler);\n }\n },\n unmounted(el) {\n nodeList.delete(el);\n }\n};\nexport { ClickOutside as default };","map":{"version":3,"names":["nodeList","Map","isClient","startClick","document","addEventListener","e","handlers","values","documentHandler","createDocumentHandler","el","binding","excludes","isArray","arg","isElement","push","mouseup","mousedown","popperRef","instance","mouseUpTarget","target","mouseDownTarget","isBound","isTargetExists","isContainedByEl","contains","isSelf","isTargetExcluded","length","some","item","includes","isContainedByPopper","value","ClickOutside","beforeMount","has","set","get","bindingFn","updated","oldHandlerIndex","findIndex","oldValue","newHandler","splice","unmounted","delete"],"sources":["../../../../../packages/directives/click-outside/index.ts"],"sourcesContent":["import { isArray, isClient, isElement } from '@element-plus/utils'\n\nimport type {\n ComponentPublicInstance,\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\ntype DocumentHandler = <T extends MouseEvent>(mouseup: T, mousedown: T) => void\ntype FlushList = Map<\n HTMLElement,\n {\n documentHandler: DocumentHandler\n bindingFn: (...args: unknown[]) => unknown\n }[]\n>\n\nconst nodeList: FlushList = new Map()\n\nif (isClient) {\n let startClick: MouseEvent | undefined\n document.addEventListener('mousedown', (e: MouseEvent) => (startClick = e))\n document.addEventListener('mouseup', (e: MouseEvent) => {\n if (startClick) {\n for (const handlers of nodeList.values()) {\n for (const { documentHandler } of handlers) {\n documentHandler(e as MouseEvent, startClick)\n }\n }\n startClick = undefined\n }\n })\n}\n\nfunction createDocumentHandler(\n el: HTMLElement,\n binding: DirectiveBinding\n): DocumentHandler {\n let excludes: HTMLElement[] = []\n if (isArray(binding.arg)) {\n excludes = binding.arg\n } else if (isElement(binding.arg)) {\n // due to current implementation on binding type is wrong the type casting is necessary here\n excludes.push(binding.arg as unknown as HTMLElement)\n }\n return function (mouseup, mousedown) {\n const popperRef = (\n binding.instance as ComponentPublicInstance<{\n popperRef: HTMLElement\n }>\n ).popperRef\n const mouseUpTarget = mouseup.target as Node\n const mouseDownTarget = mousedown?.target as Node\n const isBound = !binding || !binding.instance\n const isTargetExists = !mouseUpTarget || !mouseDownTarget\n const isContainedByEl =\n el.contains(mouseUpTarget) || el.contains(mouseDownTarget)\n const isSelf = el === mouseUpTarget\n\n const isTargetExcluded =\n (excludes.length &&\n excludes.some((item) => item?.contains(mouseUpTarget))) ||\n (excludes.length && excludes.includes(mouseDownTarget as HTMLElement))\n const isContainedByPopper =\n popperRef &&\n (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget))\n if (\n isBound ||\n isTargetExists ||\n isContainedByEl ||\n isSelf ||\n isTargetExcluded ||\n isContainedByPopper\n ) {\n return\n }\n binding.value(mouseup, mousedown)\n }\n}\n\nconst ClickOutside: ObjectDirective = {\n beforeMount(el: HTMLElement, binding: DirectiveBinding) {\n // there could be multiple handlers on the element\n if (!nodeList.has(el)) {\n nodeList.set(el, [])\n }\n\n nodeList.get(el)!.push({\n documentHandler: createDocumentHandler(el, binding),\n bindingFn: binding.value,\n })\n },\n updated(el: HTMLElement, binding: DirectiveBinding) {\n if (!nodeList.has(el)) {\n nodeList.set(el, [])\n }\n\n const handlers = nodeList.get(el)!\n const oldHandlerIndex = handlers.findIndex(\n (item) => item.bindingFn === binding.oldValue\n )\n const newHandler = {\n documentHandler: createDocumentHandler(el, binding),\n bindingFn: binding.value,\n }\n\n if (oldHandlerIndex >= 0) {\n // replace the old handler to the new handler\n handlers.splice(oldHandlerIndex, 1, newHandler)\n } else {\n handlers.push(newHandler)\n }\n },\n unmounted(el: HTMLElement) {\n // remove all listeners when a component unmounted\n nodeList.delete(el)\n },\n}\n\nexport default ClickOutside\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|