@vueuse/components 7.3.0 → 7.4.3

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.
package/index.cjs CHANGED
@@ -123,6 +123,232 @@ const UseBrowserLocation = vueDemi.defineComponent({
123
123
  }
124
124
  });
125
125
 
126
+ const globalKey = "__vueuse_ssr_handlers__";
127
+ globalThis[globalKey] = globalThis[globalKey] || {};
128
+ const handlers = globalThis[globalKey];
129
+ function getSSRHandler(key, fallback) {
130
+ return handlers[key] || fallback;
131
+ }
132
+
133
+ function guessSerializerType(rawInit) {
134
+ return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : Array.isArray(rawInit) ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
135
+ }
136
+
137
+ const StorageSerializers = {
138
+ boolean: {
139
+ read: (v) => v === "true",
140
+ write: (v) => String(v)
141
+ },
142
+ object: {
143
+ read: (v) => JSON.parse(v),
144
+ write: (v) => JSON.stringify(v)
145
+ },
146
+ number: {
147
+ read: (v) => Number.parseFloat(v),
148
+ write: (v) => String(v)
149
+ },
150
+ any: {
151
+ read: (v) => v,
152
+ write: (v) => String(v)
153
+ },
154
+ string: {
155
+ read: (v) => v,
156
+ write: (v) => String(v)
157
+ },
158
+ map: {
159
+ read: (v) => new Map(JSON.parse(v)),
160
+ write: (v) => JSON.stringify(Array.from(v.entries()))
161
+ },
162
+ set: {
163
+ read: (v) => new Set(JSON.parse(v)),
164
+ write: (v) => JSON.stringify(Array.from(v.entries()))
165
+ }
166
+ };
167
+ function useStorage(key, initialValue, storage = getSSRHandler("getDefaultStorage", () => {
168
+ var _a;
169
+ return (_a = defaultWindow) == null ? void 0 : _a.localStorage;
170
+ })(), options = {}) {
171
+ var _a;
172
+ const {
173
+ flush = "pre",
174
+ deep = true,
175
+ listenToStorageChanges = true,
176
+ writeDefaults = true,
177
+ shallow,
178
+ window = defaultWindow,
179
+ eventFilter,
180
+ onError = (e) => {
181
+ console.error(e);
182
+ }
183
+ } = options;
184
+ const rawInit = vueDemi.unref(initialValue);
185
+ const type = guessSerializerType(rawInit);
186
+ const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(initialValue);
187
+ const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
188
+ function read(event) {
189
+ if (!storage || event && event.key !== key)
190
+ return;
191
+ try {
192
+ const rawValue = event ? event.newValue : storage.getItem(key);
193
+ if (rawValue == null) {
194
+ data.value = rawInit;
195
+ if (writeDefaults && rawInit !== null)
196
+ storage.setItem(key, serializer.write(rawInit));
197
+ } else if (typeof rawValue !== "string") {
198
+ data.value = rawValue;
199
+ } else {
200
+ data.value = serializer.read(rawValue);
201
+ }
202
+ } catch (e) {
203
+ onError(e);
204
+ }
205
+ }
206
+ read();
207
+ if (window && listenToStorageChanges)
208
+ useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
209
+ if (storage) {
210
+ shared.watchWithFilter(data, () => {
211
+ try {
212
+ if (data.value == null)
213
+ storage.removeItem(key);
214
+ else
215
+ storage.setItem(key, serializer.write(data.value));
216
+ } catch (e) {
217
+ onError(e);
218
+ }
219
+ }, {
220
+ flush,
221
+ deep,
222
+ eventFilter
223
+ });
224
+ }
225
+ return data;
226
+ }
227
+
228
+ function useMediaQuery(query, options = {}) {
229
+ const { window = defaultWindow } = options;
230
+ let mediaQuery;
231
+ const matches = vueDemi.ref(false);
232
+ const update = () => {
233
+ if (!window)
234
+ return;
235
+ if (!mediaQuery)
236
+ mediaQuery = window.matchMedia(query);
237
+ matches.value = mediaQuery.matches;
238
+ };
239
+ shared.tryOnMounted(() => {
240
+ update();
241
+ if (!mediaQuery)
242
+ return;
243
+ if ("addEventListener" in mediaQuery)
244
+ mediaQuery.addEventListener("change", update);
245
+ else
246
+ mediaQuery.addListener(update);
247
+ shared.tryOnScopeDispose(() => {
248
+ if ("removeEventListener" in update)
249
+ mediaQuery.removeEventListener("change", update);
250
+ else
251
+ mediaQuery.removeListener(update);
252
+ });
253
+ });
254
+ return matches;
255
+ }
256
+
257
+ function usePreferredDark(options) {
258
+ return useMediaQuery("(prefers-color-scheme: dark)", options);
259
+ }
260
+
261
+ var __defProp$7 = Object.defineProperty;
262
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
263
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
264
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
265
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
266
+ var __spreadValues$7 = (a, b) => {
267
+ for (var prop in b || (b = {}))
268
+ if (__hasOwnProp$7.call(b, prop))
269
+ __defNormalProp$7(a, prop, b[prop]);
270
+ if (__getOwnPropSymbols$7)
271
+ for (var prop of __getOwnPropSymbols$7(b)) {
272
+ if (__propIsEnum$7.call(b, prop))
273
+ __defNormalProp$7(a, prop, b[prop]);
274
+ }
275
+ return a;
276
+ };
277
+ function useColorMode(options = {}) {
278
+ const {
279
+ selector = "html",
280
+ attribute = "class",
281
+ window = defaultWindow,
282
+ storage = getSSRHandler("getDefaultStorage", () => {
283
+ var _a;
284
+ return (_a = defaultWindow) == null ? void 0 : _a.localStorage;
285
+ })(),
286
+ storageKey = "vueuse-color-scheme",
287
+ listenToStorageChanges = true,
288
+ storageRef
289
+ } = options;
290
+ const modes = __spreadValues$7({
291
+ auto: "",
292
+ light: "light",
293
+ dark: "dark"
294
+ }, options.modes || {});
295
+ const preferredDark = usePreferredDark({ window });
296
+ const preferredMode = vueDemi.computed(() => preferredDark.value ? "dark" : "light");
297
+ const store = storageRef || (storageKey == null ? vueDemi.ref("auto") : useStorage(storageKey, "auto", storage, { window, listenToStorageChanges }));
298
+ const state = vueDemi.computed({
299
+ get() {
300
+ return store.value === "auto" ? preferredMode.value : store.value;
301
+ },
302
+ set(v) {
303
+ store.value = v;
304
+ }
305
+ });
306
+ const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector2, attribute2, value) => {
307
+ const el = window == null ? void 0 : window.document.querySelector(selector2);
308
+ if (!el)
309
+ return;
310
+ if (attribute2 === "class") {
311
+ const current = value.split(/\s/g);
312
+ Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
313
+ if (current.includes(v))
314
+ el.classList.add(v);
315
+ else
316
+ el.classList.remove(v);
317
+ });
318
+ } else {
319
+ el.setAttribute(attribute2, value);
320
+ }
321
+ });
322
+ function defaultOnChanged(mode) {
323
+ var _a;
324
+ updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);
325
+ }
326
+ function onChanged(mode) {
327
+ if (options.onChanged)
328
+ options.onChanged(mode, defaultOnChanged);
329
+ else
330
+ defaultOnChanged(mode);
331
+ }
332
+ vueDemi.watch(state, onChanged, { flush: "post", immediate: true });
333
+ shared.tryOnMounted(() => onChanged(state.value));
334
+ return state;
335
+ }
336
+
337
+ const UseColorMode = vueDemi.defineComponent({
338
+ name: "UseColorMode",
339
+ props: ["selector", "attribute", "modes", "onChanged", "storageKey", "storage"],
340
+ setup(props, { slots }) {
341
+ const mode = useColorMode(props);
342
+ const data = vueDemi.reactive({
343
+ mode
344
+ });
345
+ return () => {
346
+ if (slots.default)
347
+ return slots.default(data);
348
+ };
349
+ }
350
+ });
351
+
126
352
  const UseDark = vueDemi.defineComponent({
127
353
  name: "UseDark",
128
354
  props: ["selector", "attribute", "valueDark", "valueLight", "onChanged", "storageKey", "storage"],
@@ -535,6 +761,24 @@ const UsePreferredLanguages = vueDemi.defineComponent({
535
761
  }
536
762
  });
537
763
 
764
+ function useCssVar(prop, target, { window = defaultWindow } = {}) {
765
+ const variable = vueDemi.ref("");
766
+ const elRef = vueDemi.computed(() => {
767
+ var _a;
768
+ return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);
769
+ });
770
+ vueDemi.watch(elRef, (el) => {
771
+ if (el && window)
772
+ variable.value = window.getComputedStyle(el).getPropertyValue(prop);
773
+ }, { immediate: true });
774
+ vueDemi.watch(variable, (val) => {
775
+ var _a;
776
+ if ((_a = elRef.value) == null ? void 0 : _a.style)
777
+ elRef.value.style.setProperty(prop, val);
778
+ });
779
+ return variable;
780
+ }
781
+
538
782
  const topVarName = "--vueuse-safe-area-top";
539
783
  const rightVarName = "--vueuse-safe-area-right";
540
784
  const bottomVarName = "--vueuse-safe-area-bottom";
