{"version":3,"file":"press.mjs","sources":["../../../../../../packages/directives/press/src/press.ts"],"sourcesContent":["import type { DirectiveBinding, ObjectDirective } from 'vue'\n\ntype PressHandler = (event: PointerEvent) => void\n\nexport interface PressOptions {\n\thandler: PressHandler\n\tinterval?: number\n\tdelay?: number\n\timmediate?: boolean\n}\n\ninterface PressElement extends HTMLElement {\n\t_pressState?: {\n\t\toptions: PressOptions | null\n\t\ttimer: ReturnType<typeof setInterval> | null\n\t\tdelayTimer: ReturnType<typeof setTimeout> | null\n\t\tpointerId: number | null\n\t\tstart: (event: PointerEvent) => void\n\t\tstop: (event?: PointerEvent) => void\n\t}\n}\n\nfunction getOptions(binding: DirectiveBinding<PressHandler | PressOptions>): PressOptions | null {\n\tif (typeof binding.value === 'function') {\n\t\treturn {\n\t\t\thandler: binding.value,\n\t\t\tinterval: 100,\n\t\t\tdelay: 0,\n\t\t\timmediate: true\n\t\t}\n\t}\n\n\tif (binding.value && typeof binding.value.handler === 'function') {\n\t\treturn {\n\t\t\tinterval: 100,\n\t\t\tdelay: 0,\n\t\t\timmediate: true,\n\t\t\t...binding.value\n\t\t}\n\t}\n\n\tconsole.warn('[v-press] Binding value must be a function or an object with handler')\n\treturn null\n}\n\nfunction clearPress(state: NonNullable<PressElement['_pressState']>) {\n\tif (state.timer) {\n\t\tclearInterval(state.timer)\n\t\tstate.timer = null\n\t}\n\tif (state.delayTimer) {\n\t\tclearTimeout(state.delayTimer)\n\t\tstate.delayTimer = null\n\t}\n\tstate.pointerId = null\n}\n\nfunction createState(el: PressElement, binding: DirectiveBinding<PressHandler | PressOptions>) {\n\tconst state: NonNullable<PressElement['_pressState']> = {\n\t\toptions: getOptions(binding),\n\t\ttimer: null,\n\t\tdelayTimer: null,\n\t\tpointerId: null,\n\t\tstart: event => {\n\t\t\tif (!state.options || state.pointerId !== null) return\n\t\t\tstate.pointerId = event.pointerId\n\t\t\tel.setPointerCapture?.(event.pointerId)\n\n\t\t\tconst run = () => {\n\t\t\t\tstate.options?.handler(event)\n\t\t\t}\n\n\t\t\tif (state.options.immediate !== false) {\n\t\t\t\trun()\n\t\t\t}\n\n\t\t\tconst startTimer = () => {\n\t\t\t\tstate.timer = setInterval(run, Number(state.options?.interval) || 100)\n\t\t\t}\n\n\t\t\tif (state.options.delay && state.options.delay > 0) {\n\t\t\t\tstate.delayTimer = setTimeout(startTimer, state.options.delay)\n\t\t\t} else {\n\t\t\t\tstartTimer()\n\t\t\t}\n\t\t},\n\t\tstop: event => {\n\t\t\tif (event && state.pointerId !== null && event.pointerId !== state.pointerId) return\n\t\t\tclearPress(state)\n\t\t}\n\t}\n\n\treturn state\n}\n\nexport const vPress: ObjectDirective<PressElement, PressHandler | PressOptions> = {\n\tmounted(el, binding) {\n\t\tconst state = createState(el, binding)\n\t\tel._pressState = state\n\t\tel.addEventListener('pointerdown', state.start)\n\t\tel.addEventListener('pointerup', state.stop)\n\t\tel.addEventListener('pointerleave', state.stop)\n\t\tel.addEventListener('pointercancel', state.stop)\n\t\tel.addEventListener('lostpointercapture', state.stop)\n\t},\n\tupdated(el, binding) {\n\t\tconst options = getOptions(binding)\n\t\tif (el._pressState) {\n\t\t\tel._pressState.options = options\n\t\t}\n\t},\n\tunmounted(el) {\n\t\tconst state = el._pressState\n\t\tif (!state) return\n\t\tclearPress(state)\n\t\tel.removeEventListener('pointerdown', state.start)\n\t\tel.removeEventListener('pointerup', state.stop)\n\t\tel.removeEventListener('pointerleave', state.stop)\n\t\tel.removeEventListener('pointercancel', state.stop)\n\t\tel.removeEventListener('lostpointercapture', state.stop)\n\t\tdelete el._pressState\n\t}\n}\n"],"names":["_a"],"mappings":"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"}