UNPKG

vuestic-ui

Version:
1 lines 1.83 kB
{"version":3,"file":"useLongPresKey.mjs","sources":["../../../../src/composables/useLongPresKey.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: (ev: KeyboardEvent) => void;\n onEnd: (ev: KeyboardEvent) => void;\n onUpdate: (ev: KeyboardEvent | FocusEvent) => void;\n delay?: MaybeRef<number>;\n interval?: number;\n}\n\nexport function useLongPressKey (el: ShallowRef<HTMLElement | undefined>, options: Partial<LongPressOptions>) {\n let timeoutId = -1\n let intervalId = -1\n\n const handleMouseDown = (e: KeyboardEvent) => {\n options.onStart?.(e)\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => {\n intervalId = setInterval(() => options.onUpdate?.(e), options.interval || 100) as any\n }, unref(options.delay) || 500) as unknown as number\n }\n\n const handleMouseUp = (e: KeyboardEvent) => {\n clearTimeout(timeoutId)\n clearInterval(intervalId)\n options.onEnd?.(e)\n }\n\n const htmlElement = useHTMLElement(el)\n\n useEvent(['keydown'], handleMouseDown, htmlElement)\n useEvent([\n 'keyup', 'blur',\n ], handleMouseUp, true)\n}\n"],"names":["_a"],"mappings":";;;AAcgB,SAAA,gBAAiB,IAAyC,SAAoC;AAC5G,MAAI,YAAY;AAChB,MAAI,aAAa;AAEX,QAAA,kBAAkB,CAAC,MAAqB;;AAC5C,kBAAQ,YAAR,iCAAkB;AAClB,iBAAa,SAAS;AACtB,gBAAY,WAAW,MAAM;AACd,mBAAA,YAAY,MAAM;;AAAA,gBAAAA,MAAA,QAAQ,aAAR,gBAAAA,IAAA,cAAmB;AAAA,SAAI,QAAQ,YAAY,GAAG;AAAA,IAC5E,GAAA,MAAM,QAAQ,KAAK,KAAK,GAAG;AAAA,EAAA;AAG1B,QAAA,gBAAgB,CAAC,MAAqB;;AAC1C,iBAAa,SAAS;AACtB,kBAAc,UAAU;AACxB,kBAAQ,UAAR,iCAAgB;AAAA,EAAC;AAGb,QAAA,cAAc,eAAe,EAAE;AAErC,WAAS,CAAC,SAAS,GAAG,iBAAiB,WAAW;AACzC,WAAA;AAAA,IACP;AAAA,IAAS;AAAA,EAAA,GACR,eAAe,IAAI;AACxB;"}