{"version":3,"file":"useClickOutside.mjs","sources":["../../../src/lib/nextGenComponents/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nconst PORTAGED_UI_SELECTOR = [\n  '[role=\"dialog\"]',\n  '[role=\"alertdialog\"]',\n  '[role=\"menu\"]',\n  '[role=\"listbox\"]'\n].join(',')\n\nconst isInsidePortalUI = (target: EventTarget | null) => {\n  if (!(target instanceof Element)) return false\n\n  return Boolean(target.closest(PORTAGED_UI_SELECTOR) || target.querySelector(PORTAGED_UI_SELECTOR))\n}\n\nconst useClickOutside = (handler: (() => void) | undefined) => {\n  const ref = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (!handler) return\n    const listener = (e: MouseEvent) => {\n      const target = e.target\n      if (!(target instanceof Node)) return\n      if (ref.current?.contains(target)) return\n      if (isInsidePortalUI(target)) return\n      handler()\n    }\n    document.addEventListener('mousedown', listener)\n    return () => document.removeEventListener('mousedown', listener)\n  }, [handler])\n\n  return ref\n}\n\nexport { useClickOutside }\n"],"names":["PORTAGED_UI_SELECTOR","isInsidePortalUI","target","useClickOutside","handler","ref","useRef","useEffect","listener","e","_a"],"mappings":";AAEA,MAAMA,IAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,IAAmB,CAACC,MAClBA,aAAkB,UAEjB,GAAQA,EAAO,QAAQF,CAAoB,KAAKE,EAAO,cAAcF,CAAoB,KAFvD,IAKrCG,IAAkB,CAACC,MAAsC;AAC7D,QAAMC,IAAMC,EAAuB,IAAI;AAEvC,SAAAC,EAAU,MAAM;AACd,QAAI,CAACH,EAAS;AACd,UAAMI,IAAW,CAACC,MAAkB;;AAClC,YAAMP,IAASO,EAAE;AACjB,MAAMP,aAAkB,UACpBQ,IAAAL,EAAI,YAAJ,QAAAK,EAAa,SAASR,MACtBD,EAAiBC,CAAM,KAC3BE,EAAA;AAAA,IACF;AACA,oBAAS,iBAAiB,aAAaI,CAAQ,GACxC,MAAM,SAAS,oBAAoB,aAAaA,CAAQ;AAAA,EACjE,GAAG,CAACJ,CAAO,CAAC,GAELC;AACT;"}