@@ -544,17 +788,17 @@ function useScreenSafeArea() {
544
788
  const right = vueDemi.ref("");
545
789
  const bottom = vueDemi.ref("");
546
790
  const left = vueDemi.ref("");
547
- if (core.isClient) {
548
- const topCssVar = core.useCssVar(topVarName);
549
- const rightCssVar = core.useCssVar(rightVarName);
550
- const bottomCssVar = core.useCssVar(bottomVarName);
551
- const leftCssVar = core.useCssVar(leftVarName);
791
+ if (shared.isClient) {
792
+ const topCssVar = useCssVar(topVarName);
793
+ const rightCssVar = useCssVar(rightVarName);
794
+ const bottomCssVar = useCssVar(bottomVarName);
795
+ const leftCssVar = useCssVar(leftVarName);
552
796
  topCssVar.value = "env(safe-area-inset-top, 0px)";
553
797
  rightCssVar.value = "env(safe-area-inset-right, 0px)";
554
798
  bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
555
799
  leftCssVar.value = "env(safe-area-inset-left, 0px)";
556
800
  update();
557
- core.useEventListener("resize", core.useDebounceFn(update));
801
+ useEventListener("resize", shared.useDebounceFn(update));
558
802
  }
559
803
  function update() {
560
804
  top.value = getValue(topVarName);
@@ -631,7 +875,7 @@ const UseTimeAgo = vueDemi.defineComponent({
631
875
  name: "UseTimeAgo",
632
876
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
633
877
  setup(props, { slots }) {
634
- const { time } = vueDemi.toRefs(props);
878
+ const time = vueDemi.toRef(props, "time");
635
879
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
636
880
  return () => {
637
881
  if (slots.default)
@@ -733,6 +977,7 @@ exports.OnClickOutside = OnClickOutside;
733
977
  exports.UseActiveElement = UseActiveElement;
734
978
  exports.UseBattery = UseBattery;
735
979
  exports.UseBrowserLocation = UseBrowserLocation;
980
+ exports.UseColorMode = UseColorMode;
736
981
  exports.UseDark = UseDark;
737
982
  exports.UseDeviceMotion = UseDeviceMotion;
738
983
  exports.UseDeviceOrientation = UseDeviceOrientation;
package/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as vue_demi from 'vue-demi';
2
- import { FunctionDirective } from 'vue-demi';
3
- import { UseDarkOptions, UseDevicesListOptions, UseDraggableOptions, ElementSize, GeolocationOptions, IdleOptions, MouseOptions, MouseInElementOptions, MousePressedOptions, UseNowOptions, UsePointerOptions, TimeAgoOptions, TimestampOptions, UseVirtualListOptions, WindowSizeOptions } from '@vueuse/core';
4
- import { MaybeRef } from '@vueuse/shared';
2
+ import { FunctionDirective, Ref } from 'vue-demi';
3
+ import { ConfigurableEventFilter, ConfigurableFlush, MaybeRef } from '@vueuse/shared';
4
+ import { UseDarkOptions, UseDevicesListOptions, UseDraggableOptions, ElementSize, GeolocationOptions, IdleOptions, MouseOptions, MouseInElementOptions, MousePressedOptions, UseNowOptions, UsePointerOptions, UseTimeAgoOptions, TimestampOptions, UseVirtualListOptions, WindowSizeOptions } from '@vueuse/core';
5
5
 
6
6
  interface ConfigurableWindow {
7
7
  window?: Window;
@@ -35,6 +35,102 @@ declare const UseBrowserLocation: vue_demi.DefineComponent<{}, () => vue_demi.VN
35
35
  [key: string]: any;
36
36
  }>[] | undefined, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<{} & {} & {}>, {}>;
37
37
 
38
+ interface StorageLike {
39
+ getItem(key: string): string | null;
40
+ setItem(key: string, value: string): void;
41
+ removeItem(key: string): void;
42
+ }
43
+
44
+ declare type Serializer<T> = {
45
+ read(raw: string): T;
46
+ write(value: T): string;
47
+ };
48
+ interface StorageOptions<T> extends ConfigurableEventFilter, ConfigurableWindow, ConfigurableFlush {
49
+ /**
50
+ * Watch for deep changes
51
+ *
52
+ * @default true
53
+ */
54
+ deep?: boolean;
55
+ /**
56
+ * Listen to storage changes, useful for multiple tabs application
57
+ *
58
+ * @default true
59
+ */
60
+ listenToStorageChanges?: boolean;
61
+ /**
62
+ * Write the default value to the storage when it does not existed
63
+ *
64
+ * @default true
65
+ */
66
+ writeDefaults?: boolean;
67
+ /**
68
+ * Custom data serialization
69
+ */
70
+ serializer?: Serializer<T>;
71
+ /**
72
+ * On error callback
73
+ *
74
+ * Default log error to `console.error`
75
+ */
76
+ onError?: (error: unknown) => void;
77
+ /**
78
+ * Use shallow ref as reference
79
+ *
80
+ * @default false
81
+ */
82
+ shallow?: boolean;
83
+ }
84
+
85
+ declare type BasicColorSchema = 'light' | 'dark' | 'auto';
86
+ interface UseColorModeOptions<T extends string = BasicColorSchema> extends StorageOptions<T | BasicColorSchema> {
87
+ /**
88
+ * CSS Selector for the target element applying to
89
+ *
90
+ * @default 'html'
91
+ */
92
+ selector?: string;
93
+ /**
94
+ * HTML attribute applying the target element
95
+ *
96
+ * @default 'class'
97
+ */
98
+ attribute?: string;
99
+ /**
100
+ * Prefix when adding value to the attribute
101
+ */
102
+ modes?: Partial<Record<T | BasicColorSchema, string>>;
103
+ /**
104
+ * A custom handler for handle the updates.
105
+ * When specified, the default behavior will be overridded.
106
+ *
107
+ * @default undefined
108
+ */
109
+ onChanged?: (mode: T | BasicColorSchema, defaultHandler: ((mode: T | BasicColorSchema) => void)) => void;
110
+ /**
111
+ * Custom storage ref
112
+ *
113
+ * When provided, `useStorage` will be skipped
114
+ */
115
+ storageRef?: Ref<T | BasicColorSchema>;
116
+ /**
117
+ * Key to persist the data into localStorage/sessionStorage.
118
+ *
119
+ * Pass `null` to disable persistence
120
+ *
121
+ * @default 'vueuse-color-scheme'
122
+ */
123
+ storageKey?: string | null;
124
+ /**
125
+ * Storage object, can be localStorage or sessionStorage
126
+ *
127
+ * @default localStorage
128
+ */
129
+ storage?: StorageLike;
130
+ }
131
+
132
+ declare const UseColorMode: vue_demi.DefineComponent<UseColorModeOptions<BasicColorSchema>, {}, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<UseColorModeOptions<BasicColorSchema>>, {}>;
133
+
38
134
  declare const UseDark: vue_demi.DefineComponent<UseDarkOptions, {}, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<UseDarkOptions>, {}>;
39
135
 
40
136
  declare const UseDeviceMotion: vue_demi.DefineComponent<{}, () => vue_demi.VNode<vue_demi.RendererNode, vue_demi.RendererElement, {
@@ -167,7 +263,7 @@ declare const UseScreenSafeArea: vue_demi.DefineComponent<{
167
263
  bottom: boolean;
168
264
  }>;
169
265
 
170
- interface UseTimeAgoComponentOptions extends Omit<TimeAgoOptions<true>, 'controls'> {
266
+ interface UseTimeAgoComponentOptions extends Omit<UseTimeAgoOptions<true>, 'controls'> {
171
267
  time: MaybeRef<Date | number | string>;
172
268
  }
173
269
  declare const UseTimeAgo: vue_demi.DefineComponent<UseTimeAgoComponentOptions, {}, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<UseTimeAgoComponentOptions>, {}>;
@@ -202,4 +298,4 @@ declare const UseWindowFocus: vue_demi.DefineComponent<{}, () => vue_demi.VNode<
202
298
 
203
299
  declare const UseWindowSize: vue_demi.DefineComponent<WindowSizeOptions, {}, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<WindowSizeOptions>, {}>;
204
300
 
205
- export { OnClickOutside, UseActiveElement, UseBattery, UseBrowserLocation, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseDraggableProps, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseOnline, UsePageLeave, UsePointer, UsePreferredColorScheme, UsePreferredDark, UsePreferredLanguages, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseVirtualListProps, UseWindowFocus, UseWindowSize, VOnClickOutside };
301
+ export { OnClickOutside, UseActiveElement, UseBattery, UseBrowserLocation, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseDraggableProps, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseOnline, UsePageLeave, UsePointer, UsePreferredColorScheme, UsePreferredDark, UsePreferredLanguages, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseVirtualListProps, UseWindowFocus, UseWindowSize, VOnClickOutside };
package/index.iife.js CHANGED
@@ -179,6 +179,232 @@
179
179
  }
180
180
  });
181
181
 
182
+ const globalKey = "__vueuse_ssr_handlers__";
183
+ globalThis[globalKey] = globalThis[globalKey] || {};
184
+ const handlers = globalThis[globalKey];
185
+ function getSSRHandler(key, fallback) {
186
+ return handlers[key] || fallback;
187
+ }
188
+
189
+ function guessSerializerType(rawInit) {
190
+ return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : Array.isArray(rawInit) ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
191
+ }
192
+
193
+ const StorageSerializers = {
194
+ boolean: {
195
+ read: (v) => v === "true",
196
+ write: (v) => String(v)
197
+ },
198
+ object: {
199
+ read: (v) => JSON.parse(v),
200
+ write: (v) => JSON.stringify(v)
201
+ },
202
+ number: {
203
+ read: (v) => Number.parseFloat(v),
204
+ write: (v) => String(v)
205
+ },
206
+ any: {
207
+ read: (v) => v,
208
+ write: (v) => String(v)
209
+ },
210
+ string: {
211
+ read: (v) => v,
212
+ write: (v) => String(v)
213
+ },
214
+ map: {
215
+ read: (v) => new Map(JSON.parse(v)),
216
+ write: (v) => JSON.stringify(Array.from(v.entries()))
217
+ },
218
+ set: {
219
+ read: (v) => new Set(JSON.parse(v)),
220
+ write: (v) => JSON.stringify(Array.from(v.entries()))
221
+ }
222
+ };
223
+ function useStorage(key, initialValue, storage = getSSRHandler("getDefaultStorage", () => {
224
+ var _a;
225
+ return (_a = defaultWindow) == null ? void 0 : _a.localStorage;
226
+ })(), options = {}) {
227
+ var _a;
228
+ const {
229
+ flush = "pre",
230
+ deep = true,
231
+ listenToStorageChanges = true,
232
+ writeDefaults = true,
233
+ shallow,
234
+ window = defaultWindow,
235
+ eventFilter,
236
+ onError = (e) => {
237
+ console.error(e);
238
+ }
239
+ } = options;
240
+ const rawInit = vueDemi.unref(initialValue);
241
+ const type = guessSerializerType(rawInit);
242
+ const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(initialValue);
243
+ const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
244
+ function read(event) {
245
+ if (!storage || event && event.key !== key)
246
+ return;
247
+ try {
248
+ const rawValue = event ? event.newValue : storage.getItem(key);
249
+ if (rawValue == null) {
250
+ data.value = rawInit;
251
+ if (writeDefaults && rawInit !== null)
252
+ storage.setItem(key, serializer.write(rawInit));
253
+ } else if (typeof rawValue !== "string") {
254
+ data.value = rawValue;
255
+ } else {
256
+ data.value = serializer.read(rawValue);
257
+ }
258
+ } catch (e) {
259
+ onError(e);
260
+ }
261
+ }
262
+ read();
263
+ if (window && listenToStorageChanges)
264
+ useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
265
+ if (storage) {
266
+ shared.watchWithFilter(data, () => {
267
+ try {
268
+ if (data.value == null)
269
+ storage.removeItem(key);
270
+ else
271
+ storage.setItem(key, serializer.write(data.value));
272
+ } catch (e) {
273
+ onError(e);
274
+ }
275
+ }, {
276
+ flush,
277
+ deep,
278
+ eventFilter
279
+ });
280
+ }
281
+ return data;
282
+ }
283
+
284
+ function useMediaQuery(query, options = {}) {
285
+ const { window = defaultWindow } = options;
286
+ let mediaQuery;
287
+ const matches = vueDemi.ref(false);
288
+ const update = () => {
289
+ if (!window)
290
+ return;
291
+ if (!mediaQuery)
292
+ mediaQuery = window.matchMedia(query);
293
+ matches.value = mediaQuery.matches;
294
+ };
295
+ shared.tryOnMounted(() => {
296
+ update();
297
+ if (!mediaQuery)
298
+ return;
299
+ if ("addEventListener" in mediaQuery)
300
+ mediaQuery.addEventListener("change", update);
301
+ else
302
+ mediaQuery.addListener(update);
303
+ shared.tryOnScopeDispose(() => {
304
+ if ("removeEventListener" in update)
305
+ mediaQuery.removeEventListener("change", update);
306
+ else
307
+ mediaQuery.removeListener(update);
308
+ });
309
+ });
310
+ return matches;
311
+ }
312
+
313
+ function usePreferredDark(options) {
314
+ return useMediaQuery("(prefers-color-scheme: dark)", options);
315
+ }
316
+
317
+ var __defProp$7 = Object.defineProperty;
318
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
319
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
320
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
321
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
322
+ var __spreadValues$7 = (a, b) => {
323
+ for (var prop in b || (b = {}))
324
+ if (__hasOwnProp$7.call(b, prop))
325
+ __defNormalProp$7(a, prop, b[prop]);
326
+ if (__getOwnPropSymbols$7)
327
+ for (var prop of __getOwnPropSymbols$7(b)) {
328
+ if (__propIsEnum$7.call(b, prop))
329
+ __defNormalProp$7(a, prop, b[prop]);
330
+ }
331
+ return a;
332
+ };
333
+ function useColorMode(options = {}) {
334
+ const {
335
+ selector = "html",
336
+ attribute = "class",
337
+ window = defaultWindow,
338
+ storage = getSSRHandler("getDefaultStorage", () => {
339
+ var _a;
340
+ return (_a = defaultWindow) == null ? void 0 : _a.localStorage;
341
+ })(),
342
+ storageKey = "vueuse-color-scheme",
343
+ listenToStorageChanges = true,
344
+ storageRef
345
+ } = options;
346
+ const modes = __spreadValues$7({
347
+ auto: "",
348
+ light: "light",
349
+ dark: "dark"
350
+ }, options.modes || {});
351
+ const preferredDark = usePreferredDark({ window });
352
+ const preferredMode = vueDemi.computed(() => preferredDark.value ? "dark" : "light");
353
+ const store = storageRef || (storageKey == null ? vueDemi.ref("auto") : useStorage(storageKey, "auto", storage, { window, listenToStorageChanges }));
354
+ const state = vueDemi.computed({
355
+ get() {
356
+ return store.value === "auto" ? preferredMode.value : store.value;
357
+ },
358
+ set(v) {
359
+ store.value = v;
360
+ }
361
+ });
362
+ const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector2, attribute2, value) => {
363
+ const el = window == null ? void 0 : window.document.querySelector(selector2);
364
+ if (!el)
365
+ return;
366
+ if (attribute2 === "class") {
367
+ const current = value.split(/\s/g);
368
+ Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
369
+ if (current.includes(v))
370
+ el.classList.add(v);
371
+ else
372
+ el.classList.remove(v);
373
+ });
374
+ } else {
375
+ el.setAttribute(attribute2, value);
376
+ }
377
+ });
378
+ function defaultOnChanged(mode) {
379
+ var _a;
380
+ updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);
381
+ }
382
+ function onChanged(mode) {
383
+ if (options.onChanged)
384
+ options.onChanged(mode, defaultOnChanged);
385
+ else
386
+ defaultOnChanged(mode);
387
+ }
388
+ vueDemi.watch(state, onChanged, { flush: "post", immediate: true });
389
+ shared.tryOnMounted(() => onChanged(state.value));
390
+ return state;
391
+ }
392
+
393
+ const UseColorMode = vueDemi.defineComponent({
394
+ name: "UseColorMode",
395
+ props: ["selector", "attribute", "modes", "onChanged", "storageKey", "storage"],
396
+ setup(props, { slots }) {
397
+ const mode = useColorMode(props);
398
+ const data = vueDemi.reactive({
399
+ mode
400
+ });
401
+ return () => {
402
+ if (slots.default)
403
+ return slots.default(data);
404
+ };
405
+ }
406
+ });
407
+
182
408
  const UseDark = vueDemi.defineComponent({
183
409
  name: "UseDark",
184
410
  props: ["selector", "attribute", "valueDark", "valueLight", "onChanged", "storageKey", "storage"],
@@ -591,6 +817,24 @@
591
817
  }
592
818
  });
