{"version":3,"file":"performance.mjs","sources":["../../../../packages/utils/performance.ts"],"sourcesContent":["import { noop } from '@element-plus/utils/common'\n\n/**\n * 将一个方法进行节流\n *\n * @param method 需要节流的方法，需自行绑定 this\n * @param interval 节流后的触发间隔，默认 16 ms (1 帧)\n *\n * @returns 节流后的方法\n */\nexport function throttle<T extends (...args: any[]) => any>(\n  method: T,\n  interval = 16\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return noop\n  }\n\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (interval <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let lastCall = 0\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    const current = Date.now()\n    const elapsed = current - lastCall\n\n    clearTimeout(timer)\n\n    if (elapsed >= interval) {\n      lastCall = current\n      invoke(...args)\n    } else {\n      timer = setTimeout(() => {\n        lastCall = Date.now()\n        invoke(...args)\n      }, Math.max(0, interval - elapsed))\n    }\n  }\n}\n\n/**\n * 将一个方法进行防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n * @param delay 防抖的限制时间，默认 100ms\n *\n * @returns 防抖后的方法\n */\nexport function debounce<T extends (...args: any[]) => any>(\n  method: T,\n  delay = 100\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return noop\n  }\n\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (delay <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    clearTimeout(timer)\n\n    timer = setTimeout(() => {\n      invoke(...args)\n    }, delay)\n  }\n}\n\n/**\n * 对给定的方法进行微任务级别的防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n *\n * @returns 防抖后的方法\n */\nexport function debounceMinor<T extends (...args: any[]) => any>(method: T) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  let called = false\n  let lastArgs: Parameters<T>\n  let promise: Promise<Awaited<ReturnType<T>>>\n\n  return function (...args: Parameters<T>) {\n    lastArgs = args\n\n    if (!called) {\n      called = true\n      promise = Promise.resolve().then(() => {\n        called = false\n        promise = undefined!\n\n        return method(...lastArgs)\n      })\n    }\n\n    return promise\n  }\n}\n"],"names":[],"mappings":";;AAUgB,SAAA,QAAA,CACd,MACA,EAAA,QAAA,GAAW,EACuB,EAAA;AAClC,EAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,MAAA,GAAS,IAAI,IAAwB,KAAA;AACzC,IAAA,MAAA,CAAO,GAAG,IAAI,CAAA,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,IAAI,YAAY,CAAG,EAAA;AACjB,IAAA,OAAO,cAAc,MAAM,CAAA,CAAA;AAAA,GAC7B;AAEA,EAAA,IAAI,QAAW,GAAA,CAAA,CAAA;AACf,EAAI,IAAA,KAAA,CAAA;AAEJ,EAAA,OAAO,YAAa,IAAqB,EAAA;AACvC,IAAM,MAAA,OAAA,GAAU,KAAK,GAAI,EAAA,CAAA;AACzB,IAAA,MAAM,UAAU,OAAU,GAAA,QAAA,CAAA;AAE1B,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAA,IAAI,WAAW,QAAU,EAAA;AACvB,MAAW,QAAA,GAAA,OAAA,CAAA;AACX,MAAA,MAAA,CAAO,GAAG,IAAI,CAAA,CAAA;AAAA,KACT,MAAA;AACL,MAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,QAAA,QAAA,GAAW,KAAK,GAAI,EAAA,CAAA;AACpB,QAAA,MAAA,CAAO,GAAG,IAAI,CAAA,CAAA;AAAA,SACb,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,QAAA,GAAW,OAAO,CAAC,CAAA,CAAA;AAAA,KACpC;AAAA,GACF,CAAA;AACF,CAAA;AAUgB,SAAA,QAAA,CACd,MACA,EAAA,KAAA,GAAQ,GAC0B,EAAA;AAClC,EAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,MAAA,GAAS,IAAI,IAAwB,KAAA;AACzC,IAAA,MAAA,CAAO,GAAG,IAAI,CAAA,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,cAAc,MAAM,CAAA,CAAA;AAAA,GAC7B;AAEA,EAAI,IAAA,KAAA,CAAA;AAEJ,EAAA,OAAO,YAAa,IAAqB,EAAA;AACvC,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,MAAA,MAAA,CAAO,GAAG,IAAI,CAAA,CAAA;AAAA,OACb,KAAK,CAAA,CAAA;AAAA,GACV,CAAA;AACF,CAAA;AASO,SAAS,cAAiD,MAAW,EAAA;AAC1E,EAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,MAAS,GAAA,KAAA,CAAA;AACb,EAAI,IAAA,QAAA,CAAA;AACJ,EAAI,IAAA,OAAA,CAAA;AAEJ,EAAA,OAAO,YAAa,IAAqB,EAAA;AACvC,IAAW,QAAA,GAAA,IAAA,CAAA;AAEX,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAS,MAAA,GAAA,IAAA,CAAA;AACT,MAAA,OAAA,GAAU,OAAQ,CAAA,OAAA,EAAU,CAAA,IAAA,CAAK,MAAM;AACrC,QAAS,MAAA,GAAA,KAAA,CAAA;AACT,QAAU,OAAA,GAAA,KAAA,CAAA,CAAA;AAEV,QAAO,OAAA,MAAA,CAAO,GAAG,QAAQ,CAAA,CAAA;AAAA,OAC1B,CAAA,CAAA;AAAA,KACH;AAEA,IAAO,OAAA,OAAA,CAAA;AAAA,GACT,CAAA;AACF;;;;"}