{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../packages/directives/repeat-click/index.ts"],"sourcesContent":["import { isFunction } from '@element-plus/utils'\n\nimport type { ObjectDirective } from 'vue'\n\nexport const REPEAT_INTERVAL = 100\nexport const REPEAT_DELAY = 600\nconst SCOPE = '_RepeatClick'\n\ninterface RepeatClickEl extends HTMLElement {\n  [SCOPE]: null | {\n    start?: (evt: MouseEvent) => void\n    clear?: () => void\n  }\n}\n\nexport interface RepeatClickOptions {\n  interval?: number\n  delay?: number\n  handler: (...args: unknown[]) => unknown\n}\n\nexport const vRepeatClick: ObjectDirective<\n  RepeatClickEl,\n  RepeatClickOptions | RepeatClickOptions['handler']\n> = {\n  beforeMount(el, binding) {\n    const value = binding.value\n    const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction(\n      value\n    )\n      ? {}\n      : value\n\n    let intervalId: ReturnType<typeof setInterval> | undefined\n    let delayId: ReturnType<typeof setTimeout> | undefined\n\n    const handler = () => (isFunction(value) ? value() : value.handler())\n\n    const clear = () => {\n      if (delayId) {\n        clearTimeout(delayId)\n        delayId = undefined\n      }\n      if (intervalId) {\n        clearInterval(intervalId)\n        intervalId = undefined\n      }\n    }\n\n    const start = (evt: MouseEvent) => {\n      if (evt.button !== 0) return\n      clear()\n      handler()\n\n      document.addEventListener('mouseup', clear, {\n        once: true,\n        capture: true,\n      })\n\n      delayId = setTimeout(() => {\n        intervalId = setInterval(() => {\n          handler()\n        }, interval)\n      }, delay)\n    }\n\n    el[SCOPE] = { start, clear }\n    el.addEventListener('mousedown', start)\n  },\n  unmounted(el) {\n    if (!el[SCOPE]) return\n    const { start, clear } = el[SCOPE]\n\n    if (start) {\n      el.removeEventListener('mousedown', start)\n    }\n    if (clear) {\n      clear()\n      document.removeEventListener('mouseup', clear, true)\n    }\n    el[SCOPE] = null\n  },\n}\n"],"mappings":";;AAIA,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAC5B,MAAM,QAAQ;AAed,MAAa,eAGT;CACF,YAAY,IAAI,SAAS;EACvB,MAAM,QAAQ,QAAQ;EACtB,MAAM,EAAE,WAAA,KAA4B,QAAA,QAAyB,WAC3D,KACF,IACI,CAAC,IACD;EAEJ,IAAI;EACJ,IAAI;EAEJ,MAAM,gBAAiB,WAAW,KAAK,IAAI,MAAM,IAAI,MAAM,QAAQ;EAEnE,MAAM,cAAc;GAClB,IAAI,SAAS;IACX,aAAa,OAAO;IACpB,UAAU,KAAA;GACZ;GACA,IAAI,YAAY;IACd,cAAc,UAAU;IACxB,aAAa,KAAA;GACf;EACF;EAEA,MAAM,SAAS,QAAoB;GACjC,IAAI,IAAI,WAAW,GAAG;GACtB,MAAM;GACN,QAAQ;GAER,SAAS,iBAAiB,WAAW,OAAO;IAC1C,MAAM;IACN,SAAS;GACX,CAAC;GAED,UAAU,iBAAiB;IACzB,aAAa,kBAAkB;KAC7B,QAAQ;IACV,GAAG,QAAQ;GACb,GAAG,KAAK;EACV;EAEA,GAAG,SAAS;GAAE;GAAO;EAAM;EAC3B,GAAG,iBAAiB,aAAa,KAAK;CACxC;CACA,UAAU,IAAI;EACZ,IAAI,CAAC,GAAG,QAAQ;EAChB,MAAM,EAAE,OAAO,UAAU,GAAG;EAE5B,IAAI,OACF,GAAG,oBAAoB,aAAa,KAAK;EAE3C,IAAI,OAAO;GACT,MAAM;GACN,SAAS,oBAAoB,WAAW,OAAO,IAAI;EACrD;EACA,GAAG,SAAS;CACd;AACF"}