@vueuse/components 7.1.2 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs CHANGED
@@ -123,6 +123,214 @@ const UseBrowserLocation = vueDemi.defineComponent({
123
123
  }
124
124
  });
125
125
 
126
+ function guessSerializerType(rawInit) {
127
+ 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";
128
+ }
129
+
130
+ const StorageSerializers = {
131
+ boolean: {
132
+ read: (v) => v === "true",
133
+ write: (v) => String(v)
134
+ },
135
+ object: {
136
+ read: (v) => JSON.parse(v),
137
+ write: (v) => JSON.stringify(v)
138
+ },
139
+ number: {
140
+ read: (v) => Number.parseFloat(v),
141
+ write: (v) => String(v)
142
+ },
143
+ any: {
144
+ read: (v) => v,
145
+ write: (v) => String(v)
146
+ },
147
+ string: {
148
+ read: (v) => v,
149
+ write: (v) => String(v)
150
+ },
151
+ map: {
152
+ read: (v) => new Map(JSON.parse(v)),
153
+ write: (v) => JSON.stringify(Array.from(v.entries()))
154
+ },
155
+ set: {
156
+ read: (v) => new Set(JSON.parse(v)),
157
+ write: (v) => JSON.stringify(Array.from(v.entries()))
158
+ }
159
+ };
160
+ function useStorage(key, initialValue, storage = ((_a) => (_a = defaultWindow) == null ? void 0 : _a.localStorage)(), options = {}) {
161
+ var _a2;
162
+ const {
163
+ flush = "pre",
164
+ deep = true,
165
+ listenToStorageChanges = true,
166
+ writeDefaults = true,
167
+ shallow,
168
+ window = defaultWindow,
169
+ eventFilter,
170
+ onError = (e) => {
171
+ console.error(e);
172
+ }
173
+ } = options;
174
+ const rawInit = vueDemi.unref(initialValue);
175
+ const type = guessSerializerType(rawInit);
176
+ const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(initialValue);
177
+ const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type];
178
+ function read(event) {
179
+ if (!storage || event && event.key !== key)
180
+ return;
181
+ try {
182
+ const rawValue = event ? event.newValue : storage.getItem(key);
183
+ if (rawValue == null) {
184
+ data.value = rawInit;
185
+ if (writeDefaults && rawInit !== null)
186
+ storage.setItem(key, serializer.write(rawInit));
187
+ } else {
188
+ data.value = serializer.read(rawValue);
189
+ }
190
+ } catch (e) {
191
+ onError(e);
192
+ }
193
+ }
194
+ read();
195
+ if (window && listenToStorageChanges)
196
+ useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
197
+ if (storage) {
198
+ shared.watchWithFilter(data, () => {
199
+ try {
200
+ if (data.value == null)
201
+ storage.removeItem(key);
202
+ else
203
+ storage.setItem(key, serializer.write(data.value));
204
+ } catch (e) {
205
+ onError(e);
206
+ }
207
+ }, {
208
+ flush,
209
+ deep,
210
+ eventFilter
211
+ });
212
+ }
213
+ return data;
214
+ }
215
+
216
+ function useMediaQuery(query, options = {}) {
217
+ const { window = defaultWindow } = options;
218
+ let mediaQuery;
219
+ const matches = vueDemi.ref(false);
220
+ const update = () => {
221
+ if (!window)
222
+ return;
223
+ if (!mediaQuery)
224
+ mediaQuery = window.matchMedia(query);
225
+ matches.value = mediaQuery.matches;
226
+ };
227
+ shared.tryOnMounted(() => {
228
+ update();
229
+ if (!mediaQuery)
230
+ return;
231
+ if ("addEventListener" in mediaQuery)
232
+ mediaQuery.addEventListener("change", update);
233
+ else
234
+ mediaQuery.addListener(update);
235
+ shared.tryOnScopeDispose(() => {
236
+ if ("removeEventListener" in update)
237
+ mediaQuery.removeEventListener("change", update);
238
+ else
239
+ mediaQuery.removeListener(update);
240
+ });
241
+ });
242
+ return matches;
243
+ }
244
+
245
+ function usePreferredDark(options) {
246
+ return useMediaQuery("(prefers-color-scheme: dark)", options);
247
+ }
248
+
249
+ var __defProp$7 = Object.defineProperty;
250
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
251
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
252
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
253
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
254
+ var __spreadValues$7 = (a, b) => {
255
+ for (var prop in b || (b = {}))
256
+ if (__hasOwnProp$7.call(b, prop))
257
+ __defNormalProp$7(a, prop, b[prop]);
258
+ if (__getOwnPropSymbols$7)
259
+ for (var prop of __getOwnPropSymbols$7(b)) {
260
+ if (__propIsEnum$7.call(b, prop))
261
+ __defNormalProp$7(a, prop, b[prop]);
262
+ }
263
+ return a;
264
+ };
265
+ function useColorMode(options = {}) {
266
+ var _a;
267
+ const {
268
+ selector = "html",
269
+ attribute = "class",
270
+ window = defaultWindow,
271
+ storage = (_a = defaultWindow) == null ? void 0 : _a.localStorage,
272
+ storageKey = "vueuse-color-scheme",
273
+ listenToStorageChanges = true,
274
+ storageRef
275
+ } = options;
276
+ const modes = __spreadValues$7({
277
+ auto: "",
278
+ light: "light",
279
+ dark: "dark"
280
+ }, options.modes || {});
281
+ const preferredDark = usePreferredDark({ window });
282
+ const preferredMode = vueDemi.computed(() => preferredDark.value ? "dark" : "light");
283
+ const store = storageRef || (storageKey == null ? vueDemi.ref("auto") : useStorage(storageKey, "auto", storage, { window, listenToStorageChanges }));
284
+ const state = vueDemi.computed({
285
+ get() {
286
+ return store.value === "auto" ? preferredMode.value : store.value;
287
+ },
288
+ set(v) {
289
+ store.value = v;
290
+ }
291
+ });
292
+ function defaultOnChanged(value) {
293
+ const el = window == null ? void 0 : window.document.querySelector(selector);
294
+ if (!el)
295
+ return;
296
+ if (attribute === "class") {
297
+ const current = (modes[value] || "").split(/\s/g);
298
+ Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
299
+ if (current.includes(v))
300
+ el.classList.add(v);
301
+ else
302
+ el.classList.remove(v);
303
+ });
304
+ } else {
305
+ el.setAttribute(attribute, value);
306
+ }
307
+ }
308
+ function onChanged(mode) {
309
+ if (options.onChanged)
310
+ options.onChanged(mode, defaultOnChanged);
311
+ else
312
+ defaultOnChanged(mode);
313
+ }
314
+ vueDemi.watch(state, onChanged, { flush: "post" });
315
+ shared.tryOnMounted(() => onChanged(state.value));
316
+ return state;
317
+ }
318
+
319
+ const UseColorMode = vueDemi.defineComponent({
320
+ name: "UseColorMode",
321
+ props: ["selector", "attribute", "modes", "onChanged", "storageKey", "storage"],
322
+ setup(props, { slots }) {
323
+ const mode = useColorMode(props);
324
+ const data = vueDemi.reactive({
325
+ mode
326
+ });
327
+ return () => {
328
+ if (slots.default)
329
+ return slots.default(data);
330
+ };
331
+ }
332
+ });
333
+
126
334
  const UseDark = vueDemi.defineComponent({
127
335
  name: "UseDark",
128
336
  props: ["selector", "attribute", "valueDark", "valueLight", "onChanged", "storageKey", "storage"],
@@ -535,6 +743,79 @@ const UsePreferredLanguages = vueDemi.defineComponent({
535
743
  }
536
744
  });
537
745
 
746
+ const topVarName = "--vueuse-safe-area-top";
747
+ const rightVarName = "--vueuse-safe-area-right";
748
+ const bottomVarName = "--vueuse-safe-area-bottom";
749
+ const leftVarName = "--vueuse-safe-area-left";
750
+ function useScreenSafeArea() {
751
+ const top = vueDemi.ref("");
752
+ const right = vueDemi.ref("");
753
+ const bottom = vueDemi.ref("");
754
+ const left = vueDemi.ref("");
755
+ if (core.isClient) {
756
+ const topCssVar = core.useCssVar(topVarName);
757
+ const rightCssVar = core.useCssVar(rightVarName);
758
+ const bottomCssVar = core.useCssVar(bottomVarName);
759
+ const leftCssVar = core.useCssVar(leftVarName);
760
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
761
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
762
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
763
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
764
+ update();
765
+ core.useEventListener("resize", core.useDebounceFn(update));
766
+ }
767
+ function update() {
768
+ top.value = getValue(topVarName);
769
+ right.value = getValue(rightVarName);
770
+ bottom.value = getValue(bottomVarName);
771
+ left.value = getValue(leftVarName);
772
+ }
773
+ return {
774
+ top,
775
+ right,
776
+ bottom,
777
+ left,
778
+ update
779
+ };
780
+ }
781
+ function getValue(position) {
782
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
783
+ }
784
+
785
+ const UseScreenSafeArea = vueDemi.defineComponent({
786
+ name: "UseScreenSafeArea",
787
+ props: {
788
+ top: Boolean,
789
+ right: Boolean,
790
+ bottom: Boolean,
791
+ left: Boolean
792
+ },
793
+ setup(props, { slots }) {
794
+ const {
795
+ top,
796
+ right,
797
+ bottom,
798
+ left
799
+ } = useScreenSafeArea();
800
+ return () => {
801
+ if (slots.default) {
802
+ return vueDemi.h("div", {
803
+ style: {
804
+ paddingTop: props.top ? top.value : "",
805
+ paddingRight: props.right ? right.value : "",
806
+ paddingBottom: props.bottom ? bottom.value : "",
807
+ paddingLeft: props.left ? left.value : "",
808
+ boxSizing: "border-box",
809
+ maxHeight: "100vh",
810
+ maxWidth: "100vw",
811
+ overflow: "auto"
812
+ }
813
+ }, slots.default());
814
+ }
815
+ };
816
+ }
817
+ });
818
+
538
819
  var __defProp$2 = Object.defineProperty;
539
820
  var __defProps$1 = Object.defineProperties;
540
821
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -558,7 +839,7 @@ const UseTimeAgo = vueDemi.defineComponent({
558
839
  name: "UseTimeAgo",
559
840
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
560
841
  setup(props, { slots }) {
561
- const { time } = vueDemi.toRefs(props);
842
+ const time = vueDemi.toRef(props, "time");
562
843
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
563
844
  return () => {
564
845
  if (slots.default)
@@ -660,6 +941,7 @@ exports.OnClickOutside = OnClickOutside;
660
941
  exports.UseActiveElement = UseActiveElement;
661
942
  exports.UseBattery = UseBattery;
662
943
  exports.UseBrowserLocation = UseBrowserLocation;
944
+ exports.UseColorMode = UseColorMode;
663
945
  exports.UseDark = UseDark;
664
946
  exports.UseDeviceMotion = UseDeviceMotion;
665
947
  exports.UseDeviceOrientation = UseDeviceOrientation;
@@ -685,6 +967,7 @@ exports.UsePointer = UsePointer;
685
967
  exports.UsePreferredColorScheme = UsePreferredColorScheme;
686
968
  exports.UsePreferredDark = UsePreferredDark;
687
969
  exports.UsePreferredLanguages = UsePreferredLanguages;
970
+ exports.UseScreenSafeArea = UseScreenSafeArea;
688
971
  exports.UseTimeAgo = UseTimeAgo;
689
972
  exports.UseTimestamp = UseTimestamp;
690
973
  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,101 @@ 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
+ declare type Serializer<T> = {
39
+ read(raw: string): T;
40
+ write(value: T): string;
41
+ };
42
+ interface StorageLike {
43
+ getItem(key: string): string | null;
44
+ setItem(key: string, value: string): void;
45
+ removeItem(key: string): void;
46
+ }
47
+ interface StorageOptions<T> extends ConfigurableEventFilter, ConfigurableWindow, ConfigurableFlush {
48
+ /**
49
+ * Watch for deep changes
50
+ *
51
+ * @default true
52
+ */
53
+ deep?: boolean;
54
+ /**
55
+ * Listen to storage changes, useful for multiple tabs application
56
+ *
57
+ * @default true
58
+ */
59
+ listenToStorageChanges?: boolean;
60
+ /**
61
+ * Write the default value to the storage when it does not existed
62
+ *
63
+ * @default true
64
+ */
65
+ writeDefaults?: boolean;
66
+ /**
67
+ * Custom data serialization
68
+ */
69
+ serializer?: Serializer<T>;
70
+ /**
71
+ * On error callback
72
+ *
73
+ * Default log error to `console.error`
74
+ */
75
+ onError?: (error: unknown) => void;
76
+ /**
77
+ * Use shallow ref as reference
78
+ *
79
+ * @default false
80
+ */
81
+ shallow?: boolean;
82
+ }
83
+
84
+ declare type BasicColorSchema = 'light' | 'dark' | 'auto';
85
+ interface UseColorModeOptions<T extends string = BasicColorSchema> extends StorageOptions<T | BasicColorSchema> {
86
+ /**
87
+ * CSS Selector for the target element applying to
88
+ *
89
+ * @default 'html'
90
+ */
91
+ selector?: string;
92
+ /**
93
+ * HTML attribute applying the target element
94
+ *
95
+ * @default 'class'
96
+ */
97
+ attribute?: string;
98
+ /**
99
+ * Prefix when adding value to the attribute
100
+ */
101
+ modes?: Partial<Record<T | BasicColorSchema, string>>;
102
+ /**
103
+ * A custom handler for handle the updates.
104
+ * When specified, the default behavior will be overridded.
105
+ *
106
+ * @default undefined
107
+ */
108
+ onChanged?: (mode: T | BasicColorSchema, defaultHandler: ((mode: T | BasicColorSchema) => void)) => void;
109
+ /**
110
+ * Custom storage ref
111
+ *
112
+ * When provided, `useStorage` will be skipped
113
+ */
114
+ storageRef?: Ref<T | BasicColorSchema>;
115
+ /**
116
+ * Key to persist the data into localStorage/sessionStorage.
117
+ *
118
+ * Pass `null` to disable persistence
119
+ *
120
+ * @default 'vueuse-color-scheme'
121
+ */
122
+ storageKey?: string | null;
123
+ /**
124
+ * Storage object, can be localStorage or sessionStorage
125
+ *
126
+ * @default localStorage
127
+ */
128
+ storage?: StorageLike;
129
+ }
130
+
131
+ 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>>, {}>;
132
+
38
133
  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
134
 
40
135
  declare const UseDeviceMotion: vue_demi.DefineComponent<{}, () => vue_demi.VNode<vue_demi.RendererNode, vue_demi.RendererElement, {
@@ -143,7 +238,31 @@ declare const UsePreferredLanguages: vue_demi.DefineComponent<{}, () => vue_demi
143
238
  [key: string]: any;
144
239
  }>[] | undefined, {}, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, vue_demi.EmitsOptions, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<{} & {} & {}>, {}>;
145
240
 
146
- interface UseTimeAgoComponentOptions extends Omit<TimeAgoOptions<true>, 'controls'> {
241
+ declare const UseScreenSafeArea: vue_demi.DefineComponent<{
242
+ top: BooleanConstructor;
243
+ right: BooleanConstructor;
244
+ bottom: BooleanConstructor;
245
+ left: BooleanConstructor;
246
+ }, () => vue_demi.VNode<vue_demi.RendererNode, vue_demi.RendererElement, {
247
+ [key: string]: any;
248
+ }> | undefined, unknown, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, Record<string, any>, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<{
249
+ top?: unknown;
250
+ right?: unknown;
251
+ bottom?: unknown;
252
+ left?: unknown;
253
+ } & {
254
+ left: boolean;
255
+ right: boolean;
256
+ top: boolean;
257
+ bottom: boolean;
258
+ } & {}>, {
259
+ left: boolean;
260
+ right: boolean;
261
+ top: boolean;
262
+ bottom: boolean;
263
+ }>;
264
+
265
+ interface UseTimeAgoComponentOptions extends Omit<UseTimeAgoOptions<true>, 'controls'> {
147
266
  time: MaybeRef<Date | number | string>;
148
267
  }
149
268
  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 +297,4 @@ declare const UseWindowFocus: vue_demi.DefineComponent<{}, () => vue_demi.VNode<
178
297
 
179
298
  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
299
 
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 };
300
+ 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,214 @@
179
179
  }
180
180
  });
181
181
 
182
+ function guessSerializerType(rawInit) {
183
+ 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";
184
+ }
185
+
186
+ const StorageSerializers = {
187
+ boolean: {
188
+ read: (v) => v === "true",
189
+ write: (v) => String(v)
190
+ },
191
+ object: {
192
+ read: (v) => JSON.parse(v),
193
+ write: (v) => JSON.stringify(v)
194
+ },
195
+ number: {
196
+ read: (v) => Number.parseFloat(v),
197
+ write: (v) => String(v)
198
+ },
199
+ any: {
200
+ read: (v) => v,
201
+ write: (v) => String(v)
202
+ },
203
+ string: {
204
+ read: (v) => v,
205
+ write: (v) => String(v)
206
+ },
207
+ map: {
208
+ read: (v) => new Map(JSON.parse(v)),
209
+ write: (v) => JSON.stringify(Array.from(v.entries()))
210
+ },
211
+ set: {
212
+ read: (v) => new Set(JSON.parse(v)),
213
+ write: (v) => JSON.stringify(Array.from(v.entries()))
214
+ }
215
+ };
216
+ function useStorage(key, initialValue, storage = ((_a) => (_a = defaultWindow) == null ? void 0 : _a.localStorage)(), options = {}) {
217
+ var _a2;
218
+ const {
219
+ flush = "pre",
220
+ deep = true,
221
+ listenToStorageChanges = true,
222
+ writeDefaults = true,
223
+ shallow,
224
+ window = defaultWindow,
225
+ eventFilter,
226
+ onError = (e) => {
227
+ console.error(e);
228
+ }
229
+ } = options;
230
+ const rawInit = vueDemi.unref(initialValue);
231
+ const type = guessSerializerType(rawInit);
232
+ const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(initialValue);
233
+ const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type];
234
+ function read(event) {
235
+ if (!storage || event && event.key !== key)
236
+ return;
237
+ try {
238
+ const rawValue = event ? event.newValue : storage.getItem(key);
239
+ if (rawValue == null) {
240
+ data.value = rawInit;
241
+ if (writeDefaults && rawInit !== null)
242
+ storage.setItem(key, serializer.write(rawInit));
243
+ } else {
244
+ data.value = serializer.read(rawValue);
245
+ }
246
+ } catch (e) {
247
+ onError(e);
248
+ }
249
+ }
250
+ read();
251
+ if (window && listenToStorageChanges)
252
+ useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
253
+ if (storage) {
254
+ shared.watchWithFilter(data, () => {
255
+ try {
256
+ if (data.value == null)
257
+ storage.removeItem(key);
258
+ else
259
+ storage.setItem(key, serializer.write(data.value));
260
+ } catch (e) {
261
+ onError(e);
262
+ }
263
+ }, {
264
+ flush,
265
+ deep,
266
+ eventFilter
267
+ });
268
+ }
269
+ return data;
270
+ }
271
+
272
+ function useMediaQuery(query, options = {}) {
273
+ const { window = defaultWindow } = options;
274
+ let mediaQuery;
275
+ const matches = vueDemi.ref(false);
276
+ const update = () => {
277
+ if (!window)
278
+ return;
279
+ if (!mediaQuery)
280
+ mediaQuery = window.matchMedia(query);
281
+ matches.value = mediaQuery.matches;
282
+ };
283
+ shared.tryOnMounted(() => {
284
+ update();
285
+ if (!mediaQuery)
286
+ return;
287
+ if ("addEventListener" in mediaQuery)
288
+ mediaQuery.addEventListener("change", update);
289
+ else
290
+ mediaQuery.addListener(update);
291
+ shared.tryOnScopeDispose(() => {
292
+ if ("removeEventListener" in update)
293
+ mediaQuery.removeEventListener("change", update);
294
+ else
295
+ mediaQuery.removeListener(update);
296
+ });
297
+ });
298
+ return matches;
299
+ }
300
+
301
+ function usePreferredDark(options) {
302
+ return useMediaQuery("(prefers-color-scheme: dark)", options);
303
+ }
304
+
305
+ var __defProp$7 = Object.defineProperty;
306
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
307
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
308
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
309
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
310
+ var __spreadValues$7 = (a, b) => {
311
+ for (var prop in b || (b = {}))
312
+ if (__hasOwnProp$7.call(b, prop))
313
+ __defNormalProp$7(a, prop, b[prop]);
314
+ if (__getOwnPropSymbols$7)
315
+ for (var prop of __getOwnPropSymbols$7(b)) {
316
+ if (__propIsEnum$7.call(b, prop))
317
+ __defNormalProp$7(a, prop, b[prop]);
318
+ }
319
+ return a;
320
+ };
321
+ function useColorMode(options = {}) {
322
+ var _a;
323
+ const {
324
+ selector = "html",
325
+ attribute = "class",
326
+ window = defaultWindow,
327
+ storage = (_a = defaultWindow) == null ? void 0 : _a.localStorage,
328
+ storageKey = "vueuse-color-scheme",
329
+ listenToStorageChanges = true,
330
+ storageRef
331
+ } = options;
332
+ const modes = __spreadValues$7({
333
+ auto: "",
334
+ light: "light",
335
+ dark: "dark"
336
+ }, options.modes || {});
337
+ const preferredDark = usePreferredDark({ window });
338
+ const preferredMode = vueDemi.computed(() => preferredDark.value ? "dark" : "light");
339
+ const store = storageRef || (storageKey == null ? vueDemi.ref("auto") : useStorage(storageKey, "auto", storage, { window, listenToStorageChanges }));
340
+ const state = vueDemi.computed({
341
+ get() {
342
+ return store.value === "auto" ? preferredMode.value : store.value;
343
+ },
344
+ set(v) {
345
+ store.value = v;
346
+ }
347
+ });
348
+ function defaultOnChanged(value) {
349
+ const el = window == null ? void 0 : window.document.querySelector(selector);
350
+ if (!el)
351
+ return;
352
+ if (attribute === "class") {
353
+ const current = (modes[value] || "").split(/\s/g);
354
+ Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
355
+ if (current.includes(v))
356
+ el.classList.add(v);
357
+ else
358
+ el.classList.remove(v);
359
+ });
360
+ } else {
361
+ el.setAttribute(attribute, value);
362
+ }
363
+ }
364
+ function onChanged(mode) {
365
+ if (options.onChanged)
366
+ options.onChanged(mode, defaultOnChanged);
367
+ else
368
+ defaultOnChanged(mode);
369
+ }
370
+ vueDemi.watch(state, onChanged, { flush: "post" });
371
+ shared.tryOnMounted(() => onChanged(state.value));
372
+ return state;
373
+ }
374
+
375
+ const UseColorMode = vueDemi.defineComponent({
376
+ name: "UseColorMode",
377
+ props: ["selector", "attribute", "modes", "onChanged", "storageKey", "storage"],
378
+ setup(props, { slots }) {
379
+ const mode = useColorMode(props);
380
+ const data = vueDemi.reactive({
381
+ mode
382
+ });
383
+ return () => {
384
+ if (slots.default)
385
+ return slots.default(data);
386
+ };
387
+ }
388
+ });
389
+
182
390
  const UseDark = vueDemi.defineComponent({
183
391
  name: "UseDark",
184
392
  props: ["selector", "attribute", "valueDark", "valueLight", "onChanged", "storageKey", "storage"],
@@ -591,6 +799,79 @@
591
799
  }
592
800
  });
