{"version":3,"file":"click-outsider.mjs","sources":["../../../../components/color-picker/utils/click-outsider.ts"],"sourcesContent":["import { ComponentPublicInstance, VNode } from 'vue';\nimport { usePrefixClass } from '@tdesign/shared-hooks';\nimport { isServer, on } from '@tdesign/shared-utils';\n\ntype Handler = (...args: unknown[]) => unknown;\n\ninterface ElementHandler {\n  elements: HTMLElement[];\n  handler: Handler;\n}\n\ntype FlushList = Map<number, ElementHandler>;\n\nconst nodeList: FlushList = new Map();\n\nlet startClick: MouseEvent;\n\nlet uid = 0;\n\nif (!isServer && window.document) {\n  on(document, 'mousedown', (e: MouseEvent) => (startClick = e));\n  on(document, 'mouseup', (e: MouseEvent) => {\n    for (const { handler } of nodeList.values()) {\n      handler(e);\n    }\n  });\n}\n\ntype NodeElement = HTMLElement | VNode | ComponentPublicInstance;\n\nconst createDocumentHandler = (elements: HTMLElement[], handler: Handler, includePopup = true) => {\n  const POPUP_SELECTOR = usePrefixClass('popup');\n  return (e: MouseEvent) => {\n    if (includePopup) {\n      document.querySelectorAll(POPUP_SELECTOR.value).forEach((ele: Element) => {\n        elements.push(ele as HTMLElement);\n      });\n    }\n    elements = Array.from(new Set(elements));\n    const mouseUpTarget = e.target as Node;\n    const mouseDownTarget = startClick?.target as Node;\n    const isTargetUnExists = !mouseUpTarget || !mouseDownTarget;\n    if (isTargetUnExists) {\n      return;\n    }\n    const isContained = elements.some((el) => {\n      const isSelf = el === mouseUpTarget;\n      const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);\n      return isSelf || isContainedByEl;\n    });\n    if (isContained) {\n      return;\n    }\n    handler();\n  };\n};\n\n/**\n * 元素外面点击\n *\n * @example\n *  onMounted(() => {\n *    // 确保元素已挂载\n *    addClickOutsider(refs.value, () => {\n *      visible.value = false\n *    });\n *  });\n *\n *  onBeforeUnmount(() => removeClickOutsider);\n */\nexport const useClickOutsider = () => {\n  uid++;\n  const clickOutsiderId = uid;\n  const addClickOutsider = (els: NodeElement[], handler: Handler) => {\n    const elements = Array.from(new Set(els.filter((el) => el))).map((el: any) => {\n      const node = (el.el || el.$el || el) as HTMLElement;\n      return node;\n    });\n    const documentHandler = createDocumentHandler(elements, handler, true);\n    nodeList.set(clickOutsiderId, {\n      elements,\n      handler: documentHandler,\n    });\n  };\n\n  const removeClickOutsider = () => {\n    nodeList.has(clickOutsiderId) && nodeList.delete(clickOutsiderId);\n  };\n  return {\n    clickOutsiderId,\n    addClickOutsider,\n    removeClickOutsider,\n  };\n};\n"],"names":["nodeList","Map","startClick","uid","isServer","window","document","on","e","_iterator","_createForOfIteratorHelper","values","_step","s","n","done","handler","value","err","f","createDocumentHandler","elements","includePopup","POPUP_SELECTOR","usePrefixClass","_startClick","querySelectorAll","forEach","ele","push","Array","from","Set","mouseUpTarget","target","mouseDownTarget","isTargetUnExists","isContained","some","el","isSelf","isContainedByEl","contains","useClickOutsider","clickOutsiderId","addClickOutsider","els","filter","map","node","$el","documentHandler","set","removeClickOutsider","has"],"mappings":"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"}