paginar 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.vue-external.es.js","sources":["../node_modules/@vueuse/shared/index.mjs","../node_modules/@vueuse/core/index.mjs","../src/composables/useStyles.js","../src/composables/useReaderSettings.js","../src/composables/useEstimatePages.js","../src/composables/useReferences.js","../src/composables/useFootnotes.js","../src/summary.js","../src/composables/useTextContent.js","../src/composables/useBrowser.js","../src/composables/useReadingProgress.js","../src/paginationEvents.js","../src/composables/usePagination.js","../src/search.js","../src/composables/useSearch.js","../src/components/icons/Home.vue","../src/components/icons/Close.vue","../src/components/icons/Summary.vue","../src/publicApi.js","../src/components/HeaderSlot/SummaryButton/SummaryDropdown.vue","../src/components/HeaderSlot/SummaryButton/SummaryButton.vue","../src/components/icons/ThreeDots.vue","../src/components/icons/Expand.vue","../src/components/icons/Eye.vue","../src/components/icons/Footnote.vue","../src/components/icons/SingleColumn.vue","../src/components/icons/DoubleColumn.vue","../src/components/HeaderSlot/OptionsButton/OptionsColumns.vue","../src/components/HeaderSlot/OptionsButton/OptionsFontFamily.vue","../src/components/HeaderSlot/OptionsButton/OptionsFontSize.vue","../src/components/icons/Sun.vue","../src/components/icons/Moon.vue","../src/components/HeaderSlot/OptionsButton/OptionsColor.vue","../src/components/HeaderSlot/OptionsButton/OptionsReadingProgress.vue","../src/components/HeaderSlot/OptionsButton/OptionsDropdown.vue","../src/components/HeaderSlot/OptionsButton/OptionsButton.vue","../src/components/HeaderSlot/SearchButton.vue","../src/components/HeaderSlot/HeaderSlot.vue","../src/components/BookContent.vue","../src/components/NavigationButton.vue","../src/components/EngineWrapper.vue","../src/components/ReaderWrapper.vue","../src/components/ReferencePopup.vue","../src/components/PageSlider.vue","../src/components/FooterSlot.vue","../src/components/icons/Notes.vue","../src/components/FootnotesAside.vue","../src/App.ce.vue","../src/main.js"],"sourcesContent":["import { shallowRef, watchEffect, readonly, unref, ref, isVue3, version, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isRef, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, __spreadProps$6(__spreadValues$9({}, options), {\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n }));\n return readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = resolveUnref(ms);\n const maxDuration = resolveUnref(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = resolveUnref(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n if (isVue3)\n return;\n throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n if (isVue3 || version.startsWith(\"2.7.\"))\n return;\n throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = isFunction(fn) ? fn : fn.get;\n const set = isFunction(fn) ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get();\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = [];\n const off = (fn) => {\n const index = fns.indexOf(fn);\n if (index !== -1)\n fns.splice(index, 1);\n };\n const on = (fn) => {\n fns.push(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (param) => {\n fns.forEach((fn) => fn(param));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return () => {\n if (!initialized) {\n state = scope.run(stateFactory);\n initialized = true;\n }\n return state;\n };\n}\n\nfunction createInjectionState(composable) {\n const key = Symbol(\"InjectionState\");\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provide(key, state);\n return state;\n };\n const useInjectedState = () => inject(key);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n __onlyVue27Plus();\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = __spreadValues$8({}, obj);\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n }));\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = defaultValue;\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = defaultValue;\n trigger();\n }, resolveUnref(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(ref, {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n return typeof r === \"function\" ? computed(r) : ref(r);\n}\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction syncRef(left, right, options = {}) {\n var _a, _b;\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options;\n let watchLeft;\n let watchRight;\n const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n if (direction === \"both\" || direction === \"ltr\") {\n watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n }\n return () => {\n watchLeft == null ? void 0 : watchLeft();\n watchRight == null ? void 0 : watchRight();\n };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n Object.setPrototypeOf(newObject, objectRef.value);\n objectRef.value = newObject;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n if (getCurrentInstance())\n onBeforeMount(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n if (getCurrentInstance())\n onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n if (getCurrentInstance())\n onMounted(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n if (getCurrentInstance())\n onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(r, (v) => {\n if (condition(v) !== isNot) {\n stop == null ? void 0 : stop();\n resolve(v);\n }\n }, {\n flush,\n deep,\n immediate: true\n });\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch([r, value], ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n stop == null ? void 0 : stop();\n resolve(v1);\n }\n }, {\n flush,\n deep,\n immediate: true\n });\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n stop == null ? void 0 : stop();\n return resolveUnref(r);\n }));\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(resolveUnref(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(resolveUnref(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => resolveUnref(!Array.prototype.findLast ? findLast(resolveUnref(list), (element, index, array) => fn(resolveUnref(element), index, array)) : resolveUnref(list).findLast((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n return computed(() => {\n const resolved = resolveUnref(list);\n return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayUnique(list) {\n return computed(() => [...new Set(resolveUnref(list).map((element) => resolveUnref(element)))]);\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n const count = ref(initialValue);\n const {\n max = Infinity,\n min = -Infinity\n } = options;\n const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = initialValue) => {\n initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|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}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n D: () => String(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n if (date === null)\n return new Date(NaN);\n if (date === void 0)\n return new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = resolveUnref(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || isFunction(interval)) {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$8.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(b)) {\n if (__propIsEnum$8.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(callback ? () => {\n update();\n callback(counter.value);\n } : update, interval, { immediate });\n if (exposeControls) {\n return __spreadValues$6({\n counter,\n reset\n }, controls);\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(source, () => ms.value = timestamp(), options);\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, resolveUnref(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$7.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(b)) {\n if (__propIsEnum$7.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return __spreadValues$5({\n ready\n }, controls);\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = resolveUnref(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = resolveUnref(truthyValue);\n _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)\n ];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = new Array(oldList.length);\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$5(_a, [\n \"eventFilter\"\n ]);\n return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchAtMost(source, cb, options) {\n const _a = options, {\n count\n } = _a, watchOptions = __objRest$4(_a, [\n \"count\"\n ]);\n const current = ref(0);\n const stop = watchWithFilter(source, (...args) => {\n current.value += 1;\n if (current.value >= resolveUnref(count))\n nextTick(() => stop());\n cb(...args);\n }, watchOptions);\n return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n const _a = options, {\n debounce = 0,\n maxWait = void 0\n } = _a, watchOptions = __objRest$3(_a, [\n \"debounce\",\n \"maxWait\"\n ]);\n return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n eventFilter: debounceFilter(debounce, { maxWait })\n }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$2(_a, [\n \"eventFilter\"\n ]);\n const filteredCb = createFilterWrapper(eventFilter, cb);\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(source, (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n }, watchOptions);\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(watch(source, () => {\n syncCounter.value++;\n }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(watch(source, (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n }, watchOptions));\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n const _a = options, {\n eventFilter: filter\n } = _a, watchOptions = __objRest$1(_a, [\n \"eventFilter\"\n ]);\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n eventFilter\n }));\n return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n const _a = options, {\n throttle = 0,\n trailing = true,\n leading = true\n } = _a, watchOptions = __objRest(_a, [\n \"throttle\",\n \"trailing\",\n \"leading\"\n ]);\n return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n eventFilter: throttleFilter(throttle, trailing, leading)\n }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return __spreadProps(__spreadValues({}, res), {\n trigger\n });\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => getOneWatchSource(item));\n return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n return typeof source === \"function\" ? source() : unref(source);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n return watch(source, (v, ov, onInvalidate) => {\n if (v)\n cb(v, ov, onInvalidate);\n }, options);\n}\n\nexport { __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, resolveUnref, isClient, isString, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, promiseTimeout, isFunction, resolveRef, increaseWithUnit, useTimeoutFn, pausableWatch, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, containsProp, until, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, isObject, isNumber, useIntervalFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity, isDef } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, unref, watch, getCurrentInstance, customRef, onUpdated, reactive, nextTick, onMounted, markRaw, readonly, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = false,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nconst createUnrefFn = (fn) => {\n return function(...args) {\n return fn.apply(this, args.map((i) => unref(i)));\n };\n};\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = resolveUnref(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (isString(args[0]) || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n cleanups.push(...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, options2));\n }));\n }, { immediate: true, flush: \"post\" });\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n if (el)\n shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n handler(event);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nvar __defProp$n = Object.defineProperty;\nvar __defProps$9 = Object.defineProperties;\nvar __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$p = Object.getOwnPropertySymbols;\nvar __hasOwnProp$p = Object.prototype.hasOwnProperty;\nvar __propIsEnum$p = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$n = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$p.call(b, prop))\n __defNormalProp$n(a, prop, b[prop]);\n if (__getOwnPropSymbols$p)\n for (var prop of __getOwnPropSymbols$p(b)) {\n if (__propIsEnum$p.call(b, prop))\n __defNormalProp$n(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));\nconst createKeyPredicate = (keyFilter) => {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n};\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const { target = defaultWindow, eventName = \"keydown\", passive = false } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n timeout = setTimeout(() => handler(ev), (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY);\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions);\n useEventListener(elementRef, \"pointerup\", clear, listenerOptions);\n useEventListener(elementRef, \"pointerleave\", clear, listenerOptions);\n}\n\nconst isFocusedElementEditable = () => {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n};\nconst isTypedCharValid = ({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) => {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n return false;\n};\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const { window = defaultWindow } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const activeElement = computedWithControl(() => null, () => document == null ? void 0 : document.activeElement);\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n activeElement.trigger();\n }, true);\n useEventListener(window, \"focus\", activeElement.trigger, true);\n }\n return activeElement;\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop\n } = options;\n const promiseState = {\n pending: \"pending\",\n rejected: \"rejected\",\n fulfilled: \"fulfilled\"\n };\n const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n return curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n activeIndex.value === tasks.length - 1 && onFinished();\n return currentRes;\n });\n }).catch((e) => {\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = ref(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw error;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n return {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = resolveUnref(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || isFunction(target))\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useSupported(callback, sync = false) {\n const isSupported = ref();\n const update = () => isSupported.value = Boolean(callback());\n update();\n tryOnMounted(update, sync);\n return isSupported;\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n for (const event of events)\n useEventListener(battery, event, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n device,\n requestDevice,\n server,\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", update);\n else\n mediaQuery.removeListener(update);\n };\n const update = () => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(resolveRef(query).value);\n matches.value = mediaQuery.matches;\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", update);\n else\n mediaQuery.addListener(update);\n };\n watchEffect(update);\n tryOnScopeDispose(() => cleanup());\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetify = {\n xs: 600,\n sm: 960,\n md: 1264,\n lg: 1904\n};\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 600,\n sm: 1024,\n md: 1440,\n lg: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\n\nvar __defProp$m = Object.defineProperty;\nvar __getOwnPropSymbols$o = Object.getOwnPropertySymbols;\nvar __hasOwnProp$o = Object.prototype.hasOwnProperty;\nvar __propIsEnum$o = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$m = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$o.call(b, prop))\n __defNormalProp$m(a, prop, b[prop]);\n if (__getOwnPropSymbols$o)\n for (var prop of __getOwnPropSymbols$o(b)) {\n if (__propIsEnum$o.call(b, prop))\n __defNormalProp$m(a, prop, b[prop]);\n }\n return a;\n};\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = breakpoints[k];\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => greaterOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n return __spreadValues$m({\n greater(k) {\n return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n },\n greaterOrEqual,\n smaller(k) {\n return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n },\n smallerOrEqual(k) {\n return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n },\n between(a, b) {\n return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n }\n }, shortcutMethods);\n}\n\nconst useBroadcastChannel = (options) => {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = ref(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n};\n\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n const buildState = (trigger) => {\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window == null ? void 0 : window.location) || {};\n return {\n trigger,\n state: state2,\n length,\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n };\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const events = [\"copy\", \"cut\"];\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read) {\n for (const event of events)\n useEventListener(event, updateText);\n }\n async function copy(value = resolveUnref(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value)\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nvar __defProp$l = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$n = Object.getOwnPropertySymbols;\nvar __hasOwnProp$n = Object.prototype.hasOwnProperty;\nvar __propIsEnum$n = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$l = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$n.call(b, prop))\n __defNormalProp$l(a, prop, b[prop]);\n if (__getOwnPropSymbols$n)\n for (var prop of __getOwnPropSymbols$n(b)) {\n if (__propIsEnum$n.call(b, prop))\n __defNormalProp$l(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(unref(source));\n }\n if (!manual && isRef(source)) {\n watch(source, sync, __spreadProps$8(__spreadValues$l({}, options), {\n deep,\n immediate\n }));\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\n_global[globalKey] = _global[globalKey] || {};\nconst handlers = _global[globalKey];\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nvar __defProp$k = Object.defineProperty;\nvar __getOwnPropSymbols$m = Object.getOwnPropertySymbols;\nvar __hasOwnProp$m = Object.prototype.hasOwnProperty;\nvar __propIsEnum$m = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$k = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$m.call(b, prop))\n __defNormalProp$k(a, prop, b[prop]);\n if (__getOwnPropSymbols$m)\n for (var prop of __getOwnPropSymbols$m(b)) {\n if (__propIsEnum$m.call(b, prop))\n __defNormalProp$k(a, prop, b[prop]);\n }\n return a;\n};\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const data = (shallow ? shallowRef : ref)(defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = resolveUnref(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, () => write(data.value), { flush, deep, eventFilter });\n if (window && listenToStorageChanges) {\n useEventListener(window, \"storage\", update);\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n }\n update();\n return data;\n function write(v) {\n try {\n if (v == null) {\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n const oldValue = storage.getItem(key);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n if (window) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue: serialized,\n storageArea: storage\n }\n }));\n }\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit !== null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (isFunction(mergeDefaults))\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return __spreadValues$k(__spreadValues$k({}, rawInit), value);\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$j = Object.defineProperty;\nvar __getOwnPropSymbols$l = Object.getOwnPropertySymbols;\nvar __hasOwnProp$l = Object.prototype.hasOwnProperty;\nvar __propIsEnum$l = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$j = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$l.call(b, prop))\n __defNormalProp$j(a, prop, b[prop]);\n if (__getOwnPropSymbols$l)\n for (var prop of __getOwnPropSymbols$l(b)) {\n if (__propIsEnum$l.call(b, prop))\n __defNormalProp$j(a, prop, b[prop]);\n }\n return a;\n};\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto\n } = options;\n const modes = __spreadValues$j({\n auto: \"\",\n light: \"light\",\n dark: \"dark\"\n }, options.modes || {});\n const preferredDark = usePreferredDark({ window });\n const preferredMode = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? ref(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed({\n get() {\n return store.value === \"auto\" && !emitAuto ? preferredMode.value : store.value;\n },\n set(v) {\n store.value = v;\n }\n });\n const updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector2, attribute2, value) => {\n const el = window == null ? void 0 : window.document.querySelector(selector2);\n if (!el)\n return;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n });\n function defaultOnChanged(mode) {\n var _a;\n const resolvedMode = mode === \"auto\" ? preferredMode.value : mode;\n updateHTMLAttrs(selector, attribute, (_a = modes[resolvedMode]) != null ? _a : resolvedMode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n if (emitAuto)\n watch(preferredMode, () => onChanged(state.value), { flush: \"post\" });\n tryOnMounted(() => onChanged(state.value));\n return state;\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, { window = defaultWindow, initialValue = \"\" } = {}) {\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n watch([elRef, () => resolveUnref(prop)], ([el, prop2]) => {\n var _a;\n if (el && window) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }, { immediate: true });\n watch(variable, (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(resolveUnref(prop), val);\n });\n return variable;\n}\n\nfunction useCurrentElement() {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(() => null, () => vm.proxy.$el);\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n var _a;\n const state = shallowRef((_a = options == null ? void 0 : options.initialValue) != null ? _a : list[0]);\n const index = computed({\n get() {\n var _a2;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a2 = options == null ? void 0 : options.fallbackIndex) != null ? _a2 : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const length = list.length;\n const index2 = (i % length + length) % length;\n const value = list[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n return {\n state,\n index,\n next,\n prev\n };\n}\n\nvar __defProp$i = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$k = Object.getOwnPropertySymbols;\nvar __hasOwnProp$k = Object.prototype.hasOwnProperty;\nvar __propIsEnum$k = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$i = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$k.call(b, prop))\n __defNormalProp$i(a, prop, b[prop]);\n if (__getOwnPropSymbols$k)\n for (var prop of __getOwnPropSymbols$k(b)) {\n if (__propIsEnum$k.call(b, prop))\n __defNormalProp$i(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode(__spreadProps$7(__spreadValues$i({}, options), {\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\");\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n }));\n const preferredDark = usePreferredDark({ window });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n if (v === preferredDark.value)\n mode.value = \"auto\";\n else\n mode.value = v ? \"dark\" : \"light\";\n }\n });\n return isDark;\n}\n\nconst fnBypass = (v) => v;\nconst fnSetSource = (source, value) => source.value = value;\nfunction defaultDump(clone) {\n return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Infinity);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n if (__getOwnPropSymbols$j)\n for (var prop of __getOwnPropSymbols$j(b)) {\n if (__propIsEnum$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$h({}, options), { clone: options.clone || deep, setSource }));\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return __spreadProps$6(__spreadValues$h({}, manualHistory), {\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n });\n}\n\nvar __defProp$g = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n if (__getOwnPropSymbols$i)\n for (var prop of __getOwnPropSymbols$i(b)) {\n if (__propIsEnum$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, __spreadProps$5(__spreadValues$g({}, options), { eventFilter: filter }));\n return __spreadValues$g({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n });\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio({\n window = defaultWindow\n} = {}) {\n const pixelRatio = ref(1);\n if (window) {\n let observe = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe, { once: true });\n }, cleanup = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe);\n };\n let media;\n observe();\n tryOnScopeDispose(cleanup);\n }\n return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n stream.getTracks().forEach((t) => t.stop());\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(enabled, (v) => {\n if (v)\n _start();\n else\n _stop();\n }, { immediate: true });\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$h.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n if (__getOwnPropSymbols$h)\n for (var prop of __getOwnPropSymbols$h(b)) {\n if (__propIsEnum$h.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction useDraggable(target, options = {}) {\n var _a, _b, _c;\n const draggingElement = (_a = options.draggingElement) != null ? _a : defaultWindow;\n const draggingHandle = (_b = options.handle) != null ? _b : target;\n const position = ref((_c = resolveUnref(options.initialValue)) != null ? _c : { x: 0, y: 0 });\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (options.pointerTypes)\n return options.pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (resolveUnref(options.preventDefault))\n e.preventDefault();\n if (resolveUnref(options.stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (resolveUnref(options.exact) && e.target !== resolveUnref(target))\n return;\n const rect = resolveUnref(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n };\n if (((_a2 = options.onStart) == null ? void 0 : _a2.call(options, pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n position.value = {\n x: e.clientX - pressedDelta.value.x,\n y: e.clientY - pressedDelta.value.y\n };\n (_a2 = options.onMove) == null ? void 0 : _a2.call(options, position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n (_a2 = options.onEnd) == null ? void 0 : _a2.call(options, position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n useEventListener(draggingHandle, \"pointerdown\", start, true);\n useEventListener(draggingElement, \"pointermove\", move, true);\n useEventListener(draggingElement, \"pointerup\", end, true);\n }\n return __spreadProps$4(__spreadValues$f({}, toRefs(position)), {\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n });\n}\n\nfunction useDropZone(target, onDrop) {\n const isOverDropZone = ref(false);\n let counter = 0;\n if (isClient) {\n useEventListener(target, \"dragenter\", (event) => {\n event.preventDefault();\n counter += 1;\n isOverDropZone.value = true;\n });\n useEventListener(target, \"dragover\", (event) => {\n event.preventDefault();\n });\n useEventListener(target, \"dragleave\", (event) => {\n event.preventDefault();\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n });\n useEventListener(target, \"drop\", (event) => {\n var _a, _b;\n event.preventDefault();\n counter = 0;\n isOverDropZone.value = false;\n const files = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);\n });\n }\n return {\n isOverDropZone\n };\n}\n\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$g)\n for (var prop of __getOwnPropSymbols$g(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (isSupported.value && window && el) {\n observer = new ResizeObserver(callback);\n observer.observe(el, observerOptions);\n }\n }, { immediate: true, flush: \"post\" });\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function update() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n const delta = timestamp - previousFrameTimestamp;\n fn({ delta, timestamp });\n previousFrameTimestamp = timestamp;\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$f.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n if (__getOwnPropSymbols$f)\n for (var prop of __getOwnPropSymbols$f(b)) {\n if (__propIsEnum$f.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n }\n return a;\n};\nfunction useElementByPoint(options) {\n const element = ref(null);\n const { x, y, document = defaultDocument } = options;\n const controls = useRafFn(() => {\n element.value = (document == null ? void 0 : document.elementFromPoint(resolveUnref(x), resolveUnref(y))) || null;\n });\n return __spreadValues$e({\n element\n }, controls);\n}\n\nfunction useElementHover(el, options = {}) {\n const delayEnter = options ? options.delayEnter : 0;\n const delayLeave = options ? options.delayLeave : 0;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n useResizeObserver(target, ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const styles = window.getComputedStyle($elem);\n width.value = parseFloat(styles.width);\n height.value = parseFloat(styles.height);\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n }, options);\n watch(() => unrefElement(target), (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n });\n return {\n width,\n height\n };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n const elementIsVisible = ref(false);\n const testBounding = () => {\n if (!window)\n return;\n const document = window.document;\n const el = unrefElement(element);\n if (!el) {\n elementIsVisible.value = false;\n } else {\n const rect = el.getBoundingClientRect();\n elementIsVisible.value = rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;\n }\n };\n watch(() => unrefElement(element), () => testBounding(), { immediate: true, flush: \"post\" });\n if (window) {\n useEventListener(scrollTarget || window, \"scroll\", testBounding, {\n capture: false,\n passive: true\n });\n }\n return elementIsVisible;\n}\n\nconst events = new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || [];\n listeners.push(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n const index = listeners.indexOf(listener);\n if (index > -1)\n listeners.splice(index, 1);\n if (!listeners.length)\n events.delete(key);\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = ref(null);\n const {\n withCredentials = false\n } = options;\n const close = () => {\n if (eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n }\n };\n const es = new EventSource(url, { withCredentials });\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n eventSource,\n event,\n data,\n status,\n error,\n close\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = resolveRef(newIcon);\n const applyIcon = (icon) => {\n document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(favicon, (i, o) => {\n if (isString(i) && i !== o)\n applyIcon(i);\n }, { immediate: true });\n return favicon;\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$e.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n if (__getOwnPropSymbols$e)\n for (var prop of __getOwnPropSymbols$e(b)) {\n if (__propIsEnum$e.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\");\n}\nfunction isAbsoluteURL(url) {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries([...headers.entries()]);\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback !== void 0)\n await callback(ctx);\n return ctx;\n };\n } else {\n return async (ctx) => {\n await callbacks.reduce((prevCallback, callback) => prevCallback.then(async () => {\n if (callback)\n ctx = __spreadValues$d(__spreadValues$d({}, ctx), await callback(ctx));\n }), Promise.resolve());\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = resolveUnref(config.baseUrl);\n const targetUrl = resolveUnref(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, options), args[0]), {\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n });\n } else {\n fetchOptions = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, fetchOptions), args[0]), {\n headers: __spreadValues$d(__spreadValues$d({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n });\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, options), args[1]), {\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n });\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = { immediate: true, refetch: false, timeout: 0 };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = __spreadValues$d(__spreadValues$d({}, options), args[0]);\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = __spreadValues$d(__spreadValues$d({}, options), args[1]);\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort && controller) {\n controller.abort();\n controller = void 0;\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n const execute = async (throwOnFailed = false) => {\n var _a2;\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n if (supportsAbort) {\n abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = __spreadProps$3(__spreadValues$d({}, fetchOptions), {\n signal: controller.signal\n });\n }\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n const payload = resolveUnref(config.payload);\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: resolveUnref(url),\n options: __spreadValues$d(__spreadValues$d({}, defaultFetchOptions), fetchOptions),\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return new Promise((resolve, reject) => {\n var _a3;\n fetch(context.url, __spreadProps$3(__spreadValues$d(__spreadValues$d({}, defaultFetchOptions), context.options), {\n headers: __spreadValues$d(__spreadValues$d({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n })).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse[config.type]();\n if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)\n ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n data.value = responseData;\n if (!fetchResponse.ok)\n throw new Error(fetchResponse.statusText);\n responseEvent.trigger(fetchResponse);\n return resolve(fetchResponse);\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError)\n ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n data.value = responseData;\n error.value = errorData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n return reject(fetchError);\n return resolve(null);\n }).finally(() => {\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n });\n };\n const refetch = resolveRef(options.refetch);\n watch([\n refetch,\n resolveRef(url)\n ], ([refetch2]) => refetch2 && execute(), { deep: true });\n const shell = {\n isFinished,\n statusCode,\n response,\n error,\n data,\n isFetching,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch([\n refetch,\n resolveRef(config.payload)\n ], ([refetch2]) => refetch2 && execute(), { deep: true });\n }\n const rawPayload = resolveUnref(config.payload);\n if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))\n config.payloadType = \"json\";\n return __spreadProps$3(__spreadValues$d({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return __spreadProps$3(__spreadValues$d({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n if (options.immediate)\n setTimeout(execute, 0);\n return __spreadProps$3(__spreadValues$d({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$d.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n if (__getOwnPropSymbols$d)\n for (var prop of __getOwnPropSymbols$d(b)) {\n if (__propIsEnum$d.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n }\n return a;\n};\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\"\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n };\n }\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = __spreadValues$c(__spreadValues$c(__spreadValues$c({}, DEFAULT_OPTIONS), options), localOptions);\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n input.click();\n };\n const reset = () => {\n files.value = null;\n if (input)\n input.value = \"\";\n };\n return {\n files: readonly(files),\n open,\n reset\n };\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$c.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n if (__getOwnPropSymbols$c)\n for (var prop of __getOwnPropSymbols$c(b)) {\n if (__propIsEnum$c.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n }\n return a;\n};\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = unref(options);\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n fileHandle.value = handle;\n await updateFile();\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n data.value = void 0;\n await updateFile();\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n if (unref(dataType) === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n if (unref(dataType) === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n if (unref(dataType) === \"Blob\")\n data.value = file.value;\n }\n watch(() => unref(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", () => innerFocused.value = true);\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus();\n }\n });\n watch(targetElement, () => {\n focused.value = initialValue;\n }, { immediate: true, flush: \"post\" });\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst functionsMap = [\n [\n \"requestFullscreen\",\n \"exitFullscreen\",\n \"fullscreenElement\",\n \"fullscreenEnabled\",\n \"fullscreenchange\",\n \"fullscreenerror\"\n ],\n [\n \"webkitRequestFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitFullscreenElement\",\n \"webkitFullscreenEnabled\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\"\n ],\n [\n \"webkitRequestFullScreen\",\n \"webkitCancelFullScreen\",\n \"webkitCurrentFullScreenElement\",\n \"webkitCancelFullScreen\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\"\n ],\n [\n \"mozRequestFullScreen\",\n \"mozCancelFullScreen\",\n \"mozFullScreenElement\",\n \"mozFullScreenEnabled\",\n \"mozfullscreenchange\",\n \"mozfullscreenerror\"\n ],\n [\n \"msRequestFullscreen\",\n \"msExitFullscreen\",\n \"msFullscreenElement\",\n \"msFullscreenEnabled\",\n \"MSFullscreenChange\",\n \"MSFullscreenError\"\n ]\n];\nfunction useFullscreen(target, options = {}) {\n const { document = defaultDocument, autoExit = false } = options;\n const targetRef = target || (document == null ? void 0 : document.querySelector(\"html\"));\n const isFullscreen = ref(false);\n let map = functionsMap[0];\n const isSupported = useSupported(() => {\n if (!document) {\n return false;\n } else {\n for (const m of functionsMap) {\n if (m[1] in document) {\n map = m;\n return true;\n }\n }\n }\n return false;\n });\n const [REQUEST, EXIT, ELEMENT, , EVENT] = map;\n async function exit() {\n if (!isSupported.value)\n return;\n if (document == null ? void 0 : document[ELEMENT])\n await document[EXIT]();\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value)\n return;\n await exit();\n const target2 = unrefElement(targetRef);\n if (target2) {\n await target2[REQUEST]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n if (isFullscreen.value)\n await exit();\n else\n await enter();\n }\n if (document) {\n useEventListener(document, EVENT, () => {\n isFullscreen.value = !!(document == null ? void 0 : document[ELEMENT]);\n }, false);\n }\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n hapticActuators,\n index: gamepad.index,\n mapping: gamepad.mapping,\n connected: gamepad.connected,\n timestamp: gamepad.timestamp,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad) {\n const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n if (index > -1)\n gamepads.value[index] = stateFromGamepad(gamepad);\n }\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n if (_gamepads) {\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad)\n onGamepadConnected(gamepad);\n }\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = ref(null);\n const coords = ref({\n accuracy: 0,\n latitude: Infinity,\n longitude: Infinity,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n enableHighAccuracy,\n maximumAge,\n timeout\n });\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const onEvent = createFilterWrapper(eventFilter, () => {\n idle.value = false;\n lastActive.value = timestamp();\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n });\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n }\n timer = setTimeout(() => idle.value = true, timeout);\n return { idle, lastActive };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n }\n return a;\n};\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nconst useImage = (options, asyncStateOptions = {}) => {\n const state = useAsyncState(() => loadImage(resolveUnref(options)), void 0, __spreadValues$a({\n resetOnExecute: true\n }, asyncStateOptions));\n watch(() => resolveUnref(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n return state;\n};\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\"\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c;\n const _element = resolveUnref(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = resolveUnref(_y)) != null ? _a : y.value,\n left: (_b = resolveUnref(_x)) != null ? _b : x.value,\n behavior: resolveUnref(behavior)\n });\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const onScrollHandler = (e) => {\n const eventTarget = e.target === document ? e.target.documentElement : e.target;\n const scrollLeft = eventTarget.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalY.value;\n arrivedState.left = scrollLeft <= 0 + (offset.left || 0);\n arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n internalX.value = scrollLeft;\n let scrollTop = eventTarget.scrollTop;\n if (e.target === document && !scrollTop)\n scrollTop = document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n arrivedState.top = scrollTop <= 0 + (offset.top || 0);\n arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n internalY.value = scrollTop;\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n useEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions\n };\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a, _b;\n const direction = (_a = options.direction) != null ? _a : \"bottom\";\n const state = reactive(useScroll(element, __spreadProps$2(__spreadValues$9({}, options), {\n offset: __spreadValues$9({\n [direction]: (_b = options.distance) != null ? _b : 0\n }, options.offset)\n })));\n watch(() => state.arrivedState[direction], async (v) => {\n var _a2, _b2;\n if (v) {\n const elem = resolveUnref(element);\n const previous = {\n height: (_a2 = elem == null ? void 0 : elem.scrollHeight) != null ? _a2 : 0,\n width: (_b2 = elem == null ? void 0 : elem.scrollWidth) != null ? _b2 : 0\n };\n await onLoadMore(state);\n if (options.preserveScrollPosition && elem) {\n nextTick(() => {\n elem.scrollTo({\n top: elem.scrollHeight - previous.height,\n left: elem.scrollWidth - previous.width\n });\n });\n }\n }\n });\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n let cleanup = noop;\n const stopWatch = isSupported.value ? watch(() => ({\n el: unrefElement(target),\n root: unrefElement(root)\n }), ({ el, root: root2 }) => {\n cleanup();\n if (!el)\n return;\n const observer = new IntersectionObserver(callback, {\n root: root2,\n rootMargin,\n threshold\n });\n observer.observe(el);\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n }, { immediate: true, flush: \"post\" }) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = new Set();\n const usedKeys = new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(refs, {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => unref(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? unref(r) : r;\n }\n });\n return proxy;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction usingElRef(source, cb) {\n if (resolveUnref(source))\n cb(resolveUnref(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n options = __spreadValues$8(__spreadValues$8({}, defaultOptions), options);\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = isNumber(track) ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = isNumber(track) ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = resolveUnref(target);\n if (!el)\n return;\n const src = resolveUnref(options.src);\n let sources = [];\n if (!src)\n return;\n if (isString(src))\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch(volume, (vol) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.volume = vol;\n });\n watch(muted, (mute) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.muted = mute;\n });\n watch(rate, (rate2) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.playbackRate = rate2;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = resolveUnref(options.tracks);\n const el = resolveUnref(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n isPlaying ? el.play() : el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = resolveUnref(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = resolveUnref(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(resolveUnref(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, \"waiting\", () => waiting.value = true);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n });\n useEventListener(target, \"ratechange\", () => rate.value = resolveUnref(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = resolveUnref(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = resolveUnref(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n volume,\n muted,\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n onSourceError: sourceErrorEvent.on\n };\n}\n\nconst getMapVue2Compat = () => {\n const data = reactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n};\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return reactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return reactive(new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n onMounted(() => {\n isMounted.value = true;\n });\n return isMounted;\n}\n\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n eventFilter\n } = options;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const mouseHandler = (event) => {\n if (type === \"page\") {\n x.value = event.pageX;\n y.value = event.pageY;\n } else if (type === \"client\") {\n x.value = event.clientX;\n y.value = event.clientY;\n } else if (type === \"movement\") {\n x.value = event.movementX;\n y.value = event.movementY;\n }\n sourceType.value = \"mouse\";\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const touch2 = event.touches[0];\n if (type === \"page\") {\n x.value = touch2.pageX;\n y.value = touch2.pageY;\n } else if (type === \"client\") {\n x.value = touch2.clientX;\n y.value = touch2.clientY;\n }\n sourceType.value = \"touch\";\n }\n };\n const mouseHandlerWrapper = (event) => {\n return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});\n };\n const touchHandlerWrapper = (event) => {\n return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});\n };\n if (window) {\n useEventListener(window, \"mousemove\", mouseHandlerWrapper, { passive: true });\n useEventListener(window, \"dragover\", mouseHandlerWrapper, { passive: true });\n if (touch && type !== \"movement\") {\n useEventListener(window, \"touchstart\", touchHandlerWrapper, { passive: true });\n useEventListener(window, \"touchmove\", touchHandlerWrapper, { passive: true });\n if (resetOnTouchEnds)\n useEventListener(window, \"touchend\", reset, { passive: true });\n }\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch([targetRef, x, y], () => {\n const el = unrefElement(targetRef);\n if (!el)\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + window.pageXOffset;\n elementPositionY.value = top + window.pageYOffset;\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n }, { immediate: true });\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n useEventListener(window, \"mouseup\", onReleased, { passive: true });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"drop\", onReleased, { passive: true });\n useEventListener(window, \"dragend\", onReleased, { passive: true });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n useEventListener(window, \"touchend\", onReleased, { passive: true });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, [\"window\"]);\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (isSupported.value && window && el) {\n observer = new MutationObserver(callback);\n observer.observe(el, mutationOptions);\n }\n }, { immediate: true });\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nconst useNavigatorLanguage = (options = {}) => {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n};\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n onlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$7.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(b)) {\n if (__propIsEnum$7.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(new Date());\n const update = () => now.value = new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return __spreadValues$7({\n now\n }, controls);\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(() => unref(object), (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n }, { immediate: true });\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (isFunction(value) || isReadonly(value))\n return computed(() => clamp(resolveUnref(value), resolveUnref(min), resolveUnref(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, resolveUnref(min), resolveUnref(max));\n },\n set(value2) {\n _value.value = clamp(value2, resolveUnref(min), resolveUnref(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Infinity,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Infinity);\n const pageCount = computed(() => Math.max(1, Math.ceil(unref(total) / unref(currentPageSize))));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page))\n syncRef(page, currentPage);\n if (isRef(pageSize))\n syncRef(pageSize, currentPageSize);\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n return \"deviceOrientation\";\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = -orientation.beta / 90;\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = orientation.gamma / 90;\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(b)) {\n if (__propIsEnum$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n useEventListener(target, \"pointerdown\", handler, { passive: true });\n useEventListener(target, \"pointermove\", handler, { passive: true });\n useEventListener(target, \"pointerleave\", () => isInside.value = false, { passive: true });\n }\n return __spreadProps$1(__spreadValues$6({}, toRefs(state)), {\n isInside\n });\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument, pointerLockOptions } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e, options2) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nvar SwipeDirection;\n(function(SwipeDirection2) {\n SwipeDirection2[\"UP\"] = \"UP\";\n SwipeDirection2[\"RIGHT\"] = \"RIGHT\";\n SwipeDirection2[\"DOWN\"] = \"DOWN\";\n SwipeDirection2[\"LEFT\"] = \"LEFT\";\n SwipeDirection2[\"NONE\"] = \"NONE\";\n})(SwipeDirection || (SwipeDirection = {}));\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return SwipeDirection.NONE;\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n } else {\n return diffY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"touchend\", onTouchEnd, listenerOptions),\n useEventListener(target, \"touchcancel\", onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = resolveRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return SwipeDirection.NONE;\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n } else {\n return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n var _a, _b;\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n var _a, _b;\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n })\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(resolveRef(value), (_, oldValue) => {\n previous.value = oldValue;\n }, { flush: \"sync\" });\n return readonly(previous);\n}\n\nconst useScreenOrientation = (options = {}) => {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (!isSupported.value)\n return Promise.reject(new Error(\"Not supported\"));\n return screenOrientation.lock(type);\n };\n const unlockOrientation = () => {\n if (isSupported.value)\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n};\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = resolveUnref(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientHeight < ele.scrollHeight || style.overflowY === \"auto\" && ele.clientWidth < ele.scrollWidth) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow;\n watch(resolveRef(element), (el) => {\n if (el) {\n const ele = el;\n initialOverflow = ele.style.overflow;\n if (isLocked.value)\n ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const ele = resolveUnref(element);\n if (!ele || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(ele, \"touchmove\", (e) => {\n preventDefault(e);\n }, { passive: false });\n }\n ele.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const ele = resolveUnref(element);\n if (!ele || !isLocked.value)\n return;\n isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n ele.style.overflow = initialOverflow;\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else\n unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(b)) {\n if (__propIsEnum$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = __spreadValues$5(__spreadValues$5({}, resolveUnref(shareOptions)), resolveUnref(overrideOptions));\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...unref(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(unref(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n window = defaultWindow\n } = options;\n const lang = resolveRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = unref(lang);\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const transcript = Array.from(event.results).map((result2) => {\n isFinal.value = result2.isFinal;\n return result2[0];\n }).map((result2) => result2.transcript).join(\"\");\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = unref(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = resolveRef(text || \"\");\n const lang = resolveRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = unref(lang);\n utterance2.voice = unref(options.voice) || null;\n utterance2.pitch = pitch;\n utterance2.rate = rate;\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n utterance && synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = resolveUnref(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (isFunction(mergeDefaults))\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = __spreadValues$4(__spreadValues$4({}, rawInit), value);\n else\n data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => setTimeout(() => read(e), 0));\n if (storage) {\n watchWithFilter(data, async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n }, {\n flush,\n deep,\n eventFilter\n });\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.type = \"text/css\";\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(cssRef, (value) => {\n el.textContent = value;\n }, { immediate: true });\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n const ranges = new Array(rangeCount);\n for (let i = 0; i < rangeCount; i++) {\n const range = selection.getRangeAt(i);\n ranges[i] = range;\n }\n return ranges;\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n function triggerResize() {\n var _a, _b;\n if (!textarea.value)\n return;\n textarea.value.style.height = \"1px\";\n textarea.value.style.height = `${(_a = textarea.value) == null ? void 0 : _a.scrollHeight}px`;\n (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n }\n watch([input, textarea], triggerResize, { immediate: true });\n useResizeObserver(textarea, () => triggerResize());\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, __spreadProps(__spreadValues$3({}, options), { eventFilter: filter }));\n return __spreadValues$3({}, history);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Infinity, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nconst DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n const timeAgo = computed(() => formatTimeAgo(new Date(resolveUnref(time)), options, unref(now.value)));\n if (exposeControls) {\n return __spreadValues$2({\n timeAgo\n }, controls);\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval);\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return __spreadValues$1({\n timestamp: ts\n }, controls);\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b;\n const {\n document = defaultDocument\n } = options;\n const title = resolveRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n const isReadonly = newTitle && isFunction(newTitle);\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return isFunction(template) ? template(t) : unref(template).replace(/%s/g, t);\n }\n watch(title, (t, o) => {\n if (t !== o && document)\n document.title = format(isString(t) ? t : \"\");\n }, { immediate: true });\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver((_b = document.head) == null ? void 0 : _b.querySelector(\"title\"), () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n }, { childList: true });\n }\n return title;\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = __spreadValues({\n linear: identity\n}, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction useTransition(source, options = {}) {\n const {\n delay = 0,\n disabled = false,\n duration = 1e3,\n onFinished = noop,\n onStarted = noop,\n transition = identity\n } = options;\n const currentTransition = computed(() => {\n const t = unref(transition);\n return isFunction(t) ? t : createEasingFunction(t);\n });\n const sourceValue = computed(() => {\n const s = unref(source);\n return isNumber(s) ? s : s.map(unref);\n });\n const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);\n const outputVector = ref(sourceVector.value.slice(0));\n let currentDuration;\n let diffVector;\n let endAt;\n let startAt;\n let startVector;\n const { resume, pause } = useRafFn(() => {\n const now = Date.now();\n const progress = clamp(1 - (endAt - now) / currentDuration, 0, 1);\n outputVector.value = startVector.map((val, i) => {\n var _a;\n return val + ((_a = diffVector[i]) != null ? _a : 0) * currentTransition.value(progress);\n });\n if (progress >= 1) {\n pause();\n onFinished();\n }\n }, { immediate: false });\n const start = () => {\n pause();\n currentDuration = unref(duration);\n diffVector = outputVector.value.map((n, i) => {\n var _a, _b;\n return ((_a = sourceVector.value[i]) != null ? _a : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);\n });\n startVector = outputVector.value.slice(0);\n startAt = Date.now();\n endAt = startAt + currentDuration;\n resume();\n onStarted();\n };\n const timeout = useTimeoutFn(start, delay, { immediate: false });\n watch(sourceVector, () => {\n if (unref(disabled))\n return;\n if (unref(delay) <= 0)\n start();\n else\n timeout.start();\n }, { deep: true });\n watch(() => unref(disabled), (v) => {\n if (v) {\n outputVector.value = sourceVector.value.slice(0);\n pause();\n }\n });\n return computed(() => {\n const targetVector = unref(disabled) ? sourceVector : outputVector;\n return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;\n });\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(state, () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n }, { deep: true });\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const videoDeviceId = ref(options.videoDeviceId);\n const audioDeviceId = ref(options.audioDeviceId);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(device) {\n if (device.value === \"none\" || device.value === false)\n return false;\n if (device.value == null)\n return true;\n return {\n deviceId: device.value\n };\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(videoDeviceId),\n audio: getDeviceOptions(audioDeviceId)\n });\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(enabled, (v) => {\n if (v)\n _start();\n else\n _stop();\n }, { immediate: true });\n watch([videoDeviceId, audioDeviceId], () => {\n if (autoSwitch.value && stream.value)\n restart();\n }, { immediate: true });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n videoDeviceId,\n audioDeviceId,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = eventName || event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : isFunction(clone) ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n watch(() => props[key], (v) => proxy.value = cloneFn(v));\n watch(proxy, (v) => {\n if (v !== props[key] || deep)\n _emit(event, v);\n }, { deep });\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n _emit(event, value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props)\n ret[key] = useVModel(props, key, emit, options);\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = resolveRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(vibrate, interval, {\n immediate: false,\n immediateCallback: false\n });\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n watch([size.width, size.height, list], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nconst useWakeLock = (options = {}) => {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n let wakeLock;\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = ref(false);\n async function onVisibilityChange() {\n if (!isSupported.value || !wakeLock)\n return;\n if (document && document.visibilityState === \"visible\")\n wakeLock = await navigator.wakeLock.request(\"screen\");\n isActive.value = !wakeLock.released;\n }\n if (document)\n useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n async function request(type) {\n if (!isSupported.value)\n return;\n wakeLock = await navigator.wakeLock.request(type);\n isActive.value = !wakeLock.released;\n }\n async function release() {\n if (!isSupported.value || !wakeLock)\n return;\n await wakeLock.release();\n isActive.value = !wakeLock.released;\n wakeLock = null;\n }\n return {\n isSupported,\n isActive,\n request,\n release\n };\n};\n\nconst useWebNotification = (defaultOptions = {}) => {\n const {\n window = defaultWindow\n } = defaultOptions;\n const isSupported = useSupported(() => !!window && \"Notification\" in window);\n const notification = ref(null);\n const requestPermission = async () => {\n if (!isSupported.value)\n return;\n if (\"permission\" in Notification && Notification.permission !== \"denied\")\n await Notification.requestPermission();\n };\n const onClick = createEventHook();\n const onShow = createEventHook();\n const onError = createEventHook();\n const onClose = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value)\n return;\n await requestPermission();\n const options = Object.assign({}, defaultOptions, overrides);\n notification.value = new Notification(options.title || \"\", options);\n notification.value.onclick = (event) => onClick.trigger(event);\n notification.value.onshow = (event) => onShow.trigger(event);\n notification.value.onerror = (event) => onError.trigger(event);\n notification.value.onclose = (event) => onClose.trigger(event);\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n tryOnMounted(async () => {\n if (isSupported.value)\n await requestPermission();\n });\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n};\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = resolveRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const close = (code = 1e3, reason) => {\n if (!wsRef.value)\n return;\n explicitlyClosed = true;\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n };\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n wsRef.value = void 0;\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === message)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(() => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n }, pongTimeout);\n }, interval, { immediate: false });\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n useEventListener(window, \"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = function post2(val) {\n if (!worker.value)\n return;\n worker.value.postMessage(val);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (isString(arg0))\n worker.value = new Worker(arg0, workerOptions);\n else if (isFunction(arg0))\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nconst jobRunner = (userFunc) => (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n};\n\nconst depsParser = (deps) => {\n if (deps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n return `importScripts(${depsString})`;\n};\n\nconst createWorkerBlobUrl = (fn, deps) => {\n const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n};\n\nconst useWebWorkerFn = (fn, options = {}) => {\n const {\n dependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n promise.value = {\n resolve,\n reject\n };\n worker.value && worker.value.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n};\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const x = ref(window.scrollX);\n const y = ref(window.scrollY);\n useEventListener(window, \"scroll\", () => {\n x.value = window.scrollX;\n y.value = window.scrollY;\n }, {\n capture: false,\n passive: true\n });\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Infinity,\n initialHeight = Infinity,\n listenOrientation = true,\n includeScrollbar = true\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation)\n useEventListener(\"orientationchange\", update, { passive: true });\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, SwipeDirection, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","function initStyles(props, rootComponent) {\r\n\tconst settings = props.readerSettings\r\n\t\t? JSON.parse(props.readerSettings)\r\n\t\t: null\r\n\r\n\tif (props.cssFile) {\r\n\t\tstylesheetLoader(props.cssFile, rootComponent)\r\n\t}\r\n\r\n\tif (props.cssString) {\r\n\t\tapplyStylesheet(props.cssString, rootComponent)\r\n\t}\r\n\r\n\tif (settings?.cssString) {\r\n\t\tapplyStylesheet(settings.cssString, rootComponent)\r\n\t}\r\n}\r\n\r\nfunction fontLoader(fontsOptions) {\r\n\tconst fontsToLoad = fontsOptions.filter(item => item.link)\r\n\r\n\tif (fontsToLoad.length > 0) {\r\n\t\tconst style = document.createElement('style')\r\n\t\tconst head = document.head || document.getElementsByTagName('head')[0]\r\n\t\thead.appendChild(style)\r\n\r\n\t\tstyle.type = 'text/css'\r\n\t\tlet css = ''\r\n\t\tfontsToLoad.forEach(\r\n\t\t\titem => css = css + `@import url(${item.link}); \\n`\r\n\t\t)\r\n\t\tstyle.appendChild(document.createTextNode(css))\r\n\t}\r\n}\r\n\r\nasync function stylesheetLoader(stylesheet, ref) {\r\n\tif (stylesheet) {\r\n\t\ttry {\r\n\t\t\tconst dataRef = await fetch(stylesheet)\r\n\t\t\tconst cssText = await dataRef.text()\r\n\r\n\t\t\tapplyStylesheet(cssText, ref)\r\n\r\n\t\t} catch (_) {}\r\n\t}\r\n}\r\n\r\nasync function applyStylesheet(stylesheet, ref) {\r\n\tconst style = document.createElement('style')\r\n\tref.value.appendChild(style)\r\n\tstyle.type = 'text/css'\r\n\tstyle.appendChild(document.createTextNode(stylesheet))\r\n}\r\n\r\nexport default {\r\n\tinitStyles,\r\n\tfontLoader,\r\n\tstylesheetLoader,\r\n\tapplyStylesheet\r\n}\r\n","import { reactive, computed, watch } from 'vue'\r\nimport useStyles from './useStyles'\r\n\r\nconst state = reactive({\r\n\tbaseFont: 'Arial, sans-serif',\r\n\ttextFont: 'Times New Roman, serif',\r\n\tfontsOptions: [\r\n\t\t{ name: 'Times New Roman, serif' },\r\n\t\t{ name: 'Georgia, serif' },\r\n\t\t{ name: 'Arial, sans-serif' },\r\n\t\t{ name: 'Verdana, sans-serif' },\r\n\t],\r\n\tfontSize: 16,\r\n\tcolumns: 'double',\r\n\tmode: 'light',\r\n\tblocked: false,\r\n\treadingProgressAvailable: false,\r\n\treadingProgressEnabled: false,\r\n\r\n\tbookTitle: null,\r\n\tchapterTitle: null,\r\n\thomeUrl: null,\r\n})\r\n\r\nconst baseFont = computed(() => state.baseFont)\r\nconst textFont = computed(() => state.textFont)\r\nconst fontSize = computed(() => state.fontSize)\r\nconst fontsOptions = computed(() => state.fontsOptions)\r\nconst columns = computed(() => state.columns)\r\nconst mode = computed(() => state.mode)\r\nconst blocked = computed(() => state.blocked)\r\nconst readingProgressAvailable = computed(() => state.readingProgressAvailable)\r\nconst readingProgressEnabled = computed(() => state.readingProgressEnabled)\r\n\r\nconst bookTitle = computed(() => state.bookTitle)\r\nconst chapterTitle = computed(() => state.chapterTitle)\r\nconst homeUrl = computed(() => state.homeUrl)\r\n\r\nwatch(\r\n\t[baseFont, textFont, fontSize, columns, mode, readingProgressEnabled],\r\n\t() => saveSettings()\r\n)\r\n\r\nasync function initSettings(settingsString) {\r\n\tconst settings = settingsString\r\n\t\t? JSON.parse(settingsString)\r\n\t\t: null\r\n\tstate.readingProgressAvailable = false\r\n\tstate.readingProgressEnabled = false\r\n\r\n\tif (settings?.baseFont)\r\n\t\tstate.baseFont = settings.baseFont\r\n\r\n\tif (settings?.textFont)\r\n\t\tstate.textFont = settings.textFont\r\n\r\n\tif (settings?.fontSize)\r\n\t\tstate.fontSize = Number(settings.fontSize)\r\n\r\n\tif (settings?.fontsOptions) {\r\n\t\tstate.fontsOptions = settings.fontsOptions\r\n\t\tuseStyles.fontLoader(settings.fontsOptions)\r\n\r\n\t\t// baseFont\r\n\t\tconst defaultBaseFont = settings.fontsOptions.find(\r\n\t\t\titem => item.defaultBaseFont\r\n\t\t)\r\n\t\tif (defaultBaseFont)\r\n\t\t\tstate.baseFont = defaultBaseFont.name\r\n\r\n\t\t// textFont\r\n\t\tconst defaultTextFont = settings.fontsOptions.find(\r\n\t\t\titem => item.defaultTextFont\r\n\t\t)\r\n\t\tif (defaultTextFont)\r\n\t\t\tstate.textFont = defaultTextFont.name\r\n\t}\r\n\r\n\tif (settings?.bookTitle)\r\n\t\tstate.bookTitle = settings.bookTitle\r\n\r\n\tif (settings?.chapterTitle)\r\n\t\tstate.chapterTitle = settings.chapterTitle\r\n\r\n\tif (settings?.homeUrl)\r\n\t\tstate.homeUrl = settings.homeUrl\r\n\r\n\tif (settings?.readingProgress &&\r\n\t\ttypeof settings.readingProgress === 'object' &&\r\n\t\t!Array.isArray(settings.readingProgress)\r\n\t) {\r\n\t\tstate.readingProgressAvailable = true\r\n\t\tstate.readingProgressEnabled = settings.readingProgress.enabled !== false\r\n\t}\r\n\r\n\tloadSavedSettings(settings)\r\n}\r\n\r\nfunction loadSavedSettings(settings) {\r\n\tlet hasSettings = null\r\n\ttry {\r\n\t\thasSettings = localStorage.getItem('readerSettings')\r\n\t} catch (error) {\r\n\t\treturn\r\n\t}\r\n\r\n\tif (hasSettings) {\r\n\t\tlet savedSettings = null\r\n\t\ttry {\r\n\t\t\tsavedSettings = JSON.parse(hasSettings)\r\n\t\t} catch (error) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tstate.fontSize = savedSettings.fontSize\r\n\t\tstate.columns = savedSettings.columns\r\n\t\tstate.mode = savedSettings.mode\r\n\r\n\t\tif (settings?.fontsOptions &&\r\n\t\t\tsettings?.fontsOptions?.find(item => item.name === savedSettings.textFont)\r\n\t\t) {\r\n\t\t\tstate.textFont = savedSettings.textFont\r\n\t\t}\r\n\r\n\t\tif (state.readingProgressAvailable &&\r\n\t\t\ttypeof savedSettings.readingProgressEnabled === 'boolean'\r\n\t\t) {\r\n\t\t\tstate.readingProgressEnabled = savedSettings.readingProgressEnabled\r\n\t\t}\r\n\r\n\t\tif (savedSettings.mode === 'dark') {\r\n\t\t\tconst htmlRoot = document.querySelector('html')\r\n\t\t\tif (htmlRoot) {\r\n\t\t\t\thtmlRoot.classList.remove(\"light\")\r\n\t\t\t\thtmlRoot.classList.add(\"dark\")\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction setColumns(value) {\r\n\tstate.columns = value\r\n}\r\n\r\nfunction setTextFont(value) {\r\n\tstate.textFont = value\r\n}\r\n\r\nfunction setFontSize(value) {\r\n\tstate.fontSize = value\r\n}\r\n\r\nfunction setBlocked(value) {\r\n\tstate.blocked = value\r\n}\r\n\r\nfunction setReadingProgressEnabled(value) {\r\n\tif (state.readingProgressAvailable)\r\n\t\tstate.readingProgressEnabled = Boolean(value)\r\n}\r\n\r\nfunction setMode(value) {\r\n\tstate.mode = value\r\n\r\n\tconst htmlRoot = document.querySelector('html')\r\n\tif (htmlRoot) {\r\n\t\tif (htmlRoot.classList.contains(\"dark\")) {\r\n\t\t\thtmlRoot.classList.remove(\"dark\")\r\n\t\t\thtmlRoot.classList.add(\"light\")\r\n\r\n\t\t} else {\r\n\t\t\thtmlRoot.classList.remove(\"light\")\r\n\t\t\thtmlRoot.classList.add(\"dark\")\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction saveSettings() {\r\n\ttry {\r\n\t\tlocalStorage.setItem(\r\n\t\t\t'readerSettings',\r\n\t\t\tJSON.stringify({\r\n\t\t\ttextFont: textFont.value,\r\n\t\t\tfontSize: fontSize.value,\r\n\t\t\tcolumns: columns.value,\r\n\t\t\tmode: mode.value,\r\n\t\t\t...(readingProgressAvailable.value\r\n\t\t\t\t? { readingProgressEnabled: readingProgressEnabled.value }\r\n\t\t\t\t: {})\r\n\t\t\t})\r\n\t\t)\r\n\t} catch (error) {\r\n\t\t// Settings remain available for the current session.\r\n\t}\r\n}\r\n\r\nexport default {\r\n\tbaseFont,\r\n\ttextFont,\r\n\tfontSize,\r\n\tfontsOptions,\r\n\tcolumns,\r\n\tinitSettings,\r\n\tsetColumns,\r\n\tsetTextFont,\r\n\tsetFontSize,\r\n\tsetBlocked,\r\n\tmode,\r\n\tblocked,\r\n\treadingProgressAvailable,\r\n\treadingProgressEnabled,\r\n\tsetMode,\r\n\tsetReadingProgressEnabled,\r\n\tsaveSettings,\r\n\r\n\tbookTitle,\r\n\tchapterTitle,\r\n\thomeUrl\r\n}\r\n","import { computed, reactive } from 'vue'\r\n\r\nconst state = reactive({\r\n\ttotalPages: 1\r\n})\r\n\r\nfunction estimate(viewport, content) {\r\n\tif (viewport && content) {\r\n\t\tconst { width: viewportWidth } = viewport.value.getBoundingClientRect()\r\n\t\tconst { width: contentWidth } = content.value.getBoundingClientRect()\r\n\r\n\t\tif (contentWidth > viewportWidth) {\r\n\t\t\tstate.totalPages = Math.ceil(contentWidth / viewportWidth)\r\n\t\t\treturn Math.ceil(contentWidth / viewportWidth)\r\n\r\n\t\t} else {\r\n\t\t\tstate.totalPages = 1\r\n\t\t\treturn 1\r\n\t\t}\r\n\t} else {\r\n\t\tstate.totalPages = 1\r\n\t\treturn 1\r\n\t}\r\n}\r\n\r\nconst totalPages = computed(() => state.totalPages)\r\n\r\nexport default {\r\n\ttotalPages,\r\n\testimate\r\n}\r\n","import { computed, reactive } from 'vue'\r\n\r\nconst state = reactive({\r\n\treferences: [],\r\n\treference: null\r\n})\r\n\r\nconst references = computed(() => state.references)\r\n\r\nfunction setReferences(references) {\r\n\tstate.references = references\r\n}\r\n\r\nconst reference = computed(() => state.reference)\r\n\r\nfunction setHighlightedReference(reference) {\r\n\tstate.reference = reference\r\n}\r\n\r\nfunction applyReferences(contentRaw) {\r\n\tif (state.references.length === 0 || !contentRaw)\r\n\t\treturn contentRaw\r\n\r\n\treturn state.references.reduce((content, reference) => {\r\n\t\tif (!content) return content\r\n\r\n\t\tif (content.includes(reference.cit)) {\r\n\t\t\tconst regex = new RegExp(reference.cit, 'g');\r\n\t\t\tconst newContent = content.replace(\r\n\t\t\t\tregex,\r\n\t\t\t\t`<span class='reference reference-${reference.cit.replaceAll(' ', '')}'>\r\n\t\t\t\t\t${reference.cit}\r\n\t\t\t\t</span>`\r\n\t\t\t)\r\n\t\t\treturn newContent\r\n\t\t}\r\n\t\treturn content\r\n\t}, contentRaw)\r\n}\r\n\r\nfunction applyReference(event) {\r\n\tconst classList = event.target.closest('.reference')?.classList.value.split(' ')\r\n\r\n\tif (classList.length === 0)\r\n\t\treturn\r\n\r\n\tconst target = classList.find(item => item.startsWith('reference-'))\r\n\r\n\tif (target) {\r\n\t\tconst ref = state.references.find(\r\n\t\t\titem => target && item.cit.replaceAll(' ', '') === target.replace('reference-', '')\r\n\t\t)\r\n\t\tif (ref) {\r\n\t\t\tstate.reference = ref\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default {\r\n\treferences,\r\n\treference,\r\n\tapplyReference,\r\n\tsetReferences,\r\n\tsetHighlightedReference,\r\n\tapplyReferences,\r\n}\r\n","import { computed, reactive } from 'vue'\r\n\r\nconst state = reactive({\r\n\tfootnotes: [],\r\n\tshowFootnotes: false,\r\n\tfootnote: null\r\n})\r\n\r\nconst footnotes = computed(() => state.footnotes)\r\nfunction setFootnotes(footnotes) {\r\n\tstate.footnotes = footnotes\r\n}\r\n\r\nconst showFootnotes = computed(() => state.showFootnotes)\r\nfunction setShowFootnotes(value) {\r\n\tstate.showFootnotes = value\r\n}\r\n\r\nconst footnote = computed(() => state.footnote)\r\nfunction setHighlightedFootnote(footnote) {\r\n\tstate.footnote = footnote\r\n}\r\n\r\nfunction applyFootnote(event) {\r\n\tconst classList = event.target.closest('.footnote')?.classList.value.split(' ')\r\n\r\n\tif (classList.length === 0)\r\n\t\treturn\r\n\r\n\tconst footnoteTarget = classList.find(\r\n\t\titem => item.includes('footnote') && item !== 'footnote'\r\n\t)\r\n\r\n\tif (footnoteTarget) {\r\n\t\tconst ref = state.footnotes.find(item => item.id === footnoteTarget)\r\n\t\tif (ref) {\r\n\t\t\tstate.footnote = ref\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default {\r\n\tfootnotes,\r\n\tfootnote,\r\n\tsetFootnotes,\r\n\tapplyFootnote,\r\n\tsetHighlightedFootnote,\r\n\tsetShowFootnotes,\r\n\tshowFootnotes\r\n}\r\n","export function isNavigable(item) {\n\treturn Boolean(item && !item.disabled && (item.link || item.file))\n}\n\nexport function nearestNavigable(chapters, from, step) {\n\tfor (let index = from; index >= 0 && index < chapters.length; index += step) {\n\t\tif (isNavigable(chapters[index])) return chapters[index]\n\t}\n\treturn null\n}\n","import { computed, reactive } from 'vue'\nimport { useEventListener } from '@vueuse/core'\n\nimport useReferences from './useReferences'\nimport useFootnotes from './useFootnotes'\nimport { nearestNavigable } from '../summary'\n\nconst state = reactive({\n\tsummary: null,\n\tcontent: null,\n\tactiveChapter: 0\n})\n\nconst content = computed(() => state.content)\nconst summary = computed(() => state.summary)\nconst context = computed(() => {\n\tconst chapters = state.summary || []\n\tconst linkedChapter = chapters.findIndex(\n\t\tchapter => chapter.link && window.location.href.includes(chapter.link)\n\t)\n\tconst current = linkedChapter >= 0 ? linkedChapter : state.activeChapter\n\treturn {\n\t\tchapter: chapters[current],\n\t\tsurround: {\n\t\t\tbefore: nearestNavigable(chapters, current - 1, -1),\n\t\t\tafter: nearestNavigable(chapters, current + 1, 1),\n\t\t}\n\t}\n})\nconst contextId = computed(() => {\n\tconst chapter = context.value.chapter\n\treturn chapter?.file || chapter?.link || chapter?.title || window.location.pathname\n})\n\nasync function initContent(contentString, contentWrapper) {\n\tconst { setReferences, applyReferences } = useReferences\n\tconst { setFootnotes } = useFootnotes\n\n\tconst content = contentString\n\t\t? JSON.parse(contentString)\n\t\t: null\n\n\tif (content?.summary)\n\t\tstate.summary = content.summary\n\n\tif (content?.references)\n\t\tsetReferences(content.references)\n\n\tif (content?.footnotes)\n\t\tsetFootnotes(content.footnotes)\n\n\t// if content comes from file, apply references to file\n\tif (content?.summary?.[0]?.file) {\n\t\tconst text = await getContent(content.summary?.[0]?.file)\n\t\tconst newContent = content.applyReferences\n\t\t\t? applyReferences(text)\n\t\t\t: text\n\t\tstate.content = newContent\n\n\t// else if content comes from slot, apply references to slot\n\t} else {\n\t\tconst content = document.querySelectorAll('[slot=\"content\"]')\n\n\t\tif (content && content?.[0]?.innerHTML && content.applyReferences) {\n\t\t\tconst newContent = applyReferences(content?.[0]?.innerHTML)\n\t\t\tif (newContent) {\n\t\t\t\tcontent[0].innerHTML = newContent\n\t\t\t}\n\t\t}\n\t}\n\n\t// after applying references above, now we start to listen to its clicks\n\tlistenToClicks(contentWrapper)\n}\n\nasync function getContent(location) {\n\ttry {\n\t\tconst dataRef = await fetch(location)\n\t\tconst text = await dataRef.text()\n\t\treturn text\n\t} catch (err) {\n\t\tconsole.log({ err })\n\t\tstate.content = 'Ops, não foi possível carregar o arquivo solicitado.'\n\t}\n}\n\nfunction applyContent(text, chapter = null) {\n\tconst { applyReferences } = useReferences\n\tconst newContent = applyReferences(text)\n\tif (chapter)\n\t\tstate.activeChapter = state.summary.findIndex(item => item === chapter)\n\tstate.content = newContent\n}\n\nfunction listenToClicks(contentWrapper) {\n\tsetTimeout(() => {\n\t\tuseEventListener(contentWrapper, 'click', getClickedReferenceData)\n\t}, 100)\n}\n\nfunction getClickedReferenceData(event) {\n\tif (event.target.closest('.reference')) {\n\t\tuseReferences.applyReference(event)\n\t}\n\n\tif (event.target.closest('.footnote')) {\n\t\tuseFootnotes.applyFootnote(event)\n\t}\n}\n\nexport default {\n\tcontent,\n\tsummary,\n\tinitContent,\n\tgetContent,\n\tapplyContent,\n\tlistenToClicks,\n\tcontext,\n\tcontextId\n}\n","const isSafari = [\r\n\t'iPad Simulator',\r\n\t'iPhone Simulator',\r\n\t'iPod Simulator',\r\n\t'iPad',\r\n\t'iPhone',\r\n\t'iPod'\r\n].includes(navigator.platform)\r\n\t|| (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\r\n\r\nconst isApple = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\r\n\r\nexport default {\r\n\tisSafari,\r\n\tisApple\r\n}\r\n","import { computed, reactive } from 'vue'\n\nimport useReaderSettings from './useReaderSettings'\nimport useTextContent from './useTextContent'\n\nconst STORAGE_KEY = 'paginar:reading-progress:v1'\n\nconst state = reactive({\n\tbookId: null,\n\tcontextKey: null,\n\trestored: false,\n\tsuspended: false,\n\tcurrentPage: 1,\n\ttotalPages: 1\n})\n\nconst available = computed(() => useReaderSettings.readingProgressAvailable.value)\nconst enabled = computed(() => useReaderSettings.readingProgressEnabled.value)\n\nfunction init(settingsString, fallbackTitle) {\n\tlet settings = null\n\tstate.bookId = null\n\tstate.contextKey = null\n\tstate.restored = false\n\n\ttry {\n\t\tsettings = settingsString ? JSON.parse(settingsString) : null\n\t} catch (error) {\n\t\treturn\n\t}\n\n\tif (!settings?.readingProgress ||\n\t\ttypeof settings.readingProgress !== 'object' ||\n\t\tArray.isArray(settings.readingProgress)\n\t)\n\t\treturn\n\n\tconst configuredId = settings.readingProgress.id\n\tstate.bookId = typeof configuredId === 'string' && configuredId.trim()\n\t\t? configuredId.trim()\n\t\t: fallbackTitle || window.location.pathname\n}\n\nfunction getContextKey() {\n\tif (!state.bookId)\n\t\treturn null\n\n\tconst chapter = useTextContent.contextId.value || window.location.pathname\n\treturn `${state.bookId}::${chapter}`\n}\n\nfunction readStore() {\n\ttry {\n\t\tconst saved = JSON.parse(localStorage.getItem(STORAGE_KEY))\n\t\treturn saved?.version === 1 && saved.entries && typeof saved.entries === 'object'\n\t\t\t? saved\n\t\t\t: { version: 1, entries: {} }\n\t} catch (error) {\n\t\treturn { version: 1, entries: {} }\n\t}\n}\n\nfunction writeStore(store) {\n\ttry {\n\t\tlocalStorage.setItem(STORAGE_KEY, JSON.stringify(store))\n\t} catch (error) {\n\t\t// Reading continues normally when storage is unavailable.\n\t}\n}\n\nfunction percentageFor(page, total) {\n\tif (total <= 1)\n\t\treturn 0\n\n\treturn Math.min(1, Math.max(0, (page - 1) / (total - 1)))\n}\n\nfunction pageFor(percentage, total) {\n\treturn Math.min(total, Math.max(1, Math.round(percentage * (total - 1)) + 1))\n}\n\nfunction repaginate(page, previousTotal, nextTotal) {\n\tconst key = getContextKey()\n\tif (!available.value || !enabled.value || !state.restored ||\n\t\t!key || key !== state.contextKey || previousTotal < 1 || nextTotal < 1\n\t)\n\t\treturn null\n\n\tconst percentage = percentageFor(page, previousTotal)\n\treturn pageFor(percentage, nextTotal)\n}\n\nfunction save(page, total) {\n\tconst key = getContextKey()\n\tif (!available.value || !enabled.value || !state.restored || state.suspended ||\n\t\t!key || key !== state.contextKey || total < 1\n\t)\n\t\treturn\n\n\tconst store = readStore()\n\tstore.entries[key] = percentageFor(page, total)\n\twriteStore(store)\n}\n\nfunction suspend() {\n\tstate.suspended = true\n}\n\nfunction resume() {\n\tstate.suspended = false\n}\n\nfunction remove() {\n\tconst key = getContextKey()\n\tif (!key)\n\t\treturn\n\n\tconst store = readStore()\n\tdelete store.entries[key]\n\twriteStore(store)\n}\n\nfunction sync(page, total, allowRestore = false) {\n\tstate.currentPage = page\n\tstate.totalPages = total\n\tconst key = getContextKey()\n\tif (!available.value || !enabled.value || !key)\n\t\treturn\n\n\tif (state.contextKey !== key) {\n\t\tstate.contextKey = key\n\t\tstate.restored = false\n\t}\n\n\tif (!state.restored) {\n\t\tif (!allowRestore)\n\t\t\treturn\n\n\t\tif (/[?&]origin=/.test(window.location.search) || window.location.hash) {\n\t\t\tstate.restored = true\n\t\t\tsave(page, total)\n\t\t\treturn\n\t\t}\n\n\t\tconst percentage = readStore().entries[key]\n\t\tif (Number.isFinite(percentage) && percentage >= 0 && percentage <= 1) {\n\t\t\tif (total <= 1 && percentage > 0)\n\t\t\t\treturn\n\n\t\t\tstate.restored = true\n\t\t\tconst targetPage = pageFor(percentage, total)\n\t\t\tif (targetPage !== page)\n\t\t\t\treturn targetPage\n\t\t\treturn\n\t\t}\n\n\t\tstate.restored = true\n\t}\n\n\tsave(page, total)\n}\n\nfunction setEnabled(value) {\n\tuseReaderSettings.setReadingProgressEnabled(value)\n\tstate.restored = true\n\n\tif (value)\n\t\tsave(state.currentPage, state.totalPages)\n\telse\n\t\tremove()\n}\n\nexport default {\n\tavailable,\n\tenabled,\n\tinit,\n\tremove,\n\trepaginate,\n\tresume,\n\tsave,\n\tsetEnabled,\n\tsuspend,\n\tsync\n}\n","export function isPaginarIgnoredEvent(event) {\n\tconst path = event.composedPath?.() || []\n\treturn path.some(node => node?.nodeType === 1 && node.matches(\n\t\t'input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [data-paginar-ignore]'\n\t))\n}\n","import { reactive, computed, watch } from 'vue'\nimport { onKeyStroke } from '@vueuse/core'\n\nimport useReaderSettings from './useReaderSettings'\nimport useEstimatePages from './useEstimatePages'\nimport useTextContent from './useTextContent'\nimport useBrowser from './useBrowser'\nimport useReadingProgress from './useReadingProgress'\nimport { isPaginarIgnoredEvent } from '../paginationEvents'\n\nconst state = reactive({\n\tcurrentPage: 1,\n\tchangeSource: 'initial',\n\tnextTry: 0,\n\tprevTry: 0,\n\twillRedirect: false\n})\n\nconst currentPage = computed(() => state.currentPage)\nconst changeSource = computed(() => state.changeSource)\nconst totalPages = computed(() => useEstimatePages.totalPages.value)\n\nfunction init(viewport, content, estimate = null) {\n\tconst updatePages = estimate || (() => useEstimatePages.estimate(viewport, content))\n\t// Measure immediately, but let the parent restore progress only after child\n\t// controls (notably the page slider) have finished their mount cycle.\n\tuseEstimatePages.estimate(viewport, content)\n\n\t// check if there is a query string for oring, and\n\t// if previews chapter was the next one. If so,\n\t// start from the end, as we are coming backwards\n\tconst urlParams = new URLSearchParams(window.location.search)\n\tconst origin = urlParams.get('origin')\n\tif (origin && origin === 'next') {\n\t\tsetTimeout(() => {\n\t\t\tset(totalPages.value)\n\t\t}, 200)\n\t}\n\n\tif (!useBrowser.isApple && !useBrowser.isSafari) {\n\t\taddEventListener('wheel', onWheel)\n\t}\n\n\tobserveLayout(viewport, content, updatePages)\n}\n\nlet observer = null\nlet fallbackTimer = null\nlet observedFrame = 0\n\n// Page count depends only on the viewport and content box sizes, so repaginate\n// when either changes (late web fonts, images, slot edits) instead of polling.\nfunction observeLayout(viewport, content, updatePages) {\n\tstopObserving()\n\tif (typeof ResizeObserver !== 'function') {\n\t\tfallbackTimer = setInterval(updatePages, 5000)\n\t\treturn\n\t}\n\n\tconst sizes = new WeakMap()\n\tobserver = new ResizeObserver(entries => {\n\t\tlet changed = false\n\t\tfor (const { target, borderBoxSize, contentRect } of entries) {\n\t\t\tconst box = borderBoxSize?.[0]\n\t\t\tconst size = box\n\t\t\t\t? `${box.inlineSize}x${box.blockSize}`\n\t\t\t\t: `${contentRect.width}x${contentRect.height}`\n\t\t\t// The first notification only records the size already measured on mount.\n\t\t\tif (sizes.has(target) && sizes.get(target) !== size)\n\t\t\t\tchanged = true\n\t\t\tsizes.set(target, size)\n\t\t}\n\t\tif (changed && !observedFrame)\n\t\t\tobservedFrame = requestAnimationFrame(() => {\n\t\t\t\tobservedFrame = 0\n\t\t\t\tupdatePages()\n\t\t\t})\n\t})\n\tfor (const element of [viewport.value, content.value])\n\t\tif (element)\n\t\t\tobserver.observe(element)\n}\n\nfunction stopObserving() {\n\tobserver?.disconnect()\n\tobserver = null\n\tclearInterval(fallbackTimer)\n\tfallbackTimer = null\n\tcancelAnimationFrame(observedFrame)\n\tobservedFrame = 0\n}\n\n// when resizing the viewport, totalPages change\n// this watch is to currentPage inside totalPages range\nwatch(totalPages, () => {\n\tif (totalPages.value < currentPage.value) {\n\t\tset(totalPages.value)\n\t}\n})\n\n// navigate by increase/decrease value\nfunction next(usingScroll = false, source = 'next') {\n\tif (!useReaderSettings.blocked.value) {\n\t\tif ((state.currentPage + 1) <= totalPages.value) {\n\t\t\tset(state.currentPage + 1, source)\n\t\t} else {\n\t\t\t// prevent going too fast to next chapter on\n\t\t\t// stronger scroll\n\t\t\tif (usingScroll && state.nextTry < 4) {\n\t\t\t\tstate.nextTry += 1\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (state.willRedirect === false) {\n\t\t\t\tconst context = useTextContent.context.value\n\t\t\t\tif (context.surround?.after) {\n\t\t\t\t\twindow.location.href = context.surround.after.link + (`?origin=prev`)\n\t\t\t\t\tstate.willRedirect = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\nonKeyStroke('ArrowRight', (e) => {\n\tif (isPaginarIgnoredEvent(e))\n\t\treturn\n\te.preventDefault()\n\tnext(false, 'keyboard')\n})\n\nfunction onWheel(event) {\n\tif (isPaginarIgnoredEvent(event))\n\t\treturn\n\tif (event.wheelDelta < 0) {\n\t\tnext(true, 'wheel')\n\t} else {\n\t\tprev(true, 'wheel')\n\t}\n};\n\nfunction prev(usingScroll = false, source = 'previous') {\n\tif (!useReaderSettings.blocked.value) {\n\t\tif ((state.currentPage - 1) > 0) {\n\t\t\tset(state.currentPage - 1, source)\n\t\t} else {\n\t\t\t// prevent going too fast to prev chapter on\n\t\t\t// stronger scroll\n\t\t\tif (usingScroll && state.prevTry < 4) {\n\t\t\t\tstate.prevTry += 1\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (state.willRedirect === false) {\n\t\t\t\tconst context = useTextContent.context.value\n\t\t\t\tif (context.surround?.before) {\n\t\t\t\t\twindow.location.href = context.surround.before.link + (`?origin=next`)\n\t\t\t\t}\n\t\t\t\tstate.willRedirect = true\n\t\t\t}\n\t\t}\n\t}\n}\nonKeyStroke('ArrowLeft', (e) => {\n\tif (isPaginarIgnoredEvent(e))\n\t\treturn\n\te.preventDefault()\n\tprev(false, 'keyboard')\n})\n\n// navigate to specific page\nfunction set(val, source = 'go-to-page') {\n\tconst page = Math.min(totalPages.value, Math.max(1, Number(val) || 1))\n\tstate.changeSource = source\n\tstate.currentPage = page\n\tuseReadingProgress.save(page, totalPages.value)\n}\n\nexport default {\n\tcurrentPage,\n\ttotalPages,\n\tchangeSource,\n\tnext,\n\tprev,\n\tinit,\n\tstopObserving,\n\tset\n}\n","// Plain text only: consumers render each part as text, never as HTML.\nexport function searchExcerpt(text, { start, end }, contextWords = 8) {\n\t// Walk only nearby words; do not tokenize the entire chapter for every hit.\n\tfunction boundary(offset, direction) {\n\t\tlet words = 0\n\t\tlet inWord = false\n\t\twhile (offset >= 0 && offset < text.length) {\n\t\t\tconst isWord = /\\S/u.test(text[offset])\n\t\t\tif (isWord && !inWord && ++words > contextWords) break\n\t\t\tinWord = isWord\n\t\t\toffset += direction\n\t\t}\n\t\treturn offset\n\t}\n\tconst left = boundary(start - 1, -1)\n\tconst right = boundary(end, 1)\n\tconst compact = value => value.replace(/\\s+/gu, ' ')\n\treturn {\n\t\tbefore: (left >= 0 ? '… ' : '') + compact(text.slice(left + 1, start)).trimStart(),\n\t\tmatch: compact(text.slice(start, end)),\n\t\tafter: compact(text.slice(end, right)).trimEnd() + (right < text.length ? ' …' : '')\n\t}\n}\n\nexport function externalSearchResults(results) {\n\tif (!Array.isArray(results)) return null\n\tconst ids = new Set()\n\tconst items = []\n\tfor (const result of results) {\n\t\tif (!result || typeof result.id !== 'string' || !result.id || ids.has(result.id) ||\n\t\t\ttypeof result.match !== 'string' || !result.match.trim()) return null\n\t\tids.add(result.id)\n\t\tconst item = { id: result.id, source: 'external' }\n\t\tfor (const key of ['chapterTitle', 'before', 'match', 'after', 'href']) {\n\t\t\tif (result[key] !== undefined && typeof result[key] !== 'string') return null\n\t\t\titem[key] = result[key] || ''\n\t\t}\n\t\titems.push(item)\n\t}\n\treturn items\n}\n\n// Keep offsets into the original UTF-16 text so matches can become DOM Ranges.\nexport function normalizeSearchText(value) {\n\tlet text = ''\n\tconst starts = []\n\tconst ends = []\n\tlet offset = 0\n\tfor (const character of value) {\n\t\tconst end = offset + character.length\n\t\tconst normalized = character.normalize('NFKD').replace(/\\p{M}/gu, '').toLowerCase()\n\t\tif (!normalized && ends.length)\n\t\t\tends[ends.length - 1] = end\n\t\tfor (const part of normalized) {\n\t\t\tconst next = /[\\p{L}\\p{N}]/u.test(part) ? part : ' '\n\t\t\tif (next === ' ' && text.endsWith(' ')) {\n\t\t\t\tends[ends.length - 1] = end\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttext += next\n\t\t\tfor (let index = 0; index < next.length; index++) {\n\t\t\t\tstarts.push(offset)\n\t\t\t\tends.push(end)\n\t\t\t}\n\t\t}\n\t\toffset = end\n\t}\n\treturn { text, starts, ends }\n}\n\n// At most one insertion, deletion, substitution or adjacent transposition.\nfunction nearWord(left, right) {\n\tif (left === right)\n\t\treturn true\n\tif (left.length < 5 || Math.abs(left.length - right.length) > 1)\n\t\treturn false\n\tlet index = 0\n\twhile (index < Math.min(left.length, right.length) && left[index] === right[index])\n\t\tindex++\n\tif (left.length === right.length) {\n\t\treturn left.slice(index + 1) === right.slice(index + 1) || (\n\t\t\tleft[index] === right[index + 1] && left[index + 1] === right[index] &&\n\t\t\tleft.slice(index + 2) === right.slice(index + 2)\n\t\t)\n\t}\n\treturn left.length > right.length\n\t\t? left.slice(index + 1) === right.slice(index)\n\t\t: left.slice(index) === right.slice(index + 1)\n}\n\nexport function findSearchMatches(index, query) {\n\tconst needle = normalizeSearchText(query).text.trim()\n\tif (!needle)\n\t\treturn []\n\tconst hits = []\n\tlet position = index.text.indexOf(needle)\n\twhile (position !== -1) {\n\t\thits.push({ start: position, end: position + needle.length })\n\t\tposition = index.text.indexOf(needle, position + needle.length)\n\t}\n\tconst words = needle.split(' ')\n\tconst tokens = Array.from(index.text.matchAll(/[\\p{L}\\p{N}]+/gu))\n\tconst exactCount = hits.length\n\tlet exactIndex = 0\n\tfor (let offset = 0; offset <= tokens.length - words.length; offset++) {\n\t\tconst start = tokens[offset].index\n\t\tconst last = tokens[offset + words.length - 1]\n\t\tconst end = last.index + last[0].length\n\t\twhile (exactIndex < exactCount && hits[exactIndex].end <= start)\n\t\t\texactIndex++\n\t\tif (exactIndex < exactCount && hits[exactIndex].start < end)\n\t\t\tcontinue\n\t\tif (words.every((word, part) => nearWord(word, tokens[offset + part][0])))\n\t\t\thits.push({ start, end, approximate: true })\n\t}\n\treturn hits.sort((left, right) => left.start - right.start)\n\t\t.map(hit => ({ start: index.starts[hit.start], end: index.ends[hit.end - 1] }))\n}\n","import { computed, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue'\nimport usePagination from './usePagination'\nimport useReaderSettings from './useReaderSettings'\nimport { externalSearchResults, findSearchMatches, normalizeSearchText, searchExcerpt } from '../search'\n\nexport const searchKey = Symbol('paginarSearch')\n\n// Walk the rendered slot tree as well as HTML loaded inside the shadow root.\nfunction indexContent(root) {\n\tlet text = ''\n\tconst nodes = []\n\tfunction visit(node) {\n\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\tnodes.push({ node, start: text.length, end: text.length + node.length })\n\t\t\ttext += node.data\n\t\t\treturn\n\t\t}\n\t\tif (node.nodeType !== Node.ELEMENT_NODE)\n\t\t\treturn\n\t\tif (node.matches('script, style, template, noscript, [hidden], [aria-hidden=\"true\"]'))\n\t\t\treturn\n\t\tconst style = getComputedStyle(node)\n\t\tif (style.display === 'none' || style.visibility === 'hidden')\n\t\t\treturn\n\t\tconst separator = node.tagName === 'BR' || !['inline', 'contents'].includes(style.display)\n\t\tif (separator) text += ' '\n\t\tconst children = node.tagName === 'SLOT'\n\t\t\t? node.assignedNodes({ flatten: true })\n\t\t\t: node.childNodes\n\t\tfor (const child of children.length ? children : node.childNodes)\n\t\t\tvisit(child)\n\t\tif (separator) text += ' '\n\t}\n\tvisit(root)\n\treturn { ...normalizeSearchText(text), original: text, nodes }\n}\n\nfunction rangeForMatch(index, match) {\n\t// Binary search keeps mapping a common word in a long chapter inexpensive.\n\tfunction findNode(offset) {\n\t\tlet low = 0\n\t\tlet high = index.nodes.length - 1\n\t\twhile (low <= high) {\n\t\t\tconst middle = (low + high) >> 1\n\t\t\tconst item = index.nodes[middle]\n\t\t\tif (offset < item.start) high = middle - 1\n\t\t\telse if (offset >= item.end) low = middle + 1\n\t\t\telse return item\n\t\t}\n\t}\n\tconst first = findNode(match.start)\n\tconst last = findNode(match.end - 1)\n\tif (!first || !last || first.node.getRootNode() !== last.node.getRootNode())\n\t\treturn null\n\tconst range = document.createRange()\n\trange.setStart(first.node, match.start - first.start)\n\trange.setEnd(last.node, match.end - last.start)\n\treturn range\n}\n\nexport default function useSearch(root, viewport, content, emit) {\n\tconst enabled = ref(false)\n\tconst open = ref(false)\n\tconst query = ref('')\n\tconst input = ref(null)\n\tconst button = ref(null)\n\tconst active = ref(-1)\n\tconst panel = ref(false)\n\tconst localResults = shallowRef([])\n\tconst externalResults = shallowRef([])\n\tconst results = computed(() => [...localResults.value, ...externalResults.value])\n\tconst total = computed(() => results.value.length)\n\tlet requestId = 0\n\tconst geometry = shallowRef([])\n\tconst pageWidth = ref(0)\n\tconst rectangles = computed(() => {\n\t\tif (!open.value) return []\n\t\t// Include adjacent pages so highlights accompany the sliding text.\n\t\tconst left = (usePagination.currentPage.value - 2) * pageWidth.value\n\t\tconst right = (usePagination.currentPage.value + 1) * pageWidth.value\n\t\treturn geometry.value.filter(rect => rect.left < right && rect.right > left)\n\t\t\t.map(rect => ({ ...rect, active: rect.match === active.value }))\n\t})\n\tconst pending = ref(false)\n\tlet ranges = []\n\tlet index = null\n\tlet timer = null\n\tlet observer = null\n\tlet host = null\n\n\tfunction init(settingsString) {\n\t\tconst settings = settingsString ? JSON.parse(settingsString) : {}\n\t\tenabled.value = settings.search === true\n\t\tpanel.value = settings.searchResults === 'panel'\n\t}\n\n\tfunction getState() {\n\t\treturn {\n\t\t\tquery: query.value, requestId, open: open.value, view: panel.value ? 'panel' : 'compact',\n\t\t\tpending: pending.value, activeIndex: active.value,\n\t\t\tresults: results.value.map(result => ({ ...result }))\n\t\t}\n\t}\n\n\tfunction notifySearch() {\n\t\temit('search', { query: query.value, requestId, open: open.value,\n\t\t\tresults: localResults.value.map(result => ({ ...result })) })\n\t}\n\n\tfunction setResults(response) {\n\t\tif (!enabled.value || !open.value || pending.value || !query.value.trim() ||\n\t\t\tresponse?.requestId !== requestId) return false\n\t\tconst items = externalSearchResults(response.results)\n\t\tif (!items) return false\n\t\tconst selected = results.value[active.value]\n\t\texternalResults.value = items\n\t\tif (selected?.source === 'external')\n\t\t\tactive.value = results.value.findIndex(item => item.source === 'external' && item.id === selected.id)\n\t\treturn true\n\t}\n\n\tfunction measure() {\n\t\tconst columns = viewport.value?.querySelector('.columnsArea')\n\t\tif (!open.value || !ranges.length || !columns) {\n\t\t\tgeometry.value = []\n\t\t\treturn\n\t\t}\n\t\tconst origin = columns.getBoundingClientRect()\n\t\tpageWidth.value = viewport.value.getBoundingClientRect().width\n\t\tconst measured = []\n\t\tconst firstRects = new Map()\n\t\tranges.forEach((range, match) => {\n\t\t\tif (!range.startContainer.isConnected) return\n\t\t\tconst seen = new Set()\n\t\t\tfor (const rect of range.getClientRects()) {\n\t\t\t\tif (!rect.width || !rect.height) continue\n\t\t\t\tconst key = `${rect.left},${rect.top},${rect.width},${rect.height}`\n\t\t\t\t// Inline elements can yield the same rectangle as their text node.\n\t\t\t\tif (seen.has(key)) continue\n\t\t\t\tseen.add(key)\n\t\t\t\tconst rectangle = {\n\t\t\t\t\tkey: `${match}:${key}`, match,\n\t\t\t\t\tleft: rect.left - origin.left, right: rect.right - origin.left,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tleft: `${rect.left - origin.left}px`, top: `${rect.top - origin.top}px`,\n\t\t\t\t\t\twidth: `${rect.width}px`, height: `${rect.height}px`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmeasured.push(rectangle)\n\t\t\t\tif (!firstRects.has(match)) firstRects.set(match, rectangle)\n\t\t\t}\n\t\t})\n\t\tgeometry.value = measured\n\t\tlocalResults.value = localResults.value.map((result, match) => {\n\t\t\tconst rect = firstRects.get(match)\n\t\t\treturn { ...result, page: rect && pageWidth.value\n\t\t\t\t? Math.floor(Math.max(0, rect.left) / pageWidth.value) + 1 : null }\n\t\t})\n\t}\n\n\tfunction navigate(position, notify = true) {\n\t\tif (!total.value || useReaderSettings.blocked.value)\n\t\t\treturn\n\t\tactive.value = ((position % total.value) + total.value) % total.value\n\t\tconst result = results.value[active.value]\n\t\tconst rect = geometry.value.find(rect => rect.match === active.value)\n\t\tif (result.source === 'local' && rect && pageWidth.value)\n\t\t\tusePagination.set(Math.floor(Math.max(0, rect.left) / pageWidth.value) + 1, 'search')\n\t\tif (notify)\n\t\t\temit('search-select', { query: query.value, requestId, result: { ...result }, index: active.value })\n\t}\n\n\tfunction run(position = 0) {\n\t\tclearTimeout(timer)\n\t\tpending.value = false\n\t\tif (!enabled.value || !open.value || !content.value)\n\t\t\treturn\n\t\tindex ||= indexContent(content.value)\n\t\trequestId++\n\t\texternalResults.value = []\n\t\tranges = []\n\t\tlocalResults.value = findSearchMatches(index, query.value).flatMap(match => {\n\t\t\tconst range = rangeForMatch(index, match)\n\t\t\tif (!range) return []\n\t\t\tranges.push(range)\n\t\t\treturn [{ id: `local:${match.start}:${match.end}`, source: 'local',\n\t\t\t\t...searchExcerpt(index.original, match), page: null }]\n\t\t})\n\t\tactive.value = -1\n\t\tmeasure()\n\t\tnavigate(position, false)\n\t\tnotifySearch()\n\t}\n\n\tfunction schedule(invalidate = false) {\n\t\tif (invalidate) index = null\n\t\tclearTimeout(timer)\n\t\trequestId++\n\t\tranges = []\n\t\tlocalResults.value = []\n\t\texternalResults.value = []\n\t\tactive.value = -1\n\t\tgeometry.value = []\n\t\tpending.value = open.value && Boolean(query.value.trim())\n\t\tif (pending.value) timer = setTimeout(run, 180)\n\t\telse if (enabled.value && open.value) notifySearch()\n\t}\n\n\tfunction searchText(value, options = {}) {\n\t\tif (!enabled.value || useReaderSettings.blocked.value || typeof value !== 'string') return false\n\t\topen.value = true\n\t\tif (options.view === 'panel' || options.view === 'compact') panel.value = options.view === 'panel'\n\t\tquery.value = value\n\t\trun(Number.isInteger(options.resultIndex) && options.resultIndex >= 0 ? options.resultIndex : 0)\n\t\tnextTick(() => input.value?.focus({ preventScroll: true }))\n\t\treturn true\n\t}\n\n\tasync function show() {\n\t\tif (!enabled.value || useReaderSettings.blocked.value)\n\t\t\treturn\n\t\topen.value = true\n\t\trun()\n\t\tawait nextTick()\n\t\tinput.value?.focus({ preventScroll: true })\n\t\tinput.value?.select()\n\t}\n\n\tfunction close() {\n\t\topen.value = false\n\t\tschedule()\n\t\tnotifySearch()\n\t\tbutton.value?.focus({ preventScroll: true })\n\t}\n\n\tfunction step(direction) {\n\t\tif (pending.value) run()\n\t\telse navigate(active.value + direction)\n\t}\n\n\tfunction onKeydown(event) {\n\t\tif (!enabled.value || event.defaultPrevented)\n\t\t\treturn\n\t\tconst path = event.composedPath()\n\t\tconst otherReader = path.find(node => node?.tagName === 'PAGINATE-CONTENT')\n\t\tif (otherReader && otherReader !== host)\n\t\t\treturn\n\t\tif (event.key === 'Escape' && open.value) {\n\t\t\tevent.preventDefault()\n\t\t\tclose()\n\t\t} else if ((event.ctrlKey || event.metaKey) && !event.altKey && event.key.toLowerCase() === 'f') {\n\t\t\t// Keep browser find available in unrelated editing fields on the host page.\n\t\t\tif (!path.includes(host) && path.some(node =>\n\t\t\t\tnode?.matches?.('input, textarea, select, [contenteditable=\"true\"]')))\n\t\t\t\treturn\n\t\t\tif (useReaderSettings.blocked.value || !host?.getClientRects().length)\n\t\t\t\treturn\n\t\t\tevent.preventDefault()\n\t\t\tshow()\n\t\t}\n\t}\n\n\tonMounted(() => {\n\t\thost = root.value.getRootNode().host\n\t\twindow.addEventListener('keydown', onKeydown, true)\n\t\tobserver = new MutationObserver(() => schedule(true))\n\t\tobserver.observe(content.value, { subtree: true, childList: true, characterData: true })\n\t\tif (host) observer.observe(host, { subtree: true, childList: true, characterData: true })\n\t\tcontent.value.addEventListener('slotchange', invalidate)\n\t})\n\tfunction invalidate() { schedule(true) }\n\tonBeforeUnmount(() => {\n\t\tclearTimeout(timer)\n\t\tobserver?.disconnect()\n\t\twindow.removeEventListener('keydown', onKeydown, true)\n\t\tcontent.value?.removeEventListener('slotchange', invalidate)\n\t\tranges = []\n\t\tindex = null\n\t})\n\twatch(query, () => schedule(), { flush: 'sync' })\n\twatch(useReaderSettings.blocked, blocked => {\n\t\tif (!blocked && open.value && active.value < 0 && localResults.value.length)\n\t\t\tnavigate(0, false)\n\t})\n\treturn {\n\t\tenabled, open, query, input, button, active, total, rectangles, pending, panel, results,\n\t\tinit, show, close, step, measure, navigate, getState, setResults, searchText,\n\t\tstatus: computed(() => pending.value ? 'Buscando…' : total.value\n\t\t\t? `${active.value >= 0 ? `${active.value + 1} de ` : ''}${total.value} ${total.value === 1 ? 'ocorrência' : 'ocorrências'}`\n\t\t\t: query.value.trim() ? 'Nenhuma ocorrência' : 'Digite para buscar')\n\t}\n}\n","<template>\r\n\t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 20 22\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path d=\"M1 8L10 1L19 8V19C19 19.5304 18.7893 20.0391 18.4142 20.4142C18.0391 20.7893 17.5304 21 17 21H3C2.46957 21 1.96086 20.7893 1.58579 20.4142C1.21071 20.0391 1 19.5304 1 19V8Z\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n\t\t<path d=\"M7 21V11H13V21\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n\t</svg>\r\n</template>\r\n","<script setup></script>\r\n<template>\r\n \t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\r\n\t</svg>\r\n</template>\r\n","<template>\r\n\t<svg width=\"24\" height=\"19\" viewBox=\"0 0 24 19\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<line x1=\"5\" y1=\"1.08447\" x2=\"1\" y2=\"1.08447\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n\t\t<line x1=\"23\" y1=\"1.04248\" x2=\"11\" y2=\"1.04248\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n\t\t<line x1=\"23\" y1=\"9.08447\" x2=\"14\" y2=\"9.08447\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n\t\t<line x1=\"8\" y1=\"9.14905\" x2=\"4\" y2=\"9.14905\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n\t\t<line x1=\"23\" y1=\"17.149\" x2=\"10.9993\" y2=\"17.149\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n\t\t<line x1=\"5\" y1=\"17.2429\" x2=\"1\" y2=\"17.2429\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n\t</svg>\r\n</template>\r\n","export const publicEventKey = Symbol('paginarPublicEvent')\n","<script setup>\nimport { inject } from 'vue'\nimport useTextContent from '../../../composables/useTextContent'\nimport usePagination from '../../../composables/usePagination'\nimport { publicEventKey } from '../../../publicApi'\nimport { isNavigable } from '../../../summary'\nconst { summary } = useTextContent\nconst publicEvent = inject(publicEventKey, () => {})\n\nasync function getChapter(item) {\n\tconst text = await useTextContent.getContent(item.file)\n\tuseTextContent.applyContent(text, item)\n\tusePagination.set(1, 'summary')\n\tpublicEvent('chapter-change', { chapter: { ...item } })\n}\n</script>\n\n<template>\n\t<div id=\"summary-menu-dropdown\" class=\"absolute top-14 py-4 px-3 shadow-lg w-60 md:w-104\n\t\t\ttext-areia z-10 bg-white\" role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"summary-menu\">\n\t\t<nav>\n\t\t\t<slot name=\"summaryTop\" />\n\n\t\t\t<template v-for=\"item in summary\" :key=\"isNavigable(item) ? item.link : item.title\">\n\t\t\t\t<span v-if=\"!isNavigable(item)\" aria-disabled=\"true\"\n\t\t\t\t\tclass=\"summary-menu-dropdown-item-disabled w-full text-left block text-black py-2 px-3 rounded mb-2\"\n\t\t\t\t\t:style=\"{ opacity: 0.4, cursor: 'default' }\">\n\t\t\t\t\t<span class=\"summary-menu-dropdown-item-title\">{{ item.title }}</span>\n\t\t\t\t\t<span v-if=\"item.author\" class=\"summary-menu-dropdown-item-author\">{{ item.author }}</span>\n\t\t\t\t</span>\n\t\t\t\t<component v-else :is=\"item.link ? 'a' : 'button'\" :href=\"item.link\"\n\t\t\t\t\t:title=\"`Navegar para capítulo ${item.title}`\"\n\t\t\t\t\tclass=\"w-full text-left block text-black py-2 px-3 hover:bg-gray-100 rounded mb-2\"\n\t\t\t\t\t@click=\"item.file ? getChapter(item) : null\">\n\t\t\t\t\t<span class=\"summary-menu-dropdown-item-title\">{{ item.title }}</span>\n\t\t\t\t\t<span v-if=\"item.author\" class=\"summary-menu-dropdown-item-author\">{{ item.author }}</span>\n\t\t\t\t</component>\n\t\t\t</template>\n\n\t\t\t<slot name=\"summaryBottom\" />\n\t\t</nav>\n\t</div>\n</template>\n","<script setup>\nimport { ref, inject } from 'vue'\nimport { onClickOutside, onKeyStroke } from '@vueuse/core'\n\nimport useReaderSettings from '../../../composables/useReaderSettings'\n\nimport IconHome from '../../icons/Home.vue'\nimport IconClose from '../../icons/Close.vue'\nimport IconSummary from '../../icons/Summary.vue'\nimport SummaryDropdown from './SummaryDropdown.vue'\nimport { publicEventKey } from '../../../publicApi'\n\nconst show = ref(false)\nconst button = ref(null)\n\nconst { homeUrl } = useReaderSettings\nconst publicEvent = inject(publicEventKey, () => {})\n\nconst toggleSummary = () => {\n\tshow.value = !show.value\n\tuseReaderSettings.setBlocked(show.value)\n\tpublicEvent('summary-toggle', { open: show.value })\n}\nconst hide = () => {\n\tif (show.value && !useReaderSettings.blocked.value) {\n\t\tshow.value = false\n\t\tuseReaderSettings.setBlocked(false)\n\t\tpublicEvent('summary-toggle', { open: false })\n\t}\n}\n\nonClickOutside(button, () => hide())\nonKeyStroke('Escape', () => hide())\n</script>\n\n<template>\n\t<div id=\"summary-menu\" ref=\"button\" class=\"relative\">\n\t\t<div class=\"flex\">\n\t\t\t<a v-if=\"homeUrl\"\n\t\t\t\t:href=\"homeUrl\" title=\"Homepage\" id=\"home-button\"\n\t\t\t\tclass=\"hidden md:flex items-center border p-3 shadow mr-3\n\t\t\t\t\tborder-white text-white\"\n\t\t\t>\n\t\t\t\t<IconHome class=\"w-6 h-6\"/>\n\t\t\t</a>\n\n\t\t\t<div class=\"position-relative\">\n\t\t\t\t<button\n\t\t\t\t\t@click.prevent=\"toggleSummary()\"\n\t\t\t\t\tclass=\"border p-3 shadow flex items-center border-white text-white\"\n\t\t\t\t\tid=\"summary-button\" aria-haspopup=\"true\" :aria-expanded=\"show\"\n\t\t\t\t>\n\t\t\t\t\t<IconSummary v-if=\"!show\" />\n\t\t\t\t\t<IconClose v-else class=\"w-6 h-6\" />\n\n\t\t\t\t\t<span class=\"block ml-3\">\n\t\t\t\t\t\tSumário\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t\t<transition enter-active-class=\"transition ease-out duration-100 transform\" enter-class=\"opacity-0 scale-95\"\n\t\t\t\t\tenter-to-class=\"opacity-100 scale-100\" leave-active-class=\"transition ease-in duration-75 transform\"\n\t\t\t\t\tleave-class=\"opacity-100 scale-100\" leave-to-class=\"opacity-0 scale-95\"\n\t\t\t\t>\n\t\t\t\t\t<SummaryDropdown v-if=\"show\">\n\t\t\t\t\t\t<template #summaryTop>\n\t\t\t\t\t\t\t<slot name=\"summaryTop\"/>\n\t\t\t\t\t\t</template>\n\n\t\t\t\t\t\t<template #summaryBottom>\n\t\t\t\t\t\t\t<slot name=\"summaryBottom\"/>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</SummaryDropdown>\n\t\t\t\t</transition>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n","<script setup></script>\r\n<template>\r\n\t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n\t\t\td=\"M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z\">\r\n\t\t</path>\r\n\t</svg>\r\n</template>\r\n","<script setup></script>\r\n<template>\r\n\t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n\t\t\td=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4\"></path>\r\n\t</svg>\r\n</template>\r\n","<script setup></script>\r\n<template>\r\n\t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"></path>\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n\t\t\td=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\">\r\n\t\t</path>\r\n\t</svg>\r\n</template>\r\n","<template>\r\n\t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\r\n\t</svg>\r\n</template>\r\n","<template>\r\n\t<svg viewBox=\"0 0 341.5 441.2\" fill=\"currentColor\"><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"143.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"82.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"203.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"263.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"319\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"0\" y=\"-0.6\" width=\"332.3\" height=\"15\"></rect><rect data-v-acadaaca=\"\" x=\"0\" y=\"426.2\" width=\"332.3\" height=\"15\"></rect><rect data-v-acadaaca=\"\" x=\"-209.4\" y=\"216.2\" transform=\"matrix(6.123234e-17 -1 1 6.123234e-17 -216.2339 231.2339)\" width=\"433.7\" height=\"15\"></rect><rect data-v-acadaaca=\"\" x=\"108\" y=\"211.9\" transform=\"matrix(6.123234e-17 -1 1 6.123234e-17 105.4808 544.1859)\" width=\"433.7\" height=\"15\"></rect></svg>\r\n</template>\r\n","<template>\r\n\t<svg viewBox=\"0 0 653 441.2\" fill=\"currentColor\">\r\n\t\t<rect x=\"73.2\" y=\"143.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"73.2\" y=\"82.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"73.2\" y=\"203.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"73.2\" y=\"263.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"73.2\" y=\"319\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"384.7\" y=\"143.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"384.7\" y=\"82.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"384.7\" y=\"203.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"384.7\" y=\"263.7\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<rect x=\"384.7\" y=\"319\" width=\"195.2\" height=\"20\"></rect>\r\n\t\t<path d=\"M0-0.6v7.5v7.5v411.8v14.4v0.6h653v-5v-10V14.4V2.5v-3.1H0z M638,426.2H15V14.4h623V426.2z\"></path>\r\n\t</svg>\r\n</template>\r\n","<script setup>\r\nimport { computed } from 'vue'\r\nimport { useWindowSize } from '@vueuse/core'\r\n\r\nimport SingleColumn from '../../icons/SingleColumn.vue'\r\nimport DoubleColumn from '../../icons/DoubleColumn.vue'\r\n\r\nimport useReaderSettings from '../../../composables/useReaderSettings'\r\nconst { columns, setColumns } = useReaderSettings\r\nconst { width } = useWindowSize()\r\n\r\nconst isSafari = computed(() => {\r\n\tconst ua = navigator.userAgent.toLowerCase()\r\n\treturn ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div id=\"columns-menu\" class=\"w-full hidden md:grid grid-cols-3 gap-2 mt-3\">\r\n\t\t<button\r\n\t\t\tid=\"single-column-button\"\r\n\t\t\tclass=\"col-span-1 text-primary text-center cursor-pointer py-3 rounded-sm border\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'border-gray-300': columns !== 'single',\r\n\t\t\t\t'bg-primary-extralight border-2 border-primary': columns === 'single',\r\n\t\t\t\t'opacity-30 cursor-default': isSafari\r\n\t\t\t}\"\r\n\t\t\t@click.prevent=\"!isSafari ? setColumns('single') : null\"\r\n\t\t\taria-label=\"Coluna única\"\r\n\t\t\t:title=\"isSafari ? 'O navegador Safari não aceita visualização de coluna única.' : 'Coluna única'\"\r\n\t\t>\r\n\t\t\t<SingleColumn class=\"mx-auto h-10 opacity-75\" />\r\n\t\t</button>\r\n\r\n\t\t<button\r\n\t\t\tid=\"double-column-button\"\r\n\t\t\tclass=\"col-span-2 text-primary text-center cursor-pointer py-3 rounded-sm border\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'border-gray-300': columns !== 'double',\r\n\t\t\t\t'bg-primary-extralight border-2 border-primary': columns === 'double',\r\n\t\t\t\t'opacity-30': width < 1024\r\n\t\t\t}\"\r\n\t\t\t@click.prevent=\"width >= 1024 && setColumns('double')\"\r\n\t\t\taria-label=\"Coluna dupla\"\r\n\t\t\ttitle=\"Coluna dupla\"\r\n\t\t>\r\n\t\t\t<DoubleColumn name=\"DoubleColumn\" class=\"mx-auto h-10 divide-opacity-75\" />\r\n\t\t</button>\r\n\t</div>\r\n</template>\r\n","<script setup>\r\nimport useReaderSettings from '../../../composables/useReaderSettings'\r\nconst { textFont, fontsOptions, setTextFont } = useReaderSettings\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div id=\"font-family-menu\" class=\"w-full grid grid-cols-4 gap-2 my-3\">\r\n\t\t<button v-for=\"font in fontsOptions\" :key=\"font.name\" @click.prevent=\"setTextFont(font.name)\"\r\n\t\t\tclass=\"font-light text-lg text-primary tracking-wide border border-urucum w-full h-10 flex justify-center items-center\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'bg-primary-extralight border-2 border-primary': textFont === font.name\r\n\t\t\t}\" :style=\"`font-family: ${font.name}`\" :title=\"font.label ?? font.name\">\r\n\t\t\tFf\r\n\t\t</button>\r\n\t</div>\r\n</template>\r\n","<script setup>\r\nimport useReaderSettings from '../../../composables/useReaderSettings'\r\nconst { fontSize, setFontSize } = useReaderSettings\r\n\r\n</script>\r\n\r\n<template>\r\n\t<button id=\"fontsize-add-button\" @click.prevent=\"setFontSize(fontSize + 1)\"\r\n\t\tclass=\"font-light text-base border border-urucum w-full h-10 flex justify-center items-center\">\r\n\t\t+ A\r\n\t</button>\r\n\r\n\t<button id=\"fontsize-subtr-button\" @click.prevent=\"setFontSize(fontSize - 1)\"\r\n\t\tclass=\"font-light text-base border border-urucum w-full h-10 flex justify-center items-center\">\r\n\t\t- A\r\n\t</button>\r\n</template>\r\n","<template>\r\n \t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"></path>\r\n\t</svg>\r\n</template>\r\n","<template>\r\n \t<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"></path>\r\n\t</svg>\r\n</template>\r\n","<script setup>\r\nimport IconSun from '../../icons/Sun.vue'\r\nimport IconMoon from '../../icons/Moon.vue'\r\n\r\nimport useReaderSettings from '../../../composables/useReaderSettings'\r\nconst { mode, setMode } = useReaderSettings\r\n\r\n</script>\r\n\r\n<template>\r\n\t<button id=\"lightmode-button\" @click.prevent=\"setMode('light')\"\r\n\t\ttitle=\"Leitura diurna\"\r\n\t\tclass=\"font-light text-base border w-full h-10 flex justify-center items-center\"\r\n\t\t:class=\"{\r\n\t\t\t'bg-primary-extralight text-primary border-2 border-primary': mode === 'light'\r\n\t\t}\">\r\n\t\t<IconSun class=\"w-5 h-5\" />\r\n\t</button>\r\n\r\n\t<button id=\"darkmode-button\" @click.prevent=\"setMode('dark')\"\r\n\t\ttitle=\"Leitura noturna\"\r\n\t\tclass=\"font-light text-base border w-full h-10 flex justify-center items-center\"\r\n\t\t:class=\"{\r\n\t\t\t'bg-primary-extralight text-primary border-2 border-primary': mode === 'dark'\r\n\t\t}\">\r\n\t\t<IconMoon class=\"w-5 h-5\" />\r\n\t</button>\r\n</template>\r\n","<script setup>\r\nimport useReadingProgress from '../../../composables/useReadingProgress'\r\n\r\nconst { enabled, setEnabled } = useReadingProgress\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"w-full border-t border-areia mt-5 pt-5\">\r\n\t\t<button\r\n\t\t\tid=\"reading-progress-button\"\r\n\t\t\tclass=\"w-full flex items-center justify-between py-2 px-1 text-left\"\r\n\t\t\ttype=\"button\"\r\n\t\t\trole=\"switch\"\r\n\t\t\t:aria-checked=\"enabled\"\r\n\t\t\t@click.prevent=\"setEnabled(!enabled)\"\r\n\t\t>\r\n\t\t\t<span>\r\n\t\t\t\t<span class=\"block text-primary lowercase\">Retomar leitura</span>\r\n\t\t\t\t<span class=\"block text-xs text-gray-500 mt-1\">Continuar de onde parou</span>\r\n\t\t\t</span>\r\n\r\n\t\t\t<span\r\n\t\t\t\tclass=\"relative inline-flex h-6 w-11 flex-shrink-0 rounded-full border-2 border-transparent transition-colors\"\r\n\t\t\t\t:class=\"enabled ? 'bg-primary' : 'bg-gray-300'\"\r\n\t\t\t\taria-hidden=\"true\"\r\n\t\t\t>\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"inline-block h-5 w-5 rounded-full bg-white shadow transition-transform\"\r\n\t\t\t\t\t:class=\"enabled ? 'translate-x-5' : 'translate-x-0'\"\r\n\t\t\t\t></span>\r\n\t\t\t</span>\r\n\t\t</button>\r\n\t</div>\r\n</template>\r\n","<script setup>\r\nimport IconEye from '../../icons/Eye.vue'\r\nimport IconFootnote from '../../icons/Footnote.vue'\r\n\r\nimport OptionsColumns from './OptionsColumns.vue';\r\nimport OptionsFontFamily from './OptionsFontFamily.vue';\r\nimport OptionsFontSize from './OptionsFontSize.vue';\r\nimport OptionsColor from './OptionsColor.vue'\r\nimport OptionsReadingProgress from './OptionsReadingProgress.vue'\r\n\r\nimport useFootnotes from '../../../composables/useFootnotes'\r\nimport useReadingProgress from '../../../composables/useReadingProgress'\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"absolute top-14 py-4 px-3 shadow-lg w-60 md:w-104\r\n\t\t\ttext-areia -right-2 md:right-16 z-10 bg-white\r\n\t\t\"\r\n\t\trole=\"Opções\"\r\n\t\taria-orientation=\"vertical\"\r\n\t\taria-labelledby=\"options-menu\"\r\n\t>\r\n\t\t<div>\r\n\r\n\t\t\t<slot name=\"optionsTop\" />\r\n\r\n\t\t\t<div id=\"footnotes-button\">\r\n\t\t\t\t<button @click.prevent=\"useFootnotes.setShowFootnotes(true)\"\r\n\t\t\t\t\tclass=\"w-full flex justify-center items-center py-3 lowercase\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<IconFootnote class=\"w-6 h-6\" />\r\n\t\t\t\t\t<span class=\"ml-4\">Notas de rodapé</span>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<div class=\"w-full border-b border-areia my-3\"></div>\r\n\t\t\t</div>\r\n\r\n\r\n\t\t\t<div class=\"w-full flex justify-center items-center py-3 lowercase\"\r\n\t\t\t\tid=\"visualize-title\"\r\n\t\t\t>\r\n\t\t\t\t<IconEye class=\"w-6 h-6\" />\r\n\t\t\t\t<span class=\"ml-4\">Visualização</span>\r\n\t\t\t</div>\r\n\r\n\t\t\t<OptionsColumns />\r\n\t\t\t<OptionsFontFamily />\r\n\r\n\t\t\t<div class=\"w-full grid grid-cols-4 gap-2 my-3\">\r\n\r\n\t\t\t\t<OptionsFontSize />\r\n\t\t\t\t<OptionsColor />\r\n\t\t\t</div>\r\n\r\n\t\t\t<OptionsReadingProgress v-if=\"useReadingProgress.available.value\" />\r\n\r\n\t\t\t<div class=\"hidden w-full border-b border-areia my-8\"></div>\r\n\r\n\t\t\t<slot name=\"optionsBottom\" />\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n","<script setup>\r\nimport { ref, inject } from 'vue'\nimport { onClickOutside, onKeyStroke, useFullscreen } from '@vueuse/core'\r\n\r\nimport useReaderSettings from '../../../composables/useReaderSettings'\r\n\r\nimport IconThreeDots from '../../icons/ThreeDots.vue'\r\nimport IconClose from '../../icons/Close.vue'\r\nimport IconExpand from '../../icons/Expand.vue'\r\nimport OptionsDropdown from './OptionsDropdown.vue'\nimport { publicEventKey } from '../../../publicApi'\n\r\nconst show = ref(false)\r\nconst button = ref(null)\r\n\r\nconst publicEvent = inject(publicEventKey, () => {})\nconst toggleSummary = () => {\n\tshow.value = !show.value\n\tpublicEvent('options-toggle', { open: show.value })\n}\nconst hide = () => {\r\n\tif (show.value && !useReaderSettings.blocked.value) {\n\t\tshow.value = false\n\t\tpublicEvent('options-toggle', { open: false })\n\t}\r\n}\r\n\r\nonClickOutside(button, () => hide())\r\nonKeyStroke('Escape', () => hide())\r\n\r\nconst { toggle: toggleFullScreen } = useFullscreen()\r\n</script>\r\n\r\n<template>\r\n\t<div id=\"options-menu\" ref=\"button\" class=\"relative\">\r\n\t\t<div class=\"flex\">\r\n\t\t\t<button @click.prevent=\"toggleSummary()\"\r\n\t\t\t\tclass=\"border p-3 shadow flex items-center border-white text-white\"\r\n\t\t\t\tid=\"options-button\" aria-label=\"Opções\" aria-haspopup=\"true\" :aria-expanded=\"show\"\n\t\t\t>\r\n\t\t\t\t<span class=\"block mr-3\">\r\n\t\t\t\t\tOpções\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<IconClose v-if=\"show\" class=\"w-6 h-6\" />\r\n\t\t\t\t<IconThreeDots v-else class=\"w-6 h-6\" />\r\n\t\t\t</button>\r\n\r\n\t\t\t<button @click.prevent=\"toggleFullScreen()\"\r\n\t\t\t\tclass=\"hidden md:flex items-center border p-3 shadow ml-3 border-white text-white\"\r\n\t\t\t>\r\n\t\t\t\t<IconExpand class=\"w-6 h-6\" />\r\n\t\t\t</button>\r\n\t\t</div>\r\n\r\n\t\t<transition enter-active-class=\"transition ease-out duration-100 transform\" enter-class=\"opacity-0 scale-95\"\r\n\t\t\tenter-to-class=\"opacity-100 scale-100\" leave-active-class=\"transition ease-in duration-75 transform\"\r\n\t\t\tleave-class=\"opacity-100 scale-100\" leave-to-class=\"opacity-0 scale-95\"\r\n\t\t>\r\n\t\t\t<OptionsDropdown v-show=\"show\">\r\n\t\t\t\t<template #optionsTop>\r\n\t\t\t\t\t<slot name=\"optionsTop\"/>\r\n\t\t\t\t</template>\r\n\t\t\t\t<template #optionsBottom>\r\n\t\t\t\t\t<slot name=\"optionsBottom\"/>\r\n\t\t\t\t</template>\r\n\t\t\t</OptionsDropdown>\r\n\t\t</transition>\r\n\t</div>\r\n</template>\r\n\r\n<style>\r\n</style>\r\n","<script setup>\nimport { inject, nextTick, watch } from 'vue'\nimport { searchKey } from '../../composables/useSearch'\nimport IconClose from '../icons/Close.vue'\n\nconst search = inject(searchKey)\nconst { enabled, open, query, input, button, total, status, pending, panel, results, active } = search\n\nwatch(panel, async value => {\n\tif (value && open.value) {\n\t\tawait nextTick()\n\t\tinput.value?.focus({ preventScroll: true })\n\t}\n})\n\nwatch(active, async () => {\n\tawait nextTick()\n\tif (panel.value)\n\t\tinput.value?.getRootNode().querySelector('.search-result[aria-current=\"true\"]')\n\t\t\t?.scrollIntoView({ block: 'nearest' })\n})\n\nasync function selectResult(index) {\n\tsearch.navigate(index)\n\tawait nextTick()\n\tinput.value?.getRootNode().querySelector('.search-result[aria-current=\"true\"]')\n\t\t?.focus({ preventScroll: true })\n}\n\nfunction clearQuery() {\n\tquery.value = ''\n\tinput.value?.focus({ preventScroll: true })\n}\n</script>\n\n<template>\n\t<div v-if=\"enabled\" id=\"search-menu\">\n\t\t<button ref=\"button\" id=\"search-button\" type=\"button\"\n\t\t\tclass=\"search-icon-button border p-3 shadow flex items-center border-white text-white\"\n\t\t\taria-label=\"Buscar no texto\" title=\"Buscar no texto (Ctrl+F)\"\n\t\t\taria-controls=\"search-dropdown\" :aria-expanded=\"open\"\n\t\t\t@click=\"open ? search.close() : search.show()\"\n\t\t>\n\t\t\t<svg class=\"w-6 h-6\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" aria-hidden=\"true\">\n\t\t\t\t<circle cx=\"10.5\" cy=\"10.5\" r=\"6.5\" />\n\t\t\t\t<path d=\"m16 16 5 5\" />\n\t\t\t</svg>\n\t\t</button>\n\t\t<form v-show=\"open\" id=\"search-dropdown\" role=\"search\" aria-label=\"Buscar no texto\"\n\t\t\t:class=\"{ 'search-panel': panel }\"\n\t\t\t@submit.prevent=\"search.step(1)\" @wheel.stop @keydown.stop\n\t\t\t@keydown.esc.prevent=\"search.close()\"\n\t\t>\n\t\t\t<h2 v-if=\"panel\" class=\"search-panel-title\">Resultados da busca</h2>\n\t\t\t<div class=\"search-input-row\">\n\t\t\t\t<div class=\"search-input-control\">\n\t\t\t\t\t<input id=\"search-input\" ref=\"input\" v-model=\"query\" type=\"search\"\n\t\t\t\t\t\tplaceholder=\"Palavra ou expressão\" autocomplete=\"off\" spellcheck=\"false\"\n\t\t\t\t\t\taria-label=\"Buscar no texto\" aria-describedby=\"search-status\"\n\t\t\t\t\t\t@keydown.enter.prevent=\"!$event.isComposing && search.step($event.shiftKey ? -1 : 1)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button v-if=\"query\" id=\"search-clear-button\" class=\"search-icon-button\" type=\"button\"\n\t\t\t\t\t\taria-label=\"Limpar busca\" title=\"Limpar busca\" @click=\"clearQuery\">\n\t\t\t\t\t\t<IconClose class=\"w-4 h-4\" aria-hidden=\"true\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<button class=\"search-icon-button\" type=\"button\" aria-label=\"Fechar busca\" title=\"Fechar (Esc)\" @click=\"search.close()\">\n\t\t\t\t\t<IconClose class=\"w-6 h-6\" aria-hidden=\"true\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"search-results-row\">\n\t\t\t\t<span id=\"search-status\" role=\"status\" aria-live=\"polite\">{{ status }}</span>\n\t\t\t\t<button class=\"search-icon-button\" type=\"button\" aria-label=\"Ocorrência anterior\" title=\"Anterior (Shift+Enter)\"\n\t\t\t\t\t:disabled=\"!total || pending\" @click=\"search.step(-1)\">\n\t\t\t\t\t<svg class=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n\t\t\t\t\t\t<path d=\"m6 14 6-6 6 6\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t\t<button class=\"search-icon-button\" type=\"button\" aria-label=\"Próxima ocorrência\" title=\"Próxima (Enter)\"\n\t\t\t\t\t:disabled=\"!total || pending\" @click=\"search.step(1)\">\n\t\t\t\t\t<svg class=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n\t\t\t\t\t\t<path d=\"m6 10 6 6 6-6\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<button id=\"search-view-button\" class=\"search-icon-button\" type=\"button\"\n\t\t\t\t:aria-expanded=\"panel\" aria-controls=\"search-result-list\" @click=\"panel = !panel\">\n\t\t\t\t{{ panel ? 'Usar busca compacta' : 'Ver trechos' }}\n\t\t\t</button>\n\t\t\t<ol v-if=\"panel\" id=\"search-result-list\" :aria-busy=\"pending\" aria-label=\"Trechos encontrados\">\n\t\t\t\t<li v-for=\"(result, index) in results\" :key=\"`${result.source}:${result.id}`\">\n\t\t\t\t\t<button type=\"button\" class=\"search-result\" :aria-current=\"active === index ? 'true' : undefined\"\n\t\t\t\t\t\t@click=\"selectResult(index)\"\n\t\t\t\t\t\t@keydown.down.prevent.stop=\"selectResult(index + 1)\"\n\t\t\t\t\t\t@keydown.up.prevent.stop=\"selectResult(index - 1)\">\n\t\t\t\t\t\t<span class=\"search-result-location\">{{ result.source === 'local'\n\t\t\t\t\t\t\t? `Neste capítulo${result.page ? ` · Página ${result.page}` : ''}`\n\t\t\t\t\t\t\t: result.chapterTitle || 'Outro capítulo' }}</span>\n\t\t\t\t\t\t<span class=\"search-result-excerpt\">{{ result.before }}<mark>{{ result.match }}</mark>{{ result.after }}</span>\n\t\t\t\t\t</button>\n\t\t\t\t</li>\n\t\t\t</ol>\n\t\t</form>\n\t</div>\n</template>\n","<script setup>\nimport { inject } from 'vue'\nimport { searchKey } from '../../composables/useSearch'\nimport SummaryButton from './SummaryButton/SummaryButton.vue';\r\nimport OptionsButton from './OptionsButton/OptionsButton.vue';\nimport SearchButton from './SearchButton.vue'\nconst search = inject(searchKey)\n</script>\r\n\r\n<template>\r\n\t<header id=\"component-header\" class=\"bg-primary flex justify-between items-center p-4\"\n\t\t:class=\"{ 'search-enabled': search.enabled.value }\">\n\t\t<summary-button>\r\n\t\t\t<template #summaryTop>\r\n\t\t\t\t<slot name=\"summaryTop\" />\r\n\t\t\t</template>\r\n\t\t\t<template #summaryBottom>\r\n\t\t\t\t<slot name=\"summaryBottom\" />\r\n\t\t\t</template>\r\n\t\t</summary-button>\r\n\r\n\t\t<div id=\"header-titles\">\r\n\t\t\t<slot name=\"header\" />\r\n\t\t</div>\r\n\r\n\t\t<div class=\"header-actions\">\n\t\t\t<SearchButton />\n\t\t\t<options-button>\n\t\t\t\t<template #optionsTop>\n\t\t\t\t\t<slot name=\"optionsTop\" />\n\t\t\t\t</template>\n\t\t\t\t<template #optionsBottom>\n\t\t\t\t\t<slot name=\"optionsBottom\" />\n\t\t\t\t</template>\n\t\t\t</options-button>\n\t\t</div>\n\t</header>\r\n</template>\r\n","<script setup>\r\nimport { defineProps, onMounted, ref } from 'vue'\r\n\r\nimport useTextContent from '../composables/useTextContent'\r\nconst { content, initContent } = useTextContent\r\n\r\nconst props = defineProps({\r\n\tbookContent: String\r\n})\r\n\r\nconst contentWrapper = ref(null)\r\n\r\nonMounted(() => {\r\n\tinitContent(props.bookContent, contentWrapper)\r\n})\r\n</script>\r\n\r\n<template>\r\n\t<div ref=\"contentWrapper\">\r\n\t\t<div v-if=\"content\" v-html=\"content\"></div>\r\n\t\t<slot v-else name=\"content\"></slot>\r\n\t</div>\r\n</template>\r\n","<script>\r\nexport default {\r\n\tname: \"NavPrev\",\r\n\r\n\tprops: {\r\n\t\ttarget: String,\r\n\t},\r\n\r\n\tcomputed: {\r\n\t\ttype() {\r\n\t\t\treturn 'chapter'\r\n\t\t},\r\n\t}\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<button @click.prevent=\"$emit('clicked')\" class=\"[ viewer-nav ]\"\r\n\t\t:class=\"type === 'cover' ? 'text-white' : 'text-gray-dark'\">\r\n\r\n\t\t<svg v-if=\"target === 'prev'\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"[ viewer-nav-icon nav-prev ] arrow-narrow-left\">\r\n\t\t\t<path fill-rule=\"evenodd\"\r\n\t\t\t\td=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\r\n\t\t\t\tclip-rule=\"evenodd\"></path>\r\n\t\t</svg>\r\n\r\n\t\t<svg v-if=\"target === 'next'\" data-v-ef9c31bc=\"\" viewBox=\"0 0 20 20\" fill=\"currentColor\"\r\n\t\t\tclass=\"[ viewer-nav-icon nav-next ] right-0 arrow-narrow-right\">\r\n\t\t\t<path fill-rule=\"evenodd\"\r\n\t\t\t\td=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\r\n\t\t\t\tclip-rule=\"evenodd\"></path>\r\n\t\t</svg>\r\n\t</button>\r\n</template>\r\n","<script setup>\r\nimport NavigationButton from './NavigationButton.vue'\r\nimport usePagination from '../composables/usePagination'\r\nconst { next, prev } = usePagination\r\n</script>\r\n\r\n<template>\r\n\t<div id=\"engine\" class=\"pt-10 transition-colors\">\r\n\t\t<div class=\"engineWrapper overflow-hidden\">\r\n\t\t\t<NavigationButton target=\"prev\" @clicked=\"prev(false, 'previous-button')\" />\n\t\t\t<slot></slot>\r\n\t\t\t<NavigationButton target=\"next\" @clicked=\"next(false, 'next-button')\" />\n\t\t</div>\r\n\t</div>\r\n</template>\r\n","<script setup>\nimport { ref } from 'vue'\nimport { usePointerSwipe, useWindowSize } from '@vueuse/core'\n\nimport usePagination from '../composables/usePagination'\nimport useReaderSettings from '../composables/useReaderSettings'\n\nconst { columns } = useReaderSettings\nconst { currentPage, changeSource } = usePagination\n\nconst el = ref(null)\n\nconst { width } = useWindowSize()\nconst { distanceX } = usePointerSwipe(el, {\n\tonSwipeEnd() {\n\t\tif (width.value < 600) {\n\t\t\tif (distanceX.value > 100) {\n\t\t\t\tusePagination.next(false, 'swipe')\n\t\t\t}\n\t\t\tif (distanceX.value < -100) {\n\t\t\t\tusePagination.prev(false, 'swipe')\n\t\t\t}\n\t\t}\n\t}\n})\n\n</script>\n\n<template>\n\t<div ref=\"el\" class=\"columnsArea\" :class=\"{ 'search-navigation': changeSource === 'search' }\"\n\t\t:style=\"currentPage > 1 ? `transform: translateX(-${100 * (currentPage - 1)}%)` : ''\">\n\t\t<div class=\"[ typeArea ] h-full relative\n\t\t\ttransition-opacity duration-100 opacity-100 px-2 md:px-24\n\t\t\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t</div>\n</template>\n","<script setup>\r\nimport { onKeyStroke } from '@vueuse/core'\r\n\r\nimport useReaderSettings from '../composables/useReaderSettings'\r\nimport useReferences from '../composables/useReferences'\r\n\r\nconst { reference, setHighlightedReference } = useReferences\r\n\r\nfunction closeRef() {\r\n\tsetHighlightedReference(null)\r\n}\r\n\r\nonKeyStroke('Escape', () => {\r\n\tif (!useReaderSettings.blocked.value) {\r\n\t\tsetHighlightedReference(null)\r\n\t}\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n\t<transition enter-active-class=\"transition ease-out duration-200\" enter-from-class=\"transform opacity-0 scale-95\"\r\n\t\tenter-to-class=\"transform opacity-100 scale-100\" leave-active-class=\"transition ease-in duration-200\"\r\n\t\tleave-from-class=\"transform opacity-100 scale-100\" leave-to-class=\"transform opacity-0 scale-95\">\r\n\t\t<div v-if=\"reference\" tabindex=\"0\" class=\"[ reference-popup ] bg-gray-800 text-white fixed z-40 bottom-0 md:bottom-14 right-0 md:right-3\r\n\t\t\t\trounded flex justify-between\r\n\t\t\t\tp-4 shadow w-full md:w-2/5\r\n\t\t\t\">\r\n\t\t\t<p class=\"w-4/5\" v-html=\"reference.ref\"></p>\r\n\r\n\t\t\t<div class=\"mt-3 flex self-end\">\r\n\t\t\t\t<button @click.prevent=\"closeRef()\" class=\"button button-negative\">OK</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</transition>\r\n</template>\r\n","<script setup>\n// Native range input replacing @vueform/slider (see VueformPageSlider.vue).\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\nimport usePagination from '../composables/usePagination'\nconst { totalPages, currentPage, set } = usePagination\n\n// While dragging, the thumb follows the pointer freely and the page is rounded,\n// like the previous continuous slider; at rest it snaps to whole pages, which\n// also keeps arrow keys moving one page at a time.\nconst dragPosition = ref(null)\nconst dragging = computed(() => dragPosition.value !== null)\nconst value = computed(() => dragPosition.value ?? currentPage.value)\nconst progress = computed(() => totalPages.value > 1\n\t? Math.min(1, Math.max(0, (value.value - 1) / (totalPages.value - 1)))\n\t: 0)\nconst label = computed(() => `${currentPage.value} de ${totalPages.value}`)\n\nfunction startDrag(event) {\n\tif (event.button !== 0)\n\t\treturn\n\t// Applied before the browser positions the thumb for this pointer.\n\tevent.currentTarget.step = 'any'\n\tdragPosition.value = currentPage.value\n\twindow.addEventListener('pointerup', endDrag)\n\twindow.addEventListener('pointercancel', endDrag)\n}\n\nfunction endDrag() {\n\twindow.removeEventListener('pointerup', endDrag)\n\twindow.removeEventListener('pointercancel', endDrag)\n\tdragPosition.value = null\n}\n\nfunction onInput(event) {\n\tconst position = Number(event.target.value)\n\tif (dragging.value)\n\t\tdragPosition.value = position\n\tset(Math.round(position), 'slider')\n}\n\nonBeforeUnmount(endDrag)\n</script>\n\n<template>\n\t<div class=\"page-slider\" :class=\"{ 'page-slider-dragging': dragging }\"\n\t\t:style=\"{ '--slider-progress': progress }\">\n\t\t<div class=\"page-slider-connect\"></div>\n\t\t<input type=\"range\" class=\"page-slider-input\"\n\t\t\tmin=\"1\"\n\t\t\t:max=\"totalPages\"\n\t\t\t:step=\"dragging ? 'any' : 1\"\n\t\t\t:value=\"value\"\n\t\t\taria-label=\"Página\"\n\t\t\t:aria-valuetext=\"label\"\n\t\t\t@pointerdown=\"startDrag\"\n\t\t\t@input=\"onInput\"\n\t\t>\n\t\t<div v-if=\"dragging\" class=\"page-slider-tooltip\" aria-hidden=\"true\">{{ label }}</div>\n\t</div>\n</template>\n","<script setup>\n// The previous @vueform/slider version lives in VueformPageSlider.vue.\nimport PageSlider from './PageSlider.vue'\n</script>\n\n<template>\n\t<div class=\"py-2 px-10 text-gray-700 dark:text-white\">\n\t\t<slot name=\"footer\">\n\t\t\t<p>&nbsp;</p>\n\t\t</slot>\n\n\t\t<PageSlider class=\"w-full\" />\n\t</div>\n</template>\n","<template>\r\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\r\n\t</svg>\r\n</template>\r\n","<script setup>\r\nimport { computed, onMounted, watch, ref } from 'vue'\r\nimport { onKeyStroke } from '@vueuse/core'\r\n\r\nimport useFootnotes from '../composables/useFootnotes'\r\nimport useReaderSettings from '../composables/useReaderSettings'\r\n\r\nimport IconClose from '../components/icons/Close.vue'\r\nimport IconNotes from '../components/icons/Notes.vue'\r\n\r\nconst show = computed(() => useFootnotes.footnote.value)\r\nconst footnote = computed(() => useFootnotes.footnote.value)\r\nconst showFootnotes = computed(() => useFootnotes.showFootnotes.value)\r\nconst footnotes = computed(() => useFootnotes.footnotes.value)\r\n\r\nconst oldBlockedValue = ref(null)\r\nconst footnoteList = ref(null)\r\n\r\nfunction hideAside() {\r\n\tuseFootnotes.setHighlightedFootnote(null)\r\n\tuseFootnotes.setShowFootnotes(false)\r\n}\r\n\r\nonKeyStroke('Escape', () => {\r\n\tif (footnote.value || showFootnotes.value) {\r\n\t\thideAside()\r\n\t}\r\n})\r\n\r\nwatch(\r\n\t[footnote, showFootnotes],\r\n\t() => {\r\n\t\tif (footnote.value || showFootnotes.value) {\r\n\t\t\tif (useReaderSettings.blocked.value === false) {\r\n\t\t\t\toldBlockedValue.value = useReaderSettings.blocked.value\r\n\t\t\t}\r\n\t\t\tuseReaderSettings.setBlocked(true)\r\n\r\n\t\t} else {\r\n\t\t\tif (oldBlockedValue.value === false) {\r\n\t\t\t\tuseReaderSettings.setBlocked(oldBlockedValue.value)\r\n\t\t\t}\r\n\t\t\toldBlockedValue.value = null\r\n\t\t}\r\n\r\n\t\tif (footnote.value) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst element = footnoteList.value.querySelector(`#${footnote.value.id}`)\r\n\t\t\t\telement.scrollIntoView()\r\n\t\t\t\telement.focus()\r\n\t\t\t}, 50)\r\n\t\t}\r\n\t}\r\n)\r\n\r\n</script>\r\n\r\n<template>\r\n\t<transition name=\"width\">\r\n\t\t<div v-if=\"show || showFootnotes\" id=\"asidebar\"\r\n\t\t\tclass=\"absolute top-0 right-0 w-96 md:w-[40em] flex-shrink-0 h-screen overflow-auto overflow-x-hidden z-20 shadow-2xl\"\r\n\t\t>\r\n\t\t\t<button @click.prevent=\"hideAside()\" class=\"fixed top-4 right-8 z-20\">\r\n\t\t\t\t<IconClose class=\"w-6 h-6 text-white\" />\r\n\t\t\t</button>\r\n\r\n\t\t\t<div class=\"w-full p-4\">\r\n\t\t\t\t<header class=\"text-areia py-4 pl-4\">\r\n\t\t\t\t\t<div class=\"flex items-center mb-6\">\r\n\t\t\t\t\t\t<IconNotes class=\"w-8 h-8\" />\r\n\t\t\t\t\t\t<span class=\"ml-4\">\r\n\r\n\t\t\t\t\t\t\tNotas de rodapé\r\n\t\t\t\t\t\t\t<span class=\"ml-10\">\r\n\t\t\t\t\t\t\t\t{{ footnotes.length }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</header>\r\n\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<ul ref=\"footnoteList\">\r\n\t\t\t\t\t\t<li v-for=\"(footnoteItem, index) in footnotes\"\r\n\t\t\t\t\t\t\t:key=\"footnoteItem.id\"\r\n\t\t\t\t\t\t\t:id=\"footnoteItem.id\"\r\n\t\t\t\t\t\t\tv-html=\"`<span class='footnote-index'>${index + 1}.</span> ${footnoteItem.text}`\"\r\n\t\t\t\t\t\t\tclass=\"text-left border-b border-b-white/25 last:border-transparent\r\n\t\t\t\t\t\t\t\tp-10 relative\r\n\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\t:class=\"footnote && footnote.id !== footnoteItem.id\r\n\t\t\t\t\t\t\t\t? 'opacity-50'\r\n\t\t\t\t\t\t\t\t: 'opacity-100'\r\n\t\t\t\t\t\t\t\"></li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</section>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</transition>\r\n</template>\r\n\r\n\r\n\r\n<style scoped>\r\n.width-enter-active,\r\n.width-leave-active {\r\n\ttransition: width .5s;\r\n}\r\n\r\n.width-enter-active>* {\r\n\ttransition-property: opacity;\r\n\ttransition-duration: .2s;\r\n\ttransition-delay: .3s;\r\n}\r\n\r\n.width-leave-active>* {\r\n\ttransition: opacity .25s;\r\n}\r\n\r\n.width-enter,\r\n.width-leave-to {\r\n\twidth: 0;\r\n}\r\n</style>\r\n","<script setup>\nimport { ref, onMounted, onBeforeUnmount, defineProps, nextTick, watch, provide } from 'vue'\nimport { useWindowSize, watchDebounced } from '@vueuse/core'\n\nimport HeaderSlot from './components/HeaderSlot/HeaderSlot.vue'\nimport BookContent from './components/BookContent.vue'\nimport EngineWrapper from './components/EngineWrapper.vue'\nimport ReaderWrapper from './components/ReaderWrapper.vue'\nimport ReferencePopup from './components/ReferencePopup.vue'\nimport FooterSlot from './components/FooterSlot.vue'\nimport FootnotesAside from './components/FootnotesAside.vue'\n\nimport usePagination from './composables/usePagination'\nimport useEstimatePages from './composables/useEstimatePages'\nimport useTextContent from './composables/useTextContent'\nimport useReaderSettings from './composables/useReaderSettings'\nimport useStyles from './composables/useStyles'\nimport useBrowser from './composables/useBrowser'\nimport useReadingProgress from './composables/useReadingProgress'\nimport useFootnotes from './composables/useFootnotes'\nimport useReferences from './composables/useReferences'\nimport { publicEventKey } from './publicApi'\nimport useSearch, { searchKey } from './composables/useSearch'\n\nconst props = defineProps({\n\tbookTitle: String,\n\tbookContent: String,\n\treaderSettings: String,\n\treaderBlocked: Boolean,\n\trootClass: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\tcssFile: String,\n\tcssString: String\n})\n\nconst { baseFont, bookTitle, chapterTitle, textFont, fontSize, columns, setColumns, mode } = useReaderSettings\nconst { currentPage, totalPages, changeSource } = usePagination\nconst { content, listenToClicks } = useTextContent\nconst { width, height } = useWindowSize()\n\nconst readerComponent = ref(null)\nconst contentArea = ref(null)\nconst rootComponent = ref(null)\nconst search = useSearch(rootComponent, readerComponent, contentArea, dispatchPublicEvent)\nprovide(searchKey, search)\nlet paginationRevision = 0\nlet hostElement = null\n\nfunction getState() {\n\tconst currentChapter = useTextContent.context.value.chapter\n\treturn {\n\t\tpagination: {\n\t\t\tcurrentPage: currentPage.value,\n\t\t\ttotalPages: totalPages.value,\n\t\t\tprogress: totalPages.value > 1\n\t\t\t\t? (currentPage.value - 1) / (totalPages.value - 1)\n\t\t\t\t: 0\n\t\t},\n\t\tsettings: {\n\t\t\tbaseFont: baseFont.value,\n\t\t\ttextFont: textFont.value,\n\t\t\tfontSize: fontSize.value,\n\t\t\tcolumns: columns.value,\n\t\t\tmode: mode.value,\n\t\t\tblocked: useReaderSettings.blocked.value,\n\t\t\tsearchEnabled: search.enabled.value,\n\t\t\treadingProgressEnabled: useReaderSettings.readingProgressEnabled.value\n\t\t},\n\t\tcontent: {\n\t\t\tbookTitle: props.bookTitle || bookTitle.value,\n\t\t\tchapterTitle: chapterTitle.value,\n\t\t\tchapter: currentChapter ? { ...currentChapter } : null\n\t\t}\n\t}\n}\n\nfunction dispatchPublicEvent(name, detail = {}) {\n\tif (!hostElement)\n\t\treturn\n\n\thostElement.dispatchEvent(new CustomEvent(`paginar:${name}`, {\n\t\tbubbles: true,\n\t\tcomposed: true,\n\t\tdetail: { ...detail, state: getState() }\n\t}))\n}\n\nprovide(publicEventKey, dispatchPublicEvent)\n\nfunction syncReadingProgress(allowRestore = false) {\n\tconst targetPage = useReadingProgress.sync(\n\t\tcurrentPage.value,\n\t\ttotalPages.value,\n\t\tallowRestore\n\t)\n\tif (targetPage)\n\t\tusePagination.set(targetPage, 'reading-progress')\n}\n\nfunction estimatePagesAndSyncProgress() {\n\tconst revision = ++paginationRevision\n\tconst previousPage = currentPage.value\n\tconst previousTotal = totalPages.value\n\tuseReadingProgress.suspend()\n\tconst nextTotal = useEstimatePages.estimate(readerComponent, contentArea)\n\n\tnextTick(() => requestAnimationFrame(() => {\n\t\tif (revision !== paginationRevision)\n\t\t\treturn\n\n\t\tconst targetPage = useReadingProgress.repaginate(\n\t\t\tpreviousPage,\n\t\t\tpreviousTotal,\n\t\t\tnextTotal\n\t\t)\n\n\t\tif (targetPage)\n\t\t\tusePagination.set(targetPage, 'repagination')\n\t\telse\n\t\t\tsyncReadingProgress(true)\n\n\t\tuseReadingProgress.resume()\n\t\tuseReadingProgress.save(currentPage.value, nextTotal)\n\t\tsearch.measure()\n\t}))\n}\n\nfunction saveCurrentReadingProgress() {\n\tuseReadingProgress.save(currentPage.value, totalPages.value)\n}\n\nfunction saveReadingProgressWhenHidden() {\n\tif (document.visibilityState === 'hidden')\n\t\tsaveCurrentReadingProgress()\n}\n\nonMounted(async () => {\n\thostElement = rootComponent.value?.getRootNode()?.host || null\n\tif (hostElement) {\n\t\thostElement.getState = getState\n\t\thostElement.goToPage = page => usePagination.set(page, 'api')\n\t\thostElement.nextPage = () => usePagination.next(false, 'api')\n\t\thostElement.previousPage = () => usePagination.prev(false, 'api')\n\t\thostElement.refresh = () => {\n\t\t\ttry {\n\t\t\t\tconst content = JSON.parse(hostElement.getAttribute('book-content') || 'null')\n\t\t\t\tif (content?.footnotes)\n\t\t\t\t\tuseFootnotes.setFootnotes(content.footnotes)\n\t\t\t\tif (content?.references)\n\t\t\t\t\tuseReferences.setReferences(content.references)\n\t\t\t} catch (error) {\n\t\t\t\t// Keep the existing collections when the attribute cannot be read.\n\t\t\t}\n\t\t\testimatePagesAndSyncProgress()\n\t\t}\n\t\thostElement.search = search.searchText\n\t\thostElement.getSearchState = search.getState\n\t\thostElement.setSearchResults = search.setResults\n\t}\n\tuseReaderSettings.initSettings(props.readerSettings)\n\tsearch.init(props.readerSettings)\n\tuseReadingProgress.init(\n\t\tprops.readerSettings,\n\t\tprops.bookTitle || bookTitle.value\n\t)\n\tusePagination.init(readerComponent, contentArea, estimatePagesAndSyncProgress)\n\trequestAnimationFrame(() => {\n\t\testimatePagesAndSyncProgress()\n\t})\n\tuseStyles.initStyles(props, rootComponent)\n\twindow.addEventListener('pagehide', saveCurrentReadingProgress)\n\tdocument.addEventListener('visibilitychange', saveReadingProgressWhenHidden)\n\n\tif (['string', 'boolean'].includes(typeof props.readerBlocked)) {\n\t\tuseReaderSettings.setBlocked(props.readerBlocked)\n\t}\n\tnextTick(() => requestAnimationFrame(() => dispatchPublicEvent('ready')))\n\n})\n\nonBeforeUnmount(() => {\n\tusePagination.stopObserving()\n\twindow.removeEventListener('pagehide', saveCurrentReadingProgress)\n\tdocument.removeEventListener('visibilitychange', saveReadingProgressWhenHidden)\n\tif (hostElement) {\n\t\tdelete hostElement.getState\n\t\tdelete hostElement.goToPage\n\t\tdelete hostElement.nextPage\n\t\tdelete hostElement.previousPage\n\t\tdelete hostElement.refresh\n\t\tdelete hostElement.search\n\t\tdelete hostElement.getSearchState\n\t\tdelete hostElement.setSearchResults\n\t}\n\thostElement = null\n})\n\nwatch(\n\tprops,\n\t() => {\n\t\tif (props.hasOwnProperty('readerBlocked')) {\n\t\t\tconst readerBlocked = typeof props.readerBlocked === 'boolean'\n\t\t\t\t? props.readerBlocked\n\t\t\t\t: props.readerBlocked === 'true'\n\t\t\tuseReaderSettings.setBlocked(readerBlocked)\n\t\t}\n\t}\n)\n\nwatchDebounced(\n\t[width, height, content, columns, fontSize, textFont],\n\t() => {\n\t\tif (width.value < 1024 && columns.value === 'double')\n\t\t\tsetColumns('single')\n\t\telse {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\testimatePagesAndSyncProgress()\n\t\t\t})\n\t\t}\n\t},\n\t{ debounce: 125, maxWait: 250 }\n)\n\nwatch(\n\tcurrentPage,\n\t(value, previousValue) => {\n\t\tsyncReadingProgress()\n\t\tdispatchPublicEvent('page-change', {\n\t\t\tpage: value,\n\t\t\tpreviousPage: previousValue,\n\t\t\tsource: changeSource.value\n\t\t})\n\t},\n\t{ flush: 'sync' }\n)\n\nwatch(\n\t[baseFont, textFont, fontSize, columns, mode, useReaderSettings.readingProgressEnabled],\n\t(values, previousValues) => {\n\t\tconst names = ['baseFont', 'textFont', 'fontSize', 'columns', 'mode', 'readingProgressEnabled']\n\t\tconst changes = names.reduce((result, name, index) => {\n\t\t\tif (values[index] !== previousValues[index])\n\t\t\t\tresult[name] = { previous: previousValues[index], value: values[index] }\n\t\t\treturn result\n\t\t}, {})\n\t\tif (Object.keys(changes).length)\n\t\t\tdispatchPublicEvent('settings-change', { changes })\n\t},\n\t{ flush: 'post' }\n)\n\nwatchDebounced(content,\n\t() => listenToClicks(contentArea),\n\t{ debounce: 125, maxWait: 250 }\n)\n\n</script>\n\n<template>\n\t<div class=\"rootWrapper\" :class=\"useBrowser.isSafari ? 'safari' : ''\">\n\t\t<main id=\"rootComponent\"\n\t\t\tref=\"rootComponent\"\n\t\t\t:class=\"mode\n\t\t\t\t.concat(` ${props.rootClass}`)\n\t\t\t\t.concat(` currentPage-${currentPage}`)\n\t\t\t\t.concat(` totalPages-${totalPages}`)\n\t\t\t\t.concat(` columns-${columns}`)\n\t\t\t\"\n\t\t\t:style=\"`font-family: ${baseFont}`\"\n\t\t>\n\t\t\t<HeaderSlot>\n\t\t\t\t<template #header>\n\t\t\t\t\t<slot name=\"header\">\n\t\t\t\t\t\t<p class=\"text-white text-center text-sm\">\n\t\t\t\t\t\t\t{{ props.bookTitle || bookTitle }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"text-white text-center text-xs\">\n\t\t\t\t\t\t\t{{ props.chapterTitle || chapterTitle }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</slot>\n\t\t\t\t</template>\n\n\t\t\t\t<template #summaryTop>\n\t\t\t\t\t<slot name=\"summaryTop\"></slot>\n\t\t\t\t</template>\n\n\t\t\t\t<template #summaryBottom>\n\t\t\t\t\t<slot name=\"summaryBottom\"></slot>\n\t\t\t\t</template>\n\n\t\t\t\t<template #optionsTop>\n\t\t\t\t\t<slot name=\"optionsTop\"></slot>\n\t\t\t\t</template>\n\n\t\t\t\t<template #optionsBottom>\n\t\t\t\t\t<slot name=\"optionsBottom\"></slot>\n\t\t\t\t</template>\n\t\t\t</HeaderSlot>\n\n\t\t\t<EngineWrapper>\n\t\t\t\t<div id=\"reader-component\" ref=\"readerComponent\" >\n\t\t\t\t\t<ReaderWrapper>\n\t\t\t\t\t\t<section id=\"content-area\" ref=\"contentArea\"\n\t\t\t\t\t\t\t:style=\"`font-family: ${textFont}; font-size: ${fontSize}px`\">\n\t\t\t\t\t\t\t<BookContent :bookContent=\"bookContent\">\n\t\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t\t<slot name=\"content\"></slot>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</BookContent>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t</ReaderWrapper>\n\t\t\t\t\t<div v-if=\"search.open.value\" class=\"search-highlights\" aria-hidden=\"true\">\n\t\t\t\t\t\t<div class=\"search-highlight-track\" :class=\"{ 'search-navigation': changeSource === 'search' }\"\n\t\t\t\t\t\t\t:style=\"{ transform: `translateX(-${100 * (currentPage - 1)}%)` }\">\n\t\t\t\t\t\t\t<span v-for=\"rectangle in search.rectangles.value\" :key=\"rectangle.key\"\n\t\t\t\t\t\t\t\tclass=\"search-highlight\" :class=\"{ 'search-highlight-active': rectangle.active }\"\n\t\t\t\t\t\t\t\t:style=\"rectangle.style\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</EngineWrapper>\n\n\t\t\t<FooterSlot :currPage=\"currentPage\" :totalPages=\"totalPages\" />\n\n\t\t\t<ReferencePopup />\n\t\t</main>\n\n\t\t<FootnotesAside />\n\t</div>\n</template>\n\n<style lang=\"scss\" src=\"./assets/main.css\"></style>\n<!-- Swap for ./assets/vueform-slider.css when using VueformPageSlider.vue. -->\n<style src=\"./assets/page-slider.css\"></style>\n\n<style lang=\"scss\">\n/* In your Vue component's <style> section */\n:host {\n\tuser-select: text;\n}\n\n::slotted(*) {\n\tuser-select: text;\n}\n\n/* Ensure paragraphs can be selected across boundaries */\n::slotted(p) {\n\tuser-select: text;\n\tdisplay: block;\n\t/* Avoid inline-block which can break selection */\n}\n</style>\n","// https://maximomussini.com/posts/vue-custom-elements\nimport { defineCustomElement } from 'vue'\n\nimport App from './App.ce.vue'\n\nimport tailwindStyles from './tailwind.css'\n\nconst styles = [\n\t...[tailwindStyles],\n\t...App.styles\n]\n\nconst PaginateContent = defineCustomElement({ ...App, styles })\n\n// Vue hosts >= 3.5.22 call these hooks. The bundled 3.5.21 runtime has\n// no batching work to perform; never replace a runtime's own implementation.\nfor (const hook of ['_beginPatch', '_endPatch']) {\n\tif (typeof PaginateContent.prototype[hook] !== 'function')\n\t\tObject.defineProperty(PaginateContent.prototype, hook, { value() {}, configurable: true, writable: true })\n}\n\ncustomElements.define('paginate-content', PaginateContent)\n"],"names":["_a","isClient","isString","val","noop","isIOS","resolveUnref","r","unref","createFilterWrapper","filter","fn","wrapper","args","resolve","reject","bypassFilter","invoke","debounceFilter","ms","options","timer","maxTimer","lastRejector","_clearTimeout","timer2","duration","maxDuration","identity","arg","tryOnScopeDispose","getCurrentScope","onScopeDispose","resolveRef","computed","ref","tryOnMounted","sync","getCurrentInstance","onMounted","nextTick","__getOwnPropSymbols$6","__hasOwnProp$6","__propIsEnum$6","__objRest$5","source","exclude","target","prop","watchWithFilter","cb","eventFilter","watchOptions","watch","__defProp$4","__defProps$4","__getOwnPropDescs$4","__getOwnPropSymbols$4","__hasOwnProp$4","__propIsEnum$4","__defNormalProp$4","obj","key","value","__spreadValues$4","a","b","__spreadProps$4","__objRest$3","watchDebounced","debounce","maxWait","unrefElement","elRef","plain","defaultWindow","defaultDocument","useEventListener","events","listeners","cleanups","cleanup","register","el","event","listener","options2","stopWatch","stop","_iOSWorkaround","onClickOutside","handler","window","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","e","createKeyPredicate","keyFilter","onKeyStroke","eventName","passive","predicate","useSupported","callback","isSupported","update","_global","globalKey","functionsMap","useFullscreen","document","autoExit","targetRef","isFullscreen","map","m","REQUEST","EXIT","ELEMENT","EVENT","exit","enter","toggle","SwipeDirection","SwipeDirection2","usePointerSwipe","threshold","onSwipe","onSwipeEnd","onSwipeStart","posStart","reactive","updatePosStart","x","y","posEnd","updatePosEnd","distanceX","distanceY","max","abs","isThresholdExceeded","isSwiping","isPointerDown","direction","eventIsAllowed","_b","_c","isReleasingButton","isPrimaryButton","stops","eventTarget","s","readonly","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","_TransitionPresets","useWindowSize","initialWidth","initialHeight","listenOrientation","includeScrollbar","width","height","initStyles","props","rootComponent","settings","stylesheetLoader","applyStylesheet","fontLoader","fontsOptions","fontsToLoad","item","style","css","stylesheet","cssText","useStyles","state","baseFont","textFont","fontSize","columns","mode","blocked","readingProgressAvailable","readingProgressEnabled","bookTitle","chapterTitle","homeUrl","saveSettings","initSettings","settingsString","defaultBaseFont","defaultTextFont","loadSavedSettings","hasSettings","savedSettings","htmlRoot","setColumns","setTextFont","setFontSize","setBlocked","setReadingProgressEnabled","setMode","useReaderSettings","estimate","viewport","content","viewportWidth","contentWidth","totalPages","useEstimatePages","references","setReferences","reference","setHighlightedReference","applyReferences","contentRaw","regex","applyReference","classList","useReferences","footnotes","setFootnotes","showFootnotes","setShowFootnotes","footnote","setHighlightedFootnote","applyFootnote","footnoteTarget","useFootnotes","isNavigable","nearestNavigable","chapters","from","step","index","summary","context","linkedChapter","chapter","current","contextId","initContent","contentString","contentWrapper","text","getContent","newContent","listenToClicks","location","err","applyContent","getClickedReferenceData","useTextContent","isSafari","isApple","useBrowser","STORAGE_KEY","available","enabled","init","fallbackTitle","configuredId","getContextKey","readStore","saved","writeStore","store","percentageFor","page","total","pageFor","percentage","repaginate","previousTotal","nextTotal","save","suspend","resume","remove","allowRestore","targetPage","setEnabled","useReadingProgress","isPaginarIgnoredEvent","node","currentPage","changeSource","updatePages","origin","set","onWheel","observeLayout","observer","fallbackTimer","observedFrame","stopObserving","sizes","entries","changed","borderBoxSize","contentRect","box","size","element","next","usingScroll","prev","usePagination","searchExcerpt","start","end","contextWords","boundary","offset","words","inWord","isWord","left","right","compact","externalSearchResults","results","ids","items","result","normalizeSearchText","starts","ends","character","normalized","part","nearWord","findSearchMatches","query","needle","hits","position","tokens","exactCount","exactIndex","last","word","hit","searchKey","indexContent","root","nodes","visit","separator","children","child","rangeForMatch","match","findNode","low","high","middle","first","range","useSearch","emit","open","input","button","active","panel","localResults","shallowRef","externalResults","requestId","geometry","pageWidth","rectangles","rect","pending","ranges","host","getState","notifySearch","setResults","response","selected","measure","measured","firstRects","seen","rectangle","navigate","notify","run","schedule","invalidate","searchText","show","close","onKeydown","path","otherReader","onBeforeUnmount","_hoisted_1","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","publicEventKey","publicEvent","inject","getChapter","_renderSlot","_Fragment","_renderList","_unref","_createBlock","_resolveDynamicComponent","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_2","_hoisted_3","_hoisted_4","toggleSummary","hide","_createVNode","IconHome","IconClose","IconSummary","_Transition","SummaryDropdown","ua","_withModifiers","$event","SingleColumn","DoubleColumn","font","_normalizeStyle","IconSun","IconMoon","_normalizeClass","IconFootnote","IconEye","OptionsColumns","OptionsFontFamily","OptionsFontSize","OptionsColor","OptionsReadingProgress","toggleFullScreen","IconThreeDots","IconExpand","OptionsDropdown","search","status","selectResult","clearQuery","_withKeys","_hoisted_7","_hoisted_10","_hoisted_13","_hoisted_14","_createTextVNode","SummaryButton","SearchButton","OptionsButton","__props","_sfc_main","$options","$props","NavigationButton","closeRef","dragPosition","dragging","progress","label","startDrag","endDrag","onInput","PageSlider","oldBlockedValue","footnoteList","hideAside","IconNotes","footnoteItem","readerComponent","contentArea","dispatchPublicEvent","provide","paginationRevision","hostElement","currentChapter","name","detail","syncReadingProgress","estimatePagesAndSyncProgress","revision","previousPage","saveCurrentReadingProgress","saveReadingProgressWhenHidden","readerBlocked","previousValue","values","previousValues","changes","HeaderSlot","EngineWrapper","ReaderWrapper","BookContent","FooterSlot","ReferencePopup","FootnotesAside","styles","tailwindStyles","App","PaginateContent","defineCustomElement","hook"],"mappings":"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"}