{"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, { once: true })\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)\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,MACD,GACG,EAAE,GACF;EAEJ,IAAI;EACJ,IAAI;EAEJ,MAAM,gBAAiB,WAAW,MAAM,GAAG,OAAO,GAAG,MAAM,SAAS;EAEpE,MAAM,cAAc;GAClB,IAAI,SAAS;IACX,aAAa,QAAQ;IACrB,UAAU,KAAA;;GAEZ,IAAI,YAAY;IACd,cAAc,WAAW;IACzB,aAAa,KAAA;;;EAIjB,MAAM,SAAS,QAAoB;GACjC,IAAI,IAAI,WAAW,GAAG;GACtB,OAAO;GACP,SAAS;GAET,SAAS,iBAAiB,WAAW,OAAO,EAAE,MAAM,MAAM,CAAC;GAE3D,UAAU,iBAAiB;IACzB,aAAa,kBAAkB;KAC7B,SAAS;OACR,SAAS;MACX,MAAM;;EAGX,GAAG,SAAS;GAAE;GAAO;GAAO;EAC5B,GAAG,iBAAiB,aAAa,MAAM;;CAEzC,UAAU,IAAI;EACZ,IAAI,CAAC,GAAG,QAAQ;EAChB,MAAM,EAAE,OAAO,UAAU,GAAG;EAE5B,IAAI,OACF,GAAG,oBAAoB,aAAa,MAAM;EAE5C,IAAI,OAAO;GACT,OAAO;GACP,SAAS,oBAAoB,WAAW,MAAM;;EAEhD,GAAG,SAAS;;CAEf"}