@vueuse/components 7.2.1 → 7.4.1

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,79 @@ const UsePreferredLanguages = vueDemi.defineComponent({
535
761
  }
536
762
  });
537
763
 
764
+ const topVarName = "--vueuse-safe-area-top";
765
+ const rightVarName = "--vueuse-safe-area-right";
766
+ const bottomVarName = "--vueuse-safe-area-bottom";
767
+ const leftVarName = "--vueuse-safe-area-left";
768
+ function useScreenSafeArea() {
769
+ const top = vueDemi.ref("");
770
+ const right = vueDemi.ref("");
771
+ const bottom = vueDemi.ref("");
772
+ const left = vueDemi.ref("");
773
+ if (core.isClient) {
774
+ const topCssVar = core.useCssVar(topVarName);
775
+ const rightCssVar = core.useCssVar(rightVarName);
776
+ const bottomCssVar = core.useCssVar(bottomVarName);
777
+ const leftCssVar = core.useCssVar(leftVarName);
778
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
779
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
780
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
781
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
782
+ update();
783
+ core.useEventListener("resize", core.useDebounceFn(update));
784
+ }
785
+ function update() {
786
+ top.value = getValue(topVarName);
787
+ right.value = getValue(rightVarName);
788
+ bottom.value = getValue(bottomVarName);
789
+ left.value = getValue(leftVarName);
790
+ }
791
+ return {
792
+ top,
793
+ right,
794
+ bottom,
795
+ left,
796
+ update
797
+ };
798
+ }
799
+ function getValue(position) {
800
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
801
+ }
802
+
803
+ const UseScreenSafeArea = vueDemi.defineComponent({
804
+ name: "UseScreenSafeArea",
805
+ props: {
806
+ top: Boolean,
807
+ right: Boolean,
808
+ bottom: Boolean,
809
+ left: Boolean
810
+ },
811
+ setup(props, { slots }) {
812
+ const {
813
+ top,
814
+ right,
815
+ bottom,
816
+ left
817
+ } = useScreenSafeArea();
818
+ return () => {
819
+ if (slots.default) {
820
+ return vueDemi.h("div", {
821
+ style: {
822
+ paddingTop: props.top ? top.value : "",
823
+ paddingRight: props.right ? right.value : "",
824
+ paddingBottom: props.bottom ? bottom.value : "",
825
+ paddingLeft: props.left ? left.value : "",
826
+ boxSizing: "border-box",
827
+ maxHeight: "100vh",
828
+ maxWidth: "100vw",
829
+ overflow: "auto"
830
+ }
831
+ }, slots.default());
832
+ }
833
+ };
834
+ }
835
+ });
836
+
538
837
  var __defProp$2 = Object.defineProperty;
539
838
  var __defProps$1 = Object.defineProperties;
