{"version":3,"file":"click-outside.mjs","sources":["../../../../../src/utils/directives/click-outside.ts"],"sourcesContent":["const CLICK = 'click';\r\n// 捕获实例\r\nconst captureInstances = Object.create(null);\r\n// 不捕获实例\r\nconst nonCaptureInstances = Object.create(null);\r\n// 实例列表\r\nconst instancesList = [captureInstances, nonCaptureInstances];\r\n\r\n/**\r\n * The common event handler for bot capture and non-capture events.\r\n *\r\n * @param {!Object} context - The event context.\r\n * @param {!Object} instances - The capture or non-capture registered instances.\r\n * @param {Event} event - The event object.\r\n * @returns {undefined} Default.\r\n */\r\n\r\nconst commonHandler = function _onCommonHandler(context, instances, event) {\r\n  const { target } = event;\r\n\r\n  const item = function _item(item) {\r\n    const { el } = item;\r\n\r\n    if (el !== target && !el.contains(target)) {\r\n      const { binding } = item;\r\n\r\n      if (binding.modifiers.stop) {\r\n        event.stopPropagation();\r\n      }\r\n\r\n      if (binding.modifiers.prevent) {\r\n        event.preventDefault();\r\n      }\r\n\r\n      binding.value.call(context, event);\r\n    }\r\n  };\r\n\r\n  const key = function _key(eventName: string) {\r\n    return instances[eventName].forEach(item);\r\n  };\r\n\r\n  Object.keys(instances).forEach(key);\r\n};\r\n\r\n// 捕获事件处理程序\r\nconst captureEventHandler = function onCaptureEvent(event) {\r\n  commonHandler(this, captureInstances, event);\r\n};\r\n\r\n// 非捕获事件处理程序\r\nconst nonCaptureEventHandler = function onNonCaptureEvent(event) {\r\n  commonHandler(this, nonCaptureInstances, event);\r\n};\r\n\r\n// 获取事件处理程序\r\nconst getEventHandler = function _getEventHandler(useCapture: boolean) {\r\n  return useCapture ? captureEventHandler : nonCaptureEventHandler;\r\n};\r\n\r\n// 指令定义\r\nfunction inserted(el: Element, binding: Record<string, any>): void {\r\n  // 判断参数\r\n  if (typeof binding.value !== 'function') {\r\n    throw new TypeError('Binding value must be a function');\r\n  }\r\n\r\n  // 事件名称\r\n  let eventType;\r\n  const modifiers = binding.modifiers;\r\n\r\n  if (modifiers.click) {\r\n    eventType = 'click';\r\n  } else if (modifiers.mousedown) {\r\n    eventType = 'mousedown';\r\n  } else if (modifiers.touchstart) {\r\n    eventType = 'touchstart';\r\n  } else {\r\n    eventType = CLICK;\r\n  }\r\n\r\n  // 是否开启外部点击的 capture 模式，可通过全局配置\r\n  const useCapture = binding.arg;\r\n\r\n  // 归并事件绑定\r\n  const normalisedBinding = {\r\n    ...binding,\r\n    ...{\r\n      // 一个包含修饰符的对象。例如：v-my-directive.foo.bar 中，修饰符对象为 { foo: true, bar: true }\r\n      modifiers: {\r\n        ...{\r\n          // 添加事件侦听器时使用 capture 模式\r\n          capture: false,\r\n          // 阻止默认行为\r\n          prevent: false,\r\n          //  调用 event.stopPropagation() 停止冒泡\r\n          stop: false,\r\n        },\r\n        ...binding.modifiers,\r\n      },\r\n    },\r\n  };\r\n\r\n  // 实例化事件\r\n  const instances = useCapture ? captureInstances : nonCaptureInstances;\r\n\r\n  // 判断事件中是否有对应的指令参数 初始化指令\r\n  if (!Array.isArray(instances[eventType])) {\r\n    instances[eventType] = [];\r\n  }\r\n\r\n  if (\r\n    instances[eventType].push({\r\n      el,\r\n      binding: normalisedBinding,\r\n    }) === 1\r\n  ) {\r\n    if (typeof document === 'object' && document) {\r\n      document.addEventListener(\r\n        eventType,\r\n        getEventHandler(useCapture),\r\n        useCapture\r\n      );\r\n    }\r\n  }\r\n}\r\n\r\n// 指令与元素解绑时调用\r\nfunction unbind(el: Element): void {\r\n  // 比较元素\r\n  const compareElements = function _compareElements(item) {\r\n    return item.el !== el;\r\n  };\r\n\r\n  const instances = function _instances(instances) {\r\n    // 实例key\r\n    const instancesKeys = Object.keys(instances);\r\n\r\n    // 判断是否有实例\r\n    if (instancesKeys.length) {\r\n      // 判断是否使用事件捕获\r\n      const useCapture = instances === captureInstances;\r\n\r\n      const keys = function _keys(eventName: string) {\r\n        // 查找元素实例\r\n        const newInstance = instances[eventName].filter(compareElements);\r\n\r\n        if (newInstance.length) {\r\n          instances[eventName] = newInstance;\r\n        } else {\r\n          if (typeof document === 'object' && document) {\r\n            // 移除事件\r\n            document.removeEventListener(\r\n              eventName,\r\n              getEventHandler(useCapture),\r\n              useCapture\r\n            );\r\n          }\r\n\r\n          delete instances[eventName];\r\n        }\r\n      };\r\n\r\n      instancesKeys.forEach(keys);\r\n    }\r\n  };\r\n\r\n  instancesList.forEach(instances);\r\n}\r\n\r\nexport default {\r\n  beforeMount: inserted,\r\n  unmounted: unbind,\r\n};\r\n"],"names":["item","instances"],"mappings":"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"}