@vuetify/v0 0.0.20 → 0.0.21
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/README.md +3 -0
- package/dist/browser/index.js +600 -67
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +4 -4
- package/dist/{components-D590hSY0.mjs → components-BomyjmT3.mjs} +24 -3
- package/dist/composables/index.d.mts +2 -2
- package/dist/composables/index.mjs +4 -4
- package/dist/{composables-FE6B8JUW.mjs → composables-CbAPZabd.mjs} +297 -16
- package/dist/constants/index.mjs +1 -1
- package/dist/{globals-exvZ8fiO.mjs → globals-C3JrEDXZ.mjs} +2 -1
- package/dist/{index-DahjxaTj.d.mts → index-B0QJdwz9.d.mts} +5 -6
- package/dist/{index-CjzlIAtF.d.mts → index-CxeZr8jO.d.mts} +0 -26
- package/dist/{index-Gr6XPRWt.d.mts → index-MLb3LH9a.d.mts} +2 -2
- package/dist/{index-BYyEPh1S.d.mts → index-OU0IRbIS.d.mts} +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +5 -5
- package/dist/{useStep-Dw7XloDM.mjs → useStep-CfgBbrJB.mjs} +262 -38
- package/dist/utilities/index.d.mts +1 -1
- package/dist/utilities/index.mjs +1 -1
- package/dist/{utilities-BrFKLHFS.mjs → utilities-CjDz-Xvn.mjs} +14 -8
- package/package.json +1 -19
package/dist/browser/index.js
CHANGED
|
@@ -335,18 +335,24 @@ function isNaN(item) {
|
|
|
335
335
|
* mergeDeep({ arr: [1, 2] }, { arr: [3] }) // { arr: [3] }
|
|
336
336
|
* ```
|
|
337
337
|
*/
|
|
338
|
+
const UNSAFE_KEYS = new Set([
|
|
339
|
+
"__proto__",
|
|
340
|
+
"constructor",
|
|
341
|
+
"prototype"
|
|
342
|
+
]);
|
|
338
343
|
/* @__NO_SIDE_EFFECTS__ */
|
|
339
344
|
function mergeDeep(target, ...sources) {
|
|
340
345
|
if (sources.length === 0) return target;
|
|
341
346
|
const source = sources.shift();
|
|
342
|
-
if (/* @__PURE__ */ isObject(target) && /* @__PURE__ */ isObject(source)) {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
347
|
+
if (/* @__PURE__ */ isObject(target) && /* @__PURE__ */ isObject(source)) for (const key in source) {
|
|
348
|
+
if (UNSAFE_KEYS.has(key)) continue;
|
|
349
|
+
if (!Object.prototype.hasOwnProperty.call(source, key)) continue;
|
|
350
|
+
const sourceValue = source[key];
|
|
351
|
+
const targetValue = target[key];
|
|
352
|
+
if (/* @__PURE__ */ isObject(sourceValue)) {
|
|
353
|
+
if (!/* @__PURE__ */ isObject(targetValue)) Object.assign(target, { [key]: {} });
|
|
354
|
+
target[key];
|
|
355
|
+
} else Object.assign(target, { [key]: sourceValue });
|
|
350
356
|
}
|
|
351
357
|
return /* @__PURE__ */ mergeDeep(target, ...sources);
|
|
352
358
|
}
|
|
@@ -440,6 +446,27 @@ function debounce(fn, delay) {
|
|
|
440
446
|
|
|
441
447
|
//#endregion
|
|
442
448
|
//#region src/components/Atom/Atom.vue
|
|
449
|
+
/**
|
|
450
|
+
* @module Atom
|
|
451
|
+
*
|
|
452
|
+
* @remarks
|
|
453
|
+
* Foundation component providing polymorphic rendering with three modes:
|
|
454
|
+
* 1. **Element Mode** (default): Renders as any HTML element via the `as` prop
|
|
455
|
+
* 2. **Renderless Mode**: Renders slot content directly without wrapper
|
|
456
|
+
* 3. **Null Mode**: Equivalent to renderless when `as={null}`
|
|
457
|
+
*
|
|
458
|
+
* Key features:
|
|
459
|
+
* - Polymorphic element rendering (div, button, span, etc.)
|
|
460
|
+
* - Self-closing tag detection (img, input, br, hr, etc.)
|
|
461
|
+
* - Automatic attribute forwarding to rendered element
|
|
462
|
+
* - Generic slot props typing for type-safe attribute passing
|
|
463
|
+
* - Template ref exposure for DOM element access
|
|
464
|
+
* - Renderless mode for maximum flexibility
|
|
465
|
+
*
|
|
466
|
+
* The Atom component is the lowest-level primitive in the component system,
|
|
467
|
+
* serving as the foundation for all other components that need polymorphic
|
|
468
|
+
* rendering capabilities.
|
|
469
|
+
*/
|
|
443
470
|
const _sfc_main$27 = /* @__PURE__ */ defineComponent({
|
|
444
471
|
name: "Atom",
|
|
445
472
|
__name: "Atom",
|
|
@@ -476,6 +503,22 @@ var Atom_default = _sfc_main$27;
|
|
|
476
503
|
//#endregion
|
|
477
504
|
//#region src/composables/createContext/index.ts
|
|
478
505
|
/**
|
|
506
|
+
* @module createContext
|
|
507
|
+
*
|
|
508
|
+
* @see https://0.vuetifyjs.com/composables/foundation/create-context
|
|
509
|
+
*
|
|
510
|
+
* @remarks
|
|
511
|
+
* Factory for creating type-safe Vue dependency injection contexts.
|
|
512
|
+
*
|
|
513
|
+
* Provides a wrapper around Vue's provide/inject that throws errors when context is not found,
|
|
514
|
+
* eliminating silent failures and improving developer experience. Supports both app-level and
|
|
515
|
+
* component-level provision.
|
|
516
|
+
*
|
|
517
|
+
* Supports two modes:
|
|
518
|
+
* - **Static key**: `createContext('my-key')` - key is fixed at creation time
|
|
519
|
+
* - **Dynamic key**: `createContext()` or `createContext({ suffix: 'item' })` - key provided at runtime
|
|
520
|
+
*/
|
|
521
|
+
/**
|
|
479
522
|
* Injects a context provided by an ancestor component.
|
|
480
523
|
*
|
|
481
524
|
* @param key The key of the context to inject.
|
|
@@ -602,6 +645,18 @@ function createTrinity(useContext$1, provideContext$1, context) {
|
|
|
602
645
|
];
|
|
603
646
|
}
|
|
604
647
|
|
|
648
|
+
//#endregion
|
|
649
|
+
//#region src/constants/globals.ts
|
|
650
|
+
const IN_BROWSER = typeof window !== "undefined";
|
|
651
|
+
const SUPPORTS_TOUCH = IN_BROWSER && ("ontouchstart" in window || window.navigator.maxTouchPoints > 0);
|
|
652
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof window.matchMedia === "function";
|
|
653
|
+
const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
|
|
654
|
+
const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
|
|
655
|
+
const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
|
|
656
|
+
const version = "0.0.21";
|
|
657
|
+
/* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
|
|
658
|
+
const __LOGGER_ENABLED__ = false;
|
|
659
|
+
|
|
605
660
|
//#endregion
|
|
606
661
|
//#region src/composables/createPlugin/index.ts
|
|
607
662
|
/**
|
|
@@ -713,17 +768,6 @@ var PinoLoggerAdapter = class {
|
|
|
713
768
|
}
|
|
714
769
|
};
|
|
715
770
|
|
|
716
|
-
//#endregion
|
|
717
|
-
//#region src/constants/globals.ts
|
|
718
|
-
const IN_BROWSER = typeof window !== "undefined";
|
|
719
|
-
const SUPPORTS_TOUCH = IN_BROWSER && ("ontouchstart" in window || window.navigator.maxTouchPoints > 0);
|
|
720
|
-
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof window.matchMedia === "function";
|
|
721
|
-
const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
|
|
722
|
-
const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
|
|
723
|
-
const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
|
|
724
|
-
const version = "0.0.20";
|
|
725
|
-
const __LOGGER_ENABLED__ = false;
|
|
726
|
-
|
|
727
771
|
//#endregion
|
|
728
772
|
//#region src/composables/useLogger/adapters/v0.ts
|
|
729
773
|
/**
|
|
@@ -769,10 +813,12 @@ var Vuetify0LoggerAdapter = class {
|
|
|
769
813
|
}
|
|
770
814
|
timestamp() {
|
|
771
815
|
if (!IN_BROWSER) return (/* @__PURE__ */ new Date()).toISOString();
|
|
816
|
+
/* v8 ignore next -- defensive fallback, toTimeString always returns valid format */
|
|
772
817
|
return (/* @__PURE__ */ new Date()).toTimeString().split(" ")[0] ?? "";
|
|
773
818
|
}
|
|
774
819
|
style(level) {
|
|
775
820
|
if (!this.colors || !IN_BROWSER) return "";
|
|
821
|
+
/* v8 ignore next -- LogLevel union is exhaustive */
|
|
776
822
|
return {
|
|
777
823
|
trace: "color: #64748b",
|
|
778
824
|
debug: "color: #3b82f6",
|
|
@@ -1023,6 +1069,23 @@ function useLogger(namespace = "v0:logger") {
|
|
|
1023
1069
|
//#endregion
|
|
1024
1070
|
//#region src/composables/useRegistry/index.ts
|
|
1025
1071
|
/**
|
|
1072
|
+
* @module useRegistry
|
|
1073
|
+
*
|
|
1074
|
+
* @see https://0.vuetifyjs.com/composables/registration/use-registry
|
|
1075
|
+
*
|
|
1076
|
+
* @remarks
|
|
1077
|
+
* A foundational composable for managing collections of items (tickets) with:
|
|
1078
|
+
* - Unique ID-based access
|
|
1079
|
+
* - Index-based ordering
|
|
1080
|
+
* - Value-based reverse lookup
|
|
1081
|
+
* - Automatic reindexing
|
|
1082
|
+
* - Optional event emission
|
|
1083
|
+
* - Performance-optimized caching
|
|
1084
|
+
*
|
|
1085
|
+
* The registry serves as the base for many other composables in the system,
|
|
1086
|
+
* including useSelection, useForm, useTimeline, and more.
|
|
1087
|
+
*/
|
|
1088
|
+
/**
|
|
1026
1089
|
* Creates a new registry instance.
|
|
1027
1090
|
*
|
|
1028
1091
|
* @param options The options for the registry instance.
|
|
@@ -1295,7 +1358,7 @@ function useRegistry(options) {
|
|
|
1295
1358
|
return direction === "first" ? tickets$1[0] : tickets$1.at(-1);
|
|
1296
1359
|
}
|
|
1297
1360
|
const tickets = values();
|
|
1298
|
-
const index = /* @__PURE__ */ isUndefined(from) ? void 0 :
|
|
1361
|
+
const index = /* @__PURE__ */ isUndefined(from) ? void 0 : /* @__PURE__ */ clamp(from, 0, tickets.length - 1);
|
|
1299
1362
|
if (direction === "last") {
|
|
1300
1363
|
const start = /* @__PURE__ */ isUndefined(index) ? tickets.length - 1 : index;
|
|
1301
1364
|
for (let i = start; i >= 0; i--) {
|
|
@@ -1380,6 +1443,21 @@ function createRegistryContext(_options = {}) {
|
|
|
1380
1443
|
//#endregion
|
|
1381
1444
|
//#region src/composables/useSelection/index.ts
|
|
1382
1445
|
/**
|
|
1446
|
+
* @module useSelection
|
|
1447
|
+
*
|
|
1448
|
+
* @remarks
|
|
1449
|
+
* Base composable for managing selected items in a collection with Set-based tracking.
|
|
1450
|
+
*
|
|
1451
|
+
* Key features:
|
|
1452
|
+
* - Set-based selectedIds for O(1) selection checks
|
|
1453
|
+
* - Mandatory selection mode (prevents deselecting last item)
|
|
1454
|
+
* - Auto-enrollment option (selects non-disabled items on register)
|
|
1455
|
+
* - Disabled item filtering
|
|
1456
|
+
* - Computed selectedItems and selectedValues Sets
|
|
1457
|
+
*
|
|
1458
|
+
* Extends useRegistry and serves as the base for useSingle, useGroup, useStep, and useFeatures.
|
|
1459
|
+
*/
|
|
1460
|
+
/**
|
|
1383
1461
|
* Creates a new selection instance for managing multiple selected items.
|
|
1384
1462
|
*
|
|
1385
1463
|
* Extends `useRegistry` with selection tracking via a reactive `Set` of selected IDs.
|
|
@@ -1749,12 +1827,26 @@ const Avatar = {
|
|
|
1749
1827
|
* ```
|
|
1750
1828
|
*/
|
|
1751
1829
|
function toArray(value) {
|
|
1752
|
-
return /* @__PURE__ */ isNullOrUndefined(value) ? [] :
|
|
1830
|
+
return /* @__PURE__ */ isNullOrUndefined(value) ? [] : /* @__PURE__ */ isArray(value) ? value : [value];
|
|
1753
1831
|
}
|
|
1754
1832
|
|
|
1755
1833
|
//#endregion
|
|
1756
1834
|
//#region src/composables/useProxyModel/index.ts
|
|
1757
1835
|
/**
|
|
1836
|
+
* @module useProxyModel
|
|
1837
|
+
*
|
|
1838
|
+
* @remarks
|
|
1839
|
+
* Proxy composable for bidirectional sync between selection registry and v-model.
|
|
1840
|
+
*
|
|
1841
|
+
* Key features:
|
|
1842
|
+
* - Bidirectional synchronization
|
|
1843
|
+
* - Array and single-value modes
|
|
1844
|
+
* - Automatic cleanup on scope disposal
|
|
1845
|
+
* - Perfect for form controls with selection backing
|
|
1846
|
+
*
|
|
1847
|
+
* Bridges the gap between selection composables and Vue's v-model.
|
|
1848
|
+
*/
|
|
1849
|
+
/**
|
|
1758
1850
|
* Syncs a ref with a selection registry bidirectionally.
|
|
1759
1851
|
*
|
|
1760
1852
|
* @param registry The selection registry to bind to.
|
|
@@ -2090,6 +2182,21 @@ const ExpansionPanel = {
|
|
|
2090
2182
|
//#endregion
|
|
2091
2183
|
//#region src/composables/useProxyRegistry/index.ts
|
|
2092
2184
|
/**
|
|
2185
|
+
* @module useProxyRegistry
|
|
2186
|
+
*
|
|
2187
|
+
* @remarks
|
|
2188
|
+
* Proxy composable for reactive registry keys, values, entries, and size.
|
|
2189
|
+
*
|
|
2190
|
+
* Key features:
|
|
2191
|
+
* - Reactive proxy for registry data
|
|
2192
|
+
* - Deep or shallow reactivity options
|
|
2193
|
+
* - Event-based updates
|
|
2194
|
+
* - Automatic cleanup on scope disposal
|
|
2195
|
+
* - Transforms Map-based registry into reactive refs
|
|
2196
|
+
*
|
|
2197
|
+
* Perfect for exposing registry data as reactive computed properties.
|
|
2198
|
+
*/
|
|
2199
|
+
/**
|
|
2093
2200
|
* Creates a proxy registry that provides reactive objects for registry data.
|
|
2094
2201
|
*
|
|
2095
2202
|
* @param registry The registry instance to proxy.
|
|
@@ -2139,6 +2246,26 @@ function useProxyRegistry(registry, options) {
|
|
|
2139
2246
|
//#endregion
|
|
2140
2247
|
//#region src/composables/useGroup/index.ts
|
|
2141
2248
|
/**
|
|
2249
|
+
* @module useGroup
|
|
2250
|
+
*
|
|
2251
|
+
* @remarks
|
|
2252
|
+
* Multi-selection composable that extends useSelection with batch operations and tri-state support.
|
|
2253
|
+
*
|
|
2254
|
+
* Key features:
|
|
2255
|
+
* - Batch operations (select/unselect/toggle accept ID | ID[])
|
|
2256
|
+
* - Tri-state support via mixed/indeterminate state (mix/unmix)
|
|
2257
|
+
* - selectedIndexes computed Set for position-based tracking
|
|
2258
|
+
* - Perfect for checkbox trees, multi-select dropdowns, filter panels
|
|
2259
|
+
*
|
|
2260
|
+
* Tri-state behavior:
|
|
2261
|
+
* - Items can be selected, mixed (indeterminate), or unselected
|
|
2262
|
+
* - select() clears mixed state, mix() clears selected state (mutually exclusive)
|
|
2263
|
+
* - toggle() on a mixed item selects it (resolves positively)
|
|
2264
|
+
*
|
|
2265
|
+
* Inheritance chain: useRegistry → useSelection → useGroup
|
|
2266
|
+
* Extended by: useFeatures
|
|
2267
|
+
*/
|
|
2268
|
+
/**
|
|
2142
2269
|
* Creates a new group instance with batch selection and tri-state support.
|
|
2143
2270
|
*
|
|
2144
2271
|
* Extends `createSelection` to support selecting, unselecting, and toggling multiple items
|
|
@@ -2523,40 +2650,20 @@ const Group = {
|
|
|
2523
2650
|
};
|
|
2524
2651
|
|
|
2525
2652
|
//#endregion
|
|
2526
|
-
//#region src/composables/
|
|
2653
|
+
//#region src/composables/useSingle/index.ts
|
|
2527
2654
|
/**
|
|
2528
|
-
*
|
|
2655
|
+
* @module useSingle
|
|
2529
2656
|
*
|
|
2530
|
-
*
|
|
2531
|
-
*
|
|
2532
|
-
*
|
|
2657
|
+
* @remarks
|
|
2658
|
+
* Single-selection composable that extends useSelection to enforce only one selected item.
|
|
2659
|
+
*
|
|
2660
|
+
* Key features:
|
|
2661
|
+
* - Auto-clears previous selection when selecting new item
|
|
2662
|
+
* - Singular computed properties (selectedId, selectedItem, selectedIndex, selectedValue)
|
|
2663
|
+
* - Perfect for tabs, radio buttons, theme selectors
|
|
2664
|
+
*
|
|
2665
|
+
* Inheritance chain: useRegistry → useSelection → useSingle
|
|
2533
2666
|
*/
|
|
2534
|
-
var Vuetify0LocaleAdapter = class {
|
|
2535
|
-
t(message, ...params) {
|
|
2536
|
-
let resolvedMessage = message;
|
|
2537
|
-
if (params.length > 0 && /* @__PURE__ */ isObject(params[0])) {
|
|
2538
|
-
const variables = params[0];
|
|
2539
|
-
resolvedMessage = resolvedMessage.replace(/{([a-zA-Z][a-zA-Z0-9_]*)}/g, (match, name) => {
|
|
2540
|
-
return /* @__PURE__ */ isUndefined(variables[name]) ? match : String(variables[name]);
|
|
2541
|
-
});
|
|
2542
|
-
params = params.slice(1);
|
|
2543
|
-
}
|
|
2544
|
-
resolvedMessage = resolvedMessage.replace(/\{(\d+)\}/g, (match, index) => {
|
|
2545
|
-
const idx = Number.parseInt(index, 10);
|
|
2546
|
-
if (!/* @__PURE__ */ isUndefined(params[idx])) return String(params[idx]);
|
|
2547
|
-
return match;
|
|
2548
|
-
});
|
|
2549
|
-
return resolvedMessage;
|
|
2550
|
-
}
|
|
2551
|
-
n(value, locale, ...params) {
|
|
2552
|
-
if (!IN_BROWSER || !locale) return value.toString();
|
|
2553
|
-
const options = params[0];
|
|
2554
|
-
return new Intl.NumberFormat(String(locale), options).format(value);
|
|
2555
|
-
}
|
|
2556
|
-
};
|
|
2557
|
-
|
|
2558
|
-
//#endregion
|
|
2559
|
-
//#region src/composables/useSingle/index.ts
|
|
2560
2667
|
/**
|
|
2561
2668
|
* Creates a new single selection instance that enforces only one selected item at a time.
|
|
2562
2669
|
*
|
|
@@ -2703,6 +2810,23 @@ function useSingle(namespace = "v0:single") {
|
|
|
2703
2810
|
//#endregion
|
|
2704
2811
|
//#region src/composables/useTokens/index.ts
|
|
2705
2812
|
/**
|
|
2813
|
+
* @module useTokens
|
|
2814
|
+
*
|
|
2815
|
+
* @see https://0.vuetifyjs.com/composables/registration/use-tokens
|
|
2816
|
+
*
|
|
2817
|
+
* @remarks
|
|
2818
|
+
* Design token registry with alias resolution and W3C Design Tokens format support.
|
|
2819
|
+
*
|
|
2820
|
+
* Key features:
|
|
2821
|
+
* - Alias resolution with circular reference detection
|
|
2822
|
+
* - Nested token flattening with dot notation
|
|
2823
|
+
* - W3C Design Tokens format ($value, $type, $description, $extensions)
|
|
2824
|
+
* - Path-based resolution (e.g., {colors}.blue.500)
|
|
2825
|
+
* - Resolution caching for performance (~28,590 ops/sec)
|
|
2826
|
+
*
|
|
2827
|
+
* Used by useTheme, useLocale, and useFeatures for token-based configuration.
|
|
2828
|
+
*/
|
|
2829
|
+
/**
|
|
2706
2830
|
* Creates a new token instance.
|
|
2707
2831
|
*
|
|
2708
2832
|
* @param tokens The tokens to use.
|
|
@@ -2940,9 +3064,57 @@ function flatten(tokens, prefix = "", flat = false) {
|
|
|
2940
3064
|
return flattened;
|
|
2941
3065
|
}
|
|
2942
3066
|
|
|
3067
|
+
//#endregion
|
|
3068
|
+
//#region src/composables/useLocale/adapters/v0.ts
|
|
3069
|
+
/**
|
|
3070
|
+
* Vuetify0.x locale adapter implementation
|
|
3071
|
+
*
|
|
3072
|
+
* This adapter provides translation and number formatting
|
|
3073
|
+
* capabilities using the Intl API and supports both
|
|
3074
|
+
* numbered ({0}, {1}) and named ({name}) variables in translation strings.
|
|
3075
|
+
*/
|
|
3076
|
+
var Vuetify0LocaleAdapter = class {
|
|
3077
|
+
t(message, ...params) {
|
|
3078
|
+
let resolvedMessage = message;
|
|
3079
|
+
if (params.length > 0 && /* @__PURE__ */ isObject(params[0])) {
|
|
3080
|
+
const variables = params[0];
|
|
3081
|
+
resolvedMessage = resolvedMessage.replace(/{([a-zA-Z][a-zA-Z0-9_]*)}/g, (match, name) => {
|
|
3082
|
+
return /* @__PURE__ */ isUndefined(variables[name]) ? match : String(variables[name]);
|
|
3083
|
+
});
|
|
3084
|
+
params = params.slice(1);
|
|
3085
|
+
}
|
|
3086
|
+
resolvedMessage = resolvedMessage.replace(/\{(\d+)\}/g, (match, index) => {
|
|
3087
|
+
const idx = Number.parseInt(index, 10);
|
|
3088
|
+
if (!/* @__PURE__ */ isUndefined(params[idx])) return String(params[idx]);
|
|
3089
|
+
return match;
|
|
3090
|
+
});
|
|
3091
|
+
return resolvedMessage;
|
|
3092
|
+
}
|
|
3093
|
+
n(value, locale, ...params) {
|
|
3094
|
+
if (!IN_BROWSER || !locale) return value.toString();
|
|
3095
|
+
const options = params[0];
|
|
3096
|
+
return new Intl.NumberFormat(String(locale), options).format(value);
|
|
3097
|
+
}
|
|
3098
|
+
};
|
|
3099
|
+
|
|
2943
3100
|
//#endregion
|
|
2944
3101
|
//#region src/composables/useLocale/index.ts
|
|
2945
3102
|
/**
|
|
3103
|
+
* @module useLocale
|
|
3104
|
+
*
|
|
3105
|
+
* @remarks
|
|
3106
|
+
* Internationalization (i18n) composable with adapter pattern for message translation.
|
|
3107
|
+
*
|
|
3108
|
+
* Key features:
|
|
3109
|
+
* - Locale selection with createSingle
|
|
3110
|
+
* - Token-based message storage with useTokens
|
|
3111
|
+
* - Numbered and named placeholder support ({0}, {name})
|
|
3112
|
+
* - Number formatting with Intl.NumberFormat
|
|
3113
|
+
* - Adapter pattern for integration with i18n providers
|
|
3114
|
+
*
|
|
3115
|
+
* Integrates with createSingle for locale selection and useTokens for message resolution.
|
|
3116
|
+
*/
|
|
3117
|
+
/**
|
|
2946
3118
|
* Creates a new locale instance.
|
|
2947
3119
|
*
|
|
2948
3120
|
* @param options The options for the locale instance.
|
|
@@ -3084,6 +3256,23 @@ function useLocale(namespace = "v0:locale") {
|
|
|
3084
3256
|
//#endregion
|
|
3085
3257
|
//#region src/composables/useHydration/index.ts
|
|
3086
3258
|
/**
|
|
3259
|
+
* @module useHydration
|
|
3260
|
+
*
|
|
3261
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-hydration
|
|
3262
|
+
*
|
|
3263
|
+
* @remarks
|
|
3264
|
+
* SSR hydration state management composable.
|
|
3265
|
+
*
|
|
3266
|
+
* Key features:
|
|
3267
|
+
* - Hydration state detection (browser vs SSR)
|
|
3268
|
+
* - Root component detection
|
|
3269
|
+
* - Readonly hydration state refs
|
|
3270
|
+
* - Plugin installation support
|
|
3271
|
+
* - Perfect for hydration-safe rendering
|
|
3272
|
+
*
|
|
3273
|
+
* Essential for composables that need to behave differently during SSR vs client-side.
|
|
3274
|
+
*/
|
|
3275
|
+
/**
|
|
3087
3276
|
* Creates a new hydration instance.
|
|
3088
3277
|
*
|
|
3089
3278
|
* @returns A new hydration instance.
|
|
@@ -3178,7 +3367,7 @@ function createHydrationPlugin(_options = {}) {
|
|
|
3178
3367
|
},
|
|
3179
3368
|
setup: (app) => {
|
|
3180
3369
|
app.mixin({ mounted() {
|
|
3181
|
-
if (this.$parent
|
|
3370
|
+
if (!/* @__PURE__ */ isNull(this.$parent)) return;
|
|
3182
3371
|
context.hydrate();
|
|
3183
3372
|
} });
|
|
3184
3373
|
}
|
|
@@ -3220,6 +3409,22 @@ function useHydration(namespace = "v0:hydration") {
|
|
|
3220
3409
|
//#endregion
|
|
3221
3410
|
//#region src/composables/useResizeObserver/index.ts
|
|
3222
3411
|
/**
|
|
3412
|
+
* @module useResizeObserver
|
|
3413
|
+
*
|
|
3414
|
+
* @remarks
|
|
3415
|
+
* ResizeObserver composable with lifecycle management.
|
|
3416
|
+
*
|
|
3417
|
+
* Key features:
|
|
3418
|
+
* - ResizeObserver API wrapper
|
|
3419
|
+
* - Pause/resume/stop functionality
|
|
3420
|
+
* - Automatic cleanup on unmount
|
|
3421
|
+
* - SSR-safe (checks SUPPORTS_OBSERVER)
|
|
3422
|
+
* - Hydration-aware
|
|
3423
|
+
* - Box model options (content-box/border-box)
|
|
3424
|
+
*
|
|
3425
|
+
* Perfect for responsive components and size-based rendering.
|
|
3426
|
+
*/
|
|
3427
|
+
/**
|
|
3223
3428
|
* A composable that uses the Resize Observer API to detect when an element's
|
|
3224
3429
|
* size changes.
|
|
3225
3430
|
*
|
|
@@ -3266,7 +3471,7 @@ function useResizeObserver(target, callback, options = {}) {
|
|
|
3266
3471
|
const isPaused = shallowRef(false);
|
|
3267
3472
|
const isActive = toRef(() => !!observer.value);
|
|
3268
3473
|
function setup() {
|
|
3269
|
-
if (observer.value
|
|
3474
|
+
if (/* @__PURE__ */ isNull(observer.value)) return;
|
|
3270
3475
|
if (!isHydrated.value || !SUPPORTS_OBSERVER || !target.value || isPaused.value) return;
|
|
3271
3476
|
observer.value = new ResizeObserver((entries) => {
|
|
3272
3477
|
callback(entries.map((entry) => ({
|
|
@@ -3379,6 +3584,23 @@ function useElementSize(target) {
|
|
|
3379
3584
|
//#endregion
|
|
3380
3585
|
//#region src/composables/useOverflow/index.ts
|
|
3381
3586
|
/**
|
|
3587
|
+
* @module useOverflow
|
|
3588
|
+
*
|
|
3589
|
+
* @remarks
|
|
3590
|
+
* Composable for computing how many items fit in a container based on available width.
|
|
3591
|
+
* Enables responsive truncation logic for Pagination, Breadcrumbs, and similar components.
|
|
3592
|
+
*
|
|
3593
|
+
* Key features:
|
|
3594
|
+
* - Container width tracking via ResizeObserver
|
|
3595
|
+
* - Two modes: variable-width (per-item) or uniform-width (sample-based)
|
|
3596
|
+
* - Computes capacity (how many items fit)
|
|
3597
|
+
* - SSR-safe with Infinity fallback
|
|
3598
|
+
* - Supports reserved space for nav buttons, ellipsis, etc.
|
|
3599
|
+
*
|
|
3600
|
+
* Use variable mode (default) for items with different widths like Breadcrumbs.
|
|
3601
|
+
* Use uniform mode (itemWidth option) for same-width items like Pagination buttons.
|
|
3602
|
+
*/
|
|
3603
|
+
/**
|
|
3382
3604
|
* Creates a new overflow context for computing how many items fit in a container.
|
|
3383
3605
|
*
|
|
3384
3606
|
* @param options Configuration options
|
|
@@ -3548,6 +3770,22 @@ function useOverflow(namespace = "v0:overflow") {
|
|
|
3548
3770
|
//#endregion
|
|
3549
3771
|
//#region src/composables/usePagination/index.ts
|
|
3550
3772
|
/**
|
|
3773
|
+
* @module usePagination
|
|
3774
|
+
*
|
|
3775
|
+
* @remarks
|
|
3776
|
+
* Lightweight pagination composable for navigating through pages.
|
|
3777
|
+
*
|
|
3778
|
+
* Key features:
|
|
3779
|
+
* - No registry overhead - just a bounded integer
|
|
3780
|
+
* - Direct ref support for v-model compatibility
|
|
3781
|
+
* - Navigation methods: next, prev, first, last
|
|
3782
|
+
* - Computed visible items with ellipsis
|
|
3783
|
+
* - Trinity pattern for dependency injection
|
|
3784
|
+
*
|
|
3785
|
+
* Unlike registry-based composables, pagination tracks a single number
|
|
3786
|
+
* within a range, making it efficient for large page counts.
|
|
3787
|
+
*/
|
|
3788
|
+
/**
|
|
3551
3789
|
* Creates a pagination instance.
|
|
3552
3790
|
*
|
|
3553
3791
|
* @param options The options for the pagination instance.
|
|
@@ -4653,6 +4891,20 @@ const Single = {
|
|
|
4653
4891
|
//#endregion
|
|
4654
4892
|
//#region src/composables/useStep/index.ts
|
|
4655
4893
|
/**
|
|
4894
|
+
* @module useStep
|
|
4895
|
+
*
|
|
4896
|
+
* @remarks
|
|
4897
|
+
* Navigation composable that extends useSingle with first/last/next/prev/step methods.
|
|
4898
|
+
*
|
|
4899
|
+
* Key features:
|
|
4900
|
+
* - Configurable circular or bounded navigation
|
|
4901
|
+
* - Automatic disabled item skipping
|
|
4902
|
+
* - Arbitrary step counts (positive/negative)
|
|
4903
|
+
* - Perfect for wizards, carousels, pagination, onboarding flows
|
|
4904
|
+
*
|
|
4905
|
+
* Inheritance chain: useRegistry → useSelection → useSingle → useStep
|
|
4906
|
+
*/
|
|
4907
|
+
/**
|
|
4656
4908
|
* Creates a new step instance with navigation through items.
|
|
4657
4909
|
*
|
|
4658
4910
|
* Extends `createSingle` with `first()`, `last()`, `next()`, `prev()`, and `step(count)` methods
|
|
@@ -4948,6 +5200,21 @@ const Step = {
|
|
|
4948
5200
|
//#endregion
|
|
4949
5201
|
//#region src/composables/toReactive/index.ts
|
|
4950
5202
|
/**
|
|
5203
|
+
* @module toReactive
|
|
5204
|
+
*
|
|
5205
|
+
* @remarks
|
|
5206
|
+
* Utility function to convert values and refs into reactive proxies with ref unwrapping.
|
|
5207
|
+
*
|
|
5208
|
+
* Key features:
|
|
5209
|
+
* - Automatic ref unwrapping
|
|
5210
|
+
* - Deep reactive proxying
|
|
5211
|
+
* - Map and Set support with ref unwrapping
|
|
5212
|
+
* - Nested object/array reactivity
|
|
5213
|
+
* - Type preservation
|
|
5214
|
+
*
|
|
5215
|
+
* Perfect for creating reactive versions of plain objects while automatically unwrapping refs.
|
|
5216
|
+
*/
|
|
5217
|
+
/**
|
|
4951
5218
|
* Converts a `MaybeRef` to a `UnwrapNestedRefs`.
|
|
4952
5219
|
*
|
|
4953
5220
|
* @param objectRef The object to convert.
|
|
@@ -5068,6 +5335,21 @@ function toReactive(objectRef) {
|
|
|
5068
5335
|
//#endregion
|
|
5069
5336
|
//#region src/composables/useEventListener/index.ts
|
|
5070
5337
|
/**
|
|
5338
|
+
* @module useEventListener
|
|
5339
|
+
*
|
|
5340
|
+
* @remarks
|
|
5341
|
+
* Event listener composable with automatic cleanup on scope disposal.
|
|
5342
|
+
*
|
|
5343
|
+
* Key features:
|
|
5344
|
+
* - Supports Window, Document, and HTMLElement targets
|
|
5345
|
+
* - Reactive targets, events, and listeners
|
|
5346
|
+
* - Event options support (capture, passive, once)
|
|
5347
|
+
* - Automatic removeEventListener on unmount
|
|
5348
|
+
* - Multiple overloads for type safety
|
|
5349
|
+
*
|
|
5350
|
+
* Perfect for safely managing event listeners in Vue components.
|
|
5351
|
+
*/
|
|
5352
|
+
/**
|
|
5071
5353
|
* Attaches an event listener to a target.
|
|
5072
5354
|
*
|
|
5073
5355
|
* @param target The target to attach the event listener to.
|
|
@@ -5142,6 +5424,24 @@ function useDocumentEventListener(event, listener, options) {
|
|
|
5142
5424
|
//#endregion
|
|
5143
5425
|
//#region src/composables/useBreakpoints/index.ts
|
|
5144
5426
|
/**
|
|
5427
|
+
* @module useBreakpoints
|
|
5428
|
+
*
|
|
5429
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-breakpoints
|
|
5430
|
+
*
|
|
5431
|
+
* @remarks
|
|
5432
|
+
* Responsive breakpoint detection composable with window resize handling.
|
|
5433
|
+
*
|
|
5434
|
+
* Key features:
|
|
5435
|
+
* - Window matchMedia integration
|
|
5436
|
+
* - Six built-in breakpoints (xs, sm, md, lg, xl, xxl)
|
|
5437
|
+
* - Automatic resize listener with cleanup
|
|
5438
|
+
* - SSR-safe (checks IN_BROWSER)
|
|
5439
|
+
* - Hydration-aware
|
|
5440
|
+
* - Custom breakpoint configuration
|
|
5441
|
+
*
|
|
5442
|
+
* Perfect for responsive layouts and conditional rendering based on screen size.
|
|
5443
|
+
*/
|
|
5444
|
+
/**
|
|
5145
5445
|
* Creates default breakpoint configuration.
|
|
5146
5446
|
*
|
|
5147
5447
|
* @returns The default breakpoint configuration object.
|
|
@@ -5341,7 +5641,7 @@ function createBreakpointsPlugin(_options = {}) {
|
|
|
5341
5641
|
},
|
|
5342
5642
|
setup: (app) => {
|
|
5343
5643
|
app.mixin({ mounted() {
|
|
5344
|
-
if (this.$parent
|
|
5644
|
+
if (!/* @__PURE__ */ isNull(this.$parent)) return;
|
|
5345
5645
|
const hydration = useHydration();
|
|
5346
5646
|
function listener() {
|
|
5347
5647
|
context.update();
|
|
@@ -5389,6 +5689,26 @@ function useBreakpoints(namespace = "v0:breakpoints") {
|
|
|
5389
5689
|
//#endregion
|
|
5390
5690
|
//#region src/composables/useClickOutside/index.ts
|
|
5391
5691
|
/**
|
|
5692
|
+
* @module useClickOutside
|
|
5693
|
+
*
|
|
5694
|
+
* @remarks
|
|
5695
|
+
* Detects clicks outside of specified element(s) with automatic cleanup.
|
|
5696
|
+
*
|
|
5697
|
+
* Key features:
|
|
5698
|
+
* - Two-phase detection (pointerdown → pointerup) prevents drag-out false positives
|
|
5699
|
+
* - Touch scroll threshold ignores swipes/scrolls on mobile
|
|
5700
|
+
* - Capture phase listeners work with stopPropagation
|
|
5701
|
+
* - Pause/resume/stop functionality
|
|
5702
|
+
* - Optional iframe focus detection
|
|
5703
|
+
* - SSR-safe (no-op when not in browser)
|
|
5704
|
+
*
|
|
5705
|
+
* Common use cases: closing popovers, dropdowns, modals, and menus.
|
|
5706
|
+
*
|
|
5707
|
+
* Accessibility: This composable handles pointer interactions only. For accessible
|
|
5708
|
+
* components (dialogs, popovers, menus), pair with `useKeydown` for Escape key
|
|
5709
|
+
* dismissal per WCAG/APG requirements.
|
|
5710
|
+
*/
|
|
5711
|
+
/**
|
|
5392
5712
|
* Detects clicks outside of the specified element(s).
|
|
5393
5713
|
*
|
|
5394
5714
|
* Uses two-phase detection (pointerdown → pointerup) to prevent false positives
|
|
@@ -5455,7 +5775,7 @@ function useClickOutside(target, handler, options = {}) {
|
|
|
5455
5775
|
* Resolve target(s) to an array of HTMLElements.
|
|
5456
5776
|
*/
|
|
5457
5777
|
function getTargets() {
|
|
5458
|
-
return (
|
|
5778
|
+
return toArray(target).map((source) => toValue(source)).filter((el) => !/* @__PURE__ */ isNullOrUndefined(el));
|
|
5459
5779
|
}
|
|
5460
5780
|
/**
|
|
5461
5781
|
* Resolve ignore targets to a tuple of [selectors, elements].
|
|
@@ -5599,6 +5919,24 @@ function useClickOutside(target, handler, options = {}) {
|
|
|
5599
5919
|
//#endregion
|
|
5600
5920
|
//#region src/composables/useFeatures/index.ts
|
|
5601
5921
|
/**
|
|
5922
|
+
* @module useFeatures
|
|
5923
|
+
*
|
|
5924
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-features
|
|
5925
|
+
*
|
|
5926
|
+
* @remarks
|
|
5927
|
+
* Feature flag system with boolean and token-based features.
|
|
5928
|
+
*
|
|
5929
|
+
* Key features:
|
|
5930
|
+
* - Boolean features (true/false activation)
|
|
5931
|
+
* - Token features with $variation support
|
|
5932
|
+
* - Auto-selection of enabled features
|
|
5933
|
+
* - Multi-select support for feature combinations
|
|
5934
|
+
* - Perfect for A/B testing, progressive rollout, feature toggles
|
|
5935
|
+
*
|
|
5936
|
+
* Inheritance chain: useRegistry → createSelection → createGroup → createFeatures
|
|
5937
|
+
* Integrates with useTokens for token-based features.
|
|
5938
|
+
*/
|
|
5939
|
+
/**
|
|
5602
5940
|
* Creates a new features instance.
|
|
5603
5941
|
*
|
|
5604
5942
|
* @param options The options for the features instance.
|
|
@@ -5758,8 +6096,24 @@ function useFeatures(namespace = "v0:features") {
|
|
|
5758
6096
|
|
|
5759
6097
|
//#endregion
|
|
5760
6098
|
//#region src/composables/useFilter/index.ts
|
|
6099
|
+
/**
|
|
6100
|
+
* @module useFilter
|
|
6101
|
+
*
|
|
6102
|
+
* @remarks
|
|
6103
|
+
* Reactive array filtering composable with multiple filter modes.
|
|
6104
|
+
*
|
|
6105
|
+
* Key features:
|
|
6106
|
+
* - Four filter modes: some, every, union, intersection
|
|
6107
|
+
* - Case-insensitive filtering
|
|
6108
|
+
* - Custom filter functions
|
|
6109
|
+
* - Reactive updates
|
|
6110
|
+
* - Context-based DI support
|
|
6111
|
+
* - Perfect for search, multi-criteria filtering
|
|
6112
|
+
*
|
|
6113
|
+
* Filters arrays based on query strings with configurable matching strategies.
|
|
6114
|
+
*/
|
|
5761
6115
|
function defaultFilter(query, item, keys, mode = "some") {
|
|
5762
|
-
const queries =
|
|
6116
|
+
const queries = toArray(query).map((q) => String(q).toLowerCase());
|
|
5763
6117
|
function match(value, q) {
|
|
5764
6118
|
return String(value).toLowerCase().includes(q);
|
|
5765
6119
|
}
|
|
@@ -5802,7 +6156,7 @@ function createFilter(options = {}) {
|
|
|
5802
6156
|
return { items: computed(() => {
|
|
5803
6157
|
const q = toValue(queryRef);
|
|
5804
6158
|
query.value = q;
|
|
5805
|
-
const queries = (
|
|
6159
|
+
const queries = toArray(q).filter((q$1) => String(q$1).trim());
|
|
5806
6160
|
if (queries.length === 0) return itemsRef.value;
|
|
5807
6161
|
const queryParam = queries.length === 1 ? queries[0] : queries;
|
|
5808
6162
|
return itemsRef.value.filter((item) => filterFunction(queryParam, item));
|
|
@@ -5911,6 +6265,22 @@ function useFilterContext(namespace = "v0:filter") {
|
|
|
5911
6265
|
//#endregion
|
|
5912
6266
|
//#region src/composables/useForm/index.ts
|
|
5913
6267
|
/**
|
|
6268
|
+
* @module useForm
|
|
6269
|
+
*
|
|
6270
|
+
* @remarks
|
|
6271
|
+
* Form validation composable with async rule support and multiple validation modes.
|
|
6272
|
+
*
|
|
6273
|
+
* Key features:
|
|
6274
|
+
* - Sync and async validation rules
|
|
6275
|
+
* - Multiple validation modes (submit, change, combined)
|
|
6276
|
+
* - Tri-state isValid (null/true/false)
|
|
6277
|
+
* - isPristine tracking
|
|
6278
|
+
* - Silent validation mode
|
|
6279
|
+
* - Form-level validation and reset
|
|
6280
|
+
*
|
|
6281
|
+
* Each field is registered with validation rules and tracks its own state independently.
|
|
6282
|
+
*/
|
|
6283
|
+
/**
|
|
5914
6284
|
* Creates a new form instance.
|
|
5915
6285
|
*
|
|
5916
6286
|
* @param options The options for the form instance.
|
|
@@ -5949,7 +6319,7 @@ function createForm(options) {
|
|
|
5949
6319
|
return parse(validateOn).includes(event);
|
|
5950
6320
|
}
|
|
5951
6321
|
const isValidating = computed(() => {
|
|
5952
|
-
for (const ticket of registry.
|
|
6322
|
+
for (const ticket of registry.values()) if (ticket.isValidating.value) return true;
|
|
5953
6323
|
return false;
|
|
5954
6324
|
});
|
|
5955
6325
|
const isValid = computed(() => {
|
|
@@ -5957,7 +6327,7 @@ function createForm(options) {
|
|
|
5957
6327
|
for (const ticket of registry.values()) {
|
|
5958
6328
|
hasFields = true;
|
|
5959
6329
|
if (ticket.isValid.value === false) return false;
|
|
5960
|
-
if (ticket.isValid.value
|
|
6330
|
+
if (/* @__PURE__ */ isNull(ticket.isValid.value)) return null;
|
|
5961
6331
|
}
|
|
5962
6332
|
return hasFields ? true : null;
|
|
5963
6333
|
});
|
|
@@ -5973,7 +6343,7 @@ function createForm(options) {
|
|
|
5973
6343
|
return validating.map((id$1) => registry.get(id$1)).filter(Boolean).every((ticket) => ticket.isValid.value === true);
|
|
5974
6344
|
}
|
|
5975
6345
|
function register(registration) {
|
|
5976
|
-
const model = shallowRef(registration.value
|
|
6346
|
+
const model = shallowRef(/* @__PURE__ */ isNullOrUndefined(registration.value) ? "" : toValue(registration.value));
|
|
5977
6347
|
const rules = registration.rules || [];
|
|
5978
6348
|
const errors = shallowRef([]);
|
|
5979
6349
|
const isValidating$1 = shallowRef(false);
|
|
@@ -6116,6 +6486,22 @@ function useForm(namespace = "v0:form") {
|
|
|
6116
6486
|
//#endregion
|
|
6117
6487
|
//#region src/composables/useIntersectionObserver/index.ts
|
|
6118
6488
|
/**
|
|
6489
|
+
* @module useIntersectionObserver
|
|
6490
|
+
*
|
|
6491
|
+
* @remarks
|
|
6492
|
+
* IntersectionObserver composable with lifecycle management.
|
|
6493
|
+
*
|
|
6494
|
+
* Key features:
|
|
6495
|
+
* - IntersectionObserver API wrapper
|
|
6496
|
+
* - Pause/resume/stop functionality
|
|
6497
|
+
* - Automatic cleanup on unmount
|
|
6498
|
+
* - SSR-safe (checks SUPPORTS_INTERSECTION_OBSERVER)
|
|
6499
|
+
* - Hydration-aware
|
|
6500
|
+
* - Immediate callback option
|
|
6501
|
+
*
|
|
6502
|
+
* Perfect for lazy loading, infinite scroll, and visibility detection.
|
|
6503
|
+
*/
|
|
6504
|
+
/**
|
|
6119
6505
|
* A composable that uses the Intersection Observer API to detect when an element
|
|
6120
6506
|
* is visible in the viewport.
|
|
6121
6507
|
*
|
|
@@ -6162,7 +6548,7 @@ function useIntersectionObserver(target, callback, options = {}) {
|
|
|
6162
6548
|
const isIntersecting = shallowRef(false);
|
|
6163
6549
|
const isActive = toRef(() => !!observer.value);
|
|
6164
6550
|
function setup() {
|
|
6165
|
-
if (observer.value
|
|
6551
|
+
if (/* @__PURE__ */ isNull(observer.value)) return;
|
|
6166
6552
|
if (!isHydrated.value || !SUPPORTS_INTERSECTION_OBSERVER || !targetRef.value || isPaused.value) return;
|
|
6167
6553
|
observer.value = new IntersectionObserver((entries) => {
|
|
6168
6554
|
const transformedEntries = entries.map((entry) => ({
|
|
@@ -6289,6 +6675,20 @@ function useElementIntersection(target, options = {}) {
|
|
|
6289
6675
|
//#endregion
|
|
6290
6676
|
//#region src/composables/useKeydown/index.ts
|
|
6291
6677
|
/**
|
|
6678
|
+
* @module useKeydown
|
|
6679
|
+
*
|
|
6680
|
+
* @remarks
|
|
6681
|
+
* Keydown event listener composable with key filtering.
|
|
6682
|
+
*
|
|
6683
|
+
* Key features:
|
|
6684
|
+
* - Key-specific event handling
|
|
6685
|
+
* - preventDefault and stopPropagation options
|
|
6686
|
+
* - Automatic cleanup on scope disposal
|
|
6687
|
+
* - Built on useEventListener for consistent event handling
|
|
6688
|
+
*
|
|
6689
|
+
* Simplified wrapper around useEventListener for keyboard interactions.
|
|
6690
|
+
*/
|
|
6691
|
+
/**
|
|
6292
6692
|
* A composable that adds a keydown event listener to the document.
|
|
6293
6693
|
*
|
|
6294
6694
|
* @param handlers The key handlers to add.
|
|
@@ -6319,8 +6719,7 @@ function useKeydown(handlers) {
|
|
|
6319
6719
|
let cleanup = null;
|
|
6320
6720
|
const isActive = toRef(() => !!cleanup);
|
|
6321
6721
|
function onKeydown(event) {
|
|
6322
|
-
const
|
|
6323
|
-
const handler = (Array.isArray(handlerList) ? handlerList : [handlerList]).find((h) => h.key === event.key);
|
|
6722
|
+
const handler = toArray(toValue(handlers)).find((h) => h.key === event.key);
|
|
6324
6723
|
if (handler) {
|
|
6325
6724
|
if (handler.preventDefault) event.preventDefault();
|
|
6326
6725
|
if (handler.stopPropagation) event.stopPropagation();
|
|
@@ -6348,6 +6747,22 @@ function useKeydown(handlers) {
|
|
|
6348
6747
|
//#endregion
|
|
6349
6748
|
//#region src/composables/useMutationObserver/index.ts
|
|
6350
6749
|
/**
|
|
6750
|
+
* @module useMutationObserver
|
|
6751
|
+
*
|
|
6752
|
+
* @remarks
|
|
6753
|
+
* MutationObserver composable with lifecycle management.
|
|
6754
|
+
*
|
|
6755
|
+
* Key features:
|
|
6756
|
+
* - MutationObserver API wrapper
|
|
6757
|
+
* - Pause/resume/stop functionality
|
|
6758
|
+
* - Automatic cleanup on unmount
|
|
6759
|
+
* - SSR-safe (checks SUPPORTS_MUTATION_OBSERVER)
|
|
6760
|
+
* - Hydration-aware
|
|
6761
|
+
* - Configurable observation options (childList, attributes, characterData, etc.)
|
|
6762
|
+
*
|
|
6763
|
+
* Perfect for detecting DOM changes and responding to mutations.
|
|
6764
|
+
*/
|
|
6765
|
+
/**
|
|
6351
6766
|
* A composable that uses the Mutation Observer API to detect changes in the DOM.
|
|
6352
6767
|
*
|
|
6353
6768
|
* @param target The element to observe.
|
|
@@ -6405,7 +6820,7 @@ function useMutationObserver(target, callback, options = {}) {
|
|
|
6405
6820
|
attributeFilter: options.attributeFilter
|
|
6406
6821
|
};
|
|
6407
6822
|
function setup() {
|
|
6408
|
-
if (observer.value
|
|
6823
|
+
if (/* @__PURE__ */ isNull(observer.value)) return;
|
|
6409
6824
|
if (!isHydrated.value || !SUPPORTS_MUTATION_OBSERVER || !target.value || isPaused.value) return;
|
|
6410
6825
|
observer.value = new MutationObserver((mutations) => {
|
|
6411
6826
|
callback(mutations.map((mutation) => ({
|
|
@@ -6498,6 +6913,23 @@ var Vuetify0PermissionAdapter = class extends PermissionAdapter {
|
|
|
6498
6913
|
//#endregion
|
|
6499
6914
|
//#region src/composables/usePermissions/index.ts
|
|
6500
6915
|
/**
|
|
6916
|
+
* @module usePermissions
|
|
6917
|
+
*
|
|
6918
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-permissions
|
|
6919
|
+
*
|
|
6920
|
+
* @remarks
|
|
6921
|
+
* Permission management composable with support for RBAC and ABAC patterns.
|
|
6922
|
+
*
|
|
6923
|
+
* Key features:
|
|
6924
|
+
* - Role-Based Access Control (RBAC) support
|
|
6925
|
+
* - Attribute-Based Access Control (ABAC) with context
|
|
6926
|
+
* - Functional permission conditions
|
|
6927
|
+
* - Token-based permission storage
|
|
6928
|
+
* - Adapter pattern for custom permission systems
|
|
6929
|
+
*
|
|
6930
|
+
* Built on useTokens for flexible permission configuration.
|
|
6931
|
+
*/
|
|
6932
|
+
/**
|
|
6501
6933
|
* Creates a new permissions instance.
|
|
6502
6934
|
*
|
|
6503
6935
|
* @param options The options for the permissions instance.
|
|
@@ -6644,6 +7076,21 @@ function usePermissions(namespace = "v0:permissions") {
|
|
|
6644
7076
|
//#endregion
|
|
6645
7077
|
//#region src/composables/useQueue/index.ts
|
|
6646
7078
|
/**
|
|
7079
|
+
* @module useQueue
|
|
7080
|
+
*
|
|
7081
|
+
* @remarks
|
|
7082
|
+
* A queue composable for managing time-based collections with:
|
|
7083
|
+
* - Automatic timeout-based removal
|
|
7084
|
+
* - Pause/resume functionality
|
|
7085
|
+
* - FIFO (First In, First Out) ordering
|
|
7086
|
+
* - Manual dismissal support
|
|
7087
|
+
* - Queue progression management
|
|
7088
|
+
*
|
|
7089
|
+
* Built on top of useRegistry, the queue automatically manages timeouts for tickets,
|
|
7090
|
+
* ensuring only the first ticket in the queue is active at any time. When an ticket
|
|
7091
|
+
* expires or is removed, the next ticket in the queue automatically becomes active.
|
|
7092
|
+
*/
|
|
7093
|
+
/**
|
|
6647
7094
|
* Creates a new queue instance
|
|
6648
7095
|
*
|
|
6649
7096
|
* @param options The options for the queue instance
|
|
@@ -6845,6 +7292,21 @@ var MemoryAdapter = class {
|
|
|
6845
7292
|
//#endregion
|
|
6846
7293
|
//#region src/composables/useStorage/index.ts
|
|
6847
7294
|
/**
|
|
7295
|
+
* @module useStorage
|
|
7296
|
+
*
|
|
7297
|
+
* @remarks
|
|
7298
|
+
* Reactive storage composable with adapter pattern for localStorage, sessionStorage, or memory.
|
|
7299
|
+
*
|
|
7300
|
+
* Key features:
|
|
7301
|
+
* - Reactive refs that sync with storage
|
|
7302
|
+
* - localStorage, sessionStorage, and memory adapters
|
|
7303
|
+
* - Custom serialization support
|
|
7304
|
+
* - SSR fallback to memory adapter
|
|
7305
|
+
* - Automatic cleanup on remove/clear
|
|
7306
|
+
*
|
|
7307
|
+
* Uses adapter pattern to abstract storage implementation details.
|
|
7308
|
+
*/
|
|
7309
|
+
/**
|
|
6848
7310
|
* Creates a new storage instance.
|
|
6849
7311
|
*
|
|
6850
7312
|
* @param options The options for the storage instance.
|
|
@@ -7067,10 +7529,12 @@ var Vuetify0ThemeAdapter = class extends ThemeAdapter {
|
|
|
7067
7529
|
}
|
|
7068
7530
|
upsert(styles) {
|
|
7069
7531
|
if (!IN_BROWSER) return;
|
|
7070
|
-
|
|
7532
|
+
const selector = this.stylesheetId.startsWith("#") ? this.stylesheetId : `#${this.stylesheetId}`;
|
|
7533
|
+
const id = this.stylesheetId.startsWith("#") ? this.stylesheetId.slice(1) : this.stylesheetId;
|
|
7534
|
+
let styleEl = document.querySelector(selector);
|
|
7071
7535
|
if (!styleEl) {
|
|
7072
7536
|
styleEl = document.createElement("style");
|
|
7073
|
-
styleEl.id =
|
|
7537
|
+
styleEl.id = id;
|
|
7074
7538
|
if (this.cspNonce) styleEl.setAttribute("nonce", this.cspNonce);
|
|
7075
7539
|
document.head.append(styleEl);
|
|
7076
7540
|
}
|
|
@@ -7081,6 +7545,24 @@ var Vuetify0ThemeAdapter = class extends ThemeAdapter {
|
|
|
7081
7545
|
//#endregion
|
|
7082
7546
|
//#region src/composables/useTheme/index.ts
|
|
7083
7547
|
/**
|
|
7548
|
+
* @module useTheme
|
|
7549
|
+
*
|
|
7550
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-theme
|
|
7551
|
+
*
|
|
7552
|
+
* @remarks
|
|
7553
|
+
* Theme management composable with token resolution and CSS variable injection.
|
|
7554
|
+
*
|
|
7555
|
+
* Key features:
|
|
7556
|
+
* - Single-selection theme switching (extends createSingle)
|
|
7557
|
+
* - Token alias resolution via useTokens
|
|
7558
|
+
* - Lazy theme loading (compute colors only when selected)
|
|
7559
|
+
* - CSS variable generation via adapter pattern
|
|
7560
|
+
* - SSR support with head integration
|
|
7561
|
+
* - Theme cycling
|
|
7562
|
+
*
|
|
7563
|
+
* Integrates with createSingle for selection and useTokens for color resolution.
|
|
7564
|
+
*/
|
|
7565
|
+
/**
|
|
7084
7566
|
* Creates a new theme instance.
|
|
7085
7567
|
*
|
|
7086
7568
|
* @param options The options for the theme instance.
|
|
@@ -7301,6 +7783,21 @@ function useTheme(namespace = "v0:theme") {
|
|
|
7301
7783
|
//#endregion
|
|
7302
7784
|
//#region src/composables/useTimeline/index.ts
|
|
7303
7785
|
/**
|
|
7786
|
+
* @module useTimeline
|
|
7787
|
+
*
|
|
7788
|
+
* @remarks
|
|
7789
|
+
* Bounded undo/redo system with overflow management.
|
|
7790
|
+
*
|
|
7791
|
+
* Key features:
|
|
7792
|
+
* - Fixed-size history (default: 10 items)
|
|
7793
|
+
* - Undo/redo stack management
|
|
7794
|
+
* - Overflow queue (preserves oldest items)
|
|
7795
|
+
* - Automatic reindexing after operations
|
|
7796
|
+
* - Perfect for command pattern, history tracking
|
|
7797
|
+
*
|
|
7798
|
+
* Extends useRegistry with temporal navigation capabilities.
|
|
7799
|
+
*/
|
|
7800
|
+
/**
|
|
7304
7801
|
* Creates a new timeline instance.
|
|
7305
7802
|
*
|
|
7306
7803
|
* @param _options The options for the timeline instance.
|
|
@@ -7435,6 +7932,24 @@ function useTimeline(namespace = "v0:timeline") {
|
|
|
7435
7932
|
//#endregion
|
|
7436
7933
|
//#region src/composables/useToggleScope/index.ts
|
|
7437
7934
|
/**
|
|
7935
|
+
* @module useToggleScope
|
|
7936
|
+
*
|
|
7937
|
+
* @remarks
|
|
7938
|
+
* Conditionally manages an effect scope based on a reactive boolean condition.
|
|
7939
|
+
* When the source becomes true, creates and runs an effect scope. When false, stops the scope.
|
|
7940
|
+
* All reactive effects created within the scoped function are automatically cleaned up on deactivation.
|
|
7941
|
+
*
|
|
7942
|
+
* Key features:
|
|
7943
|
+
* - Uses Vue's effectScope for efficient reactive effect lifecycle management
|
|
7944
|
+
* - Automatic cleanup when condition becomes false
|
|
7945
|
+
* - Supports optional reset callback for scope restart capability
|
|
7946
|
+
* - Handles rapid toggling and parent scope disposal safely
|
|
7947
|
+
* - SSR-safe (effectScope is part of Vue core)
|
|
7948
|
+
*
|
|
7949
|
+
* Perfect for conditional side effects, feature flags, and performance optimization
|
|
7950
|
+
* by only running reactive effects when needed.
|
|
7951
|
+
*/
|
|
7952
|
+
/**
|
|
7438
7953
|
* Conditionally manages an effect scope based on a reactive boolean source.
|
|
7439
7954
|
*
|
|
7440
7955
|
* @param source A reactive boolean value or getter that controls the scope lifecycle
|
|
@@ -7516,6 +8031,24 @@ function useToggleScope(source, fn) {
|
|
|
7516
8031
|
//#endregion
|
|
7517
8032
|
//#region src/composables/useVirtual/index.ts
|
|
7518
8033
|
/**
|
|
8034
|
+
* @module useVirtual
|
|
8035
|
+
*
|
|
8036
|
+
* @remarks
|
|
8037
|
+
* Virtual scrolling composable for efficiently rendering large lists.
|
|
8038
|
+
*
|
|
8039
|
+
* Key features:
|
|
8040
|
+
* - Renders only visible items (viewport + overscan)
|
|
8041
|
+
* - Dynamic or fixed item heights
|
|
8042
|
+
* - SSR-safe (checks IN_BROWSER)
|
|
8043
|
+
* - Bidirectional scrolling (forward/reverse for chat apps)
|
|
8044
|
+
* - Scroll anchoring (maintains position across data changes)
|
|
8045
|
+
* - Edge detection for infinite scroll
|
|
8046
|
+
* - iOS momentum and elastic scrolling
|
|
8047
|
+
* - Configurable overscan (extra items rendered for smooth scrolling)
|
|
8048
|
+
*
|
|
8049
|
+
* Perfect for large data sets, chat apps, and infinite scroll implementations.
|
|
8050
|
+
*/
|
|
8051
|
+
/**
|
|
7519
8052
|
* Virtual scrolling composable for efficiently rendering large lists
|
|
7520
8053
|
*
|
|
7521
8054
|
* @param items Reactive array of items to virtualize
|