UNPKG

vuestic-ui

Version:
1 lines 2.31 kB
{"version":3,"file":"useEvent.mjs","sources":["../../../../src/composables/useEvent.ts"],"sourcesContent":["import { Component, Ref, unref, watch } from 'vue'\nimport { useWindow } from './useWindow'\nimport { unwrapEl } from '../utils/unwrapEl'\nimport { addEventListener, removeEventListener } from '../utils/add-event-listener'\n\ntype MaybeRef<T> = Ref<T> | T\n\ntype UseEventEventName = keyof GlobalEventHandlersEventMap | string[]\ntype UseEventEvent<N extends UseEventEventName, D> = N extends keyof GlobalEventHandlersEventMap ? GlobalEventHandlersEventMap[N] : D\n\n/**\n * SSR safety listen to target event.\n * @param target by default window\n * @param event if string, listener will be fully typed. If array of string, you need to type event manually.\n *\n *\n * @example\n * ```ts\n * useEvent('resize': (e) => {})\n * useEvent(['mousedown', 'mouseup', 'mousemove'], (e) => {})\n * ```\n */\nexport const useEvent = <N extends UseEventEventName, E extends Event>(\n event: N,\n listener: (this: GlobalEventHandlers, event: UseEventEvent<N, E>) => any,\n target?: MaybeRef<unknown> | boolean,\n) => {\n const source = (target && typeof target !== 'boolean') ? target : useWindow()\n const capture = typeof target === 'boolean' ? target : false\n\n watch(source, (newValue, oldValue) => {\n if (!Array.isArray(event)) {\n addEventListener(unwrapEl(unref(newValue)), event, listener as any, capture)\n removeEventListener(unwrapEl(unref(oldValue)), event, listener as any, capture)\n } else {\n event.forEach((e) => {\n addEventListener(unwrapEl(unref(newValue)), e, listener as any, capture)\n removeEventListener(unwrapEl(unref(oldValue)), e, listener as any, capture)\n })\n }\n }, { immediate: true })\n}\n"],"names":[],"mappings":";;;;AAsBO,MAAM,WAAW,CACtB,OACA,UACA,WACG;AACH,QAAM,SAAU,UAAU,OAAO,WAAW,YAAa,SAAS;AAClE,QAAM,UAAU,OAAO,WAAW,YAAY,SAAS;AAEjD,QAAA,QAAQ,CAAC,UAAU,aAAa;AACpC,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,uBAAiB,SAAS,MAAM,QAAQ,CAAC,GAAG,OAAO,UAAiB,OAAO;AAC3E,0BAAoB,SAAS,MAAM,QAAQ,CAAC,GAAG,OAAO,UAAiB,OAAO;AAAA,IAAA,OACzE;AACC,YAAA,QAAQ,CAAC,MAAM;AACnB,yBAAiB,SAAS,MAAM,QAAQ,CAAC,GAAG,GAAG,UAAiB,OAAO;AACvE,4BAAoB,SAAS,MAAM,QAAQ,CAAC,GAAG,GAAG,UAAiB,OAAO;AAAA,MAAA,CAC3E;AAAA,IACH;AAAA,EAAA,GACC,EAAE,WAAW,KAAA,CAAM;AACxB;"}