593
801
 
802
+ const topVarName = "--vueuse-safe-area-top";
803
+ const rightVarName = "--vueuse-safe-area-right";
804
+ const bottomVarName = "--vueuse-safe-area-bottom";
805
+ const leftVarName = "--vueuse-safe-area-left";
806
+ function useScreenSafeArea() {
807
+ const top = vueDemi.ref("");
808
+ const right = vueDemi.ref("");
809
+ const bottom = vueDemi.ref("");
810
+ const left = vueDemi.ref("");
811
+ if (core.isClient) {
812
+ const topCssVar = core.useCssVar(topVarName);
813
+ const rightCssVar = core.useCssVar(rightVarName);
814
+ const bottomCssVar = core.useCssVar(bottomVarName);
815
+ const leftCssVar = core.useCssVar(leftVarName);
816
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
817
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
818
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
819
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
820
+ update();
821
+ core.useEventListener("resize", core.useDebounceFn(update));
822
+ }
823
+ function update() {
824
+ top.value = getValue(topVarName);
825
+ right.value = getValue(rightVarName);
826
+ bottom.value = getValue(bottomVarName);
827
+ left.value = getValue(leftVarName);
828
+ }
829
+ return {
830
+ top,
831
+ right,
832
+ bottom,
833
+ left,
834
+ update
835
+ };
836
+ }
837
+ function getValue(position) {
838
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
839
+ }
840
+
841
+ const UseScreenSafeArea = vueDemi.defineComponent({
842
+ name: "UseScreenSafeArea",
843
+ props: {
844
+ top: Boolean,
845
+ right: Boolean,
846
+ bottom: Boolean,
847
+ left: Boolean
848
+ },
849
+ setup(props, { slots }) {
850
+ const {
851
+ top,
852
+ right,
853
+ bottom,
854
+ left
855
+ } = useScreenSafeArea();
856
+ return () => {
857
+ if (slots.default) {
858
+ return vueDemi.h("div", {
859
+ style: {
860
+ paddingTop: props.top ? top.value : "",
861
+ paddingRight: props.right ? right.value : "",
862
+ paddingBottom: props.bottom ? bottom.value : "",
863
+ paddingLeft: props.left ? left.value : "",
864
+ boxSizing: "border-box",
865
+ maxHeight: "100vh",
866
+ maxWidth: "100vw",
867
+ overflow: "auto"
868
+ }
869
+ }, slots.default());
870
+ }
871
+ };
872
+ }
873
+ });
874
+
594
875
  var __defProp$2 = Object.defineProperty;
