@vueuse/components 7.2.2 → 7.4.2

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,97 @@ 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
+
782
+ const topVarName = "--vueuse-safe-area-top";
783
+ const rightVarName = "--vueuse-safe-area-right";
784
+ const bottomVarName = "--vueuse-safe-area-bottom";
785
+ const leftVarName = "--vueuse-safe-area-left";
786
+ function useScreenSafeArea() {
787
+ const top = vueDemi.ref("");
788
+ const right = vueDemi.ref("");
789
+ const bottom = vueDemi.ref("");
790
+ const left = vueDemi.ref("");
791
+ if (shared.isClient) {
792
+ const topCssVar = useCssVar(topVarName);
793
+ const rightCssVar = useCssVar(rightVarName);
794
+ const bottomCssVar = useCssVar(bottomVarName);
795
+ const leftCssVar = useCssVar(leftVarName);
796
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
797
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
798
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
799
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
800
+ update();
801
+ useEventListener("resize", shared.useDebounceFn(update));
802
+ }
803
+ function update() {
804
+ top.value = getValue(topVarName);
805
+ right.value = getValue(rightVarName);
806
+ bottom.value = getValue(bottomVarName);
807
+ left.value = getValue(leftVarName);
808
+ }
809
+ return {
810
+ top,
811
+ right,
812
+ bottom,
813
+ left,
814
+ update
815
+ };
816
+ }
817
+ function getValue(position) {
818
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
819
+ }
820
+
821
+ const UseScreenSafeArea = vueDemi.defineComponent({
822
+ name: "UseScreenSafeArea",
823
+ props: {
824
+ top: Boolean,
825
+ right: Boolean,
826
+ bottom: Boolean,
827
+ left: Boolean
828
+ },
829
+ setup(props, { slots }) {
830
+ const {
831
+ top,
832
+ right,
833
+ bottom,
834
+ left
835
+ } = useScreenSafeArea();
836
+ return () => {
837
+ if (slots.default) {
838
+ return vueDemi.h("div", {
839
+ style: {
840
+ paddingTop: props.top ? top.value : "",
841
+ paddingRight: props.right ? right.value : "",
842
+ paddingBottom: props.bottom ? bottom.value : "",
843
+ paddingLeft: props.left ? left.value : "",
844
+ boxSizing: "border-box",
845
+ maxHeight: "100vh",
846
+ maxWidth: "100vw",
847
+ overflow: "auto"
848
+ }
849
+ }, slots.default());
850
+ }
851
+ };
852
+ }
853
+ });
854
+
538
855
  var __defProp$2 = Object.defineProperty;
539
856
  var __defProps$1 = Object.defineProperties;
