@vueuse/components 7.3.0 → 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"],
@@ -631,7 +839,7 @@ const UseTimeAgo = vueDemi.defineComponent({
631
839
  name: "UseTimeAgo",
632
840
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
633
841
  setup(props, { slots }) {
634
- const { time } = vueDemi.toRefs(props);
842
+ const time = vueDemi.toRef(props, "time");
635
843
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
636
844
  return () => {
637
845
  if (slots.default)
@@ -733,6 +941,7 @@ exports.OnClickOutside = OnClickOutside;
733
941
  exports.UseActiveElement = UseActiveElement;
734
942
  exports.UseBattery = UseBattery;
735
943
  exports.UseBrowserLocation = UseBrowserLocation;
944
+ exports.UseColorMode = UseColorMode;
736
945
  exports.UseDark = UseDark;
737
946
  exports.UseDeviceMotion = UseDeviceMotion;
738
947
  exports.UseDeviceOrientation = UseDeviceOrientation;
package/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as vue_demi from 'vue-demi';
2
- import { FunctionDirective } from 'vue-demi';
3
- import { UseDarkOptions, UseDevicesListOptions, UseDraggableOptions, ElementSize, GeolocationOptions, IdleOptions, MouseOptions, MouseInElementOptions, MousePressedOptions, UseNowOptions, UsePointerOptions, TimeAgoOptions, TimestampOptions, UseVirtualListOptions, WindowSizeOptions } from '@vueuse/core';
4
- import { MaybeRef } from '@vueuse/shared';
2
+ import { FunctionDirective, Ref } from 'vue-demi';
3
+ import { ConfigurableEventFilter, ConfigurableFlush, MaybeRef } from '@vueuse/shared';
4
+ import { UseDarkOptions, UseDevicesListOptions, UseDraggableOptions, ElementSize, GeolocationOptions, IdleOptions, MouseOptions, MouseInElementOptions, MousePressedOptions, UseNowOptions, UsePointerOptions, UseTimeAgoOptions, TimestampOptions, UseVirtualListOptions, WindowSizeOptions } from '@vueuse/core';
5
5
 
6
6
  interface ConfigurableWindow {
7
7
  window?: Window;
@@ -35,6 +35,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, {
@@ -167,7 +262,7 @@ declare const UseScreenSafeArea: vue_demi.DefineComponent<{
167
262
  bottom: boolean;
168
263
  }>;
169
264
 
170
- interface UseTimeAgoComponentOptions extends Omit<TimeAgoOptions<true>, 'controls'> {
265
+ interface UseTimeAgoComponentOptions extends Omit<UseTimeAgoOptions<true>, 'controls'> {
171
266
  time: MaybeRef<Date | number | string>;
172
267
  }
173
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>, {}>;
@@ -202,4 +297,4 @@ declare const UseWindowFocus: vue_demi.DefineComponent<{}, () => vue_demi.VNode<
202
297
 
203
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>, {}>;
204
299
 
205
- export { OnClickOutside, UseActiveElement, UseBattery, UseBrowserLocation, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseDraggableProps, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseOnline, UsePageLeave, UsePointer, UsePreferredColorScheme, UsePreferredDark, UsePreferredLanguages, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseVirtualListProps, UseWindowFocus, UseWindowSize, VOnClickOutside };
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"],
@@ -687,7 +895,7 @@
687
895
  name: "UseTimeAgo",
688
896
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
689
897
  setup(props, { slots }) {
690
- const { time } = vueDemi.toRefs(props);
898
+ const time = vueDemi.toRef(props, "time");
691
899
  const data = vueDemi.reactive(core.useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
692
900
  return () => {
693
901
  if (slots.default)
@@ -789,6 +997,7 @@
789
997
  exports.UseActiveElement = UseActiveElement;
790
998
  exports.UseBattery = UseBattery;
791
999
  exports.UseBrowserLocation = UseBrowserLocation;
1000
+ exports.UseColorMode = UseColorMode;
792
1001
  exports.UseDark = UseDark;
793
1002
  exports.UseDeviceMotion = UseDeviceMotion;
794
1003
  exports.UseDeviceOrientation = UseDeviceOrientation;
package/index.iife.min.js CHANGED
@@ -1 +1 @@
1
- (function(s){if(!s.VueDemi){var n={},a=s.Vue;if(a)if(a.version.slice(0,2)==="2."){var l=s.VueCompositionAPI;if(l){for(var _ in l)n[_]=l[_];n.isVue2=!0,n.isVue3=!1,n.install=function(){},n.Vue=a,n.Vue2=a,n.version=a.version}else console.error("[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.")}else if(a.version.slice(0,2)==="3."){for(var _ in a)n[_]=a[_];n.isVue2=!1,n.isVue3=!0,n.install=function(){},n.Vue=a,n.Vue2=void 0,n.version=a.version,n.set=function(f,d,g){return Array.isArray(f)?(f.length=Math.max(f.length,d),f.splice(d,1,g),g):(f[d]=g,g)},n.del=function(f,d){if(Array.isArray(f)){f.splice(d,1);return}delete f[d]}}else console.error("[vue-demi] Vue version "+a.version+" is unsupported.");else console.error("[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.");s.VueDemi=n}})(window),function(s,n,a,l){"use strict";const _=n.defineComponent({name:"OnClickOutside",props:["as"],emits:["trigger"],setup(r,{slots:e,emit:t}){const o=n.ref();return a.onClickOutside(o,i=>{t("trigger",i)}),()=>{if(e.default)return n.h(r.as||"div",{ref:o},e.default())}}});function f(r){var e;const t=n.unref(r);return(e=t==null?void 0:t.$el)!=null?e:t}const d=l.isClient?window:void 0;function g(...r){let e,t,o,i;if(l.isString(r[0])?([t,o,i]=r,e=d):[e,t,o,i]=r,!e)return l.noop;let p=l.noop;const c=n.watch(()=>n.unref(e),u=>{p(),!!u&&(u.addEventListener(t,o,i),p=()=>{u.removeEventListener(t,o,i),p=l.noop})},{immediate:!0,flush:"post"}),m=()=>{c(),p()};return l.tryOnScopeDispose(m),m}function F(r,e,t={}){const{window:o=d}=t;if(!o)return;const i=n.ref(!0),c=[g(o,"click",u=>{const P=f(r);!P||P===u.target||u.composedPath().includes(P)||!i.value||e(u)},{passive:!0,capture:!0}),g(o,"pointerdown",u=>{const P=f(r);i.value=!!P&&!u.composedPath().includes(P)},{passive:!0})];return()=>c.forEach(u=>u())}const W=(r,e)=>{F(r,e.value)},z=n.defineComponent({name:"UseActiveElement",setup(r,{slots:e}){const t=n.reactive({element:a.useActiveElement()});return()=>{if(e.default)return e.default(t)}}}),R=n.defineComponent({name:"UseBattery",setup(r,{slots:e}){const t=n.reactive(a.useBattery(r));return()=>{if(e.default)return e.default(t)}}}),k=n.defineComponent({name:"UseBrowserLocation",setup(r,{slots:e}){const t=n.reactive(a.useBrowserLocation());return()=>{if(e.default)return e.default(t)}}}),G=n.defineComponent({name:"UseDark",props:["selector","attribute","valueDark","valueLight","onChanged","storageKey","storage"],setup(r,{slots:e}){const t=a.useDark(r),o=n.reactive({isDark:t,toggleDark:l.useToggle(t)});return()=>{if(e.default)return e.default(o)}}}),H=n.defineComponent({name:"UseDeviceMotion",setup(r,{slots:e}){const t=n.reactive(a.useDeviceMotion());return()=>{if(e.default)return e.default(t)}}}),K=n.defineComponent({name:"UseDeviceOrientation",setup(r,{slots:e}){const t=n.reactive(a.useDeviceOrientation());return()=>{if(e.default)return e.default(t)}}}),q=n.defineComponent({name:"UseDevicePixelRatio",setup(r,{slots:e}){const t=n.reactive({pixelRatio:a.useDevicePixelRatio()});return()=>{if(e.default)return e.default(t)}}}),J=n.defineComponent({name:"UseDevicesList",props:["onUpdated","requestPermissions","constraints"],setup(r,{slots:e}){const t=n.reactive(a.useDevicesList(r));return()=>{if(e.default)return e.default(t)}}}),Q=n.defineComponent({name:"UseDocumentVisibility",setup(r,{slots:e}){const t=n.reactive({visibility:a.useDocumentVisibility()});return()=>{if(e.default)return e.default(t)}}});var X=Object.defineProperty,Y=Object.defineProperties,Z=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable,v=(r,e,t)=>e in r?X(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,ee=(r,e)=>{for(var t in e||(e={}))x.call(e,t)&&v(r,t,e[t]);if(O)for(var t of O(e))D.call(e,t)&&v(r,t,e[t]);return r},te=(r,e)=>Y(r,Z(e));const re=n.defineComponent({name:"UseDraggable",props:["storageKey","initialValue","exact","preventDefault","pointerTypes","as"],setup(r,{slots:e}){const t=n.ref(),o=r.storageKey?a.useStorage(r.storageKey,n.unref(r.initialValue)||{x:0,y:0},a.isClient?r.storageType==="session"?sessionStorage:localStorage:void 0):r.initialValue||{x:0,y:0},i=n.reactive(a.useDraggable(t,te(ee({},r),{initialValue:o})));return()=>{if(e.default)return n.h(r.as||"div",{ref:t,style:`touch-action:none;${i.style}`},e.default(i))}}}),ne=n.defineComponent({name:"UseElementBounding",props:["box","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useElementBounding(t));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),ae=n.defineComponent({name:"UseElementSize",props:["width","height","box"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useElementSize(t,{width:r.width,height:r.height},{box:r.box}));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),se=n.defineComponent({name:"UseElementVisibility",props:["as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive({isVisible:a.useElementVisibility(t)});return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),oe=n.defineComponent({name:"UseEyeDropper",props:{sRGBHex:String},setup(r,{slots:e}){const t=n.reactive(a.useEyeDropper());return()=>{if(e.default)return e.default(t)}}}),ie=n.defineComponent({name:"UseFullscreen",props:["as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useFullscreen(t));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),ue=n.defineComponent({name:"UseGeolocation",props:["enableHighAccuracy","maximumAge","timeout","navigator"],setup(r,{slots:e}){const t=n.reactive(a.useGeolocation(r));return()=>{if(e.default)return e.default(t)}}}),fe=n.defineComponent({name:"UseIdle",props:["timeout","events","listenForVisibilityChange","initialState"],setup(r,{slots:e}){const t=n.reactive(a.useIdle(r.timeout,r));return()=>{if(e.default)return e.default(t)}}}),le=n.defineComponent({name:"UseMouse",props:["touch","resetOnTouchEnds","initialValue"],setup(r,{slots:e}){const t=n.reactive(a.useMouse(r));return()=>{if(e.default)return e.default(t)}}}),pe=n.defineComponent({name:"UseMouseElement",props:["handleOutside","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useMouseInElement(t,r));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}});var de=Object.defineProperty,ce=Object.defineProperties,_e=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertySymbols,ge=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable,h=(r,e,t)=>e in r?de(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,me=(r,e)=>{for(var t in e||(e={}))ge.call(e,t)&&h(r,t,e[t]);if(y)for(var t of y(e))Pe.call(e,t)&&h(r,t,e[t]);return r},Ue=(r,e)=>ce(r,_e(e));const Oe=n.defineComponent({name:"UseMousePressed",props:["touch","initialValue","as"],setup(r,{slots:e}){const t=n.ref(),o=n.reactive(a.useMousePressed(Ue(me({},r),{target:t})));return()=>{if(e.default)return n.h(r.as||"div",{ref:t},e.default(o))}}}),ve=n.defineComponent({name:"UseNetwork",setup(r,{slots:e}){const t=n.reactive(a.useNetwork());return()=>{if(e.default)return e.default(t)}}});var ye=Object.defineProperty,he=Object.defineProperties,we=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,Ve=Object.prototype.propertyIsEnumerable,b=(r,e,t)=>e in r?ye(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Ce=(r,e)=>{for(var t in e||(e={}))be.call(e,t)&&b(r,t,e[t]);if(w)for(var t of w(e))Ve.call(e,t)&&b(r,t,e[t]);return r},$e=(r,e)=>he(r,we(e));const Ee=n.defineComponent({name:"UseNow",props:["interval"],setup(r,{slots:e}){const t=n.reactive(a.useNow($e(Ce({},r),{controls:!0})));return()=>{if(e.default)return e.default(t)}}}),Se=n.defineComponent({name:"UseOnline",setup(r,{slots:e}){const t=n.reactive({isOnline:a.useOnline()});return()=>{if(e.default)return e.default(t)}}}),Le=n.defineComponent({name:"UsePageLeave",setup(r,{slots:e}){const t=n.reactive({isLeft:a.usePageLeave()});return()=>{if(e.default)return e.default(t)}}});var je=Object.defineProperty,Ie=Object.defineProperties,Ne=Object.getOwnPropertyDescriptors,V=Object.getOwnPropertySymbols,Ae=Object.prototype.hasOwnProperty,Be=Object.prototype.propertyIsEnumerable,C=(r,e,t)=>e in r?je(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Me=(r,e)=>{for(var t in e||(e={}))Ae.call(e,t)&&C(r,t,e[t]);if(V)for(var t of V(e))Be.call(e,t)&&C(r,t,e[t]);return r},Te=(r,e)=>Ie(r,Ne(e));const Fe=n.defineComponent({name:"UsePointer",props:["pointerTypes","initialValue","target"],setup(r,{slots:e}){const t=n.ref(null),o=n.reactive(a.usePointer(Te(Me({},r),{target:r.target==="self"?t:d})));return()=>{if(e.default)return e.default(o,{ref:t})}}}),We=n.defineComponent({name:"UsePreferredColorScheme",setup(r,{slots:e}){const t=n.reactive({colorScheme:a.usePreferredColorScheme()});return()=>{if(e.default)return e.default(t)}}}),ze=n.defineComponent({name:"UsePreferredDark",setup(r,{slots:e}){const t=n.reactive({prefersDark:a.usePreferredDark()});return()=>{if(e.default)return e.default(t)}}}),Re=n.defineComponent({name:"UsePreferredLanguages",setup(r,{slots:e}){const t=n.reactive({languages:a.usePreferredLanguages()});return()=>{if(e.default)return e.default(t)}}}),$="--vueuse-safe-area-top",E="--vueuse-safe-area-right",S="--vueuse-safe-area-bottom",L="--vueuse-safe-area-left";function ke(){const r=n.ref(""),e=n.ref(""),t=n.ref(""),o=n.ref("");if(a.isClient){const p=a.useCssVar($),c=a.useCssVar(E),m=a.useCssVar(S),u=a.useCssVar(L);p.value="env(safe-area-inset-top, 0px)",c.value="env(safe-area-inset-right, 0px)",m.value="env(safe-area-inset-bottom, 0px)",u.value="env(safe-area-inset-left, 0px)",i(),a.useEventListener("resize",a.useDebounceFn(i))}function i(){r.value=U($),e.value=U(E),t.value=U(S),o.value=U(L)}return{top:r,right:e,bottom:t,left:o,update:i}}function U(r){return getComputedStyle(document.documentElement).getPropertyValue(r)}const Ge=n.defineComponent({name:"UseScreenSafeArea",props:{top:Boolean,right:Boolean,bottom:Boolean,left:Boolean},setup(r,{slots:e}){const{top:t,right:o,bottom:i,left:p}=ke();return()=>{if(e.default)return n.h("div",{style:{paddingTop:r.top?t.value:"",paddingRight:r.right?o.value:"",paddingBottom:r.bottom?i.value:"",paddingLeft:r.left?p.value:"",boxSizing:"border-box",maxHeight:"100vh",maxWidth:"100vw",overflow:"auto"}},e.default())}}});var He=Object.defineProperty,Ke=Object.defineProperties,qe=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,Je=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable,I=(r,e,t)=>e in r?He(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Xe=(r,e)=>{for(var t in e||(e={}))Je.call(e,t)&&I(r,t,e[t]);if(j)for(var t of j(e))Qe.call(e,t)&&I(r,t,e[t]);return r},Ye=(r,e)=>Ke(r,qe(e));const Ze=n.defineComponent({name:"UseTimeAgo",props:["time","updateInterval","max","fullDateFormatter","messages"],setup(r,{slots:e}){const{time:t}=n.toRefs(r),o=n.reactive(a.useTimeAgo(t,Ye(Xe({},r),{controls:!0})));return()=>{if(e.default)return e.default(o)}}});var xe=Object.defineProperty,De=Object.defineProperties,et=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertySymbols,tt=Object.prototype.hasOwnProperty,rt=Object.prototype.propertyIsEnumerable,A=(r,e,t)=>e in r?xe(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,nt=(r,e)=>{for(var t in e||(e={}))tt.call(e,t)&&A(r,t,e[t]);if(N)for(var t of N(e))rt.call(e,t)&&A(r,t,e[t]);return r},at=(r,e)=>De(r,et(e));const st=n.defineComponent({name:"UseTimestamp",props:["immediate","interval","offset"],setup(r,{slots:e}){const t=n.reactive(a.useTimestamp(at(nt({},r),{controls:!0})));return()=>{if(e.default)return e.default(t)}}});var ot=Object.defineProperty,B=Object.getOwnPropertySymbols,it=Object.prototype.hasOwnProperty,ut=Object.prototype.propertyIsEnumerable,M=(r,e,t)=>e in r?ot(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,T=(r,e)=>{for(var t in e||(e={}))it.call(e,t)&&M(r,t,e[t]);if(B)for(var t of B(e))ut.call(e,t)&&M(r,t,e[t]);return r};const ft=n.defineComponent({name:"UseVirtualList",props:["list","options","height"],setup(r,{slots:e}){const{list:t}=n.toRefs(r),{list:o,containerProps:i,wrapperProps:p}=a.useVirtualList(t,r.options);return i.style.height=r.height||"300px",()=>n.h("div",T({},i),[n.h("div",T({},p.value),o.value.map(c=>n.h("div",{style:{overFlow:"hidden",height:c.height}},e.default?e.default(c):"Please set content!")))])}}),lt=n.defineComponent({name:"UseWindowFocus",setup(r,{slots:e}){const t=n.reactive({focused:a.useWindowFocus()});return()=>{if(e.default)return e.default(t)}}}),pt=n.defineComponent({name:"UseWindowSize",props:["initialWidth","initialHeight"],setup(r,{slots:e}){const t=n.reactive(a.useWindowSize(r));return()=>{if(e.default)return e.default(t)}}});s.OnClickOutside=_,s.UseActiveElement=z,s.UseBattery=R,s.UseBrowserLocation=k,s.UseDark=G,s.UseDeviceMotion=H,s.UseDeviceOrientation=K,s.UseDevicePixelRatio=q,s.UseDevicesList=J,s.UseDocumentVisibility=Q,s.UseDraggable=re,s.UseElementBounding=ne,s.UseElementSize=ae,s.UseElementVisibility=se,s.UseEyeDropper=oe,s.UseFullscreen=ie,s.UseGeolocation=ue,s.UseIdle=fe,s.UseMouse=le,s.UseMouseInElement=pe,s.UseMousePressed=Oe,s.UseNetwork=ve,s.UseNow=Ee,s.UseOnline=Se,s.UsePageLeave=Le,s.UsePointer=Fe,s.UsePreferredColorScheme=We,s.UsePreferredDark=ze,s.UsePreferredLanguages=Re,s.UseScreenSafeArea=Ge,s.UseTimeAgo=Ze,s.UseTimestamp=st,s.UseVirtualList=ft,s.UseWindowFocus=lt,s.UseWindowSize=pt,s.VOnClickOutside=W,Object.defineProperty(s,"__esModule",{value:!0})}(this.VueUse=this.VueUse||{},VueDemi,VueUse,VueUse);
1
+ (function(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, useCssVar, useEventListener as useEventListener$1, useDebounceFn, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';
3
- import { isClient, isString, noop, tryOnScopeDispose, useToggle } from '@vueuse/shared';
1
+ import { defineComponent, ref, h, unref, watch, reactive, shallowRef, computed, toRef, toRefs } from 'vue-demi';
2
+ import { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize, useElementVisibility, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useOnline, usePageLeave, usePointer, usePreferredColorScheme, usePreferredDark as usePreferredDark$1, usePreferredLanguages, 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)
@@ -627,7 +835,7 @@ const UseTimeAgo = defineComponent({
627
835
  name: "UseTimeAgo",
628
836
  props: ["time", "updateInterval", "max", "fullDateFormatter", "messages"],
629
837
  setup(props, { slots }) {
630
- const { time } = toRefs(props);
838
+ const time = toRef(props, "time");
631
839
  const data = reactive(useTimeAgo(time, __spreadProps$1(__spreadValues$2({}, props), { controls: true })));
632
840
  return () => {
633
841
  if (slots.default)
@@ -725,4 +933,4 @@ const UseWindowSize = defineComponent({
725
933
  }
726
934
  });
727
935
 
728
- export { OnClickOutside, UseActiveElement, UseBattery, UseBrowserLocation, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseOnline, UsePageLeave, UsePointer, UsePreferredColorScheme, UsePreferredDark, UsePreferredLanguages, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, VOnClickOutside };
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.3.0",
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.3.0",
37
- "@vueuse/shared": "7.3.0",
36
+ "@vueuse/core": "7.4.0",
37
+ "@vueuse/shared": "7.4.0",
38
38
  "vue-demi": "*"
39
39
  }
40
40
  }