595
876
  var __defProps$1 = Object.defineProperties;
596
877
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -614,7 +895,7 @@
614
895
  name: "UseTimeAgo",
615
896
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
616
897
  setup(props, { slots }) {
617
- const { time } = vueDemi.toRefs(props);
898
+ const time = vueDemi.toRef(props, "time");
618
899
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
619
900
  return () => {
620
901
  if (slots.default)
@@ -716,6 +997,7 @@
716
997
  exports.UseActiveElement = UseActiveElement;
717
998
  exports.UseBattery = UseBattery;
718
999
  exports.UseBrowserLocation = UseBrowserLocation;
1000
+ exports.UseColorMode = UseColorMode;
719
1001
  exports.UseDark = UseDark;
720
1002
  exports.UseDeviceMotion = UseDeviceMotion;
721
1003
  exports.UseDeviceOrientation = UseDeviceOrientation;
@@ -741,6 +1023,7 @@
741
1023
  exports.UsePreferredColorScheme = UsePreferredColorScheme;
742
1024
  exports.UsePreferredDark = UsePreferredDark;
743
1025
  exports.UsePreferredLanguages = UsePreferredLanguages;
1026
+ exports.UseScreenSafeArea = UseScreenSafeArea;
744
1027
  exports.UseTimeAgo = UseTimeAgo;
745
1028
  exports.UseTimestamp = UseTimestamp;
746
1029
  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 f=o.VueCompositionAPI;if(f){for(var h in f)n[h]=f[h];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 h in s)n[h]=s[h];n.isVue2=!1,n.isVue3=!0,n.install=function(){},n.Vue=s,n.Vue2=void 0,n.version=s.version,n.set=function(p,c,y){return Array.isArray(p)?(p.length=Math.max(p.length,c),p.splice(c,1,y),y):(p[c]=y,y)},n.del=function(p,c){if(Array.isArray(p)){p.splice(c,1);return}delete p[c]}}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,f){"use strict";const h=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 p(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 y(...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 d=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"}),v=()=>{d(),u()};return f.tryOnScopeDispose(v),v}function Y(t,e,r={}){const{window:a=c}=r;if(!a)return;const i=n.ref(!0),d=[y(a,"click",l=>{const m=p(t);!m||m===l.target||l.composedPath().includes(m)||!i.value||e(l)},{passive:!0,capture:!0}),y(a,"pointerdown",l=>{const m=p(t);i.value=!!m&&!l.composedPath().includes(m)},{passive:!0})];return()=>d.forEach(l=>l())}const Z=(t,e)=>{Y(t,e.value)},x=n.defineComponent({name:"UseActiveElement",setup(t,{slots:e}){const r=n.reactive({element:s.useActiveElement()});return()=>{if(e.default)return e.default(r)}}}),D=n.defineComponent({name:"UseBattery",setup(t,{slots:e}){const r=n.reactive(s.useBattery(t));return()=>{if(e.default)return e.default(r)}}}),ee=n.defineComponent({name:"UseBrowserLocation",setup(t,{slots:e}){const r=n.reactive(s.useBrowserLocation());return()=>{if(e.default)return e.default(r)}}});function te(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 re={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 ne(t,e,r=(i=>(i=c)==null?void 0:i.localStorage)(),a={}){var i;const{flush:u="pre",deep:d=!0,listenToStorageChanges:v=!0,writeDefaults:l=!0,shallow:m,window:S=c,eventFilter:$,onError:b=g=>{console.error(g)}}=a,U=n.unref(e),V=te(U),P=(m?n.shallowRef:n.ref)(e),_=(i=a.serializer)!=null?i:re[V];function w(g){if(!(!r||g&&g.key!==t))try{const O=g?g.newValue:r.getItem(t);O==null?(P.value=U,l&&U!==null&&r.setItem(t,_.write(U))):P.value=_.read(O)}catch(O){b(O)}}return w(),S&&v&&y(S,"storage",g=>setTimeout(()=>w(g),0)),r&&f.watchWithFilter(P,()=>{try{P.value==null?r.removeItem(t):r.setItem(t,_.write(P.value))}catch(g){b(g)}},{flush:u,deep:d,eventFilter:$}),P}function ae(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 se(t){return ae("(prefers-color-scheme: dark)",t)}var oe=Object.defineProperty,E=Object.getOwnPropertySymbols,ie=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable,L=(t,e,r)=>e in t?oe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,le=(t,e)=>{for(var r in e||(e={}))ie.call(e,r)&&L(t,r,e[r]);if(E)for(var r of E(e))ue.call(e,r)&&L(t,r,e[r]);return t};function fe(t={}){var e;const{selector:r="html",attribute:a="class",window:i=c,storage:u=(e=c)==null?void 0:e.localStorage,storageKey:d="vueuse-color-scheme",listenToStorageChanges:v=!0,storageRef:l}=t,m=le({auto:"",light:"light",dark:"dark"},t.modes||{}),S=se({window:i}),$=n.computed(()=>S.value?"dark":"light"),b=l||(d==null?n.ref("auto"):ne(d,"auto",u,{window:i,listenToStorageChanges:v})),U=n.computed({get(){return b.value==="auto"?$.value:b.value},set(_){b.value=_}});function V(_){const w=i==null?void 0:i.document.querySelector(r);if(!!w)if(a==="class"){const g=(m[_]||"").split(/\s/g);Object.values(m).flatMap(O=>(O||"").split(/\s/g)).filter(Boolean).forEach(O=>{g.includes(O)?w.classList.add(O):w.classList.remove(O)})}else w.setAttribute(a,_)}function P(_){t.onChanged?t.onChanged(_,V):V(_)}return n.watch(U,P,{flush:"post"}),f.tryOnMounted(()=>P(U.value)),U}const ce=n.defineComponent({name:"UseColorMode",props:["selector","attribute","modes","onChanged","storageKey","storage"],setup(t,{slots:e}){const r=fe(t),a=n.reactive({mode:r});return()=>{if(e.default)return e.default(a)}}}),de=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:f.useToggle(r)});return()=>{if(e.default)return e.default(a)}}}),pe=n.defineComponent({name:"UseDeviceMotion",setup(t,{slots:e}){const r=n.reactive(s.useDeviceMotion());return()=>{if(e.default)return e.default(r)}}}),ge=n.defineComponent({name:"UseDeviceOrientation",setup(t,{slots:e}){const r=n.reactive(s.useDeviceOrientation());return()=>{if(e.default)return e.default(r)}}}),me=n.defineComponent({name:"UseDevicePixelRatio",setup(t,{slots:e}){const r=n.reactive({pixelRatio:s.useDevicePixelRatio()});return()=>{if(e.default)return e.default(r)}}}),_e=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)}}}),Oe=n.defineComponent({name:"UseDocumentVisibility",setup(t,{slots:e}){const r=n.reactive({visibility:s.useDocumentVisibility()});return()=>{if(e.default)return e.default(r)}}});var ve=Object.defineProperty,Pe=Object.defineProperties,ye=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,Ue=Object.prototype.hasOwnProperty,he=Object.prototype.propertyIsEnumerable,M=(t,e,r)=>e in t?ve(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,we=(t,e)=>{for(var r in e||(e={}))Ue.call(e,r)&&M(t,r,e[r]);if(j)for(var r of j(e))he.call(e,r)&&M(t,r,e[r]);return t},be=(t,e)=>Pe(t,ye(e));const Ce=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,be(we({},t),{initialValue:a})));return()=>{if(e.default)return n.h(t.as||"div",{ref:r,style:`touch-action:none;${i.style}`},e.default(i))}}}),Se=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))}}}),Ve=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))}}}),$e=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))}}}),Ee=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)}}}),Le=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))}}}),je=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)}}}),Me=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)}}}),Ne=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)}}}),Ae=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 Ie=Object.defineProperty,Be=Object.defineProperties,Te=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertySymbols,Fe=Object.prototype.hasOwnProperty,ze=Object.prototype.propertyIsEnumerable,A=(t,e,r)=>e in t?Ie(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,We=(t,e)=>{for(var r in e||(e={}))Fe.call(e,r)&&A(t,r,e[r]);if(N)for(var r of N(e))ze.call(e,r)&&A(t,r,e[r]);return t},Re=(t,e)=>Be(t,Te(e));const ke=n.defineComponent({name:"UseMousePressed",props:["touch","initialValue","as"],setup(t,{slots:e}){const r=n.ref(),a=n.reactive(s.useMousePressed(Re(We({},t),{target:r})));return()=>{if(e.default)return n.h(t.as||"div",{ref:r},e.default(a))}}}),Je=n.defineComponent({name:"UseNetwork",setup(t,{slots:e}){const r=n.reactive(s.useNetwork());return()=>{if(e.default)return e.default(r)}}});var Ke=Object.defineProperty,Ge=Object.defineProperties,He=Object.getOwnPropertyDescriptors,I=Object.getOwnPropertySymbols,qe=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable,B=(t,e,r)=>e in t?Ke(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Xe=(t,e)=>{for(var r in e||(e={}))qe.call(e,r)&&B(t,r,e[r]);if(I)for(var r of I(e))Qe.call(e,r)&&B(t,r,e[r]);return t},Ye=(t,e)=>Ge(t,He(e));const Ze=n.defineComponent({name:"UseNow",props:["interval"],setup(t,{slots:e}){const r=n.reactive(s.useNow(Ye(Xe({},t),{controls:!0})));return()=>{if(e.default)return e.default(r)}}}),xe=n.defineComponent({name:"UseOnline",setup(t,{slots:e}){const r=n.reactive({isOnline:s.useOnline()});return()=>{if(e.default)return e.default(r)}}}),De=n.defineComponent({name:"UsePageLeave",setup(t,{slots:e}){const r=n.reactive({isLeft:s.usePageLeave()});return()=>{if(e.default)return e.default(r)}}});var et=Object.defineProperty,tt=Object.defineProperties,rt=Object.getOwnPropertyDescriptors,T=Object.getOwnPropertySymbols,nt=Object.prototype.hasOwnProperty,at=Object.prototype.propertyIsEnumerable,F=(t,e,r)=>e in t?et(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,st=(t,e)=>{for(var r in e||(e={}))nt.call(e,r)&&F(t,r,e[r]);if(T)for(var r of T(e))at.call(e,r)&&F(t,r,e[r]);return t},ot=(t,e)=>tt(t,rt(e));const it=n.defineComponent({name:"UsePointer",props:["pointerTypes","initialValue","target"],setup(t,{slots:e}){const r=n.ref(null),a=n.reactive(s.usePointer(ot(st({},t),{target:t.target==="self"?r:c})));return()=>{if(e.default)return e.default(a,{ref:r})}}}),ut=n.defineComponent({name:"UsePreferredColorScheme",setup(t,{slots:e}){const r=n.reactive({colorScheme:s.usePreferredColorScheme()});return()=>{if(e.default)return e.default(r)}}}),lt=n.defineComponent({name:"UsePreferredDark",setup(t,{slots:e}){const r=n.reactive({prefersDark:s.usePreferredDark()});return()=>{if(e.default)return e.default(r)}}}),ft=n.defineComponent({name:"UsePreferredLanguages",setup(t,{slots:e}){const r=n.reactive({languages:s.usePreferredLanguages()});return()=>{if(e.default)return e.default(r)}}}),z="--vueuse-safe-area-top",W="--vueuse-safe-area-right",R="--vueuse-safe-area-bottom",k="--vueuse-safe-area-left";function ct(){const t=n.ref(""),e=n.ref(""),r=n.ref(""),a=n.ref("");if(s.isClient){const u=s.useCssVar(z),d=s.useCssVar(W),v=s.useCssVar(R),l=s.useCssVar(k);u.value="env(safe-area-inset-top, 0px)",d.value="env(safe-area-inset-right, 0px)",v.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=C(z),e.value=C(W),r.value=C(R),a.value=C(k)}return{top:t,right:e,bottom:r,left:a,update:i}}function C(t){return getComputedStyle(document.documentElement).getPropertyValue(t)}const dt=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}=ct();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,gt=Object.defineProperties,mt=Object.getOwnPropertyDescriptors,J=Object.getOwnPropertySymbols,_t=Object.prototype.hasOwnProperty,Ot=Object.prototype.propertyIsEnumerable,K=(t,e,r)=>e in t?pt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,vt=(t,e)=>{for(var r in e||(e={}))_t.call(e,r)&&K(t,r,e[r]);if(J)for(var r of J(e))Ot.call(e,r)&&K(t,r,e[r]);return t},Pt=(t,e)=>gt(t,mt(e));const yt=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,Pt(vt({},t),{controls:!0})));return()=>{if(e.default)return e.default(a)}}});var Ut=Object.defineProperty,ht=Object.defineProperties,wt=Object.getOwnPropertyDescriptors,G=Object.getOwnPropertySymbols,bt=Object.prototype.hasOwnProperty,Ct=Object.prototype.propertyIsEnumerable,H=(t,e,r)=>e in t?Ut(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,St=(t,e)=>{for(var r in e||(e={}))bt.call(e,r)&&H(t,r,e[r]);if(G)for(var r of G(e))Ct.call(e,r)&&H(t,r,e[r]);return t},Vt=(t,e)=>ht(t,wt(e));const $t=n.defineComponent({name:"UseTimestamp",props:["immediate","interval","offset"],setup(t,{slots:e}){const r=n.reactive(s.useTimestamp(Vt(St({},t),{controls:!0})));return()=>{if(e.default)return e.default(r)}}});var Et=Object.defineProperty,q=Object.getOwnPropertySymbols,Lt=Object.prototype.hasOwnProperty,jt=Object.prototype.propertyIsEnumerable,Q=(t,e,r)=>e in t?Et(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,X=(t,e)=>{for(var r in e||(e={}))Lt.call(e,r)&&Q(t,r,e[r]);if(q)for(var r of q(e))jt.call(e,r)&&Q(t,r,e[r]);return t};const Mt=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(d=>n.h("div",{style:{overFlow:"hidden",height:d.height}},e.default?e.default(d):"Please set content!")))])}}),Nt=n.defineComponent({name:"UseWindowFocus",setup(t,{slots:e}){const r=n.reactive({focused:s.useWindowFocus()});return()=>{if(e.default)return e.default(r)}}}),At=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=h,o.UseActiveElement=x,o.UseBattery=D,o.UseBrowserLocation=ee,o.UseColorMode=ce,o.UseDark=de,o.UseDeviceMotion=pe,o.UseDeviceOrientation=ge,o.UseDevicePixelRatio=me,o.UseDevicesList=_e,o.UseDocumentVisibility=Oe,o.UseDraggable=Ce,o.UseElementBounding=Se,o.UseElementSize=Ve,o.UseElementVisibility=$e,o.UseEyeDropper=Ee,o.UseFullscreen=Le,o.UseGeolocation=je,o.UseIdle=Me,o.UseMouse=Ne,o.UseMouseInElement=Ae,o.UseMousePressed=ke,o.UseNetwork=Je,o.UseNow=Ze,o.UseOnline=xe,o.UsePageLeave=De,o.UsePointer=it,o.UsePreferredColorScheme=ut,o.UsePreferredDark=lt,o.UsePreferredLanguages=ft,o.UseScreenSafeArea=dt,o.UseTimeAgo=yt,o.UseTimestamp=$t,o.UseVirtualList=Mt,o.UseWindowFocus=Nt,o.UseWindowSize=At,o.VOnClickOutside=Z,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,214 @@ const UseBrowserLocation = defineComponent({
119
119
  }
120
120
  });