540
839
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -558,7 +857,7 @@ const UseTimeAgo = vueDemi.defineComponent({
558
857
  name: "UseTimeAgo",
559
858
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
560
859
  setup(props, { slots }) {
561
- const { time } = vueDemi.toRefs(props);
860
+ const time = vueDemi.toRef(props, "time");
562
861
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
563
862
  return () => {
564
863
  if (slots.default)
@@ -660,6 +959,7 @@ exports.OnClickOutside = OnClickOutside;
660
959
  exports.UseActiveElement = UseActiveElement;
661
960
  exports.UseBattery = UseBattery;
662
961
  exports.UseBrowserLocation = UseBrowserLocation;
962
+ exports.UseColorMode = UseColorMode;
663
963
  exports.UseDark = UseDark;
664
964
  exports.UseDeviceMotion = UseDeviceMotion;
665
965
  exports.UseDeviceOrientation = UseDeviceOrientation;
@@ -685,6 +985,7 @@ exports.UsePointer = UsePointer;
685
985
  exports.UsePreferredColorScheme = UsePreferredColorScheme;
686
986
  exports.UsePreferredDark = UsePreferredDark;
687
987
  exports.UsePreferredLanguages = UsePreferredLanguages;
988
+ exports.UseScreenSafeArea = UseScreenSafeArea;
688
989
  exports.UseTimeAgo = UseTimeAgo;
689
990
  exports.UseTimestamp = UseTimestamp;
690
991
  exports.UseVirtualList = UseVirtualList;
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, {
@@ -143,7 +239,31 @@ declare const UsePreferredLanguages: vue_demi.DefineComponent<{}, () => vue_demi
143
239
  [key: string]: any;
144
240
  }>[] | undefined, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<{} & {} & {}>, {}>;
145
241
 
146
- interface UseTimeAgoComponentOptions extends Omit<TimeAgoOptions<true>, 'controls'> {
242
+ declare const UseScreenSafeArea: vue_demi.DefineComponent<{
243
+ top: BooleanConstructor;
244
+ right: BooleanConstructor;
245
+ bottom: BooleanConstructor;
246
+ left: BooleanConstructor;
247
+ }, () => vue_demi.VNode<vue_demi.RendererNode, vue_demi.RendererElement, {
248
+ [key: string]: any;
249
+ }> | undefined, unknown, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, Record<string, any>, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<{
250
+ top?: unknown;
251
+ right?: unknown;
252
+ bottom?: unknown;
253
+ left?: unknown;
254
+ } & {
255
+ left: boolean;
256
+ right: boolean;
257
+ top: boolean;
258
+ bottom: boolean;
259
+ } & {}>, {
260
+ left: boolean;
261
+ right: boolean;
262
+ top: boolean;
263
+ bottom: boolean;
264
+ }>;
265
+
266
+ interface UseTimeAgoComponentOptions extends Omit<UseTimeAgoOptions<true>, 'controls'> {
147
267
  time: MaybeRef<Date | number | string>;
148
268
  }
149
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>, {}>;
@@ -178,4 +298,4 @@ declare const UseWindowFocus: vue_demi.DefineComponent<{}, () => vue_demi.VNode<
178
298
 
179
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>, {}>;
180
300
 
181
- 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, 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,79 @@
591
817
  }
592
818
  });
593
819
 
820
+ const topVarName = "--vueuse-safe-area-top";
821
+ const rightVarName = "--vueuse-safe-area-right";
822
+ const bottomVarName = "--vueuse-safe-area-bottom";
823
+ const leftVarName = "--vueuse-safe-area-left";
824
+ function useScreenSafeArea() {
825
+ const top = vueDemi.ref("");
826
+ const right = vueDemi.ref("");
827
+ const bottom = vueDemi.ref("");
828
+ const left = vueDemi.ref("");
829
+ if (core.isClient) {
830
+ const topCssVar = core.useCssVar(topVarName);
831
+ const rightCssVar = core.useCssVar(rightVarName);
832
+ const bottomCssVar = core.useCssVar(bottomVarName);
833
+ const leftCssVar = core.useCssVar(leftVarName);
834
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
835
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
836
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
837
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
838
+ update();
839
+ core.useEventListener("resize", core.useDebounceFn(update));
840
+ }
841
+ function update() {
842
+ top.value = getValue(topVarName);
843
+ right.value = getValue(rightVarName);
844
+ bottom.value = getValue(bottomVarName);
845
+ left.value = getValue(leftVarName);
846
+ }
847
+ return {
848
+ top,
849
+ right,
850
+ bottom,
851
+ left,
852
+ update
853
+ };
854
+ }
855
+ function getValue(position) {
856
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
857
+ }
858
+
859
+ const UseScreenSafeArea = vueDemi.defineComponent({
860
+ name: "UseScreenSafeArea",
861
+ props: {
862
+ top: Boolean,
863
+ right: Boolean,
864
+ bottom: Boolean,
865
+ left: Boolean
866
+ },
867
+ setup(props, { slots }) {
868
+ const {
869
+ top,
870
+ right,
871
+ bottom,
872
+ left
873
+ } = useScreenSafeArea();
874
+ return () => {
875
+ if (slots.default) {
876
+ return vueDemi.h("div", {
877
+ style: {
878
+ paddingTop: props.top ? top.value : "",
879
+ paddingRight: props.right ? right.value : "",
880
+ paddingBottom: props.bottom ? bottom.value : "",
881
+ paddingLeft: props.left ? left.value : "",
882
+ boxSizing: "border-box",
883
+ maxHeight: "100vh",
884
+ maxWidth: "100vw",
885
+ overflow: "auto"
886
+ }
887
+ }, slots.default());
888
+ }
889
+ };
890
+ }
891
+ });
892
+
594
893
  var __defProp$2 = Object.defineProperty;
595
894
  var __defProps$1 = Object.defineProperties;
596
895
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -614,7 +913,7 @@
614
913
  name: "UseTimeAgo",
615
914
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
616
915
  setup(props, { slots }) {
617
- const { time } = vueDemi.toRefs(props);
916
+ const time = vueDemi.toRef(props, "time");
618
917
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
619
918
  return () => {
620
919
  if (slots.default)
@@ -716,6 +1015,7 @@
716
1015
  exports.UseActiveElement = UseActiveElement;
717
1016
  exports.UseBattery = UseBattery;
718
1017
  exports.UseBrowserLocation = UseBrowserLocation;
1018
+ exports.UseColorMode = UseColorMode;
719
1019
  exports.UseDark = UseDark;
720
1020
  exports.UseDeviceMotion = UseDeviceMotion;
721
1021
  exports.UseDeviceOrientation = UseDeviceOrientation;
@@ -741,6 +1041,7 @@
741
1041
  exports.UsePreferredColorScheme = UsePreferredColorScheme;
742
1042
  exports.UsePreferredDark = UsePreferredDark;
743
1043
  exports.UsePreferredLanguages = UsePreferredLanguages;
1044
+ exports.UseScreenSafeArea = UseScreenSafeArea;
744
1045
  exports.UseTimeAgo = UseTimeAgo;
745
1046
  exports.UseTimestamp = UseTimestamp;
746
1047
  exports.UseVirtualList = UseVirtualList;
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 f=s.VueCompositionAPI;if(f){for(var c in f)n[c]=f[c];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 c in a)n[c]=a[c];n.isVue2=!1,n.isVue3=!0,n.install=function(){},n.Vue=a,n.Vue2=void 0,n.version=a.version,n.set=function(u,p,d){return Array.isArray(u)?(u.length=Math.max(u.length,p),u.splice(p,1,d),d):(u[p]=d,d)},n.del=function(u,p){if(Array.isArray(u)){u.splice(p,1);return}delete u[p]}}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,f){"use strict";const c=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 u(r){var e;const t=n.unref(r);return(e=t==null?void 0:t.$el)!=null?e:t}const p=f.isClient?window:void 0;function d(...r){let e,t,o,i;if(f.isString(r[0])?([t,o,i]=r,e=p):[e,t,o,i]=r,!e)return f.noop;let _=f.noop;const P=n.watch(()=>n.unref(e),l=>{_(),!!l&&(l.addEventListener(t,o,i),_=()=>{l.removeEventListener(t,o,i),_=f.noop})},{immediate:!0,flush:"post"}),g=()=>{P(),_()};return f.tryOnScopeDispose(g),g}function M(r,e,t={}){const{window:o=p}=t;if(!o)return;const i=n.ref(!0),P=[d(o,"click",l=>{const O=u(r);!O||O===l.target||l.composedPath().includes(O)||!i.value||e(l)},{passive:!0,capture:!0}),d(o,"pointerdown",l=>{const O=u(r);i.value=!!O&&!l.composedPath().includes(O)},{passive:!0})];return()=>P.forEach(l=>l())}const N=(r,e)=>{M(r,e.value)},A=n.defineComponent({name:"UseActiveElement",setup(r,{slots:e}){const t=n.reactive({element:a.useActiveElement()});return()=>{if(e.default)return e.default(t)}}}),B=n.defineComponent({name:"UseBattery",setup(r,{slots:e}){const t=n.reactive(a.useBattery(r));return()=>{if(e.default)return e.default(t)}}}),T=n.defineComponent({name:"UseBrowserLocation",setup(r,{slots:e}){const t=n.reactive(a.useBrowserLocation());return()=>{if(e.default)return e.default(t)}}}),F=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:f.useToggle(t)});return()=>{if(e.default)return e.default(o)}}}),W=n.defineComponent({name:"UseDeviceMotion",setup(r,{slots:e}){const t=n.reactive(a.useDeviceMotion());return()=>{if(e.default)return e.default(t)}}}),R=n.defineComponent({name:"UseDeviceOrientation",setup(r,{slots:e}){const t=n.reactive(a.useDeviceOrientation());return()=>{if(e.default)return e.default(t)}}}),z=n.defineComponent({name:"UseDevicePixelRatio",setup(r,{slots:e}){const t=n.reactive({pixelRatio:a.useDevicePixelRatio()});return()=>{if(e.default)return e.default(t)}}}),k=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)}}}),G=n.defineComponent({name:"UseDocumentVisibility",setup(r,{slots:e}){const t=n.reactive({visibility:a.useDocumentVisibility()});return()=>{if(e.default)return e.default(t)}}});var K=Object.defineProperty,H=Object.defineProperties,q=Object.getOwnPropertyDescriptors,U=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,m=(r,e,t)=>e in r?K(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,X=(r,e)=>{for(var t in e||(e={}))J.call(e,t)&&m(r,t,e[t]);if(U)for(var t of U(e))Q.call(e,t)&&m(r,t,e[t]);return r},Y=(r,e)=>H(r,q(e));const Z=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,Y(X({},r),{initialValue:o})));return()=>{if(e.default)return n.h(r.as||"div",{ref:t,style:`touch-action:none;${i.style}`},e.default(i))}}}),x=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))}}}),D=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))}}}),ee=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))}}}),te=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)}}}),re=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))}}}),ne=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)}}}),ae=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)}}}),se=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)}}}),oe=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 ie=Object.defineProperty,ue=Object.defineProperties,fe=Object.getOwnPropertyDescriptors,v=Object.getOwnPropertySymbols,le=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,y=(r,e,t)=>e in r?ie(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ce=(r,e)=>{for(var t in e||(e={}))le.call(e,t)&&y(r,t,e[t]);if(v)for(var t of v(e))pe.call(e,t)&&y(r,t,e[t]);return r},de=(r,e)=>ue(r,fe(e));const _e=n.defineComponent({name:"UseMousePressed",props:["touch","initialValue","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useMousePressed(de(ce({},r),{target:t})));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),Pe=n.defineComponent({name:"UseNetwork",setup(r,{slots:e}){const t=n.reactive(a.useNetwork());return()=>{if(e.default)return e.default(t)}}});var Oe=Object.defineProperty,ge=Object.defineProperties,Ue=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,me=Object.prototype.hasOwnProperty,ve=Object.prototype.propertyIsEnumerable,h=(r,e,t)=>e in r?Oe(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ye=(r,e)=>{for(var t in e||(e={}))me.call(e,t)&&h(r,t,e[t]);if(w)for(var t of w(e))ve.call(e,t)&&h(r,t,e[t]);return r},we=(r,e)=>ge(r,Ue(e));const he=n.defineComponent({name:"UseNow",props:["interval"],setup(r,{slots:e}){const t=n.reactive(a.useNow(we(ye({},r),{controls:!0})));return()=>{if(e.default)return e.default(t)}}}),$e=n.defineComponent({name:"UseOnline",setup(r,{slots:e}){const t=n.reactive({isOnline:a.useOnline()});return()=>{if(e.default)return e.default(t)}}}),be=n.defineComponent({name:"UsePageLeave",setup(r,{slots:e}){const t=n.reactive({isLeft:a.usePageLeave()});return()=>{if(e.default)return e.default(t)}}});var Ve=Object.defineProperty,Ce=Object.defineProperties,Ee=Object.getOwnPropertyDescriptors,$=Object.getOwnPropertySymbols,Se=Object.prototype.hasOwnProperty,je=Object.prototype.propertyIsEnumerable,b=(r,e,t)=>e in r?Ve(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Le=(r,e)=>{for(var t in e||(e={}))Se.call(e,t)&&b(r,t,e[t]);if($)for(var t of $(e))je.call(e,t)&&b(r,t,e[t]);return r},Ie=(r,e)=>Ce(r,Ee(e));const Me=n.defineComponent({name:"UsePointer",props:["pointerTypes","initialValue","target"],setup(r,{slots:e}){const t=n.ref(null),o=n.reactive(a.usePointer(Ie(Le({},r),{target:r.target==="self"?t:p})));return()=>{if(e.default)return e.default(o,{ref:t})}}}),Ne=n.defineComponent({name:"UsePreferredColorScheme",setup(r,{slots:e}){const t=n.reactive({colorScheme:a.usePreferredColorScheme()});return()=>{if(e.default)return e.default(t)}}}),Ae=n.defineComponent({name:"UsePreferredDark",setup(r,{slots:e}){const t=n.reactive({prefersDark:a.usePreferredDark()});return()=>{if(e.default)return e.default(t)}}}),Be=n.defineComponent({name:"UsePreferredLanguages",setup(r,{slots:e}){const t=n.reactive({languages:a.usePreferredLanguages()});return()=>{if(e.default)return e.default(t)}}});var Te=Object.defineProperty,Fe=Object.defineProperties,We=Object.getOwnPropertyDescriptors,V=Object.getOwnPropertySymbols,Re=Object.prototype.hasOwnProperty,ze=Object.prototype.propertyIsEnumerable,C=(r,e,t)=>e in r?Te(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ke=(r,e)=>{for(var t in e||(e={}))Re.call(e,t)&&C(r,t,e[t]);if(V)for(var t of V(e))ze.call(e,t)&&C(r,t,e[t]);return r},Ge=(r,e)=>Fe(r,We(e));const Ke=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,Ge(ke({},r),{controls:!0})));return()=>{if(e.default)return e.default(o)}}});var He=Object.defineProperty,qe=Object.defineProperties,Je=Object.getOwnPropertyDescriptors,E=Object.getOwnPropertySymbols,Qe=Object.prototype.hasOwnProperty,Xe=Object.prototype.propertyIsEnumerable,S=(r,e,t)=>e in r?He(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Ye=(r,e)=>{for(var t in e||(e={}))Qe.call(e,t)&&S(r,t,e[t]);if(E)for(var t of E(e))Xe.call(e,t)&&S(r,t,e[t]);return r},Ze=(r,e)=>qe(r,Je(e));const xe=n.defineComponent({name:"UseTimestamp",props:["immediate","interval","offset"],setup(r,{slots:e}){const t=n.reactive(a.useTimestamp(Ze(Ye({},r),{controls:!0})));return()=>{if(e.default)return e.default(t)}}});var De=Object.defineProperty,j=Object.getOwnPropertySymbols,et=Object.prototype.hasOwnProperty,tt=Object.prototype.propertyIsEnumerable,L=(r,e,t)=>e in r?De(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,I=(r,e)=>{for(var t in e||(e={}))et.call(e,t)&&L(r,t,e[t]);if(j)for(var t of j(e))tt.call(e,t)&&L(r,t,e[t]);return r};const rt=n.defineComponent({name:"UseVirtualList",props:["list","options","height"],setup(r,{slots:e}){const{list:t}=n.toRefs(r),{list:o,containerProps:i,wrapperProps:_}=a.useVirtualList(t,r.options);return i.style.height=r.height||"300px",()=>n.h("div",I({},i),[n.h("div",I({},_.value),o.value.map(P=>n.h("div",{style:{overFlow:"hidden",height:P.height}},e.default?e.default(P):"Please set content!")))])}}),nt=n.defineComponent({name:"UseWindowFocus",setup(r,{slots:e}){const t=n.reactive({focused:a.useWindowFocus()});return()=>{if(e.default)return e.default(t)}}}),at=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=c,s.UseActiveElement=A,s.UseBattery=B,s.UseBrowserLocation=T,s.UseDark=F,s.UseDeviceMotion=W,s.UseDeviceOrientation=R,s.UseDevicePixelRatio=z,s.UseDevicesList=k,s.UseDocumentVisibility=G,s.UseDraggable=Z,s.UseElementBounding=x,s.UseElementSize=D,s.UseElementVisibility=ee,s.UseEyeDropper=te,s.UseFullscreen=re,s.UseGeolocation=ne,s.UseIdle=ae,s.UseMouse=se,s.UseMouseInElement=oe,s.UseMousePressed=_e,s.UseNetwork=Pe,s.UseNow=he,s.UseOnline=$e,s.UsePageLeave=be,s.UsePointer=Me,s.UsePreferredColorScheme=Ne,s.UsePreferredDark=Ae,s.UsePreferredLanguages=Be,s.UseTimeAgo=Ke,s.UseTimestamp=xe,s.UseVirtualList=rt,s.UseWindowFocus=nt,s.UseWindowSize=at,s.VOnClickOutside=N,Object.defineProperty(s,"__esModule",{value:!0})}(this.VueUse=this.VueUse||{},VueDemi,VueUse,VueUse);
1
+ (function(o){if(!o.VueDemi){var n={},s=o.Vue;if(s)if(s.version.slice(0,2)==="2."){var c=o.VueCompositionAPI;if(c){for(var U in c)n[U]=c[U];n.isVue2=!0,n.isVue3=!1,n.install=function(){},n.Vue=s,n.Vue2=s,n.version=s.version}else console.error("[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.")}else if(s.version.slice(0,2)==="3."){for(var U in s)n[U]=s[U];n.isVue2=!1,n.isVue3=!0,n.install=function(){},n.Vue=s,n.Vue2=void 0,n.version=s.version,n.set=function(g,d,y){return Array.isArray(g)?(g.length=Math.max(g.length,d),g.splice(d,1,y),y):(g[d]=y,y)},n.del=function(g,d){if(Array.isArray(g)){g.splice(d,1);return}delete g[d]}}else console.error("[vue-demi] Vue version "+s.version+" is unsupported.");else console.error("[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.");o.VueDemi=n}})(window),function(o,n,s,c){"use strict";const U=n.defineComponent({name:"OnClickOutside",props:["as"],emits:["trigger"],setup(t,{slots:e,emit:r}){const a=n.ref();return s.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 d=c.isClient?window:void 0;function y(...t){let e,r,a,i;if(c.isString(t[0])?([r,a,i]=t,e=d):[e,r,a,i]=t,!e)return c.noop;let u=c.noop;const _=n.watch(()=>n.unref(e),l=>{u(),!!l&&(l.addEventListener(r,a,i),u=()=>{l.removeEventListener(r,a,i),u=c.noop})},{immediate:!0,flush:"post"}),P=()=>{_(),u()};return c.tryOnScopeDispose(P),P}function D(t,e,r={}){const{window:a=d}=r;if(!a)return;const i=n.ref(!0),_=[y(a,"click",l=>{const v=g(t);!v||v===l.target||l.composedPath().includes(v)||!i.value||e(l)},{passive:!0,capture:!0}),y(a,"pointerdown",l=>{const v=g(t);i.value=!!v&&!l.composedPath().includes(v)},{passive:!0})];return()=>_.forEach(l=>l())}const ee=(t,e)=>{D(t,e.value)},te=n.defineComponent({name:"UseActiveElement",setup(t,{slots:e}){const r=n.reactive({element:s.useActiveElement()});return()=>{if(e.default)return e.default(r)}}}),re=n.defineComponent({name:"UseBattery",setup(t,{slots:e}){const r=n.reactive(s.useBattery(t));return()=>{if(e.default)return e.default(r)}}}),ne=n.defineComponent({name:"UseBrowserLocation",setup(t,{slots:e}){const r=n.reactive(s.useBrowserLocation());return()=>{if(e.default)return e.default(r)}}}),L="__vueuse_ssr_handlers__";globalThis[L]=globalThis[L]||{};const ae=globalThis[L];function j(t,e){return ae[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 oe={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 ie(t,e,r=j("getDefaultStorage",()=>{var i;return(i=d)==null?void 0:i.localStorage})(),a={}){var i;const{flush:u="pre",deep:_=!0,listenToStorageChanges:P=!0,writeDefaults:l=!0,shallow:v,window:$=d,eventFilter:C,onError:w=p=>{console.error(p)}}=a,b=n.unref(e),E=se(b),O=(v?n.shallowRef:n.ref)(e),f=(i=a.serializer)!=null?i:oe[E];function h(p){if(!(!r||p&&p.key!==t))try{const m=p?p.newValue:r.getItem(t);m==null?(O.value=b,l&&b!==null&&r.setItem(t,f.write(b))):typeof m!="string"?O.value=m:O.value=f.read(m)}catch(m){w(m)}}return h(),$&&P&&y($,"storage",p=>setTimeout(()=>h(p),0)),r&&c.watchWithFilter(O,()=>{try{O.value==null?r.removeItem(t):r.setItem(t,f.write(O.value))}catch(p){w(p)}},{flush:u,deep:_,eventFilter:C}),O}function ue(t,e={}){const{window:r=d}=e;let a;const i=n.ref(!1),u=()=>{!r||(a||(a=r.matchMedia(t)),i.value=a.matches)};return c.tryOnMounted(()=>{u(),!!a&&("addEventListener"in a?a.addEventListener("change",u):a.addListener(u),c.tryOnScopeDispose(()=>{"removeEventListener"in u?a.removeEventListener("change",u):a.removeListener(u)}))}),i}function le(t){return ue("(prefers-color-scheme: dark)",t)}var fe=Object.defineProperty,M=Object.getOwnPropertySymbols,ce=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable,N=(t,e,r)=>e in t?fe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,pe=(t,e)=>{for(var r in e||(e={}))ce.call(e,r)&&N(t,r,e[r]);if(M)for(var r of M(e))de.call(e,r)&&N(t,r,e[r]);return t};function ge(t={}){const{selector:e="html",attribute:r="class",window:a=d,storage:i=j("getDefaultStorage",()=>{var f;return(f=d)==null?void 0:f.localStorage})(),storageKey:u="vueuse-color-scheme",listenToStorageChanges:_=!0,storageRef:P}=t,l=pe({auto:"",light:"light",dark:"dark"},t.modes||{}),v=le({window:a}),$=n.computed(()=>v.value?"dark":"light"),C=P||(u==null?n.ref("auto"):ie(u,"auto",i,{window:a,listenToStorageChanges:_})),w=n.computed({get(){return C.value==="auto"?$.value:C.value},set(f){C.value=f}}),b=j("updateHTMLAttrs",(f,h,p)=>{const m=a==null?void 0:a.document.querySelector(f);if(!!m)if(h==="class"){const zt=p.split(/\s/g);Object.values(l).flatMap(S=>(S||"").split(/\s/g)).filter(Boolean).forEach(S=>{zt.includes(S)?m.classList.add(S):m.classList.remove(S)})}else m.setAttribute(h,p)});function E(f){var h;b(e,r,(h=l[f])!=null?h:f)}function O(f){t.onChanged?t.onChanged(f,E):E(f)}return n.watch(w,O,{flush:"post",immediate:!0}),c.tryOnMounted(()=>O(w.value)),w}const _e=n.defineComponent({name:"UseColorMode",props:["selector","attribute","modes","onChanged","storageKey","storage"],setup(t,{slots:e}){const r=ge(t),a=n.reactive({mode:r});return()=>{if(e.default)return e.default(a)}}}),me=n.defineComponent({name:"UseDark",props:["selector","attribute","valueDark","valueLight","onChanged","storageKey","storage"],setup(t,{slots:e}){const r=s.useDark(t),a=n.reactive({isDark:r,toggleDark:c.useToggle(r)});return()=>{if(e.default)return e.default(a)}}}),ve=n.defineComponent({name:"UseDeviceMotion",setup(t,{slots:e}){const r=n.reactive(s.useDeviceMotion());return()=>{if(e.default)return e.default(r)}}}),Oe=n.defineComponent({name:"UseDeviceOrientation",setup(t,{slots:e}){const r=n.reactive(s.useDeviceOrientation());return()=>{if(e.default)return e.default(r)}}}),Pe=n.defineComponent({name:"UseDevicePixelRatio",setup(t,{slots:e}){const r=n.reactive({pixelRatio:s.useDevicePixelRatio()});return()=>{if(e.default)return e.default(r)}}}),ye=n.defineComponent({name:"UseDevicesList",props:["onUpdated","requestPermissions","constraints"],setup(t,{slots:e}){const r=n.reactive(s.useDevicesList(t));return()=>{if(e.default)return e.default(r)}}}),he=n.defineComponent({name:"UseDocumentVisibility",setup(t,{slots:e}){const r=n.reactive({visibility:s.useDocumentVisibility()});return()=>{if(e.default)return e.default(r)}}});var Ue=Object.defineProperty,we=Object.defineProperties,be=Object.getOwnPropertyDescriptors,A=Object.getOwnPropertySymbols,Ce=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable,T=(t,e,r)=>e in t?Ue(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Ve=(t,e)=>{for(var r in e||(e={}))Ce.call(e,r)&&T(t,r,e[r]);if(A)for(var r of A(e))Se.call(e,r)&&T(t,r,e[r]);return t},$e=(t,e)=>we(t,be(e));const Ee=n.defineComponent({name:"UseDraggable",props:["storageKey","initialValue","exact","preventDefault","pointerTypes","as"],setup(t,{slots:e}){const r=n.ref(),a=t.storageKey?s.useStorage(t.storageKey,n.unref(t.initialValue)||{x:0,y:0},s.isClient?t.storageType==="session"?sessionStorage:localStorage:void 0):t.initialValue||{x:0,y:0},i=n.reactive(s.useDraggable(r,$e(Ve({},t),{initialValue:a})));return()=>{if(e.default)return n.h(t.as||"div",{ref:r,style:`touch-action:none;${i.style}`},e.default(i))}}}),Le=n.defineComponent({name:"UseElementBounding",props:["box","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(s.useElementBounding(r));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),je=n.defineComponent({name:"UseElementSize",props:["width","height","box"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(s.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))}}}),Me=n.defineComponent({name:"UseElementVisibility",props:["as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive({isVisible:s.useElementVisibility(r)});return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Ne=n.defineComponent({name:"UseEyeDropper",props:{sRGBHex:String},setup(t,{slots:e}){const r=n.reactive(s.useEyeDropper());return()=>{if(e.default)return e.default(r)}}}),Ae=n.defineComponent({name:"UseFullscreen",props:["as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(s.useFullscreen(r));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Te=n.defineComponent({name:"UseGeolocation",props:["enableHighAccuracy","maximumAge","timeout","navigator"],setup(t,{slots:e}){const r=n.reactive(s.useGeolocation(t));return()=>{if(e.default)return e.default(r)}}}),Ie=n.defineComponent({name:"UseIdle",props:["timeout","events","listenForVisibilityChange","initialState"],setup(t,{slots:e}){const r=n.reactive(s.useIdle(t.timeout,t));return()=>{if(e.default)return e.default(r)}}}),Be=n.defineComponent({name:"UseMouse",props:["touch","resetOnTouchEnds","initialValue"],setup(t,{slots:e}){const r=n.reactive(s.useMouse(t));return()=>{if(e.default)return e.default(r)}}}),Fe=n.defineComponent({name:"UseMouseElement",props:["handleOutside","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(s.useMouseInElement(r,t));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}});var ze=Object.defineProperty,Re=Object.defineProperties,We=Object.getOwnPropertyDescriptors,I=Object.getOwnPropertySymbols,ke=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable,B=(t,e,r)=>e in t?ze(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Ke=(t,e)=>{for(var r in e||(e={}))ke.call(e,r)&&B(t,r,e[r]);if(I)for(var r of I(e))He.call(e,r)&&B(t,r,e[r]);return t},Je=(t,e)=>Re(t,We(e));const Ge=n.defineComponent({name:"UseMousePressed",props:["touch","initialValue","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(s.useMousePressed(Je(Ke({},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(s.useNetwork());return()=>{if(e.default)return e.default(r)}}});var Qe=Object.defineProperty,Xe=Object.defineProperties,Ye=Object.getOwnPropertyDescriptors,F=Object.getOwnPropertySymbols,Ze=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable,z=(t,e,r)=>e in t?Qe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,De=(t,e)=>{for(var r in e||(e={}))Ze.call(e,r)&&z(t,r,e[r]);if(F)for(var r of F(e))xe.call(e,r)&&z(t,r,e[r]);return t},et=(t,e)=>Xe(t,Ye(e));const tt=n.defineComponent({name:"UseNow",props:["interval"],setup(t,{slots:e}){const r=n.reactive(s.useNow(et(De({},t),{controls:!0})));return()=>{if(e.default)return e.default(r)}}}),rt=n.defineComponent({name:"UseOnline",setup(t,{slots:e}){const r=n.reactive({isOnline:s.useOnline()});return()=>{if(e.default)return e.default(r)}}}),nt=n.defineComponent({name:"UsePageLeave",setup(t,{slots:e}){const r=n.reactive({isLeft:s.usePageLeave()});return()=>{if(e.default)return e.default(r)}}});var at=Object.defineProperty,st=Object.defineProperties,ot=Object.getOwnPropertyDescriptors,R=Object.getOwnPropertySymbols,it=Object.prototype.hasOwnProperty,ut=Object.prototype.propertyIsEnumerable,W=(t,e,r)=>e in t?at(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,lt=(t,e)=>{for(var r in e||(e={}))it.call(e,r)&&W(t,r,e[r]);if(R)for(var r of R(e))ut.call(e,r)&&W(t,r,e[r]);return t},ft=(t,e)=>st(t,ot(e));const ct=n.defineComponent({name:"UsePointer",props:["pointerTypes","initialValue","target"],setup(t,{slots:e}){const r=n.ref(null),a=n.reactive(s.usePointer(ft(lt({},t),{target:t.target==="self"?r:d})));return()=>{if(e.default)return e.default(a,{ref:r})}}}),dt=n.defineComponent({name:"UsePreferredColorScheme",setup(t,{slots:e}){const r=n.reactive({colorScheme:s.usePreferredColorScheme()});return()=>{if(e.default)return e.default(r)}}}),pt=n.defineComponent({name:"UsePreferredDark",setup(t,{slots:e}){const r=n.reactive({prefersDark:s.usePreferredDark()});return()=>{if(e.default)return e.default(r)}}}),gt=n.defineComponent({name:"UsePreferredLanguages",setup(t,{slots:e}){const r=n.reactive({languages:s.usePreferredLanguages()});return()=>{if(e.default)return e.default(r)}}}),k="--vueuse-safe-area-top",H="--vueuse-safe-area-right",K="--vueuse-safe-area-bottom",J="--vueuse-safe-area-left";function _t(){const t=n.ref(""),e=n.ref(""),r=n.ref(""),a=n.ref("");if(s.isClient){const u=s.useCssVar(k),_=s.useCssVar(H),P=s.useCssVar(K),l=s.useCssVar(J);u.value="env(safe-area-inset-top, 0px)",_.value="env(safe-area-inset-right, 0px)",P.value="env(safe-area-inset-bottom, 0px)",l.value="env(safe-area-inset-left, 0px)",i(),s.useEventListener("resize",s.useDebounceFn(i))}function i(){t.value=V(k),e.value=V(H),r.value=V(K),a.value=V(J)}return{top:t,right:e,bottom:r,left:a,update:i}}function V(t){return getComputedStyle(document.documentElement).getPropertyValue(t)}const mt=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}=_t();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 vt=Object.defineProperty,Ot=Object.defineProperties,Pt=Object.getOwnPropertyDescriptors,G=Object.getOwnPropertySymbols,yt=Object.prototype.hasOwnProperty,ht=Object.prototype.propertyIsEnumerable,q=(t,e,r)=>e in t?vt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Ut=(t,e)=>{for(var r in e||(e={}))yt.call(e,r)&&q(t,r,e[r]);if(G)for(var r of G(e))ht.call(e,r)&&q(t,r,e[r]);return t},wt=(t,e)=>Ot(t,Pt(e));const bt=n.defineComponent({name:"UseTimeAgo",props:["time","updateInterval","max","fullDateFormatter","messages"],setup(t,{slots:e}){const r=n.toRef(t,"time"),a=n.reactive(s.useTimeAgo(r,wt(Ut({},t),{controls:!0})));return()=>{if(e.default)return e.default(a)}}});var Ct=Object.defineProperty,St=Object.defineProperties,Vt=Object.getOwnPropertyDescriptors,Q=Object.getOwnPropertySymbols,$t=Object.prototype.hasOwnProperty,Et=Object.prototype.propertyIsEnumerable,X=(t,e,r)=>e in t?Ct(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Lt=(t,e)=>{for(var r in e||(e={}))$t.call(e,r)&&X(t,r,e[r]);if(Q)for(var r of Q(e))Et.call(e,r)&&X(t,r,e[r]);return t},jt=(t,e)=>St(t,Vt(e));const Mt=n.defineComponent({name:"UseTimestamp",props:["immediate","interval","offset"],setup(t,{slots:e}){const r=n.reactive(s.useTimestamp(jt(Lt({},t),{controls:!0})));return()=>{if(e.default)return e.default(r)}}});var Nt=Object.defineProperty,Y=Object.getOwnPropertySymbols,At=Object.prototype.hasOwnProperty,Tt=Object.prototype.propertyIsEnumerable,Z=(t,e,r)=>e in t?Nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,x=(t,e)=>{for(var r in e||(e={}))At.call(e,r)&&Z(t,r,e[r]);if(Y)for(var r of Y(e))Tt.call(e,r)&&Z(t,r,e[r]);return t};const It=n.defineComponent({name:"UseVirtualList",props:["list","options","height"],setup(t,{slots:e}){const{list:r}=n.toRefs(t),{list:a,containerProps:i,wrapperProps:u}=s.useVirtualList(r,t.options);return i.style.height=t.height||"300px",()=>n.h("div",x({},i),[n.h("div",x({},u.value),a.value.map(_=>n.h("div",{style:{overFlow:"hidden",height:_.height}},e.default?e.default(_):"Please set content!")))])}}),Bt=n.defineComponent({name:"UseWindowFocus",setup(t,{slots:e}){const r=n.reactive({focused:s.useWindowFocus()});return()=>{if(e.default)return e.default(r)}}}),Ft=n.defineComponent({name:"UseWindowSize",props:["initialWidth","initialHeight"],setup(t,{slots:e}){const r=n.reactive(s.useWindowSize(t));return()=>{if(e.default)return e.default(r)}}});o.OnClickOutside=U,o.UseActiveElement=te,o.UseBattery=re,o.UseBrowserLocation=ne,o.UseColorMode=_e,o.UseDark=me,o.UseDeviceMotion=ve,o.UseDeviceOrientation=Oe,o.UseDevicePixelRatio=Pe,o.UseDevicesList=ye,o.UseDocumentVisibility=he,o.UseDraggable=Ee,o.UseElementBounding=Le,o.UseElementSize=je,o.UseElementVisibility=Me,o.UseEyeDropper=Ne,o.UseFullscreen=Ae,o.UseGeolocation=Te,o.UseIdle=Ie,o.UseMouse=Be,o.UseMouseInElement=Fe,o.UseMousePressed=Ge,o.UseNetwork=qe,o.UseNow=tt,o.UseOnline=rt,o.UsePageLeave=nt,o.UsePointer=ct,o.UsePreferredColorScheme=dt,o.UsePreferredDark=pt,o.UsePreferredLanguages=gt,o.UseScreenSafeArea=mt,o.UseTimeAgo=bt,o.UseTimestamp=Mt,o.UseVirtualList=It,o.UseWindowFocus=Bt,o.UseWindowSize=Ft,o.VOnClickOutside=ee,Object.defineProperty(o,"__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, 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, useCssVar, useEventListener as useEventListener$1, useDebounceFn, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';
3
+ import { isClient, isString, noop, tryOnScopeDispose, watchWithFilter, tryOnMounted, useToggle } 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,79 @@ const UsePreferredLanguages = defineComponent({
531
757
  }
532
758
  });
533
759
 
760
+ const topVarName = "--vueuse-safe-area-top";
761
+ const rightVarName = "--vueuse-safe-area-right";
762
+ const bottomVarName = "--vueuse-safe-area-bottom";
763
+ const leftVarName = "--vueuse-safe-area-left";
764
+ function useScreenSafeArea() {
765
+ const top = ref("");
766
+ const right = ref("");
767
+ const bottom = ref("");
768
+ const left = ref("");
769
+ if (isClient$1) {
770
+ const topCssVar = useCssVar(topVarName);
771
+ const rightCssVar = useCssVar(rightVarName);
772
+ const bottomCssVar = useCssVar(bottomVarName);
773
+ const leftCssVar = useCssVar(leftVarName);
774
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
775
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
776
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
777
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
778
+ update();
779
+ useEventListener$1("resize", useDebounceFn(update));
780
+ }
781
+ function update() {
782
+ top.value = getValue(topVarName);
783
+ right.value = getValue(rightVarName);
784
+ bottom.value = getValue(bottomVarName);
785
+ left.value = getValue(leftVarName);
786
+ }
787
+ return {
788
+ top,
789
+ right,
790
+ bottom,
791
+ left,
792
+ update
793
+ };
794
+ }
795
+ function getValue(position) {
796
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
797
+ }
798
+
799
+ const UseScreenSafeArea = defineComponent({
800
+ name: "UseScreenSafeArea",
801
+ props: {
802
+ top: Boolean,
803
+ right: Boolean,
804
+ bottom: Boolean,
805
+ left: Boolean
806
+ },
807
+ setup(props, { slots }) {
808
+ const {
809
+ top,
810
+ right,
811
+ bottom,
812
+ left
813
+ } = useScreenSafeArea();
814
+ return () => {
815
+ if (slots.default) {
816
+ return h("div", {
817
+ style: {
818
+ paddingTop: props.top ? top.value : "",
819
+ paddingRight: props.right ? right.value : "",
820
+ paddingBottom: props.bottom ? bottom.value : "",
821
+ paddingLeft: props.left ? left.value : "",
822
+ boxSizing: "border-box",
823
+ maxHeight: "100vh",
824
+ maxWidth: "100vw",
825
+ overflow: "auto"
826
+ }
827
+ }, slots.default());
828
+ }
829
+ };
830
+ }
831
+ });
832
+
534
833
  var __defProp$2 = Object.defineProperty;
535
834
  var __defProps$1 = Object.defineProperties;
536
835
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -554,7 +853,7 @@ const UseTimeAgo = defineComponent({
554
853
  name: "UseTimeAgo",
555
854
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
556
855
  setup(props, { slots }) {
557
- const { time } = toRefs(props);
856
+ const time = toRef(props, "time");
558
857
  const data = reactive(useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
559
858
  return () => {
560
859
  if (slots.default)
@@ -652,4 +951,4 @@ const UseWindowSize = defineComponent({
652
951
  }
653
952
  });
654
953
 
655
- 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, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, VOnClickOutside };
954
+ 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.2.1",
3
+ "version": "7.4.1",
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.2.1",
37
- "@vueuse/shared": "7.2.1",
36
+ "@vueuse/core": "7.4.1",
37
+ "@vueuse/shared": "7.4.1",
38
38
  "vue-demi": "*"
39
39
  }
40
40
  }