@vuetify/v0 1.0.0-rc.7 → 1.0.0-rc.9

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 (89) hide show
  1. package/README.md +2 -2
  2. package/dist/{adapter-CMdKyFLz.d.mts → adapter-CVNRHfrz.d.mts} +1 -1
  3. package/dist/browser/index.d.ts +73 -36
  4. package/dist/browser/index.js +254 -122
  5. package/dist/components/index.d.mts +1 -1
  6. package/dist/components/index.mjs +1 -1
  7. package/dist/{components-D87gpuRI.mjs → components-BVbls2Zu.mjs} +64 -31
  8. package/dist/composables/index.d.mts +6 -6
  9. package/dist/composables/index.mjs +21 -21
  10. package/dist/{composables-DAc4DbYb.mjs → composables-BT7flkAT.mjs} +18 -12
  11. package/dist/constants/index.mjs +1 -1
  12. package/dist/{createDataTable-C86TFzxJ.mjs → createDataTable-s3eVS4Zu.mjs} +3 -3
  13. package/dist/{createGroup-DKVmhWJZ.mjs → createGroup-B6LPZBb5.mjs} +1 -1
  14. package/dist/{createRegistry-DaRYxox5.mjs → createRegistry-BGTmeeis.mjs} +23 -13
  15. package/dist/{createSelection-CZFfJnBv.mjs → createSelection-CyN6WFYU.mjs} +27 -13
  16. package/dist/{createSingle-D08Et-36.mjs → createSingle-B2ccuoDn.mjs} +1 -1
  17. package/dist/{createTokens-BY_7TedA.mjs → createTokens-CmFlFaiL.mjs} +8 -7
  18. package/dist/data-table/index.d.mts +1 -1
  19. package/dist/data-table/index.mjs +1 -1
  20. package/dist/date/index.mjs +1 -1
  21. package/dist/features/adapters/posthog/index.mjs +1 -1
  22. package/dist/features/index.d.mts +1 -1
  23. package/dist/features/index.mjs +1 -1
  24. package/dist/{globals-Djy_aCgG.mjs → globals-RL3Sag6Q.mjs} +1 -1
  25. package/dist/{index-B5ybQyJO.d.mts → index-BwNRi6BK.d.mts} +9 -7
  26. package/dist/{index-CUdlfMMw.d.mts → index-CfoyBH6V.d.mts} +144 -110
  27. package/dist/{index-CIf2yTGR.d.mts → index-CrFFilCd.d.mts} +2 -2
  28. package/dist/{index-CfSenWTN.d.mts → index-DCtHbY0a.d.mts} +1 -1
  29. package/dist/{index-DTYOP7ci.d.mts → index-RGiSdjYt.d.mts} +8 -7
  30. package/dist/index.d.mts +7 -7
  31. package/dist/index.mjs +23 -23
  32. package/dist/json/attributes.json +28 -0
  33. package/dist/json/tags.json +7 -0
  34. package/dist/json/web-types.json +65 -2
  35. package/dist/locale/adapters/index.d.mts +2 -2
  36. package/dist/locale/adapters/index.mjs +1 -1
  37. package/dist/locale/adapters/v0/index.d.mts +1 -1
  38. package/dist/locale/adapters/v0/index.mjs +1 -1
  39. package/dist/locale/adapters/vue-i18n/index.d.mts +1 -1
  40. package/dist/locale/index.d.mts +3 -3
  41. package/dist/locale/index.mjs +2 -2
  42. package/dist/locale/messages/en/index.d.mts +6 -0
  43. package/dist/locale/messages/en/index.mjs +3 -1
  44. package/dist/logger/adapters/index.mjs +1 -1
  45. package/dist/logger/adapters/v0/index.mjs +1 -1
  46. package/dist/logger/index.d.mts +1 -1
  47. package/dist/logger/index.mjs +2 -2
  48. package/dist/notifications/index.d.mts +1 -1
  49. package/dist/notifications/index.mjs +2 -2
  50. package/dist/palettes/ant/index.d.mts +1 -1
  51. package/dist/palettes/index.d.mts +2 -2
  52. package/dist/palettes/material/index.d.mts +1 -1
  53. package/dist/palettes/md1/index.d.mts +1 -1
  54. package/dist/palettes/md2/index.d.mts +1 -1
  55. package/dist/palettes/radix/index.d.mts +1 -1
  56. package/dist/palettes/tailwind/index.d.mts +1 -1
  57. package/dist/permissions/adapters/index.d.mts +1 -1
  58. package/dist/permissions/adapters/v0/index.d.mts +1 -1
  59. package/dist/permissions/index.d.mts +1 -1
  60. package/dist/permissions/index.mjs +1 -1
  61. package/dist/rules/index.d.mts +1 -1
  62. package/dist/rules/index.mjs +1 -1
  63. package/dist/storage/index.d.mts +1 -1
  64. package/dist/storage/index.mjs +1 -1
  65. package/dist/theme/adapters/index.d.mts +1 -1
  66. package/dist/theme/adapters/index.mjs +2 -2
  67. package/dist/theme/adapters/unhead/index.d.mts +1 -1
  68. package/dist/theme/adapters/unhead/index.mjs +1 -1
  69. package/dist/theme/adapters/v0/index.d.mts +1 -1
  70. package/dist/theme/adapters/v0/index.mjs +1 -1
  71. package/dist/theme/index.d.mts +1 -1
  72. package/dist/theme/index.mjs +3 -3
  73. package/dist/{unhead-CAPMhSV7.mjs → unhead-CEoip0pl.mjs} +20 -2
  74. package/dist/{useEventListener-BtOsc1qg.mjs → useEventListener-CBJTFVtj.mjs} +1 -1
  75. package/dist/{useFeatures-B5I-8W8H.mjs → useFeatures-BZszg39v.mjs} +4 -4
  76. package/dist/{useLocale-AKOyyv43.mjs → useLocale-DeC8QRi3.mjs} +4 -4
  77. package/dist/{useLogger-bHW-Guij.mjs → useLogger-6LS-fgWD.mjs} +2 -2
  78. package/dist/{useNotifications-P-1VQHi8.mjs → useNotifications-DD7vR-tx.mjs} +3 -3
  79. package/dist/{usePermissions-nuWucbL_.mjs → usePermissions-BIfS_ihQ.mjs} +2 -2
  80. package/dist/{useRovingFocus-BfbmLJoo.mjs → useRovingFocus-Dzw1c9uA.mjs} +109 -76
  81. package/dist/{useRules-SLj8Le-M.mjs → useRules-BzgsUHWa.mjs} +2 -2
  82. package/dist/{useStorage-B4eV6lZZ.mjs → useStorage-5nEMSv-y.mjs} +3 -3
  83. package/dist/{useTheme-SVM2VmlS.mjs → useTheme-K1dwhgeW.mjs} +4 -4
  84. package/dist/utilities/index.mjs +1 -1
  85. package/dist/{v0-BoEyw8RC.mjs → v0-BOXWgl8G.mjs} +1 -1
  86. package/dist/{v0-DcTsWvzJ.d.mts → v0-C0OfckSF.d.mts} +1 -1
  87. package/dist/{v0-gVrU_ObF.mjs → v0-CFy_iJEG.mjs} +19 -2
  88. package/dist/{v0-D5BwU_Up.mjs → v0-DsrbK05t.mjs} +1 -1
  89. package/package.json +13 -8
