UNPKG

vuestic-ui

Version:
1 lines 2.2 kB
{"version":3,"file":"useClickOutside.mjs","sources":["../../../../src/composables/useClickOutside.ts"],"sourcesContent":["import { Ref, unref } from 'vue'\n\nimport { useCaptureEvent } from './useCaptureEvent'\nimport { findTeleportedFrom } from './useTeleported'\nimport { unwrapEl } from '../utils/unwrapEl'\n\nconst checkIfElementChild = (parent: HTMLElement, child: HTMLElement | null | undefined): boolean => {\n if (!child) { return false }\n if (child.parentElement === parent) { return true }\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 useClickOutside = (elements: MaybeArray<MaybeRef<HTMLElement | undefined>>, cb: (el: HTMLElement) => void) => {\n useCaptureEvent('mousedown', (event: MouseEvent) => {\n const clickTarget = event.target as HTMLElement\n\n if ((event.target as HTMLElement).shadowRoot) {\n return\n }\n\n // Handle floating UI teleport\n const teleportParent = findTeleportedFrom(clickTarget)\n\n const isClickInside = safeArray(elements).some((element) => {\n const el = unwrapEl(unref(element))\n\n if (!el) { return false }\n\n if (!teleportParent) { return checkIfElementChild(el, clickTarget) }\n\n return checkIfElementChild(el, clickTarget) || checkIfElementChild(el, teleportParent)\n })\n\n if (!isClickInside) { cb(clickTarget) }\n })\n}\n"],"names":[],"mappings":";;;;AAMA,MAAM,sBAAsB,CAAC,QAAqB,UAAmD;AACnG,MAAI,CAAC,OAAO;AAAS,WAAA;AAAA,EAAM;AACvB,MAAA,MAAM,kBAAkB,QAAQ;AAAS,WAAA;AAAA,EAAK;AAE3C,SAAA,OAAO,SAAS,KAAK;AAC9B;AAKA,MAAM,YAAY,CAAI,MAAqB,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAEvD,MAAA,kBAAkB,CAAC,UAAyD,OAAkC;AACzG,kBAAA,aAAa,CAAC,UAAsB;AAClD,UAAM,cAAc,MAAM;AAErB,QAAA,MAAM,OAAuB,YAAY;AAC5C;AAAA,IACF;AAGM,UAAA,iBAAiB,mBAAmB,WAAW;AAErD,UAAM,gBAAgB,UAAU,QAAQ,EAAE,KAAK,CAAC,YAAY;AAC1D,YAAM,KAAK,SAAS,MAAM,OAAO,CAAC;AAElC,UAAI,CAAC,IAAI;AAAS,eAAA;AAAA,MAAM;AAExB,UAAI,CAAC,gBAAgB;AAAS,eAAA,oBAAoB,IAAI,WAAW;AAAA,MAAE;AAEnE,aAAO,oBAAoB,IAAI,WAAW,KAAK,oBAAoB,IAAI,cAAc;AAAA,IAAA,CACtF;AAED,QAAI,CAAC,eAAe;AAAE,SAAG,WAAW;AAAA,IAAE;AAAA,EAAA,CACvC;AACH;"}