{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/directives/click-throttle/index.ts"],"sourcesContent":["import { withInstallDirective } from \"../../utils/vue/install\";\nimport type { Directive } from \"vue\";\n\ninterface ThrottleElement extends HTMLElement {\n\t__handleClick__?: () => void;\n\t__throttle_timer__?: ReturnType<typeof setTimeout>;\n\t__throttle_callback__?: (...arguments_: unknown[]) => void;\n\tdisabled: boolean;\n}\n\nconst ThrottleDirective: Directive<ThrottleElement, (...arguments_: unknown[]) => void> = {\n\tmounted(el, binding) {\n\t\tif (typeof binding.value !== \"function\") {\n\t\t\tthrow new TypeError(\"callback 必须是函数。\");\n\t\t}\n\t\tel.__throttle_callback__ = binding.value;\n\t\tel.__handleClick__ = (): void => {\n\t\t\t// 冷却期内的额外事件不能清除解锁计时器，否则元素会一直禁用。\n\t\t\tif (el.__throttle_timer__ !== undefined || el.disabled) return;\n\t\t\tel.disabled = true;\n\t\t\t// 在调用业务回调前登记计时器；回调抛错或同步触发卸载时也能正确清理。\n\t\t\tel.__throttle_timer__ = setTimeout(() => {\n\t\t\t\tel.__throttle_timer__ = undefined;\n\t\t\t\tel.disabled = false;\n\t\t\t}, 1000);\n\t\t\tel.__throttle_callback__?.();\n\t\t};\n\t\tel.addEventListener(\"click\", el.__handleClick__);\n\t},\n\tupdated(el, binding) {\n\t\tif (typeof binding.value !== \"function\") {\n\t\t\tthrow new TypeError(\"callback 必须是函数。\");\n\t\t}\n\t\tel.__throttle_callback__ = binding.value;\n\t},\n\tbeforeUnmount(el) {\n\t\tif (el.__handleClick__) el.removeEventListener(\"click\", el.__handleClick__);\n\t\tif (el.__throttle_timer__ !== undefined) {\n\t\t\tclearTimeout(el.__throttle_timer__);\n\t\t\tel.disabled = false;\n\t\t}\n\t\tdelete el.__handleClick__;\n\t\tdelete el.__throttle_timer__;\n\t\tdelete el.__throttle_callback__;\n\t},\n};\n\n/** 对点击回调进行前缘节流；冷却期为 1 秒，卸载时清理监听与计时器。 */\nexport const vThrottle = withInstallDirective(ThrottleDirective, \"throttle\");\nexport default vThrottle;\n"],"mappings":";;AAgDA,MAAa,YAAY,qBAAqB;CArC7C,QAAQ,IAAI,SAAS;EACpB,IAAI,OAAO,QAAQ,UAAU,YAC5B,MAAM,IAAI,UAAU,iBAAiB;EAEtC,GAAG,wBAAwB,QAAQ;EACnC,GAAG,wBAA8B;GAEhC,IAAI,GAAG,uBAAuB,KAAA,KAAa,GAAG,UAAU;GACxD,GAAG,WAAW;GAEd,GAAG,qBAAqB,iBAAiB;IACxC,GAAG,qBAAqB,KAAA;IACxB,GAAG,WAAW;GACf,GAAG,GAAI;GACP,GAAG,wBAAwB;EAC5B;EACA,GAAG,iBAAiB,SAAS,GAAG,eAAe;CAChD;CACA,QAAQ,IAAI,SAAS;EACpB,IAAI,OAAO,QAAQ,UAAU,YAC5B,MAAM,IAAI,UAAU,iBAAiB;EAEtC,GAAG,wBAAwB,QAAQ;CACpC;CACA,cAAc,IAAI;EACjB,IAAI,GAAG,iBAAiB,GAAG,oBAAoB,SAAS,GAAG,eAAe;EAC1E,IAAI,GAAG,uBAAuB,KAAA,GAAW;GACxC,aAAa,GAAG,kBAAkB;GAClC,GAAG,WAAW;EACf;EACA,OAAO,GAAG;EACV,OAAO,GAAG;EACV,OAAO,GAAG;CACX;AAI6C,GAAmB,UAAU"}