593
819
 
820
+ function useCssVar(prop, target, { window = defaultWindow } = {}) {
821
+ const variable = vueDemi.ref("");
822
+ const elRef = vueDemi.computed(() => {
823
+ var _a;
824
+ return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);
825
+ });
826
+ vueDemi.watch(elRef, (el) => {
827
+ if (el && window)
828
+ variable.value = window.getComputedStyle(el).getPropertyValue(prop);
829
+ }, { immediate: true });
830
+ vueDemi.watch(variable, (val) => {
831
+ var _a;
832
+ if ((_a = elRef.value) == null ? void 0 : _a.style)
833
+ elRef.value.style.setProperty(prop, val);
834
+ });
835
+ return variable;
836
+ }
837
+
594
838
  const topVarName = "--vueuse-safe-area-top";
595
839
  const rightVarName = "--vueuse-safe-area-right";
596
840
  const bottomVarName = "--vueuse-safe-area-bottom";
@@ -600,17 +844,17 @@
600
844
  const right = vueDemi.ref("");
601
845
  const bottom = vueDemi.ref("");
602
846
  const left = vueDemi.ref("");
603
- if (core.isClient) {
604
- const topCssVar = core.useCssVar(topVarName);
605
- const rightCssVar = core.useCssVar(rightVarName);
606
- const bottomCssVar = core.useCssVar(bottomVarName);
607
- const leftCssVar = core.useCssVar(leftVarName);
847
+ if (shared.isClient) {
848
+ const topCssVar = useCssVar(topVarName);
849
+ const rightCssVar = useCssVar(rightVarName);
850
+ const bottomCssVar = useCssVar(bottomVarName);
851
+ const leftCssVar = useCssVar(leftVarName);
608
852
  topCssVar.value = "env(safe-area-inset-top, 0px)";
609
853
  rightCssVar.value = "env(safe-area-inset-right, 0px)";
610
854
  bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
611
855
  leftCssVar.value = "env(safe-area-inset-left, 0px)";
612
856
  update();
613
- core.useEventListener("resize", core.useDebounceFn(update));
857
+ useEventListener("resize", shared.useDebounceFn(update));
614
858
  }
615
859
  function update() {
616
860
  top.value = getValue(topVarName);
@@ -687,7 +931,7 @@
687
931
  name: "UseTimeAgo",
688
932
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
689
933
  setup(props, { slots }) {
690
- const { time } = vueDemi.toRefs(props);
934
+ const time = vueDemi.toRef(props, "time");
691
935
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
692
936
  return () => {
693
937
  if (slots.default)
@@ -789,6 +1033,7 @@
789
1033
  exports.UseActiveElement = UseActiveElement;
790
1034
  exports.UseBattery = UseBattery;
791
1035
  exports.UseBrowserLocation = UseBrowserLocation;
1036
+ exports.UseColorMode = UseColorMode;
792
1037
  exports.UseDark = UseDark;
793
1038
  exports.UseDeviceMotion = UseDeviceMotion;
794
1039
  exports.UseDeviceOrientation = UseDeviceOrientation;
package/index.iife.min.js CHANGED
@@ -1 +1 @@
1
- (function(s){if(!s.VueDemi){var n={},a=s.Vue;if(a)if(a.version.slice(0,2)==="2."){var l=s.VueCompositionAPI;if(l){for(var _ in l)n[_]=l[_];n.isVue2=!0,n.isVue3=!1,n.install=function(){},n.Vue=a,n.Vue2=a,n.version=a.version}else console.error("[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.")}else if(a.version.slice(0,2)==="3."){for(var _ in a)n[_]=a[_];n.isVue2=!1,n.isVue3=!0,n.install=function(){},n.Vue=a,n.Vue2=void 0,n.version=a.version,n.set=function(f,d,g){return Array.isArray(f)?(f.length=Math.max(f.length,d),f.splice(d,1,g),g):(f[d]=g,g)},n.del=function(f,d){if(Array.isArray(f)){f.splice(d,1);return}delete f[d]}}else console.error("[vue-demi] Vue version "+a.version+" is unsupported.");else console.error("[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.");s.VueDemi=n}})(window),function(s,n,a,l){"use strict";const _=n.defineComponent({name:"OnClickOutside",props:["as"],emits:["trigger"],setup(r,{slots:e,emit:t}){const o=n.ref();return a.onClickOutside(o,i=>{t("trigger",i)}),()=>{if(e.default)return n.h(r.as||"div",{ref:o},e.default())}}});function f(r){var e;const t=n.unref(r);return(e=t==null?void 0:t.$el)!=null?e:t}const d=l.isClient?window:void 0;function g(...r){let e,t,o,i;if(l.isString(r[0])?([t,o,i]=r,e=d):[e,t,o,i]=r,!e)return l.noop;let p=l.noop;const c=n.watch(()=>n.unref(e),u=>{p(),!!u&&(u.addEventListener(t,o,i),p=()=>{u.removeEventListener(t,o,i),p=l.noop})},{immediate:!0,flush:"post"}),m=()=>{c(),p()};return l.tryOnScopeDispose(m),m}function F(r,e,t={}){const{window:o=d}=t;if(!o)return;const i=n.ref(!0),c=[g(o,"click",u=>{const P=f(r);!P||P===u.target||u.composedPath().includes(P)||!i.value||e(u)},{passive:!0,capture:!0}),g(o,"pointerdown",u=>{const P=f(r);i.value=!!P&&!u.composedPath().includes(P)},{passive:!0})];return()=>c.forEach(u=>u())}const W=(r,e)=>{F(r,e.value)},z=n.defineComponent({name:"UseActiveElement",setup(r,{slots:e}){const t=n.reactive({element:a.useActiveElement()});return()=>{if(e.default)return e.default(t)}}}),R=n.defineComponent({name:"UseBattery",setup(r,{slots:e}){const t=n.reactive(a.useBattery(r));return()=>{if(e.default)return e.default(t)}}}),k=n.defineComponent({name:"UseBrowserLocation",setup(r,{slots:e}){const t=n.reactive(a.useBrowserLocation());return()=>{if(e.default)return e.default(t)}}}),G=n.defineComponent({name:"UseDark",props:["selector","attribute","valueDark","valueLight","onChanged","storageKey","storage"],setup(r,{slots:e}){const t=a.useDark(r),o=n.reactive({isDark:t,toggleDark:l.useToggle(t)});return()=>{if(e.default)return e.default(o)}}}),H=n.defineComponent({name:"UseDeviceMotion",setup(r,{slots:e}){const t=n.reactive(a.useDeviceMotion());return()=>{if(e.default)return e.default(t)}}}),K=n.defineComponent({name:"UseDeviceOrientation",setup(r,{slots:e}){const t=n.reactive(a.useDeviceOrientation());return()=>{if(e.default)return e.default(t)}}}),q=n.defineComponent({name:"UseDevicePixelRatio",setup(r,{slots:e}){const t=n.reactive({pixelRatio:a.useDevicePixelRatio()});return()=>{if(e.default)return e.default(t)}}}),J=n.defineComponent({name:"UseDevicesList",props:["onUpdated","requestPermissions","constraints"],setup(r,{slots:e}){const t=n.reactive(a.useDevicesList(r));return()=>{if(e.default)return e.default(t)}}}),Q=n.defineComponent({name:"UseDocumentVisibility",setup(r,{slots:e}){const t=n.reactive({visibility:a.useDocumentVisibility()});return()=>{if(e.default)return e.default(t)}}});var X=Object.defineProperty,Y=Object.defineProperties,Z=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable,v=(r,e,t)=>e in r?X(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ee=(r,e)=>{for(var t in e||(e={}))x.call(e,t)&&v(r,t,e[t]);if(O)for(var t of O(e))D.call(e,t)&&v(r,t,e[t]);return r},te=(r,e)=>Y(r,Z(e));const re=n.defineComponent({name:"UseDraggable",props:["storageKey","initialValue","exact","preventDefault","pointerTypes","as"],setup(r,{slots:e}){const t=n.ref(),o=r.storageKey?a.useStorage(r.storageKey,n.unref(r.initialValue)||{x:0,y:0},a.isClient?r.storageType==="session"?sessionStorage:localStorage:void 0):r.initialValue||{x:0,y:0},i=n.reactive(a.useDraggable(t,te(ee({},r),{initialValue:o})));return()=>{if(e.default)return n.h(r.as||"div",{ref:t,style:`touch-action:none;${i.style}`},e.default(i))}}}),ne=n.defineComponent({name:"UseElementBounding",props:["box","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useElementBounding(t));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),ae=n.defineComponent({name:"UseElementSize",props:["width","height","box"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useElementSize(t,{width:r.width,height:r.height},{box:r.box}));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),se=n.defineComponent({name:"UseElementVisibility",props:["as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive({isVisible:a.useElementVisibility(t)});return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),oe=n.defineComponent({name:"UseEyeDropper",props:{sRGBHex:String},setup(r,{slots:e}){const t=n.reactive(a.useEyeDropper());return()=>{if(e.default)return e.default(t)}}}),ie=n.defineComponent({name:"UseFullscreen",props:["as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useFullscreen(t));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),ue=n.defineComponent({name:"UseGeolocation",props:["enableHighAccuracy","maximumAge","timeout","navigator"],setup(r,{slots:e}){const t=n.reactive(a.useGeolocation(r));return()=>{if(e.default)return e.default(t)}}}),fe=n.defineComponent({name:"UseIdle",props:["timeout","events","listenForVisibilityChange","initialState"],setup(r,{slots:e}){const t=n.reactive(a.useIdle(r.timeout,r));return()=>{if(e.default)return e.default(t)}}}),le=n.defineComponent({name:"UseMouse",props:["touch","resetOnTouchEnds","initialValue"],setup(r,{slots:e}){const t=n.reactive(a.useMouse(r));return()=>{if(e.default)return e.default(t)}}}),pe=n.defineComponent({name:"UseMouseElement",props:["handleOutside","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useMouseInElement(t,r));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}});var de=Object.defineProperty,ce=Object.defineProperties,_e=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertySymbols,ge=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable,h=(r,e,t)=>e in r?de(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,me=(r,e)=>{for(var t in e||(e={}))ge.call(e,t)&&h(r,t,e[t]);if(y)for(var t of y(e))Pe.call(e,t)&&h(r,t,e[t]);return r},Ue=(r,e)=>ce(r,_e(e));const Oe=n.defineComponent({name:"UseMousePressed",props:["touch","initialValue","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useMousePressed(Ue(me({},r),{target:t})));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),ve=n.defineComponent({name:"UseNetwork",setup(r,{slots:e}){const t=n.reactive(a.useNetwork());return()=>{if(e.default)return e.default(t)}}});var ye=Object.defineProperty,he=Object.defineProperties,we=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,Ve=Object.prototype.propertyIsEnumerable,b=(r,e,t)=>e in r?ye(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Ce=(r,e)=>{for(var t in e||(e={}))be.call(e,t)&&b(r,t,e[t]);if(w)for(var t of w(e))Ve.call(e,t)&&b(r,t,e[t]);return r},$e=(r,e)=>he(r,we(e));const Ee=n.defineComponent({name:"UseNow",props:["interval"],setup(r,{slots:e}){const t=n.reactive(a.useNow($e(Ce({},r),{controls:!0})));return()=>{if(e.default)return e.default(t)}}}),Se=n.defineComponent({name:"UseOnline",setup(r,{slots:e}){const t=n.reactive({isOnline:a.useOnline()});return()=>{if(e.default)return e.default(t)}}}),Le=n.defineComponent({name:"UsePageLeave",setup(r,{slots:e}){const t=n.reactive({isLeft:a.usePageLeave()});return()=>{if(e.default)return e.default(t)}}});var je=Object.defineProperty,Ie=Object.defineProperties,Ne=Object.getOwnPropertyDescriptors,V=Object.getOwnPropertySymbols,Ae=Object.prototype.hasOwnProperty,Be=Object.prototype.propertyIsEnumerable,C=(r,e,t)=>e in r?je(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Me=(r,e)=>{for(var t in e||(e={}))Ae.call(e,t)&&C(r,t,e[t]);if(V)for(var t of V(e))Be.call(e,t)&&C(r,t,e[t]);return r},Te=(r,e)=>Ie(r,Ne(e));const Fe=n.defineComponent({name:"UsePointer",props:["pointerTypes","initialValue","target"],setup(r,{slots:e}){const t=n.ref(null),o=n.reactive(a.usePointer(Te(Me({},r),{target:r.target==="self"?t:d})));return()=>{if(e.default)return e.default(o,{ref:t})}}}),We=n.defineComponent({name:"UsePreferredColorScheme",setup(r,{slots:e}){const t=n.reactive({colorScheme:a.usePreferredColorScheme()});return()=>{if(e.default)return e.default(t)}}}),ze=n.defineComponent({name:"UsePreferredDark",setup(r,{slots:e}){const t=n.reactive({prefersDark:a.usePreferredDark()});return()=>{if(e.default)return e.default(t)}}}),Re=n.defineComponent({name:"UsePreferredLanguages",setup(r,{slots:e}){const t=n.reactive({languages:a.usePreferredLanguages()});return()=>{if(e.default)return e.default(t)}}}),$="--vueuse-safe-area-top",E="--vueuse-safe-area-right",S="--vueuse-safe-area-bottom",L="--vueuse-safe-area-left";function ke(){const r=n.ref(""),e=n.ref(""),t=n.ref(""),o=n.ref("");if(a.isClient){const p=a.useCssVar($),c=a.useCssVar(E),m=a.useCssVar(S),u=a.useCssVar(L);p.value="env(safe-area-inset-top, 0px)",c.value="env(safe-area-inset-right, 0px)",m.value="env(safe-area-inset-bottom, 0px)",u.value="env(safe-area-inset-left, 0px)",i(),a.useEventListener("resize",a.useDebounceFn(i))}function i(){r.value=U($),e.value=U(E),t.value=U(S),o.value=U(L)}return{top:r,right:e,bottom:t,left:o,update:i}}function U(r){return getComputedStyle(document.documentElement).getPropertyValue(r)}const Ge=n.defineComponent({name:"UseScreenSafeArea",props:{top:Boolean,right:Boolean,bottom:Boolean,left:Boolean},setup(r,{slots:e}){const{top:t,right:o,bottom:i,left:p}=ke();return()=>{if(e.default)return n.h("div",{style:{paddingTop:r.top?t.value:"",paddingRight:r.right?o.value:"",paddingBottom:r.bottom?i.value:"",paddingLeft:r.left?p.value:"",boxSizing:"border-box",maxHeight:"100vh",maxWidth:"100vw",overflow:"auto"}},e.default())}}});var He=Object.defineProperty,Ke=Object.defineProperties,qe=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,Je=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable,I=(r,e,t)=>e in r?He(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Xe=(r,e)=>{for(var t in e||(e={}))Je.call(e,t)&&I(r,t,e[t]);if(j)for(var t of j(e))Qe.call(e,t)&&I(r,t,e[t]);return r},Ye=(r,e)=>Ke(r,qe(e));const Ze=n.defineComponent({name:"UseTimeAgo",props:["time","updateInterval","max","fullDateFormatter","messages"],setup(r,{slots:e}){const{time:t}=n.toRefs(r),o=n.reactive(a.useTimeAgo(t,Ye(Xe({},r),{controls:!0})));return()=>{if(e.default)return e.default(o)}}});var xe=Object.defineProperty,De=Object.defineProperties,et=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertySymbols,tt=Object.prototype.hasOwnProperty,rt=Object.prototype.propertyIsEnumerable,A=(r,e,t)=>e in r?xe(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,nt=(r,e)=>{for(var t in e||(e={}))tt.call(e,t)&&A(r,t,e[t]);if(N)for(var t of N(e))rt.call(e,t)&&A(r,t,e[t]);return r},at=(r,e)=>De(r,et(e));const st=n.defineComponent({name:"UseTimestamp",props:["immediate","interval","offset"],setup(r,{slots:e}){const t=n.reactive(a.useTimestamp(at(nt({},r),{controls:!0})));return()=>{if(e.default)return e.default(t)}}});var ot=Object.defineProperty,B=Object.getOwnPropertySymbols,it=Object.prototype.hasOwnProperty,ut=Object.prototype.propertyIsEnumerable,M=(r,e,t)=>e in r?ot(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,T=(r,e)=>{for(var t in e||(e={}))it.call(e,t)&&M(r,t,e[t]);if(B)for(var t of B(e))ut.call(e,t)&&M(r,t,e[t]);return r};const ft=n.defineComponent({name:"UseVirtualList",props:["list","options","height"],setup(r,{slots:e}){const{list:t}=n.toRefs(r),{list:o,containerProps:i,wrapperProps:p}=a.useVirtualList(t,r.options);return i.style.height=r.height||"300px",()=>n.h("div",T({},i),[n.h("div",T({},p.value),o.value.map(c=>n.h("div",{style:{overFlow:"hidden",height:c.height}},e.default?e.default(c):"Please set content!")))])}}),lt=n.defineComponent({name:"UseWindowFocus",setup(r,{slots:e}){const t=n.reactive({focused:a.useWindowFocus()});return()=>{if(e.default)return e.default(t)}}}),pt=n.defineComponent({name:"UseWindowSize",props:["initialWidth","initialHeight"],setup(r,{slots:e}){const t=n.reactive(a.useWindowSize(r));return()=>{if(e.default)return e.default(t)}}});s.OnClickOutside=_,s.UseActiveElement=z,s.UseBattery=R,s.UseBrowserLocation=k,s.UseDark=G,s.UseDeviceMotion=H,s.UseDeviceOrientation=K,s.UseDevicePixelRatio=q,s.UseDevicesList=J,s.UseDocumentVisibility=Q,s.UseDraggable=re,s.UseElementBounding=ne,s.UseElementSize=ae,s.UseElementVisibility=se,s.UseEyeDropper=oe,s.UseFullscreen=ie,s.UseGeolocation=ue,s.UseIdle=fe,s.UseMouse=le,s.UseMouseInElement=pe,s.UseMousePressed=Oe,s.UseNetwork=ve,s.UseNow=Ee,s.UseOnline=Se,s.UsePageLeave=Le,s.UsePointer=Fe,s.UsePreferredColorScheme=We,s.UsePreferredDark=ze,s.UsePreferredLanguages=Re,s.UseScreenSafeArea=Ge,s.UseTimeAgo=Ze,s.UseTimestamp=st,s.UseVirtualList=ft,s.UseWindowFocus=lt,s.UseWindowSize=pt,s.VOnClickOutside=W,Object.defineProperty(s,"__esModule",{value:!0})}(this.VueUse=this.VueUse||{},VueDemi,VueUse,VueUse);
1
+ (function(s){if(!s.VueDemi){var n={},o=s.Vue;if(o)if(o.version.slice(0,2)==="2."){var f=s.VueCompositionAPI;if(f){for(var U in f)n[U]=f[U];n.isVue2=!0,n.isVue3=!1,n.install=function(){},n.Vue=o,n.Vue2=o,n.version=o.version}else console.error("[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.")}else if(o.version.slice(0,2)==="3."){for(var U in o)n[U]=o[U];n.isVue2=!1,n.isVue3=!0,n.install=function(){},n.Vue=o,n.Vue2=void 0,n.version=o.version,n.set=function(g,c,O){return Array.isArray(g)?(g.length=Math.max(g.length,c),g.splice(c,1,O),O):(g[c]=O,O)},n.del=function(g,c){if(Array.isArray(g)){g.splice(c,1);return}delete g[c]}}else console.error("[vue-demi] Vue version "+o.version+" is unsupported.");else console.error("[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.");s.VueDemi=n}})(window),function(s,n,o,f){"use strict";const U=n.defineComponent({name:"OnClickOutside",props:["as"],emits:["trigger"],setup(t,{slots:e,emit:r}){const a=n.ref();return o.onClickOutside(a,i=>{r("trigger",i)}),()=>{if(e.default)return n.h(t.as||"div",{ref:a},e.default())}}});function g(t){var e;const r=n.unref(t);return(e=r==null?void 0:r.$el)!=null?e:r}const c=f.isClient?window:void 0;function O(...t){let e,r,a,i;if(f.isString(t[0])?([r,a,i]=t,e=c):[e,r,a,i]=t,!e)return f.noop;let u=f.noop;const p=n.watch(()=>n.unref(e),l=>{u(),!!l&&(l.addEventListener(r,a,i),u=()=>{l.removeEventListener(r,a,i),u=f.noop})},{immediate:!0,flush:"post"}),y=()=>{p(),u()};return f.tryOnScopeDispose(y),y}function ee(t,e,r={}){const{window:a=c}=r;if(!a)return;const i=n.ref(!0),p=[O(a,"click",l=>{const v=g(t);!v||v===l.target||l.composedPath().includes(v)||!i.value||e(l)},{passive:!0,capture:!0}),O(a,"pointerdown",l=>{const v=g(t);i.value=!!v&&!l.composedPath().includes(v)},{passive:!0})];return()=>p.forEach(l=>l())}const te=(t,e)=>{ee(t,e.value)},re=n.defineComponent({name:"UseActiveElement",setup(t,{slots:e}){const r=n.reactive({element:o.useActiveElement()});return()=>{if(e.default)return e.default(r)}}}),ne=n.defineComponent({name:"UseBattery",setup(t,{slots:e}){const r=n.reactive(o.useBattery(t));return()=>{if(e.default)return e.default(r)}}}),ae=n.defineComponent({name:"UseBrowserLocation",setup(t,{slots:e}){const r=n.reactive(o.useBrowserLocation());return()=>{if(e.default)return e.default(r)}}}),j="__vueuse_ssr_handlers__";globalThis[j]=globalThis[j]||{};const oe=globalThis[j];function M(t,e){return oe[t]||e}function se(t){return t==null?"any":t instanceof Set?"set":t instanceof Map?"map":typeof t=="boolean"?"boolean":typeof t=="string"?"string":typeof t=="object"||Array.isArray(t)?"object":Number.isNaN(t)?"any":"number"}const ie={boolean:{read:t=>t==="true",write:t=>String(t)},object:{read:t=>JSON.parse(t),write:t=>JSON.stringify(t)},number:{read:t=>Number.parseFloat(t),write:t=>String(t)},any:{read:t=>t,write:t=>String(t)},string:{read:t=>t,write:t=>String(t)},map:{read:t=>new Map(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t.entries()))},set:{read:t=>new Set(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t.entries()))}};function ue(t,e,r=M("getDefaultStorage",()=>{var i;return(i=c)==null?void 0:i.localStorage})(),a={}){var i;const{flush:u="pre",deep:p=!0,listenToStorageChanges:y=!0,writeDefaults:l=!0,shallow:v,window:E=c,eventFilter:S,onError:w=_=>{console.error(_)}}=a,b=n.unref(e),L=se(b),P=(v?n.shallowRef:n.ref)(e),d=(i=a.serializer)!=null?i:ie[L];function h(_){if(!(!r||_&&_.key!==t))try{const m=_?_.newValue:r.getItem(t);m==null?(P.value=b,l&&b!==null&&r.setItem(t,d.write(b))):typeof m!="string"?P.value=m:P.value=d.read(m)}catch(m){w(m)}}return h(),E&&y&&O(E,"storage",_=>setTimeout(()=>h(_),0)),r&&f.watchWithFilter(P,()=>{try{P.value==null?r.removeItem(t):r.setItem(t,d.write(P.value))}catch(_){w(_)}},{flush:u,deep:p,eventFilter:S}),P}function le(t,e={}){const{window:r=c}=e;let a;const i=n.ref(!1),u=()=>{!r||(a||(a=r.matchMedia(t)),i.value=a.matches)};return f.tryOnMounted(()=>{u(),!!a&&("addEventListener"in a?a.addEventListener("change",u):a.addListener(u),f.tryOnScopeDispose(()=>{"removeEventListener"in u?a.removeEventListener("change",u):a.removeListener(u)}))}),i}function fe(t){return le("(prefers-color-scheme: dark)",t)}var ce=Object.defineProperty,N=Object.getOwnPropertySymbols,de=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,A=(t,e,r)=>e in t?ce(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,ge=(t,e)=>{for(var r in e||(e={}))de.call(e,r)&&A(t,r,e[r]);if(N)for(var r of N(e))pe.call(e,r)&&A(t,r,e[r]);return t};function _e(t={}){const{selector:e="html",attribute:r="class",window:a=c,storage:i=M("getDefaultStorage",()=>{var d;return(d=c)==null?void 0:d.localStorage})(),storageKey:u="vueuse-color-scheme",listenToStorageChanges:p=!0,storageRef:y}=t,l=ge({auto:"",light:"light",dark:"dark"},t.modes||{}),v=fe({window:a}),E=n.computed(()=>v.value?"dark":"light"),S=y||(u==null?n.ref("auto"):ue(u,"auto",i,{window:a,listenToStorageChanges:p})),w=n.computed({get(){return S.value==="auto"?E.value:S.value},set(d){S.value=d}}),b=M("updateHTMLAttrs",(d,h,_)=>{const m=a==null?void 0:a.document.querySelector(d);if(!!m)if(h==="class"){const Rt=_.split(/\s/g);Object.values(l).flatMap(C=>(C||"").split(/\s/g)).filter(Boolean).forEach(C=>{Rt.includes(C)?m.classList.add(C):m.classList.remove(C)})}else m.setAttribute(h,_)});function L(d){var h;b(e,r,(h=l[d])!=null?h:d)}function P(d){t.onChanged?t.onChanged(d,L):L(d)}return n.watch(w,P,{flush:"post",immediate:!0}),f.tryOnMounted(()=>P(w.value)),w}const me=n.defineComponent({name:"UseColorMode",props:["selector","attribute","modes","onChanged","storageKey","storage"],setup(t,{slots:e}){const r=_e(t),a=n.reactive({mode:r});return()=>{if(e.default)return e.default(a)}}}),ve=n.defineComponent({name:"UseDark",props:["selector","attribute","valueDark","valueLight","onChanged","storageKey","storage"],setup(t,{slots:e}){const r=o.useDark(t),a=n.reactive({isDark:r,toggleDark:f.useToggle(r)});return()=>{if(e.default)return e.default(a)}}}),Pe=n.defineComponent({name:"UseDeviceMotion",setup(t,{slots:e}){const r=n.reactive(o.useDeviceMotion());return()=>{if(e.default)return e.default(r)}}}),Oe=n.defineComponent({name:"UseDeviceOrientation",setup(t,{slots:e}){const r=n.reactive(o.useDeviceOrientation());return()=>{if(e.default)return e.default(r)}}}),ye=n.defineComponent({name:"UseDevicePixelRatio",setup(t,{slots:e}){const r=n.reactive({pixelRatio:o.useDevicePixelRatio()});return()=>{if(e.default)return e.default(r)}}}),he=n.defineComponent({name:"UseDevicesList",props:["onUpdated","requestPermissions","constraints"],setup(t,{slots:e}){const r=n.reactive(o.useDevicesList(t));return()=>{if(e.default)return e.default(r)}}}),Ue=n.defineComponent({name:"UseDocumentVisibility",setup(t,{slots:e}){const r=n.reactive({visibility:o.useDocumentVisibility()});return()=>{if(e.default)return e.default(r)}}});var we=Object.defineProperty,be=Object.defineProperties,Se=Object.getOwnPropertyDescriptors,T=Object.getOwnPropertySymbols,Ce=Object.prototype.hasOwnProperty,Ve=Object.prototype.propertyIsEnumerable,I=(t,e,r)=>e in t?we(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,$e=(t,e)=>{for(var r in e||(e={}))Ce.call(e,r)&&I(t,r,e[r]);if(T)for(var r of T(e))Ve.call(e,r)&&I(t,r,e[r]);return t},Ee=(t,e)=>be(t,Se(e));const Le=n.defineComponent({name:"UseDraggable",props:["storageKey","initialValue","exact","preventDefault","pointerTypes","as"],setup(t,{slots:e}){const r=n.ref(),a=t.storageKey?o.useStorage(t.storageKey,n.unref(t.initialValue)||{x:0,y:0},o.isClient?t.storageType==="session"?sessionStorage:localStorage:void 0):t.initialValue||{x:0,y:0},i=n.reactive(o.useDraggable(r,Ee($e({},t),{initialValue:a})));return()=>{if(e.default)return n.h(t.as||"div",{ref:r,style:`touch-action:none;${i.style}`},e.default(i))}}}),je=n.defineComponent({name:"UseElementBounding",props:["box","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(o.useElementBounding(r));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Me=n.defineComponent({name:"UseElementSize",props:["width","height","box"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(o.useElementSize(r,{width:t.width,height:t.height},{box:t.box}));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Ne=n.defineComponent({name:"UseElementVisibility",props:["as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive({isVisible:o.useElementVisibility(r)});return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Ae=n.defineComponent({name:"UseEyeDropper",props:{sRGBHex:String},setup(t,{slots:e}){const r=n.reactive(o.useEyeDropper());return()=>{if(e.default)return e.default(r)}}}),Te=n.defineComponent({name:"UseFullscreen",props:["as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(o.useFullscreen(r));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Ie=n.defineComponent({name:"UseGeolocation",props:["enableHighAccuracy","maximumAge","timeout","navigator"],setup(t,{slots:e}){const r=n.reactive(o.useGeolocation(t));return()=>{if(e.default)return e.default(r)}}}),Be=n.defineComponent({name:"UseIdle",props:["timeout","events","listenForVisibilityChange","initialState"],setup(t,{slots:e}){const r=n.reactive(o.useIdle(t.timeout,t));return()=>{if(e.default)return e.default(r)}}}),Fe=n.defineComponent({name:"UseMouse",props:["touch","resetOnTouchEnds","initialValue"],setup(t,{slots:e}){const r=n.reactive(o.useMouse(t));return()=>{if(e.default)return e.default(r)}}}),ze=n.defineComponent({name:"UseMouseElement",props:["handleOutside","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(o.useMouseInElement(r,t));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}});var Re=Object.defineProperty,We=Object.defineProperties,ke=Object.getOwnPropertyDescriptors,B=Object.getOwnPropertySymbols,He=Object.prototype.hasOwnProperty,Ke=Object.prototype.propertyIsEnumerable,F=(t,e,r)=>e in t?Re(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Je=(t,e)=>{for(var r in e||(e={}))He.call(e,r)&&F(t,r,e[r]);if(B)for(var r of B(e))Ke.call(e,r)&&F(t,r,e[r]);return t},Ge=(t,e)=>We(t,ke(e));const qe=n.defineComponent({name:"UseMousePressed",props:["touch","initialValue","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(o.useMousePressed(Ge(Je({},t),{target:r})));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Qe=n.defineComponent({name:"UseNetwork",setup(t,{slots:e}){const r=n.reactive(o.useNetwork());return()=>{if(e.default)return e.default(r)}}});var Xe=Object.defineProperty,Ye=Object.defineProperties,Ze=Object.getOwnPropertyDescriptors,z=Object.getOwnPropertySymbols,xe=Object.prototype.hasOwnProperty,De=Object.prototype.propertyIsEnumerable,R=(t,e,r)=>e in t?Xe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,et=(t,e)=>{for(var r in e||(e={}))xe.call(e,r)&&R(t,r,e[r]);if(z)for(var r of z(e))De.call(e,r)&&R(t,r,e[r]);return t},tt=(t,e)=>Ye(t,Ze(e));const rt=n.defineComponent({name:"UseNow",props:["interval"],setup(t,{slots:e}){const r=n.reactive(o.useNow(tt(et({},t),{controls:!0})));return()=>{if(e.default)return e.default(r)}}}),nt=n.defineComponent({name:"UseOnline",setup(t,{slots:e}){const r=n.reactive({isOnline:o.useOnline()});return()=>{if(e.default)return e.default(r)}}}),at=n.defineComponent({name:"UsePageLeave",setup(t,{slots:e}){const r=n.reactive({isLeft:o.usePageLeave()});return()=>{if(e.default)return e.default(r)}}});var ot=Object.defineProperty,st=Object.defineProperties,it=Object.getOwnPropertyDescriptors,W=Object.getOwnPropertySymbols,ut=Object.prototype.hasOwnProperty,lt=Object.prototype.propertyIsEnumerable,k=(t,e,r)=>e in t?ot(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,ft=(t,e)=>{for(var r in e||(e={}))ut.call(e,r)&&k(t,r,e[r]);if(W)for(var r of W(e))lt.call(e,r)&&k(t,r,e[r]);return t},ct=(t,e)=>st(t,it(e));const dt=n.defineComponent({name:"UsePointer",props:["pointerTypes","initialValue","target"],setup(t,{slots:e}){const r=n.ref(null),a=n.reactive(o.usePointer(ct(ft({},t),{target:t.target==="self"?r:c})));return()=>{if(e.default)return e.default(a,{ref:r})}}}),pt=n.defineComponent({name:"UsePreferredColorScheme",setup(t,{slots:e}){const r=n.reactive({colorScheme:o.usePreferredColorScheme()});return()=>{if(e.default)return e.default(r)}}}),gt=n.defineComponent({name:"UsePreferredDark",setup(t,{slots:e}){const r=n.reactive({prefersDark:o.usePreferredDark()});return()=>{if(e.default)return e.default(r)}}}),_t=n.defineComponent({name:"UsePreferredLanguages",setup(t,{slots:e}){const r=n.reactive({languages:o.usePreferredLanguages()});return()=>{if(e.default)return e.default(r)}}});function V(t,e,{window:r=c}={}){const a=n.ref(""),i=n.computed(()=>{var u;return g(e)||((u=r==null?void 0:r.document)==null?void 0:u.documentElement)});return n.watch(i,u=>{u&&r&&(a.value=r.getComputedStyle(u).getPropertyValue(t))},{immediate:!0}),n.watch(a,u=>{var p;((p=i.value)==null?void 0:p.style)&&i.value.style.setProperty(t,u)}),a}const H="--vueuse-safe-area-top",K="--vueuse-safe-area-right",J="--vueuse-safe-area-bottom",G="--vueuse-safe-area-left";function mt(){const t=n.ref(""),e=n.ref(""),r=n.ref(""),a=n.ref("");if(f.isClient){const u=V(H),p=V(K),y=V(J),l=V(G);u.value="env(safe-area-inset-top, 0px)",p.value="env(safe-area-inset-right, 0px)",y.value="env(safe-area-inset-bottom, 0px)",l.value="env(safe-area-inset-left, 0px)",i(),O("resize",f.useDebounceFn(i))}function i(){t.value=$(H),e.value=$(K),r.value=$(J),a.value=$(G)}return{top:t,right:e,bottom:r,left:a,update:i}}function $(t){return getComputedStyle(document.documentElement).getPropertyValue(t)}const vt=n.defineComponent({name:"UseScreenSafeArea",props:{top:Boolean,right:Boolean,bottom:Boolean,left:Boolean},setup(t,{slots:e}){const{top:r,right:a,bottom:i,left:u}=mt();return()=>{if(e.default)return n.h("div",{style:{paddingTop:t.top?r.value:"",paddingRight:t.right?a.value:"",paddingBottom:t.bottom?i.value:"",paddingLeft:t.left?u.value:"",boxSizing:"border-box",maxHeight:"100vh",maxWidth:"100vw",overflow:"auto"}},e.default())}}});var Pt=Object.defineProperty,Ot=Object.defineProperties,yt=Object.getOwnPropertyDescriptors,q=Object.getOwnPropertySymbols,ht=Object.prototype.hasOwnProperty,Ut=Object.prototype.propertyIsEnumerable,Q=(t,e,r)=>e in t?Pt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,wt=(t,e)=>{for(var r in e||(e={}))ht.call(e,r)&&Q(t,r,e[r]);if(q)for(var r of q(e))Ut.call(e,r)&&Q(t,r,e[r]);return t},bt=(t,e)=>Ot(t,yt(e));const St=n.defineComponent({name:"UseTimeAgo",props:["time","updateInterval","max","fullDateFormatter","messages"],setup(t,{slots:e}){const r=n.toRef(t,"time"),a=n.reactive(o.useTimeAgo(r,bt(wt({},t),{controls:!0})));return()=>{if(e.default)return e.default(a)}}});var Ct=Object.defineProperty,Vt=Object.defineProperties,$t=Object.getOwnPropertyDescriptors,X=Object.getOwnPropertySymbols,Et=Object.prototype.hasOwnProperty,Lt=Object.prototype.propertyIsEnumerable,Y=(t,e,r)=>e in t?Ct(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,jt=(t,e)=>{for(var r in e||(e={}))Et.call(e,r)&&Y(t,r,e[r]);if(X)for(var r of X(e))Lt.call(e,r)&&Y(t,r,e[r]);return t},Mt=(t,e)=>Vt(t,$t(e));const Nt=n.defineComponent({name:"UseTimestamp",props:["immediate","interval","offset"],setup(t,{slots:e}){const r=n.reactive(o.useTimestamp(Mt(jt({},t),{controls:!0})));return()=>{if(e.default)return e.default(r)}}});var At=Object.defineProperty,Z=Object.getOwnPropertySymbols,Tt=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable,x=(t,e,r)=>e in t?At(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,D=(t,e)=>{for(var r in e||(e={}))Tt.call(e,r)&&x(t,r,e[r]);if(Z)for(var r of Z(e))It.call(e,r)&&x(t,r,e[r]);return t};const Bt=n.defineComponent({name:"UseVirtualList",props:["list","options","height"],setup(t,{slots:e}){const{list:r}=n.toRefs(t),{list:a,containerProps:i,wrapperProps:u}=o.useVirtualList(r,t.options);return i.style.height=t.height||"300px",()=>n.h("div",D({},i),[n.h("div",D({},u.value),a.value.map(p=>n.h("div",{style:{overFlow:"hidden",height:p.height}},e.default?e.default(p):"Please set content!")))])}}),Ft=n.defineComponent({name:"UseWindowFocus",setup(t,{slots:e}){const r=n.reactive({focused:o.useWindowFocus()});return()=>{if(e.default)return e.default(r)}}}),zt=n.defineComponent({name:"UseWindowSize",props:["initialWidth","initialHeight"],setup(t,{slots:e}){const r=n.reactive(o.useWindowSize(t));return()=>{if(e.default)return e.default(r)}}});s.OnClickOutside=U,s.UseActiveElement=re,s.UseBattery=ne,s.UseBrowserLocation=ae,s.UseColorMode=me,s.UseDark=ve,s.UseDeviceMotion=Pe,s.UseDeviceOrientation=Oe,s.UseDevicePixelRatio=ye,s.UseDevicesList=he,s.UseDocumentVisibility=Ue,s.UseDraggable=Le,s.UseElementBounding=je,s.UseElementSize=Me,s.UseElementVisibility=Ne,s.UseEyeDropper=Ae,s.UseFullscreen=Te,s.UseGeolocation=Ie,s.UseIdle=Be,s.UseMouse=Fe,s.UseMouseInElement=ze,s.UseMousePressed=qe,s.UseNetwork=Qe,s.UseNow=rt,s.UseOnline=nt,s.UsePageLeave=at,s.UsePointer=dt,s.UsePreferredColorScheme=pt,s.UsePreferredDark=gt,s.UsePreferredLanguages=_t,s.UseScreenSafeArea=vt,s.UseTimeAgo=St,s.UseTimestamp=Nt,s.UseVirtualList=Bt,s.UseWindowFocus=Ft,s.UseWindowSize=zt,s.VOnClickOutside=te,Object.defineProperty(s,"__esModule",{value:!0})}(this.VueUse=this.VueUse||{},VueDemi,VueUse,VueUse);
package/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { defineComponent, ref, h, unref, watch, reactive, toRefs } from 'vue-demi';
2
- import { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage, isClient as isClient$1, useDraggable, useElementBounding, useElementSize, useElementVisibility, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useOnline, usePageLeave, usePointer, usePreferredColorScheme, usePreferredDark, usePreferredLanguages, useCssVar, useEventListener as useEventListener$1, useDebounceFn, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';
3
- import { isClient, isString, noop, tryOnScopeDispose, useToggle } from '@vueuse/shared';
1
+ import { defineComponent, ref, h, unref, watch, reactive, shallowRef, computed, toRef, toRefs } from 'vue-demi';
2
+ import { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize, useElementVisibility, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useOnline, usePageLeave, usePointer, usePreferredColorScheme, usePreferredDark as usePreferredDark$1, usePreferredLanguages, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';
3
+ import { isClient, isString, noop, tryOnScopeDispose, watchWithFilter, tryOnMounted, useToggle, useDebounceFn } from '@vueuse/shared';
4
4
 
5
5
  const OnClickOutside = defineComponent({
6
6
  name: "OnClickOutside",
@@ -119,6 +119,232 @@ const UseBrowserLocation = defineComponent({
119
119
  }
120
120
  });
121
121
 
122
+ const globalKey = "__vueuse_ssr_handlers__";
123
+ globalThis[globalKey] = globalThis[globalKey] || {};
124
+ const handlers = globalThis[globalKey];
125
+ function getSSRHandler(key, fallback) {
126
+ return handlers[key] || fallback;
127
+ }
128
+
129
+ function guessSerializerType(rawInit) {
130
+ return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : Array.isArray(rawInit) ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
131
+ }
132
+
133
+ const StorageSerializers = {
134
+ boolean: {
135
+ read: (v) => v === "true",
136
+ write: (v) => String(v)
137
+ },
138
+ object: {
139
+ read: (v) => JSON.parse(v),
140
+ write: (v) => JSON.stringify(v)
141
+ },
142
+ number: {
143
+ read: (v) => Number.parseFloat(v),
144
+ write: (v) => String(v)
145
+ },
146
+ any: {
147
+ read: (v) => v,
148
+ write: (v) => String(v)
149
+ },
150
+ string: {
151
+ read: (v) => v,
152
+ write: (v) => String(v)
153
+ },
154
+ map: {
155
+ read: (v) => new Map(JSON.parse(v)),
156
+ write: (v) => JSON.stringify(Array.from(v.entries()))
157
+ },
158
+ set: {
159
+ read: (v) => new Set(JSON.parse(v)),
160
+ write: (v) => JSON.stringify(Array.from(v.entries()))
161
+ }
162
+ };
163
+ function useStorage(key, initialValue, storage = getSSRHandler("getDefaultStorage", () => {
164
+ var _a;
165
+ return (_a = defaultWindow) == null ? void 0 : _a.localStorage;
166
+ })(), options = {}) {
167
+ var _a;
168
+ const {
169
+ flush = "pre",
170
+ deep = true,
171
+ listenToStorageChanges = true,
172
+ writeDefaults = true,
173
+ shallow,
174
+ window = defaultWindow,
175
+ eventFilter,
176
+ onError = (e) => {
177
+ console.error(e);
178
+ }
179
+ } = options;
180
+ const rawInit = unref(initialValue);
181
+ const type = guessSerializerType(rawInit);
182
+ const data = (shallow ? shallowRef : ref)(initialValue);
183
+ const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
184
+ function read(event) {
185
+ if (!storage || event && event.key !== key)
186
+ return;
187
+ try {
188
+ const rawValue = event ? event.newValue : storage.getItem(key);
189
+ if (rawValue == null) {
190
+ data.value = rawInit;
191
+ if (writeDefaults && rawInit !== null)
192
+ storage.setItem(key, serializer.write(rawInit));
193
+ } else if (typeof rawValue !== "string") {
194
+ data.value = rawValue;
195
+ } else {
196
+ data.value = serializer.read(rawValue);
197
+ }
198
+ } catch (e) {
199
+ onError(e);
200
+ }
201
+ }
202
+ read();
203
+ if (window && listenToStorageChanges)
204
+ useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
205
+ if (storage) {
206
+ watchWithFilter(data, () => {
207
+ try {
208
+ if (data.value == null)
209
+ storage.removeItem(key);
210
+ else
211
+ storage.setItem(key, serializer.write(data.value));
212
+ } catch (e) {
213
+ onError(e);
214
+ }
215
+ }, {
216
+ flush,
217
+ deep,
218
+ eventFilter
219
+ });
220
+ }
221
+ return data;
222
+ }
223
+
224
+ function useMediaQuery(query, options = {}) {
225
+ const { window = defaultWindow } = options;
226
+ let mediaQuery;
227
+ const matches = ref(false);
228
+ const update = () => {
229
+ if (!window)
230
+ return;
231
+ if (!mediaQuery)
232
+ mediaQuery = window.matchMedia(query);
233
+ matches.value = mediaQuery.matches;
234
+ };
235
+ tryOnMounted(() => {
236
+ update();
237
+ if (!mediaQuery)
238
+ return;
239
+ if ("addEventListener" in mediaQuery)
240
+ mediaQuery.addEventListener("change", update);
241
+ else
242
+ mediaQuery.addListener(update);
243
+ tryOnScopeDispose(() => {
244
+ if ("removeEventListener" in update)
245
+ mediaQuery.removeEventListener("change", update);
246
+ else
247
+ mediaQuery.removeListener(update);
248
+ });
249
+ });
250
+ return matches;
251
+ }
252
+
253
+ function usePreferredDark(options) {
254
+ return useMediaQuery("(prefers-color-scheme: dark)", options);
255
+ }
256
+
257
+ var __defProp$7 = Object.defineProperty;
258
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
259
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
260
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
261
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
262
+ var __spreadValues$7 = (a, b) => {
263
+ for (var prop in b || (b = {}))
264
+ if (__hasOwnProp$7.call(b, prop))
265
+ __defNormalProp$7(a, prop, b[prop]);
266
+ if (__getOwnPropSymbols$7)
267
+ for (var prop of __getOwnPropSymbols$7(b)) {
268
+ if (__propIsEnum$7.call(b, prop))
269
+ __defNormalProp$7(a, prop, b[prop]);
270
+ }
271
+ return a;
272
+ };
273
+ function useColorMode(options = {}) {
274
+ const {
275
+ selector = "html",
276
+ attribute = "class",
277
+ window = defaultWindow,
278
+ storage = getSSRHandler("getDefaultStorage", () => {
279
+ var _a;
280
+ return (_a = defaultWindow) == null ? void 0 : _a.localStorage;
281
+ })(),
282
+ storageKey = "vueuse-color-scheme",
283
+ listenToStorageChanges = true,
284
+ storageRef
285
+ } = options;
286
+ const modes = __spreadValues$7({
287
+ auto: "",
288
+ light: "light",
289
+ dark: "dark"
290
+ }, options.modes || {});
291
+ const preferredDark = usePreferredDark({ window });
292
+ const preferredMode = computed(() => preferredDark.value ? "dark" : "light");
293
+ const store = storageRef || (storageKey == null ? ref("auto") : useStorage(storageKey, "auto", storage, { window, listenToStorageChanges }));
294
+ const state = computed({
295
+ get() {
296
+ return store.value === "auto" ? preferredMode.value : store.value;
297
+ },
298
+ set(v) {
299
+ store.value = v;
300
+ }
301
+ });
302
+ const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector2, attribute2, value) => {
303
+ const el = window == null ? void 0 : window.document.querySelector(selector2);
304
+ if (!el)
305
+ return;
306
+ if (attribute2 === "class") {
307
+ const current = value.split(/\s/g);
308
+ Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
309
+ if (current.includes(v))
310
+ el.classList.add(v);
311
+ else
312
+ el.classList.remove(v);
313
+ });
314
+ } else {
315
+ el.setAttribute(attribute2, value);
316
+ }
317
+ });
318
+ function defaultOnChanged(mode) {
319
+ var _a;
320
+ updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);
321
+ }
322
+ function onChanged(mode) {
323
+ if (options.onChanged)
324
+ options.onChanged(mode, defaultOnChanged);
325
+ else
326
+ defaultOnChanged(mode);
327
+ }
328
+ watch(state, onChanged, { flush: "post", immediate: true });
329
+ tryOnMounted(() => onChanged(state.value));
330
+ return state;
331
+ }
332
+
333
+ const UseColorMode = defineComponent({
334
+ name: "UseColorMode",
335
+ props: ["selector", "attribute", "modes", "onChanged", "storageKey", "storage"],
336
+ setup(props, { slots }) {
337
+ const mode = useColorMode(props);
338
+ const data = reactive({
339
+ mode
340
+ });
341
+ return () => {
342
+ if (slots.default)
343
+ return slots.default(data);
344
+ };
345
+ }
346
+ });
347
+
122
348
  const UseDark = defineComponent({
123
349
  name: "UseDark",
124
350
  props: ["selector", "attribute", "valueDark", "valueLight", "onChanged", "storageKey", "storage"],
@@ -226,7 +452,7 @@ const UseDraggable = defineComponent({
226
452
  ],
227
453
  setup(props, { slots }) {
228
454
  const target = ref();
229
- const initialValue = props.storageKey ? useStorage(props.storageKey, unref(props.initialValue) || { x: 0, y: 0 }, isClient$1 ? props.storageType === "session" ? sessionStorage : localStorage : void 0) : props.initialValue || { x: 0, y: 0 };
455
+ const initialValue = props.storageKey ? useStorage$1(props.storageKey, unref(props.initialValue) || { x: 0, y: 0 }, isClient$1 ? props.storageType === "session" ? sessionStorage : localStorage : void 0) : props.initialValue || { x: 0, y: 0 };
230
456
  const data = reactive(useDraggable(target, __spreadProps$5(__spreadValues$6({}, props), {
231
457
  initialValue
232
458
  })));
@@ -509,7 +735,7 @@ const UsePreferredDark = defineComponent({
509
735
  name: "UsePreferredDark",
510
736
  setup(props, { slots }) {
511
737
  const data = reactive({
512
- prefersDark: usePreferredDark()
738
+ prefersDark: usePreferredDark$1()
513
739
  });
514
740
  return () => {
515
741
  if (slots.default)
@@ -531,6 +757,24 @@ const UsePreferredLanguages = defineComponent({
531
757
  }
532
758
  });
533
759
 
760
+ function useCssVar(prop, target, { window = defaultWindow } = {}) {
761
+ const variable = ref("");
762
+ const elRef = computed(() => {
763
+ var _a;
764
+ return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);
765
+ });
766
+ watch(elRef, (el) => {
767
+ if (el && window)
768
+ variable.value = window.getComputedStyle(el).getPropertyValue(prop);
769
+ }, { immediate: true });
770
+ watch(variable, (val) => {
771
+ var _a;
772
+ if ((_a = elRef.value) == null ? void 0 : _a.style)
773
+ elRef.value.style.setProperty(prop, val);
774
+ });
775
+ return variable;
776
+ }
777
+
534
778
  const topVarName = "--vueuse-safe-area-top";
535
779
  const rightVarName = "--vueuse-safe-area-right";
536
780
  const bottomVarName = "--vueuse-safe-area-bottom";
@@ -540,7 +784,7 @@ function useScreenSafeArea() {
540
784
  const right = ref("");
541
785
  const bottom = ref("");
542
786
  const left = ref("");
543
- if (isClient$1) {
787
+ if (isClient) {
544
788
  const topCssVar = useCssVar(topVarName);
545
789
  const rightCssVar = useCssVar(rightVarName);
546
790
  const bottomCssVar = useCssVar(bottomVarName);
@@ -550,7 +794,7 @@ function useScreenSafeArea() {
550
794
  bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
551
795
  leftCssVar.value = "env(safe-area-inset-left, 0px)";
552
796
  update();
553
- useEventListener$1("resize", useDebounceFn(update));
797
+ useEventListener("resize", useDebounceFn(update));
554
798
  }
555
799
  function update() {
556
800
  top.value = getValue(topVarName);
@@ -627,7 +871,7 @@ const UseTimeAgo = defineComponent({
627
871
  name: "UseTimeAgo",
628
872
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
629
873
  setup(props, { slots }) {
630
- const { time } = toRefs(props);
874
+ const time = toRef(props, "time");
631
875
  const data = reactive(useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
632
876
  return () => {
633
877
  if (slots.default)
@@ -725,4 +969,4 @@ const UseWindowSize = defineComponent({
725
969
  }
726
970
  });
727
971
 
728
- export { OnClickOutside, UseActiveElement, UseBattery, UseBrowserLocation, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseOnline, UsePageLeave, UsePointer, UsePreferredColorScheme, UsePreferredDark, UsePreferredLanguages, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, VOnClickOutside };
972
+ export { OnClickOutside, UseActiveElement, UseBattery, UseBrowserLocation, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseOnline, UsePageLeave, UsePointer, UsePreferredColorScheme, UsePreferredDark, UsePreferredLanguages, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, VOnClickOutside };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vueuse/components",
3
- "version": "7.3.0",
3
+ "version": "7.4.3",
4
4
  "description": "Renderless components for VueUse",
5
5
  "keywords": [
6
6
  "vue",
@@ -33,8 +33,8 @@
33
33
  },
34
34
  "homepage": "https://github.com/vueuse/vueuse/tree/main/packages/components#readme",
35
35
  "dependencies": {
36
- "@vueuse/core": "7.3.0",
37
- "@vueuse/shared": "7.3.0",
36
+ "@vueuse/core": "7.4.3",
37
+ "@vueuse/shared": "7.4.3",
38
38
  "vue-demi": "*"
39
39
  }
40
40
  }