{"version":3,"file":"useClickOutside-CoQ2BNWF.cjs","sources":["../../src/composables/useClickOutside.ts"],"sourcesContent":["import { type MaybeRefOrGetter } from \"vue\";\nimport {\n    useEventListener,\n    type EventTarget,\n    type EventListenerOptions,\n} from \"./useEventListener\";\nimport { unrefElement } from \"./unrefElement\";\n\n/**\n * Listen for clicks outside of an element.\n * Adaption of {@link https://vueuse.org/core/onClickOutside}\n *\n * @param elements DOM elements to click outside\n * @param handler Event handler function\n * @param options ClickOutsideOptions\n * @return stop function\n */\nexport function useClickOutside(\n    elements:\n        | MaybeRefOrGetter<EventTarget>\n        | string\n        | (MaybeRefOrGetter<EventTarget> | string)[],\n    handler: (evt: PointerEvent) => void,\n    options?: EventListenerOptions,\n): () => void {\n    if (!window) return () => {};\n\n    // set default options\n    const listenerOptions = Object.assign({ ignore: [] }, options);\n\n    // convert elements to ignore list\n    const ignores = Array.isArray(elements) ? elements : [elements];\n\n    /**\n     * White-listed items that not emit event when clicked.\n     * All children from ignore prop.\n     */\n    const shouldIgnore = (event: PointerEvent): boolean => {\n        return ignores.some((target) => {\n            if (typeof target === \"string\") {\n                return Array.from(\n                    window.document.querySelectorAll(target),\n                ).some(\n                    (el) =>\n                        el === event.target ||\n                        event.composedPath().includes(el),\n                );\n            } else {\n                const el = unrefElement(target);\n                return (\n                    el &&\n                    (event.target === el || event.composedPath().includes(el))\n                );\n            }\n        });\n    };\n\n    function listener(event: PointerEvent): void {\n        if (shouldIgnore(event)) return;\n        handler(event);\n    }\n\n    const stop = useEventListener(window, \"click\", listener, listenerOptions);\n\n    return stop;\n}\n"],"names":["unrefElement","useEventListener"],"mappings":";;;;;AAiBgB,SAAA,gBACZ,UAIA,SACA,SACU;AACN,MAAA,CAAC,OAAQ,QAAO,MAAM;AAAA,EAAC;AAGrB,QAAA,kBAAkB,OAAO,OAAO,EAAE,QAAQ,CAAA,KAAM,OAAO;AAG7D,QAAM,UAAU,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAMxD,QAAA,eAAe,CAAC,UAAiC;AAC5C,WAAA,QAAQ,KAAK,CAAC,WAAW;AACxB,UAAA,OAAO,WAAW,UAAU;AAC5B,eAAO,MAAM;AAAA,UACT,OAAO,SAAS,iBAAiB,MAAM;AAAA,QAAA,EACzC;AAAA,UACE,CAAC,OACG,OAAO,MAAM,UACb,MAAM,aAAA,EAAe,SAAS,EAAE;AAAA,QACxC;AAAA,MAAA,OACG;AACG,cAAA,KAAKA,0BAAa,MAAM;AAE1B,eAAA,OACC,MAAM,WAAW,MAAM,MAAM,aAAa,EAAE,SAAS,EAAE;AAAA,MAAA;AAAA,IAEhE,CACH;AAAA,EACL;AAEA,WAAS,SAAS,OAA2B;AACrC,QAAA,aAAa,KAAK,EAAG;AACzB,YAAQ,KAAK;AAAA,EAAA;AAGjB,QAAM,OAAOC,iBAAAA,iBAAiB,QAAQ,SAAS,UAAU,eAAe;AAEjE,SAAA;AACX;;"}