@@ -135,7 +135,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
135
135
  const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
136
136
  const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
137
137
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
138
- const version = "1.0.0-rc.7";
138
+ const version = "1.0.0-rc.9";
139
139
  /* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
140
140
  const __LOGGER_ENABLED__ = false;
141
141
  //#endregion
@@ -1666,6 +1666,7 @@ function createRegistry(options) {
1666
1666
  const directory = /* @__PURE__ */ new Map();
1667
1667
  const cache = /* @__PURE__ */ new Map();
1668
1668
  const listeners = /* @__PURE__ */ new Map();
1669
+ const minted = /* @__PURE__ */ new WeakSet();
1669
1670
  const order = [];
1670
1671
  const version = shallowRef(0);
1671
1672
  let indexDependentCount = 0;
@@ -1673,6 +1674,7 @@ function createRegistry(options) {
1673
1674
  let minDirtyIndex = Infinity;
1674
1675
  let maxDirtyIndex = -Infinity;
1675
1676
  let isBatching = false;
1677
+ let structural = false;
1676
1678
  let batched = [];
1677
1679
  function dispatch(event, data) {
1678
1680
  const cbs = listeners.get(event);
@@ -1812,23 +1814,29 @@ function createRegistry(options) {
1812
1814
  }
1813
1815
  function invalidate() {
1814
1816
  cache.clear();
1815
- if (isBatching) return;
1817
+ if (isBatching) {
1818
+ structural = true;
1819
+ return;
1820
+ }
1816
1821
  version.value++;
1817
1822
  }
1818
1823
  function batch(fn) {
1819
1824
  if (isBatching) return fn();
1820
1825
  isBatching = true;
1826
+ structural = false;
1821
1827
  batched = [];
1822
1828
  try {
1823
- const result = fn();
1824
- cache.clear();
1825
- for (const { event, data } of batched) dispatch(event, data);
1826
- return result;
1829
+ return fn();
1827
1830
  } finally {
1828
1831
  isBatching = false;
1832
+ const queue = batched;
1829
1833
  batched = [];
1830
1834
  cache.clear();
1831
- version.value++;
1835
+ try {
1836
+ for (const { event, data } of queue) dispatch(event, data);
1837
+ } finally {
1838
+ if (structural) version.value++;
1839
+ }
1832
1840
  }
1833
1841
  }
1834
1842
  function reindex() {
@@ -1862,6 +1870,7 @@ function createRegistry(options) {
1862
1870
  function register(registration = {}) {
1863
1871
  if (needsReindex) reindex();
1864
1872
  const size = collection.size;
1873
+ const auto = /* @__PURE__ */ isNullOrUndefined(registration.id);
1865
1874
  const id = registration.id ?? /* @__PURE__ */ useId();
1866
1875
  if (has(id)) {
1867
1876
  logger.warn(`Ticket "${id}" already exists. Use \`upsert()\` to update or check \`has()\` before registering.`);
@@ -1881,6 +1890,7 @@ function createRegistry(options) {
1881
1890
  unregister: () => unregister(id)
1882
1891
  };
1883
1892
  const ticket = reactive ? shallowReactive(input) : input;
1893
+ if (auto) minted.add(ticket);
1884
1894
  collection.set(ticket.id, ticket);
1885
1895
  order.push(ticket);
1886
1896
  directory.set(ticket.index, ticket.id);
@@ -1914,10 +1924,8 @@ function createRegistry(options) {
1914
1924
  delete input.index;
1915
1925
  delete input.valueIsIndex;
1916
1926
  delete input.unregister;
1917
- if (ticket.valueIsIndex) {
1918
- delete input.id;
1919
- delete input.value;
1920
- }
1927
+ if (minted.has(ticket)) delete input.id;
1928
+ if (ticket.valueIsIndex) delete input.value;
1921
1929
  return input;
1922
1930
  }
1923
1931
  function offboard(ids) {
@@ -1936,6 +1944,7 @@ function createRegistry(options) {
1936
1944
  let w = 0;
1937
1945
  for (const ticket of order) if (!removedIds.has(ticket.id)) order[w++] = ticket;
1938
1946
  order.length = w;
1947
+ invalidate();
1939
1948
  for (const ticket of removed) {
1940
1949
  if (ticket.valueIsIndex) indexDependentCount--;
1941
1950
  minDirtyIndex = Math.min(minDirtyIndex, ticket.index);
@@ -1944,7 +1953,8 @@ function createRegistry(options) {
1944
1953
  unassign(ticket.value, ticket.id);
1945
1954
  }
1946
1955
  for (const ticket of removed) emit("unregister:ticket", ticket);
1947
- needsReindex = true;
1956
+ if (indexDependentCount > 0 && minDirtyIndex < collection.size) reindex();
1957
+ else needsReindex = true;
1948
1958
  });
1949
1959
  return removed.map((ticket) => toInput(ticket));
1950
1960
  }
@@ -2183,6 +2193,8 @@ function createModel(_options = {}) {
2183
2193
  }
2184
2194
  function unselect(id) {
2185
2195
  if (toValue(disabled)) return;
2196
+ const item = registry.get(id);
2197
+ if (!item || toValue(item.disabled)) return;
2186
2198
  selectedIds.delete(id);
2187
2199
  }
2188
2200
  function toggle(id) {
@@ -2379,11 +2391,17 @@ function createSelection(_options = {}) {
2379
2391
  const ticket = seek("first");
2380
2392
  if (ticket) model.select(ticket.id);
2381
2393
  }
2382
- function unselect(id) {
2394
+ function drain(id) {
2383
2395
  if (toValue(model.disabled)) return;
2384
2396
  if (toValue(mandatory) && model.selectedIds.size === 1) return;
2385
2397
  model.selectedIds.delete(id);
2386
2398
  }
2399
+ function unselect(id) {
2400
+ if (toValue(model.disabled)) return;
2401
+ const item = model.get(id);
2402
+ if (!item || toValue(item.disabled)) return;
2403
+ drain(id);
2404
+ }
2387
2405
  function toggle(id) {
2388
2406
  if (toValue(model.disabled)) return;
2389
2407
  if (model.selectedIds.has(id)) unselect(id);
@@ -2393,22 +2411,28 @@ function createSelection(_options = {}) {
2393
2411
  const isMultiple = options?.multiple ?? toValue(multiple);
2394
2412
  const currentIds = new Set(model.selectedIds);
2395
2413
  const targetIds = /* @__PURE__ */ new Set();
2396
- for (const value of values) {
2397
- const ids = model.browse(toRaw(value));
2398
- if (ids) for (const id of ids) targetIds.add(id);
2399
- }
2400
2414
  if (isMultiple) {
2401
- for (const id of currentIds) if (!targetIds.has(id)) unselect(id);
2402
- for (const id of targetIds) {
2403
- if (currentIds.has(id)) continue;
2404
- const ticket = model.get(id);
2405
- if (ticket && toValue(ticket.disabled)) continue;
2406
- model.selectedIds.add(id);
2415
+ for (const value of values) {
2416
+ const ids = model.browse(toRaw(value));
2417
+ if (/* @__PURE__ */ isUndefined(ids)) continue;
2418
+ for (const id of ids) {
2419
+ const ticket = model.get(id);
2420
+ if (!ticket || toValue(ticket.disabled)) continue;
2421
+ targetIds.add(id);
2422
+ }
2407
2423
  }
2424
+ if (toValue(mandatory) && targetIds.size === 0) return;
2425
+ for (const id of currentIds) if (!targetIds.has(id)) model.selectedIds.delete(id);
2426
+ for (const id of targetIds) model.selectedIds.add(id);
2408
2427
  } else {
2428
+ for (const value of values) {
2429
+ const ids = model.browse(toRaw(value));
2430
+ if (/* @__PURE__ */ isUndefined(ids)) continue;
2431
+ for (const id of ids) targetIds.add(id);
2432
+ }
2409
2433
  const next = targetIds.values().next().value;
2410
2434
  const last = currentIds.values().next().value;
2411
- if (!/* @__PURE__ */ isUndefined(last)) unselect(last);
2435
+ if (!/* @__PURE__ */ isUndefined(last)) drain(last);
2412
2436
  if (!/* @__PURE__ */ isUndefined(next)) model.select(next);
2413
2437
  }
2414
2438
  }
@@ -2704,10 +2728,10 @@ function useSingle(namespace = "v0:single") {
2704
2728
  * - Alias resolution with circular reference detection
2705
2729
  * - Nested token flattening with dot notation
2706
2730
  * - W3C Design Tokens format ($value, $type, $description, $extensions)
2707
- * - Path-based resolution (e.g., {colors}.blue.500)
2708
- * - Resolution caching for performance (~28,590 ops/sec)
2731
+ * - Path-based resolution (e.g., {colors.blue.500} or colors.blue.500)
2732
+ * - Resolution caching for performance
2709
2733
  *
2710
- * Used by useTheme, useLocale, and useFeatures for token-based configuration.
2734
+ * Used by useTheme, useLocale, useFeatures, and usePermissions for token-based configuration.
2711
2735
  *
2712
2736
  * @example
2713
2737
  * ```ts
@@ -2806,6 +2830,7 @@ function createTokens(tokens = {}, options = {}) {
2806
2830
  cache.set(cacheKey, void 0);
2807
2831
  return;
2808
2832
  }
2833
+ if (/* @__PURE__ */ isString(current) && isAlias(current)) return resolve(current, visited);
2809
2834
  result = current;
2810
2835
  } else if (isTokenAlias(current)) {
2811
2836
  const inner = current.$value;
@@ -2821,9 +2846,9 @@ function createTokens(tokens = {}, options = {}) {
2821
2846
  cache.clear();
2822
2847
  return _register(registration);
2823
2848
  }
2824
- function upsert(id, registration) {
2849
+ function upsert(id, registration, event) {
2825
2850
  cache.clear();
2826
- return _upsert(id, registration);
2851
+ return _upsert(id, registration, event);
2827
2852
  }
2828
2853
  function unregister(id) {
2829
2854
  cache.clear();
@@ -5288,10 +5313,10 @@ function useImage(options) {
5288
5313
  //#region src/components/Avatar/AvatarImage.vue
5289
5314
  const _sfc_main$12 = /* @__PURE__ */ defineComponent({
5290
5315
  name: "AvatarImage",
5291
- inheritAttrs: false,
5292
5316
  __name: "AvatarImage",
5293
5317
  props: {
5294
5318
  src: {},
5319
+ alt: {},
5295
5320
  priority: { default: 0 },
5296
5321
  namespace: { default: "v0:avatar" },
5297
5322
  as: { default: "img" },
@@ -5348,6 +5373,7 @@ const _sfc_main$12 = /* @__PURE__ */ defineComponent({
5348
5373
  attrs: {
5349
5374
  role: "img",
5350
5375
  src: image.source.value,
5376
+ alt: __props.alt,
5351
5377
  onLoad,
5352
5378
  onError
5353
5379
  }
@@ -6660,11 +6686,14 @@ function useProxyModel(context, model, options) {
6660
6686
  return toValue(multiple) ? val : val[0];
6661
6687
  }
6662
6688
  const applyOptions = toValue(multiple) === toValue(context.multiple ?? false) ? void 0 : { multiple: toValue(multiple) };
6663
- const modelAsArray = transformIn(model);
6664
- const pending = new Set(modelAsArray);
6665
- context.apply(modelAsArray, applyOptions);
6666
- const selected = new Set(context.selectedValues.value);
6667
- for (const value of modelAsArray) if (selected.has(value)) pending.delete(value);
6689
+ const pending = /* @__PURE__ */ new Set();
6690
+ function reconcile(values) {
6691
+ context.apply(values, applyOptions);
6692
+ const selected = new Set(context.selectedValues.value);
6693
+ pending.clear();
6694
+ for (const value of values) if (!selected.has(value)) pending.add(value);
6695
+ }
6696
+ reconcile(transformIn(model));
6668
6697
  let syncing = false;
6669
6698
  function shallowEqual(a, b) {
6670
6699
  if (a === b) return true;
@@ -6673,15 +6702,17 @@ function useProxyModel(context, model, options) {
6673
6702
  }
6674
6703
  const contextWatch = watch(context.selectedValues, (val) => {
6675
6704
  if (syncing) return;
6705
+ syncing = true;
6676
6706
  modelWatch.pause();
6677
6707
  model.value = transformOut(Array.from(toValue(val)));
6678
6708
  modelWatch.resume();
6709
+ syncing = false;
6679
6710
  }, { flush: "sync" });
6680
6711
  const modelWatch = watch(model, (val) => {
6681
6712
  if (syncing) return;
6682
6713
  syncing = true;
6683
6714
  contextWatch.pause();
6684
- context.apply(transformIn(val), applyOptions);
6715
+ reconcile(transformIn(val));
6685
6716
  const actual = transformOut(Array.from(context.selectedValues.value));
6686
6717
  if (!shallowEqual(val, actual)) model.value = actual;
6687
6718
  contextWatch.resume();
@@ -7811,6 +7842,8 @@ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
7811
7842
  });
7812
7843
  useEventListener(el, "touchstart", () => carousel.pause(), { passive: true });
7813
7844
  useEventListener(el, "touchend", () => carousel.resume(), { passive: true });
7845
+ useEventListener(el, "focusin", () => carousel.pause());
7846
+ useEventListener(el, "focusout", () => carousel.resume());
7814
7847
  }
7815
7848
  watch(() => carousel.selectedIndex.value, (index) => {
7816
7849
  const viewport = el.value;
@@ -10159,7 +10192,11 @@ function createCombobox(options = {}) {
10159
10192
  function clear() {
10160
10193
  query.value = "";
10161
10194
  pristine.value = true;
10162
- for (const id of Array.from(selection.selectedIds)) selection.unselect(id);
10195
+ if (toValue(disabled)) return;
10196
+ for (const id of Array.from(selection.selectedIds)) {
10197
+ if (toValue(mandatory) && selection.selectedIds.size === 1) break;
10198
+ selection.selectedIds.delete(id);
10199
+ }
10163
10200
  }
10164
10201
  watch(isOpen, (open) => {
10165
10202
  if (!open) cursor.clear();
@@ -10682,6 +10719,7 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
10682
10719
  },
10683
10720
  setup(__props) {
10684
10721
  const context = useComboboxContext(__props.namespace);
10722
+ const locale = useLocale();
10685
10723
  const slotProps = toRef(() => ({ query: context.query.value }));
10686
10724
  return (_ctx, _cache) => {
10687
10725
  return unref(context).isEmpty.value ? (openBlock(), createBlock(unref(_sfc_main$9), {
@@ -10689,7 +10727,7 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
10689
10727
  as: __props.as,
10690
10728
  renderless: __props.renderless
10691
10729
  }, {
10692
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)), () => [_cache[0] || (_cache[0] = createTextVNode("No results", -1))])]),
10730
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)), () => [createTextVNode(toDisplayString(unref(locale).ti("Combobox.noResults") ?? "No results"), 1)])]),
10693
10731
  _: 3
10694
10732
  }, 8, ["as", "renderless"])) : createCommentVNode("v-if", true);
10695
10733
  };
@@ -11975,6 +12013,10 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
11975
12013
  type: Boolean,
11976
12014
  default: false
11977
12015
  },
12016
+ novalidate: {
12017
+ type: Boolean,
12018
+ default: true
12019
+ },
11978
12020
  as: { default: "form" },
11979
12021
  renderless: { type: Boolean }
11980
12022
  }, {
@@ -12018,6 +12060,7 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
12018
12060
  submit: form.submit,
12019
12061
  reset: form.reset,
12020
12062
  attrs: {
12063
+ novalidate: __props.novalidate || void 0,
12021
12064
  onSubmit,
12022
12065
  onReset
12023
12066
  }
@@ -12849,6 +12892,8 @@ function createValidation(_options = {}) {
12849
12892
  const isValid = shallowRef(null);
12850
12893
  const isValidating = shallowRef(false);
12851
12894
  let generation = 0;
12895
+ let visible = 0;
12896
+ let latest;
12852
12897
  function register(input) {
12853
12898
  if (/* @__PURE__ */ isFunction(input) || /* @__PURE__ */ isString(input) || /* @__PURE__ */ isStandardSchema(input)) {
12854
12899
  const resolved = rulesContext.resolve([input]);
@@ -12859,8 +12904,15 @@ function createValidation(_options = {}) {
12859
12904
  function onboard(rules) {
12860
12905
  return group.batch(() => rules.map((r) => register(r)));
12861
12906
  }
12862
- async function validate(_value = UNSET, silent = false) {
12863
- const gen = ++generation;
12907
+ async function wait() {
12908
+ while (true) {
12909
+ const current = latest;
12910
+ if (/* @__PURE__ */ isUndefined(current)) return false;
12911
+ const result = await current.promise;
12912
+ if (current.generation === generation) return result;
12913
+ }
12914
+ }
12915
+ async function run(gen, _value, silent) {
12864
12916
  const val = _value === UNSET ? toValue(valueSource) : _value;
12865
12917
  const activeRules = [];
12866
12918
  for (const ticket of group.selectedItems.value) activeRules.push(ticket.value);
@@ -12875,7 +12927,7 @@ function createValidation(_options = {}) {
12875
12927
  if (!silent) isValidating.value = true;
12876
12928
  try {
12877
12929
  const results = await Promise.all(activeRules.map((rule) => rule(val)));
12878
- if (gen !== generation) return false;
12930
+ if (gen !== generation) return wait();
12879
12931
  const errorMessages = results.filter((result) => /* @__PURE__ */ isString(result) || result === false).map((result) => result === false ? "Validation failed" : result);
12880
12932
  if (!silent) {
12881
12933
  errors.value = errorMessages;
@@ -12883,21 +12935,32 @@ function createValidation(_options = {}) {
12883
12935
  }
12884
12936
  return errorMessages.length === 0;
12885
12937
  } catch (error) {
12886
- if (gen !== generation) return false;
12938
+ if (gen !== generation) return wait();
12887
12939
  if (!silent) {
12888
12940
  errors.value = [error instanceof Error ? error.message : "Validation error"];
12889
12941
  isValid.value = false;
12890
12942
  }
12891
12943
  return false;
12892
12944
  } finally {
12893
- if (gen === generation && !silent) isValidating.value = false;
12945
+ if (!silent && gen === visible) isValidating.value = false;
12894
12946
  }
12895
12947
  }
12948
+ async function validate(_value = UNSET, silent = false) {
12949
+ const gen = ++generation;
12950
+ if (!silent) visible = gen;
12951
+ const promise = run(gen, _value, silent);
12952
+ latest = {
12953
+ generation: gen,
12954
+ promise
12955
+ };
12956
+ return promise;
12957
+ }
12896
12958
  function reset() {
12897
12959
  errors.value = [];
12898
12960
  isValid.value = null;
12899
12961
  isValidating.value = false;
12900
12962
  generation++;
12963
+ latest = void 0;
12901
12964
  }
12902
12965
  if (initialRules.length > 0) onboard(initialRules);
12903
12966
  const context = {
@@ -13679,6 +13742,7 @@ function createNumberField(options = {}) {
13679
13742
  return Number.isNaN(result) ? null : result;
13680
13743
  }
13681
13744
  function commit(next) {
13745
+ if (isLocked()) return;
13682
13746
  const val = arguments.length === 0 ? value.value : next;
13683
13747
  if (/* @__PURE__ */ isNull(val)) return;
13684
13748
  if (!shouldClamp && (val < numeric.min || val > numeric.max)) {
@@ -15836,6 +15900,8 @@ const _sfc_main$96 = /* @__PURE__ */ defineComponent({
15836
15900
  attrs: {
15837
15901
  "popovertarget": toValue(popovertarget),
15838
15902
  "type": __props.as === "button" ? "button" : void 0,
15903
+ "aria-expanded": context.isOpen.value,
15904
+ "aria-controls": toValue(popovertarget),
15839
15905
  "data-open": context.isOpen.value || void 0,
15840
15906
  "style": style.value
15841
15907
  }
@@ -16323,7 +16389,7 @@ function createProgress(options = {}) {
16323
16389
  });
16324
16390
  function fromValue(value) {
16325
16391
  if (extent === 0) return 0;
16326
- return /* @__PURE__ */ clamp(value, 0, extent) / extent * 100;
16392
+ return (/* @__PURE__ */ clamp(value, min, max) - min) / extent * 100;
16327
16393
  }
16328
16394
  function register(registration = {}) {
16329
16395
  const index = segments.value.length;
@@ -17796,8 +17862,9 @@ const _sfc_main$115 = /* @__PURE__ */ defineComponent({
17796
17862
  isBlocking: ticket.blocking.value,
17797
17863
  dismiss: () => onDismiss(ticket),
17798
17864
  attrs: {
17799
- style: { zIndex },
17800
- onClick: () => onDismiss(ticket)
17865
+ "aria-hidden": "true",
17866
+ "style": { zIndex },
17867
+ "onClick": () => onDismiss(ticket)
17801
17868
  }
17802
17869
  };
17803
17870
  }
@@ -18065,6 +18132,9 @@ const _sfc_main$116 = /* @__PURE__ */ defineComponent({
18065
18132
  "aria-expanded": context.isOpen.value,
18066
18133
  "aria-haspopup": "listbox",
18067
18134
  "aria-controls": context.listboxId,
18135
+ "aria-disabled": toValue(context.disabled),
18136
+ "disabled": toValue(context.disabled) || void 0,
18137
+ "tabindex": __props.as === "button" ? void 0 : 0,
18068
18138
  "data-open": context.isOpen.value || void 0,
18069
18139
  "style": context.popover.anchorStyles.value,
18070
18140
  onClick,
@@ -18108,6 +18178,7 @@ const _sfc_main$117 = /* @__PURE__ */ defineComponent({
18108
18178
  ...context.popover.contentAttrs.value,
18109
18179
  "id": context.listboxId,
18110
18180
  "role": "listbox",
18181
+ "aria-labelledby": context.activatorId,
18111
18182
  "aria-multiselectable": context.multiple || void 0,
18112
18183
  "tabindex": -1,
18113
18184
  "style": context.popover.contentStyles.value
@@ -18912,7 +18983,7 @@ function createSlider(options = {}) {
18912
18983
  }
18913
18984
  }
18914
18985
  function set(index, value) {
18915
- if (readonly.value) return;
18986
+ if (disabled.value || readonly.value) return;
18916
18987
  const snapped = snap(value);
18917
18988
  const current = values.value;
18918
18989
  let constrained = snapped;
@@ -18998,6 +19069,8 @@ const _sfc_main$129 = /* @__PURE__ */ defineComponent({
18998
19069
  },
18999
19070
  name: {},
19000
19071
  form: {},
19072
+ label: {},
19073
+ ariaLabelledby: {},
19001
19074
  namespace: { default: "v0:slider:root" },
19002
19075
  as: { default: "div" },
19003
19076
  renderless: { type: Boolean }
@@ -19106,6 +19179,9 @@ const _sfc_main$129 = /* @__PURE__ */ defineComponent({
19106
19179
  floor: slider.floor,
19107
19180
  ceil: slider.ceil,
19108
19181
  attrs: {
19182
+ "role": "group",
19183
+ "aria-label": __props.label || void 0,
19184
+ "aria-labelledby": __props.ariaLabelledby || void 0,
19109
19185
  "data-disabled": isDisabled.value ? true : void 0,
19110
19186
  "data-readonly": isReadonly.value ? true : void 0,
19111
19187
  "data-orientation": toValue(slider.orientation)
@@ -20855,10 +20931,7 @@ const _sfc_main$138 = /* @__PURE__ */ defineComponent({
20855
20931
  as: { default: "div" },
20856
20932
  renderless: { type: Boolean }
20857
20933
  }, {
20858
- "collapsed": {
20859
- type: Boolean,
20860
- default: void 0
20861
- },
20934
+ "collapsed": { type: Boolean },
20862
20935
  "collapsedModifiers": {}
20863
20936
  }),
20864
20937
  emits: /* @__PURE__ */ mergeModels(["update:collapsed", "resize"], ["update:collapsed"]),
@@ -20993,6 +21066,7 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
20993
21066
  const attrs = useAttrs();
20994
21067
  const ARROW_STEP = 1;
20995
21068
  const PAGE_STEP = 10;
21069
+ const locale = useLocale();
20996
21070
  const splitter = useSplitterRoot();
20997
21071
  const ticket = splitter.handles.register();
20998
21072
  onBeforeUnmount(() => {
@@ -21141,7 +21215,7 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
21141
21215
  "aria-valuemax": valuemax.value,
21142
21216
  "aria-orientation": ariaOrientation.value,
21143
21217
  "aria-controls": ariaControls.value,
21144
- "aria-label": __props.label || void 0,
21218
+ "aria-label": __props.label || (locale.ti("Splitter.handle") ?? "Resize"),
21145
21219
  "aria-disabled": isDisabled.value,
21146
21220
  "data-state": state.value,
21147
21221
  "data-orientation": splitter.orientation.value,
@@ -21585,7 +21659,7 @@ const _sfc_main$144 = /* @__PURE__ */ defineComponent({
21585
21659
  attrs: {
21586
21660
  "type": __props.as === "button" ? "button" : void 0,
21587
21661
  "role": "switch",
21588
- "aria-checked": isMixed.value ? "mixed" : isChecked.value,
21662
+ "aria-checked": !isMixed.value && isChecked.value,
21589
21663
  "aria-disabled": isDisabled.value,
21590
21664
  "aria-label": __props.label || void 0,
21591
21665
  "aria-labelledby": __props.ariaLabelledby || void 0,
@@ -21726,7 +21800,7 @@ const _sfc_main$145 = /* @__PURE__ */ defineComponent({
21726
21800
  attrs: {
21727
21801
  "type": __props.as === "button" ? "button" : void 0,
21728
21802
  "role": "switch",
21729
- "aria-checked": isMixed.value ? "mixed" : isAllSelected.value,
21803
+ "aria-checked": !isMixed.value && isAllSelected.value,
21730
21804
  "aria-disabled": isDisabled.value,
21731
21805
  "aria-label": __props.label || void 0,
21732
21806
  "aria-labelledby": __props.ariaLabelledby || void 0,
@@ -21763,14 +21837,13 @@ const _sfc_main$146 = /* @__PURE__ */ defineComponent({
21763
21837
  const root = useSwitchRoot(__props.namespace);
21764
21838
  const isChecked = toRef(() => toValue(root.isChecked));
21765
21839
  const isMixed = toRef(() => toValue(root.isMixed));
21766
- const isVisible = toRef(() => isChecked.value || isMixed.value);
21767
21840
  const dataState = toRef(() => isMixed.value ? "indeterminate" : isChecked.value ? "checked" : "unchecked");
21768
21841
  const slotProps = toRef(() => ({
21769
21842
  isChecked: isChecked.value,
21770
21843
  isMixed: isMixed.value,
21771
21844
  attrs: {
21772
- "data-state": dataState.value,
21773
- "style": { visibility: isVisible.value ? "visible" : "hidden" }
21845
+ "aria-hidden": "true",
21846
+ "data-state": dataState.value
21774
21847
  }
21775
21848
  }));
21776
21849
  return (_ctx, _cache) => {
@@ -21802,7 +21875,10 @@ const _sfc_main$147 = /* @__PURE__ */ defineComponent({
21802
21875
  const slotProps = toRef(() => ({
21803
21876
  isChecked: isChecked.value,
21804
21877
  isMixed: isMixed.value,
21805
- attrs: { "data-state": dataState.value }
21878
+ attrs: {
21879
+ "aria-hidden": "true",
21880
+ "data-state": dataState.value
21881
+ }
21806
21882
  }));
21807
21883
  return (_ctx, _cache) => {
21808
21884
  return openBlock(), createBlock(unref(_sfc_main$9), mergeProps(slotProps.value.attrs, {
@@ -21972,10 +22048,10 @@ const Switch = {
21972
22048
  */
21973
22049
  SelectAll: _sfc_main$145,
21974
22050
  /**
21975
- * Sliding knob indicator for switches.
22051
+ * Sliding knob for switches.
21976
22052
  *
21977
- * Renders as a span with `data-state` attribute for CSS styling.
21978
- * Hidden via `visibility: hidden` when unchecked and not mixed.
22053
+ * Renders as a span with a `data-state` attribute for CSS styling.
22054
+ * Always visible; drive its off/on position and color from `data-state`.
21979
22055
  * Must be used within a Switch.Root or Switch.SelectAll.
21980
22056
  *
21981
22057
  * @see https://0.vuetifyjs.com/components/forms/switch
@@ -22463,7 +22539,24 @@ var V0StyleSheetThemeAdapter = class extends ThemeAdapter {
22463
22539
  ...this.cspNonce ? { nonce: this.cspNonce } : {}
22464
22540
  }]
22465
22541
  });
22466
- if (entry?.dispose) this.dispose = entry.dispose;
22542
+ const stop = watch([
22543
+ context.selectedId,
22544
+ context.colors,
22545
+ context.isDark
22546
+ ], ([themeId, colors, isDark]) => {
22547
+ entry.patch?.({
22548
+ htmlAttrs: { "data-theme": themeId ? String(themeId) : "" },
22549
+ style: [{
22550
+ innerHTML: this.generate(colors, isDark),
22551
+ id: this.stylesheetId,
22552
+ ...this.cspNonce ? { nonce: this.cspNonce } : {}
22553
+ }]
22554
+ });
22555
+ });
22556
+ this.dispose = () => {
22557
+ stop();
22558
+ entry.dispose?.();
22559
+ };
22467
22560
  }
22468
22561
  }
22469
22562
  }
@@ -22542,7 +22635,25 @@ var V0UnheadThemeAdapter = class extends ThemeAdapter {
22542
22635
  stopWatch();
22543
22636
  this.entry?.dispose?.();
22544
22637
  };
22545
- } else this.dispose = () => this.entry?.dispose?.();
22638
+ } else {
22639
+ const stop = watch([
22640
+ context.colors,
22641
+ context.isDark,
22642
+ context.selectedId
22643
+ ], ([colors, isDark, id]) => {
22644
+ this.entry?.patch?.({
22645
+ htmlAttrs: { "data-theme": id ? String(id) : "" },
22646
+ style: [{
22647
+ innerHTML: this.generate(colors, isDark),
22648
+ id: this.stylesheetId
22649
+ }]
22650
+ });
22651
+ });
22652
+ this.dispose = () => {
22653
+ stop();
22654
+ this.entry?.dispose?.();
22655
+ };
22656
+ }
22546
22657
  }
22547
22658
  update(colors, isDark) {
22548
22659
  if (!this.entry) return;
@@ -22788,6 +22899,9 @@ const _sfc_main$153 = /* @__PURE__ */ defineComponent({
22788
22899
  default: false
22789
22900
  },
22790
22901
  orientation: { default: "horizontal" },
22902
+ label: {},
22903
+ ariaLabelledby: {},
22904
+ ariaDescribedby: {},
22791
22905
  as: { default: "div" },
22792
22906
  renderless: { type: Boolean }
22793
22907
  }, {
@@ -22816,6 +22930,9 @@ const _sfc_main$153 = /* @__PURE__ */ defineComponent({
22816
22930
  isDisabled: toValue(__props.disabled),
22817
22931
  attrs: {
22818
22932
  "role": "group",
22933
+ "aria-label": __props.label || void 0,
22934
+ "aria-labelledby": __props.ariaLabelledby || void 0,
22935
+ "aria-describedby": __props.ariaDescribedby || void 0,
22819
22936
  "aria-orientation": __props.orientation,
22820
22937
  "aria-disabled": __props.disabled,
22821
22938
  "data-orientation": __props.orientation,
@@ -23278,7 +23395,8 @@ const _sfc_main$156 = /* @__PURE__ */ defineComponent({
23278
23395
  "onBlur": onBlur,
23279
23396
  "onClick": onClick,
23280
23397
  "onKeydown": onKeydown
23281
- }
23398
+ },
23399
+ styles: root.anchorStyles.value
23282
23400
  }));
23283
23401
  return (_ctx, _cache) => {
23284
23402
  return openBlock(), createBlock(unref(_sfc_main$9), mergeProps({
@@ -23320,6 +23438,9 @@ const _sfc_main$157 = /* @__PURE__ */ defineComponent({
23320
23438
  if (!root.isInteractive.value) return;
23321
23439
  root.close();
23322
23440
  }
23441
+ function onKeydown(e) {
23442
+ if (e.key === "Escape") root.close();
23443
+ }
23323
23444
  const slotProps = toRef(() => ({
23324
23445
  isOpen: root.isOpen.value,
23325
23446
  isInteractive: root.isInteractive.value,
@@ -23329,7 +23450,8 @@ const _sfc_main$157 = /* @__PURE__ */ defineComponent({
23329
23450
  "data-state": root.dataState.value,
23330
23451
  "data-interactive": root.isInteractive.value || void 0,
23331
23452
  "onPointerenter": onPointerenter,
23332
- "onPointerleave": onPointerleave
23453
+ "onPointerleave": onPointerleave,
23454
+ "onKeydown": onKeydown
23333
23455
  },
23334
23456
  styles: root.contentStyles.value
23335
23457
  }));
@@ -23517,7 +23639,6 @@ function createNested(_options = {}) {
23517
23639
  function open(ids) {
23518
23640
  if (toValue(group.disabled)) return;
23519
23641
  for (const id of /* @__PURE__ */ toArray(ids)) {
23520
- if (!group.has(id)) continue;
23521
23642
  const item = group.get(id);
23522
23643
  if (!item || toValue(item.disabled)) continue;
23523
23644
  openedIds.add(id);
@@ -23542,7 +23663,6 @@ function createNested(_options = {}) {
23542
23663
  function close(ids) {
23543
23664
  if (toValue(group.disabled)) return;
23544
23665
  for (const id of /* @__PURE__ */ toArray(ids)) {
23545
- if (!group.has(id)) continue;
23546
23666
  const item = group.get(id);
23547
23667
  if (!item || toValue(item.disabled)) continue;
23548
23668
  openedIds.delete(id);
@@ -23551,7 +23671,6 @@ function createNested(_options = {}) {
23551
23671
  function flip(ids) {
23552
23672
  if (toValue(group.disabled)) return;
23553
23673
  for (const id of /* @__PURE__ */ toArray(ids)) {
23554
- if (!group.has(id)) continue;
23555
23674
  const item = group.get(id);
23556
23675
  if (!item || toValue(item.disabled)) continue;
23557
23676
  if (opened(id)) close(id);
@@ -23779,75 +23898,81 @@ function createNested(_options = {}) {
23779
23898
  function getLeafDescendants(id) {
23780
23899
  return getDescendants(id).filter((did) => isLeaf(did));
23781
23900
  }
23901
+ function removeLeaves(leafIds) {
23902
+ const { selectedIds, mixedIds } = group;
23903
+ const ids = new Set(leafIds);
23904
+ if (toValue(mandatoryOption) && [...selectedIds].every((id) => ids.has(id))) return;
23905
+ for (const id of ids) {
23906
+ mixedIds.delete(id);
23907
+ selectedIds.delete(id);
23908
+ }
23909
+ for (const id of ids) updateAncestors(id);
23910
+ }
23782
23911
  function select(ids) {
23783
23912
  if (toValue(group.disabled)) return;
23784
- for (const id of /* @__PURE__ */ toArray(ids)) {
23785
- if (!group.has(id)) continue;
23913
+ for (const id of /* @__PURE__ */ toArray(ids)) if (selectionMode === "independent") group.select(id);
23914
+ else if (selectionMode === "leaf") if (isLeaf(id)) group.select(id);
23915
+ else {
23786
23916
  const item = group.get(id);
23787
23917
  if (!item || toValue(item.disabled)) continue;
23788
- if (selectionMode === "independent") group.select(id);
23789
- else if (selectionMode === "leaf") if (isLeaf(id)) group.select(id);
23790
- else for (const lid of getLeafDescendants(id)) group.select(lid);
23791
- else {
23792
- if (!toValue(multipleOption)) {
23793
- group.select(id);
23794
- return;
23795
- }
23796
- const { selectedIds, mixedIds } = group;
23797
- mixedIds.delete(id);
23798
- selectedIds.add(id);
23799
- for (const did of getDescendants(id)) {
23800
- const desc = group.get(did);
23801
- if (desc && toValue(desc.disabled)) continue;
23802
- mixedIds.delete(did);
23803
- selectedIds.add(did);
23804
- }
23805
- updateAncestors(id);
23918
+ for (const lid of getLeafDescendants(id)) group.select(lid);
23919
+ }
23920
+ else {
23921
+ const item = group.get(id);
23922
+ if (!item || toValue(item.disabled)) continue;
23923
+ if (!toValue(multipleOption)) {
23924
+ group.select(id);
23925
+ return;
23806
23926
  }
23927
+ const { selectedIds, mixedIds } = group;
23928
+ mixedIds.delete(id);
23929
+ selectedIds.add(id);
23930
+ for (const did of getDescendants(id)) {
23931
+ const desc = group.get(did);
23932
+ if (desc && toValue(desc.disabled)) continue;
23933
+ mixedIds.delete(did);
23934
+ selectedIds.add(did);
23935
+ }
23936
+ updateAncestors(id);
23807
23937
  }
23808
23938
  }
23809
23939
  function unselect(ids) {
23810
23940
  if (toValue(group.disabled)) return;
23811
- for (const id of /* @__PURE__ */ toArray(ids)) {
23812
- if (!group.has(id)) continue;
23941
+ for (const id of /* @__PURE__ */ toArray(ids)) if (selectionMode === "independent") group.unselect(id);
23942
+ else if (selectionMode === "leaf") {
23813
23943
  const item = group.get(id);
23814
23944
  if (!item || toValue(item.disabled)) continue;
23815
- if (selectionMode === "independent") group.unselect(id);
23816
- else if (selectionMode === "leaf") if (isLeaf(id)) group.unselect(id);
23817
- else for (const lid of getLeafDescendants(id)) group.unselect(lid);
23818
- else {
23819
- const { selectedIds, mixedIds } = group;
23820
- if (toValue(mandatoryOption)) {
23821
- const toRemove = new Set([id, ...getDescendants(id)]);
23822
- if ([...selectedIds].every((sid) => toRemove.has(sid))) return;
23823
- }
23824
- mixedIds.delete(id);
23825
- selectedIds.delete(id);
23826
- for (const did of getDescendants(id)) {
23827
- const desc = group.get(did);
23828
- if (desc && toValue(desc.disabled)) continue;
23829
- mixedIds.delete(did);
23830
- selectedIds.delete(did);
23831
- }
23832
- updateAncestors(id);
23945
+ removeLeaves(isLeaf(id) ? [id] : getLeafDescendants(id));
23946
+ } else {
23947
+ const item = group.get(id);
23948
+ if (!item || toValue(item.disabled)) continue;
23949
+ const { selectedIds, mixedIds } = group;
23950
+ if (toValue(mandatoryOption)) {
23951
+ const toRemove = new Set([id, ...getDescendants(id)]);
23952
+ if ([...selectedIds].every((sid) => toRemove.has(sid))) return;
23953
+ }
23954
+ mixedIds.delete(id);
23955
+ selectedIds.delete(id);
23956
+ for (const did of getDescendants(id)) {
23957
+ mixedIds.delete(did);
23958
+ selectedIds.delete(did);
23833
23959
  }
23960
+ updateAncestors(id);
23834
23961
  }
23835
23962
  }
23836
23963
  function toggle(ids) {
23837
23964
  if (toValue(group.disabled)) return;
23838
- for (const id of /* @__PURE__ */ toArray(ids)) {
23965
+ for (const id of /* @__PURE__ */ toArray(ids)) if (selectionMode === "independent") group.toggle(id);
23966
+ else if (selectionMode === "leaf") if (isLeaf(id)) group.toggle(id);
23967
+ else {
23839
23968
  const item = group.get(id);
23840
23969
  if (!item || toValue(item.disabled)) continue;
23841
- if (selectionMode === "independent") group.toggle(id);
23842
- else if (selectionMode === "leaf") if (isLeaf(id)) group.toggle(id);
23843
- else {
23844
- const leafIds = getLeafDescendants(id);
23845
- if (leafIds.every((lid) => group.selected(lid))) for (const lid of leafIds) group.unselect(lid);
23846
- else for (const lid of leafIds) group.select(lid);
23847
- }
23848
- else if (group.selected(id) || group.mixed(id)) unselect(id);
23849
- else select(id);
23970
+ const leafIds = getLeafDescendants(id);
23971
+ if (leafIds.every((lid) => group.selected(lid))) removeLeaves(leafIds);
23972
+ else for (const lid of leafIds) group.select(lid);
23850
23973
  }
23974
+ else if (group.selected(id) || group.mixed(id)) unselect(id);
23975
+ else select(id);
23851
23976
  }
23852
23977
  function selectAll() {
23853
23978
  if (toValue(group.disabled)) return;
@@ -24470,6 +24595,7 @@ const _sfc_main$165 = /* @__PURE__ */ defineComponent({
24470
24595
  "aria-expanded": hasContent.value ? toValue(ticket.isOpen) : void 0,
24471
24596
  "aria-level": toValue(ticket.depth) + 1,
24472
24597
  "aria-posinset": ticket.position(),
24598
+ "aria-current": toValue(ticket.isActive) ? "true" : void 0,
24473
24599
  "aria-selected": toValue(ticket.isSelected),
24474
24600
  "aria-setsize": ticket.siblings().length,
24475
24601
  "data-active": toValue(ticket.isActive) || void 0,
@@ -26454,7 +26580,8 @@ function createRowSpanning(options) {
26454
26580
  function createDataGrid(_options = {}) {
26455
26581
  const { editing: editingOptions, preserveRowOrder = false, rowSpanning, ...options } = _options;
26456
26582
  const table = createDataTable(options);
26457
- const sortable = createSortable({ reactive: true });
26583
+ const sortable = createSortable();
26584
+ const sortableProxy = useProxyRegistry(sortable);
26458
26585
  const dirty = shallowRef(false);
26459
26586
  table.on("register:ticket", (ticket) => {
26460
26587
  sortable.register({
@@ -26469,7 +26596,7 @@ function createDataGrid(_options = {}) {
26469
26596
  sortable.clear();
26470
26597
  dirty.value = false;
26471
26598
  });
26472
- const order = toRef(() => sortable.keys());
26599
+ const order = toRef(() => sortableProxy.keys);
26473
26600
  const sortedIds = computed(() => {
26474
26601
  const buckets = /* @__PURE__ */ new Map();
26475
26602
  for (const ticket of table.values()) {
@@ -26496,6 +26623,7 @@ function createDataGrid(_options = {}) {
26496
26623
  dirty.value = true;
26497
26624
  }
26498
26625
  function reset() {
26626
+ if (!dirty.value) return;
26499
26627
  if (sortable.size > 0) sortable.reorder(table.keys());
26500
26628
  dirty.value = false;
26501
26629
  }
@@ -29112,7 +29240,7 @@ function createFeatures(_options = {}) {
29112
29240
  const shouldSelect = /* @__PURE__ */ isBoolean(value) ? value === true : /* @__PURE__ */ isObject(value) && /* @__PURE__ */ isBoolean(value.$value) && value.$value === true;
29113
29241
  registry.upsert(id, { value });
29114
29242
  if (shouldSelect) registry.select(id);
29115
- else registry.unselect(id);
29243
+ else registry.selectedIds.delete(id);
29116
29244
  } else register({
29117
29245
  id,
29118
29246
  value
@@ -29983,7 +30111,11 @@ var V0RtlAdapter = class extends RtlAdapter {
29983
30111
  const head = app._context?.provides?.usehead ?? app._context?.provides?.head;
29984
30112
  if (head?.push) {
29985
30113
  const entry = head.push({ htmlAttrs: { dir: context.isRtl.value ? "rtl" : "ltr" } });
29986
- if (entry?.dispose) this.dispose = entry.dispose;
30114
+ const stop = watch(context.isRtl, (rtl) => entry.patch?.({ htmlAttrs: { dir: rtl ? "rtl" : "ltr" } }));
30115
+ this.dispose = () => {
30116
+ stop();
30117
+ entry.dispose?.();
30118
+ };
29987
30119
  }
29988
30120
  }
29989
30121
  }