{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/directives/click-debounce/index.ts"],"sourcesContent":["/**\n * v-debounce\n * 按钮防抖指令\n */\nimport { withInstallDirective } from \"../../utils/vue/install\";\nimport type { Directive } from \"vue\";\n\ninterface DebounceElement extends HTMLElement {\n\t__debounce_timer__?: ReturnType<typeof setTimeout>;\n\t__debounce_originClick__?: (...arguments_: unknown[]) => unknown;\n}\n\nconst DebounceDirective: Directive<DebounceElement> = {\n\tcreated(el, _binding, vNode) {\n\t\tconst props = vNode.props as { onClick?: (...arguments_: unknown[]) => unknown } | null;\n\t\tif (props?.onClick === undefined) return;\n\n\t\t// 记录原来的点击事件方法\n\t\tel.__debounce_originClick__ = props.onClick;\n\n\t\t// 替换原来的点击事件\n\t\tprops.onClick = (...arguments_: unknown[]): void => {\n\t\t\tif (el.__debounce_timer__) {\n\t\t\t\tclearTimeout(el.__debounce_timer__);\n\t\t\t}\n\t\t\t// 防抖处理\n\t\t\tel.__debounce_timer__ = setTimeout(() => {\n\t\t\t\tel.__debounce_timer__ = undefined;\n\t\t\t\tel.__debounce_originClick__?.(...arguments_);\n\t\t\t}, 500);\n\t\t};\n\t},\n\tbeforeUnmount(el) {\n\t\t// 卸载后不再触发延迟业务回调，同时释放闭包引用。\n\t\tif (el.__debounce_timer__ !== undefined) clearTimeout(el.__debounce_timer__);\n\t\tdelete el.__debounce_timer__;\n\t\tdelete el.__debounce_originClick__;\n\t},\n};\n\n/** 对点击回调进行防抖处理的 Vue 指令。 */\nexport const vDebounce = withInstallDirective(DebounceDirective, \"debounce\");\nexport default vDebounce;\n"],"mappings":";;AAyCA,MAAa,YAAY,qBAAqB;CA5B7C,QAAQ,IAAI,UAAU,OAAO;EAC5B,MAAM,QAAQ,MAAM;EACpB,IAAI,OAAO,YAAY,KAAA,GAAW;EAGlC,GAAG,2BAA2B,MAAM;EAGpC,MAAM,WAAW,GAAG,eAAgC;GACnD,IAAI,GAAG,oBACN,aAAa,GAAG,kBAAkB;GAGnC,GAAG,qBAAqB,iBAAiB;IACxC,GAAG,qBAAqB,KAAA;IACxB,GAAG,2BAA2B,GAAG,UAAU;GAC5C,GAAG,GAAG;EACP;CACD;CACA,cAAc,IAAI;EAEjB,IAAI,GAAG,uBAAuB,KAAA,GAAW,aAAa,GAAG,kBAAkB;EAC3E,OAAO,GAAG;EACV,OAAO,GAAG;CACX;AAI6C,GAAmB,UAAU"}