{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/use-click-away/index.ts"],"sourcesContent":["import { unref } from 'vue'\nimport { inBrowser } from '@xzx-design/utils'\nimport { useEventListener } from '@xzx-design/hooks'\n\nimport type { Ref } from 'vue'\n\nexport type UseClickAwayOptions = {\n  eventName?: string\n}\n\nexport function useClickAway(\n  target:\n    | Element\n    | Ref<Element | undefined>\n    | Array<Element | Ref<Element | undefined>>,\n  listener: EventListener,\n  options: UseClickAwayOptions = {}\n) {\n  if (!inBrowser) {\n    return\n  }\n\n  const { eventName = 'click' } = options\n\n  const onClick = (event: Event) => {\n    const targets = Array.isArray(target) ? target : [target]\n    const isClickAway = targets.every((item) => {\n      const element = unref(item)\n      return element && !element.contains(event.target as Node)\n    })\n\n    if (isClickAway) {\n      listener(event)\n    }\n  }\n\n  useEventListener(eventName, onClick, { target: document })\n}\n"],"names":[],"mappings":";;;;;;AAUO,SAAS,YACd,CAAA,MAAA,EAIA,QACA,EAAA,OAAA,GAA+B,EAC/B,EAAA;AACA,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA,OAAA;AAAA,GACF;AAEA,EAAM,MAAA,EAAE,SAAY,GAAA,OAAA,EAAY,GAAA,OAAA,CAAA;AAEhC,EAAM,MAAA,OAAA,GAAU,CAAC,KAAiB,KAAA;AAChC,IAAA,MAAM,UAAU,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAI,GAAA,MAAA,GAAS,CAAC,MAAM,CAAA,CAAA;AACxD,IAAA,MAAM,WAAc,GAAA,OAAA,CAAQ,KAAM,CAAA,CAAC,IAAS,KAAA;AAC1C,MAAM,MAAA,OAAA,GAAU,MAAM,IAAI,CAAA,CAAA;AAC1B,MAAA,OAAO,OAAW,IAAA,CAAC,OAAQ,CAAA,QAAA,CAAS,MAAM,MAAc,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAED,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,KAChB;AAAA,GACF,CAAA;AAEA,EAAA,gBAAA,CAAiB,SAAW,EAAA,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAU,CAAA,CAAA;AAC3D;;;;"}