@vuetify/v0 0.1.8 → 0.1.10

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.
Files changed (119) hide show
  1. package/SKILL.md +95 -0
  2. package/dist/adapter-D3dUnE__.d.mts +17 -0
  3. package/dist/{adapter-DIx4Rntl.d.mts → adapter-hDuQ9aNN.d.mts} +4 -4
  4. package/dist/browser/index.js +2029 -704
  5. package/dist/components/index.d.mts +2 -2
  6. package/dist/components/index.mjs +23 -23
  7. package/dist/{components-BbxKYAXs.mjs → components-TiigKVsl.mjs} +816 -237
  8. package/dist/composables/index.d.mts +16 -15
  9. package/dist/composables/index.mjs +22 -22
  10. package/dist/{consola-BVzYzeLH.d.mts → consola-C1OjyZVf.d.mts} +1 -1
  11. package/dist/constants/index.d.mts +1 -1
  12. package/dist/constants/index.mjs +1 -1
  13. package/dist/{createDataTable-DZouEhvH.mjs → createDataTable-DoqbfLt0.mjs} +5 -5
  14. package/dist/{createGroup-BpJFi41X.mjs → createGroup-DpbGTwFy.mjs} +1 -1
  15. package/dist/{createPagination-Bu8vE0JW.mjs → createPagination-DZSJ8aO5.mjs} +5 -5
  16. package/dist/{createSelection-8MX0OHXR.mjs → createSelection-B6bQNyuF.mjs} +1 -1
  17. package/dist/{createSingle-CbuOBb-E.mjs → createSingle-fWHREEJO.mjs} +6 -6
  18. package/dist/{createTokens-CXlT0Vc6.mjs → createTokens-N8QIWw_D.mjs} +26 -5
  19. package/dist/data-table/adapters/client/index.d.mts +1 -1
  20. package/dist/data-table/adapters/client/index.mjs +3 -3
  21. package/dist/data-table/adapters/index.d.mts +4 -4
  22. package/dist/data-table/adapters/index.mjs +5 -5
  23. package/dist/data-table/adapters/server/index.d.mts +1 -1
  24. package/dist/data-table/adapters/server/index.mjs +3 -3
  25. package/dist/data-table/adapters/virtual/index.d.mts +1 -1
  26. package/dist/data-table/adapters/virtual/index.mjs +3 -3
  27. package/dist/data-table/index.d.mts +5 -5
  28. package/dist/data-table/index.mjs +14 -14
  29. package/dist/date/index.mjs +1 -1
  30. package/dist/features/adapters/posthog/index.mjs +2 -2
  31. package/dist/features/index.d.mts +1 -1
  32. package/dist/features/index.mjs +8 -8
  33. package/dist/{globals-ClSU6mqC.mjs → globals-F7fiJVG1.mjs} +1 -1
  34. package/dist/{index-CmCMrlt3.d.mts → index-CLDBngUs.d.mts} +1 -1
  35. package/dist/{index-MHkcqY_y.d.mts → index-Cv1XUHyA.d.mts} +1 -21
  36. package/dist/{index-B5NU2uB7.d.mts → index-DXdQb5BV.d.mts} +1057 -217
  37. package/dist/{index-63-0oJS8.d.mts → index-Dfa5Wb4T.d.mts} +430 -186
  38. package/dist/{index-CxW4itj1.d.mts → index-YyqYAay2.d.mts} +10 -2
  39. package/dist/index.d.mts +19 -18
  40. package/dist/index.mjs +24 -24
  41. package/dist/json/attributes.json +196 -0
  42. package/dist/json/importMap.json +52 -0
  43. package/dist/json/tags.json +104 -0
  44. package/dist/json/web-types.json +617 -1
  45. package/dist/locale/adapters/index.d.mts +3 -2
  46. package/dist/locale/adapters/index.mjs +2 -2
  47. package/dist/locale/adapters/v0/index.d.mts +1 -1
  48. package/dist/locale/adapters/v0/index.mjs +2 -2
  49. package/dist/locale/adapters/vue-i18n/index.d.mts +22 -0
  50. package/dist/locale/adapters/vue-i18n/index.mjs +26 -0
  51. package/dist/locale/index.d.mts +4 -3
  52. package/dist/locale/index.mjs +8 -9
  53. package/dist/logger/adapters/consola/index.d.mts +1 -1
  54. package/dist/logger/adapters/index.d.mts +4 -4
  55. package/dist/logger/adapters/index.mjs +2 -2
  56. package/dist/logger/adapters/pino/index.d.mts +1 -1
  57. package/dist/logger/adapters/pino/index.mjs +1 -1
  58. package/dist/logger/adapters/v0/index.d.mts +1 -1
  59. package/dist/logger/adapters/v0/index.mjs +2 -2
  60. package/dist/logger/index.d.mts +5 -5
  61. package/dist/logger/index.mjs +3 -3
  62. package/dist/notifications/index.d.mts +78 -0
  63. package/dist/notifications/index.mjs +215 -0
  64. package/dist/palettes/ant/index.d.mts +1 -1
  65. package/dist/palettes/index.d.mts +2 -2
  66. package/dist/palettes/material/index.d.mts +1 -1
  67. package/dist/palettes/md1/index.d.mts +1 -1
  68. package/dist/palettes/md2/index.d.mts +1 -1
  69. package/dist/palettes/radix/index.d.mts +1 -1
  70. package/dist/palettes/tailwind/index.d.mts +1 -1
  71. package/dist/permissions/adapters/index.d.mts +2 -2
  72. package/dist/permissions/adapters/index.mjs +1 -1
  73. package/dist/permissions/adapters/v0/index.d.mts +1 -1
  74. package/dist/permissions/adapters/v0/index.mjs +1 -1
  75. package/dist/permissions/index.d.mts +1 -1
  76. package/dist/permissions/index.mjs +5 -5
  77. package/dist/{pino-Bzighnkd.d.mts → pino-CM1iLXmi.d.mts} +1 -1
  78. package/dist/{posthog-BE7-t7cV.mjs → posthog-CdcdfMYS.mjs} +1 -1
  79. package/dist/rules/index.d.mts +1 -1
  80. package/dist/rules/index.mjs +9 -10
  81. package/dist/{server-Ch9J86tb.d.mts → server-Ct-h4-OA.d.mts} +1 -1
  82. package/dist/{server-CZ6ahbEH.mjs → server-DHET3KNW.mjs} +1 -1
  83. package/dist/storage/adapters/index.d.mts +2 -2
  84. package/dist/storage/adapters/memory/index.d.mts +1 -1
  85. package/dist/storage/index.d.mts +3 -3
  86. package/dist/storage/index.mjs +21 -21
  87. package/dist/theme/adapters/index.d.mts +1 -1
  88. package/dist/theme/adapters/index.mjs +2 -2
  89. package/dist/theme/adapters/v0/index.d.mts +1 -1
  90. package/dist/theme/adapters/v0/index.mjs +2 -2
  91. package/dist/theme/index.d.mts +1 -1
  92. package/dist/theme/index.mjs +8 -8
  93. package/dist/{useClickOutside-W0Sur1rC.mjs → useClickOutside-DNuJQ9EG.mjs} +860 -126
  94. package/dist/{useFeatures-CUicSI-E.mjs → useFeatures-CWNXTIXk.mjs} +3 -3
  95. package/dist/useLocale-Dzl6lCCF.mjs +75 -0
  96. package/dist/{useLogger-DY1Hbcy1.mjs → useLogger-Bw836Jbg.mjs} +2 -2
  97. package/dist/{usePermissions-BSW59R4q.mjs → usePermissions-DrRVDeVy.mjs} +2 -2
  98. package/dist/{useRules-BbA6_gvs.mjs → useRules-TMGuA8al.mjs} +2 -2
  99. package/dist/{useTheme-Bdx2Lj5c.mjs → useTheme-qMpg3Ti6.mjs} +9 -6
  100. package/dist/utilities/index.d.mts +2 -2
  101. package/dist/utilities/index.mjs +3 -32
  102. package/dist/v0-3zDdS4II.d.mts +19 -0
  103. package/dist/{v0-BZINNGoC.d.mts → v0-BBRwZ3at.d.mts} +1 -1
  104. package/dist/{v0-YAqbXudL.mjs → v0-BoWQ8RK0.mjs} +1 -1
  105. package/dist/{v0-BFseIsBi.mjs → v0-BsuBuBSa.mjs} +1 -1
  106. package/dist/{v0-2G2476h-.mjs → v0-CIEQpOK2.mjs} +1 -1
  107. package/dist/{v0-CdUL2eOn.d.mts → v0-CMeh39LQ.d.mts} +1 -1
  108. package/dist/v0-DgaVf3xM.mjs +62 -0
  109. package/dist/{v0-1xxC39wf.d.mts → v0-JPf99NKg.d.mts} +1 -1
  110. package/dist/{virtual-DwBiFA25.d.mts → virtual-B1lRbO7Q.d.mts} +1 -1
  111. package/dist/{virtual-eDNVH1fz.mjs → virtual-D0_D5gkh.mjs} +1 -1
  112. package/package.json +11 -4
  113. package/dist/useLocale-cQlPxbpV.mjs +0 -87
  114. package/dist/v0-CAKa6tzG.d.mts +0 -22
  115. package/dist/v0-CHBrvw49.mjs +0 -35
  116. /package/dist/{adapter-JTFG3Jn8.d.mts → adapter-CJQav2JB.d.mts} +0 -0
  117. /package/dist/{index-B5ZDDkXv.d.mts → index-BvTD7kU8.d.mts} +0 -0
  118. /package/dist/{index-NsE5nARK.d.mts → index-DSao7i57.d.mts} +0 -0
  119. /package/dist/{memory-BTtRdnNn.d.mts → memory-DyBabFV1.d.mts} +0 -0
@@ -81,7 +81,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
81
81
  const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
82
82
  const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
83
83
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
84
- const version = "0.1.8";
84
+ const version = "0.1.10";
85
85
  /* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
86
86
  const __LOGGER_ENABLED__ = false;
87
87
  //#endregion
@@ -397,6 +397,7 @@ function mergeDeep(target, ...sources) {
397
397
  if (UNSAFE_KEYS.has(key)) continue;
398
398
  if (!Object.prototype.hasOwnProperty.call(source, key)) continue;
399
399
  const sourceValue = source[key];
400
+ if (/* @__PURE__ */ isUndefined(sourceValue)) continue;
400
401
  const targetValue = target[key];
