@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.
@@ -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
- for (const key in source) if (Object.prototype.hasOwnProperty.call(source, key)) {
344
- const sourceValue = source[key];
345
- const targetValue = target[key];
346
- if (/* @__PURE__ */ isObject(sourceValue)) {
347
- if (!/* @__PURE__ */ isObject(targetValue)) Object.assign(target, { [key]: {} });
348
- } else Object.assign(target, { [key]: sourceValue });
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 : Math.max(0, Math.min(from, tickets.length - 1));
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) ? [] : Array.isArray(value) ? value : [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/useLocale/adapters/v0.ts
2653
+ //#region src/composables/useSingle/index.ts
2527
2654
  /**
2528
- * Vuetify0.x locale adapter implementation
2655
+ * @module useSingle
2529
2656
  *
2530
- * This adapter provides translation and number formatting
2531
- * capabilities using the Intl API and supports both
2532
- * numbered ({0}, {1}) and named ({name}) variables in translation strings.
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 !== null) return;
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 === null) return;
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 !== null) return;
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 (Array.isArray(target) ? target : [target]).map((source) => toValue(source)).filter((el) => !/* @__PURE__ */ isNullOrUndefined(el));
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 = Array.isArray(query) ? query.map((q) => String(q).toLowerCase()) : [String(query).toLowerCase()];
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 = (Array.isArray(q) ? q : [q]).filter((q$1) => String(q$1).trim());
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.collection.values()) if (ticket.isValidating.value) return true;
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 === null) return null;
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 == null ? "" : toValue(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 === null) return;
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 handlerList = toValue(handlers);
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 === null) return;
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
- let styleEl = document.querySelector(`#${this.stylesheetId}`);
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 = this.stylesheetId.startsWith("#") ? this.stylesheetId.slice(1) : this.stylesheetId;
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