540
857
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -558,7 +875,7 @@ const UseTimeAgo = vueDemi.defineComponent({
558
875
  name: "UseTimeAgo",
559
876
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
560
877
  setup(props, { slots }) {
561
- const { time } = vueDemi.toRefs(props);
878
+ const time = vueDemi.toRef(props, "time");
562
879
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
563
880
  return () => {
564
881
  if (slots.default)
@@ -660,6 +977,7 @@ exports.OnClickOutside = OnClickOutside;
660
977
  exports.UseActiveElement = UseActiveElement;
661
978
  exports.UseBattery = UseBattery;
662
979
  exports.UseBrowserLocation = UseBrowserLocation;
980
+ exports.UseColorMode = UseColorMode;
663
981
  exports.UseDark = UseDark;
664
982
  exports.UseDeviceMotion = UseDeviceMotion;
665
983
  exports.UseDeviceOrientation = UseDeviceOrientation;
@@ -685,6 +1003,7 @@ exports.UsePointer = UsePointer;
685
1003
  exports.UsePreferredColorScheme = UsePreferredColorScheme;
686
1004
  exports.UsePreferredDark = UsePreferredDark;
687
1005
  exports.UsePreferredLanguages = UsePreferredLanguages;
1006
+ exports.UseScreenSafeArea = UseScreenSafeArea;
688
1007
  exports.UseTimeAgo = UseTimeAgo;
689
1008
  exports.UseTimestamp = UseTimestamp;
690
1009
  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,97 @@
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
+
838
+ const topVarName = "--vueuse-safe-area-top";
839
+ const rightVarName = "--vueuse-safe-area-right";
840
+ const bottomVarName = "--vueuse-safe-area-bottom";
841
+ const leftVarName = "--vueuse-safe-area-left";
842
+ function useScreenSafeArea() {
843
+ const top = vueDemi.ref("");
844
+ const right = vueDemi.ref("");
845
+ const bottom = vueDemi.ref("");
846
+ const left = vueDemi.ref("");
847
+ if (shared.isClient) {
848
+ const topCssVar = useCssVar(topVarName);
849
+ const rightCssVar = useCssVar(rightVarName);
850
+ const bottomCssVar = useCssVar(bottomVarName);
851
+ const leftCssVar = useCssVar(leftVarName);
852
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
853
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
854
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
855
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
856
+ update();
857
+ useEventListener("resize", shared.useDebounceFn(update));
858
+ }
859
+ function update() {
860
+ top.value = getValue(topVarName);
861
+ right.value = getValue(rightVarName);
862
+ bottom.value = getValue(bottomVarName);
863
+ left.value = getValue(leftVarName);
864
+ }
865
+ return {
866
+ top,
867
+ right,
868
+ bottom,
869
+ left,
870
+ update
871
+ };
872
+ }
873
+ function getValue(position) {
874
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
875
+ }
876
+
877
+ const UseScreenSafeArea = vueDemi.defineComponent({
878
+ name: "UseScreenSafeArea",
879
+ props: {
880
+ top: Boolean,
881
+ right: Boolean,
882
+ bottom: Boolean,
883
+ left: Boolean
884
+ },
885
+ setup(props, { slots }) {
886
+ const {
887
+ top,
888
+ right,
889
+ bottom,
890
+ left
891
+ } = useScreenSafeArea();
892
+ return () => {
893
+ if (slots.default) {
894
+ return vueDemi.h("div", {
895
+ style: {
896
+ paddingTop: props.top ? top.value : "",
897
+ paddingRight: props.right ? right.value : "",
898
+ paddingBottom: props.bottom ? bottom.value : "",
899
+ paddingLeft: props.left ? left.value : "",
900
+ boxSizing: "border-box",
901
+ maxHeight: "100vh",
902
+ maxWidth: "100vw",
903
+ overflow: "auto"
904
+ }
905
+ }, slots.default());
906
+ }
907
+ };
908
+ }
909
+ });
910
+
594
911
  var __defProp$2 = Object.defineProperty;
595
912
  var __defProps$1 = Object.defineProperties;
596
913
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -614,7 +931,7 @@
614
931
  name: "UseTimeAgo",
615
932
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
616
933
  setup(props, { slots }) {
617
- const { time } = vueDemi.toRefs(props);
934
+ const time = vueDemi.toRef(props, "time");
618
935
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
619
936
  return () => {
620
937
  if (slots.default)
@@ -716,6 +1033,7 @@
716
1033
  exports.UseActiveElement = UseActiveElement;
717
1034
  exports.UseBattery = UseBattery;
718
1035
  exports.UseBrowserLocation = UseBrowserLocation;
1036
+ exports.UseColorMode = UseColorMode;
719
1037
  exports.UseDark = UseDark;
720
1038
  exports.UseDeviceMotion = UseDeviceMotion;
721
1039
  exports.UseDeviceOrientation = UseDeviceOrientation;
@@ -741,6 +1059,7 @@
741
1059
  exports.UsePreferredColorScheme = UsePreferredColorScheme;
742
1060
  exports.UsePreferredDark = UsePreferredDark;
743
1061
  exports.UsePreferredLanguages = UsePreferredLanguages;
1062
+ exports.UseScreenSafeArea = UseScreenSafeArea;
744
1063
  exports.UseTimeAgo = UseTimeAgo;
745
1064
  exports.UseTimestamp = UseTimestamp;
746
1065
  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(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, 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,97 @@ 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
+
778
+ const topVarName = "--vueuse-safe-area-top";
779
+ const rightVarName = "--vueuse-safe-area-right";
780
+ const bottomVarName = "--vueuse-safe-area-bottom";
781
+ const leftVarName = "--vueuse-safe-area-left";
782
+ function useScreenSafeArea() {
783
+ const top = ref("");
784
+ const right = ref("");
785
+ const bottom = ref("");
786
+ const left = ref("");
787
+ if (isClient) {
788
+ const topCssVar = useCssVar(topVarName);
789
+ const rightCssVar = useCssVar(rightVarName);
790
+ const bottomCssVar = useCssVar(bottomVarName);
791
+ const leftCssVar = useCssVar(leftVarName);
792
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
793
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
794
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
795
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
796
+ update();
797
+ useEventListener("resize", useDebounceFn(update));
798
+ }
799
+ function update() {
800
+ top.value = getValue(topVarName);
801
+ right.value = getValue(rightVarName);
802
+ bottom.value = getValue(bottomVarName);
803
+ left.value = getValue(leftVarName);
804
+ }
805
+ return {
806
+ top,
807
+ right,
808
+ bottom,
809
+ left,
810
+ update
811
+ };
812
+ }
813
+ function getValue(position) {
814
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
815
+ }
816
+
817
+ const UseScreenSafeArea = defineComponent({
818
+ name: "UseScreenSafeArea",
819
+ props: {
820
+ top: Boolean,
821
+ right: Boolean,
822
+ bottom: Boolean,
823
+ left: Boolean
824
+ },
825
+ setup(props, { slots }) {
826
+ const {
827
+ top,
828
+ right,
829
+ bottom,
830
+ left
831
+ } = useScreenSafeArea();
832
+ return () => {
833
+ if (slots.default) {
834
+ return h("div", {
835
+ style: {
836
+ paddingTop: props.top ? top.value : "",
837
+ paddingRight: props.right ? right.value : "",
838
+ paddingBottom: props.bottom ? bottom.value : "",
839
+ paddingLeft: props.left ? left.value : "",
840
+ boxSizing: "border-box",
841
+ maxHeight: "100vh",
842
+ maxWidth: "100vw",
843
+ overflow: "auto"
844
+ }
845
+ }, slots.default());
846
+ }
847
+ };
848
+ }
849
+ });
850
+
534
851
  var __defProp$2 = Object.defineProperty;
535
852
  var __defProps$1 = Object.defineProperties;
536
853
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -554,7 +871,7 @@ const UseTimeAgo = defineComponent({
554
871
  name: "UseTimeAgo",
555
872
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
556
873
  setup(props, { slots }) {
557
- const { time } = toRefs(props);
874
+ const time = toRef(props, "time");
558
875
  const data = reactive(useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
559
876
  return () => {
560
877
  if (slots.default)
@@ -652,4 +969,4 @@ const UseWindowSize = defineComponent({
652
969
  }
653
970
  });
654
971
 
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 };
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.2.2",
3
+ "version": "7.4.2",
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.2",
37
- "@vueuse/shared": "7.2.2",
36
+ "@vueuse/core": "7.4.2",
37
+ "@vueuse/shared": "7.4.2",
38
38
  "vue-demi": "*"
39
39
  }
40
40
  }