401
402
  if (/* @__PURE__ */ isObject(sourceValue)) {
402
403
  if (!/* @__PURE__ */ isObject(targetValue)) Object.assign(target, { [key]: {} });
@@ -468,36 +469,6 @@ function clamp(value, min = 0, max = 1) {
468
469
  function range(length, start = 0) {
469
470
  return Array.from({ length }, (_, index) => start + index);
470
471
  }
471
- /**
472
- * Debounces a function call by the specified delay
473
- *
474
- * @param fn The function to debounce
475
- * @param delay The delay in milliseconds
476
- * @returns A debounced function with clear and immediate methods
477
- *
478
- * @example
479
- * ```ts
480
- * const debouncedFn = debounce(() => console.log('called'), 500)
481
- * debouncedFn() // Will call after 500ms
482
- * debouncedFn.clear() // Cancel pending call
483
- * debouncedFn.immediate() // Call immediately
484
- * ```
485
- */
486
- function debounce(fn, delay) {
487
- let timeoutId;
488
- function debounced(...args) {
489
- if (!/* @__PURE__ */ isUndefined(timeoutId)) clearTimeout(timeoutId);
490
- timeoutId = setTimeout(() => fn(...args), delay);
491
- }
492
- debounced.clear = () => {
493
- if (!/* @__PURE__ */ isUndefined(timeoutId)) clearTimeout(timeoutId);
494
- };
495
- debounced.immediate = (...args) => {
496
- debounced.clear();
497
- fn(...args);
498
- };
499
- return debounced;
500
- }
501
472
  //#endregion
502
473
  //#region src/components/Atom/Atom.vue
503
474
  /**
@@ -1203,7 +1174,7 @@ function createRegistry(options) {
1203
1174
  function get(id) {
1204
1175
  return collection.get(id);
1205
1176
  }
1206
- function upsert(id, patch = {}) {
1177
+ function upsert(id, patch = {}, event) {
1207
1178
  const existing = get(id);
1208
1179
  if (!existing) return register({
1209
1180
  ...patch,
@@ -1238,6 +1209,7 @@ function createRegistry(options) {
1238
1209
  collection.set(id, updated);
1239
1210
  invalidate();
1240
1211
  emit("update:ticket", updated);
1212
+ if (event) emit(event, id);
1241
1213
  return updated;
1242
1214
  }
1243
1215
  function browse(value) {
@@ -1377,10 +1349,10 @@ function createRegistry(options) {
1377
1349
  unassign(ticket.value, ticket.id);
1378
1350
  const willReindex = indexDependentCount > 0 && ticket.index < collection.size;
1379
1351
  if (!willReindex) invalidate();
1380
- emit("unregister:ticket", ticket);
1381
1352
  minDirtyIndex = Math.min(minDirtyIndex, ticket.index);
1382
1353
  if (willReindex) reindex();
1383
1354
  else needsReindex = true;
1355
+ emit("unregister:ticket", ticket);
1384
1356
  }
1385
1357
  function offboard(ids) {
1386
1358
  batch(() => {
@@ -2153,10 +2125,10 @@ function createSingle(_options = {}) {
2153
2125
  mandatory,
2154
2126
  multiple
2155
2127
  });
2156
- const selectedId = computed(() => registry.selectedIds.values().next().value);
2157
- const selectedItem = computed(() => registry.selectedItems.value.values().next().value);
2158
- const selectedIndex = computed(() => selectedItem.value?.index ?? -1);
2159
- const selectedValue = computed(() => selectedItem.value?.value);
2128
+ const selectedId = toRef(() => registry.selectedIds.values().next().value);
2129
+ const selectedItem = toRef(() => registry.selectedItems.value.values().next().value);
2130
+ const selectedIndex = toRef(() => selectedItem.value?.index ?? -1);
2131
+ const selectedValue = toRef(() => selectedItem.value?.value);
2160
2132
  function unselect(id) {
2161
2133
  registry.unselect(id);
2162
2134
  }
@@ -3428,7 +3400,7 @@ function createTokens(tokens = {}, options = {}) {
3428
3400
  cache.set(cacheKey, result);
3429
3401
  return result;
3430
3402
  }
3431
- const { register: _register, upsert: _upsert, unregister: _unregister } = registry;
3403
+ const { register: _register, upsert: _upsert, unregister: _unregister, onboard: _onboard, offboard: _offboard, move: _move, clear: _clear } = registry;
3432
3404
  function register(registration) {
3433
3405
  cache.clear();
3434
3406
  return _register(registration);
@@ -3441,11 +3413,31 @@ function createTokens(tokens = {}, options = {}) {
3441
3413
  cache.clear();
3442
3414
  return _unregister(id);
3443
3415
  }
3416
+ function onboard(registrations) {
3417
+ cache.clear();
3418
+ return _onboard(registrations);
3419
+ }
3420
+ function offboard(ids) {
3421
+ cache.clear();
3422
+ return _offboard(ids);
3423
+ }
3424
+ function move(id, index) {
3425
+ cache.clear();
3426
+ return _move(id, index);
3427
+ }
3428
+ function clear() {
3429
+ cache.clear();
3430
+ return _clear();
3431
+ }
3444
3432
  return {
3445
3433
  ...registry,
3446
3434
  register,
3447
3435
  upsert,
3448
3436
  unregister,
3437
+ onboard,
3438
+ offboard,
3439
+ move,
3440
+ clear,
3449
3441
  resolve,
3450
3442
  isAlias,
3451
3443
  get size() {
@@ -3586,33 +3578,60 @@ function flatten(tokens, prefix = "", flat = false) {
3586
3578
  //#endregion
3587
3579
  //#region src/composables/useLocale/adapters/v0.ts
3588
3580
  /**
3589
- * Vuetify0.x locale adapter implementation
3581
+ * Default locale adapter for @vuetify/v0.
3590
3582
  *
3591
- * This adapter provides translation and number formatting
3592
- * capabilities using the Intl API and supports both
3593
- * numbered ({0}, {1}) and named ({name}) variables in translation strings.
3583
+ * Handles the full translation pipeline: key lookup via tokens,
3584
+ * fallback chain, token reference resolution, and placeholder interpolation.
3594
3585
  */
3595
3586
  var Vuetify0LocaleAdapter = class {
3596
- t(message, ...params) {
3597
- let resolvedMessage = message;
3598
- if (params.length > 0 && /* @__PURE__ */ isObject(params[0])) {
3599
- const variables = params[0];
3600
- resolvedMessage = resolvedMessage.replace(/{([a-zA-Z][a-zA-Z0-9_]*)}/g, (match, name) => {
3587
+ context;
3588
+ constructor(context) {
3589
+ this.context = context;
3590
+ }
3591
+ t(key, ...params) {
3592
+ const locale = this.context.selectedId.value;
3593
+ if (!locale) return this.interpolate(key, params);
3594
+ const message = this.context.tokens.get(`${locale}.${key}`)?.value;
3595
+ if (/* @__PURE__ */ isString(message)) return this.interpolate(this.resolve(locale, message), params);
3596
+ if (this.context.fallbackLocale) {
3597
+ const fbMessage = this.context.tokens.get(`${this.context.fallbackLocale}.${key}`)?.value;
3598
+ if (/* @__PURE__ */ isString(fbMessage)) return this.interpolate(this.resolve(this.context.fallbackLocale, fbMessage), params);
3599
+ }
3600
+ return this.interpolate(key, params);
3601
+ }
3602
+ n(value) {
3603
+ const locale = this.context.selectedId.value;
3604
+ if (!IN_BROWSER || !locale) return value.toString();
3605
+ return new Intl.NumberFormat(String(locale)).format(value);
3606
+ }
3607
+ resolve(locale, str, visited = /* @__PURE__ */ new Set()) {
3608
+ return str.replace(/{([a-zA-Z0-9.\-_]+)}/g, (match, key) => {
3609
+ const [prefix, ...rest] = key.split(".");
3610
+ const target = this.context.has(prefix) ? prefix : locale;
3611
+ const path = `${target}.${this.context.has(prefix) ? rest.join(".") : key}`;
3612
+ if (visited.has(path)) return match;
3613
+ visited.add(path);
3614
+ const resolved = this.context.tokens.get(path)?.value;
3615
+ if (/* @__PURE__ */ isString(resolved)) return this.resolve(target, resolved, visited);
3616
+ return match;
3617
+ });
3618
+ }
3619
+ interpolate(message, args) {
3620
+ let result = message;
3621
+ let rest = args;
3622
+ if (rest.length > 0 && /* @__PURE__ */ isObject(rest[0])) {
3623
+ const variables = rest[0];
3624
+ result = result.replace(/{([a-zA-Z][a-zA-Z0-9_]*)}/g, (match, name) => {
3601
3625
  return /* @__PURE__ */ isUndefined(variables[name]) ? match : String(variables[name]);
3602
3626
  });
3603
- params = params.slice(1);
3627
+ rest = rest.slice(1);
3604
3628
  }
3605
- resolvedMessage = resolvedMessage.replace(/\{(\d+)\}/g, (match, index) => {
3606
- const idx = Number.parseInt(index, 10);
3607
- if (!/* @__PURE__ */ isUndefined(params[idx])) return String(params[idx]);
3629
+ result = result.replace(/\{(\d+)\}/g, (match, index) => {
3630
+ const i = Number.parseInt(index, 10);
3631
+ if (!/* @__PURE__ */ isUndefined(rest[i])) return String(rest[i]);
3608
3632
  return match;
3609
3633
  });
3610
- return resolvedMessage;
3611
- }
3612
- n(value, locale, ...params) {
3613
- if (!IN_BROWSER || !locale) return value.toString();
3614
- const options = params[0];
3615
- return new Intl.NumberFormat(String(locale), options).format(value);
3634
+ return result;
3616
3635
  }
3617
3636
  };
3618
3637
  //#endregion
@@ -3643,45 +3662,35 @@ var Vuetify0LocaleAdapter = class {
3643
3662
  * @see https://0.vuetifyjs.com/composables/plugins/use-locale
3644
3663
  */
3645
3664
  function createLocale(_options = {}) {
3646
- const { adapter = new Vuetify0LocaleAdapter(), messages = {}, fallback: fallbackLocale, ...options } = _options;
3665
+ const { adapter: externalAdapter, messages = {}, fallback: fallbackLocale, ...options } = _options;
3647
3666
  const tokens = createTokens(messages);
3648
3667
  const registry = createSingle(options);
3649
3668
  for (const id in messages) {
3650
3669
  registry.register({ id });
3651
3670
  if (id === options.default && !registry.selectedId.value) registry.select(id);
3652
3671
  }
3653
- function t(key, params, fallback) {
3654
- const locale = registry.selectedId.value;
3655
- const args = toArray(params);
3656
- if (!locale) return adapter.t(fallback ?? key, ...args);
3657
- const path = `${locale}.${key}`;
3658
- const message = tokens.get(path)?.value;
3659
- if (/* @__PURE__ */ isString(message)) return adapter.t(resolve(locale, message), ...args);
3660
- if (fallbackLocale) {
3661
- const fbMessage = tokens.get(`${fallbackLocale}.${key}`)?.value;
3662
- if (/* @__PURE__ */ isString(fbMessage)) return adapter.t(resolve(fallbackLocale, fbMessage), ...args);
3663
- }
3664
- return adapter.t(fallback ?? key, ...args);
3672
+ const adapter = externalAdapter ?? new Vuetify0LocaleAdapter({
3673
+ tokens,
3674
+ selectedId: registry.selectedId,
3675
+ fallbackLocale,
3676
+ has: (id) => registry.has(id)
3677
+ });
3678
+ function t(key, ...params) {
3679
+ return adapter.t(key, ...params);
3665
3680
  }
3666
- function n(value, ...params) {
3667
- return adapter.n(value, registry.selectedId.value, ...params);
3681
+ function n(value) {
3682
+ return adapter.n(value);
3668
3683
  }
3669
- function resolve(locale, str, visited = /* @__PURE__ */ new Set()) {
3670
- return str.replace(/{([a-zA-Z0-9.-_]+)}/g, (match, key) => {
3671
- const [prefix, ...rest] = key.split(".");
3672
- const target = registry.has(prefix) ? prefix : locale;
3673
- const path = `${target}.${registry.has(prefix) ? rest.join(".") : key}`;
3674
- if (visited.has(path)) return match;
3675
- visited.add(path);
3676
- const resolved = tokens.get(path)?.value;
3677
- if (/* @__PURE__ */ isString(resolved)) return resolve(target, resolved, visited);
3678
- return match;
3679
- });
3684
+ function register(registration = {}) {
3685
+ const { messages: msgs, ...rest } = registration;
3686
+ if (msgs && rest.id && !registry.has(rest.id)) tokens.onboard(flatten({ [rest.id]: msgs }));
3687
+ return registry.register(rest);
3680
3688
  }
3681
3689
  return {
3682
3690
  ...registry,
3683
3691
  t,
3684
3692
  n,
3693
+ register,
3685
3694
  get size() {
3686
3695
  return registry.size;
3687
3696
  }
@@ -3690,7 +3699,7 @@ function createLocale(_options = {}) {
3690
3699
  function createLocaleFallback() {
3691
3700
  return {
3692
3701
  size: 0,
3693
- t: (key, _params, fallback) => fallback ?? key,
3702
+ t: (key) => key,
3694
3703
  n: String
3695
3704
  };
3696
3705
  }
@@ -3821,7 +3830,7 @@ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
3821
3830
  prev: breadcrumbs.prev,
3822
3831
  select: breadcrumbs.select,
3823
3832
  attrs: {
3824
- "aria-label": __props.label ?? locale.t("Breadcrumbs.label", void 0, "Breadcrumb"),
3833
+ "aria-label": __props.label ?? locale.t("Breadcrumbs.label"),
3825
3834
  "role": __props.as === "nav" ? void 0 : "navigation"
3826
3835
  }
3827
3836
  }));
@@ -4131,7 +4140,8 @@ function useProxyModel(context, model, options) {
4131
4140
  const modelAsArray = transformIn(model);
4132
4141
  const pending = new Set(modelAsArray);
4133
4142
  context.apply(modelAsArray, applyOptions);
4134
- for (const value of modelAsArray) if (Array.from(context.selectedValues.value).includes(value)) pending.delete(value);
4143
+ const selected = new Set(context.selectedValues.value);
4144
+ for (const value of modelAsArray) if (selected.has(value)) pending.delete(value);
4135
4145
  const contextWatch = watch(context.selectedValues, (val) => {
4136
4146
  modelWatch.pause();
4137
4147
  model.value = transformOut(Array.from(toValue(val)));
@@ -4165,18 +4175,18 @@ function useProxyModel(context, model, options) {
4165
4175
  return stop;
4166
4176
  }
4167
4177
  //#endregion
4168
- //#region src/components/Checkbox/CheckboxGroup.vue
4169
- const [useCheckboxGroup, provideCheckboxGroup] = createContext();
4170
- const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4171
- name: "CheckboxGroup",
4172
- __name: "CheckboxGroup",
4178
+ //#region src/components/Button/ButtonGroup.vue
4179
+ const [useButtonGroup, provideButtonGroup] = createContext();
4180
+ const _sfc_main$12 = /* @__PURE__ */ defineComponent({
4181
+ name: "ButtonGroup",
4182
+ __name: "ButtonGroup",
4173
4183
  props: /* @__PURE__ */ mergeModels({
4174
- namespace: { default: "v0:checkbox:group" },
4184
+ namespace: { default: "v0:button:group" },
4175
4185
  disabled: {
4176
4186
  type: Boolean,
4177
4187
  default: false
4178
4188
  },
4179
- enroll: {
4189
+ multiple: {
4180
4190
  type: Boolean,
4181
4191
  default: false
4182
4192
  },
@@ -4196,25 +4206,16 @@ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4196
4206
  emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
4197
4207
  setup(__props) {
4198
4208
  const model = useModel(__props, "modelValue");
4199
- const group = createGroup({
4209
+ const selection = createSelection({
4200
4210
  disabled: toRef(() => __props.disabled),
4201
- enroll: __props.enroll,
4211
+ multiple: toRef(() => __props.multiple),
4202
4212
  mandatory: __props.mandatory,
4203
4213
  events: true
4204
4214
  });
4205
- useProxyModel(group, model, { multiple: true });
4206
- provideCheckboxGroup(__props.namespace, group);
4215
+ useProxyModel(selection, model, { multiple: toRef(() => __props.multiple) });
4216
+ provideButtonGroup(__props.namespace, selection);
4207
4217
  const slotProps = toRef(() => ({
4208
- isDisabled: toValue(group.disabled),
4209
- isNoneSelected: group.isNoneSelected.value,
4210
- isAllSelected: group.isAllSelected.value,
4211
- isMixed: group.isMixed.value,
4212
- select: group.select,
4213
- unselect: group.unselect,
4214
- toggle: group.toggle,
4215
- selectAll: group.selectAll,
4216
- unselectAll: group.unselectAll,
4217
- toggleAll: group.toggleAll,
4218
+ isDisabled: toValue(selection.disabled),
4218
4219
  attrs: {
4219
4220
  "role": "group",
4220
4221
  "aria-label": __props.label || void 0,
@@ -4234,152 +4235,15 @@ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4234
4235
  }
4235
4236
  });
4236
4237
  //#endregion
4237
- //#region src/components/Checkbox/CheckboxRoot.vue
4238
- const [useCheckboxRoot, provideCheckboxRoot] = createContext();
4239
- const _sfc_main$14 = /* @__PURE__ */ defineComponent({
4240
- name: "CheckboxRoot",
4241
- inheritAttrs: false,
4242
- __name: "CheckboxRoot",
4243
- props: /* @__PURE__ */ mergeModels({
4244
- id: { default: () => useId$1() },
4245
- label: {},
4246
- value: {},
4247
- name: {},
4248
- form: {},
4249
- disabled: { default: false },
4250
- indeterminate: { default: false },
4251
- namespace: { default: "v0:checkbox:root" },
4252
- groupNamespace: { default: "v0:checkbox:group" },
4253
- ariaLabelledby: {},
4254
- ariaDescribedby: {},
4255
- ariaInvalid: { type: Boolean },
4256
- as: { default: "button" },
4257
- renderless: { type: Boolean }
4258
- }, {
4259
- "modelValue": { type: Boolean },
4260
- "modelModifiers": {}
4261
- }),
4262
- emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
4263
- setup(__props) {
4264
- const attrs = useAttrs();
4265
- let group = null;
4266
- try {
4267
- group = useCheckboxGroup(__props.groupNamespace);
4268
- } catch {}
4269
- const model = useModel(__props, "modelValue");
4270
- const ticket = group?.register({
4271
- id: __props.id,
4272
- value: __props.value,
4273
- disabled: __props.disabled,
4274
- indeterminate: __props.indeterminate
4275
- });
4276
- const isChecked = toRef(() => ticket ? toValue(ticket.isSelected) : model.value ?? false);
4277
- const isMixed = toRef(() => ticket ? toValue(ticket.isMixed) : toValue(__props.indeterminate) ?? false);
4278
- const isDisabled = toRef(() => group && ticket ? toValue(ticket.disabled) || toValue(group.disabled) : toValue(__props.disabled) ?? false);
4279
- const dataState = toRef(() => isMixed.value ? "indeterminate" : isChecked.value ? "checked" : "unchecked");
4280
- function toggle() {
4281
- if (isDisabled.value) return;
4282
- if (ticket) ticket.toggle();
4283
- else model.value = !model.value;
4284
- }
4285
- function select() {
4286
- if (isDisabled.value) return;
4287
- if (ticket) ticket.select();
4288
- else model.value = true;
4289
- }
4290
- function unselect() {
4291
- if (isDisabled.value) return;
4292
- if (ticket) ticket.unselect();
4293
- else model.value = false;
4294
- }
4295
- function mix() {
4296
- if (isDisabled.value || !ticket) return;
4297
- ticket.mix();
4298
- }
4299
- function unmix() {
4300
- if (isDisabled.value || !ticket) return;
4301
- ticket.unmix();
4302
- }
4303
- function onClick() {
4304
- toggle();
4305
- }
4306
- function onKeydown(e) {
4307
- if (e.key !== " ") return;
4308
- e.preventDefault();
4309
- toggle();
4310
- }
4311
- onUnmounted(() => {
4312
- if (!ticket || !group) return;
4313
- group.unregister(ticket.id);
4314
- });
4315
- const context = {
4316
- id: __props.id,
4317
- label: __props.label,
4318
- value: __props.value,
4319
- name: __props.name,
4320
- form: __props.form,
4321
- isChecked,
4322
- isMixed,
4323
- isDisabled,
4324
- select,
4325
- unselect,
4326
- toggle,
4327
- mix,
4328
- unmix
4329
- };
4330
- provideCheckboxRoot(__props.namespace, context);
4331
- const slotProps = toRef(() => ({
4332
- id: __props.id,
4333
- label: __props.label,
4334
- value: __props.value,
4335
- isChecked: isChecked.value,
4336
- isMixed: isMixed.value,
4337
- isDisabled: isDisabled.value,
4338
- select,
4339
- unselect,
4340
- toggle,
4341
- mix,
4342
- unmix,
4343
- attrs: {
4344
- "type": __props.as === "button" ? "button" : void 0,
4345
- "role": "checkbox",
4346
- "aria-checked": isMixed.value ? "mixed" : isChecked.value,
4347
- "aria-disabled": isDisabled.value || void 0,
4348
- "aria-label": __props.label || void 0,
4349
- "aria-labelledby": __props.ariaLabelledby || void 0,
4350
- "aria-describedby": __props.ariaDescribedby || void 0,
4351
- "aria-invalid": __props.ariaInvalid || void 0,
4352
- "tabindex": isDisabled.value ? void 0 : 0,
4353
- "data-state": dataState.value,
4354
- "data-disabled": isDisabled.value ? true : void 0
4355
- }
4356
- }));
4357
- return (_ctx, _cache) => {
4358
- return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main), mergeProps({
4359
- ...unref(attrs),
4360
- ...slotProps.value.attrs
4361
- }, {
4362
- as: __props.as,
4363
- renderless: __props.renderless,
4364
- onClick,
4365
- onKeydown
4366
- }), {
4367
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4368
- _: 3
4369
- }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$12, { key: 0 })) : createCommentVNode("v-if", true)], 64);
4370
- };
4371
- }
4372
- });
4373
- //#endregion
4374
- //#region src/components/Checkbox/CheckboxHiddenInput.vue
4375
- const _hoisted_1$4 = [
4238
+ //#region src/components/Button/ButtonHiddenInput.vue
4239
+ const _hoisted_1$5 = [
4376
4240
  "checked",
4377
4241
  "disabled",
4378
4242
  "form",
4379
4243
  "name",
4380
4244
  "value"
4381
4245
  ];
4382
- const visuallyHiddenStyle$3 = {
4246
+ const visuallyHiddenStyle$4 = {
4383
4247
  position: "absolute",
4384
4248
  width: "1px",
4385
4249
  height: "1px",
@@ -4390,80 +4254,698 @@ const visuallyHiddenStyle$3 = {
4390
4254
  whiteSpace: "nowrap",
4391
4255
  border: "0"
4392
4256
  };
4393
- const _sfc_main$12 = /* @__PURE__ */ defineComponent({
4394
- name: "CheckboxHiddenInput",
4395
- __name: "CheckboxHiddenInput",
4257
+ const _sfc_main$13 = /* @__PURE__ */ defineComponent({
4258
+ name: "ButtonHiddenInput",
4259
+ __name: "ButtonHiddenInput",
4396
4260
  props: {
4397
- namespace: { default: "v0:checkbox:root" },
4261
+ namespace: { default: "v0:button:root" },
4398
4262
  name: {},
4399
4263
  value: {},
4400
4264
  form: {}
4401
4265
  },
4402
4266
  setup(__props) {
4403
- const root = useCheckboxRoot(__props.namespace);
4267
+ const root = useButtonRoot(__props.namespace);
4404
4268
  const name = toRef(() => __props.name ?? root.name);
4405
4269
  const form = toRef(() => __props.form ?? root.form);
4406
4270
  const value = toRef(() => {
4407
4271
  const v = __props.value ?? root.value ?? "on";
4408
- if (/* @__PURE__ */ isNullOrUndefined(v)) return "on";
4409
4272
  if (/* @__PURE__ */ isObject(v)) return JSON.stringify(v);
4410
4273
  return String(v);
4411
4274
  });
4412
- const isChecked = root.isChecked;
4275
+ const isSelected = root.isSelected;
4413
4276
  const isDisabled = root.isDisabled;
4414
4277
  return (_ctx, _cache) => {
4415
4278
  return openBlock(), createElementBlock("input", {
4416
- checked: unref(isChecked),
4279
+ checked: unref(isSelected),
4417
4280
  disabled: unref(isDisabled),
4418
4281
  form: form.value,
4419
4282
  inert: "",
4420
4283
  name: name.value,
4421
- style: visuallyHiddenStyle$3,
4284
+ style: visuallyHiddenStyle$4,
4422
4285
  tabindex: "-1",
4423
4286
  type: "checkbox",
4424
4287
  value: value.value
4425
- }, null, 8, _hoisted_1$4);
4288
+ }, null, 8, _hoisted_1$5);
4426
4289
  };
4427
4290
  }
4428
4291
  });
4429
4292
  //#endregion
4430
- //#region src/components/Checkbox/CheckboxIndicator.vue
4431
- const _sfc_main$13 = /* @__PURE__ */ defineComponent({
4432
- name: "CheckboxIndicator",
4433
- __name: "CheckboxIndicator",
4434
- props: {
4435
- namespace: { default: "v0:checkbox:root" },
4436
- as: { default: "span" },
4437
- renderless: { type: Boolean }
4438
- },
4439
- setup(__props) {
4440
- const root = useCheckboxRoot(__props.namespace);
4441
- const isChecked = toRef(() => toValue(root.isChecked));
4442
- const isMixed = toRef(() => toValue(root.isMixed));
4443
- const isVisible = toRef(() => isChecked.value || isMixed.value);
4444
- const dataState = toRef(() => isMixed.value ? "indeterminate" : isChecked.value ? "checked" : "unchecked");
4445
- const slotProps = toRef(() => ({
4446
- isChecked: isChecked.value,
4447
- isMixed: isMixed.value,
4448
- attrs: {
4449
- "data-state": dataState.value,
4450
- "style": { visibility: isVisible.value ? "visible" : "hidden" }
4451
- }
4452
- }));
4453
- return (_ctx, _cache) => {
4454
- return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, {
4455
- as: __props.as,
4456
- renderless: __props.renderless
4457
- }), {
4458
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4293
+ //#region src/composables/useTimer/index.ts
4294
+ /**
4295
+ * @module useTimer
4296
+ *
4297
+ * @remarks
4298
+ * A reactive timer composable with pause/resume support.
4299
+ *
4300
+ * Key features:
4301
+ * - Start/stop/pause/resume controls
4302
+ * - Reactive remaining time tracking
4303
+ * - One-shot (default) or repeating mode
4304
+ * - Automatic cleanup on scope disposal
4305
+ * - SSR-safe
4306
+ */
4307
+ /**
4308
+ * Creates a reactive timer with pause/resume support.
4309
+ *
4310
+ * @param handler Callback invoked when the timer fires.
4311
+ * @param options Timer configuration.
4312
+ * @returns Timer controls and reactive state.
4313
+ *
4314
+ * @see https://0.vuetifyjs.com/composables/system/use-timer
4315
+ *
4316
+ * @example
4317
+ * ```ts
4318
+ * const timer = useTimer(() => console.log('fired'), { duration: 5000 })
4319
+ *
4320
+ * timer.start()
4321
+ * timer.pause()
4322
+ * timer.resume()
4323
+ * timer.stop()
4324
+ * ```
4325
+ */
4326
+ function useTimer(handler, options = {}) {
4327
+ const { duration = 1e3, repeat = false } = options;
4328
+ const remaining = shallowRef(duration);
4329
+ const isActive = shallowRef(false);
4330
+ const isPaused = shallowRef(false);
4331
+ let timeoutId;
4332
+ let trackingId;
4333
+ let startedAt = 0;
4334
+ let budget = duration;
4335
+ function clearTimer() {
4336
+ if (!/* @__PURE__ */ isUndefined(timeoutId)) {
4337
+ globalThis.clearTimeout(timeoutId);
4338
+ timeoutId = void 0;
4339
+ }
4340
+ }
4341
+ function startTracking() {
4342
+ stopTracking();
4343
+ if (!IN_BROWSER) return;
4344
+ trackingId = globalThis.setInterval(() => {
4345
+ if (!isActive.value || isPaused.value) return;
4346
+ const elapsed = Date.now() - startedAt;
4347
+ remaining.value = Math.max(0, budget - elapsed);
4348
+ }, 100);
4349
+ }
4350
+ function stopTracking() {
4351
+ if (!/* @__PURE__ */ isUndefined(trackingId)) {
4352
+ globalThis.clearInterval(trackingId);
4353
+ trackingId = void 0;
4354
+ }
4355
+ }
4356
+ function fire() {
4357
+ clearTimer();
4358
+ stopTracking();
4359
+ handler();
4360
+ if (repeat) begin(duration);
4361
+ else {
4362
+ isActive.value = false;
4363
+ remaining.value = 0;
4364
+ }
4365
+ }
4366
+ function begin(ms) {
4367
+ clearTimer();
4368
+ stopTracking();
4369
+ budget = ms;
4370
+ startedAt = Date.now();
4371
+ remaining.value = ms;
4372
+ isActive.value = true;
4373
+ isPaused.value = false;
4374
+ timeoutId = globalThis.setTimeout(fire, ms);
4375
+ startTracking();
4376
+ }
4377
+ function start() {
4378
+ if (duration < 0) return;
4379
+ begin(duration);
4380
+ }
4381
+ function stop() {
4382
+ clearTimer();
4383
+ stopTracking();
4384
+ isActive.value = false;
4385
+ isPaused.value = false;
4386
+ remaining.value = duration;
4387
+ }
4388
+ function pause() {
4389
+ if (!isActive.value || isPaused.value) return;
4390
+ const elapsed = Date.now() - startedAt;
4391
+ budget = Math.max(0, budget - elapsed);
4392
+ remaining.value = budget;
4393
+ clearTimer();
4394
+ stopTracking();
4395
+ isPaused.value = true;
4396
+ }
4397
+ function resume() {
4398
+ if (!isPaused.value) return;
4399
+ isPaused.value = false;
4400
+ startedAt = Date.now();
4401
+ timeoutId = globalThis.setTimeout(fire, budget);
4402
+ startTracking();
4403
+ }
4404
+ onScopeDispose(() => {
4405
+ clearTimer();
4406
+ stopTracking();
4407
+ }, true);
4408
+ return {
4409
+ start,
4410
+ stop,
4411
+ pause,
4412
+ resume,
4413
+ remaining,
4414
+ isActive,
4415
+ isPaused
4416
+ };
4417
+ }
4418
+ //#endregion
4419
+ //#region src/components/Button/ButtonRoot.vue
4420
+ const [useButtonRoot, provideButtonRoot] = createContext();
4421
+ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
4422
+ name: "ButtonRoot",
4423
+ inheritAttrs: false,
4424
+ __name: "ButtonRoot",
4425
+ props: {
4426
+ disabled: {
4427
+ type: Boolean,
4428
+ default: false
4429
+ },
4430
+ readonly: {
4431
+ type: Boolean,
4432
+ default: false
4433
+ },
4434
+ passive: {
4435
+ type: Boolean,
4436
+ default: false
4437
+ },
4438
+ loading: {
4439
+ type: Boolean,
4440
+ default: false
4441
+ },
4442
+ grace: { default: 0 },
4443
+ value: {},
4444
+ namespace: { default: "v0:button:root" },
4445
+ groupNamespace: { default: "v0:button:group" },
4446
+ name: {},
4447
+ form: {},
4448
+ ariaLabel: {},
4449
+ as: { default: "button" },
4450
+ renderless: { type: Boolean }
4451
+ },
4452
+ setup(__props) {
4453
+ const attrs = useAttrs();
4454
+ let group = null;
4455
+ try {
4456
+ group = useButtonGroup(__props.groupNamespace);
4457
+ } catch {}
4458
+ const ticket = group?.register({
4459
+ value: __props.value,
4460
+ disabled: __props.disabled
4461
+ });
4462
+ const isDisabled = toRef(() => group && ticket ? toValue(ticket.disabled) || toValue(group.disabled) : __props.disabled);
4463
+ const isReadonly = toRef(() => __props.readonly);
4464
+ const isPassive = toRef(() => __props.passive);
4465
+ const isSelected = toRef(() => ticket ? toValue(ticket.isSelected) : false);
4466
+ const isLoading = shallowRef(false);
4467
+ const timer = useTimer(() => {
4468
+ isLoading.value = true;
4469
+ }, { duration: __props.grace });
4470
+ watch(() => __props.loading, (active) => {
4471
+ if (!active) {
4472
+ timer.stop();
4473
+ isLoading.value = false;
4474
+ } else if (__props.grace > 0) timer.start();
4475
+ else isLoading.value = true;
4476
+ }, { immediate: true });
4477
+ const single = createSingle({ mandatory: "force" });
4478
+ const isSolo = shallowRef(false);
4479
+ const locale = useLocale();
4480
+ function onClick() {
4481
+ if (isDisabled.value || isReadonly.value || isPassive.value || __props.loading || !ticket) return;
4482
+ ticket.toggle();
4483
+ }
4484
+ onUnmounted(() => {
4485
+ timer.stop();
4486
+ ticket?.unregister();
4487
+ });
4488
+ const context = {
4489
+ value: __props.value,
4490
+ name: __props.name,
4491
+ form: __props.form,
4492
+ isLoading: toRef(() => isLoading.value),
4493
+ isDisabled,
4494
+ isReadonly,
4495
+ isPassive,
4496
+ isSelected,
4497
+ isSolo,
4498
+ single
4499
+ };
4500
+ provideButtonRoot(__props.namespace, context);
4501
+ const elementAttrs = toRef(() => ({
4502
+ "type": __props.as === "button" ? "button" : void 0,
4503
+ "role": "button",
4504
+ "disabled": isDisabled.value ? true : void 0,
4505
+ "aria-disabled": isPassive.value ? true : void 0,
4506
+ "aria-busy": isLoading.value ? true : void 0,
4507
+ "aria-pressed": group ? isSelected.value : void 0,
4508
+ "aria-label": __props.ariaLabel || (isSolo.value ? locale.t("Button.label") : void 0),
4509
+ "tabindex": isDisabled.value ? -1 : 0,
4510
+ "data-loading": isLoading.value ? true : void 0,
4511
+ "data-passive": isPassive.value ? true : void 0,
4512
+ "data-readonly": isReadonly.value ? true : void 0,
4513
+ "data-disabled": isDisabled.value ? true : void 0,
4514
+ "data-selected": group && isSelected.value ? true : void 0,
4515
+ "data-solo": isSolo.value ? true : void 0,
4516
+ "onClick": onClick
4517
+ }));
4518
+ const slotProps = toRef(() => ({
4519
+ isLoading: isLoading.value,
4520
+ isDisabled: isDisabled.value,
4521
+ isReadonly: isReadonly.value,
4522
+ isPassive: isPassive.value,
4523
+ isSelected: isSelected.value,
4524
+ attrs: elementAttrs.value
4525
+ }));
4526
+ return (_ctx, _cache) => {
4527
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main), mergeProps({
4528
+ ...unref(attrs),
4529
+ ...slotProps.value.attrs
4530
+ }, {
4531
+ as: __props.as,
4532
+ renderless: __props.renderless
4533
+ }), {
4534
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4535
+ _: 3
4536
+ }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$13, { key: 0 })) : createCommentVNode("v-if", true)], 64);
4537
+ };
4538
+ }
4539
+ });
4540
+ //#endregion
4541
+ //#region src/components/Button/ButtonContent.vue
4542
+ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4543
+ name: "ButtonContent",
4544
+ __name: "ButtonContent",
4545
+ props: {
4546
+ id: { default: () => useId$1() },
4547
+ namespace: { default: "v0:button:root" }
4548
+ },
4549
+ setup(__props) {
4550
+ const ticket = useButtonRoot(__props.namespace).single.register({ id: __props.id });
4551
+ onUnmounted(() => ticket.unregister());
4552
+ const slotProps = toRef(() => ({ isSelected: ticket.isSelected.value }));
4553
+ return (_ctx, _cache) => {
4554
+ return renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)));
4555
+ };
4556
+ }
4557
+ });
4558
+ //#endregion
4559
+ //#region src/components/Button/ButtonIcon.vue
4560
+ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
4561
+ name: "ButtonIcon",
4562
+ __name: "ButtonIcon",
4563
+ props: {
4564
+ namespace: { default: "v0:button:root" },
4565
+ as: { default: "span" },
4566
+ renderless: { type: Boolean }
4567
+ },
4568
+ setup(__props) {
4569
+ const root = useButtonRoot(__props.namespace);
4570
+ onMounted(() => {
4571
+ if (root.single.size > 0) return;
4572
+ root.isSolo.value = true;
4573
+ });
4574
+ const slotProps = toRef(() => ({
4575
+ isSolo: root.isSolo.value,
4576
+ attrs: { "aria-hidden": true }
4577
+ }));
4578
+ return (_ctx, _cache) => {
4579
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, {
4580
+ as: __props.as,
4581
+ renderless: __props.renderless
4582
+ }), {
4583
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4459
4584
  _: 3
4460
4585
  }, 16, ["as", "renderless"]);
4461
4586
  };
4462
4587
  }
4463
4588
  });
4464
4589
  //#endregion
4465
- //#region src/components/Checkbox/CheckboxSelectAll.vue
4590
+ //#region src/components/Button/ButtonLoading.vue
4466
4591
  const _sfc_main$15 = /* @__PURE__ */ defineComponent({
4592
+ name: "ButtonLoading",
4593
+ __name: "ButtonLoading",
4594
+ props: {
4595
+ id: { default: () => useId$1() },
4596
+ namespace: { default: "v0:button:root" }
4597
+ },
4598
+ setup(__props) {
4599
+ const root = useButtonRoot(__props.namespace);
4600
+ const ticket = root.single.register({
4601
+ id: __props.id,
4602
+ disabled: true
4603
+ });
4604
+ watch(root.isLoading, (active) => {
4605
+ if (active) {
4606
+ ticket.disabled = false;
4607
+ ticket.select();
4608
+ } else {
4609
+ ticket.disabled = true;
4610
+ const fallback = root.single.seek("first");
4611
+ if (fallback) fallback.select();
4612
+ }
4613
+ }, { immediate: true });
4614
+ onUnmounted(() => ticket.unregister());
4615
+ const slotProps = toRef(() => ({ isSelected: ticket.isSelected.value }));
4616
+ return (_ctx, _cache) => {
4617
+ return renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)));
4618
+ };
4619
+ }
4620
+ });
4621
+ //#endregion
4622
+ //#region src/components/Button/index.ts
4623
+ /**
4624
+ * Button component with sub-components for interactive button controls.
4625
+ *
4626
+ * @see https://0.vuetifyjs.com/components/actions/button
4627
+ *
4628
+ * @example
4629
+ * ```vue
4630
+ * <script setup lang="ts">
4631
+ * import { Button } from '@vuetify/v0'
4632
+ * <\/script>
4633
+ *
4634
+ * <template>
4635
+ * <Button.Root>
4636
+ * <Button.Content>Click me</Button.Content>
4637
+ * </Button.Root>
4638
+ * </template>
4639
+ * ```
4640
+ */
4641
+ const Button = {
4642
+ Content: _sfc_main$11,
4643
+ Group: _sfc_main$12,
4644
+ HiddenInput: _sfc_main$13,
4645
+ Icon: _sfc_main$14,
4646
+ Loading: _sfc_main$15,
4647
+ Root: _sfc_main$16
4648
+ };
4649
+ //#endregion
4650
+ //#region src/components/Checkbox/CheckboxGroup.vue
4651
+ const [useCheckboxGroup, provideCheckboxGroup] = createContext();
4652
+ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
4653
+ name: "CheckboxGroup",
4654
+ __name: "CheckboxGroup",
4655
+ props: /* @__PURE__ */ mergeModels({
4656
+ namespace: { default: "v0:checkbox:group" },
4657
+ disabled: {
4658
+ type: Boolean,
4659
+ default: false
4660
+ },
4661
+ enroll: {
4662
+ type: Boolean,
4663
+ default: false
4664
+ },
4665
+ mandatory: {
4666
+ type: [Boolean, String],
4667
+ default: false
4668
+ },
4669
+ label: {},
4670
+ ariaLabelledby: {},
4671
+ ariaDescribedby: {},
4672
+ as: { default: "div" },
4673
+ renderless: { type: Boolean }
4674
+ }, {
4675
+ "modelValue": {},
4676
+ "modelModifiers": {}
4677
+ }),
4678
+ emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
4679
+ setup(__props) {
4680
+ const model = useModel(__props, "modelValue");
4681
+ const group = createGroup({
4682
+ disabled: toRef(() => __props.disabled),
4683
+ enroll: __props.enroll,
4684
+ mandatory: __props.mandatory,
4685
+ events: true
4686
+ });
4687
+ useProxyModel(group, model, { multiple: true });
4688
+ provideCheckboxGroup(__props.namespace, group);
4689
+ const slotProps = toRef(() => ({
4690
+ isDisabled: toValue(group.disabled),
4691
+ isNoneSelected: group.isNoneSelected.value,
4692
+ isAllSelected: group.isAllSelected.value,
4693
+ isMixed: group.isMixed.value,
4694
+ select: group.select,
4695
+ unselect: group.unselect,
4696
+ toggle: group.toggle,
4697
+ selectAll: group.selectAll,
4698
+ unselectAll: group.unselectAll,
4699
+ toggleAll: group.toggleAll,
4700
+ attrs: {
4701
+ "role": "group",
4702
+ "aria-label": __props.label || void 0,
4703
+ "aria-labelledby": __props.ariaLabelledby || void 0,
4704
+ "aria-describedby": __props.ariaDescribedby || void 0
4705
+ }
4706
+ }));
4707
+ return (_ctx, _cache) => {
4708
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, {
4709
+ as: __props.as,
4710
+ renderless: __props.renderless
4711
+ }), {
4712
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4713
+ _: 3
4714
+ }, 16, ["as", "renderless"]);
4715
+ };
4716
+ }
4717
+ });
4718
+ //#endregion
4719
+ //#region src/components/Checkbox/CheckboxRoot.vue
4720
+ const [useCheckboxRoot, provideCheckboxRoot] = createContext();
4721
+ const _sfc_main$20 = /* @__PURE__ */ defineComponent({
4722
+ name: "CheckboxRoot",
4723
+ inheritAttrs: false,
4724
+ __name: "CheckboxRoot",
4725
+ props: /* @__PURE__ */ mergeModels({
4726
+ id: { default: () => useId$1() },
4727
+ label: {},
4728
+ value: {},
4729
+ name: {},
4730
+ form: {},
4731
+ disabled: { default: false },
4732
+ indeterminate: { default: false },
4733
+ namespace: { default: "v0:checkbox:root" },
4734
+ groupNamespace: { default: "v0:checkbox:group" },
4735
+ ariaLabelledby: {},
4736
+ ariaDescribedby: {},
4737
+ ariaInvalid: { type: Boolean },
4738
+ as: { default: "button" },
4739
+ renderless: { type: Boolean }
4740
+ }, {
4741
+ "modelValue": { type: Boolean },
4742
+ "modelModifiers": {}
4743
+ }),
4744
+ emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
4745
+ setup(__props) {
4746
+ const attrs = useAttrs();
4747
+ let group = null;
4748
+ try {
4749
+ group = useCheckboxGroup(__props.groupNamespace);
4750
+ } catch {}
4751
+ const model = useModel(__props, "modelValue");
4752
+ const ticket = group?.register({
4753
+ id: __props.id,
4754
+ value: __props.value,
4755
+ disabled: __props.disabled,
4756
+ indeterminate: __props.indeterminate
4757
+ });
4758
+ const isChecked = toRef(() => ticket ? toValue(ticket.isSelected) : model.value ?? false);
4759
+ const isMixed = toRef(() => ticket ? toValue(ticket.isMixed) : toValue(__props.indeterminate) ?? false);
4760
+ const isDisabled = toRef(() => group && ticket ? toValue(ticket.disabled) || toValue(group.disabled) : toValue(__props.disabled) ?? false);
4761
+ const dataState = toRef(() => isMixed.value ? "indeterminate" : isChecked.value ? "checked" : "unchecked");
4762
+ function toggle() {
4763
+ if (isDisabled.value) return;
4764
+ if (ticket) ticket.toggle();
4765
+ else model.value = !model.value;
4766
+ }
4767
+ function select() {
4768
+ if (isDisabled.value) return;
4769
+ if (ticket) ticket.select();
4770
+ else model.value = true;
4771
+ }
4772
+ function unselect() {
4773
+ if (isDisabled.value) return;
4774
+ if (ticket) ticket.unselect();
4775
+ else model.value = false;
4776
+ }
4777
+ function mix() {
4778
+ if (isDisabled.value || !ticket) return;
4779
+ ticket.mix();
4780
+ }
4781
+ function unmix() {
4782
+ if (isDisabled.value || !ticket) return;
4783
+ ticket.unmix();
4784
+ }
4785
+ function onClick() {
4786
+ toggle();
4787
+ }
4788
+ function onKeydown(e) {
4789
+ if (e.key !== " ") return;
4790
+ e.preventDefault();
4791
+ toggle();
4792
+ }
4793
+ onUnmounted(() => {
4794
+ if (!ticket || !group) return;
4795
+ group.unregister(ticket.id);
4796
+ });
4797
+ const context = {
4798
+ id: __props.id,
4799
+ label: __props.label,
4800
+ value: __props.value,
4801
+ name: __props.name,
4802
+ form: __props.form,
4803
+ isChecked,
4804
+ isMixed,
4805
+ isDisabled,
4806
+ select,
4807
+ unselect,
4808
+ toggle,
4809
+ mix,
4810
+ unmix
4811
+ };
4812
+ provideCheckboxRoot(__props.namespace, context);
4813
+ const slotProps = toRef(() => ({
4814
+ id: __props.id,
4815
+ label: __props.label,
4816
+ value: __props.value,
4817
+ isChecked: isChecked.value,
4818
+ isMixed: isMixed.value,
4819
+ isDisabled: isDisabled.value,
4820
+ select,
4821
+ unselect,
4822
+ toggle,
4823
+ mix,
4824
+ unmix,
4825
+ attrs: {
4826
+ "type": __props.as === "button" ? "button" : void 0,
4827
+ "role": "checkbox",
4828
+ "aria-checked": isMixed.value ? "mixed" : isChecked.value,
4829
+ "aria-disabled": isDisabled.value || void 0,
4830
+ "aria-label": __props.label || void 0,
4831
+ "aria-labelledby": __props.ariaLabelledby || void 0,
4832
+ "aria-describedby": __props.ariaDescribedby || void 0,
4833
+ "aria-invalid": __props.ariaInvalid || void 0,
4834
+ "tabindex": isDisabled.value ? void 0 : 0,
4835
+ "data-state": dataState.value,
4836
+ "data-disabled": isDisabled.value ? true : void 0
4837
+ }
4838
+ }));
4839
+ return (_ctx, _cache) => {
4840
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main), mergeProps({
4841
+ ...unref(attrs),
4842
+ ...slotProps.value.attrs
4843
+ }, {
4844
+ as: __props.as,
4845
+ renderless: __props.renderless,
4846
+ onClick,
4847
+ onKeydown
4848
+ }), {
4849
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4850
+ _: 3
4851
+ }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$18, { key: 0 })) : createCommentVNode("v-if", true)], 64);
4852
+ };
4853
+ }
4854
+ });
4855
+ //#endregion
4856
+ //#region src/components/Checkbox/CheckboxHiddenInput.vue
4857
+ const _hoisted_1$4 = [
4858
+ "checked",
4859
+ "disabled",
4860
+ "form",
4861
+ "name",
4862
+ "value"
4863
+ ];
4864
+ const visuallyHiddenStyle$3 = {
4865
+ position: "absolute",
4866
+ width: "1px",
4867
+ height: "1px",
4868
+ padding: "0",
4869
+ margin: "-1px",
4870
+ overflow: "hidden",
4871
+ clip: "rect(0, 0, 0, 0)",
4872
+ whiteSpace: "nowrap",
4873
+ border: "0"
4874
+ };
4875
+ const _sfc_main$18 = /* @__PURE__ */ defineComponent({
4876
+ name: "CheckboxHiddenInput",
4877
+ __name: "CheckboxHiddenInput",
4878
+ props: {
4879
+ namespace: { default: "v0:checkbox:root" },
4880
+ name: {},
4881
+ value: {},
4882
+ form: {}
4883
+ },
4884
+ setup(__props) {
4885
+ const root = useCheckboxRoot(__props.namespace);
4886
+ const name = toRef(() => __props.name ?? root.name);
4887
+ const form = toRef(() => __props.form ?? root.form);
4888
+ const value = toRef(() => {
4889
+ const v = __props.value ?? root.value ?? "on";
4890
+ if (/* @__PURE__ */ isNullOrUndefined(v)) return "on";
4891
+ if (/* @__PURE__ */ isObject(v)) return JSON.stringify(v);
4892
+ return String(v);
4893
+ });
4894
+ const isChecked = root.isChecked;
4895
+ const isDisabled = root.isDisabled;
4896
+ return (_ctx, _cache) => {
4897
+ return openBlock(), createElementBlock("input", {
4898
+ checked: unref(isChecked),
4899
+ disabled: unref(isDisabled),
4900
+ form: form.value,
4901
+ inert: "",
4902
+ name: name.value,
4903
+ style: visuallyHiddenStyle$3,
4904
+ tabindex: "-1",
4905
+ type: "checkbox",
4906
+ value: value.value
4907
+ }, null, 8, _hoisted_1$4);
4908
+ };
4909
+ }
4910
+ });
4911
+ //#endregion
4912
+ //#region src/components/Checkbox/CheckboxIndicator.vue
4913
+ const _sfc_main$19 = /* @__PURE__ */ defineComponent({
4914
+ name: "CheckboxIndicator",
4915
+ __name: "CheckboxIndicator",
4916
+ props: {
4917
+ namespace: { default: "v0:checkbox:root" },
4918
+ as: { default: "span" },
4919
+ renderless: { type: Boolean }
4920
+ },
4921
+ setup(__props) {
4922
+ const root = useCheckboxRoot(__props.namespace);
4923
+ const isChecked = toRef(() => toValue(root.isChecked));
4924
+ const isMixed = toRef(() => toValue(root.isMixed));
4925
+ const isVisible = toRef(() => isChecked.value || isMixed.value);
4926
+ const dataState = toRef(() => isMixed.value ? "indeterminate" : isChecked.value ? "checked" : "unchecked");
4927
+ const slotProps = toRef(() => ({
4928
+ isChecked: isChecked.value,
4929
+ isMixed: isMixed.value,
4930
+ attrs: {
4931
+ "data-state": dataState.value,
4932
+ "style": { visibility: isVisible.value ? "visible" : "hidden" }
4933
+ }
4934
+ }));
4935
+ return (_ctx, _cache) => {
4936
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, {
4937
+ as: __props.as,
4938
+ renderless: __props.renderless
4939
+ }), {
4940
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
4941
+ _: 3
4942
+ }, 16, ["as", "renderless"]);
4943
+ };
4944
+ }
4945
+ });
4946
+ //#endregion
4947
+ //#region src/components/Checkbox/CheckboxSelectAll.vue
4948
+ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
4467
4949
  name: "CheckboxSelectAll",
