@vuetify/v0 0.0.16 → 0.0.18

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.
@@ -216,7 +216,7 @@ function debounce(fn, delay) {
216
216
 
217
217
  //#endregion
218
218
  //#region src/components/Atom/Atom.vue
219
- const _sfc_main$26 = /* @__PURE__ */ defineComponent({
219
+ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
220
220
  name: "Atom",
221
221
  __name: "Atom",
222
222
  props: {
@@ -247,7 +247,7 @@ const _sfc_main$26 = /* @__PURE__ */ defineComponent({
247
247
  };
248
248
  }
249
249
  });
250
- var Atom_default = _sfc_main$26;
250
+ var Atom_default = _sfc_main$27;
251
251
 
252
252
  //#endregion
253
253
  //#region src/composables/createContext/index.ts
@@ -513,7 +513,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
513
513
  const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
514
514
  const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
515
515
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
516
- const version = "0.0.16";
516
+ const version = "0.0.18";
517
517
  const __LOGGER_ENABLED__ = false;
518
518
 
519
519
  //#endregion
@@ -700,12 +700,12 @@ function createFallbackLogger(namespace = "v0:logger") {
700
700
  return `[${namespace} ${type}] ${message}`;
701
701
  }
702
702
  return {
703
- debug: (message, ...args) => console.log(format(message, "debug"), ...args),
704
- info: (message, ...args) => console.log(format(message, "info"), ...args),
705
- warn: (message, ...args) => console.log(format(message, "warn"), ...args),
706
- error: (message, ...args) => console.log(format(message, "error"), ...args),
707
- trace: (message, ...args) => console.log(format(message, "trace"), ...args),
708
- fatal: (message, ...args) => console.log(format(message, "fatal"), ...args),
703
+ debug: (message, ...args) => console.debug(format(message, "debug"), ...args),
704
+ info: (message, ...args) => console.info(format(message, "info"), ...args),
705
+ warn: (message, ...args) => console.warn(format(message, "warn"), ...args),
706
+ error: (message, ...args) => console.error(format(message, "error"), ...args),
707
+ trace: (message, ...args) => console.trace(format(message, "trace"), ...args),
708
+ fatal: (message, ...args) => console.error(format(message, "fatal"), ...args),
709
709
  level: () => {},
710
710
  current: () => "info",
711
711
  enabled: () => true,
@@ -733,7 +733,7 @@ function createFallbackLogger(namespace = "v0:logger") {
733
733
  * ```
734
734
  */
735
735
  function createLoggerContext(_options = {}) {
736
- const { namespace = "v0:logger",...options } = _options;
736
+ const { namespace = "v0:logger", ...options } = _options;
737
737
  const [useLoggerContext, _provideLoggerContext] = createContext(namespace);
738
738
  const context = createLogger(options);
739
739
  function provideLoggerContext(_context = context, app) {
@@ -768,7 +768,7 @@ function createLoggerContext(_options = {}) {
768
768
  * ```
769
769
  */
770
770
  function createLoggerPlugin(_options = {}) {
771
- const { namespace = "v0:logger",...options } = _options;
771
+ const { namespace = "v0:logger", ...options } = _options;
772
772
  const [, provideLoggerContext, context] = createLoggerContext({
773
773
  ...options,
774
774
  namespace
@@ -863,6 +863,8 @@ function useRegistry(options) {
863
863
  let indexDependentCount = 0;
864
864
  let needsReindex = false;
865
865
  let minDirtyIndex = Infinity;
866
+ let batching = false;
867
+ let pendingEmits = [];
866
868
  function emit(event, data = void 0) {
867
869
  if (!events) return;
868
870
  const cbs = listeners.get(event);
@@ -938,24 +940,19 @@ function useRegistry(options) {
938
940
  function assign(value, id) {
939
941
  const bucket = catalog.get(value);
940
942
  if (bucket) {
941
- if (/* @__PURE__ */ isArray(bucket)) {
942
- if (!bucket.includes(id)) bucket.push(id);
943
- } else if (bucket !== id) catalog.set(value, [bucket, id]);
944
- } else catalog.set(value, id);
943
+ if (!bucket.includes(id)) bucket.push(id);
944
+ } else catalog.set(value, [id]);
945
945
  }
946
946
  function unassign(value, id) {
947
947
  const bucket = catalog.get(value);
948
948
  if (!bucket) return;
949
- if (/* @__PURE__ */ isArray(bucket)) {
950
- const next = bucket.filter((v) => v !== id);
951
- if (next.length === 0) catalog.delete(value);
952
- else if (next.length === 1) catalog.set(value, next[0]);
953
- else catalog.set(value, next);
954
- } else if (bucket === id) catalog.delete(value);
949
+ const next = bucket.filter((v) => v !== id);
950
+ if (next.length === 0) catalog.delete(value);
951
+ else catalog.set(value, next);
955
952
  }
956
953
  function keys() {
957
954
  const cached = cache.get("keys");
958
- if (cached != void 0) return cached;
955
+ if (!/* @__PURE__ */ isUndefined(cached)) return cached;
959
956
  const keys$1 = Array.from(collection.keys());
960
957
  cache.set("keys", keys$1);
961
958
  return keys$1;
@@ -985,8 +982,30 @@ function useRegistry(options) {
985
982
  emit("clear:registry");
986
983
  }
987
984
  function invalidate() {
985
+ if (batching) return;
988
986
  if (cache.size > 0) cache.clear();
989
987
  }
988
+ function queueEmit(event, data) {
989
+ if (batching) pendingEmits.push({
990
+ event,
991
+ data
992
+ });
993
+ else emit(event, data);
994
+ }
995
+ function batch(fn) {
996
+ if (batching) return fn();
997
+ batching = true;
998
+ pendingEmits = [];
999
+ try {
1000
+ const result = fn();
1001
+ if (cache.size > 0) cache.clear();
1002
+ for (const { event, data } of pendingEmits) emit(event, data);
1003
+ return result;
1004
+ } finally {
1005
+ batching = false;
1006
+ pendingEmits = [];
1007
+ }
1008
+ }
990
1009
  function reindex() {
991
1010
  const startIndex = minDirtyIndex === Infinity ? 0 : minDirtyIndex;
992
1011
  if (startIndex === 0) {
@@ -1037,7 +1056,7 @@ function useRegistry(options) {
1037
1056
  directory.set(ticket.index, ticket.id);
1038
1057
  assign(ticket.value, ticket.id);
1039
1058
  invalidate();
1040
- emit("register:ticket", ticket);
1059
+ queueEmit("register:ticket", ticket);
1041
1060
  return ticket;
1042
1061
  }
1043
1062
  function unregister(id) {
@@ -1047,15 +1066,12 @@ function useRegistry(options) {
1047
1066
  collection.delete(ticket.id);
1048
1067
  directory.delete(ticket.index);
1049
1068
  unassign(ticket.value, ticket.id);
1050
- invalidate();
1069
+ const willReindex = indexDependentCount > 0 && ticket.index < collection.size;
1070
+ if (!willReindex) invalidate();
1051
1071
  emit("unregister:ticket", ticket);
1052
- if (indexDependentCount > 0 && ticket.index < collection.size) {
1053
- minDirtyIndex = Math.min(minDirtyIndex, ticket.index);
1054
- reindex();
1055
- } else {
1056
- minDirtyIndex = Math.min(minDirtyIndex, ticket.index);
1057
- needsReindex = true;
1058
- }
1072
+ minDirtyIndex = Math.min(minDirtyIndex, ticket.index);
1073
+ if (willReindex) reindex();
1074
+ else needsReindex = true;
1059
1075
  }
1060
1076
  function offboard(ids) {
1061
1077
  const removed = [];
@@ -1112,8 +1128,9 @@ function useRegistry(options) {
1112
1128
  unregister,
1113
1129
  reindex,
1114
1130
  seek,
1131
+ batch,
1115
1132
  onboard(registrations) {
1116
- return registrations.map((registration) => register(registration));
1133
+ return batch(() => registrations.map((registration) => register(registration)));
1117
1134
  },
1118
1135
  offboard,
1119
1136
  get size() {
@@ -1124,8 +1141,7 @@ function useRegistry(options) {
1124
1141
  /**
1125
1142
  * Creates a new registry context.
1126
1143
  *
1127
- * @param namespace The namespace for the registry context.
1128
- * @param options The options for the registry context.
1144
+ * @param options The options for the registry context, including `namespace` (defaults to `'v0:registry'`) and `events`.
1129
1145
  * @template Z The type of registry ticket that extends RegistryTicket. Use this to add custom properties to tickets.
1130
1146
  * @template E The type of registry context that extends RegistryContext<Z>. Use this when extending the registry with additional methods.
1131
1147
  * @returns A new registry context.
@@ -1151,7 +1167,7 @@ function useRegistry(options) {
1151
1167
  * ```
1152
1168
  */
1153
1169
  function createRegistryContext(_options = {}) {
1154
- const { namespace = "v0:registry",...options } = _options;
1170
+ const { namespace = "v0:registry", ...options } = _options;
1155
1171
  const [useRegistryContext, _provideRegistryContext] = createContext(namespace);
1156
1172
  const context = useRegistry(options);
1157
1173
  function provideRegistryContext(_context = context, app) {
@@ -1224,14 +1240,14 @@ function createRegistryContext(_options = {}) {
1224
1240
  * ```
1225
1241
  */
1226
1242
  function createSelection(_options = {}) {
1227
- const { disabled = false, enroll = false, mandatory = false, multiple = false,...options } = _options;
1243
+ const { disabled = false, enroll = false, mandatory = false, multiple = false, ...options } = _options;
1228
1244
  const registry = useRegistry(options);
1229
1245
  const selectedIds = shallowReactive(/* @__PURE__ */ new Set());
1230
1246
  const selectedItems = computed(() => {
1231
- return new Set(Array.from(selectedIds).map((id) => registry.get(id)));
1247
+ return new Set(Array.from(selectedIds).map((id) => registry.get(id)).filter((item) => !/* @__PURE__ */ isUndefined(item)));
1232
1248
  });
1233
1249
  const selectedValues = computed(() => {
1234
- return new Set(Array.from(selectedItems.value).map((item) => item?.value));
1250
+ return new Set(Array.from(selectedItems.value).map((item) => item.value));
1235
1251
  });
1236
1252
  function seek(direction = "first", from) {
1237
1253
  return registry.seek(direction, from, (ticket) => !toValue(ticket.disabled));
@@ -1242,16 +1258,19 @@ function createSelection(_options = {}) {
1242
1258
  if (ticket) select(ticket.id);
1243
1259
  }
1244
1260
  function select(id) {
1261
+ if (toValue(disabled)) return;
1245
1262
  const item = registry.get(id);
1246
1263
  if (!item || toValue(item.disabled)) return;
1247
1264
  if (!multiple) selectedIds.clear();
1248
1265
  selectedIds.add(id);
1249
1266
  }
1250
1267
  function unselect(id) {
1268
+ if (toValue(disabled)) return;
1251
1269
  if (mandatory && selectedIds.size === 1) return;
1252
1270
  selectedIds.delete(id);
1253
1271
  }
1254
1272
  function toggle(id) {
1273
+ if (toValue(disabled)) return;
1255
1274
  if (selected(id)) unselect(id);
1256
1275
  else select(id);
1257
1276
  }
@@ -1270,7 +1289,7 @@ function createSelection(_options = {}) {
1270
1289
  id
1271
1290
  };
1272
1291
  const ticket = registry.register(item);
1273
- if (enroll && !toValue(item.disabled)) selectedIds.add(ticket.id);
1292
+ if (enroll && !toValue(disabled) && !toValue(item.disabled)) selectedIds.add(ticket.id);
1274
1293
  if (mandatory === "force") mandate();
1275
1294
  return ticket;
1276
1295
  }
@@ -1341,7 +1360,7 @@ function createSelection(_options = {}) {
1341
1360
  * ```
1342
1361
  */
1343
1362
  function createSelectionContext(_options = {}) {
1344
- const { namespace = "v0:selection",...options } = _options;
1363
+ const { namespace = "v0:selection", ...options } = _options;
1345
1364
  const [useSelectionContext, _provideSelectionContext] = createContext(namespace);
1346
1365
  const context = createSelection(options);
1347
1366
  function provideSelectionContext(_context = context, app) {
@@ -1379,7 +1398,7 @@ function useSelection(namespace = "v0:selection") {
1379
1398
  //#endregion
1380
1399
  //#region src/components/Avatar/AvatarRoot.vue
1381
1400
  const [useAvatarRoot, provideAvatarContext] = createContext();
1382
- const _sfc_main$25 = /* @__PURE__ */ defineComponent({
1401
+ const _sfc_main$26 = /* @__PURE__ */ defineComponent({
1383
1402
  name: "AvatarRoot",
1384
1403
  __name: "AvatarRoot",
1385
1404
  props: {
@@ -1404,11 +1423,11 @@ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
1404
1423
  };
1405
1424
  }
1406
1425
  });
1407
- var AvatarRoot_default = _sfc_main$25;
1426
+ var AvatarRoot_default = _sfc_main$26;
1408
1427
 
1409
1428
  //#endregion
1410
1429
  //#region src/components/Avatar/AvatarFallback.vue
1411
- const _sfc_main$24 = /* @__PURE__ */ defineComponent({
1430
+ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
1412
1431
  name: "AvatarFallback",
1413
1432
  __name: "AvatarFallback",
1414
1433
  props: {
@@ -1433,11 +1452,11 @@ const _sfc_main$24 = /* @__PURE__ */ defineComponent({
1433
1452
  };
1434
1453
  }
1435
1454
  });
1436
- var AvatarFallback_default = _sfc_main$24;
1455
+ var AvatarFallback_default = _sfc_main$25;
1437
1456
 
1438
1457
  //#endregion
1439
1458
  //#region src/components/Avatar/AvatarImage.vue
1440
- const _sfc_main$23 = /* @__PURE__ */ defineComponent({
1459
+ const _sfc_main$24 = /* @__PURE__ */ defineComponent({
1441
1460
  name: "AvatarImage",
1442
1461
  inheritAttrs: false,
1443
1462
  __name: "AvatarImage",
@@ -1497,14 +1516,19 @@ const _sfc_main$23 = /* @__PURE__ */ defineComponent({
1497
1516
  };
1498
1517
  }
1499
1518
  });
1500
- var AvatarImage_default = _sfc_main$23;
1519
+ var AvatarImage_default = _sfc_main$24;
1501
1520
 
1502
1521
  //#endregion
1503
1522
  //#region src/components/Avatar/index.ts
1523
+ /**
1524
+ * Avatar component with sub-components for building avatars.
1525
+ *
1526
+ * @see https://0.vuetifyjs.com/components/avatar
1527
+ */
1504
1528
  const Avatar = {
1505
- Fallback: AvatarFallback_default,
1529
+ Root: AvatarRoot_default,
1506
1530
  Image: AvatarImage_default,
1507
- Root: AvatarRoot_default
1531
+ Fallback: AvatarFallback_default
1508
1532
  };
1509
1533
 
1510
1534
  //#endregion
@@ -1599,12 +1623,9 @@ function useProxyModel(registry, model, options) {
1599
1623
  const pending = new Set(modelAsArray);
1600
1624
  for (const value of modelAsArray) {
1601
1625
  const ids = registry.browse(value);
1602
- if (/* @__PURE__ */ isArray(ids)) {
1626
+ if (ids) {
1603
1627
  for (const id of ids) registry.select(id);
1604
1628
  pending.delete(value);
1605
- } else if (ids) {
1606
- registry.select(ids);
1607
- pending.delete(value);
1608
1629
  }
1609
1630
  }
1610
1631
  const registryWatch = watch(registry.selectedValues, (val) => {
@@ -1618,8 +1639,7 @@ function useProxyModel(registry, model, options) {
1618
1639
  const targetIds = /* @__PURE__ */ new Set();
1619
1640
  for (const value of transformIn(val)) {
1620
1641
  const ids = registry.browse(value);
1621
- if (/* @__PURE__ */ isArray(ids)) for (const single of ids) targetIds.add(single);
1622
- else if (ids) targetIds.add(ids);
1642
+ if (ids) for (const id of ids) targetIds.add(id);
1623
1643
  }
1624
1644
  if (multiple) {
1625
1645
  for (const id of currentIds.difference(targetIds)) registry.selectedIds.delete(id);
@@ -1657,7 +1677,7 @@ function useProxyModel(registry, model, options) {
1657
1677
  //#endregion
1658
1678
  //#region src/components/ExpansionPanel/ExpansionPanelRoot.vue
1659
1679
  const [useExpansionPanelRoot, provideExpansionPanelSelection] = createContext();
1660
- const _sfc_main$22 = /* @__PURE__ */ defineComponent({
1680
+ const _sfc_main$23 = /* @__PURE__ */ defineComponent({
1661
1681
  name: "ExpansionPanelRoot",
1662
1682
  __name: "ExpansionPanelRoot",
1663
1683
  props: /* @__PURE__ */ mergeModels({
@@ -1714,12 +1734,12 @@ const _sfc_main$22 = /* @__PURE__ */ defineComponent({
1714
1734
  };
1715
1735
  }
1716
1736
  });
1717
- var ExpansionPanelRoot_default = _sfc_main$22;
1737
+ var ExpansionPanelRoot_default = _sfc_main$23;
1718
1738
 
1719
1739
  //#endregion
1720
1740
  //#region src/components/ExpansionPanel/ExpansionPanelItem.vue
1721
1741
  const [useExpansionPanelItem, provideExpansionPanelItem] = createContext({ suffix: "item" });
1722
- const _sfc_main$21 = /* @__PURE__ */ defineComponent({
1742
+ const _sfc_main$22 = /* @__PURE__ */ defineComponent({
1723
1743
  name: "ExpansionPanelItem",
1724
1744
  __name: "ExpansionPanelItem",
1725
1745
  props: {
@@ -1763,11 +1783,11 @@ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
1763
1783
  };
1764
1784
  }
1765
1785
  });
1766
- var ExpansionPanelItem_default = _sfc_main$21;
1786
+ var ExpansionPanelItem_default = _sfc_main$22;
1767
1787
 
1768
1788
  //#endregion
1769
1789
  //#region src/components/ExpansionPanel/ExpansionPanelActivator.vue
1770
- const _sfc_main$20 = /* @__PURE__ */ defineComponent({
1790
+ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
1771
1791
  name: "ExpansionPanelActivator",
1772
1792
  __name: "ExpansionPanelActivator",
1773
1793
  props: {
@@ -1813,11 +1833,11 @@ const _sfc_main$20 = /* @__PURE__ */ defineComponent({
1813
1833
  };
1814
1834
  }
1815
1835
  });
1816
- var ExpansionPanelActivator_default = _sfc_main$20;
1836
+ var ExpansionPanelActivator_default = _sfc_main$21;
1817
1837
 
1818
1838
  //#endregion
1819
1839
  //#region src/components/ExpansionPanel/ExpansionPanelContent.vue
1820
- const _sfc_main$19 = /* @__PURE__ */ defineComponent({
1840
+ const _sfc_main$20 = /* @__PURE__ */ defineComponent({
1821
1841
  name: "ExpansionPanelContent",
1822
1842
  __name: "ExpansionPanelContent",
1823
1843
  props: {
@@ -1848,11 +1868,11 @@ const _sfc_main$19 = /* @__PURE__ */ defineComponent({
1848
1868
  };
1849
1869
  }
1850
1870
  });
1851
- var ExpansionPanelContent_default = _sfc_main$19;
1871
+ var ExpansionPanelContent_default = _sfc_main$20;
1852
1872
 
1853
1873
  //#endregion
1854
1874
  //#region src/components/ExpansionPanel/ExpansionPanelHeader.vue
1855
- const _sfc_main$18 = /* @__PURE__ */ defineComponent({
1875
+ const _sfc_main$19 = /* @__PURE__ */ defineComponent({
1856
1876
  name: "ExpansionPanelHeader",
1857
1877
  __name: "ExpansionPanelHeader",
1858
1878
  props: {
@@ -1877,10 +1897,15 @@ const _sfc_main$18 = /* @__PURE__ */ defineComponent({
1877
1897
  };
1878
1898
  }
1879
1899
  });
1880
- var ExpansionPanelHeader_default = _sfc_main$18;
1900
+ var ExpansionPanelHeader_default = _sfc_main$19;
1881
1901
 
1882
1902
  //#endregion
1883
1903
  //#region src/components/ExpansionPanel/index.ts
1904
+ /**
1905
+ * ExpansionPanel component with sub-components for building expansion panels.
1906
+ *
1907
+ * @see https://0.vuetifyjs.com/components/expansion-panels
1908
+ */
1884
1909
  const ExpansionPanel = {
1885
1910
  Root: ExpansionPanelRoot_default,
1886
1911
  Item: ExpansionPanelItem_default,
@@ -2049,7 +2074,7 @@ function useProxyRegistry(registry, options) {
2049
2074
  * ```
2050
2075
  */
2051
2076
  function createGroup(_options = {}) {
2052
- const { mandatory = false, multiple = true,...options } = _options;
2077
+ const { mandatory = false, multiple = true, ...options } = _options;
2053
2078
  const selection = createSelection({
2054
2079
  ...options,
2055
2080
  mandatory,
@@ -2059,10 +2084,10 @@ function createGroup(_options = {}) {
2059
2084
  const proxy = useProxyRegistry(selection);
2060
2085
  const mixedIds = shallowReactive(/* @__PURE__ */ new Set());
2061
2086
  const selectedIndexes = computed(() => {
2062
- return new Set(Array.from(selection.selectedItems.value).map((item) => item?.index));
2087
+ return new Set(Array.from(selection.selectedItems.value).map((item) => item?.index).filter((index) => !/* @__PURE__ */ isUndefined(index)));
2063
2088
  });
2064
2089
  const mixedItems = computed(() => {
2065
- return new Set(Array.from(mixedIds).map((id) => selection.get(id)));
2090
+ return new Set(Array.from(mixedIds).map((id) => selection.get(id)).filter((item) => !/* @__PURE__ */ isUndefined(item)));
2066
2091
  });
2067
2092
  function mixed(id) {
2068
2093
  return mixedIds.has(id);
@@ -2129,10 +2154,10 @@ function createGroup(_options = {}) {
2129
2154
  if (items.length === 0) return false;
2130
2155
  return items.every((item) => selection.selectedIds.has(item.id));
2131
2156
  });
2132
- const isMixed = toRef(() => {
2157
+ const isNoneSelected = computed(() => selection.selectedIds.size === 0);
2158
+ const isMixed = computed(() => {
2133
2159
  return mixedIds.size > 0 || !isNoneSelected.value && !isAllSelected.value;
2134
2160
  });
2135
- const isNoneSelected = toRef(() => selection.selectedIds.size === 0);
2136
2161
  function selectAll() {
2137
2162
  for (const item of selectableItems.value) {
2138
2163
  mixedIds.delete(item.id);
@@ -2204,7 +2229,7 @@ function createGroup(_options = {}) {
2204
2229
  * ```
2205
2230
  */
2206
2231
  function createGroupContext(_options = {}) {
2207
- const { namespace = "v0:group",...options } = _options;
2232
+ const { namespace = "v0:group", ...options } = _options;
2208
2233
  const [useGroupContext, _provideGroupContext] = createContext(namespace);
2209
2234
  const context = createGroup(options);
2210
2235
  function provideGroupContext(_context = context, app) {
@@ -2242,7 +2267,7 @@ function useGroup(namespace = "v0:group") {
2242
2267
  //#endregion
2243
2268
  //#region src/components/Group/GroupRoot.vue
2244
2269
  const [useGroupRoot, provideGroupRoot] = createContext();
2245
- const _sfc_main$17 = /* @__PURE__ */ defineComponent({
2270
+ const _sfc_main$18 = /* @__PURE__ */ defineComponent({
2246
2271
  name: "GroupRoot",
2247
2272
  __name: "GroupRoot",
2248
2273
  props: /* @__PURE__ */ mergeModels({
@@ -2263,7 +2288,7 @@ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
2263
2288
  "modelValue": {},
2264
2289
  "modelModifiers": {}
2265
2290
  }),
2266
- emits: ["update:modelValue"],
2291
+ emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
2267
2292
  setup(__props) {
2268
2293
  const model = useModel(__props, "modelValue");
2269
2294
  const group = createGroup({
@@ -2292,11 +2317,11 @@ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
2292
2317
  };
2293
2318
  }
2294
2319
  });
2295
- var GroupRoot_default = _sfc_main$17;
2320
+ var GroupRoot_default = _sfc_main$18;
2296
2321
 
2297
2322
  //#endregion
2298
2323
  //#region src/components/Group/GroupItem.vue
2299
- const _sfc_main$16 = /* @__PURE__ */ defineComponent({
2324
+ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
2300
2325
  name: "GroupItem",
2301
2326
  __name: "GroupItem",
2302
2327
  props: {
@@ -2332,7 +2357,8 @@ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
2332
2357
  mix: ticket.mix,
2333
2358
  unmix: ticket.unmix,
2334
2359
  attrs: {
2335
- "aria-selected": toValue(ticket.isSelected),
2360
+ "role": "checkbox",
2361
+ "aria-checked": toValue(ticket.isMixed) ? "mixed" : toValue(ticket.isSelected),
2336
2362
  "aria-disabled": toValue(isDisabled),
2337
2363
  "data-selected": toValue(ticket.isSelected) || void 0,
2338
2364
  "data-disabled": toValue(isDisabled) || void 0,
@@ -2344,10 +2370,15 @@ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
2344
2370
  };
2345
2371
  }
2346
2372
  });
2347
- var GroupItem_default = _sfc_main$16;
2373
+ var GroupItem_default = _sfc_main$17;
2348
2374
 
2349
2375
  //#endregion
2350
2376
  //#region src/components/Group/index.ts
2377
+ /**
2378
+ * Group component with sub-components for multi-selection.
2379
+ *
2380
+ * @see https://0.vuetifyjs.com/components/group
2381
+ */
2351
2382
  const Group = {
2352
2383
  Root: GroupRoot_default,
2353
2384
  Item: GroupItem_default
@@ -2455,7 +2486,7 @@ function createHydrationContext(_options = {}) {
2455
2486
  * ```
2456
2487
  */
2457
2488
  function createHydrationPlugin(_options = {}) {
2458
- const { namespace = "v0:hydration",...options } = _options;
2489
+ const { namespace = "v0:hydration", ...options } = _options;
2459
2490
  const [, provideHydrationContext, context] = createHydrationContext({
2460
2491
  ...options,
2461
2492
  namespace
@@ -2828,7 +2859,7 @@ function createOverflow(options = {}) {
2828
2859
  * ```
2829
2860
  */
2830
2861
  function createOverflowContext(_options = {}) {
2831
- const { namespace = "v0:overflow",...options } = _options;
2862
+ const { namespace = "v0:overflow", ...options } = _options;
2832
2863
  const [useOverflowContext, _provideOverflowContext] = createContext(namespace);
2833
2864
  const context = createOverflow(options);
2834
2865
  function provideOverflowContext(_context = context, app) {
@@ -2944,7 +2975,7 @@ function createPagination(_options = {}) {
2944
2975
  };
2945
2976
  }
2946
2977
  function filter(array) {
2947
- return array.filter(Boolean);
2978
+ return array.filter((item) => item !== false);
2948
2979
  }
2949
2980
  return {
2950
2981
  page,
@@ -3059,7 +3090,7 @@ function createPagination(_options = {}) {
3059
3090
  * ```
3060
3091
  */
3061
3092
  function createPaginationContext(_options = {}) {
3062
- const { namespace = "v0:pagination",...options } = _options;
3093
+ const { namespace = "v0:pagination", ...options } = _options;
3063
3094
  const [usePaginationContext, _providePaginationContext] = createContext(namespace);
3064
3095
  const context = createPagination(options);
3065
3096
  function providePaginationContext(_context = context, app) {
@@ -3157,7 +3188,7 @@ function usePagination(namespace = "v0:pagination") {
3157
3188
  * ```
3158
3189
  */
3159
3190
  function createSingle(_options = {}) {
3160
- const { mandatory = false, multiple = false,...options } = _options;
3191
+ const { mandatory = false, multiple = false, ...options } = _options;
3161
3192
  const registry = createSelection({
3162
3193
  ...options,
3163
3194
  mandatory,
@@ -3214,7 +3245,7 @@ function createSingle(_options = {}) {
3214
3245
  * ```
3215
3246
  */
3216
3247
  function createSingleContext(_options = {}) {
3217
- const { namespace = "v0:single",...options } = _options;
3248
+ const { namespace = "v0:single", ...options } = _options;
3218
3249
  const [useSingleContext, _provideSingleContext] = createContext(namespace);
3219
3250
  const context = createSingle(options);
3220
3251
  function provideSingleContext(_context = context, app) {
@@ -3402,7 +3433,7 @@ function createTokens(tokens = {}, options = {}) {
3402
3433
  * ```
3403
3434
  */
3404
3435
  function createTokensContext(_options) {
3405
- const { namespace = "v0:tokens", tokens = {},...options } = _options;
3436
+ const { namespace = "v0:tokens", tokens = {}, ...options } = _options;
3406
3437
  const [useTokensContext, _provideTokensContext] = createContext(namespace);
3407
3438
  const context = createTokens(tokens, options);
3408
3439
  function provideTokensContext(_context = context, app) {
@@ -3567,7 +3598,7 @@ var Vuetify0LocaleAdapter = class {
3567
3598
  * @see https://0.vuetifyjs.com/composables/plugins/use-locale
3568
3599
  */
3569
3600
  function createLocale(_options = {}) {
3570
- const { adapter = new Vuetify0LocaleAdapter(), messages = {},...options } = _options;
3601
+ const { adapter = new Vuetify0LocaleAdapter(), messages = {}, ...options } = _options;
3571
3602
  const tokens = createTokens(messages);
3572
3603
  const registry = createSingle(options);
3573
3604
  for (const id in messages) {
@@ -3643,7 +3674,7 @@ function createLocaleFallback() {
3643
3674
  * ```
3644
3675
  */
3645
3676
  function createLocaleContext(_options = {}) {
3646
- const { namespace = "v0:locale",...options } = _options;
3677
+ const { namespace = "v0:locale", ...options } = _options;
3647
3678
  const [useLocaleContext, _provideLocaleContext] = createContext(namespace);
3648
3679
  const context = createLocale(options);
3649
3680
  function provideLocaleContext(_context = context, app) {
@@ -3664,7 +3695,7 @@ function createLocaleContext(_options = {}) {
3664
3695
  * @see https://0.vuetifyjs.com/composables/plugins/use-locale
3665
3696
  */
3666
3697
  function createLocalePlugin(_options = {}) {
3667
- const { namespace = "v0:locale", adapter = new Vuetify0LocaleAdapter(), messages = {},...options } = _options;
3698
+ const { namespace = "v0:locale", adapter = new Vuetify0LocaleAdapter(), messages = {}, ...options } = _options;
3668
3699
  const [, provideLocaleContext, context] = createLocaleContext({
3669
3700
  ...options,
3670
3701
  namespace,
@@ -3700,7 +3731,7 @@ function useLocale(namespace = "v0:locale") {
3700
3731
  const [usePaginationRoot, providePaginationRoot] = createContext();
3701
3732
  const [usePaginationControls, providePaginationControls] = createContext({ suffix: "controls" });
3702
3733
  const [usePaginationItems, providePaginationItems] = createContext({ suffix: "items" });
3703
- const _sfc_main$15 = /* @__PURE__ */ defineComponent({
3734
+ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
3704
3735
  name: "PaginationRoot",
3705
3736
  __name: "PaginationRoot",
3706
3737
  props: /* @__PURE__ */ mergeModels({
@@ -3748,7 +3779,7 @@ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
3748
3779
  page,
3749
3780
  visible: computed(() => {
3750
3781
  const totalCap = overflow.capacity.value;
3751
- if (totalCap === Infinity) return __props.totalVisible ?? Infinity;
3782
+ if (totalCap === Infinity) return __props.totalVisible ?? 7;
3752
3783
  const pageCap = Math.max(0, totalCap - controls.size);
3753
3784
  const noVisible = /* @__PURE__ */ isNullOrUndefined(__props.totalVisible);
3754
3785
  if (pageCap > 0) return noVisible ? pageCap : Math.min(__props.totalVisible, pageCap);
@@ -3773,7 +3804,10 @@ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
3773
3804
  next: pagination.next,
3774
3805
  prev: pagination.prev,
3775
3806
  select: pagination.select,
3776
- attrs: { "aria-label": locale.t("Pagination.label", void 0, "Pagination") }
3807
+ attrs: {
3808
+ "aria-label": locale.t("Pagination.label", void 0, "Pagination"),
3809
+ "role": __props.as === "nav" ? void 0 : "navigation"
3810
+ }
3777
3811
  }));
3778
3812
  providePaginationRoot(__props.namespace, pagination);
3779
3813
  providePaginationControls(__props.namespace, controls);
@@ -3792,11 +3826,11 @@ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
3792
3826
  };
3793
3827
  }
3794
3828
  });
3795
- var PaginationRoot_default = _sfc_main$15;
3829
+ var PaginationRoot_default = _sfc_main$16;
3796
3830
 
3797
3831
  //#endregion
3798
3832
  //#region src/components/Pagination/PaginationEllipsis.vue
3799
- const _sfc_main$14 = /* @__PURE__ */ defineComponent({
3833
+ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
3800
3834
  name: "PaginationEllipsis",
3801
3835
  __name: "PaginationEllipsis",
3802
3836
  props: {
@@ -3837,11 +3871,11 @@ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
3837
3871
  };
3838
3872
  }
3839
3873
  });
3840
- var PaginationEllipsis_default = _sfc_main$14;
3874
+ var PaginationEllipsis_default = _sfc_main$15;
3841
3875
 
3842
3876
  //#endregion
3843
3877
  //#region src/components/Pagination/PaginationFirst.vue
3844
- const _sfc_main$13 = /* @__PURE__ */ defineComponent({
3878
+ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
3845
3879
  name: "PaginationFirst",
3846
3880
  __name: "PaginationFirst",
3847
3881
  props: {
@@ -3873,9 +3907,10 @@ const _sfc_main$13 = /* @__PURE__ */ defineComponent({
3873
3907
  first,
3874
3908
  attrs: {
3875
3909
  "aria-label": locale.t("Pagination.first", void 0, "Go to first page"),
3876
- "aria-disabled": __props.as === "button" ? void 0 : isDisabled.value,
3910
+ "aria-disabled": isDisabled.value,
3877
3911
  "data-disabled": isDisabled.value || void 0,
3878
3912
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
3913
+ "tabindex": isDisabled.value ? -1 : 0,
3879
3914
  "type": __props.as === "button" ? "button" : void 0,
3880
3915
  "onClick": first
3881
3916
  }
@@ -3895,11 +3930,11 @@ const _sfc_main$13 = /* @__PURE__ */ defineComponent({
3895
3930
  };
3896
3931
  }
3897
3932
  });
3898
- var PaginationFirst_default = _sfc_main$13;
3933
+ var PaginationFirst_default = _sfc_main$14;
3899
3934
 
3900
3935
  //#endregion
3901
3936
  //#region src/components/Pagination/PaginationItem.vue
3902
- const _sfc_main$12 = /* @__PURE__ */ defineComponent({
3937
+ const _sfc_main$13 = /* @__PURE__ */ defineComponent({
3903
3938
  name: "PaginationItem",
3904
3939
  __name: "PaginationItem",
3905
3940
  props: {
@@ -3941,9 +3976,11 @@ const _sfc_main$12 = /* @__PURE__ */ defineComponent({
3941
3976
  attrs: {
3942
3977
  "aria-label": ariaLabel.value,
3943
3978
  "aria-current": isSelected.value ? "page" : void 0,
3979
+ "aria-disabled": __props.disabled,
3944
3980
  "data-selected": isSelected.value || void 0,
3945
3981
  "data-disabled": __props.disabled || void 0,
3946
3982
  "disabled": __props.as === "button" ? __props.disabled : void 0,
3983
+ "tabindex": __props.disabled ? -1 : 0,
3947
3984
  "type": __props.as === "button" ? "button" : void 0,
3948
3985
  "onClick": select
3949
3986
  }
@@ -3957,17 +3994,17 @@ const _sfc_main$12 = /* @__PURE__ */ defineComponent({
3957
3994
  as: __props.as,
3958
3995
  renderless: __props.renderless
3959
3996
  }), {
3960
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
3997
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)), () => [createTextVNode(toDisplayString(__props.value), 1)])]),
3961
3998
  _: 3
3962
3999
  }, 16, ["as", "renderless"]);
3963
4000
  };
3964
4001
  }
3965
4002
  });
3966
- var PaginationItem_default = _sfc_main$12;
4003
+ var PaginationItem_default = _sfc_main$13;
3967
4004
 
3968
4005
  //#endregion
3969
4006
  //#region src/components/Pagination/PaginationLast.vue
3970
- const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4007
+ const _sfc_main$12 = /* @__PURE__ */ defineComponent({
3971
4008
  name: "PaginationLast",
3972
4009
  __name: "PaginationLast",
3973
4010
  props: {
@@ -3999,9 +4036,10 @@ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
3999
4036
  last,
4000
4037
  attrs: {
4001
4038
  "aria-label": locale.t("Pagination.last", void 0, "Go to last page"),
4002
- "aria-disabled": __props.as === "button" ? void 0 : isDisabled.value,
4039
+ "aria-disabled": isDisabled.value,
4003
4040
  "data-disabled": isDisabled.value || void 0,
4004
4041
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
4042
+ "tabindex": isDisabled.value ? -1 : 0,
4005
4043
  "type": __props.as === "button" ? "button" : void 0,
4006
4044
  "onClick": last
4007
4045
  }
@@ -4021,11 +4059,11 @@ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4021
4059
  };
4022
4060
  }
4023
4061
  });
4024
- var PaginationLast_default = _sfc_main$11;
4062
+ var PaginationLast_default = _sfc_main$12;
4025
4063
 
4026
4064
  //#endregion
4027
4065
  //#region src/components/Pagination/PaginationNext.vue
4028
- const _sfc_main$10 = /* @__PURE__ */ defineComponent({
4066
+ const _sfc_main$11 = /* @__PURE__ */ defineComponent({
4029
4067
  name: "PaginationNext",
4030
4068
  __name: "PaginationNext",
4031
4069
  props: {
@@ -4057,9 +4095,10 @@ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
4057
4095
  next,
4058
4096
  attrs: {
4059
4097
  "aria-label": locale.t("Pagination.next", void 0, "Go to next page"),
4060
- "aria-disabled": __props.as === "button" ? void 0 : isDisabled.value,
4098
+ "aria-disabled": isDisabled.value,
4061
4099
  "data-disabled": isDisabled.value || void 0,
4062
4100
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
4101
+ "tabindex": isDisabled.value ? -1 : 0,
4063
4102
  "type": __props.as === "button" ? "button" : void 0,
4064
4103
  "onClick": next
4065
4104
  }
@@ -4079,11 +4118,11 @@ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
4079
4118
  };
4080
4119
  }
4081
4120
  });
4082
- var PaginationNext_default = _sfc_main$10;
4121
+ var PaginationNext_default = _sfc_main$11;
4083
4122
 
4084
4123
  //#endregion
4085
4124
  //#region src/components/Pagination/PaginationPrev.vue
4086
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
4125
+ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
4087
4126
  name: "PaginationPrev",
4088
4127
  __name: "PaginationPrev",
4089
4128
  props: {
@@ -4115,9 +4154,10 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
4115
4154
  prev,
4116
4155
  attrs: {
4117
4156
  "aria-label": locale.t("Pagination.prev", void 0, "Go to previous page"),
4118
- "aria-disabled": __props.as === "button" ? void 0 : isDisabled.value,
4157
+ "aria-disabled": isDisabled.value,
4119
4158
  "data-disabled": isDisabled.value || void 0,
4120
4159
  "disabled": __props.as === "button" ? isDisabled.value : void 0,
4160
+ "tabindex": isDisabled.value ? -1 : 0,
4121
4161
  "type": __props.as === "button" ? "button" : void 0,
4122
4162
  "onClick": prev
4123
4163
  }
@@ -4137,10 +4177,61 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
4137
4177
  };
4138
4178
  }
4139
4179
  });
4140
- var PaginationPrev_default = _sfc_main$9;
4180
+ var PaginationPrev_default = _sfc_main$10;
4181
+
4182
+ //#endregion
4183
+ //#region src/components/Pagination/PaginationStatus.vue
4184
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
4185
+ name: "PaginationStatus",
4186
+ __name: "PaginationStatus",
4187
+ props: {
4188
+ namespace: { default: "v0:pagination" },
4189
+ as: { default: "div" },
4190
+ renderless: { type: Boolean }
4191
+ },
4192
+ setup(__props) {
4193
+ const locale = useLocale();
4194
+ const pagination = usePaginationRoot(__props.namespace);
4195
+ const text = shallowRef("");
4196
+ watch(() => pagination.page.value, (page, prevPage) => {
4197
+ if (prevPage === void 0) return;
4198
+ setTimeout(() => {
4199
+ text.value = locale.t("Pagination.status", {
4200
+ page,
4201
+ pages: pagination.pages
4202
+ }, `Page ${page} of ${pagination.pages}`);
4203
+ }, 100);
4204
+ });
4205
+ const slotProps = toRef(() => ({
4206
+ page: pagination.page.value,
4207
+ pages: pagination.pages,
4208
+ text: text.value,
4209
+ attrs: {
4210
+ "aria-atomic": true,
4211
+ "aria-live": "polite",
4212
+ "role": "status"
4213
+ }
4214
+ }));
4215
+ return (_ctx, _cache) => {
4216
+ return openBlock(), createBlock(unref(Atom_default), mergeProps(slotProps.value.attrs, {
4217
+ as: __props.as,
4218
+ renderless: __props.renderless
4219
+ }), {
4220
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)), () => [createTextVNode(toDisplayString(text.value), 1)])]),
4221
+ _: 3
4222
+ }, 16, ["as", "renderless"]);
4223
+ };
4224
+ }
4225
+ });
4226
+ var PaginationStatus_default = _sfc_main$9;
4141
4227
 
4142
4228
  //#endregion
4143
4229
  //#region src/components/Pagination/index.ts
4230
+ /**
4231
+ * Pagination component with sub-components for building pagination controls.
4232
+ *
4233
+ * @see https://0.vuetifyjs.com/components/pagination
4234
+ */
4144
4235
  const Pagination = {
4145
4236
  Root: PaginationRoot_default,
4146
4237
  Item: PaginationItem_default,
@@ -4148,7 +4239,8 @@ const Pagination = {
4148
4239
  Prev: PaginationPrev_default,
4149
4240
  Ellipsis: PaginationEllipsis_default,
4150
4241
  Next: PaginationNext_default,
4151
- Last: PaginationLast_default
4242
+ Last: PaginationLast_default,
4243
+ Status: PaginationStatus_default
4152
4244
  };
4153
4245
 
4154
4246
  //#endregion
@@ -4295,6 +4387,11 @@ var PopoverContent_default = _sfc_main$6;
4295
4387
 
4296
4388
  //#endregion
4297
4389
  //#region src/components/Popover/index.ts
4390
+ /**
4391
+ * Popover component with sub-components for building popovers.
4392
+ *
4393
+ * @see https://0.vuetifyjs.com/components/popover
4394
+ */
4298
4395
  const Popover = {
4299
4396
  Root: PopoverRoot_default,
4300
4397
  Anchor: PopoverAnchor_default,
@@ -4329,7 +4426,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
4329
4426
  "modelValue": {},
4330
4427
  "modelModifiers": {}
4331
4428
  }),
4332
- emits: ["update:modelValue"],
4429
+ emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
4333
4430
  setup(__props) {
4334
4431
  const model = useModel(__props, "modelValue");
4335
4432
  const selection = createSelection({
@@ -4404,6 +4501,11 @@ var SelectionItem_default = _sfc_main$4;
4404
4501
 
4405
4502
  //#endregion
4406
4503
  //#region src/components/Selection/index.ts
4504
+ /**
4505
+ * Selection component with sub-components for managing item selection state.
4506
+ *
4507
+ * @see https://0.vuetifyjs.com/components/selection
4508
+ */
4407
4509
  const Selection = {
4408
4510
  Root: SelectionRoot_default,
4409
4511
  Item: SelectionItem_default
@@ -4506,6 +4608,11 @@ var SingleItem_default = _sfc_main$2;
4506
4608
 
4507
4609
  //#endregion
4508
4610
  //#region src/components/Single/index.ts
4611
+ /**
4612
+ * Single component with sub-components for building single-selection interfaces.
4613
+ *
4614
+ * @see https://0.vuetifyjs.com/components/single
4615
+ */
4509
4616
  const Single = {
4510
4617
  Root: SingleRoot_default,
4511
4618
  Item: SingleItem_default
@@ -4596,7 +4703,7 @@ const Single = {
4596
4703
  * ```
4597
4704
  */
4598
4705
  function createStep(_options = {}) {
4599
- const { circular = false,...options } = _options;
4706
+ const { circular = false, ...options } = _options;
4600
4707
  const registry = createSingle(options);
4601
4708
  function first() {
4602
4709
  const ticket = registry.seek("first");
@@ -4672,7 +4779,7 @@ function createStep(_options = {}) {
4672
4779
  * ```
4673
4780
  */
4674
4781
  function createStepContext(_options = {}) {
4675
- const { namespace = "v0:step",...options } = _options;
4782
+ const { namespace = "v0:step", ...options } = _options;
4676
4783
  const [useStepContext, _provideStepContext] = createContext(namespace);
4677
4784
  const context = createStep(options);
4678
4785
  function provideStepContext(_context = context, app) {
@@ -4810,6 +4917,11 @@ var StepItem_default = _sfc_main;
4810
4917
 
4811
4918
  //#endregion
4812
4919
  //#region src/components/Step/index.ts
4920
+ /**
4921
+ * Step component with sub-components for building stepper navigation.
4922
+ *
4923
+ * @see https://0.vuetifyjs.com/components/step
4924
+ */
4813
4925
  const Step = {
4814
4926
  Root: StepRoot_default,
4815
4927
  Item: StepItem_default
@@ -5203,7 +5315,7 @@ function createBreakpoints(_options = {}) {
5203
5315
  * ```
5204
5316
  */
5205
5317
  function createBreakpointsContext(_options = {}) {
5206
- const { namespace = "v0:breakpoints",...options } = _options;
5318
+ const { namespace = "v0:breakpoints", ...options } = _options;
5207
5319
  const [useBreakpointsContext, _provideBreakpointsContext] = createContext(namespace);
5208
5320
  const context = createBreakpoints(options);
5209
5321
  function provideBreakpointsContext(_context = context, app) {
@@ -5247,7 +5359,7 @@ function createBreakpointsContext(_options = {}) {
5247
5359
  * ```
5248
5360
  */
5249
5361
  function createBreakpointsPlugin(_options = {}) {
5250
- const { namespace = "v0:breakpoints",...options } = _options;
5362
+ const { namespace = "v0:breakpoints", ...options } = _options;
5251
5363
  const [, provideBreakpointsContext, context] = createBreakpointsContext({
5252
5364
  ...options,
5253
5365
  namespace
@@ -5348,7 +5460,7 @@ function useBreakpoints(namespace = "v0:breakpoints") {
5348
5460
  * ```
5349
5461
  */
5350
5462
  function createFeatures(_options = {}) {
5351
- const { features,...options } = _options;
5463
+ const { features, ...options } = _options;
5352
5464
  const tokens = createTokens(features, { flat: true });
5353
5465
  const registry = createGroup(options);
5354
5466
  for (const [id, { value }] of tokens.entries()) register({
@@ -5402,7 +5514,7 @@ function createFeatures(_options = {}) {
5402
5514
  * ```
5403
5515
  */
5404
5516
  function createFeaturesContext(_options = {}) {
5405
- const { namespace = "v0:features",...options } = _options;
5517
+ const { namespace = "v0:features", ...options } = _options;
5406
5518
  const [useFeaturesContext, _provideFeaturesContext] = createContext(namespace);
5407
5519
  const context = createFeatures(options);
5408
5520
  function provideFeaturesContext(_context = context, app) {
@@ -5441,7 +5553,7 @@ function createFeaturesContext(_options = {}) {
5441
5553
  * ```
5442
5554
  */
5443
5555
  function createFeaturesPlugin(_options = {}) {
5444
- const { namespace = "v0:features",...options } = _options;
5556
+ const { namespace = "v0:features", ...options } = _options;
5445
5557
  const [, provideFeaturesContext, context] = createFeaturesContext({
5446
5558
  ...options,
5447
5559
  namespace
@@ -5495,6 +5607,7 @@ function useFeatures(namespace = "v0:features") {
5495
5607
  * - Case-insensitive filtering
5496
5608
  * - Custom filter functions
5497
5609
  * - Reactive updates
5610
+ * - Context-based DI support
5498
5611
  * - Perfect for search, multi-criteria filtering
5499
5612
  *
5500
5613
  * Filters arrays based on query strings with configurable matching strategies.
@@ -5512,6 +5625,89 @@ function defaultFilter(query, item, keys, mode = "some") {
5512
5625
  return false;
5513
5626
  }
5514
5627
  /**
5628
+ * Creates a filter context with pre-configured options.
5629
+ *
5630
+ * @param options The filter options
5631
+ * @template Z The type of the items
5632
+ * @template E The type of the filter context
5633
+ * @returns A filter context
5634
+ *
5635
+ * @see https://0.vuetifyjs.com/composables/utilities/use-filter
5636
+ *
5637
+ * @example
5638
+ * ```ts
5639
+ * import { createFilter } from '@vuetify/v0'
5640
+ *
5641
+ * const filter = createFilter({
5642
+ * mode: 'intersection',
5643
+ * keys: ['name', 'email'],
5644
+ * })
5645
+ *
5646
+ * const { items } = filter.apply(query, users)
5647
+ * ```
5648
+ */
5649
+ function createFilter(options = {}) {
5650
+ const { customFilter, keys, mode = "some" } = options;
5651
+ const filterFunction = customFilter ?? ((q, i) => defaultFilter(q, i, keys, mode));
5652
+ const query = toRef("");
5653
+ function apply(_query, items) {
5654
+ const itemsRef = isRef(items) ? items : toRef(() => items);
5655
+ const queryRef = toRef(_query);
5656
+ return { items: computed(() => {
5657
+ const q = toValue(queryRef);
5658
+ query.value = q;
5659
+ const queries = (Array.isArray(q) ? q : [q]).filter((q$1) => String(q$1).trim());
5660
+ if (queries.length === 0) return itemsRef.value;
5661
+ const queryParam = queries.length === 1 ? queries[0] : queries;
5662
+ return itemsRef.value.filter((item) => filterFunction(queryParam, item));
5663
+ }) };
5664
+ }
5665
+ return {
5666
+ mode,
5667
+ keys,
5668
+ customFilter,
5669
+ query,
5670
+ apply
5671
+ };
5672
+ }
5673
+ /**
5674
+ * Creates a filter context with dependency injection support.
5675
+ *
5676
+ * @param options The filter context options
5677
+ * @template Z The type of the items
5678
+ * @template E The type of the filter context
5679
+ * @returns A trinity tuple: [useContext, provideContext, defaultContext]
5680
+ *
5681
+ * @see https://0.vuetifyjs.com/composables/utilities/use-filter
5682
+ *
5683
+ * @example
5684
+ * ```ts
5685
+ * import { createFilterContext } from '@vuetify/v0'
5686
+ *
5687
+ * export const [useSearchFilter, provideSearchFilter, searchFilter] = createFilterContext({
5688
+ * namespace: 'app:search',
5689
+ * mode: 'union',
5690
+ * keys: ['title', 'description'],
5691
+ * })
5692
+ *
5693
+ * // In parent component
5694
+ * provideSearchFilter()
5695
+ *
5696
+ * // In child component
5697
+ * const filter = useSearchFilter()
5698
+ * const { items } = filter.apply(query, products)
5699
+ * ```
5700
+ */
5701
+ function createFilterContext(_options = {}) {
5702
+ const { namespace = "v0:filter", ...options } = _options;
5703
+ const [useFilterContext$1, _provideFilterContext] = createContext(namespace);
5704
+ const context = createFilter(options);
5705
+ function provideFilterContext(_context = context, app) {
5706
+ return _provideFilterContext(_context, app);
5707
+ }
5708
+ return createTrinity(useFilterContext$1, provideFilterContext, context);
5709
+ }
5710
+ /**
5515
5711
  * A reusable function for filtering an array of items.
5516
5712
  *
5517
5713
  * @param query The query to filter by.
@@ -5540,17 +5736,30 @@ function defaultFilter(query, item, keys, mode = "some") {
5540
5736
  * ```
5541
5737
  */
5542
5738
  function useFilter(query, items, options = {}) {
5543
- const { customFilter, keys, mode = "some" } = options;
5544
- const filterFunction = customFilter ?? ((q, i) => defaultFilter(q, i, keys, mode));
5545
- const itemsRef = isRef(items) ? items : toRef(() => items);
5546
- const queryRef = toRef(query);
5547
- return { items: computed(() => {
5548
- const q = toValue(queryRef);
5549
- const queries = (Array.isArray(q) ? q : [q]).filter((q$1) => String(q$1).trim());
5550
- if (queries.length === 0) return itemsRef.value;
5551
- const queryParam = queries.length === 1 ? queries[0] : queries;
5552
- return itemsRef.value.filter((item) => filterFunction(queryParam, item));
5553
- }) };
5739
+ return createFilter(options).apply(query, items);
5740
+ }
5741
+ /**
5742
+ * Returns the current filter context from dependency injection.
5743
+ *
5744
+ * @param namespace The namespace for the filter context. Defaults to `'v0:filter'`.
5745
+ * @template Z The type of the items.
5746
+ * @template E The type of the filter context.
5747
+ * @returns The current filter context.
5748
+ *
5749
+ * @see https://0.vuetifyjs.com/composables/utilities/use-filter
5750
+ *
5751
+ * @example
5752
+ * ```vue
5753
+ * <script setup lang="ts">
5754
+ * import { useFilterContext } from '@vuetify/v0'
5755
+ *
5756
+ * const filter = useFilterContext()
5757
+ * const { items } = filter.apply(query, products)
5758
+ * <\/script>
5759
+ * ```
5760
+ */
5761
+ function useFilterContext(namespace = "v0:filter") {
5762
+ return useContext(namespace);
5554
5763
  }
5555
5764
 
5556
5765
  //#endregion
@@ -5739,7 +5948,7 @@ function createForm(options) {
5739
5948
  * ```
5740
5949
  */
5741
5950
  function createFormContext(_options = {}) {
5742
- const { namespace = "v0:form",...options } = _options;
5951
+ const { namespace = "v0:form", ...options } = _options;
5743
5952
  const [useFormContext, _provideFormContext] = createContext(namespace);
5744
5953
  const context = createForm(options);
5745
5954
  function provideFormContext(_context = context, app) {
@@ -6229,7 +6438,7 @@ var Vuetify0PermissionAdapter = class extends PermissionAdapter {
6229
6438
  * ```
6230
6439
  */
6231
6440
  function createPermissions(_options = {}) {
6232
- const { adapter = new Vuetify0PermissionAdapter(), permissions = {},...options } = _options;
6441
+ const { adapter = new Vuetify0PermissionAdapter(), permissions = {}, ...options } = _options;
6233
6442
  const record = {};
6234
6443
  for (const role in permissions) {
6235
6444
  if (!record[role]) record[role] = {};
@@ -6271,7 +6480,7 @@ function createPermissions(_options = {}) {
6271
6480
  * ```
6272
6481
  */
6273
6482
  function createPermissionsContext(_options = {}) {
6274
- const { namespace = "v0:permissions",...options } = _options;
6483
+ const { namespace = "v0:permissions", ...options } = _options;
6275
6484
  const [usePermissionsContext, _providePermissionsContext] = createContext(namespace);
6276
6485
  const context = createPermissions(options);
6277
6486
  function providePermissionsContext(_context = context, app) {
@@ -6310,7 +6519,7 @@ function createPermissionsContext(_options = {}) {
6310
6519
  * ```
6311
6520
  */
6312
6521
  function createPermissionsPlugin(_options = {}) {
6313
- const { namespace = "v0:permissions",...options } = _options;
6522
+ const { namespace = "v0:permissions", ...options } = _options;
6314
6523
  const [, providePermissionContext, context] = createPermissionsContext({
6315
6524
  ...options,
6316
6525
  namespace
@@ -6398,7 +6607,7 @@ function usePermissions(namespace = "v0:permissions") {
6398
6607
  * ```
6399
6608
  */
6400
6609
  function createQueue(_options = {}) {
6401
- const { timeout: _timeout = 3e3,...options } = _options;
6610
+ const { timeout: _timeout = 3e3, ...options } = _options;
6402
6611
  const registry = useRegistry({
6403
6612
  ...options,
6404
6613
  events: true
@@ -6493,7 +6702,6 @@ function createQueue(_options = {}) {
6493
6702
  /**
6494
6703
  * Creates a new queue context.
6495
6704
  *
6496
- * @param namespace The namespace for the queue context.
6497
6705
  * @param options The options for the queue context.
6498
6706
  * @template Z The type of the queue ticket.
6499
6707
  * @template E The type of the queue context.
@@ -6505,13 +6713,13 @@ function createQueue(_options = {}) {
6505
6713
  * ```ts
6506
6714
  * import { createQueueContext } from '@vuetify/v0'
6507
6715
  *
6508
- * export const [useQueue, provideQueue] = createQueueContext('v0:queue', {
6716
+ * export const [useQueue, provideQueue, context] = createQueueContext({
6509
6717
  * timeout: 5000,
6510
6718
  * })
6511
6719
  * ```
6512
6720
  */
6513
- function createQueueContext(_options) {
6514
- const { namespace,...options } = _options;
6721
+ function createQueueContext(_options = {}) {
6722
+ const { namespace = "v0:queue", ...options } = _options;
6515
6723
  const [useQueueContext, _provideQueueContext] = createContext(namespace);
6516
6724
  const context = createQueue(options);
6517
6725
  function provideQueueContext(_context = context, app) {
@@ -6669,7 +6877,7 @@ function createStorage(options = {}) {
6669
6877
  };
6670
6878
  }
6671
6879
  function createStorageContext(_options = {}) {
6672
- const { namespace = "v0:storage",...options } = _options;
6880
+ const { namespace = "v0:storage", ...options } = _options;
6673
6881
  const [useStorageContext, _provideStorageContext] = createContext(namespace);
6674
6882
  const context = createStorage(options);
6675
6883
  function provideStorageContext(_context = context, app) {
@@ -6699,7 +6907,7 @@ function createStorageContext(_options = {}) {
6699
6907
  * ```
6700
6908
  */
6701
6909
  function createStoragePlugin(_options = {}) {
6702
- const { namespace = "v0:storage",...options } = _options;
6910
+ const { namespace = "v0:storage", ...options } = _options;
6703
6911
  const [, provideStorageContext, context] = createStorageContext({
6704
6912
  ...options,
6705
6913
  namespace
@@ -6872,14 +7080,14 @@ var Vuetify0ThemeAdapter = class extends ThemeAdapter {
6872
7080
  * ```
6873
7081
  */
6874
7082
  function createTheme(_options = {}) {
6875
- const { themes = {}, palette = {},...options } = _options;
7083
+ const { themes = {}, palette = {}, ...options } = _options;
6876
7084
  const tokens = createTokens({
6877
7085
  palette,
6878
7086
  ...themes
6879
7087
  }, { flat: true });
6880
7088
  const registry = createSingle(options);
6881
7089
  for (const id in themes) {
6882
- const { colors: value,...theme } = themes[id];
7090
+ const { colors: value, ...theme } = themes[id];
6883
7091
  register({
6884
7092
  id,
6885
7093
  value,
@@ -6961,7 +7169,7 @@ function createTheme(_options = {}) {
6961
7169
  * ```
6962
7170
  */
6963
7171
  function createThemeContext(_options = {}) {
6964
- const { namespace = "v0:theme",...options } = _options;
7172
+ const { namespace = "v0:theme", ...options } = _options;
6965
7173
  const [useThemeContext, _provideThemeContext] = createContext(namespace);
6966
7174
  const context = createTheme(options);
6967
7175
  function provideThemeContext(_context = context, app) {
@@ -7011,7 +7219,7 @@ function createThemeContext(_options = {}) {
7011
7219
  * ```
7012
7220
  */
7013
7221
  function createThemePlugin(_options = {}) {
7014
- const { adapter = new Vuetify0ThemeAdapter(), namespace = "v0:theme", palette = {}, themes = {}, target,...options } = _options;
7222
+ const { adapter = new Vuetify0ThemeAdapter(), namespace = "v0:theme", palette = {}, themes = {}, target, ...options } = _options;
7015
7223
  const [, provideThemeContext, context] = createThemeContext({
7016
7224
  ...options,
7017
7225
  namespace,
@@ -7100,7 +7308,7 @@ function useTheme(namespace = "v0:theme") {
7100
7308
  * ```
7101
7309
  */
7102
7310
  function createTimeline(_options = {}) {
7103
- const { size = 10,...options } = _options;
7311
+ const { size = 10, ...options } = _options;
7104
7312
  const registry = useRegistry(options);
7105
7313
  const stack = [];
7106
7314
  const overflow = [];
@@ -7175,7 +7383,7 @@ function createTimeline(_options = {}) {
7175
7383
  * ```
7176
7384
  */
7177
7385
  function createTimelineContext(_options = {}) {
7178
- const { namespace = "v0:timeline",...options } = _options;
7386
+ const { namespace = "v0:timeline", ...options } = _options;
7179
7387
  const [useTimelineContext, _provideTimelineContext] = createContext(namespace);
7180
7388
  const context = createTimeline(options);
7181
7389
  function provideTimelineContext(_context = context, app) {
@@ -7560,6 +7768,11 @@ function useVirtual(items, _options = {}) {
7560
7768
  element.value.scrollTop = totalHeight;
7561
7769
  }
7562
7770
  }
7771
+ onScopeDispose(() => {
7772
+ cancelAnimationFrame(raf);
7773
+ cancelAnimationFrame(rebuildRaf);
7774
+ cancelAnimationFrame(edgeRaf);
7775
+ });
7563
7776
  return {
7564
7777
  element,
7565
7778
  items: computedItems,
@@ -7575,4 +7788,4 @@ function useVirtual(items, _options = {}) {
7575
7788
  }
7576
7789
 
7577
7790
  //#endregion
7578
- export { Atom_default as Atom, Avatar, COMMON_ELEMENTS, ConsolaLoggerAdapter, ExpansionPanel, Group, IN_BROWSER, MemoryAdapter, Pagination, PermissionAdapter, PinoLoggerAdapter, Popover, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, Selection, Single, Step, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createQueue, createQueueContext, createRegistryContext, createSelection, createSelectionContext, createSingle, createSingleContext, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, debounce, genId, isArray, isBoolean, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isString, isSymbol, isUndefined, mergeDeep, provideAvatarContext, provideContext, provideExpansionPanelItem, provideExpansionPanelSelection, provideGroupRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideSelectionRoot, provideSingleRoot, provideStepRoot, range, toArray, toReactive, useAvatarRoot, useBreakpoints, useContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHydration, useIntersectionObserver, useKeydown, useLocale, useLogger, useMutationObserver, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopoverContext, useProxyModel, useProxyRegistry, useQueue, useRegistry, useResizeObserver, useSelection, useSelectionRoot, useSingle, useSingleRoot, useStep, useStepRoot, useStorage, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useWindowEventListener, version };
7791
+ export { Atom_default as Atom, Avatar, AvatarFallback_default as AvatarFallback, AvatarImage_default as AvatarImage, AvatarRoot_default as AvatarRoot, COMMON_ELEMENTS, ConsolaLoggerAdapter, ExpansionPanel, ExpansionPanelActivator_default as ExpansionPanelActivator, ExpansionPanelContent_default as ExpansionPanelContent, ExpansionPanelHeader_default as ExpansionPanelHeader, ExpansionPanelItem_default as ExpansionPanelItem, ExpansionPanelRoot_default as ExpansionPanelRoot, Group, GroupItem_default as GroupItem, GroupRoot_default as GroupRoot, IN_BROWSER, MemoryAdapter, Pagination, PaginationEllipsis_default as PaginationEllipsis, PaginationFirst_default as PaginationFirst, PaginationItem_default as PaginationItem, PaginationLast_default as PaginationLast, PaginationNext_default as PaginationNext, PaginationPrev_default as PaginationPrev, PaginationRoot_default as PaginationRoot, PaginationStatus_default as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, PopoverAnchor_default as PopoverAnchor, PopoverContent_default as PopoverContent, PopoverRoot_default as PopoverRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, Selection, SelectionItem_default as SelectionItem, SelectionRoot_default as SelectionRoot, Single, SingleItem_default as SingleItem, SingleRoot_default as SingleRoot, Step, StepItem_default as StepItem, StepRoot_default as StepRoot, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createQueue, createQueueContext, createRegistryContext, createSelection, createSelectionContext, createSingle, createSingleContext, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, debounce, genId, isArray, isBoolean, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isString, isSymbol, isUndefined, mergeDeep, provideAvatarContext, provideContext, provideExpansionPanelItem, provideExpansionPanelSelection, provideGroupRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideSelectionRoot, provideSingleRoot, provideStepRoot, range, toArray, toReactive, useAvatarRoot, useBreakpoints, useContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useFilterContext, useForm, useGroup, useGroupRoot, useHydration, useIntersectionObserver, useKeydown, useLocale, useLogger, useMutationObserver, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopoverContext, useProxyModel, useProxyRegistry, useQueue, useRegistry, useResizeObserver, useSelection, useSelectionRoot, useSingle, useSingleRoot, useStep, useStepRoot, useStorage, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useWindowEventListener, version };