121
121
 
122
+ function guessSerializerType(rawInit) {
123
+ 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";
124
+ }
125
+
126
+ const StorageSerializers = {
127
+ boolean: {
128
+ read: (v) => v === "true",
129
+ write: (v) => String(v)
130
+ },
131
+ object: {
132
+ read: (v) => JSON.parse(v),
133
+ write: (v) => JSON.stringify(v)
134
+ },
135
+ number: {
136
+ read: (v) => Number.parseFloat(v),
137
+ write: (v) => String(v)
138
+ },
139
+ any: {
140
+ read: (v) => v,
141
+ write: (v) => String(v)
142
+ },
143
+ string: {
144
+ read: (v) => v,
145
+ write: (v) => String(v)
146
+ },
147
+ map: {
148
+ read: (v) => new Map(JSON.parse(v)),
149
+ write: (v) => JSON.stringify(Array.from(v.entries()))
150
+ },
151
+ set: {
152
+ read: (v) => new Set(JSON.parse(v)),
153
+ write: (v) => JSON.stringify(Array.from(v.entries()))
154
+ }
155
+ };
156
+ function useStorage(key, initialValue, storage = ((_a) => (_a = defaultWindow) == null ? void 0 : _a.localStorage)(), options = {}) {
157
+ var _a2;
158
+ const {
159
+ flush = "pre",
160
+ deep = true,
161
+ listenToStorageChanges = true,
162
+ writeDefaults = true,
163
+ shallow,
164
+ window = defaultWindow,
165
+ eventFilter,
166
+ onError = (e) => {
167
+ console.error(e);
168
+ }
169
+ } = options;
170
+ const rawInit = unref(initialValue);
171
+ const type = guessSerializerType(rawInit);
172
+ const data = (shallow ? shallowRef : ref)(initialValue);
173
+ const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type];
174
+ function read(event) {
175
+ if (!storage || event && event.key !== key)
176
+ return;
177
+ try {
178
+ const rawValue = event ? event.newValue : storage.getItem(key);
179
+ if (rawValue == null) {
180
+ data.value = rawInit;
181
+ if (writeDefaults && rawInit !== null)
182
+ storage.setItem(key, serializer.write(rawInit));
183
+ } else {
184
+ data.value = serializer.read(rawValue);
185
+ }
186
+ } catch (e) {
187
+ onError(e);
188
+ }
189
+ }
190
+ read();
191
+ if (window && listenToStorageChanges)
192
+ useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
193
+ if (storage) {
194
+ watchWithFilter(data, () => {
195
+ try {
196
+ if (data.value == null)
197
+ storage.removeItem(key);
198
+ else
199
+ storage.setItem(key, serializer.write(data.value));
200
+ } catch (e) {
201
+ onError(e);
202
+ }
203
+ }, {
204
+ flush,
205
+ deep,
206
+ eventFilter
207
+ });
208
+ }
209
+ return data;
210
+ }
211
+
212
+ function useMediaQuery(query, options = {}) {
213
+ const { window = defaultWindow } = options;
214
+ let mediaQuery;
215
+ const matches = ref(false);
216
+ const update = () => {
217
+ if (!window)
218
+ return;
219
+ if (!mediaQuery)
220
+ mediaQuery = window.matchMedia(query);
221
+ matches.value = mediaQuery.matches;
222
+ };
223
+ tryOnMounted(() => {
224
+ update();
225
+ if (!mediaQuery)
226
+ return;
227
+ if ("addEventListener" in mediaQuery)
228
+ mediaQuery.addEventListener("change", update);
229
+ else
230
+ mediaQuery.addListener(update);
231
+ tryOnScopeDispose(() => {
232
+ if ("removeEventListener" in update)
233
+ mediaQuery.removeEventListener("change", update);
234
+ else
235
+ mediaQuery.removeListener(update);
236
+ });
237
+ });
238
+ return matches;
239
+ }
240
+
241
+ function usePreferredDark(options) {
242
+ return useMediaQuery("(prefers-color-scheme: dark)", options);
243
+ }
244
+
245
+ var __defProp$7 = Object.defineProperty;
246
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
247
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
248
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
249
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
250
+ var __spreadValues$7 = (a, b) => {
251
+ for (var prop in b || (b = {}))
252
+ if (__hasOwnProp$7.call(b, prop))
253
+ __defNormalProp$7(a, prop, b[prop]);
254
+ if (__getOwnPropSymbols$7)
255
+ for (var prop of __getOwnPropSymbols$7(b)) {
256
+ if (__propIsEnum$7.call(b, prop))
257
+ __defNormalProp$7(a, prop, b[prop]);
258
+ }
259
+ return a;
260
+ };
261
+ function useColorMode(options = {}) {
262
+ var _a;
263
+ const {
264
+ selector = "html",
265
+ attribute = "class",
266
+ window = defaultWindow,
267
+ storage = (_a = defaultWindow) == null ? void 0 : _a.localStorage,
268
+ storageKey = "vueuse-color-scheme",
269
+ listenToStorageChanges = true,
270
+ storageRef
271
+ } = options;
272
+ const modes = __spreadValues$7({
273
+ auto: "",
274
+ light: "light",
275
+ dark: "dark"
276
+ }, options.modes || {});
277
+ const preferredDark = usePreferredDark({ window });
278
+ const preferredMode = computed(() => preferredDark.value ? "dark" : "light");
279
+ const store = storageRef || (storageKey == null ? ref("auto") : useStorage(storageKey, "auto", storage, { window, listenToStorageChanges }));
280
+ const state = computed({
281
+ get() {
282
+ return store.value === "auto" ? preferredMode.value : store.value;
283
+ },
284
+ set(v) {
285
+ store.value = v;
286
+ }
287
+ });
288
+ function defaultOnChanged(value) {
289
+ const el = window == null ? void 0 : window.document.querySelector(selector);
290
+ if (!el)
291
+ return;
292
+ if (attribute === "class") {
293
+ const current = (modes[value] || "").split(/\s/g);
294
+ Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
295
+ if (current.includes(v))
296
+ el.classList.add(v);
297
+ else
298
+ el.classList.remove(v);
299
+ });
300
+ } else {
301
+ el.setAttribute(attribute, value);
302
+ }
303
+ }
304
+ function onChanged(mode) {
305
+ if (options.onChanged)
306
+ options.onChanged(mode, defaultOnChanged);
307
+ else
308
+ defaultOnChanged(mode);
309
+ }
310
+ watch(state, onChanged, { flush: "post" });
311
+ tryOnMounted(() => onChanged(state.value));
312
+ return state;
313
+ }
314
+
315
+ const UseColorMode = defineComponent({
316
+ name: "UseColorMode",
317
+ props: ["selector", "attribute", "modes", "onChanged", "storageKey", "storage"],
318
+ setup(props, { slots }) {
319
+ const mode = useColorMode(props);
320
+ const data = reactive({
321
+ mode
322
+ });
323
+ return () => {
324
+ if (slots.default)
325
+ return slots.default(data);
326
+ };
327
+ }
328
+ });
329
+
122
330
  const UseDark = defineComponent({
123
331
  name: "UseDark",
124
332
  props: ["selector", "attribute", "valueDark", "valueLight", "onChanged", "storageKey", "storage"],
@@ -226,7 +434,7 @@ const UseDraggable = defineComponent({
226
434
  ],
227
435
  setup(props, { slots }) {
228
436
  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 };
437
+ 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
438
  const data = reactive(useDraggable(target, __spreadProps$5(__spreadValues$6({}, props), {
231
439
  initialValue
232
440
  })));
@@ -509,7 +717,7 @@ const UsePreferredDark = defineComponent({
509
717
  name: "UsePreferredDark",
510
718
  setup(props, { slots }) {
511
719
  const data = reactive({
512
- prefersDark: usePreferredDark()
720
+ prefersDark: usePreferredDark$1()
513
721
  });
514
722
  return () => {
515
723
  if (slots.default)
@@ -531,6 +739,79 @@ const UsePreferredLanguages = defineComponent({
531
739
  }
532
740
  });
533
741
 
742
+ const topVarName = "--vueuse-safe-area-top";
743
+ const rightVarName = "--vueuse-safe-area-right";
744
+ const bottomVarName = "--vueuse-safe-area-bottom";
745
+ const leftVarName = "--vueuse-safe-area-left";
746
+ function useScreenSafeArea() {
747
+ const top = ref("");
748
+ const right = ref("");
749
+ const bottom = ref("");
750
+ const left = ref("");
751
+ if (isClient$1) {
752
+ const topCssVar = useCssVar(topVarName);
753
+ const rightCssVar = useCssVar(rightVarName);
754
+ const bottomCssVar = useCssVar(bottomVarName);
755
+ const leftCssVar = useCssVar(leftVarName);
756
+ topCssVar.value = "env(safe-area-inset-top, 0px)";
757
+ rightCssVar.value = "env(safe-area-inset-right, 0px)";
758
+ bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
759
+ leftCssVar.value = "env(safe-area-inset-left, 0px)";
760
+ update();
761
+ useEventListener$1("resize", useDebounceFn(update));
762
+ }
763
+ function update() {
764
+ top.value = getValue(topVarName);
765
+ right.value = getValue(rightVarName);
766
+ bottom.value = getValue(bottomVarName);
767
+ left.value = getValue(leftVarName);
768
+ }
769
+ return {
770
+ top,
771
+ right,
772
+ bottom,
773
+ left,
774
+ update
775
+ };
776
+ }
777
+ function getValue(position) {
778
+ return getComputedStyle(document.documentElement).getPropertyValue(position);
779
+ }
780
+
781
+ const UseScreenSafeArea = defineComponent({
782
+ name: "UseScreenSafeArea",
783
+ props: {
784
+ top: Boolean,
785
+ right: Boolean,
786
+ bottom: Boolean,
787
+ left: Boolean
788
+ },
789
+ setup(props, { slots }) {
790
+ const {
791
+ top,
792
+ right,
793
+ bottom,
794
+ left
795
+ } = useScreenSafeArea();
796
+ return () => {
797
+ if (slots.default) {
798
+ return h("div", {
799
+ style: {
800
+ paddingTop: props.top ? top.value : "",
801
+ paddingRight: props.right ? right.value : "",
802
+ paddingBottom: props.bottom ? bottom.value : "",
803
+ paddingLeft: props.left ? left.value : "",
804
+ boxSizing: "border-box",
805
+ maxHeight: "100vh",
806
+ maxWidth: "100vw",
807
+ overflow: "auto"
808
+ }
809
+ }, slots.default());
810
+ }
811
+ };
812
+ }
813
+ });
814
+
534
815
  var __defProp$2 = Object.defineProperty;
535
816
  var __defProps$1 = Object.defineProperties;
536
817
  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
@@ -554,7 +835,7 @@ const UseTimeAgo = defineComponent({
554
835
  name: "UseTimeAgo",
555
836
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
556
837
  setup(props, { slots }) {
557
- const { time } = toRefs(props);
838
+ const time = toRef(props, "time");
558
839
  const data = reactive(useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
559
840
  return () => {
560
841
  if (slots.default)
@@ -652,4 +933,4 @@ const UseWindowSize = defineComponent({
652
933
  }
653
934
  });
654
935
 
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 };
936
+ 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.1.2",
3
+ "version": "7.4.0",
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.1.2",
37
- "@vueuse/shared": "7.1.2",
36
+ "@vueuse/core": "7.4.0",
37
+ "@vueuse/shared": "7.4.0",
38
38
  "vue-demi": "*"
39
39
  }
40
40
  }