UNPKG

@reactive-vscode/vueuse

Version:

Useful VueUse utilities for VSCode extension development

1,761 lines 103 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const reactivity = require("@reactive-vscode/reactivity"); function computedWithControl(source, fn, options = {}) { let v = void 0; let track; let trigger; let dirty = true; const update = () => { dirty = true; trigger(); }; reactivity.watch(source, update, { flush: "sync", ...options }); const get2 = typeof fn === "function" ? fn : fn.get; const set2 = typeof fn === "function" ? void 0 : fn.set; const result = reactivity.customRef((_track, _trigger) => { track = _track; trigger = _trigger; return { get() { if (dirty) { v = get2(v); dirty = false; } track(); return v; }, set(v2) { set2 == null ? void 0 : set2(v2); } }; }); result.trigger = update; return result; } function tryOnScopeDispose(fn) { if (reactivity.getCurrentScope()) { reactivity.onScopeDispose(fn); return true; } return false; } // @__NO_SIDE_EFFECTS__ function createEventHook() { const fns = /* @__PURE__ */ new Set(); const off = (fn) => { fns.delete(fn); }; const clear = () => { fns.clear(); }; const on = (fn) => { fns.add(fn); const offFn = () => off(fn); tryOnScopeDispose(offFn); return { off: offFn }; }; const trigger = (...args) => { return Promise.all(Array.from(fns).map((fn) => fn(...args))); }; return { on, off, trigger, clear }; } // @__NO_SIDE_EFFECTS__ function createGlobalState(stateFactory) { let initialized = false; let state; const scope = reactivity.effectScope(true); return (...args) => { if (!initialized) { state = scope.run(() => stateFactory(...args)); initialized = true; } return state; }; } // @__NO_SIDE_EFFECTS__ function createRef(value, deep) { if (deep === true) { return reactivity.ref(value); } else { return reactivity.shallowRef(value); } } // @__NO_SIDE_EFFECTS__ function createSharedComposable(composable) { let subscribers = 0; let state; let scope; const dispose = () => { subscribers -= 1; if (scope && subscribers <= 0) { scope.stop(); state = void 0; scope = void 0; } }; return (...args) => { subscribers += 1; if (!scope) { scope = reactivity.effectScope(true); state = scope.run(() => composable(...args)); } tryOnScopeDispose(dispose); return state; }; } function extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) { for (const [key, value] of Object.entries(extend)) { if (key === "value") continue; if (reactivity.isRef(value) && unwrap) { Object.defineProperty(ref, key, { get() { return value.value; }, set(v) { value.value = v; }, enumerable }); } else { Object.defineProperty(ref, key, { value, enumerable }); } } return ref; } function get(obj, key) { if (key == null) return reactivity.unref(obj); return reactivity.unref(obj)[key]; } function isDefined(v) { return reactivity.unref(v) != null; } // @__NO_SIDE_EFFECTS__ function makeDestructurable(obj, arr) { if (typeof Symbol !== "undefined") { const clone = { ...obj }; Object.defineProperty(clone, Symbol.iterator, { enumerable: false, value() { let index = 0; return { next: () => ({ value: arr[index++], done: index > arr.length }) }; } }); return clone; } else { return Object.assign([...arr], obj); } } // @__NO_SIDE_EFFECTS__ function reactify(fn, options) { const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? reactivity.unref : reactivity.toValue; return function(...args) { return reactivity.computed(() => fn.apply(this, args.map((i) => unrefFn(i)))); }; } // @__NO_SIDE_EFFECTS__ function reactifyObject(obj, optionsOrKeys = {}) { let keys = []; let options; if (Array.isArray(optionsOrKeys)) { keys = optionsOrKeys; } else { options = optionsOrKeys; const { includeOwnProperties = true } = optionsOrKeys; keys.push(...Object.keys(obj)); if (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj)); } return Object.fromEntries( keys.map((key) => { const value = obj[key]; return [ key, typeof value === "function" ? /* @__PURE__ */ reactify(value.bind(obj), options) : value ]; }) ); } function toReactive(objectRef) { if (!reactivity.isRef(objectRef)) return reactivity.reactive(objectRef); const proxy = new Proxy({}, { get(_, p, receiver) { return reactivity.unref(Reflect.get(objectRef.value, p, receiver)); }, set(_, p, value) { if (reactivity.isRef(objectRef.value[p]) && !reactivity.isRef(value)) objectRef.value[p].value = value; else objectRef.value[p] = value; return true; }, deleteProperty(_, p) { return Reflect.deleteProperty(objectRef.value, p); }, has(_, p) { return Reflect.has(objectRef.value, p); }, ownKeys() { return Object.keys(objectRef.value); }, getOwnPropertyDescriptor() { return { enumerable: true, configurable: true }; } }); return reactivity.reactive(proxy); } function reactiveComputed(fn) { return toReactive(reactivity.computed(fn)); } function reactiveOmit(obj, ...keys) { const flatKeys = keys.flat(); const predicate = flatKeys[0]; return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(reactivity.toRefs(obj)).filter(([k, v]) => !predicate(reactivity.toValue(v), k))) : Object.fromEntries(Object.entries(reactivity.toRefs(obj)).filter((e) => !flatKeys.includes(e[0])))); } const isClient = typeof window !== "undefined" && typeof document !== "undefined"; const isWorker = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope; const isDef = (val) => typeof val !== "undefined"; const notNullish = (val) => val != null; const assert = (condition, ...infos) => { if (!condition) console.warn(...infos); }; const toString = Object.prototype.toString; const isObject = (val) => toString.call(val) === "[object Object]"; const now = () => Date.now(); const timestamp = () => +Date.now(); const clamp = (n, min, max) => Math.min(max, Math.max(min, n)); const noop = () => { }; const rand = (min, max) => { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; }; const hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key); function toRef(...args) { if (args.length !== 1) return reactivity.toRef(...args); const r = args[0]; return typeof r === "function" ? reactivity.readonly(reactivity.customRef(() => ({ get: r, set: noop }))) : reactivity.ref(r); } const resolveRef = toRef; function reactivePick(obj, ...keys) { const flatKeys = keys.flat(); const predicate = flatKeys[0]; return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(reactivity.toRefs(obj)).filter(([k, v]) => predicate(reactivity.toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)]))); } function refAutoReset(defaultValue, afterMs = 1e4) { return reactivity.customRef((track, trigger) => { let value = reactivity.toValue(defaultValue); let timer; const resetAfter = () => setTimeout(() => { value = reactivity.toValue(defaultValue); trigger(); }, reactivity.toValue(afterMs)); tryOnScopeDispose(() => { clearTimeout(timer); }); return { get() { track(); return value; }, set(newValue) { value = newValue; trigger(); clearTimeout(timer); timer = resetAfter(); } }; }); } 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); }); } return wrapper; } const bypassFilter = (invoke2) => { return invoke2(); }; function debounceFilter(ms, options = {}) { let timer; let maxTimer; let lastRejector = noop; const _clearTimeout = (timer2) => { clearTimeout(timer2); lastRejector(); lastRejector = noop; }; let lastInvoker; const filter = (invoke2) => { const duration = reactivity.toValue(ms); const maxDuration = reactivity.toValue(options.maxWait); if (timer) _clearTimeout(timer); if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { if (maxTimer) { _clearTimeout(maxTimer); maxTimer = void 0; } return Promise.resolve(invoke2()); } return new Promise((resolve, reject) => { lastRejector = options.rejectOnCancel ? reject : resolve; lastInvoker = invoke2; if (maxDuration && !maxTimer) { maxTimer = setTimeout(() => { if (timer) _clearTimeout(timer); maxTimer = void 0; resolve(lastInvoker()); }, maxDuration); } timer = setTimeout(() => { if (maxTimer) _clearTimeout(maxTimer); maxTimer = void 0; resolve(invoke2()); }, duration); }); }; return filter; } function throttleFilter(...args) { let lastExec = 0; let timer; let isLeading = true; let lastRejector = noop; let lastValue; let ms; let trailing; let leading; let rejectOnCancel; if (!reactivity.isRef(args[0]) && typeof args[0] === "object") ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]); else [ms, trailing = true, leading = true, rejectOnCancel = false] = args; const clear = () => { if (timer) { clearTimeout(timer); timer = void 0; lastRejector(); lastRejector = noop; } }; const filter = (_invoke) => { const duration = reactivity.toValue(ms); const elapsed = Date.now() - lastExec; const invoke2 = () => { return lastValue = _invoke(); }; clear(); if (duration <= 0) { lastExec = Date.now(); return invoke2(); } if (elapsed > duration && (leading || !isLeading)) { lastExec = Date.now(); invoke2(); } else if (trailing) { lastValue = new Promise((resolve, reject) => { lastRejector = rejectOnCancel ? reject : resolve; timer = setTimeout(() => { lastExec = Date.now(); isLeading = true; resolve(invoke2()); clear(); }, Math.max(0, duration - elapsed)); }); } if (!leading && !timer) timer = setTimeout(() => isLeading = true, duration); isLeading = false; return lastValue; }; return filter; } function pausableFilter(extendFilter = bypassFilter, options = {}) { const { initialState = "active" } = options; const isActive = toRef(initialState === "active"); function pause() { isActive.value = false; } function resume() { isActive.value = true; } const eventFilter = (...args) => { if (isActive.value) extendFilter(...args); }; return { isActive: reactivity.readonly(isActive), pause, resume, eventFilter }; } function promiseTimeout(ms, throwOnTimeout = false, reason = "Timeout") { return new Promise((resolve, reject) => { if (throwOnTimeout) setTimeout(() => reject(reason), ms); else setTimeout(resolve, ms); }); } function identity(arg) { return arg; } function createSingletonPromise(fn) { let _promise; function wrapper() { if (!_promise) _promise = fn(); return _promise; } wrapper.reset = async () => { const _prev = _promise; _promise = void 0; if (_prev) await _prev; }; return wrapper; } function invoke(fn) { return fn(); } function containsProp(obj, ...props) { return props.some((k) => k in obj); } function increaseWithUnit(target, delta) { var _a; if (typeof target === "number") return target + delta; const value = ((_a = target.match(/^-?\d+\.?\d*/)) == null ? void 0 : _a[0]) || ""; const unit = target.slice(value.length); const result = Number.parseFloat(value) + delta; if (Number.isNaN(result)) return target; return result + unit; } function objectPick(obj, keys, omitUndefined = false) { return keys.reduce((n, k) => { if (k in obj) { if (!omitUndefined || obj[k] !== void 0) n[k] = obj[k]; } return n; }, {}); } function objectOmit(obj, keys, omitUndefined = false) { return Object.fromEntries(Object.entries(obj).filter(([key, value]) => { return (!omitUndefined || value !== void 0) && !keys.includes(key); })); } function objectEntries(obj) { return Object.entries(obj); } function toArray(value) { return Array.isArray(value) ? value : [value]; } function cacheStringFunction(fn) { const cache = /* @__PURE__ */ Object.create(null); return (str) => { const hit = cache[str]; return hit || (cache[str] = fn(str)); }; } const hyphenateRE = /\B([A-Z])/g; const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); const camelizeRE = /-(\w)/g; const camelize = cacheStringFunction((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); }); function getLifeCycleTarget(target) { return target || null; } // @__NO_SIDE_EFFECTS__ function useDebounceFn(fn, ms = 200, options = {}) { return createFilterWrapper( debounceFilter(ms, options), fn ); } function refDebounced(value, ms = 200, options = {}) { const debounced = reactivity.ref(reactivity.toValue(value)); const updater = /* @__PURE__ */ useDebounceFn(() => { debounced.value = value.value; }, ms, options); reactivity.watch(value, () => updater()); return reactivity.shallowReadonly(debounced); } // @__NO_SIDE_EFFECTS__ function refDefault(source, defaultValue) { return reactivity.computed({ get() { var _a; return (_a = source.value) != null ? _a : defaultValue; }, set(value) { source.value = value; } }); } // @__NO_SIDE_EFFECTS__ function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) { return createFilterWrapper( throttleFilter(ms, trailing, leading, rejectOnCancel), fn ); } function refThrottled(value, delay = 200, trailing = true, leading = true) { if (delay <= 0) return value; const throttled = reactivity.ref(reactivity.toValue(value)); const updater = /* @__PURE__ */ useThrottleFn(() => { throttled.value = value.value; }, delay, trailing, leading); reactivity.watch(value, () => updater()); return throttled; } // @__NO_SIDE_EFFECTS__ function refWithControl(initial, options = {}) { let source = initial; let track; let trigger; const ref = reactivity.customRef((_track, _trigger) => { track = _track; trigger = _trigger; return { get() { return get2(); }, set(v) { set2(v); } }; }); function get2(tracking = true) { if (tracking) track(); return source; } function set2(value, triggering = true) { var _a, _b; if (value === source) return; const old = source; if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false) return; source = value; (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old); if (triggering) trigger(); } const untrackedGet = () => get2(false); const silentSet = (v) => set2(v, false); const peek = () => get2(false); const lay = (v) => set2(v, false); return extendRef( ref, { get: get2, set: set2, untrackedGet, silentSet, peek, lay }, { enumerable: true } ); } const controlledRef = refWithControl; function set(...args) { if (args.length === 2) { const [ref, value] = args; ref.value = value; } if (args.length === 3) { const [target, key, value] = args; target[key] = value; } } function watchWithFilter(source, cb, options = {}) { const { eventFilter = bypassFilter, ...watchOptions } = options; return reactivity.watch( source, createFilterWrapper( eventFilter, cb ), watchOptions ); } function watchPausable(source, cb, options = {}) { const { eventFilter: filter, initialState = "active", ...watchOptions } = options; const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState }); const stop = watchWithFilter( source, cb, { ...watchOptions, eventFilter } ); return { stop, pause, resume, isActive }; } function syncRef(left, right, ...[options]) { const { flush = "sync", deep = false, immediate = true, direction = "both", transform = {} } = options || {}; const watchers = []; const transformLTR = "ltr" in transform && transform.ltr || ((v) => v); const transformRTL = "rtl" in transform && transform.rtl || ((v) => v); if (direction === "both" || direction === "ltr") { watchers.push(watchPausable( left, (newValue) => { watchers.forEach((w) => w.pause()); right.value = transformLTR(newValue); watchers.forEach((w) => w.resume()); }, { flush, deep, immediate } )); } if (direction === "both" || direction === "rtl") { watchers.push(watchPausable( right, (newValue) => { watchers.forEach((w) => w.pause()); left.value = transformRTL(newValue); watchers.forEach((w) => w.resume()); }, { flush, deep, immediate } )); } const stop = () => { watchers.forEach((w) => w.stop()); }; return stop; } function syncRefs(source, targets, options = {}) { const { flush = "sync", deep = false, immediate = true } = options; const targetsArray = toArray(targets); return reactivity.watch( source, (newValue) => targetsArray.forEach((target) => target.value = newValue), { flush, deep, immediate } ); } function toRefs(objectRef, options = {}) { if (!reactivity.isRef(objectRef)) return reactivity.toRefs(objectRef); const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {}; for (const key in objectRef.value) { result[key] = reactivity.customRef(() => ({ get() { return objectRef.value[key]; }, set(v) { var _a; const replaceRef = (_a = reactivity.toValue(options.replaceRef)) != null ? _a : true; if (replaceRef) { if (Array.isArray(objectRef.value)) { const copy = [...objectRef.value]; copy[key] = v; objectRef.value = copy; } else { const newObject = { ...objectRef.value, [key]: v }; Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value)); objectRef.value = newObject; } } else { objectRef.value[key] = v; } } })); } return result; } const toValue = reactivity.toValue; const resolveUnref = reactivity.toValue; function tryOnMounted(fn, sync = true, target) { const instance = getLifeCycleTarget(target); if (instance) ; else if (sync) fn(); else reactivity.nextTick(fn); } function createUntil(r, isNot = false) { function toMatch(condition, { flush = "sync", deep = false, timeout, throwOnTimeout } = {}) { let stop = null; const watcher = new Promise((resolve) => { stop = reactivity.watch( r, (v) => { if (condition(v) !== isNot) { if (stop) stop(); else reactivity.nextTick(() => stop == null ? void 0 : stop()); resolve(v); } }, { flush, deep, immediate: true } ); }); const promises = [watcher]; if (timeout != null) { promises.push( promiseTimeout(timeout, throwOnTimeout).then(() => reactivity.toValue(r)).finally(() => stop == null ? void 0 : stop()) ); } return Promise.race(promises); } function toBe(value, options) { if (!reactivity.isRef(value)) return toMatch((v) => v === value, options); const { flush = "sync", deep = false, timeout, throwOnTimeout } = options != null ? options : {}; let stop = null; const watcher = new Promise((resolve) => { stop = reactivity.watch( [r, value], ([v1, v2]) => { if (isNot !== (v1 === v2)) { if (stop) stop(); else reactivity.nextTick(() => stop == null ? void 0 : stop()); resolve(v1); } }, { flush, deep, immediate: true } ); }); const promises = [watcher]; if (timeout != null) { promises.push( promiseTimeout(timeout, throwOnTimeout).then(() => reactivity.toValue(r)).finally(() => { stop == null ? void 0 : stop(); return reactivity.toValue(r); }) ); } return Promise.race(promises); } function toBeTruthy(options) { return toMatch((v) => Boolean(v), options); } function toBeNull(options) { return toBe(null, options); } function toBeUndefined(options) { return toBe(void 0, options); } function toBeNaN(options) { return toMatch(Number.isNaN, options); } function toContains(value, options) { return toMatch((v) => { const array = Array.from(v); return array.includes(value) || array.includes(reactivity.toValue(value)); }, options); } function changed(options) { return changedTimes(1, options); } function changedTimes(n = 1, options) { let count = -1; return toMatch(() => { count += 1; return count >= n; }, options); } if (Array.isArray(reactivity.toValue(r))) { const instance = { toMatch, toContains, changed, changedTimes, get not() { return createUntil(r, !isNot); } }; return instance; } else { const instance = { toMatch, toBe, toBeTruthy, toBeNull, toBeNaN, toBeUndefined, changed, changedTimes, get not() { return createUntil(r, !isNot); } }; return instance; } } function until(r) { return createUntil(r); } function defaultComparator(value, othVal) { return value === othVal; } // @__NO_SIDE_EFFECTS__ function useArrayDifference(...args) { var _a, _b; const list = args[0]; const values = args[1]; let compareFn = (_a = args[2]) != null ? _a : defaultComparator; const { symmetric = false } = (_b = args[3]) != null ? _b : {}; if (typeof compareFn === "string") { const key = compareFn; compareFn = (value, othVal) => value[key] === othVal[key]; } const diff1 = reactivity.computed(() => reactivity.toValue(list).filter((x) => reactivity.toValue(values).findIndex((y) => compareFn(x, y)) === -1)); if (symmetric) { const diff2 = reactivity.computed(() => reactivity.toValue(values).filter((x) => reactivity.toValue(list).findIndex((y) => compareFn(x, y)) === -1)); return reactivity.computed(() => symmetric ? [...reactivity.toValue(diff1), ...reactivity.toValue(diff2)] : reactivity.toValue(diff1)); } else { return diff1; } } // @__NO_SIDE_EFFECTS__ function useArrayEvery(list, fn) { return reactivity.computed(() => reactivity.toValue(list).every((element, index, array) => fn(reactivity.toValue(element), index, array))); } // @__NO_SIDE_EFFECTS__ function useArrayFilter(list, fn) { return reactivity.computed(() => reactivity.toValue(list).map((i) => reactivity.toValue(i)).filter(fn)); } // @__NO_SIDE_EFFECTS__ function useArrayFind(list, fn) { return reactivity.computed(() => reactivity.toValue( reactivity.toValue(list).find((element, index, array) => fn(reactivity.toValue(element), index, array)) )); } // @__NO_SIDE_EFFECTS__ function useArrayFindIndex(list, fn) { return reactivity.computed(() => reactivity.toValue(list).findIndex((element, index, array) => fn(reactivity.toValue(element), index, array))); } function findLast(arr, cb) { let index = arr.length; while (index-- > 0) { if (cb(arr[index], index, arr)) return arr[index]; } return void 0; } // @__NO_SIDE_EFFECTS__ function useArrayFindLast(list, fn) { return reactivity.computed(() => reactivity.toValue( !Array.prototype.findLast ? findLast(reactivity.toValue(list), (element, index, array) => fn(reactivity.toValue(element), index, array)) : reactivity.toValue(list).findLast((element, index, array) => fn(reactivity.toValue(element), index, array)) )); } function isArrayIncludesOptions(obj) { return isObject(obj) && containsProp(obj, "formIndex", "comparator"); } // @__NO_SIDE_EFFECTS__ function useArrayIncludes(...args) { var _a; const list = args[0]; const value = args[1]; let comparator = args[2]; let formIndex = 0; if (isArrayIncludesOptions(comparator)) { formIndex = (_a = comparator.fromIndex) != null ? _a : 0; comparator = comparator.comparator; } if (typeof comparator === "string") { const key = comparator; comparator = (element, value2) => element[key] === reactivity.toValue(value2); } comparator = comparator != null ? comparator : (element, value2) => element === reactivity.toValue(value2); return reactivity.computed(() => reactivity.toValue(list).slice(formIndex).some((element, index, array) => comparator( reactivity.toValue(element), reactivity.toValue(value), index, reactivity.toValue(array) ))); } // @__NO_SIDE_EFFECTS__ function useArrayJoin(list, separator) { return reactivity.computed(() => reactivity.toValue(list).map((i) => reactivity.toValue(i)).join(reactivity.toValue(separator))); } // @__NO_SIDE_EFFECTS__ function useArrayMap(list, fn) { return reactivity.computed(() => reactivity.toValue(list).map((i) => reactivity.toValue(i)).map(fn)); } // @__NO_SIDE_EFFECTS__ function useArrayReduce(list, reducer, ...args) { const reduceCallback = (sum, value, index) => reducer(reactivity.toValue(sum), reactivity.toValue(value), index); return reactivity.computed(() => { const resolved = reactivity.toValue(list); return args.length ? resolved.reduce(reduceCallback, typeof args[0] === "function" ? reactivity.toValue(args[0]()) : reactivity.toValue(args[0])) : resolved.reduce(reduceCallback); }); } // @__NO_SIDE_EFFECTS__ function useArraySome(list, fn) { return reactivity.computed(() => reactivity.toValue(list).some((element, index, array) => fn(reactivity.toValue(element), index, array))); } function uniq(array) { return Array.from(new Set(array)); } function uniqueElementsBy(array, fn) { return array.reduce((acc, v) => { if (!acc.some((x) => fn(v, x, array))) acc.push(v); return acc; }, []); } // @__NO_SIDE_EFFECTS__ function useArrayUnique(list, compareFn) { return reactivity.computed(() => { const resolvedList = reactivity.toValue(list).map((element) => reactivity.toValue(element)); return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList); }); } function useCounter(initialValue = 0, options = {}) { let _initialValue = reactivity.unref(initialValue); const count = reactivity.shallowRef(initialValue); const { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options; const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min); const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max); const get2 = () => count.value; const set2 = (val) => count.value = Math.max(min, Math.min(max, val)); const reset = (val = _initialValue) => { _initialValue = val; return set2(val); }; return { count: reactivity.shallowReadonly(count), inc, dec, get: get2, set: set2, reset }; } const REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[T\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/i; const REGEX_FORMAT = /[YMDHhms]o|\[([^\]]+)\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g; function defaultMeridiem(hours, minutes, isLowercase, hasPeriod) { let m = hours < 12 ? "AM" : "PM"; if (hasPeriod) m = m.split("").reduce((acc, curr) => acc += `${curr}.`, ""); return isLowercase ? m.toLowerCase() : m; } function formatOrdinal(num) { const suffixes = ["th", "st", "nd", "rd"]; const v = num % 100; return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]); } function formatDate(date, formatStr, options = {}) { var _a; const years = date.getFullYear(); const month = date.getMonth(); const days = date.getDate(); const hours = date.getHours(); const minutes = date.getMinutes(); const seconds = date.getSeconds(); const milliseconds = date.getMilliseconds(); const day = date.getDay(); const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem; const stripTimeZone = (dateString) => { var _a2; return (_a2 = dateString.split(" ")[1]) != null ? _a2 : ""; }; const matches = { Yo: () => formatOrdinal(years), YY: () => String(years).slice(-2), YYYY: () => years, M: () => month + 1, Mo: () => formatOrdinal(month + 1), MM: () => `${month + 1}`.padStart(2, "0"), MMM: () => date.toLocaleDateString(reactivity.toValue(options.locales), { month: "short" }), MMMM: () => date.toLocaleDateString(reactivity.toValue(options.locales), { month: "long" }), D: () => String(days), Do: () => formatOrdinal(days), DD: () => `${days}`.padStart(2, "0"), H: () => String(hours), Ho: () => formatOrdinal(hours), HH: () => `${hours}`.padStart(2, "0"), h: () => `${hours % 12 || 12}`.padStart(1, "0"), ho: () => formatOrdinal(hours % 12 || 12), hh: () => `${hours % 12 || 12}`.padStart(2, "0"), m: () => String(minutes), mo: () => formatOrdinal(minutes), mm: () => `${minutes}`.padStart(2, "0"), s: () => String(seconds), so: () => formatOrdinal(seconds), ss: () => `${seconds}`.padStart(2, "0"), SSS: () => `${milliseconds}`.padStart(3, "0"), d: () => day, dd: () => date.toLocaleDateString(reactivity.toValue(options.locales), { weekday: "narrow" }), ddd: () => date.toLocaleDateString(reactivity.toValue(options.locales), { weekday: "short" }), dddd: () => date.toLocaleDateString(reactivity.toValue(options.locales), { weekday: "long" }), A: () => meridiem(hours, minutes), AA: () => meridiem(hours, minutes, false, true), a: () => meridiem(hours, minutes, true), aa: () => meridiem(hours, minutes, true, true), z: () => stripTimeZone(date.toLocaleDateString(reactivity.toValue(options.locales), { timeZoneName: "shortOffset" })), zz: () => stripTimeZone(date.toLocaleDateString(reactivity.toValue(options.locales), { timeZoneName: "shortOffset" })), zzz: () => stripTimeZone(date.toLocaleDateString(reactivity.toValue(options.locales), { timeZoneName: "shortOffset" })), zzzz: () => stripTimeZone(date.toLocaleDateString(reactivity.toValue(options.locales), { timeZoneName: "longOffset" })) }; return formatStr.replace(REGEX_FORMAT, (match, $1) => { var _a2, _b; return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match; }); } function normalizeDate(date) { if (date === null) return new Date(Number.NaN); if (date === void 0) return /* @__PURE__ */ new Date(); if (date instanceof Date) return new Date(date); if (typeof date === "string" && !/Z$/i.test(date)) { const d = date.match(REGEX_PARSE); if (d) { const m = d[2] - 1 || 0; const ms = (d[7] || "0").substring(0, 3); return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms); } } return new Date(date); } // @__NO_SIDE_EFFECTS__ function useDateFormat(date, formatStr = "HH:mm:ss", options = {}) { return reactivity.computed(() => formatDate(normalizeDate(reactivity.toValue(date)), reactivity.toValue(formatStr), options)); } function useIntervalFn(cb, interval = 1e3, options = {}) { const { immediate = true, immediateCallback = false } = options; let timer = null; const isActive = reactivity.shallowRef(false); function clean() { if (timer) { clearInterval(timer); timer = null; } } function pause() { isActive.value = false; clean(); } function resume() { const intervalValue = reactivity.toValue(interval); if (intervalValue <= 0) return; isActive.value = true; if (immediateCallback) cb(); clean(); if (isActive.value) timer = setInterval(cb, intervalValue); } if (immediate && isClient) resume(); if (reactivity.isRef(interval) || typeof interval === "function") { const stopWatch = reactivity.watch(interval, () => { if (isActive.value && isClient) resume(); }); tryOnScopeDispose(stopWatch); } tryOnScopeDispose(pause); return { isActive: reactivity.shallowReadonly(isActive), pause, resume }; } function useInterval(interval = 1e3, options = {}) { const { controls: exposeControls = false, immediate = true, callback } = options; const counter = reactivity.shallowRef(0); const update = () => counter.value += 1; const reset = () => { counter.value = 0; }; const controls = useIntervalFn( callback ? () => { update(); callback(counter.value); } : update, interval, { immediate } ); if (exposeControls) { return { counter: reactivity.shallowReadonly(counter), reset, ...controls }; } else { return reactivity.shallowReadonly(counter); } } function useLastChanged(source, options = {}) { var _a; const ms = reactivity.shallowRef((_a = options.initialValue) != null ? _a : null); reactivity.watch( source, () => ms.value = timestamp(), options ); return reactivity.shallowReadonly(ms); } function useTimeoutFn(cb, interval, options = {}) { const { immediate = true, immediateCallback = false } = options; const isPending = reactivity.shallowRef(false); let timer; function clear() { if (timer) { clearTimeout(timer); timer = void 0; } } function stop() { isPending.value = false; clear(); } function start(...args) { if (immediateCallback) cb(); clear(); isPending.value = true; timer = setTimeout(() => { isPending.value = false; timer = void 0; cb(...args); }, reactivity.toValue(interval)); } if (immediate) { isPending.value = true; if (isClient) start(); } tryOnScopeDispose(stop); return { isPending: reactivity.shallowReadonly(isPending), start, stop }; } function useTimeout(interval = 1e3, options = {}) { const { controls: exposeControls = false, callback } = options; const controls = useTimeoutFn( callback != null ? callback : noop, interval, options ); const ready = reactivity.computed(() => !controls.isPending.value); if (exposeControls) { return { ready, ...controls }; } else { return ready; } } // @__NO_SIDE_EFFECTS__ function useToNumber(value, options = {}) { const { method = "parseFloat", radix, nanToZero } = options; return reactivity.computed(() => { let resolved = reactivity.toValue(value); if (typeof method === "function") resolved = method(resolved); else if (typeof resolved === "string") resolved = Number[method](resolved, radix); if (nanToZero && Number.isNaN(resolved)) resolved = 0; return resolved; }); } // @__NO_SIDE_EFFECTS__ function useToString(value) { return reactivity.computed(() => `${reactivity.toValue(value)}`); } // @__NO_SIDE_EFFECTS__ function useToggle(initialValue = false, options = {}) { const { truthyValue = true, falsyValue = false } = options; const valueIsRef = reactivity.isRef(initialValue); const _value = reactivity.shallowRef(initialValue); function toggle(value) { if (arguments.length) { _value.value = value; return _value.value; } else { const truthy = reactivity.toValue(truthyValue); _value.value = _value.value === truthy ? reactivity.toValue(falsyValue) : truthy; return _value.value; } } if (valueIsRef) return toggle; else return [_value, toggle]; } function watchArray(source, cb, options) { let oldList = (options == null ? void 0 : options.immediate) ? [] : [...typeof source === "function" ? source() : Array.isArray(source) ? source : reactivity.toValue(source)]; return reactivity.watch(source, (newList, _, onCleanup) => { const oldListRemains = Array.from({ length: oldList.length }); const added = []; for (const obj of newList) { let found = false; for (let i = 0; i < oldList.length; i++) { if (!oldListRemains[i] && obj === oldList[i]) { oldListRemains[i] = true; found = true; break; } } if (!found) added.push(obj); } const removed = oldList.filter((_2, i) => !oldListRemains[i]); cb(newList, oldList, added, removed, onCleanup); oldList = [...newList]; }, options); } function watchAtMost(source, cb, options) { const { count, ...watchOptions } = options; const current = reactivity.shallowRef(0); const stop = watchWithFilter( source, (...args) => { current.value += 1; if (current.value >= reactivity.toValue(count)) reactivity.nextTick(() => stop()); cb(...args); }, watchOptions ); return { count: current, stop }; } function watchDebounced(source, cb, options = {}) { const { debounce = 0, maxWait = void 0, ...watchOptions } = options; return watchWithFilter( source, cb, { ...watchOptions, eventFilter: debounceFilter(debounce, { maxWait }) } ); } function watchDeep(source, cb, options) { return reactivity.watch( source, cb, { ...options, deep: true } ); } function watchIgnorable(source, cb, options = {}) { const { eventFilter = bypassFilter, ...watchOptions } = options; const filteredCb = createFilterWrapper( eventFilter, cb ); let ignoreUpdates; let ignorePrevAsyncUpdates; let stop; if (watchOptions.flush === "sync") { let ignore = false; ignorePrevAsyncUpdates = () => { }; ignoreUpdates = (updater) => { ignore = true; updater(); ignore = false; }; stop = reactivity.watch( source, (...args) => { if (!ignore) filteredCb(...args); }, watchOptions ); } else { const disposables = []; let ignoreCounter = 0; let syncCounter = 0; ignorePrevAsyncUpdates = () => { ignoreCounter = syncCounter; }; disposables.push( reactivity.watch( source, () => { syncCounter++; }, { ...watchOptions, flush: "sync" } ) ); ignoreUpdates = (updater) => { const syncCounterPrev = syncCounter; updater(); ignoreCounter += syncCounter - syncCounterPrev; }; disposables.push( reactivity.watch( source, (...args) => { const ignore = ignoreCounter > 0 && ignoreCounter === syncCounter; ignoreCounter = 0; syncCounter = 0; if (ignore) return; filteredCb(...args); }, watchOptions ) ); stop = () => { disposables.forEach((fn) => fn()); }; } return { stop, ignoreUpdates, ignorePrevAsyncUpdates }; } function watchImmediate(source, cb, options) { return reactivity.watch( source, cb, { ...options, immediate: true } ); } function watchOnce(source, cb, options) { return reactivity.watch( source, cb, { ...options, once: true } ); } function watchThrottled(source, cb, options = {}) { const { throttle = 0, trailing = true, leading = true, ...watchOptions } = options; return watchWithFilter( source, cb, { ...watchOptions, eventFilter: throttleFilter(throttle, trailing, leading) } ); } function watchTriggerable(source, cb, options = {}) { let cleanupFn; function onEffect() { if (!cleanupFn) return; const fn = cleanupFn; cleanupFn = void 0; fn(); } function onCleanup(callback) { cleanupFn = callback; } const _cb = (value, oldValue) => { onEffect(); return cb(value, oldValue, onCleanup); }; const res = watchIgnorable(source, _cb, options); const { ignoreUpdates } = res; const trigger = () => { let res2; ignoreUpdates(() => { res2 = _cb(getWatchSources(source), getOldValue(source)); }); return res2; }; return { ...res, trigger }; } function getWatchSources(sources) { if (reactivity.isReactive(sources)) return sources; if (Array.isArray(sources)) return sources.map((item) => reactivity.toValue(item)); return reactivity.toValue(sources); } function getOldValue(source) { return Array.isArray(source) ? source.map(() => void 0) : void 0; } function whenever(source, cb, options) { const stop = reactivity.watch( source, (v, ov, onInvalidate) => { if (v) { if (options == null ? void 0 : options.once) reactivity.nextTick(() => stop()); cb(v, ov, onInvalidate); } }, { ...options, once: false } ); return stop; } function computedAsync(evaluationCallback, initialState, optionsOrRef) { var _a; let options; if (reactivity.isRef(optionsOrRef)) { options = { evaluating: optionsOrRef }; } else { options = optionsOrRef || {}; } const { lazy = false, flush = "pre", evaluating = void 0, shallow = true, onError = (_a = globalThis.reportError) != null ? _a : noop } = options; const started = reactivity.shallowRef(!lazy); const current = shallow ? reactivity.shallowRef(initialState) : reactivity.ref(initialState); let counter = 0; reactivity.watchEffect(async (onInvalidate) => { if (!started.value) return; counter++; const counterAtBeginning = counter; let hasFinished = false; if (evaluating) { Promise.resolve().then(() => { evaluating.value = true; }); } try { const result = await evaluationCallback((cancelCallback) => { onInvalidate(() => { if (evaluating) evaluating.value = false; if (!hasFinished) cancelCallback(); }); }); if (counterAtBeginning === counter) current.value = result; } catch (e) { onError(e); } finally { if (evaluating && counterAtBeginning === counter) evaluating.value = false; hasFinished = true; } }, { flush }); if (lazy) { return reactivity.computed(() => { started.value = true; return current.value; }); } else { return current; } } // @__NO_SIDE_EFFECTS__ function createUnrefFn(fn) { return function(...args) { return fn.apply(this, args.map((i) => reactivity.toValue(i))); }; } const defaultWindow = isClient ? window : void 0; function unrefElement(elRef) { var _a; const plain = reactivity.toValue(elRef); return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain; } function useEventListener(...args) { const cleanups = []; const cleanup = () => { cleanups.forEach((fn) => fn()); cleanups.length = 0; }; const register = (el, event, listener, options) => { el.addEventListener(event, listener, options); return () => el.removeEventListener(event, listener, options); }; const firstParamTargets = reactivity.computed(() => { const test = toArray(reactivity.toValue(args[0])).filter((e) => e != null); return test.every((e) => typeof e !== "string") ? test : void 0; }); const stopWatch = watchImmediate( () => { var _a, _b; return [ (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null), toArray(reactivity.toValue(firstParamTargets.value ? args[1] : args[0])), toArray(reactivity.unref(firstParamTargets.value ? args[2] : args[1])), // @ts-expect-error - TypeScript gets the correct types, but somehow still complains reactivity.toValue(firstParamTargets.value ? args[3] : args[2]) ]; }, ([raw_targets, raw_events, raw_listeners, raw_options]) => { cleanup(); if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length)) return; const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options; cleanups.push( ...raw_targets.flatMap( (el) => raw_events.flatMap( (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone)) ) ) ); }, { flush: "post" } ); const stop = () => { stopWatch(); cleanup(); }; tryOnScopeDispose(cleanup); return stop; } // @__NO_SIDE_EFFECTS__ function useMounted() { const isMounted = reactivity.shallowRef(false); return isMounted; } // @__NO_SIDE_EFFECTS__ function useSupported(callback) { const isMounted = /* @__PURE__ */ useMounted(); return reactivity.computed(() => { isMounted.value; return Boolean(callback()); }); } function useRafFn(fn, options = {}) { const { immediate = true, fpsLimit = void 0, window: window2 = defaultWindow, once = false } = options; const isActive = reactivity.shallowRef(false); const intervalLimit = reactivity.computed(() => { return fpsLimit ? 1e3 / reactivity.toValue(fpsLimit) : null; }); let previousFrameTimestamp = 0; let rafId = null; function loop(timestamp2) { if (!isActive.value || !window2) return; if (!previousFrameTimestamp) previousFrameTimestamp = timestamp2; const delta = timestamp2 - previousFrameTimestamp; if (intervalLimit.value && delta < intervalLimit.value) { rafId = window2.requestAnimationFrame(loop); return; } previousFrameTimestamp = timestamp2; fn({ delta, timestamp: timestamp2 }); if (once) { isActive.value = false; rafId = null; return; } rafId = window2.requestAnimationFrame(loop); } function resume() { if (!isActive.value && window2) { isActive.value = true; previousFrameTimestamp = 0; rafId = window2.requestAnimationFrame(loop); } } function pause() { isActive.value = false; if (rafId != null && window2) { window2.cancelAnimationFrame(rafId); rafId = null; } } if (immediate) resume(); tryOnScopeDispose(pause); return { isActive: reactivity.readonly(isActive), pause, resume }; } function useAsyncQueue(tasks, options) { const { interrupt = true, onError = noop, onFinished = noop, signal } = options || {}; const promiseState = { aborted: "aborted", fulfilled: "fulfilled", pending: "pending", rejected: "rejected" }; const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null })); const result = reactivity.reactive(initialResult); const activeIndex = reactivity.shallowRef(-1); if (!tasks || tasks.length === 0) { onFinished(); return { activeIndex, result }; } function updateResult(state, res) { activeIndex.value++; result[activeIndex.value].data = res; result[activeIndex.value].state = state; } tasks.reduce((prev, curr) => { return prev.then((prevRes) => { var _a; if (signal == null ? void 0 : signal.aborted) { updateResult(promiseState.aborted, new Error("aborted")); return; } if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) { onFinished(); return; } const done = curr(prevRes).then((currentRes) => { updateResult(promiseState.fulfilled, currentRes); if (activeIndex.value === tasks.length - 1) onFinished(); return currentRes; }); if (!signal) return done; return Promise.race([done, whenAborted(signal)]); }).catch((e) => { if (signal == null ? void 0 : signal.aborted) { updateResult(promiseState.aborted, e); return e; } updateResult(promiseState.rejected, e); onError(); return e; }); }, Promise.resolve()); return { activeIndex, result }; } function whenAborted(signal) { return new Promise((resolve, reject) => { const error = new Error("aborted"); if (signal.aborted) reject(error); else signal.addEventListener("abort", () => reject(error), { once: true }); }); } function useAsyncState(promise, initialState, options) { var _a; const { immediate = true, delay = 0, onError = (_a = globalThis.reportError) != null ? _a : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options != null ? options : {}; const state = shallow ? reactivity.shallowRef(initialState) : reactivity.ref(initialSt