UNPKG

bootstrap-vue-next

Version:

Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development

88 lines (87 loc) 2.43 kB
require("./chunk-CoQrYLCe.js"); const require_functions = require("./functions-DCQKr6wc.js"); let vue = require("vue"); //#region src/utils/debounce.ts /** * @internal */ function createFilterWrapper(filter, fn) { function wrapper(...args) { return new Promise((resolve, reject) => { Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject); }); } wrapper.cancel = filter.cancel; return wrapper; } /** * Create an EventFilter that debounce the events */ function debounceFilter(ms, options = {}) { let timer; let maxTimer; let lastRejector = require_functions.noop; const _clearTimeout = (timer) => { clearTimeout(timer); lastRejector(); lastRejector = require_functions.noop; }; let lastInvoker; const filter = (invoke) => { const duration = (0, vue.toValue)(ms); const maxDuration = (0, vue.toValue)(options.maxWait); if (timer) _clearTimeout(timer); if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { if (maxTimer) { _clearTimeout(maxTimer); maxTimer = null; } return Promise.resolve(invoke()); } return new Promise((resolve, reject) => { lastRejector = options.rejectOnCancel ? reject : resolve; lastInvoker = invoke; if (maxDuration && !maxTimer) maxTimer = setTimeout(() => { if (timer) _clearTimeout(timer); maxTimer = null; resolve(lastInvoker()); }, maxDuration); timer = setTimeout(() => { if (maxTimer) _clearTimeout(maxTimer); maxTimer = null; resolve(invoke()); }, duration); }); }; filter.cancel = () => { if (timer) _clearTimeout(timer); if (maxTimer) _clearTimeout(maxTimer); maxTimer = null; }; return filter; } /** * Debounce execution of a function. * * @see https://vueuse.org/useDebounceFn * @param fn A function to be executed after delay milliseconds debounced. * @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful. * @param options Options * * @return A new, debounce, function, provided with a cancel method. */ function useDebounceFn(fn, ms = 200, options = {}) { return createFilterWrapper(debounceFilter(ms, options), fn); } //#endregion Object.defineProperty(exports, "useDebounceFn", { enumerable: true, get: function() { return useDebounceFn; } }); //# sourceMappingURL=debounce-BfDJWP7y.js.map