{"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;"}