vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 1.86 kB
Source Map (JSON)
{"version":3,"file":"useLongPress.mjs","sources":["../../../../src/composables/useLongPress.ts"],"sourcesContent":["import { Ref, ShallowRef, unref } from 'vue'\nimport { useEvent } from './useEvent'\nimport { MaybeElement, useHTMLElement } from '.'\n\ntype MaybeRef<T> = Ref<T> | T\n\ninterface LongPressOptions {\n onStart: () => void;\n onEnd: () => void;\n onUpdate: () => void;\n delay?: MaybeRef<number>;\n interval?: number;\n}\n\nexport function useLongPress (el: ShallowRef<HTMLElement | undefined>, options: Partial<LongPressOptions>) {\n let timeoutId = -1\n let intervalId = -1\n\n const handleMouseDown = () => {\n options.onStart?.()\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => {\n intervalId = setInterval(() => options.onUpdate?.(), options.interval || 100) as any\n }, unref(options.delay) || 500) as unknown as number\n }\n\n const handleMouseUp = () => {\n clearTimeout(timeoutId)\n clearInterval(intervalId)\n options.onEnd?.()\n }\n\n const htmlElement = useHTMLElement(el)\n\n useEvent(['mousedown', 'touchstart', 'dragstart'], handleMouseDown, htmlElement)\n useEvent([\n 'mouseup', 'mouseleave',\n 'touchend', 'touchcancel',\n 'drop', 'dragend',\n 'blur',\n ], handleMouseUp, true)\n}\n"],"names":["_a"],"mappings":";;;AAcgB,SAAA,aAAc,IAAyC,SAAoC;AACzG,MAAI,YAAY;AAChB,MAAI,aAAa;AAEjB,QAAM,kBAAkB,MAAM;;AAC5B,kBAAQ,YAAR;AACA,iBAAa,SAAS;AACtB,gBAAY,WAAW,MAAM;AAC3B,mBAAa,YAAY,MAAA;;AAAM,gBAAAA,MAAA,QAAQ,aAAR,gBAAAA,IAAA;AAAA,SAAsB,QAAQ,YAAY,GAAG;AAAA,IAC3E,GAAA,MAAM,QAAQ,KAAK,KAAK,GAAG;AAAA,EAAA;AAGhC,QAAM,gBAAgB,MAAM;;AAC1B,iBAAa,SAAS;AACtB,kBAAc,UAAU;AACxB,kBAAQ,UAAR;AAAA,EAAgB;AAGZ,QAAA,cAAc,eAAe,EAAE;AAErC,WAAS,CAAC,aAAa,cAAc,WAAW,GAAG,iBAAiB,WAAW;AACtE,WAAA;AAAA,IACP;AAAA,IAAW;AAAA,IACX;AAAA,IAAY;AAAA,IACZ;AAAA,IAAQ;AAAA,IACR;AAAA,EAAA,GACC,eAAe,IAAI;AACxB;"}