{"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,WAAW,iBAAiB,QAAQ,iBAAiB,WAC3D,MACD,GACG,EAAE,GACF;EAEJ,IAAI;EACJ,IAAI;EAEJ,MAAM,gBAAiB,WAAW,MAAM,GAAG,OAAO,GAAG,MAAM,SAAS;EAEpE,MAAM,cAAc;AAClB,OAAI,SAAS;AACX,iBAAa,QAAQ;AACrB,cAAU;;AAEZ,OAAI,YAAY;AACd,kBAAc,WAAW;AACzB,iBAAa;;;EAIjB,MAAM,SAAS,QAAoB;AACjC,OAAI,IAAI,WAAW,EAAG;AACtB,UAAO;AACP,YAAS;AAET,YAAS,iBAAiB,WAAW,OAAO,EAAE,MAAM,MAAM,CAAC;AAE3D,aAAU,iBAAiB;AACzB,iBAAa,kBAAkB;AAC7B,cAAS;OACR,SAAS;MACX,MAAM;;AAGX,KAAG,SAAS;GAAE;GAAO;GAAO;AAC5B,KAAG,iBAAiB,aAAa,MAAM;;CAEzC,UAAU,IAAI;AACZ,MAAI,CAAC,GAAG,OAAQ;EAChB,MAAM,EAAE,OAAO,UAAU,GAAG;AAE5B,MAAI,MACF,IAAG,oBAAoB,aAAa,MAAM;AAE5C,MAAI,OAAO;AACT,UAAO;AACP,YAAS,oBAAoB,WAAW,MAAM;;AAEhD,KAAG,SAAS;;CAEf"}