{"version":3,"file":"useFocusOutside.mjs","sources":["../../../../src/composables/useFocusOutside.ts"],"sourcesContent":["import { Ref, unref } from 'vue'\n\nimport { useEvent } from './useEvent'\nimport { unwrapEl } from '../utils/unwrapEl'\n\nconst checkIfElementChild = (\n  parent: HTMLElement,\n  child: HTMLElement | Window | null | undefined,\n): boolean => {\n  if (!child) {\n    return false\n  }\n  if (child instanceof Window) {\n    return false\n  }\n  if (child.parentElement === parent) {\n    return true\n  }\n\n  return parent.contains(child)\n}\n\ntype MaybeRef<T> = T | Ref<T>;\ntype MaybeArray<T> = T | T[];\n\nconst safeArray = <T>(a: MaybeArray<T>) => (Array.isArray(a) ? a : [a])\n\nexport const useFocusOutside = (\n  elements: MaybeArray<MaybeRef<HTMLElement | undefined>>,\n  cb: (el: HTMLElement) => void,\n  options: {\n    onlyKeyboard?: boolean;\n  } = {},\n) => {\n  let previouslyClicked = false\n  if (options.onlyKeyboard) {\n    useEvent('mousedown', (e) => {\n      previouslyClicked = true\n      setTimeout(() => {\n        previouslyClicked = false\n      }, 200)\n    }, true)\n  }\n\n  useEvent('focus', (event) => {\n    if (options.onlyKeyboard && previouslyClicked) {\n      return\n    }\n\n    const focusTarget = event.target as HTMLElement\n\n    if ((event.target as HTMLElement).shadowRoot) {\n      return\n    }\n\n    const isFocusInside = safeArray(elements).some((element) => {\n      const el = unwrapEl(unref(element))\n      return el && checkIfElementChild(el, focusTarget)\n    })\n\n    if (!isFocusInside) {\n      cb(focusTarget)\n    }\n  }, true)\n}\n"],"names":[],"mappings":";;;AAKA,MAAM,sBAAsB,CAC1B,QACA,UACY;AACZ,MAAI,CAAC,OAAO;AACH,WAAA;AAAA,EACT;AACA,MAAI,iBAAiB,QAAQ;AACpB,WAAA;AAAA,EACT;AACI,MAAA,MAAM,kBAAkB,QAAQ;AAC3B,WAAA;AAAA,EACT;AAEO,SAAA,OAAO,SAAS,KAAK;AAC9B;AAKA,MAAM,YAAY,CAAI,MAAsB,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAE9D,MAAM,kBAAkB,CAC7B,UACA,IACA,UAEI,CAAA,MACD;AACH,MAAI,oBAAoB;AACxB,MAAI,QAAQ,cAAc;AACf,aAAA,aAAa,CAAC,MAAM;AACP,0BAAA;AACpB,iBAAW,MAAM;AACK,4BAAA;AAAA,SACnB,GAAG;AAAA,OACL,IAAI;AAAA,EACT;AAES,WAAA,SAAS,CAAC,UAAU;AACvB,QAAA,QAAQ,gBAAgB,mBAAmB;AAC7C;AAAA,IACF;AAEA,UAAM,cAAc,MAAM;AAErB,QAAA,MAAM,OAAuB,YAAY;AAC5C;AAAA,IACF;AAEA,UAAM,gBAAgB,UAAU,QAAQ,EAAE,KAAK,CAAC,YAAY;AAC1D,YAAM,KAAK,SAAS,MAAM,OAAO,CAAC;AAC3B,aAAA,MAAM,oBAAoB,IAAI,WAAW;AAAA,IAAA,CACjD;AAED,QAAI,CAAC,eAAe;AAClB,SAAG,WAAW;AAAA,IAChB;AAAA,KACC,IAAI;AACT;"}