4468
4950
  inheritAttrs: false,
4469
4951
  __name: "CheckboxSelectAll",
@@ -4573,16 +5055,16 @@ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
4573
5055
  * ```
4574
5056
  */
4575
5057
  const Checkbox = {
4576
- Group: _sfc_main$11,
4577
- HiddenInput: _sfc_main$12,
4578
- Indicator: _sfc_main$13,
4579
- Root: _sfc_main$14,
4580
- SelectAll: _sfc_main$15
5058
+ Group: _sfc_main$17,
5059
+ HiddenInput: _sfc_main$18,
5060
+ Indicator: _sfc_main$19,
5061
+ Root: _sfc_main$20,
5062
+ SelectAll: _sfc_main$21
4581
5063
  };
4582
5064
  //#endregion
4583
5065
  //#region src/components/Dialog/DialogRoot.vue
4584
5066
  const [useDialogContext, provideDialogContext] = createContext();
4585
- const _sfc_main$20 = /* @__PURE__ */ defineComponent({
5067
+ const _sfc_main$26 = /* @__PURE__ */ defineComponent({
4586
5068
  name: "DialogRoot",
4587
5069
  __name: "DialogRoot",
4588
5070
  props: /* @__PURE__ */ mergeModels({
@@ -4636,7 +5118,7 @@ const _sfc_main$20 = /* @__PURE__ */ defineComponent({
4636
5118
  });
4637
5119
  //#endregion
4638
5120
  //#region src/components/Dialog/DialogClose.vue
4639
- const _sfc_main$17 = /* @__PURE__ */ defineComponent({
5121
+ const _sfc_main$23 = /* @__PURE__ */ defineComponent({
4640
5122
  name: "DialogClose",
4641
5123
  __name: "DialogClose",
4642
5124
  props: {
@@ -4729,10 +5211,10 @@ function createPagination(_options = {}) {
4729
5211
  else if (value > pages.value) page.value = Math.max(1, pages.value);
4730
5212
  else page.value = value;
4731
5213
  }
4732
- const isFirst = computed(() => page.value <= 1);
4733
- const isLast = computed(() => page.value >= pages.value);
4734
- const pageStart = computed(() => (page.value - 1) * toValue(_itemsPerPage));
4735
- const pageStop = computed(() => Math.min(pageStart.value + toValue(_itemsPerPage), toValue(_size)));
5214
+ const isFirst = toRef(() => page.value <= 1);
5215
+ const isLast = toRef(() => page.value >= pages.value);
5216
+ const pageStart = toRef(() => (page.value - 1) * toValue(_itemsPerPage));
5217
+ const pageStop = toRef(() => Math.min(pageStart.value + toValue(_itemsPerPage), toValue(_size)));
4736
5218
  function toPage(value) {
4737
5219
  return {
4738
5220
  type: "page",
@@ -5323,8 +5805,8 @@ function createDataTable(options) {
5323
5805
  function setNone() {
5324
5806
  group.unselect(key);
5325
5807
  group.unmix(key);
5326
- const idx = order.indexOf(key);
5327
- if (idx !== -1) order.splice(idx, 1);
5808
+ const index = order.indexOf(key);
5809
+ if (index !== -1) order.splice(index, 1);
5328
5810
  }
5329
5811
  if (!isAsc && !isDesc) {
5330
5812
  clearOthers();
@@ -5832,24 +6314,22 @@ function createBreakpoints(_options = {}) {
5832
6314
  const mdAndUp = shallowRef(initialIndex >= 2);
5833
6315
  const lgAndUp = shallowRef(initialIndex >= 3);
5834
6316
  const xlAndUp = shallowRef(initialIndex >= 4);
5835
- const xxlAndUp = shallowRef(initialIndex >= 5);
5836
6317
  const smAndDown = shallowRef(initialIndex <= 1);
5837
6318
  const mdAndDown = shallowRef(initialIndex <= 2);
5838
6319
  const lgAndDown = shallowRef(initialIndex <= 3);
5839
6320
  const xlAndDown = shallowRef(initialIndex <= 4);
5840
- const xxlAndDown = shallowRef(initialIndex <= 5);
5841
6321
  function update() {
5842
6322
  if (!IN_BROWSER) return;
5843
6323
  width.value = window.innerWidth;
5844
6324
  height.value = window.innerHeight;
5845
6325
  let current = "xs";
5846
- for (let i = sorted.length - 1; i >= 0; i--) if (width.value >= sorted[i][1]) {
6326
+ for (let i = sorted.length - 1; i >= 0; i--) if (window.matchMedia(`(min-width: ${sorted[i][1]}px)`).matches) {
5847
6327
  current = sorted[i][0];
5848
6328
  break;
5849
6329
  }
5850
6330
  name.value = current;
5851
6331
  const index = names.indexOf(current);
5852
- isMobile.value = width.value < mb;
6332
+ isMobile.value = /* @__PURE__ */ isNumber(mb) ? !window.matchMedia(`(min-width: ${mb}px)`).matches : index < names.indexOf(mobileBreakpoint);
5853
6333
  xs.value = index === 0;
5854
6334
  sm.value = index === 1;
5855
6335
  md.value = index === 2;
@@ -5860,12 +6340,10 @@ function createBreakpoints(_options = {}) {
5860
6340
  mdAndUp.value = index >= 2;
5861
6341
  lgAndUp.value = index >= 3;
5862
6342
  xlAndUp.value = index >= 4;
5863
- xxlAndUp.value = index >= 5;
5864
6343
  smAndDown.value = index <= 1;
5865
6344
  mdAndDown.value = index <= 2;
5866
6345
  lgAndDown.value = index <= 3;
5867
6346
  xlAndDown.value = index <= 4;
5868
- xxlAndDown.value = index <= 5;
5869
6347
  }
5870
6348
  return {
5871
6349
  breakpoints,
@@ -5884,12 +6362,10 @@ function createBreakpoints(_options = {}) {
5884
6362
  mdAndUp: readonly(mdAndUp),
5885
6363
  lgAndUp: readonly(lgAndUp),
5886
6364
  xlAndUp: readonly(xlAndUp),
5887
- xxlAndUp: readonly(xxlAndUp),
5888
6365
  smAndDown: readonly(smAndDown),
5889
6366
  mdAndDown: readonly(mdAndDown),
5890
6367
  lgAndDown: readonly(lgAndDown),
5891
6368
  xlAndDown: readonly(xlAndDown),
5892
- xxlAndDown: readonly(xxlAndDown),
5893
6369
  ssr: isSSR,
5894
6370
  update
5895
6371
  };
@@ -5903,8 +6379,8 @@ function createBreakpointsFallback(options = {}) {
5903
6379
  name: readonly(shallowRef("xs")),
5904
6380
  width: readonly(shallowRef(0)),
5905
6381
  height: readonly(shallowRef(0)),
5906
- isMobile: readonly(shallowRef(false)),
5907
- xs: readonly(shallowRef(false)),
6382
+ isMobile: readonly(shallowRef(true)),
6383
+ xs: readonly(shallowRef(true)),
5908
6384
  sm: readonly(shallowRef(false)),
5909
6385
  md: readonly(shallowRef(false)),
5910
6386
  lg: readonly(shallowRef(false)),
@@ -5914,12 +6390,10 @@ function createBreakpointsFallback(options = {}) {
5914
6390
  mdAndUp: readonly(shallowRef(false)),
5915
6391
  lgAndUp: readonly(shallowRef(false)),
5916
6392
  xlAndUp: readonly(shallowRef(false)),
5917
- xxlAndUp: readonly(shallowRef(false)),
5918
- smAndDown: readonly(shallowRef(false)),
5919
- mdAndDown: readonly(shallowRef(false)),
5920
- lgAndDown: readonly(shallowRef(false)),
5921
- xlAndDown: readonly(shallowRef(false)),
5922
- xxlAndDown: readonly(shallowRef(false)),
6393
+ smAndDown: readonly(shallowRef(true)),
6394
+ mdAndDown: readonly(shallowRef(true)),
6395
+ lgAndDown: readonly(shallowRef(true)),
6396
+ xlAndDown: readonly(shallowRef(true)),
5923
6397
  ssr: false,
5924
6398
  update: () => {}
5925
6399
  };
@@ -7014,11 +7488,16 @@ function useElementIntersection(target, options = {}) {
7014
7488
  * ```
