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 line
9.4 KiB
1 line
9.4 KiB
{"ast":null,"code":"import \"core-js/modules/es.array.push.js\";\nimport '../../utils/index.mjs';\nimport { isClient } from '@vueuse/core';\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 (Array.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","Array","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 { 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 (Array.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":[]} |