{"version":3,"file":"index.cjs","sources":[""],"sourcesContent":["import { getDocument } from \"ssr-window\";\n\nexport type TOnClickOutsideOptions = {\n  document?: Document;\n  eventName?: \"click\" | \"mousedown\" | \"pointerdown\" | \"touchstart\";\n  ignored?: readonly Element[];\n  isAutoInit?: boolean;\n  listenerOptions?: boolean | AddEventListenerOptions;\n};\n\nexport type TOnClickOutsideArgs = Parameters<typeof onClickOutside>;\n\nexport type TOnClickOutsideReturn = ReturnType<typeof onClickOutside>;\n\n/**\n * Calls a callback when an event occurs outside one or more elements.\n * @param {Element|Element[]} elements Elements treated as inside\n * @param {(event: Event) => void} callback Outside-event callback\n * @param {TOnClickOutsideOptions} [options={}] Listener options\n * @returns {{ handler: (event: Event) => void; addListener: () => void; removeListener: () => void; }} Controls\n * @throws {TypeError} onClickOutside: arguments are invalid\n * @example\n * const listener = onClickOutside(menu, () => closeMenu());\n * @example\n * // Close a dropdown on outside click but ignore its toggle button\n * const outside = onClickOutside(dropdown, closeDropdown, {\n *   ignored: [ toggleButton ],\n *   eventName: \"pointerdown\",\n * });\n */\nexport const onClickOutside = (\n  elements: Element | readonly Element[],\n  callback: (event: Event) => void,\n  options: TOnClickOutsideOptions = {}\n): {\n  addListener: () => void;\n  handler: (event: Event) => void;\n  removeListener: () => void;\n} => {\n  const targets = Array.isArray(elements) ? elements : [ elements ];\n  if (targets.length === 0 || targets.some((element) => !element || element.nodeType !== 1)) {\n    throw new TypeError(\"onClickOutside: elements must contain DOM elements\");\n  }\n  if (typeof callback !== \"function\") {\n    throw new TypeError(\"onClickOutside: callback must be a function\");\n  }\n  if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n    throw new TypeError(\"onClickOutside: options must be a plain object\");\n  }\n  const {\n    document = getDocument(),\n    eventName = \"pointerdown\",\n    ignored = [],\n    isAutoInit = true,\n    listenerOptions = {},\n  } = options;\n  if (!Array.isArray(ignored) || ignored.some((element) => !element || element.nodeType !== 1)) {\n    throw new TypeError(\"onClickOutside: ignored must be an array of elements\");\n  }\n  if (typeof isAutoInit !== \"boolean\") {\n    throw new TypeError(\"onClickOutside: isAutoInit must be a boolean\");\n  }\n\n  const handler = (event: Event): void => {\n    const path = typeof event.composedPath === \"function\" ? event.composedPath() : [];\n    const eventTarget = event.target as Node | null;\n    const containsTarget = (element: Element): boolean => {\n      return path.includes(element) || Boolean(eventTarget && element.contains(eventTarget));\n    };\n    if (![ ...targets, ...ignored ].some(containsTarget)) {\n      callback(event);\n    }\n  };\n  const addListener = (): void => document.addEventListener(eventName, handler, listenerOptions);\n  const removeListener = (): void => document.removeEventListener(eventName, handler, listenerOptions);\n  if (isAutoInit) {\n    addListener();\n  }\n  return { addListener, handler, removeListener };\n};\n"],"names":["onClickOutside","elements","callback","options","targets","Array","isArray","length","some","element","nodeType","TypeError","document","getDocument","eventName","ignored","isAutoInit","listenerOptions","handler","event","path","composedPath","eventTarget","target","containsTarget","includes","Boolean","contains","addListener","addEventListener","removeListener","removeEventListener"],"mappings":"6FA8BO,MAAMA,eAAiB,CAC5BC,SACAC,SACAC,QAAkC,CAAA,KAMlC,MAAMC,QAAUC,MAAMC,QAAQL,UAAYA,SAAW,CAAEA,UACvD,GAAIG,QAAQG,SAAW,GAAKH,QAAQI,KAAMC,UAAaA,SAAWA,QAAQC,WAAa,GACrF,MAAM,IAAIC,UAAU,sDAEtB,UAAWT,WAAa,WACtB,MAAM,IAAIS,UAAU,+CAEtB,IAAKR,gBAAkBA,UAAY,UAAYE,MAAMC,QAAQH,SAC3D,MAAM,IAAIQ,UAAU,kDAEtB,MAAMC,SACJA,SAAWC,UAAAA,cAAaC,UACxBA,UAAY,cAAaC,QACzBA,QAAU,GAAEC,WACZA,WAAa,KAAIC,gBACjBA,gBAAkB,CAAA,GAChBd,QACJ,IAAKE,MAAMC,QAAQS,UAAYA,QAAQP,KAAMC,UAAaA,SAAWA,QAAQC,WAAa,GACxF,MAAM,IAAIC,UAAU,wDAEtB,UAAWK,aAAe,UACxB,MAAM,IAAIL,UAAU,gDAGtB,MAAMO,QAAWC,QACf,MAAMC,YAAcD,MAAME,eAAiB,WAAaF,MAAME,eAAiB,GAC/E,MAAMC,YAAcH,MAAMI,OAC1B,MAAMC,eAAkBf,SACfW,KAAKK,SAAShB,UAAYiB,QAAQJ,aAAeb,QAAQkB,SAASL,cAE3E,IAAK,IAAKlB,WAAYW,SAAUP,KAAKgB,gBACnCtB,SAASiB,QAGb,MAAMS,YAAc,IAAYhB,SAASiB,iBAAiBf,UAAWI,QAASD,iBAC9E,MAAMa,eAAiB,IAAYlB,SAASmB,oBAAoBjB,UAAWI,QAASD,iBACpF,GAAID,WACFY,cAEF,MAAO,CAAEA,wBAAaV,gBAASY"}