7015
7489
  */
7016
7490
  function useLazy(active, options = {}) {
7017
- const { eager = false } = options;
7491
+ const { eager = false, delay = 0 } = options;
7018
7492
  const isBooted = shallowRef(false);
7019
7493
  const hasContent = toRef(() => isBooted.value || toValue(eager) || toValue(active));
7494
+ const timer = delay > 0 ? useTimer(() => {
7495
+ isBooted.value = true;
7496
+ }, { duration: delay }) : void 0;
7020
7497
  const stop = watch(() => toValue(active), (value) => {
7021
- if (value) isBooted.value = true;
7498
+ if (value) if (timer) timer.start();
7499
+ else isBooted.value = true;
7500
+ else timer?.stop();
7022
7501
  }, { immediate: true });
7023
7502
  function reset() {
7024
7503
  isBooted.value = false;
@@ -7079,7 +7558,7 @@ function useLazy(active, options = {}) {
7079
7558
  function useMediaQuery(query) {
7080
7559
  const matches = shallowRef(false);
7081
7560
  const mediaQueryList = shallowRef(null);
7082
- const resolvedQuery = computed(() => toValue(query));
7561
+ const resolvedQuery = toRef(() => toValue(query));
7083
7562
  const hydration = useHydration();
7084
7563
  let cleanup = null;
7085
7564
  function update() {
@@ -7821,55 +8300,771 @@ function createNested(_options = {}) {
7821
8300
  unselect,
7822
8301
  toggle,
7823
8302
  register,
7824
- unregister,
7825
- offboard,
8303
+ unregister,
8304
+ offboard,
8305
+ onboard,
8306
+ clear,
8307
+ reset,
8308
+ get size() {
8309
+ return group.size;
8310
+ }
8311
+ };
8312
+ return context;
8313
+ }
8314
+ /**
8315
+ * Creates a new nested context with provide/inject pattern.
8316
+ *
8317
+ * @param options The options for the nested context.
8318
+ * @returns A trinity tuple [useNested, provideNested, defaultNested]
8319
+ *
8320
+ * @see https://0.vuetifyjs.com/composables/selection/use-nested
8321
+ *
8322
+ * @example
8323
+ * ```ts
8324
+ * import { createNestedContext } from '@vuetify/v0'
8325
+ *
8326
+ * export const [useTree, provideTree, tree] = createNestedContext()
8327
+ *
8328
+ * // In parent: provideTree()
8329
+ * // In child: const tree = useTree()
8330
+ * ```
8331
+ */
8332
+ function createNestedContext(_options = {}) {
8333
+ const { namespace = "v0:nested", ...options } = _options;
8334
+ const [useNestedContext, _provideNestedContext] = createContext(namespace);
8335
+ const context = createNested(options);
8336
+ function provideNestedContext(_context = context, app) {
8337
+ return _provideNestedContext(_context, app);
8338
+ }
8339
+ return createTrinity(useNestedContext, provideNestedContext, context);
8340
+ }
8341
+ /**
8342
+ * Returns the current nested instance from context.
8343
+ *
8344
+ * @param namespace The namespace for the nested context. Defaults to `'v0:nested'`.
8345
+ * @returns The current nested instance.
8346
+ *
8347
+ * @see https://0.vuetifyjs.com/composables/selection/use-nested
8348
+ */
8349
+ function useNested(namespace = "v0:nested") {
8350
+ return useContext(namespace);
8351
+ }
8352
+ //#endregion
8353
+ //#region src/composables/createQueue/index.ts
8354
+ /**
8355
+ * @module createQueue
8356
+ *
8357
+ * @remarks
8358
+ * A queue composable for managing time-based collections with:
8359
+ * - Automatic timeout-based removal
8360
+ * - Pause/resume functionality
8361
+ * - FIFO (First In, First Out) ordering
8362
+ * - Manual dismissal support
8363
+ * - Queue progression management
8364
+ *
8365
+ * Built on top of createRegistry, the queue automatically manages timeouts for tickets,
8366
+ * ensuring only the first ticket in the queue is active at any time. When a ticket
8367
+ * expires or is removed, the next ticket in the queue automatically becomes active.
8368
+ */
8369
+ /**
8370
+ * Creates a new queue instance
8371
+ *
8372
+ * @param options The options for the queue instance
8373
+ * @template Z The type of queue ticket that extends QueueTicket. Use this to add custom properties to tickets.
8374
+ * @template E The type of queue context that extends QueueContext<Z>. Use this when extending the queue with additional methods.
8375
+ * @returns A new queue instance
8376
+ *
8377
+ * @see https://0.vuetifyjs.com/composables/registration/create-queue
8378
+ *
8379
+ * @example
8380
+ * ```ts
8381
+ * import { useQueue } from '@vuetify/v0'
8382
+ *
8383
+ * const queue = useQueue()
8384
+ *
8385
+ * // Register an ticket with default timeout (3000ms)
8386
+ * const ticket1 = queue.register({ value: 'Ticket 1' })
8387
+ *
8388
+ * // Register an ticket with custom timeout
8389
+ * const ticket2 = queue.register({ value: 'Ticket 2', timeout: 5000 })
8390
+ *
8391
+ * // Register a persistent ticket that must be manually dismissed
8392
+ * const ticket3 = queue.register({ value: 'Ticket 3', timeout: -1 })
8393
+ *
8394
+ * // Dismiss an ticket using the convenience method
8395
+ * ticket3.dismiss()
8396
+ *
8397
+ * console.log(queue.size) // 2
8398
+ * ```
8399
+ */
8400
+ function createQueue(_options = {}) {
8401
+ const { timeout: _timeout = 3e3, ...options } = _options;
8402
+ const registry = createRegistry({
8403
+ ...options,
8404
+ events: true
8405
+ });
8406
+ const timers = /* @__PURE__ */ new Map();
8407
+ function createTicketTimer(ticket) {
8408
+ if (/* @__PURE__ */ isUndefined(ticket.timeout) || ticket.timeout < 0 || ticket.isPaused) return;
8409
+ const timer = useTimer(() => {
8410
+ timers.delete(ticket.id);
8411
+ registry.unregister(ticket.id);
8412
+ resume();
8413
+ }, { duration: ticket.timeout });
8414
+ timers.set(ticket.id, timer);
8415
+ timer.start();
8416
+ }
8417
+ function stopTimer(id) {
8418
+ const timer = timers.get(id);
8419
+ if (timer) {
8420
+ timer.stop();
8421
+ timers.delete(id);
8422
+ }
8423
+ }
8424
+ function register(registration = {}) {
8425
+ const id = registration.id ?? /* @__PURE__ */ useId();
8426
+ const timeout = Object.prototype.hasOwnProperty.call(registration, "timeout") ? registration.timeout : _timeout;
8427
+ const ticket = {
8428
+ ...registration,
8429
+ id,
8430
+ timeout,
8431
+ isPaused: registry.size > 0,
8432
+ dismiss: () => unregister(id)
8433
+ };
8434
+ const registered = registry.register(ticket);
8435
+ createTicketTimer(registered);
8436
+ return registered;
8437
+ }
8438
+ function unregister(id) {
8439
+ const ticket = /* @__PURE__ */ isUndefined(id) ? registry.seek("first") : registry.get(id);
8440
+ if (!ticket) return void 0;
8441
+ const wasFirst = ticket.index === 0;
8442
+ stopTimer(ticket.id);
8443
+ registry.unregister(ticket.id);
8444
+ if (wasFirst) resume();
8445
+ return ticket;
8446
+ }
8447
+ function offboard(ids) {
8448
+ let hadFirst = false;
8449
+ for (const id of ids) {
8450
+ const ticket = registry.get(id);
8451
+ if (!ticket) continue;
8452
+ if (ticket.index === 0) hadFirst = true;
8453
+ stopTimer(ticket.id);
8454
+ }
8455
+ registry.offboard(ids);
8456
+ if (hadFirst) resume();
8457
+ }
8458
+ function pause() {
8459
+ const ticket = registry.seek("first");
8460
+ if (!ticket || ticket.isPaused) return void 0;
8461
+ timers.get(ticket.id)?.pause();
8462
+ return registry.upsert(ticket.id, { isPaused: true });
8463
+ }
8464
+ function resume() {
8465
+ const ticket = registry.seek("first");
8466
+ if (!ticket || ticket.index !== 0 || !ticket.isPaused) return void 0;
8467
+ const updated = registry.upsert(ticket.id, { isPaused: false });
8468
+ const timer = timers.get(updated.id);
8469
+ if (timer) timer.start();
8470
+ else createTicketTimer(updated);
8471
+ return updated;
8472
+ }
8473
+ function clear() {
8474
+ for (const timer of timers.values()) timer.stop();
8475
+ timers.clear();
8476
+ registry.clear();
8477
+ }
8478
+ function dispose() {
8479
+ clear();
8480
+ registry.dispose();
8481
+ }
8482
+ onScopeDispose(dispose, true);
8483
+ function onboard(registrations) {
8484
+ return registry.batch(() => registrations.map((registration) => register(registration)));
8485
+ }
8486
+ return {
8487
+ ...registry,
8488
+ register,
8489
+ unregister,
8490
+ onboard,
8491
+ offboard,
8492
+ pause,
8493
+ resume,
8494
+ clear,
8495
+ dispose,
8496
+ get size() {
8497
+ return registry.size;
8498
+ }
8499
+ };
8500
+ }
8501
+ /**
8502
+ * Creates a new queue context.
8503
+ *
8504
+ * @param options The options for the queue context.
8505
+ * @template Z The type of the queue ticket.
8506
+ * @template E The type of the queue context.
8507
+ * @returns A new queue context.
8508
+ *
8509
+ * @see https://0.vuetifyjs.com/composables/registration/create-queue
8510
+ *
8511
+ * @example
8512
+ * ```ts
8513
+ * import { createQueueContext } from '@vuetify/v0'
8514
+ *
8515
+ * export const [useQueue, provideQueue, context] = createQueueContext({
8516
+ * timeout: 5000,
8517
+ * })
8518
+ * ```
8519
+ */
8520
+ function createQueueContext(_options = {}) {
8521
+ const { namespace = "v0:queue", ...options } = _options;
8522
+ const [useQueueContext, _provideQueueContext] = createContext(namespace);
8523
+ const context = createQueue(options);
8524
+ function provideQueueContext(_context = context, app) {
8525
+ return _provideQueueContext(_context, app);
8526
+ }
8527
+ return createTrinity(useQueueContext, provideQueueContext, context);
8528
+ }
8529
+ /**
8530
+ * Returns the current queue instance.
8531
+ *
8532
+ * @param namespace The namespace for the queue context. Defaults to `'v0:queue'`.
8533
+ * @returns The current queue instance.
8534
+ *
8535
+ * @see https://0.vuetifyjs.com/composables/registration/create-queue
8536
+ *
8537
+ * @example
8538
+ * ```vue
8539
+ * <script setup lang="ts">
8540
+ * import { useQueue } from '@vuetify/v0'
8541
+ *
8542
+ * const queue = useQueue()
8543
+ * <\/script>
8544
+ * ```
8545
+ */
8546
+ function useQueue(namespace = "v0:queue") {
8547
+ return useContext(namespace);
8548
+ }
8549
+ //#endregion
8550
+ //#region src/composables/useNotifications/index.ts
8551
+ /**
8552
+ * @module useNotifications
8553
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications
8554
+ *
8555
+ * @remarks
8556
+ * Notification management composable built on createRegistry and createQueue.
8557
+ * Registry stores the full notification lifecycle (permanent record).
8558
+ * Queue manages the display surface (toasts) with FIFO ordering and auto-dismiss.
8559
+ *
8560
+ * Supports:
8561
+ * - Push notifications with severity levels and configurable timeouts
8562
+ * - State mutations: read, seen, archived, snoozed
8563
+ * - Bulk operations: readAll, archiveAll, clear
8564
+ * - Toast queue with pause/resume and auto-dismiss
8565
+ * - Adapter integration via event system
8566
+ * - Plugin installation via createNotificationsPlugin
8567
+ */
8568
+ function createNotifications(options = {}) {
8569
+ const { timeout = 3e3, ...registryOptions } = options;
8570
+ const registry = createRegistry({
8571
+ ...registryOptions,
8572
+ events: true,
8573
+ reactive: true
8574
+ });
8575
+ const queue = createQueue({
8576
+ timeout,
8577
+ events: true,
8578
+ reactive: true
8579
+ });
8580
+ registry.on("unregister:ticket", (ticket) => {
8581
+ if (queue.has(ticket.id)) queue.unregister(ticket.id);
8582
+ });
8583
+ /**
8584
+ * Build a full {@link NotificationTicket} from raw input
8585
+ *
8586
+ * @param input The notification input to hydrate.
8587
+ * @returns A partial ticket with timestamps, lifecycle methods, and an ID.
8588
+ * @internal Used by {@link send}, {@link register}, and {@link onboard}.
8589
+ */
8590
+ function hydrate(input) {
8591
+ const id = input.id ?? /* @__PURE__ */ useId();
8592
+ const now = /* @__PURE__ */ new Date();
8593
+ return {
8594
+ ...input,
8595
+ id,
8596
+ createdAt: now,
8597
+ readAt: null,
8598
+ seenAt: null,
8599
+ archivedAt: null,
8600
+ snoozedUntil: null,
8601
+ read: () => read(id),
8602
+ unread: () => unread(id),
8603
+ seen: () => seen(id),
8604
+ archive: () => archive(id),
8605
+ unarchive: () => unarchive(id),
8606
+ snooze: (until) => snooze(id, until),
8607
+ wake: () => wake(id),
8608
+ dismiss: () => queue.unregister(id)
8609
+ };
8610
+ }
8611
+ /**
8612
+ * Create a notification and enqueue it for toast display
8613
+ *
8614
+ * @param input The notification input to create.
8615
+ * @returns The hydrated notification ticket.
8616
+ * @remarks Hydrates the input with timestamps and lifecycle methods, registers
8617
+ * it in the registry, adds it to the display queue, and emits
8618
+ * `notification:received`. The ticket auto-dismisses after the configured
8619
+ * timeout unless paused.
8620
+ *
8621
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#send
8622
+ *
8623
+ * @example
8624
+ * ```ts
8625
+ * import { useNotifications } from '@vuetify/v0'
8626
+ *
8627
+ * const notifications = useNotifications()
8628
+ *
8629
+ * // Basic toast
8630
+ * notifications.send({ subject: 'Changes saved', severity: 'success' })
8631
+ *
8632
+ * // With custom timeout
8633
+ * const ticket = notifications.send({ subject: 'Connection lost', severity: 'error', timeout: 10000 })
8634
+ *
8635
+ * console.log(ticket.id) // 'generated-id'
8636
+ * console.log(ticket.createdAt) // Date
8637
+ * console.log(ticket.readAt) // null
8638
+ *
8639
+ * // Ticket convenience methods
8640
+ * ticket.read() // marks as read
8641
+ * ticket.dismiss() // removes from toast queue, keeps in registry
8642
+ * ```
8643
+ */
8644
+ function send(input) {
8645
+ const ticket = registry.register(hydrate(input));
8646
+ queue.register(/* @__PURE__ */ isUndefined(input.timeout) ? { id: ticket.id } : {
8647
+ id: ticket.id,
8648
+ timeout: input.timeout
8649
+ });
8650
+ registry.emit("notification:received", ticket);
8651
+ return ticket;
8652
+ }
8653
+ /**
8654
+ * Register a notification in the registry without adding it to the toast queue
8655
+ *
8656
+ * @param input The notification input to register.
8657
+ * @returns The hydrated notification ticket.
8658
+ * @remarks Overrides the base registry `register` to hydrate the input with
8659
+ * timestamps and lifecycle methods. Use for historical or pre-existing items
8660
+ * that should appear in an inbox but not pop up as toasts.
8661
+ *
8662
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#register
8663
+ *
8664
+ * @example
8665
+ * ```ts
8666
+ * import { useNotifications } from '@vuetify/v0'
8667
+ *
8668
+ * const notifications = useNotifications()
8669
+ *
8670
+ * // Register a historical item (appears in inbox, not as toast)
8671
+ * const ticket = notifications.register({ id: 'old-1', subject: 'Deployed v2.1' })
8672
+ *
8673
+ * console.log(ticket.createdAt) // Date
8674
+ * console.log(ticket.readAt) // null
8675
+ *
8676
+ * // Lifecycle methods work the same as send()
8677
+ * ticket.read()
8678
+ * ticket.archive()
8679
+ * ```
8680
+ */
8681
+ function register(input) {
8682
+ return registry.register(hydrate(input));
8683
+ }
8684
+ /**
8685
+ * Bulk version of {@link register}
8686
+ *
8687
+ * @param inputs Array of notification inputs to register.
8688
+ * @returns Array of hydrated notification tickets.
8689
+ * @remarks Registers multiple notifications into the registry without toast
8690
+ * display. Wraps all registrations in a single `registry.batch()` call so
8691
+ * reactive updates are deferred until the entire batch completes.
8692
+ *
8693
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#onboard
8694
+ *
8695
+ * @example
8696
+ * ```ts
8697
+ * import { useNotifications } from '@vuetify/v0'
8698
+ *
8699
+ * const notifications = useNotifications()
8700
+ *
8701
+ * // Load historical items on mount
8702
+ * const tickets = notifications.onboard([
8703
+ * { id: 'n1', subject: 'Welcome to the team' },
8704
+ * { id: 'n2', subject: 'Setup complete', severity: 'success' },
8705
+ * ])
8706
+ *
8707
+ * console.log(tickets.length) // 2
8708
+ * console.log(notifications.queue.values()) // [] (no toasts)
8709
+ * console.log(notifications.values().length) // 2 (in registry)
8710
+ * ```
8711
+ */
8712
+ function onboard(inputs) {
8713
+ return registry.batch(() => inputs.map((input) => register(input)));
8714
+ }
8715
+ /**
8716
+ * Mark a notification as read
8717
+ *
8718
+ * @param id The ID of the notification to mark as read.
8719
+ * @remarks Sets `readAt` to the current time and emits `notification:read`.
8720
+ * Adapters listen to this event for outbound sync.
8721
+ *
8722
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#read
8723
+ *
8724
+ * @example
8725
+ * ```ts
8726
+ * import { useNotifications } from '@vuetify/v0'
8727
+ *
8728
+ * const notifications = useNotifications()
8729
+ *
8730
+ * const ticket = notifications.send({ subject: 'New message' })
8731
+ *
8732
+ * notifications.read(ticket.id)
8733
+ * console.log(ticket.readAt) // Date
8734
+ *
8735
+ * // Or via ticket convenience method
8736
+ * ticket.read()
8737
+ * ```
8738
+ */
8739
+ function read(id) {
8740
+ registry.upsert(id, { readAt: /* @__PURE__ */ new Date() }, "notification:read");
8741
+ }
8742
+ /**
8743
+ * Mark a notification as unread
8744
+ *
8745
+ * @param id The ID of the notification to mark as unread.
8746
+ * @remarks Clears `readAt` and emits `notification:unread`.
8747
+ *
8748
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#unread
8749
+ *
8750
+ * @example
8751
+ * ```ts
8752
+ * import { useNotifications } from '@vuetify/v0'
8753
+ *
8754
+ * const notifications = useNotifications()
8755
+ *
8756
+ * notifications.unread('notif-1')
8757
+ * ```
8758
+ */
8759
+ function unread(id) {
8760
+ registry.upsert(id, { readAt: null }, "notification:unread");
8761
+ }
8762
+ /**
8763
+ * Mark a notification as seen
8764
+ *
8765
+ * @param id The ID of the notification to mark as seen.
8766
+ * @remarks Sets `seenAt` to the current time and emits `notification:seen`.
8767
+ * Distinct from read — seen tracks whether the notification appeared in the
8768
+ * user's viewport, while read indicates the user actively engaged with it.
8769
+ *
8770
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#seen
8771
+ *
8772
+ * @example
8773
+ * ```ts
8774
+ * import { useNotifications } from '@vuetify/v0'
8775
+ *
8776
+ * const notifications = useNotifications()
8777
+ *
8778
+ * // Mark as seen when visible in inbox viewport
8779
+ * notifications.seen('notif-1')
8780
+ * ```
8781
+ */
8782
+ function seen(id) {
8783
+ registry.upsert(id, { seenAt: /* @__PURE__ */ new Date() }, "notification:seen");
8784
+ }
8785
+ /**
8786
+ * Archive a notification
8787
+ *
8788
+ * @param id The ID of the notification to archive.
8789
+ * @remarks Sets `archivedAt` to the current time and emits `notification:archived`.
8790
+ *
8791
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#archive
8792
+ *
8793
+ * @example
8794
+ * ```ts
8795
+ * import { useNotifications } from '@vuetify/v0'
8796
+ *
8797
+ * const notifications = useNotifications()
8798
+ *
8799
+ * notifications.archive('notif-1')
8800
+ * ```
8801
+ */
8802
+ function archive(id) {
8803
+ registry.upsert(id, { archivedAt: /* @__PURE__ */ new Date() }, "notification:archived");
8804
+ }
8805
+ /**
8806
+ * Restore an archived notification
8807
+ *
8808
+ * @param id The ID of the notification to unarchive.
8809
+ * @remarks Clears `archivedAt` and emits `notification:unarchived`.
8810
+ *
8811
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#unarchive
8812
+ *
8813
+ * @example
8814
+ * ```ts
8815
+ * import { useNotifications } from '@vuetify/v0'
8816
+ *
8817
+ * const notifications = useNotifications()
8818
+ *
8819
+ * notifications.unarchive('notif-1')
8820
+ * ```
8821
+ */
8822
+ function unarchive(id) {
8823
+ registry.upsert(id, { archivedAt: null }, "notification:unarchived");
8824
+ }
8825
+ /**
8826
+ * Snooze a notification until a given time
8827
+ *
8828
+ * @param id The ID of the notification to snooze.
8829
+ * @param until The time at which the snooze expires.
8830
+ * @remarks Sets `snoozedUntil` and emits `notification:snoozed`. The composable
8831
+ * does not auto-wake — consumers are responsible for calling {@link wake} when
8832
+ * the snooze expires (e.g., via a timer or server push).
8833
+ *
8834
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#snooze
8835
+ *
8836
+ * @example
8837
+ * ```ts
8838
+ * import { useNotifications } from '@vuetify/v0'
8839
+ *
8840
+ * const notifications = useNotifications()
8841
+ *
8842
+ * const tomorrow = new Date(Date.now() + 86_400_000)
8843
+ * notifications.snooze('notif-1', tomorrow)
8844
+ * ```
8845
+ */
8846
+ function snooze(id, until) {
8847
+ registry.upsert(id, { snoozedUntil: until }, "notification:snoozed");
8848
+ }
8849
+ /**
8850
+ * Cancel a snooze
8851
+ *
8852
+ * @param id The ID of the notification to wake.
8853
+ * @remarks Clears `snoozedUntil` and emits `notification:unsnoozed`.
8854
+ *
8855
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#wake
8856
+ *
8857
+ * @example
8858
+ * ```ts
8859
+ * import { useNotifications } from '@vuetify/v0'
8860
+ *
8861
+ * const notifications = useNotifications()
8862
+ *
8863
+ * notifications.wake('notif-1')
8864
+ * ```
8865
+ */
8866
+ function wake(id) {
8867
+ registry.upsert(id, { snoozedUntil: null }, "notification:unsnoozed");
8868
+ }
8869
+ /**
8870
+ * Mark all unread notifications as read
8871
+ *
8872
+ * @remarks Iterates all notifications and marks unread ones as read in a single
8873
+ * batch. Skips already-read notifications to preserve their original `readAt`
8874
+ * timestamp. Emits `notification:read` for each affected notification.
8875
+ *
8876
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#readall
8877
+ *
8878
+ * @example
8879
+ * ```ts
8880
+ * import { useNotifications } from '@vuetify/v0'
8881
+ *
8882
+ * const notifications = useNotifications()
8883
+ *
8884
+ * notifications.send({ subject: 'Message 1' })
8885
+ * notifications.send({ subject: 'Message 2' })
8886
+ *
8887
+ * notifications.readAll()
8888
+ *
8889
+ * console.log(notifications.values().every(t => t.readAt !== null)) // true
8890
+ * ```
8891
+ */
8892
+ function readAll() {
8893
+ const now = /* @__PURE__ */ new Date();
8894
+ registry.batch(() => {
8895
+ for (const ticket of registry.values()) if (/* @__PURE__ */ isNull(ticket.readAt)) registry.upsert(ticket.id, { readAt: now }, "notification:read");
8896
+ });
8897
+ }
8898
+ /**
8899
+ * Archive all unarchived notifications
8900
+ *
8901
+ * @remarks Iterates all notifications and archives unarchived ones in a single
8902
+ * batch. Skips already-archived notifications to preserve their original
8903
+ * `archivedAt` timestamp. Emits `notification:archived` for each affected notification.
8904
+ *
8905
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications#archiveall
8906
+ *
8907
+ * @example
8908
+ * ```ts
8909
+ * import { useNotifications } from '@vuetify/v0'
8910
+ *
8911
+ * const notifications = useNotifications()
8912
+ *
8913
+ * notifications.send({ subject: 'Alert 1' })
8914
+ * notifications.send({ subject: 'Alert 2' })
8915
+ *
8916
+ * notifications.archiveAll()
8917
+ *
8918
+ * console.log(notifications.values().every(t => t.archivedAt !== null)) // true
8919
+ * ```
8920
+ */
8921
+ function archiveAll() {
8922
+ const now = /* @__PURE__ */ new Date();
8923
+ registry.batch(() => {
8924
+ for (const ticket of registry.values()) if (/* @__PURE__ */ isNull(ticket.archivedAt)) registry.upsert(ticket.id, { archivedAt: now }, "notification:archived");
8925
+ });
8926
+ }
8927
+ return {
8928
+ ...registry,
8929
+ send,
8930
+ register,
7826
8931
  onboard,
7827
- clear,
7828
- reset,
8932
+ queue,
8933
+ read,
8934
+ unread,
8935
+ seen,
8936
+ archive,
8937
+ unarchive,
8938
+ snooze,
8939
+ wake,
8940
+ readAll,
8941
+ archiveAll,
7829
8942
  get size() {
7830
- return group.size;
8943
+ return registry.size;
7831
8944
  }
7832
8945
  };
7833
- return context;
8946
+ }
8947
+ function noop() {}
8948
+ const EMPTY = [];
8949
+ function createNotificationsFallback() {
8950
+ const stub = {
8951
+ id: "",
8952
+ index: 0,
8953
+ value: 0,
8954
+ valueIsIndex: true,
8955
+ createdAt: /* @__PURE__ */ new Date(0),
8956
+ readAt: null,
8957
+ seenAt: null,
8958
+ archivedAt: null,
8959
+ snoozedUntil: null,
8960
+ read: noop,
8961
+ unread: noop,
8962
+ seen: noop,
8963
+ archive: noop,
8964
+ unarchive: noop,
8965
+ snooze: noop,
8966
+ wake: noop,
8967
+ dismiss: noop,
8968
+ unregister: noop
8969
+ };
8970
+ return {
8971
+ collection: /* @__PURE__ */ new Map(),
8972
+ size: 0,
8973
+ send: () => stub,
8974
+ queue: {
8975
+ collection: /* @__PURE__ */ new Map(),
8976
+ size: 0,
8977
+ register: () => ({}),
8978
+ unregister: () => void 0,
8979
+ has: () => false,
8980
+ get: () => void 0,
8981
+ keys: () => EMPTY,
8982
+ values: () => EMPTY,
8983
+ entries: () => EMPTY,
8984
+ browse: () => void 0,
8985
+ lookup: () => void 0,
8986
+ upsert: () => ({}),
8987
+ seek: () => void 0,
8988
+ move: () => void 0,
8989
+ on: noop,
8990
+ off: noop,
8991
+ emit: noop,
8992
+ dispose: noop,
8993
+ clear: noop,
8994
+ reindex: noop,
8995
+ batch: (fn) => fn(),
8996
+ onboard: () => EMPTY,
8997
+ offboard: noop,
8998
+ pause: () => void 0,
8999
+ resume: () => void 0
9000
+ },
9001
+ read: noop,
9002
+ unread: noop,
9003
+ seen: noop,
9004
+ archive: noop,
9005
+ unarchive: noop,
9006
+ snooze: noop,
9007
+ wake: noop,
9008
+ readAll: noop,
9009
+ archiveAll: noop,
9010
+ clear: noop,
9011
+ has: () => false,
9012
+ get: () => void 0,
9013
+ keys: () => EMPTY,
9014
+ values: () => EMPTY,
9015
+ entries: () => EMPTY,
9016
+ browse: () => void 0,
9017
+ lookup: () => void 0,
9018
+ upsert: () => stub,
9019
+ register: () => stub,
9020
+ unregister: noop,
9021
+ reindex: noop,
9022
+ move: () => void 0,
9023
+ seek: () => void 0,
9024
+ on: noop,
9025
+ off: noop,
9026
+ emit: noop,
9027
+ dispose: noop,
9028
+ batch: (fn) => fn(),
9029
+ onboard: () => EMPTY,
9030
+ offboard: noop
9031
+ };
7834
9032
  }
7835
9033
  /**
7836
- * Creates a new nested context with provide/inject pattern.
9034
+ * Notification management with registry, event system, and optional adapters.
7837
9035
  *
7838
- * @param options The options for the nested context.
7839
- * @returns A trinity tuple [useNested, provideNested, defaultNested]
7840
- *
7841
- * @see https://0.vuetifyjs.com/composables/selection/use-nested
9036
+ * @see https://0.vuetifyjs.com/composables/plugins/use-notifications
7842
9037
  *
7843
9038
  * @example
7844
9039
  * ```ts
7845
- * import { createNestedContext } from '@vuetify/v0'
9040
+ * import { createNotificationsPlugin, useNotifications } from '@vuetify/v0'
7846
9041
  *
7847
- * export const [useTree, provideTree, tree] = createNestedContext()
9042
+ * // Install as plugin
9043
+ * app.use(createNotificationsPlugin())
7848
9044
  *
7849
- * // In parent: provideTree()
7850
- * // In child: const tree = useTree()
9045
+ * // Use in components
9046
+ * const notifications = useNotifications()
9047
+ * notifications.send({ subject: 'Saved', severity: 'success' })
7851
9048
  * ```
7852
9049
  */
7853
- function createNestedContext(_options = {}) {
7854
- const { namespace = "v0:nested", ...options } = _options;
7855
- const [useNestedContext, _provideNestedContext] = createContext(namespace);
7856
- const context = createNested(options);
7857
- function provideNestedContext(_context = context, app) {
7858
- return _provideNestedContext(_context, app);
9050
+ const [createNotificationsContext, createNotificationsPlugin, useNotifications] = createPluginContext("v0:notifications", (options) => createNotifications(options), {
9051
+ fallback: () => createNotificationsFallback(),
9052
+ setup: (context, app, options) => {
9053
+ app.onUnmount(() => {
9054
+ context.dispose();
9055
+ context.queue.dispose();
9056
+ });
9057
+ const { adapter } = options;
9058
+ if (!adapter) return;
9059
+ adapter.setup({
9060
+ send: context.send,
9061
+ register: context.register,
9062
+ on: context.on,
9063
+ off: context.off
9064
+ });
9065
+ if (/* @__PURE__ */ isFunction(adapter.dispose)) app.onUnmount(() => adapter.dispose());
7859
9066
  }
7860
- return createTrinity(useNestedContext, provideNestedContext, context);
7861
- }
7862
- /**
7863
- * Returns the current nested instance from context.
7864
- *
7865
- * @param namespace The namespace for the nested context. Defaults to `'v0:nested'`.
7866
- * @returns The current nested instance.
7867
- *
7868
- * @see https://0.vuetifyjs.com/composables/selection/use-nested
7869
- */
7870
- function useNested(namespace = "v0:nested") {
7871
- return useContext(namespace);
7872
- }
9067
+ });
7873
9068
  //#endregion
7874
9069
  //#region src/composables/usePermissions/adapters/adapter.ts
7875
9070
  var PermissionAdapter = class {};
@@ -8028,17 +9223,28 @@ const [createPermissionsContext, createPermissionsPlugin, usePermissions] = crea
8028
9223
  * without wrapping the Popover compound component.
8029
9224
  */
8030
9225
  function usePopover(options = {}) {
8031
- const { id: _id, positionArea = "bottom", positionTry = "most-width bottom" } = options;
9226
+ const { id: _id, positionArea = "bottom", positionTry = "most-width bottom", showDelay = 0, hideDelay = 0 } = options;
8032
9227
  const id = _id ?? /* @__PURE__ */ useId();
8033
9228
  const isOpen = options.isOpen ?? shallowRef(false);
8034
- function open() {
9229
+ const showTimer = showDelay > 0 ? useTimer(() => {
8035
9230
  isOpen.value = true;
9231
+ }, { duration: showDelay }) : void 0;
9232
+ const hideTimer = hideDelay > 0 ? useTimer(() => {
9233
+ isOpen.value = false;
9234
+ }, { duration: hideDelay }) : void 0;
9235
+ function open() {
9236
+ hideTimer?.stop();
9237
+ if (showTimer) showTimer.start();
9238
+ else isOpen.value = true;
8036
9239
  }
8037
9240
  function close() {
8038
- isOpen.value = false;
9241
+ showTimer?.stop();
9242
+ if (hideTimer) hideTimer.start();
9243
+ else isOpen.value = false;
8039
9244
  }
8040
9245
  function toggle() {
8041
- isOpen.value = !isOpen.value;
9246
+ if (isOpen.value) close();
9247
+ else open();
8042
9248
  }
8043
9249
  const anchorStyles = toRef(() => ({ anchorName: `--${id}` }));
8044
9250
  const contentAttrs = toRef(() => ({
@@ -8085,197 +9291,70 @@ function usePopover(options = {}) {
8085
9291
  };
8086
9292
  }
8087
9293
  //#endregion
8088
- //#region src/composables/createQueue/index.ts
9294
+ //#region src/composables/useRaf/index.ts
8089
9295
  /**
8090
- * @module createQueue
9296
+ * @module useRaf
9297
+ *
9298
+ * @see https://0.vuetifyjs.com/composables/system/use-raf
8091
9299
  *
8092
9300
  * @remarks
8093
- * A queue composable for managing time-based collections with:
8094
- * - Automatic timeout-based removal
8095
- * - Pause/resume functionality
8096
- * - FIFO (First In, First Out) ordering
8097
- * - Manual dismissal support
8098
- * - Queue progression management
9301
+ * Scope-disposed safe requestAnimationFrame composable.
8099
9302
  *
8100
- * Built on top of createRegistry, the queue automatically manages timeouts for tickets,
8101
- * ensuring only the first ticket in the queue is active at any time. When a ticket
8102
- * expires or is removed, the next ticket in the queue automatically becomes active.
9303
+ * Key features:
9304
+ * - Cancel-then-request pattern (deduplicates rapid calls)
9305
+ * - Automatic cleanup on scope disposal
9306
+ * - SSR-safe (no-op in non-browser environments)
9307
+ * - Callable function with cancel method
9308
+ *
9309
+ * Perfect for throttling updates to the next animation frame.
8103
9310
  */
8104
9311
  /**
8105
- * Creates a new queue instance
9312
+ * Scope-disposed safe requestAnimationFrame.
8106
9313
  *
8107
- * @param options The options for the queue instance
8108
- * @template Z The type of queue ticket that extends QueueTicket. Use this to add custom properties to tickets.
8109
- * @template E The type of queue context that extends QueueContext<Z>. Use this when extending the queue with additional methods.
8110
- * @returns A new queue instance
9314
+ * @param callback Function to call on animation frame.
9315
+ * @returns Callable that requests frame (canceling pending), with cancel method.
8111
9316
  *
8112
- * @see https://0.vuetifyjs.com/composables/registration/create-queue
9317
+ * @see https://0.vuetifyjs.com/composables/system/use-raf
8113
9318
  *
8114
9319
  * @example
8115
9320
  * ```ts
8116
- * import { useQueue } from '@vuetify/v0'
8117
- *
8118
- * const queue = useQueue()
8119
- *
8120
- * // Register an ticket with default timeout (3000ms)
8121
- * const ticket1 = queue.register({ value: 'Ticket 1' })
8122
- *
8123
- * // Register an ticket with custom timeout
8124
- * const ticket2 = queue.register({ value: 'Ticket 2', timeout: 5000 })
9321
+ * // Basic usage
9322
+ * const update = useRaf((timestamp) => {
9323
+ * // Runs on next animation frame
9324
+ * })
8125
9325
  *
8126
- * // Register a persistent ticket that must be manually dismissed
8127
- * const ticket3 = queue.register({ value: 'Ticket 3', timeout: -1 })
9326
+ * update() // Request frame
9327
+ * update() // Cancels previous, requests new (deduplicated)
8128
9328
  *
8129
- * // Dismiss an ticket using the convenience method
8130
- * ticket3.dismiss()
9329
+ * // Manual cancel
9330
+ * update.cancel()
8131
9331
  *
8132
- * console.log(queue.size) // 2
9332
+ * // Check if pending
9333
+ * if (update.isActive.value) { ... }
8133
9334
  * ```
8134
9335
  */
8135
- function createQueue(_options = {}) {
8136
- const { timeout: _timeout = 3e3, ...options } = _options;
8137
- const registry = createRegistry({
8138
- ...options,
8139
- events: true
8140
- });
8141
- const timeouts = /* @__PURE__ */ new Map();
8142
- function startTimeout(ticket) {
8143
- if (/* @__PURE__ */ isUndefined(ticket.timeout) || ticket.timeout < 0 || ticket.isPaused) return;
8144
- const timeout = setTimeout(() => {
8145
- timeouts.delete(ticket.id);
8146
- registry.unregister(ticket.id);
8147
- resume();
8148
- }, ticket.timeout);
8149
- timeouts.set(ticket.id, timeout);
8150
- }
8151
- function clearTimeout(id) {
8152
- const timeout = timeouts.get(id);
8153
- if (timeout) {
8154
- globalThis.clearTimeout(timeout);
8155
- timeouts.delete(id);
8156
- }
8157
- }
8158
- function register(registration = {}) {
8159
- const id = registration.id ?? /* @__PURE__ */ useId();
8160
- const timeout = Object.prototype.hasOwnProperty.call(registration, "timeout") ? registration.timeout : _timeout;
8161
- const ticket = {
8162
- ...registration,
8163
- id,
8164
- timeout,
8165
- isPaused: registry.size > 0,
8166
- dismiss: () => unregister(id)
8167
- };
8168
- const registered = registry.register(ticket);
8169
- startTimeout(registered);
8170
- return registered;
8171
- }
8172
- function unregister(id) {
8173
- const ticket = /* @__PURE__ */ isUndefined(id) ? registry.seek("first") : registry.get(id);
8174
- if (!ticket) return void 0;
8175
- const wasFirst = ticket.index === 0;
8176
- clearTimeout(ticket.id);
8177
- registry.unregister(ticket.id);
8178
- if (wasFirst) resume();
8179
- return ticket;
8180
- }
8181
- function offboard(ids) {
8182
- let hadFirst = false;
8183
- for (const id of ids) {
8184
- const ticket = registry.get(id);
8185
- if (!ticket) continue;
8186
- if (ticket.index === 0) hadFirst = true;
8187
- clearTimeout(ticket.id);
9336
+ function useRaf(callback) {
9337
+ const id = shallowRef();
9338
+ const isActive = toRef(() => !/* @__PURE__ */ isUndefined(id.value));
9339
+ function cancel() {
9340
+ if (!/* @__PURE__ */ isUndefined(id.value)) {
9341
+ cancelAnimationFrame(id.value);
9342
+ id.value = void 0;
8188
9343
  }
8189
- registry.offboard(ids);
8190
- if (hadFirst) resume();
8191
- }
8192
- function pause() {
8193
- const ticket = registry.seek("first");
8194
- if (!ticket || ticket.isPaused) return void 0;
8195
- clearTimeout(ticket.id);
8196
- return registry.upsert(ticket.id, { isPaused: true });
8197
- }
8198
- function resume() {
8199
- const ticket = registry.seek("first");
8200
- if (!ticket || ticket.index !== 0 || !ticket.isPaused) return void 0;
8201
- const updated = registry.upsert(ticket.id, { isPaused: false });
8202
- startTimeout(updated);
8203
- return updated;
8204
- }
8205
- function clear() {
8206
- for (const id of timeouts.keys()) clearTimeout(id);
8207
- registry.clear();
8208
- }
8209
- function dispose() {
8210
- clear();
8211
- registry.dispose();
8212
- }
8213
- onScopeDispose(dispose, true);
8214
- function onboard(registrations) {
8215
- return registry.batch(() => registrations.map((registration) => register(registration)));
8216
9344
  }
8217
- return {
8218
- ...registry,
8219
- register,
8220
- unregister,
8221
- onboard,
8222
- offboard,
8223
- pause,
8224
- resume,
8225
- clear,
8226
- dispose,
8227
- get size() {
8228
- return registry.size;
8229
- }
8230
- };
8231
- }
8232
- /**
8233
- * Creates a new queue context.
8234
- *
8235
- * @param options The options for the queue context.
8236
- * @template Z The type of the queue ticket.
8237
- * @template E The type of the queue context.
8238
- * @returns A new queue context.
8239
- *
8240
- * @see https://0.vuetifyjs.com/composables/registration/create-queue
8241
- *
8242
- * @example
8243
- * ```ts
8244
- * import { createQueueContext } from '@vuetify/v0'
8245
- *
8246
- * export const [useQueue, provideQueue, context] = createQueueContext({
8247
- * timeout: 5000,
8248
- * })
8249
- * ```
8250
- */
8251
- function createQueueContext(_options = {}) {
8252
- const { namespace = "v0:queue", ...options } = _options;
8253
- const [useQueueContext, _provideQueueContext] = createContext(namespace);
8254
- const context = createQueue(options);
8255
- function provideQueueContext(_context = context, app) {
8256
- return _provideQueueContext(_context, app);
9345
+ function request() {
9346
+ if (!IN_BROWSER) return;
9347
+ cancel();
9348
+ id.value = requestAnimationFrame((timestamp) => {
9349
+ id.value = void 0;
9350
+ callback(timestamp);
9351
+ });
8257
9352
  }
8258
- return createTrinity(useQueueContext, provideQueueContext, context);
8259
- }
8260
- /**
8261
- * Returns the current queue instance.
8262
- *
8263
- * @param namespace The namespace for the queue context. Defaults to `'v0:queue'`.
8264
- * @returns The current queue instance.
8265
- *
8266
- * @see https://0.vuetifyjs.com/composables/registration/create-queue
8267
- *
8268
- * @example
8269
- * ```vue
8270
- * <script setup lang="ts">
8271
- * import { useQueue } from '@vuetify/v0'
8272
- *
8273
- * const queue = useQueue()
8274
- * <\/script>
8275
- * ```
8276
- */
8277
- function useQueue(namespace = "v0:queue") {
8278
- return useContext(namespace);
9353
+ onScopeDispose(cancel, true);
9354
+ return Object.assign(request, {
9355
+ cancel,
9356
+ isActive
9357
+ });
8279
9358
  }
8280
9359
  //#endregion
8281
9360
  //#region src/composables/useRules/adapters/standard.ts
@@ -8866,6 +9945,9 @@ function createSlider(options = {}) {
8866
9945
  function ceil(index) {
8867
9946
  set(index, max);
8868
9947
  }
9948
+ function onboard(registrations) {
9949
+ return model.batch(() => registrations.map((r) => register(r)));
9950
+ }
8869
9951
  return {
8870
9952
  ...model,
8871
9953
  values,
@@ -8882,6 +9964,7 @@ function createSlider(options = {}) {
8882
9964
  orientation,
8883
9965
  inverted,
8884
9966
  register,
9967
+ onboard,
8885
9968
  snap,
8886
9969
  fromValue,
8887
9970
  fromPercent,
@@ -8961,12 +10044,12 @@ function createStack(_options = {}) {
8961
10044
  const id = input.id ?? /* @__PURE__ */ useId();
8962
10045
  const blocking = input.blocking ?? false;
8963
10046
  const onDismiss = input.onDismiss;
8964
- const zIndex = computed(() => {
10047
+ const zIndex = toRef(() => {
8965
10048
  const position = ids().indexOf(id);
8966
10049
  if (position === -1) return baseZIndex;
8967
10050
  return baseZIndex + position * increment;
8968
10051
  });
8969
- const globalTop = computed(() => {
10052
+ const globalTop = toRef(() => {
8970
10053
  const list = ids();
8971
10054
  if (list.length === 0) return false;
8972
10055
  return list.at(-1) === id;
@@ -9633,7 +10716,7 @@ function createTheme(_options = {}) {
9633
10716
  });
9634
10717
  if (id === options.default && !registry.selectedId.value) registry.select(id);
9635
10718
  }
9636
- const names = computed(() => registry.keys());
10719
+ const names = toRef(() => registry.keys());
9637
10720
  const colors = computed(() => {
9638
10721
  const resolved = {};
9639
10722
  for (const theme of registry.values()) {
@@ -9654,10 +10737,13 @@ function createTheme(_options = {}) {
9654
10737
  return resolved;
9655
10738
  }
9656
10739
  function register(registration = {}) {
10740
+ const { colors, ...rest } = registration;
10741
+ if (colors && rest.id && !registry.has(rest.id)) tokens.onboard(flatten({ [rest.id]: { colors } }, "", true));
9657
10742
  const item = {
9658
10743
  lazy: false,
9659
10744
  dark: false,
9660
- ...registration
10745
+ ...rest,
10746
+ ...colors ? { value: colors } : {}
9661
10747
  };
9662
10748
  return registry.register(item);
9663
10749
  }
@@ -9767,6 +10853,12 @@ function createTimeline(_options = {}) {
9767
10853
  function redo() {
9768
10854
  if (stack.length === 0) return void 0;
9769
10855
  const item = stack.pop();
10856
+ if (registry.size >= size) {
10857
+ const oldest = registry.seek("first");
10858
+ if (overflow.length === size) overflow.shift();
10859
+ overflow.push(oldest);
10860
+ registry.unregister(oldest.id);
10861
+ }
9770
10862
  const ticket = registry.register(item);
9771
10863
  registry.reindex();
9772
10864
  return ticket;
@@ -10823,7 +11915,7 @@ function useClickOutside(target, handler, options = {}) {
10823
11915
  }
10824
11916
  //#endregion
10825
11917
  //#region src/components/Dialog/DialogContent.vue
10826
- const _sfc_main$18 = /* @__PURE__ */ defineComponent({
11918
+ const _sfc_main$24 = /* @__PURE__ */ defineComponent({
10827
11919
  name: "DialogContent",
10828
11920
  __name: "DialogContent",
10829
11921
  props: {
@@ -10907,7 +11999,7 @@ const _sfc_main$18 = /* @__PURE__ */ defineComponent({
10907
11999
  });
10908
12000
  //#endregion
10909
12001
  //#region src/components/Dialog/DialogDescription.vue
10910
- const _sfc_main$19 = /* @__PURE__ */ defineComponent({
12002
+ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
10911
12003
  name: "DialogDescription",
10912
12004
  __name: "DialogDescription",
10913
12005
  props: {
@@ -10928,7 +12020,7 @@ const _sfc_main$19 = /* @__PURE__ */ defineComponent({
10928
12020
  });
10929
12021
  //#endregion
10930
12022
  //#region src/components/Dialog/DialogTitle.vue
10931
- const _sfc_main$21 = /* @__PURE__ */ defineComponent({
12023
+ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
10932
12024
  name: "DialogTitle",
10933
12025
  __name: "DialogTitle",
10934
12026
  props: {
@@ -10949,7 +12041,7 @@ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
10949
12041
  });
10950
12042
  //#endregion
10951
12043
  //#region src/components/Dialog/DialogActivator.vue
10952
- const _sfc_main$16 = /* @__PURE__ */ defineComponent({
12044
+ const _sfc_main$22 = /* @__PURE__ */ defineComponent({
10953
12045
  name: "DialogActivator",
10954
12046
  __name: "DialogActivator",
10955
12047
  props: {
@@ -11011,17 +12103,17 @@ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
11011
12103
  * ```
11012
12104
  */
11013
12105
  const Dialog = {
11014
- Root: _sfc_main$20,
11015
- Activator: _sfc_main$16,
11016
- Content: _sfc_main$18,
11017
- Title: _sfc_main$21,
11018
- Description: _sfc_main$19,
11019
- Close: _sfc_main$17
12106
+ Root: _sfc_main$26,
12107
+ Activator: _sfc_main$22,
12108
+ Content: _sfc_main$24,
12109
+ Title: _sfc_main$27,
12110
+ Description: _sfc_main$25,
12111
+ Close: _sfc_main$23
11020
12112
  };
11021
12113
  //#endregion
11022
12114
  //#region src/components/ExpansionPanel/ExpansionPanelRoot.vue
11023
12115
  const [useExpansionPanelRoot, provideExpansionPanelRoot] = createContext();
11024
- const _sfc_main$26 = /* @__PURE__ */ defineComponent({
12116
+ const _sfc_main$32 = /* @__PURE__ */ defineComponent({
11025
12117
  name: "ExpansionPanelRoot",
11026
12118
  __name: "ExpansionPanelRoot",
11027
12119
  props: /* @__PURE__ */ mergeModels({
@@ -11081,7 +12173,7 @@ const _sfc_main$26 = /* @__PURE__ */ defineComponent({
11081
12173
  //#endregion
11082
12174
  //#region src/components/ExpansionPanel/ExpansionPanelItem.vue
11083
12175
  const [useExpansionPanelItem, provideExpansionPanelItem] = createContext({ suffix: "item" });
11084
- const _sfc_main$25 = /* @__PURE__ */ defineComponent({
12176
+ const _sfc_main$31 = /* @__PURE__ */ defineComponent({
11085
12177
  name: "ExpansionPanelItem",
11086
12178
  __name: "ExpansionPanelItem",
11087
12179
  props: {
@@ -11127,7 +12219,7 @@ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
11127
12219
  });
11128
12220
  //#endregion
11129
12221
  //#region src/components/ExpansionPanel/ExpansionPanelActivator.vue
11130
- const _sfc_main$22 = /* @__PURE__ */ defineComponent({
12222
+ const _sfc_main$28 = /* @__PURE__ */ defineComponent({
11131
12223
  name: "ExpansionPanelActivator",
11132
12224
  __name: "ExpansionPanelActivator",
11133
12225
  props: {
@@ -11175,7 +12267,7 @@ const _sfc_main$22 = /* @__PURE__ */ defineComponent({
11175
12267
  });
11176
12268
  //#endregion
11177
12269
  //#region src/components/ExpansionPanel/ExpansionPanelContent.vue
11178
- const _sfc_main$23 = /* @__PURE__ */ defineComponent({
12270
+ const _sfc_main$29 = /* @__PURE__ */ defineComponent({
11179
12271
  name: "ExpansionPanelContent",
11180
12272
  __name: "ExpansionPanelContent",
11181
12273
  props: {
@@ -11208,7 +12300,7 @@ const _sfc_main$23 = /* @__PURE__ */ defineComponent({
11208
12300
  });
11209
12301
  //#endregion
11210
12302
  //#region src/components/ExpansionPanel/ExpansionPanelHeader.vue
11211
- const _sfc_main$24 = /* @__PURE__ */ defineComponent({
12303
+ const _sfc_main$30 = /* @__PURE__ */ defineComponent({
11212
12304
  name: "ExpansionPanelHeader",
11213
12305
  __name: "ExpansionPanelHeader",
11214
12306
  props: {
@@ -11241,15 +12333,15 @@ const _sfc_main$24 = /* @__PURE__ */ defineComponent({
11241
12333
  * @see https://0.vuetifyjs.com/components/expansion-panels
11242
12334
  */
11243
12335
  const ExpansionPanel = {
11244
- Root: _sfc_main$26,
11245
- Item: _sfc_main$25,
11246
- Header: _sfc_main$24,
11247
- Activator: _sfc_main$22,
11248
- Content: _sfc_main$23
12336
+ Root: _sfc_main$32,
12337
+ Item: _sfc_main$31,
12338
+ Header: _sfc_main$30,
12339
+ Activator: _sfc_main$28,
12340
+ Content: _sfc_main$29
11249
12341
  };
11250
12342
  //#endregion
11251
12343
  //#region src/components/Form/Form.vue
11252
- const _sfc_main$27 = /* @__PURE__ */ defineComponent({
12344
+ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
11253
12345
  name: "Form",
11254
12346
  inheritAttrs: false,
11255
12347
  __name: "Form",
@@ -11320,7 +12412,7 @@ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
11320
12412
  //#endregion
11321
12413
  //#region src/components/Group/GroupRoot.vue
11322
12414
  const [useGroupRoot, provideGroupRoot] = createContext();
11323
- const _sfc_main$29 = /* @__PURE__ */ defineComponent({
12415
+ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
11324
12416
  name: "GroupRoot",
11325
12417
  __name: "GroupRoot",
11326
12418
  props: /* @__PURE__ */ mergeModels({
@@ -11372,7 +12464,7 @@ const _sfc_main$29 = /* @__PURE__ */ defineComponent({
11372
12464
  });
11373
12465
  //#endregion
11374
12466
  //#region src/components/Group/GroupItem.vue
11375
- const _sfc_main$28 = /* @__PURE__ */ defineComponent({
12467
+ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
11376
12468
  name: "GroupItem",
11377
12469
  __name: "GroupItem",
11378
12470
  props: {
@@ -11429,8 +12521,8 @@ const _sfc_main$28 = /* @__PURE__ */ defineComponent({
11429
12521
  * @see https://0.vuetifyjs.com/components/group
11430
12522
  */
11431
12523
  const Group = {
11432
- Root: _sfc_main$29,
11433
- Item: _sfc_main$28
12524
+ Root: _sfc_main$35,
12525
+ Item: _sfc_main$34
11434
12526
  };
11435
12527
  //#endregion
11436
12528
  //#region src/components/Input/InputRoot.vue
@@ -11446,7 +12538,7 @@ function parseValidateOn(value) {
11446
12538
  modifier
11447
12539
  };
11448
12540
  }
11449
- const _sfc_main$33 = /* @__PURE__ */ defineComponent({
12541
+ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
11450
12542
  name: "InputRoot",
11451
12543
  inheritAttrs: false,
11452
12544
  __name: "InputRoot",
@@ -11593,7 +12685,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
11593
12685
  });
11594
12686
  //#endregion
11595
12687
  //#region src/components/Input/InputControl.vue
11596
- const _sfc_main$30 = /* @__PURE__ */ defineComponent({
12688
+ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
11597
12689
  name: "InputControl",
11598
12690
  inheritAttrs: false,
11599
12691
  __name: "InputControl",
@@ -11669,7 +12761,7 @@ const _sfc_main$30 = /* @__PURE__ */ defineComponent({
11669
12761
  });
11670
12762
  //#endregion
11671
12763
  //#region src/components/Input/InputDescription.vue
11672
- const _sfc_main$31 = /* @__PURE__ */ defineComponent({
12764
+ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
11673
12765
  name: "InputDescription",
11674
12766
  inheritAttrs: false,
11675
12767
  __name: "InputDescription",
@@ -11705,7 +12797,7 @@ const _sfc_main$31 = /* @__PURE__ */ defineComponent({
11705
12797
  });
11706
12798
  //#endregion
11707
12799
  //#region src/components/Input/InputError.vue
11708
- const _sfc_main$32 = /* @__PURE__ */ defineComponent({
12800
+ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
11709
12801
  name: "InputError",
11710
12802
  inheritAttrs: false,
11711
12803
  __name: "InputError",
@@ -11779,17 +12871,17 @@ const _sfc_main$32 = /* @__PURE__ */ defineComponent({
11779
12871
  * ```
11780
12872
  */
11781
12873
  const Input = {
11782
- Control: _sfc_main$30,
11783
- Description: _sfc_main$31,
11784
- Error: _sfc_main$32,
11785
- Root: _sfc_main$33
12874
+ Control: _sfc_main$36,
12875
+ Description: _sfc_main$37,
12876
+ Error: _sfc_main$38,
12877
+ Root: _sfc_main$39
11786
12878
  };
11787
12879
  //#endregion
11788
12880
  //#region src/components/Pagination/PaginationRoot.vue
11789
12881
  const [usePaginationRoot, providePaginationRoot] = createContext();
11790
12882
  const [usePaginationControls, providePaginationControls] = createContext({ suffix: "controls" });
11791
12883
  const [usePaginationItems, providePaginationItems] = createContext({ suffix: "items" });
11792
- const _sfc_main$40 = /* @__PURE__ */ defineComponent({
12884
+ const _sfc_main$46 = /* @__PURE__ */ defineComponent({
11793
12885
  name: "PaginationRoot",
11794
12886
  __name: "PaginationRoot",
11795
12887
  props: /* @__PURE__ */ mergeModels({
@@ -11868,7 +12960,7 @@ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
11868
12960
  prev: pagination.prev,
11869
12961
  select: pagination.select,
11870
12962
  attrs: {
11871
- "aria-label": locale.t("Pagination.label", void 0, "Pagination"),
12963
+ "aria-label": locale.t("Pagination.label"),
11872
12964
  "role": __props.as === "nav" ? void 0 : "navigation"
11873
12965
  }
11874
12966
  }));
@@ -11891,7 +12983,7 @@ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
11891
12983
  });
11892
12984
  //#endregion
11893
12985
  //#region src/components/Pagination/PaginationEllipsis.vue
11894
- const _sfc_main$34 = /* @__PURE__ */ defineComponent({
12986
+ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
11895
12987
  name: "PaginationEllipsis",
11896
12988
  __name: "PaginationEllipsis",
11897
12989
  props: {
@@ -11934,7 +13026,7 @@ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
11934
13026
  });
11935
13027
  //#endregion
11936
13028
  //#region src/components/Pagination/PaginationFirst.vue
11937
- const _sfc_main$35 = /* @__PURE__ */ defineComponent({
13029
+ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
11938
13030
  name: "PaginationFirst",
11939
13031
  __name: "PaginationFirst",
11940
13032
  props: {
@@ -11965,7 +13057,7 @@ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
11965
13057
  isDisabled: isDisabled.value,
11966
13058
  first,
11967
13059
  attrs: {
11968
- "aria-label": locale.t("Pagination.first", void 0, "Go to first page"),
13060
+ "aria-label": locale.t("Pagination.first"),
11969
13061
  "aria-disabled": isDisabled.value,
11970
13062
  "data-disabled": isDisabled.value || void 0,
11971
13063
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
@@ -11991,7 +13083,7 @@ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
11991
13083
  });
11992
13084
  //#endregion
11993
13085
  //#region src/components/Pagination/PaginationItem.vue
11994
- const _sfc_main$36 = /* @__PURE__ */ defineComponent({
13086
+ const _sfc_main$42 = /* @__PURE__ */ defineComponent({
11995
13087
  name: "PaginationItem",
11996
13088
  __name: "PaginationItem",
11997
13089
  props: {
@@ -12019,7 +13111,7 @@ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
12019
13111
  }, { immediate: true });
12020
13112
  const isSelected = toRef(() => pagination.page.value === __props.value);
12021
13113
  const ariaLabel = toRef(() => {
12022
- return isSelected.value ? locale.t("Pagination.currentPage", { page: __props.value }, `Page ${__props.value}, current page`) : locale.t("Pagination.goToPage", { page: __props.value }, `Go to page ${__props.value}`);
13114
+ return isSelected.value ? locale.t("Pagination.currentPage", { page: __props.value }) : locale.t("Pagination.goToPage", { page: __props.value });
12023
13115
  });
12024
13116
  function select() {
12025
13117
  if (__props.disabled) return;
@@ -12059,7 +13151,7 @@ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
12059
13151
  });
12060
13152
  //#endregion
12061
13153
  //#region src/components/Pagination/PaginationLast.vue
12062
- const _sfc_main$37 = /* @__PURE__ */ defineComponent({
13154
+ const _sfc_main$43 = /* @__PURE__ */ defineComponent({
12063
13155
  name: "PaginationLast",
12064
13156
  __name: "PaginationLast",
12065
13157
  props: {
@@ -12090,7 +13182,7 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
12090
13182
  isDisabled: isDisabled.value,
12091
13183
  last,
12092
13184
  attrs: {
12093
- "aria-label": locale.t("Pagination.last", void 0, "Go to last page"),
13185
+ "aria-label": locale.t("Pagination.last"),
12094
13186
  "aria-disabled": isDisabled.value,
12095
13187
  "data-disabled": isDisabled.value || void 0,
12096
13188
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
@@ -12116,7 +13208,7 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
12116
13208
  });
12117
13209
  //#endregion
12118
13210
  //#region src/components/Pagination/PaginationNext.vue
12119
- const _sfc_main$38 = /* @__PURE__ */ defineComponent({
13211
+ const _sfc_main$44 = /* @__PURE__ */ defineComponent({
12120
13212
  name: "PaginationNext",
12121
13213
  __name: "PaginationNext",
12122
13214
  props: {
@@ -12147,7 +13239,7 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
12147
13239
  isDisabled: isDisabled.value,
12148
13240
  next,
12149
13241
  attrs: {
12150
- "aria-label": locale.t("Pagination.next", void 0, "Go to next page"),
13242
+ "aria-label": locale.t("Pagination.next"),
12151
13243
  "aria-disabled": isDisabled.value,
12152
13244
  "data-disabled": isDisabled.value || void 0,
12153
13245
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
@@ -12173,7 +13265,7 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
12173
13265
  });
12174
13266
  //#endregion
12175
13267
  //#region src/components/Pagination/PaginationPrev.vue
12176
- const _sfc_main$39 = /* @__PURE__ */ defineComponent({
13268
+ const _sfc_main$45 = /* @__PURE__ */ defineComponent({
12177
13269
  name: "PaginationPrev",
12178
13270
  __name: "PaginationPrev",
12179
13271
  props: {
@@ -12204,7 +13296,7 @@ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
12204
13296
  isDisabled: isDisabled.value,
12205
13297
  prev,
12206
13298
  attrs: {
12207
- "aria-label": locale.t("Pagination.prev", void 0, "Go to previous page"),
13299
+ "aria-label": locale.t("Pagination.prev"),
12208
13300
  "aria-disabled": isDisabled.value,
12209
13301
  "data-disabled": isDisabled.value || void 0,
12210
13302
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
@@ -12230,7 +13322,7 @@ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
12230
13322
  });
12231
13323
  //#endregion
12232
13324
  //#region src/components/Pagination/PaginationStatus.vue
12233
- const _sfc_main$41 = /* @__PURE__ */ defineComponent({
13325
+ const _sfc_main$47 = /* @__PURE__ */ defineComponent({
12234
13326
  name: "PaginationStatus",
12235
13327
  __name: "PaginationStatus",
12236
13328
  props: {
@@ -12249,7 +13341,7 @@ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
12249
13341
  text.value = locale.t("Pagination.status", {
12250
13342
  page,
12251
13343
  pages: pagination.pages
12252
- }, `Page ${page} of ${pagination.pages}`);
13344
+ });
12253
13345
  }, 100);
12254
13346
  });
12255
13347
  /* v8 ignore stop */
@@ -12282,19 +13374,19 @@ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
12282
13374
  * @see https://0.vuetifyjs.com/components/pagination
12283
13375
  */
12284
13376
  const Pagination = {
12285
- Root: _sfc_main$40,
12286
- Item: _sfc_main$36,
12287
- First: _sfc_main$35,
12288
- Prev: _sfc_main$39,
12289
- Ellipsis: _sfc_main$34,
12290
- Next: _sfc_main$38,
12291
- Last: _sfc_main$37,
12292
- Status: _sfc_main$41
13377
+ Root: _sfc_main$46,
13378
+ Item: _sfc_main$42,
13379
+ First: _sfc_main$41,
13380
+ Prev: _sfc_main$45,
13381
+ Ellipsis: _sfc_main$40,
13382
+ Next: _sfc_main$44,
13383
+ Last: _sfc_main$43,
13384
+ Status: _sfc_main$47
12293
13385
  };
12294
13386
  //#endregion
12295
13387
  //#region src/components/Popover/PopoverRoot.vue
12296
13388
  const [usePopoverContext, providePopoverContext] = createContext("Popover");
12297
- const _sfc_main$44 = /* @__PURE__ */ defineComponent({
13389
+ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
12298
13390
  name: "PopoverRoot",
12299
13391
  __name: "PopoverRoot",
12300
13392
  props: /* @__PURE__ */ mergeModels({
@@ -12337,7 +13429,7 @@ const _sfc_main$44 = /* @__PURE__ */ defineComponent({
12337
13429
  });
12338
13430
  //#endregion
12339
13431
  //#region src/components/Popover/PopoverActivator.vue
12340
- const _sfc_main$42 = /* @__PURE__ */ defineComponent({
13432
+ const _sfc_main$48 = /* @__PURE__ */ defineComponent({
12341
13433
  name: "PopoverActivator",
12342
13434
  __name: "PopoverActivator",
12343
13435
  props: {
@@ -12374,7 +13466,7 @@ const _sfc_main$42 = /* @__PURE__ */ defineComponent({
12374
13466
  });
12375
13467
  //#endregion
12376
13468
  //#region src/components/Popover/PopoverContent.vue
12377
- const _sfc_main$43 = /* @__PURE__ */ defineComponent({
13469
+ const _sfc_main$49 = /* @__PURE__ */ defineComponent({
12378
13470
  name: "PopoverContent",
12379
13471
  __name: "PopoverContent",
12380
13472
  props: {
@@ -12434,14 +13526,14 @@ const _sfc_main$43 = /* @__PURE__ */ defineComponent({
12434
13526
  * @see https://0.vuetifyjs.com/components/popover
12435
13527
  */
12436
13528
  const Popover = {
12437
- Root: _sfc_main$44,
12438
- Activator: _sfc_main$42,
12439
- Content: _sfc_main$43
13529
+ Root: _sfc_main$50,
13530
+ Activator: _sfc_main$48,
13531
+ Content: _sfc_main$49
12440
13532
  };
12441
13533
  //#endregion
12442
13534
  //#region src/components/Radio/RadioGroup.vue
12443
13535
  const [useRadioGroup, provideRadioGroup] = createContext();
12444
- const _sfc_main$45 = /* @__PURE__ */ defineComponent({
13536
+ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
12445
13537
  name: "RadioGroup",
12446
13538
  __name: "RadioGroup",
12447
13539
  props: /* @__PURE__ */ mergeModels({
@@ -12506,7 +13598,7 @@ const _sfc_main$45 = /* @__PURE__ */ defineComponent({
12506
13598
  //#endregion
12507
13599
  //#region src/components/Radio/RadioRoot.vue
12508
13600
  const [useRadioRoot, provideRadioRoot] = createContext();
12509
- const _sfc_main$48 = /* @__PURE__ */ defineComponent({
13601
+ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
12510
13602
  name: "RadioRoot",
12511
13603
  inheritAttrs: false,
12512
13604
  __name: "RadioRoot",
@@ -12627,7 +13719,7 @@ const _sfc_main$48 = /* @__PURE__ */ defineComponent({
12627
13719
  }), {
12628
13720
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12629
13721
  _: 3
12630
- }, 16, ["as", "renderless"]), unref(name) ? (openBlock(), createBlock(_sfc_main$46, { key: 0 })) : createCommentVNode("v-if", true)], 64);
13722
+ }, 16, ["as", "renderless"]), unref(name) ? (openBlock(), createBlock(_sfc_main$52, { key: 0 })) : createCommentVNode("v-if", true)], 64);
12631
13723
  };
12632
13724
  }
12633
13725
  });
@@ -12651,7 +13743,7 @@ const visuallyHiddenStyle$2 = {
12651
13743
  whiteSpace: "nowrap",
12652
13744
  border: "0"
12653
13745
  };
12654
- const _sfc_main$46 = /* @__PURE__ */ defineComponent({
13746
+ const _sfc_main$52 = /* @__PURE__ */ defineComponent({
12655
13747
  name: "RadioHiddenInput",
12656
13748
  __name: "RadioHiddenInput",
12657
13749
  props: {
@@ -12688,7 +13780,7 @@ const _sfc_main$46 = /* @__PURE__ */ defineComponent({
12688
13780
  });
12689
13781
  //#endregion
12690
13782
  //#region src/components/Radio/RadioIndicator.vue
12691
- const _sfc_main$47 = /* @__PURE__ */ defineComponent({
13783
+ const _sfc_main$53 = /* @__PURE__ */ defineComponent({
12692
13784
  name: "RadioIndicator",
12693
13785
  __name: "RadioIndicator",
12694
13786
  props: {
@@ -12753,14 +13845,14 @@ const _sfc_main$47 = /* @__PURE__ */ defineComponent({
12753
13845
  * ```
12754
13846
  */
12755
13847
  const Radio = {
12756
- Group: _sfc_main$45,
12757
- HiddenInput: _sfc_main$46,
12758
- Indicator: _sfc_main$47,
12759
- Root: _sfc_main$48
13848
+ Group: _sfc_main$51,
13849
+ HiddenInput: _sfc_main$52,
13850
+ Indicator: _sfc_main$53,
13851
+ Root: _sfc_main$54
12760
13852
  };
12761
13853
  //#endregion
12762
13854
  //#region src/components/Scrim/Scrim.vue
12763
- const _sfc_main$49 = /* @__PURE__ */ defineComponent({
13855
+ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
12764
13856
  name: "Scrim",
12765
13857
  inheritAttrs: false,
12766
13858
  __name: "Scrim",
@@ -12854,7 +13946,7 @@ const visuallyHiddenStyle$1 = {
12854
13946
  whiteSpace: "nowrap",
12855
13947
  border: "0"
12856
13948
  };
12857
- const _sfc_main$81 = /* @__PURE__ */ defineComponent({
13949
+ const _sfc_main$92 = /* @__PURE__ */ defineComponent({
12858
13950
  name: "SelectHiddenInput",
12859
13951
  __name: "SelectHiddenInput",
12860
13952
  props: { namespace: { default: "v0:select" } },
@@ -12888,7 +13980,7 @@ const _sfc_main$81 = /* @__PURE__ */ defineComponent({
12888
13980
  //#endregion
12889
13981
  //#region src/components/Select/SelectRoot.vue
12890
13982
  const [useSelectContext, provideSelectContext] = createContext();
12891
- const _sfc_main$55 = /* @__PURE__ */ defineComponent({
13983
+ const _sfc_main$61 = /* @__PURE__ */ defineComponent({
12892
13984
  name: "SelectRoot",
12893
13985
  __name: "SelectRoot",
12894
13986
  props: /* @__PURE__ */ mergeModels({
@@ -12927,10 +14019,7 @@ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
12927
14019
  events: true
12928
14020
  });
12929
14021
  useProxyModel(selection, model, { multiple: __props.multiple });
12930
- const selectedId = toRef(() => {
12931
- const ids = Array.from(selection.selectedIds);
12932
- return ids.length > 0 ? ids[0] : void 0;
12933
- });
14022
+ const selectedId = toRef(() => selection.selectedIds.values().next().value);
12934
14023
  const popover = usePopover({ id });
12935
14024
  const isOpen = popover.isOpen;
12936
14025
  const activatorEl = shallowRef(null);
@@ -13003,13 +14092,13 @@ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
13003
14092
  }, {
13004
14093
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13005
14094
  _: 3
13006
- }, 8, ["as"]), __props.name ? (openBlock(), createBlock(_sfc_main$81, { key: 0 })) : createCommentVNode("v-if", true)], 64);
14095
+ }, 8, ["as"]), __props.name ? (openBlock(), createBlock(_sfc_main$92, { key: 0 })) : createCommentVNode("v-if", true)], 64);
13007
14096
  };
13008
14097
  }
13009
14098
  });
13010
14099
  //#endregion
13011
14100
  //#region src/components/Select/SelectActivator.vue
13012
- const _sfc_main$50 = /* @__PURE__ */ defineComponent({
14101
+ const _sfc_main$56 = /* @__PURE__ */ defineComponent({
13013
14102
  name: "SelectActivator",
13014
14103
  __name: "SelectActivator",
13015
14104
  props: {
@@ -13087,7 +14176,7 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
13087
14176
  });
13088
14177
  //#endregion
13089
14178
  //#region src/components/Select/SelectContent.vue
13090
- const _sfc_main$51 = /* @__PURE__ */ defineComponent({
14179
+ const _sfc_main$57 = /* @__PURE__ */ defineComponent({
13091
14180
  name: "SelectContent",
13092
14181
  __name: "SelectContent",
13093
14182
  props: {
@@ -13124,7 +14213,7 @@ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
13124
14213
  });
13125
14214
  //#endregion
13126
14215
  //#region src/components/Select/SelectCue.vue
13127
- const _sfc_main$52 = /* @__PURE__ */ defineComponent({
14216
+ const _sfc_main$58 = /* @__PURE__ */ defineComponent({
13128
14217
  name: "SelectCue",
13129
14218
  __name: "SelectCue",
13130
14219
  props: {
@@ -13151,7 +14240,7 @@ const _sfc_main$52 = /* @__PURE__ */ defineComponent({
13151
14240
  });
13152
14241
  //#endregion
13153
14242
  //#region src/components/Select/SelectItem.vue
13154
- const _sfc_main$53 = /* @__PURE__ */ defineComponent({
14243
+ const _sfc_main$59 = /* @__PURE__ */ defineComponent({
13155
14244
  name: "SelectItem",
13156
14245
  __name: "SelectItem",
13157
14246
  props: {
@@ -13206,7 +14295,7 @@ const _sfc_main$53 = /* @__PURE__ */ defineComponent({
13206
14295
  });
13207
14296
  //#endregion
13208
14297
  //#region src/components/Select/SelectPlaceholder.vue
13209
- const _sfc_main$54 = /* @__PURE__ */ defineComponent({
14298
+ const _sfc_main$60 = /* @__PURE__ */ defineComponent({
13210
14299
  name: "SelectPlaceholder",
13211
14300
  __name: "SelectPlaceholder",
13212
14301
  props: {
@@ -13230,7 +14319,7 @@ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
13230
14319
  });
13231
14320
  //#endregion
13232
14321
  //#region src/components/Select/SelectValue.vue
13233
- const _sfc_main$56 = /* @__PURE__ */ defineComponent({
14322
+ const _sfc_main$62 = /* @__PURE__ */ defineComponent({
13234
14323
  name: "SelectValue",
13235
14324
  __name: "SelectValue",
13236
14325
  props: {
@@ -13308,18 +14397,18 @@ const _sfc_main$56 = /* @__PURE__ */ defineComponent({
13308
14397
  * ```
13309
14398
  */
13310
14399
  const Select = {
13311
- Root: _sfc_main$55,
13312
- Activator: _sfc_main$50,
13313
- Value: _sfc_main$56,
13314
- Content: _sfc_main$51,
13315
- Cue: _sfc_main$52,
13316
- Item: _sfc_main$53,
13317
- Placeholder: _sfc_main$54
14400
+ Root: _sfc_main$61,
14401
+ Activator: _sfc_main$56,
14402
+ Value: _sfc_main$62,
14403
+ Content: _sfc_main$57,
14404
+ Cue: _sfc_main$58,
14405
+ Item: _sfc_main$59,
14406
+ Placeholder: _sfc_main$60
13318
14407
  };
13319
14408
  //#endregion
13320
14409
  //#region src/components/Selection/SelectionRoot.vue
13321
14410
  const [useSelectionRoot, provideSelectionRoot] = createContext();
13322
- const _sfc_main$58 = /* @__PURE__ */ defineComponent({
14411
+ const _sfc_main$64 = /* @__PURE__ */ defineComponent({
13323
14412
  name: "SelectionRoot",
13324
14413
  __name: "SelectionRoot",
13325
14414
  props: /* @__PURE__ */ mergeModels({
@@ -13371,7 +14460,7 @@ const _sfc_main$58 = /* @__PURE__ */ defineComponent({
13371
14460
  });
13372
14461
  //#endregion
13373
14462
  //#region src/components/Selection/SelectionItem.vue
13374
- const _sfc_main$57 = /* @__PURE__ */ defineComponent({
14463
+ const _sfc_main$63 = /* @__PURE__ */ defineComponent({
13375
14464
  name: "SelectionItem",
13376
14465
  __name: "SelectionItem",
13377
14466
  props: {
@@ -13421,13 +14510,238 @@ const _sfc_main$57 = /* @__PURE__ */ defineComponent({
13421
14510
  * @see https://0.vuetifyjs.com/components/selection
13422
14511
  */
13423
14512
  const Selection = {
13424
- Root: _sfc_main$58,
13425
- Item: _sfc_main$57
14513
+ Root: _sfc_main$64,
14514
+ Item: _sfc_main$63
14515
+ };
14516
+ //#endregion
14517
+ //#region src/components/Snackbar/SnackbarPortal.vue
14518
+ const _sfc_main$74 = /* @__PURE__ */ defineComponent({
14519
+ name: "SnackbarPortal",
14520
+ inheritAttrs: false,
14521
+ __name: "SnackbarPortal",
14522
+ props: {
14523
+ teleport: {
14524
+ type: [String, Boolean],
14525
+ default: "body"
14526
+ },
14527
+ as: { default: "div" },
14528
+ renderless: { type: Boolean }
14529
+ },
14530
+ setup(__props) {
14531
+ const ticket = useStack().register();
14532
+ onUnmounted(() => ticket.unregister());
14533
+ const styles = toRef(() => ({ zIndex: ticket.zIndex.value }));
14534
+ const slotProps = toRef(() => ({ zIndex: ticket.zIndex.value }));
14535
+ return (_ctx, _cache) => {
14536
+ return __props.teleport ? (openBlock(), createBlock(Teleport, {
14537
+ key: 0,
14538
+ to: __props.teleport
14539
+ }, [createVNode(unref(_sfc_main), mergeProps({
14540
+ as: __props.as,
14541
+ style: styles.value
14542
+ }, _ctx.$attrs), {
14543
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14544
+ _: 3
14545
+ }, 16, ["as", "style"])], 8, ["to"])) : (openBlock(), createBlock(unref(_sfc_main), mergeProps({
14546
+ key: 1,
14547
+ as: __props.as,
14548
+ style: styles.value
14549
+ }, _ctx.$attrs), {
14550
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14551
+ _: 3
14552
+ }, 16, ["as", "style"]));
14553
+ };
14554
+ }
14555
+ });
14556
+ //#endregion
14557
+ //#region src/components/Snackbar/SnackbarQueue.vue
14558
+ const [useSnackbarQueueContext, provideSnackbarQueueContext] = createContext({ suffix: "queue" });
14559
+ const _sfc_main$75 = /* @__PURE__ */ defineComponent({
14560
+ name: "SnackbarQueue",
14561
+ __name: "SnackbarQueue",
14562
+ props: {
14563
+ namespace: { default: "v0:notifications" },
14564
+ as: { default: "div" },
14565
+ renderless: { type: Boolean }
14566
+ },
14567
+ setup(__props) {
14568
+ const notifications = useNotifications(__props.namespace);
14569
+ function dismiss(id) {
14570
+ notifications.unregister(id);
14571
+ if (reasons.size > 0) notifications.queue.pause();
14572
+ }
14573
+ provideSnackbarQueueContext(__props.namespace, { dismiss });
14574
+ const items = computed(() => notifications.queue.values().map((q) => notifications.get(q.id)).filter((n) => !/* @__PURE__ */ isUndefined(n)).toReversed());
14575
+ const container = useTemplateRef("container");
14576
+ const reasons = /* @__PURE__ */ new Set();
14577
+ function pause(reason) {
14578
+ reasons.add(reason);
14579
+ notifications.queue.pause();
14580
+ }
14581
+ function resume(reason) {
14582
+ reasons.delete(reason);
14583
+ if (reasons.size === 0) notifications.queue.resume();
14584
+ }
14585
+ function onEnter() {
14586
+ pause("hover");
14587
+ }
14588
+ function onLeave() {
14589
+ resume("hover");
14590
+ }
14591
+ function onFocusin() {
14592
+ pause("focus");
14593
+ }
14594
+ function onFocusout(e) {
14595
+ const el = container.value?.element ?? null;
14596
+ if (/* @__PURE__ */ isElement(el) && /* @__PURE__ */ isElement(e.relatedTarget) && el.contains(e.relatedTarget)) return;
14597
+ resume("focus");
14598
+ }
14599
+ onUnmounted(() => {
14600
+ if (reasons.size > 0) {
14601
+ reasons.clear();
14602
+ notifications.queue.resume();
14603
+ }
14604
+ });
14605
+ const slotProps = toRef(() => ({
14606
+ items: items.value,
14607
+ attrs: {
14608
+ onMouseenter: onEnter,
14609
+ onMouseleave: onLeave,
14610
+ onFocusin,
14611
+ onFocusout
14612
+ }
14613
+ }));
14614
+ return (_ctx, _cache) => {
14615
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
14616
+ ref_key: "container",
14617
+ ref: container
14618
+ }, slotProps.value.attrs, { as: __props.as }), {
14619
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14620
+ _: 3
14621
+ }, 16, ["as"]);
14622
+ };
14623
+ }
14624
+ });
14625
+ //#endregion
14626
+ //#region src/components/Snackbar/SnackbarRoot.vue
14627
+ const [useSnackbarRootContext, provideSnackbarRootContext] = createContext({ suffix: "root" });
14628
+ const _sfc_main$76 = /* @__PURE__ */ defineComponent({
14629
+ name: "SnackbarRoot",
14630
+ __name: "SnackbarRoot",
14631
+ props: {
14632
+ namespace: { default: "v0:notifications" },
14633
+ id: { default: () => /* @__PURE__ */ useId() },
14634
+ as: { default: "div" },
14635
+ renderless: { type: Boolean }
14636
+ },
14637
+ emits: ["dismiss"],
14638
+ setup(__props, { emit: __emit }) {
14639
+ const emit = __emit;
14640
+ const queue = useSnackbarQueueContext(__props.namespace, null);
14641
+ function onDismiss() {
14642
+ if (queue) queue.dismiss(__props.id);
14643
+ else emit("dismiss", __props.id);
14644
+ }
14645
+ provideSnackbarRootContext(__props.namespace, {
14646
+ id: __props.id,
14647
+ onDismiss
14648
+ });
14649
+ const slotProps = toRef(() => ({
14650
+ id: __props.id,
14651
+ attrs: { role: "status" }
14652
+ }));
14653
+ return (_ctx, _cache) => {
14654
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, { as: __props.as }), {
14655
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14656
+ _: 3
14657
+ }, 16, ["as"]);
14658
+ };
14659
+ }
14660
+ });
14661
+ //#endregion
14662
+ //#region src/components/Snackbar/SnackbarContent.vue
14663
+ const _sfc_main$73 = /* @__PURE__ */ defineComponent({
14664
+ name: "SnackbarContent",
14665
+ __name: "SnackbarContent",
14666
+ props: {
14667
+ as: { default: "div" },
14668
+ renderless: { type: Boolean }
14669
+ },
14670
+ setup(__props) {
14671
+ return (_ctx, _cache) => {
14672
+ return openBlock(), createBlock(unref(_sfc_main), { as: __props.as }, {
14673
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
14674
+ _: 3
14675
+ }, 8, ["as"]);
14676
+ };
14677
+ }
14678
+ });
14679
+ //#endregion
14680
+ //#region src/components/Snackbar/SnackbarClose.vue
14681
+ const _sfc_main$72 = /* @__PURE__ */ defineComponent({
14682
+ name: "SnackbarClose",
14683
+ __name: "SnackbarClose",
14684
+ props: {
14685
+ namespace: { default: "v0:notifications" },
14686
+ as: { default: "button" },
14687
+ renderless: { type: Boolean }
14688
+ },
14689
+ setup(__props) {
14690
+ const context = useSnackbarRootContext(__props.namespace);
14691
+ function onClick() {
14692
+ context.onDismiss();
14693
+ }
14694
+ const slotProps = toRef(() => ({ attrs: {
14695
+ "type": __props.as === "button" ? "button" : void 0,
14696
+ "aria-label": "Close",
14697
+ "onClick": onClick
14698
+ } }));
14699
+ return (_ctx, _cache) => {
14700
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, { as: __props.as }), {
14701
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14702
+ _: 3
14703
+ }, 16, ["as"]);
14704
+ };
14705
+ }
14706
+ });
14707
+ //#endregion
14708
+ //#region src/components/Snackbar/index.ts
14709
+ /**
14710
+ * Snackbar component with sub-components for building toast notifications.
14711
+ *
14712
+ * @see https://0.vuetifyjs.com/components/snackbar
14713
+ *
14714
+ * @example
14715
+ * ```vue
14716
+ * <script setup lang="ts">
14717
+ * import { Snackbar } from '@vuetify/v0'
14718
+ * <\/script>
14719
+ *
14720
+ * <template>
14721
+ * <Snackbar.Portal>
14722
+ * <Snackbar.Queue v-slot="{ items }">
14723
+ * <template v-for="item in items" :key="item.id">
14724
+ * <Snackbar.Root :id="item.id">
14725
+ * <Snackbar.Content>{{ item.subject }}</Snackbar.Content>
14726
+ * <Snackbar.Close />
14727
+ * </Snackbar.Root>
14728
+ * </template>
14729
+ * </Snackbar.Queue>
14730
+ * </Snackbar.Portal>
14731
+ * </template>
14732
+ * ```
14733
+ */
14734
+ const Snackbar = {
14735
+ Portal: _sfc_main$74,
14736
+ Queue: _sfc_main$75,
14737
+ Root: _sfc_main$76,
14738
+ Content: _sfc_main$73,
14739
+ Close: _sfc_main$72
13426
14740
  };
13427
14741
  //#endregion
13428
14742
  //#region src/components/Slider/SliderRoot.vue
13429
14743
  const [useSliderRoot, provideSliderRoot] = createContext();
13430
- const _sfc_main$63 = /* @__PURE__ */ defineComponent({
14744
+ const _sfc_main$69 = /* @__PURE__ */ defineComponent({
13431
14745
  name: "SliderRoot",
13432
14746
  inheritAttrs: false,
13433
14747
  __name: "SliderRoot",
@@ -13559,7 +14873,7 @@ const _sfc_main$63 = /* @__PURE__ */ defineComponent({
13559
14873
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13560
14874
  _: 3
13561
14875
  }, 16, ["as", "renderless"]), __props.name ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(slider).values.value, (_, index) => {
13562
- return openBlock(), createBlock(_sfc_main$61, {
14876
+ return openBlock(), createBlock(_sfc_main$67, {
13563
14877
  key: index,
13564
14878
  index
13565
14879
  }, null, 8, ["index"]);
@@ -13575,7 +14889,7 @@ const _hoisted_1$1 = [
13575
14889
  "name",
13576
14890
  "value"
13577
14891
  ];
13578
- const _sfc_main$61 = /* @__PURE__ */ defineComponent({
14892
+ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
13579
14893
  name: "SliderHiddenInput",
13580
14894
  __name: "SliderHiddenInput",
13581
14895
  props: {
@@ -13600,7 +14914,7 @@ const _sfc_main$61 = /* @__PURE__ */ defineComponent({
13600
14914
  });
13601
14915
  //#endregion
13602
14916
  //#region src/components/Slider/SliderRange.vue
13603
- const _sfc_main$62 = /* @__PURE__ */ defineComponent({
14917
+ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
13604
14918
  name: "SliderRange",
13605
14919
  inheritAttrs: false,
13606
14920
  __name: "SliderRange",
@@ -13661,7 +14975,7 @@ const _sfc_main$62 = /* @__PURE__ */ defineComponent({
13661
14975
  });
13662
14976
  //#endregion
13663
14977
  //#region src/components/Slider/SliderThumb.vue
13664
- const _sfc_main$64 = /* @__PURE__ */ defineComponent({
14978
+ const _sfc_main$70 = /* @__PURE__ */ defineComponent({
13665
14979
  name: "SliderThumb",
13666
14980
  inheritAttrs: false,
13667
14981
  __name: "SliderThumb",
@@ -13775,7 +15089,7 @@ const _sfc_main$64 = /* @__PURE__ */ defineComponent({
13775
15089
  });
13776
15090
  //#endregion
13777
15091
  //#region src/components/Slider/SliderTrack.vue
13778
- const _sfc_main$65 = /* @__PURE__ */ defineComponent({
15092
+ const _sfc_main$71 = /* @__PURE__ */ defineComponent({
13779
15093
  name: "SliderTrack",
13780
15094
  inheritAttrs: false,
13781
15095
  __name: "SliderTrack",
@@ -13869,16 +15183,16 @@ const _sfc_main$65 = /* @__PURE__ */ defineComponent({
13869
15183
  * ```
13870
15184
  */
13871
15185
  const Slider = {
13872
- Root: _sfc_main$63,
13873
- Track: _sfc_main$65,
13874
- Range: _sfc_main$62,
13875
- Thumb: _sfc_main$64,
13876
- HiddenInput: _sfc_main$61
15186
+ Root: _sfc_main$69,
15187
+ Track: _sfc_main$71,
15188
+ Range: _sfc_main$68,
15189
+ Thumb: _sfc_main$70,
15190
+ HiddenInput: _sfc_main$67
13877
15191
  };
13878
15192
  //#endregion
13879
15193
  //#region src/components/Splitter/SplitterRoot.vue
13880
15194
  const [useSplitterRoot, provideSplitterRoot] = createContext("v0:splitter");
13881
- const _sfc_main$68 = /* @__PURE__ */ defineComponent({
15195
+ const _sfc_main$79 = /* @__PURE__ */ defineComponent({
13882
15196
  name: "SplitterRoot",
13883
15197
  inheritAttrs: false,
13884
15198
  __name: "SplitterRoot",
@@ -14043,10 +15357,14 @@ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
14043
15357
  }, {
14044
15358
  as: __props.as,
14045
15359
  renderless: __props.renderless,
14046
- style: {
14047
- display: "flex",
14048
- flexDirection: __props.orientation === "horizontal" ? "row" : "column"
14049
- }
15360
+ style: [
15361
+ unref(attrs).style,
15362
+ slotProps.value.attrs.style,
15363
+ {
15364
+ display: "flex",
15365
+ flexDirection: __props.orientation === "horizontal" ? "row" : "column"
15366
+ }
15367
+ ]
14050
15368
  }), {
14051
15369
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14052
15370
  _: 3
@@ -14060,7 +15378,7 @@ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
14060
15378
  });
14061
15379
  //#endregion
14062
15380
  //#region src/components/Splitter/SplitterPanel.vue
14063
- const _sfc_main$67 = /* @__PURE__ */ defineComponent({
15381
+ const _sfc_main$78 = /* @__PURE__ */ defineComponent({
14064
15382
  name: "SplitterPanel",
14065
15383
  inheritAttrs: false,
14066
15384
  __name: "SplitterPanel",
@@ -14154,12 +15472,16 @@ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
14154
15472
  }, {
14155
15473
  as: __props.as,
14156
15474
  renderless: __props.renderless,
14157
- style: {
14158
- flexGrow: 0,
14159
- flexShrink: 0,
14160
- flexBasis: `${size.value}%`,
14161
- overflow: "hidden"
14162
- }
15475
+ style: [
15476
+ unref(attrs).style,
15477
+ slotProps.value.attrs.style,
15478
+ {
15479
+ flexGrow: 0,
15480
+ flexShrink: 0,
15481
+ flexBasis: `${size.value}%`,
15482
+ overflow: "hidden"
15483
+ }
15484
+ ]
14163
15485
  }), {
14164
15486
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14165
15487
  _: 3
@@ -14173,7 +15495,7 @@ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
14173
15495
  });
14174
15496
  //#endregion
14175
15497
  //#region src/components/Splitter/SplitterHandle.vue
14176
- const _sfc_main$66 = /* @__PURE__ */ defineComponent({
15498
+ const _sfc_main$77 = /* @__PURE__ */ defineComponent({
14177
15499
  name: "SplitterHandle",
14178
15500
  inheritAttrs: false,
14179
15501
  __name: "SplitterHandle",
@@ -14197,7 +15519,6 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
14197
15519
  });
14198
15520
  const hovering = shallowRef(false);
14199
15521
  const startPosition = shallowRef(0);
14200
- let rafId = 0;
14201
15522
  let latestPos = 0;
14202
15523
  const isDisabled = toRef(() => __props.disabled || splitter.disabled.value);
14203
15524
  const isHorizontal = toRef(() => splitter.orientation.value === "horizontal");
@@ -14230,23 +15551,21 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
14230
15551
  splitter.onStartDrag(ticket.index);
14231
15552
  }
14232
15553
  useToggleScope(() => splitter.draggingHandle.value === ticket.index, () => {
15554
+ const update = useRaf(() => {
15555
+ const root = splitter.rootEl.value;
15556
+ if (!root) return;
15557
+ const rootSize = isHorizontal.value ? root.offsetWidth : root.offsetHeight;
15558
+ if (!rootSize) return;
15559
+ const delta = (latestPos - startPosition.value) / rootSize * 100;
15560
+ startPosition.value = latestPos;
15561
+ splitter.resize(ticket.index, delta);
15562
+ });
14233
15563
  useDocumentEventListener("pointermove", (e) => {
14234
15564
  latestPos = isHorizontal.value ? e.clientX : e.clientY;
14235
- if (rafId) return;
14236
- rafId = requestAnimationFrame(() => {
14237
- const root = splitter.rootEl.value;
14238
- if (!root) return;
14239
- const rootSize = isHorizontal.value ? root.offsetWidth : root.offsetHeight;
14240
- if (!rootSize) return;
14241
- const delta = (latestPos - startPosition.value) / rootSize * 100;
14242
- startPosition.value = latestPos;
14243
- splitter.resize(ticket.index, delta);
14244
- rafId = 0;
14245
- });
15565
+ update();
14246
15566
  });
14247
15567
  useDocumentEventListener("pointerup", () => {
14248
- if (rafId) cancelAnimationFrame(rafId);
14249
- rafId = 0;
15568
+ update.cancel();
14250
15569
  if (IN_BROWSER) {
14251
15570
  document.documentElement.style.userSelect = "";
14252
15571
  document.documentElement.style.touchAction = "";
@@ -14254,8 +15573,6 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
14254
15573
  splitter.onEndDrag();
14255
15574
  });
14256
15575
  onScopeDispose(() => {
14257
- if (rafId) cancelAnimationFrame(rafId);
14258
- rafId = 0;
14259
15576
  splitter.onEndDrag();
14260
15577
  if (IN_BROWSER) {
14261
15578
  document.documentElement.style.userSelect = "";
@@ -14356,11 +15673,19 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
14356
15673
  }, {
14357
15674
  as: __props.as,
14358
15675
  renderless: __props.renderless,
14359
- style: { flexShrink: 0 }
15676
+ style: [
15677
+ unref(attrs).style,
15678
+ slotProps.value.attrs.style,
15679
+ { flexShrink: 0 }
15680
+ ]
14360
15681
  }), {
14361
15682
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14362
15683
  _: 3
14363
- }, 16, ["as", "renderless"]);
15684
+ }, 16, [
15685
+ "as",
15686
+ "renderless",
15687
+ "style"
15688
+ ]);
14364
15689
  };
14365
15690
  }
14366
15691
  });
@@ -14393,14 +15718,14 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
14393
15718
  * ```
14394
15719
  */
14395
15720
  const Splitter = {
14396
- Root: _sfc_main$68,
14397
- Panel: _sfc_main$67,
14398
- Handle: _sfc_main$66
15721
+ Root: _sfc_main$79,
15722
+ Panel: _sfc_main$78,
15723
+ Handle: _sfc_main$77
14399
15724
  };
14400
15725
  //#endregion
14401
15726
  //#region src/components/Switch/SwitchGroup.vue
14402
15727
  const [useSwitchGroup, provideSwitchGroup] = createContext();
14403
- const _sfc_main$71 = /* @__PURE__ */ defineComponent({
15728
+ const _sfc_main$82 = /* @__PURE__ */ defineComponent({
14404
15729
  name: "SwitchGroup",
14405
15730
  __name: "SwitchGroup",
14406
15731
  props: /* @__PURE__ */ mergeModels({
@@ -14469,7 +15794,7 @@ const _sfc_main$71 = /* @__PURE__ */ defineComponent({
14469
15794
  //#endregion
14470
15795
  //#region src/components/Switch/SwitchRoot.vue
14471
15796
  const [useSwitchRoot, provideSwitchRoot] = createContext();
14472
- const _sfc_main$73 = /* @__PURE__ */ defineComponent({
15797
+ const _sfc_main$84 = /* @__PURE__ */ defineComponent({
14473
15798
  name: "SwitchRoot",
14474
15799
  inheritAttrs: false,
14475
15800
  __name: "SwitchRoot",
@@ -14599,7 +15924,7 @@ const _sfc_main$73 = /* @__PURE__ */ defineComponent({
14599
15924
  }), {
14600
15925
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
14601
15926
  _: 3
14602
- }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$72, { key: 0 })) : createCommentVNode("v-if", true)], 64);
15927
+ }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$83, { key: 0 })) : createCommentVNode("v-if", true)], 64);
14603
15928
  };
14604
15929
  }
14605
15930
  });
@@ -14623,7 +15948,7 @@ const visuallyHiddenStyle = {
14623
15948
  whiteSpace: "nowrap",
14624
15949
  border: "0"
14625
15950
  };
14626
- const _sfc_main$72 = /* @__PURE__ */ defineComponent({
15951
+ const _sfc_main$83 = /* @__PURE__ */ defineComponent({
14627
15952
  name: "SwitchHiddenInput",
14628
15953
  __name: "SwitchHiddenInput",
14629
15954
  props: {
@@ -14661,7 +15986,7 @@ const _sfc_main$72 = /* @__PURE__ */ defineComponent({
14661
15986
  });
14662
15987
  //#endregion
14663
15988
  //#region src/components/Switch/SwitchSelectAll.vue
14664
- const _sfc_main$74 = /* @__PURE__ */ defineComponent({
15989
+ const _sfc_main$85 = /* @__PURE__ */ defineComponent({
14665
15990
  name: "SwitchSelectAll",
14666
15991
  inheritAttrs: false,
14667
15992
  __name: "SwitchSelectAll",
@@ -14749,7 +16074,7 @@ const _sfc_main$74 = /* @__PURE__ */ defineComponent({
14749
16074
  });
14750
16075
  //#endregion
14751
16076
  //#region src/components/Switch/SwitchThumb.vue
14752
- const _sfc_main$75 = /* @__PURE__ */ defineComponent({
16077
+ const _sfc_main$86 = /* @__PURE__ */ defineComponent({
14753
16078
  name: "SwitchThumb",
14754
16079
  __name: "SwitchThumb",
14755
16080
  props: {
@@ -14784,7 +16109,7 @@ const _sfc_main$75 = /* @__PURE__ */ defineComponent({
14784
16109
  });
14785
16110
  //#endregion
14786
16111
  //#region src/components/Switch/SwitchTrack.vue
14787
- const _sfc_main$76 = /* @__PURE__ */ defineComponent({
16112
+ const _sfc_main$87 = /* @__PURE__ */ defineComponent({
14788
16113
  name: "SwitchTrack",
14789
16114
  __name: "SwitchTrack",
14790
16115
  props: {
@@ -14843,17 +16168,17 @@ const _sfc_main$76 = /* @__PURE__ */ defineComponent({
14843
16168
  * ```
14844
16169
  */
14845
16170
  const Switch = {
14846
- Group: _sfc_main$71,
14847
- HiddenInput: _sfc_main$72,
14848
- Root: _sfc_main$73,
14849
- SelectAll: _sfc_main$74,
14850
- Thumb: _sfc_main$75,
14851
- Track: _sfc_main$76
16171
+ Group: _sfc_main$82,
16172
+ HiddenInput: _sfc_main$83,
16173
+ Root: _sfc_main$84,
16174
+ SelectAll: _sfc_main$85,
16175
+ Thumb: _sfc_main$86,
16176
+ Track: _sfc_main$87
14852
16177
  };
14853
16178
  //#endregion
14854
16179
  //#region src/components/Single/SingleRoot.vue
14855
16180
  const [useSingleRoot, provideSingleRoot] = createContext();
14856
- const _sfc_main$60 = /* @__PURE__ */ defineComponent({
16181
+ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
14857
16182
  name: "SingleRoot",
14858
16183
  __name: "SingleRoot",
14859
16184
  props: /* @__PURE__ */ mergeModels({
@@ -14899,7 +16224,7 @@ const _sfc_main$60 = /* @__PURE__ */ defineComponent({
14899
16224
  });
14900
16225
  //#endregion
14901
16226
  //#region src/components/Single/SingleItem.vue
14902
- const _sfc_main$59 = /* @__PURE__ */ defineComponent({
16227
+ const _sfc_main$65 = /* @__PURE__ */ defineComponent({
14903
16228
  name: "SingleItem",
14904
16229
  __name: "SingleItem",
14905
16230
  props: {
@@ -14949,13 +16274,13 @@ const _sfc_main$59 = /* @__PURE__ */ defineComponent({
14949
16274
  * @see https://0.vuetifyjs.com/components/single
14950
16275
  */
14951
16276
  const Single = {
14952
- Root: _sfc_main$60,
14953
- Item: _sfc_main$59
16277
+ Root: _sfc_main$66,
16278
+ Item: _sfc_main$65
14954
16279
  };
14955
16280
  //#endregion
14956
16281
  //#region src/components/Step/StepRoot.vue
14957
16282
  const [useStepRoot, provideStepRoot] = createContext();
14958
- const _sfc_main$70 = /* @__PURE__ */ defineComponent({
16283
+ const _sfc_main$81 = /* @__PURE__ */ defineComponent({
14959
16284
  name: "StepRoot",
14960
16285
  __name: "StepRoot",
14961
16286
  props: /* @__PURE__ */ mergeModels({
@@ -15006,7 +16331,7 @@ const _sfc_main$70 = /* @__PURE__ */ defineComponent({
15006
16331
  });
15007
16332
  //#endregion
15008
16333
  //#region src/components/Step/StepItem.vue
15009
- const _sfc_main$69 = /* @__PURE__ */ defineComponent({
16334
+ const _sfc_main$80 = /* @__PURE__ */ defineComponent({
15010
16335
  name: "StepItem",
15011
16336
  __name: "StepItem",
15012
16337
  props: {
@@ -15056,13 +16381,13 @@ const _sfc_main$69 = /* @__PURE__ */ defineComponent({
15056
16381
  * @see https://0.vuetifyjs.com/components/step
15057
16382
  */
15058
16383
  const Step = {
15059
- Root: _sfc_main$70,
15060
- Item: _sfc_main$69
16384
+ Root: _sfc_main$81,
16385
+ Item: _sfc_main$80
15061
16386
  };
15062
16387
  //#endregion
15063
16388
  //#region src/components/Tabs/TabsRoot.vue
15064
16389
  const [useTabsRoot, provideTabsRoot] = createContext();
15065
- const _sfc_main$80 = /* @__PURE__ */ defineComponent({
16390
+ const _sfc_main$91 = /* @__PURE__ */ defineComponent({
15066
16391
  name: "TabsRoot",
15067
16392
  __name: "TabsRoot",
15068
16393
  props: /* @__PURE__ */ mergeModels({
@@ -15130,7 +16455,7 @@ const _sfc_main$80 = /* @__PURE__ */ defineComponent({
15130
16455
  });
15131
16456
  //#endregion
15132
16457
  //#region src/components/Tabs/TabsList.vue
15133
- const _sfc_main$78 = /* @__PURE__ */ defineComponent({
16458
+ const _sfc_main$89 = /* @__PURE__ */ defineComponent({
15134
16459
  name: "TabsList",
15135
16460
  inheritAttrs: false,
15136
16461
  __name: "TabsList",
@@ -15171,7 +16496,7 @@ const _sfc_main$78 = /* @__PURE__ */ defineComponent({
15171
16496
  });
15172
16497
  //#endregion
15173
16498
  //#region src/components/Tabs/TabsItem.vue
15174
- const _sfc_main$77 = /* @__PURE__ */ defineComponent({
16499
+ const _sfc_main$88 = /* @__PURE__ */ defineComponent({
15175
16500
  name: "TabsItem",
15176
16501
  inheritAttrs: false,
15177
16502
  __name: "TabsItem",
@@ -15286,7 +16611,7 @@ const _sfc_main$77 = /* @__PURE__ */ defineComponent({
15286
16611
  });
15287
16612
  //#endregion
15288
16613
  //#region src/components/Tabs/TabsPanel.vue
15289
- const _sfc_main$79 = /* @__PURE__ */ defineComponent({
16614
+ const _sfc_main$90 = /* @__PURE__ */ defineComponent({
15290
16615
  name: "TabsPanel",
15291
16616
  inheritAttrs: false,
15292
16617
  __name: "TabsPanel",
@@ -15367,10 +16692,10 @@ const _sfc_main$79 = /* @__PURE__ */ defineComponent({
15367
16692
  * ```
15368
16693
  */
15369
16694
  const Tabs = {
15370
- Root: _sfc_main$80,
15371
- List: _sfc_main$78,
15372
- Item: _sfc_main$77,
15373
- Panel: _sfc_main$79
16695
+ Root: _sfc_main$91,
16696
+ List: _sfc_main$89,
16697
+ Item: _sfc_main$88,
16698
+ Panel: _sfc_main$90
15374
16699
  };
15375
16700
  //#endregion
15376
- export { _sfc_main as Atom, Avatar, _sfc_main$1 as AvatarFallback, _sfc_main$2 as AvatarImage, _sfc_main$3 as AvatarRoot, Breadcrumbs, _sfc_main$4 as BreadcrumbsDivider, _sfc_main$5 as BreadcrumbsEllipsis, _sfc_main$6 as BreadcrumbsItem, _sfc_main$7 as BreadcrumbsLink, _sfc_main$8 as BreadcrumbsList, _sfc_main$9 as BreadcrumbsPage, _sfc_main$10 as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, _sfc_main$11 as CheckboxGroup, _sfc_main$12 as CheckboxHiddenInput, _sfc_main$13 as CheckboxIndicator, _sfc_main$14 as CheckboxRoot, _sfc_main$15 as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$16 as DialogActivator, _sfc_main$17 as DialogClose, _sfc_main$18 as DialogContent, _sfc_main$19 as DialogDescription, _sfc_main$20 as DialogRoot, _sfc_main$21 as DialogTitle, ExpansionPanel, _sfc_main$22 as ExpansionPanelActivator, _sfc_main$23 as ExpansionPanelContent, _sfc_main$24 as ExpansionPanelHeader, _sfc_main$25 as ExpansionPanelItem, _sfc_main$26 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$27 as Form, Group, _sfc_main$28 as GroupItem, _sfc_main$29 as GroupRoot, IN_BROWSER, Input, _sfc_main$30 as InputControl, _sfc_main$31 as InputDescription, _sfc_main$32 as InputError, _sfc_main$33 as InputRoot, MemoryAdapter, Pagination, _sfc_main$34 as PaginationEllipsis, _sfc_main$35 as PaginationFirst, _sfc_main$36 as PaginationItem, _sfc_main$37 as PaginationLast, _sfc_main$38 as PaginationNext, _sfc_main$39 as PaginationPrev, _sfc_main$40 as PaginationRoot, _sfc_main$41 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$42 as PopoverActivator, _sfc_main$43 as PopoverContent, _sfc_main$44 as PopoverRoot, Radio, _sfc_main$45 as RadioGroup, _sfc_main$46 as RadioHiddenInput, _sfc_main$47 as RadioIndicator, _sfc_main$48 as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$49 as Scrim, Select, _sfc_main$50 as SelectActivator, _sfc_main$51 as SelectContent, _sfc_main$52 as SelectCue, _sfc_main$53 as SelectItem, _sfc_main$54 as SelectPlaceholder, _sfc_main$55 as SelectRoot, _sfc_main$56 as SelectValue, Selection, _sfc_main$57 as SelectionItem, _sfc_main$58 as SelectionRoot, ServerAdapter, Single, _sfc_main$59 as SingleItem, _sfc_main$60 as SingleRoot, Slider, _sfc_main$61 as SliderHiddenInput, _sfc_main$62 as SliderRange, _sfc_main$63 as SliderRoot, _sfc_main$64 as SliderThumb, _sfc_main$65 as SliderTrack, Splitter, _sfc_main$66 as SplitterHandle, _sfc_main$67 as SplitterPanel, _sfc_main$68 as SplitterRoot, Step, _sfc_main$69 as StepItem, _sfc_main$70 as StepRoot, Switch, _sfc_main$71 as SwitchGroup, _sfc_main$72 as SwitchHiddenInput, _sfc_main$73 as SwitchRoot, _sfc_main$74 as SwitchSelectAll, _sfc_main$75 as SwitchThumb, _sfc_main$76 as SwitchTrack, Tabs, _sfc_main$77 as TabsItem, _sfc_main$78 as TabsList, _sfc_main$79 as TabsPanel, _sfc_main$80 as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0RtlAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, createRegistry, createRegistryContext, createRtl, createRtlContext, createRtlFallback, createRtlPlugin, createRules, createRulesContext, createRulesFallback, createRulesPlugin, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createValidation, createVirtual, createVirtualContext, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, provideInputRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideRadioGroup, provideRadioRoot, provideSelectContext, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, range, singleOpenStrategy, toArray, toElement, toReactive, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useCheckboxGroup, useCheckboxRoot, useClickOutside, useContext, useDataTable, useDate, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useInputRoot, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopover, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRegistry, useResizeObserver, useRovingFocus, useRtl, useRules, useSelectContext, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useVirtualFocus, useWindowEventListener, version };
16701
+ export { _sfc_main as Atom, Avatar, _sfc_main$1 as AvatarFallback, _sfc_main$2 as AvatarImage, _sfc_main$3 as AvatarRoot, Breadcrumbs, _sfc_main$4 as BreadcrumbsDivider, _sfc_main$5 as BreadcrumbsEllipsis, _sfc_main$6 as BreadcrumbsItem, _sfc_main$7 as BreadcrumbsLink, _sfc_main$8 as BreadcrumbsList, _sfc_main$9 as BreadcrumbsPage, _sfc_main$10 as BreadcrumbsRoot, Button, _sfc_main$11 as ButtonContent, _sfc_main$12 as ButtonGroup, _sfc_main$13 as ButtonHiddenInput, _sfc_main$14 as ButtonIcon, _sfc_main$15 as ButtonLoading, _sfc_main$16 as ButtonRoot, COMMON_ELEMENTS, Checkbox, _sfc_main$17 as CheckboxGroup, _sfc_main$18 as CheckboxHiddenInput, _sfc_main$19 as CheckboxIndicator, _sfc_main$20 as CheckboxRoot, _sfc_main$21 as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$22 as DialogActivator, _sfc_main$23 as DialogClose, _sfc_main$24 as DialogContent, _sfc_main$25 as DialogDescription, _sfc_main$26 as DialogRoot, _sfc_main$27 as DialogTitle, ExpansionPanel, _sfc_main$28 as ExpansionPanelActivator, _sfc_main$29 as ExpansionPanelContent, _sfc_main$30 as ExpansionPanelHeader, _sfc_main$31 as ExpansionPanelItem, _sfc_main$32 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$33 as Form, Group, _sfc_main$34 as GroupItem, _sfc_main$35 as GroupRoot, IN_BROWSER, Input, _sfc_main$36 as InputControl, _sfc_main$37 as InputDescription, _sfc_main$38 as InputError, _sfc_main$39 as InputRoot, MemoryAdapter, Pagination, _sfc_main$40 as PaginationEllipsis, _sfc_main$41 as PaginationFirst, _sfc_main$42 as PaginationItem, _sfc_main$43 as PaginationLast, _sfc_main$44 as PaginationNext, _sfc_main$45 as PaginationPrev, _sfc_main$46 as PaginationRoot, _sfc_main$47 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$48 as PopoverActivator, _sfc_main$49 as PopoverContent, _sfc_main$50 as PopoverRoot, Radio, _sfc_main$51 as RadioGroup, _sfc_main$52 as RadioHiddenInput, _sfc_main$53 as RadioIndicator, _sfc_main$54 as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$55 as Scrim, Select, _sfc_main$56 as SelectActivator, _sfc_main$57 as SelectContent, _sfc_main$58 as SelectCue, _sfc_main$59 as SelectItem, _sfc_main$60 as SelectPlaceholder, _sfc_main$61 as SelectRoot, _sfc_main$62 as SelectValue, Selection, _sfc_main$63 as SelectionItem, _sfc_main$64 as SelectionRoot, ServerAdapter, Single, _sfc_main$65 as SingleItem, _sfc_main$66 as SingleRoot, Slider, _sfc_main$67 as SliderHiddenInput, _sfc_main$68 as SliderRange, _sfc_main$69 as SliderRoot, _sfc_main$70 as SliderThumb, _sfc_main$71 as SliderTrack, Snackbar, _sfc_main$72 as SnackbarClose, _sfc_main$73 as SnackbarContent, _sfc_main$74 as SnackbarPortal, _sfc_main$75 as SnackbarQueue, _sfc_main$76 as SnackbarRoot, Splitter, _sfc_main$77 as SplitterHandle, _sfc_main$78 as SplitterPanel, _sfc_main$79 as SplitterRoot, Step, _sfc_main$80 as StepItem, _sfc_main$81 as StepRoot, Switch, _sfc_main$82 as SwitchGroup, _sfc_main$83 as SwitchHiddenInput, _sfc_main$84 as SwitchRoot, _sfc_main$85 as SwitchSelectAll, _sfc_main$86 as SwitchThumb, _sfc_main$87 as SwitchTrack, Tabs, _sfc_main$88 as TabsItem, _sfc_main$89 as TabsList, _sfc_main$90 as TabsPanel, _sfc_main$91 as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0RtlAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createNotifications, createNotificationsContext, createNotificationsPlugin, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, createRegistry, createRegistryContext, createRtl, createRtlContext, createRtlFallback, createRtlPlugin, createRules, createRulesContext, createRulesFallback, createRulesPlugin, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createValidation, createVirtual, createVirtualContext, flatten, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideButtonGroup, provideButtonRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, provideInputRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideRadioGroup, provideRadioRoot, provideSelectContext, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSnackbarQueueContext, provideSnackbarRootContext, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, range, singleOpenStrategy, toArray, toElement, toReactive, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useButtonGroup, useButtonRoot, useCheckboxGroup, useCheckboxRoot, useClickOutside, useContext, useDataTable, useDate, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useInputRoot, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useNotifications, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopover, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRaf, useRegistry, useResizeObserver, useRovingFocus, useRtl, useRules, useSelectContext, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSnackbarQueueContext, useSnackbarRootContext, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useTimer, useToggleScope, useTokens, useVirtual, useVirtualFocus, useWindowEventListener, version };