@vuetify/v0 0.1.5 → 0.1.6

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 (86) hide show
  1. package/dist/{adapter-Cmeg49W9.mjs → adapter-Bjs_Nx_J.mjs} +8 -10
  2. package/dist/{adapter-D2JoR-4d.d.mts → adapter-CLs-OrSN.d.mts} +4 -4
  3. package/dist/browser/index.js +1645 -273
  4. package/dist/components/index.d.mts +8 -8
  5. package/dist/components/index.mjs +28 -28
  6. package/dist/{components-BbbGkTcN.mjs → components-GiQh_RfQ.mjs} +1101 -110
  7. package/dist/composables/index.d.mts +7 -7
  8. package/dist/composables/index.mjs +27 -27
  9. package/dist/constants/index.mjs +1 -1
  10. package/dist/{createDataTable-cNf6DdHz.mjs → createDataTable-lSofI5rU.mjs} +5 -5
  11. package/dist/{createGroup-BrZPZudL.mjs → createGroup-CCb7Zfyw.mjs} +6 -5
  12. package/dist/{createPagination-Wc_vRGNQ.mjs → createPagination-lagznd8i.mjs} +2 -2
  13. package/dist/{createSelection-BURpoE3p.mjs → createSelection-Zo4RQpYe.mjs} +217 -61
  14. package/dist/{createSingle-BE1vHaZy.mjs → createSingle-BH9wNDrS.mjs} +2 -2
  15. package/dist/{createTokens-jwf8-iGn.mjs → createTokens-Cu1efg9Z.mjs} +21 -3
  16. package/dist/{createTrinity-DkwPrPRS.mjs → createTrinity-Cii8-B2r.mjs} +1 -1
  17. package/dist/data-table/adapters/client/index.d.mts +2 -2
  18. package/dist/data-table/adapters/client/index.mjs +7 -7
  19. package/dist/data-table/adapters/index.d.mts +4 -4
  20. package/dist/data-table/adapters/index.mjs +9 -9
  21. package/dist/data-table/adapters/server/index.d.mts +2 -2
  22. package/dist/data-table/adapters/server/index.mjs +5 -5
  23. package/dist/data-table/adapters/virtual/index.d.mts +2 -2
  24. package/dist/data-table/adapters/virtual/index.mjs +7 -7
  25. package/dist/data-table/index.d.mts +5 -5
  26. package/dist/data-table/index.mjs +19 -19
  27. package/dist/date/index.mjs +2 -2
  28. package/dist/features/adapters/posthog/index.mjs +2 -2
  29. package/dist/features/index.d.mts +6 -6
  30. package/dist/features/index.mjs +12 -12
  31. package/dist/{globals-vN-O052q.mjs → globals-D6FBsWDI.mjs} +1 -1
  32. package/dist/{index-DdWxDPX3.d.mts → index-DIK84tM4.d.mts} +1 -1
  33. package/dist/{index-BTMzRHep.d.mts → index-De0SQt1w.d.mts} +801 -50
  34. package/dist/{index-DRax9EgT.d.mts → index-DlUIZN-F.d.mts} +1125 -373
  35. package/dist/index.d.mts +8 -8
  36. package/dist/index.mjs +28 -28
  37. package/dist/json/attributes.json +196 -12
  38. package/dist/json/importMap.json +40 -0
  39. package/dist/json/tags.json +86 -0
  40. package/dist/json/web-types.json +605 -13
  41. package/dist/locale/adapters/index.mjs +3 -3
  42. package/dist/locale/adapters/v0/index.mjs +3 -3
  43. package/dist/locale/index.d.mts +6 -6
  44. package/dist/locale/index.mjs +12 -12
  45. package/dist/logger/adapters/index.mjs +4 -4
  46. package/dist/logger/adapters/pino/index.mjs +3 -3
  47. package/dist/logger/adapters/v0/index.mjs +3 -3
  48. package/dist/logger/index.d.mts +6 -6
  49. package/dist/logger/index.mjs +6 -6
  50. package/dist/permissions/adapters/index.d.mts +7 -7
  51. package/dist/permissions/adapters/index.mjs +3 -3
  52. package/dist/permissions/adapters/v0/index.d.mts +7 -7
  53. package/dist/permissions/adapters/v0/index.mjs +3 -3
  54. package/dist/permissions/index.d.mts +6 -6
  55. package/dist/permissions/index.mjs +10 -10
  56. package/dist/{pino-DFxkZLiu.mjs → pino-BD5PCzAF.mjs} +1 -1
  57. package/dist/{posthog-BOUoZTTf.mjs → posthog-BxaG8sYi.mjs} +1 -1
  58. package/dist/{server-B-HWxaTQ.d.mts → server-CGAeOGPC.d.mts} +1 -1
  59. package/dist/{server-C2R2POGE.mjs → server-DgOdFYMU.mjs} +1 -1
  60. package/dist/storage/index.d.mts +6 -6
  61. package/dist/storage/index.mjs +26 -26
  62. package/dist/theme/adapters/index.d.mts +6 -6
  63. package/dist/theme/adapters/index.mjs +3 -3
  64. package/dist/theme/adapters/v0/index.d.mts +6 -6
  65. package/dist/theme/adapters/v0/index.mjs +3 -3
  66. package/dist/theme/index.d.mts +6 -6
  67. package/dist/theme/index.mjs +11 -11
  68. package/dist/{toArray-VIn8vYt3.mjs → toArray-BBZH-G2X.mjs} +1 -1
  69. package/dist/{useClickOutside-DIi0kjN5.mjs → useClickOutside-Bm_3mbcT.mjs} +306 -98
  70. package/dist/{useFeatures-6O7EPJUS.mjs → useFeatures-BS4mit8z.mjs} +4 -4
  71. package/dist/{useLocale-DHjbekzS.mjs → useLocale-DJJmg-wv.mjs} +6 -6
  72. package/dist/{useLogger-BXqiUvt2.mjs → useLogger-C8G5jgNk.mjs} +4 -4
  73. package/dist/{usePermissions-DFacFVqO.mjs → usePermissions-C5Mkotol.mjs} +4 -4
  74. package/dist/{useTheme-D0_1mjTw.mjs → useTheme-BBnASLr3.mjs} +4 -4
  75. package/dist/utilities/index.mjs +2 -2
  76. package/dist/{utilities-Dx8wzGa5.mjs → utilities-CcJtp9Gx.mjs} +1 -1
  77. package/dist/{v0-CfSj99gF.mjs → v0-BWBSVkew.mjs} +2 -2
  78. package/dist/{v0-BNXo1ecc.d.mts → v0-Bh8d1j_p.d.mts} +1 -1
  79. package/dist/{v0-BPzPP8C5.d.mts → v0-CVr15VcY.d.mts} +1 -1
  80. package/dist/{v0-Dc5mcpQs.mjs → v0-CWUF_HqP.mjs} +2 -2
  81. package/dist/{v0-BYqmw3qM.mjs → v0-DtO_ICXr.mjs} +1 -1
  82. package/dist/{v0-Dwufx8ae.mjs → v0-DzvhDU1W.mjs} +2 -2
  83. package/dist/{v0-C8DBv9mh.mjs → v0-lua6ffdk.mjs} +2 -2
  84. package/dist/{virtual-BoTGK6HT.mjs → virtual-BEOqkQvm.mjs} +2 -2
  85. package/dist/{virtual-A4e1yrdn.d.mts → virtual-CVb9hRUU.d.mts} +1 -1
  86. package/package.json +1 -1
@@ -85,7 +85,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
85
85
  const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
86
86
  const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
87
87
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
88
- const version = "0.1.5";
88
+ const version = "0.1.6";
89
89
  /* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
90
90
  const __LOGGER_ENABLED__ = false;
91
91
 
@@ -528,7 +528,7 @@ function debounce(fn, delay) {
528
528
  * serving as the foundation for all other components that need polymorphic
529
529
  * rendering capabilities.
530
530
  */
531
- const _sfc_main$60 = /* @__PURE__ */ defineComponent({
531
+ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
532
532
  name: "Atom",
533
533
  __name: "Atom",
534
534
  props: {
@@ -559,7 +559,7 @@ const _sfc_main$60 = /* @__PURE__ */ defineComponent({
559
559
  };
560
560
  }
561
561
  });
562
- var Atom_default = _sfc_main$60;
562
+ var Atom_default = _sfc_main$68;
563
563
 
564
564
  //#endregion
565
565
  //#region src/composables/createContext/index.ts
@@ -1417,6 +1417,23 @@ function createRegistry(options) {
1417
1417
  needsReindex = true;
1418
1418
  });
1419
1419
  }
1420
+ function move(id, toIndex) {
1421
+ if (needsReindex) reindex();
1422
+ const ticket = collection.get(id);
1423
+ if (!ticket) return void 0;
1424
+ const size = collection.size;
1425
+ const target = /* @__PURE__ */ clamp(toIndex, 0, size - 1);
1426
+ if (ticket.index === target) return ticket;
1427
+ const items = Array.from(collection.entries());
1428
+ const fromIndex = items.findIndex(([key]) => key === id);
1429
+ const [entry] = items.splice(fromIndex, 1);
1430
+ items.splice(target, 0, entry);
1431
+ collection.clear();
1432
+ for (const [key, value] of items) collection.set(key, value);
1433
+ minDirtyIndex = Math.min(ticket.index, target);
1434
+ reindex();
1435
+ return ticket;
1436
+ }
1420
1437
  function seek(direction = "first", from, predicate) {
1421
1438
  if (collection.size === 0) return void 0;
1422
1439
  if (needsReindex) reindex();
@@ -1458,6 +1475,7 @@ function createRegistry(options) {
1458
1475
  register,
1459
1476
  unregister,
1460
1477
  reindex,
1478
+ move,
1461
1479
  seek,
1462
1480
  batch,
1463
1481
  onboard(registrations) {
@@ -1530,27 +1548,193 @@ function useRegistry(namespace = "v0:registry") {
1530
1548
  return useContext(namespace);
1531
1549
  }
1532
1550
 
1551
+ //#endregion
1552
+ //#region src/composables/createModel/index.ts
1553
+ /**
1554
+ * @module createModel
1555
+ *
1556
+ * @remarks
1557
+ * Value store layer that extends createRegistry with a reactive Set of
1558
+ * selected IDs, disabled guards, and an `apply` bridge for useProxyModel sync.
1559
+ *
1560
+ * Think of it as a creative way to store a single value — more like
1561
+ * `defineModel` than `createSelection`. Selection-specific concepts
1562
+ * (mandatory) belong in createSelection. The `multiple` option here
1563
+ * controls whether `select()` accumulates or replaces.
1564
+ *
1565
+ * Both Selection and Slider extend this layer:
1566
+ * - createRegistry → createModel → createSelection → createSingle/createGroup/createStep
1567
+ * - createRegistry → createModel → createSlider (values override)
1568
+ */
1569
+ /**
1570
+ * Creates a new model instance for storing a single value.
1571
+ *
1572
+ * @param options The options for the model instance.
1573
+ * @template Z The input ticket type. Extend {@link ModelTicketInput} to add custom properties.
1574
+ * @template E The output ticket type. Automatically includes `disabled` and `isSelected`.
1575
+ * @template R The context type. Defaults to {@link ModelContext}<Z, E>.
1576
+ * @returns A new model instance with selection tracking and disabled guards.
1577
+ *
1578
+ * @remarks
1579
+ * Extends createRegistry with value tracking via a reactive Set of selected IDs.
1580
+ * Provides the shared model-value concept used by both Selection and Slider.
1581
+ *
1582
+ * **Enrollment**: Tickets are auto-selected on registration by default (`enroll: true`).
1583
+ * With single-value semantics, only the most recently registered ticket is active.
1584
+ * Pass `enroll: false` to opt out. `createSelection` overrides this to `false`.
1585
+ *
1586
+ * **Apply bridge**: `useProxyModel` calls `apply()` to sync a ref with the model.
1587
+ * When the active ticket's value is a ref, `apply` writes to it directly. Otherwise,
1588
+ * it resolves via `registry.browse()`.
1589
+ *
1590
+ * @see https://0.vuetifyjs.com/composables/selection/create-model
1591
+ *
1592
+ * @example
1593
+ * ```ts
1594
+ * import { shallowRef } from 'vue'
1595
+ * import { createModel, useProxyModel } from '@vuetify/v0'
1596
+ *
1597
+ * const value = shallowRef('Apple')
1598
+ * const model = createModel({ events: true })
1599
+ *
1600
+ * model.register({ id: 'fruit', value })
1601
+ * useProxyModel(model, value)
1602
+ *
1603
+ * // value and model stay in sync bidirectionally
1604
+ * ```
1605
+ *
1606
+ * @example
1607
+ * ```ts
1608
+ * // Disabled model — all selection operations are no-ops
1609
+ * const model = createModel({ disabled: true })
1610
+ * model.register({ id: 'a', value: shallowRef('Apple') })
1611
+ * model.select('a') // no-op
1612
+ * ```
1613
+ */
1614
+ function createModel(_options = {}) {
1615
+ const { disabled = false, enroll = true, multiple = false, ...options } = _options;
1616
+ const registry = createRegistry(options);
1617
+ const selectedIds = shallowReactive(/* @__PURE__ */ new Set());
1618
+ const selectedItems = computed(() => {
1619
+ return new Set(Array.from(selectedIds).map((id) => registry.get(id)).filter((item) => !/* @__PURE__ */ isUndefined(item)));
1620
+ });
1621
+ const selectedValues = computed(() => {
1622
+ return new Set(Array.from(selectedItems.value).map((item) => toValue(item.value)));
1623
+ });
1624
+ function select(id) {
1625
+ if (toValue(disabled)) return;
1626
+ const item = registry.get(id);
1627
+ if (!item || toValue(item.disabled)) return;
1628
+ if (!toValue(multiple)) selectedIds.clear();
1629
+ selectedIds.add(id);
1630
+ }
1631
+ function unselect(id) {
1632
+ if (toValue(disabled)) return;
1633
+ selectedIds.delete(id);
1634
+ }
1635
+ function toggle(id) {
1636
+ if (toValue(disabled)) return;
1637
+ if (selected(id)) unselect(id);
1638
+ else select(id);
1639
+ }
1640
+ function selected(id) {
1641
+ return selectedIds.has(id);
1642
+ }
1643
+ function apply(values, _options$1) {
1644
+ const value = values[0];
1645
+ for (const id$1 of selectedIds) {
1646
+ const item = registry.get(id$1);
1647
+ if (!item || !isRef(item.value)) continue;
1648
+ item.value.value = value;
1649
+ }
1650
+ if (!toValue(multiple)) selectedIds.clear();
1651
+ if (/* @__PURE__ */ isUndefined(value)) return;
1652
+ const id = registry.browse(toRaw(value))?.values().next().value;
1653
+ if (!/* @__PURE__ */ isUndefined(id)) selectedIds.add(id);
1654
+ }
1655
+ function register(registration = {}) {
1656
+ const id = registration.id ?? /* @__PURE__ */ useId();
1657
+ const item = {
1658
+ disabled: false,
1659
+ ...registration,
1660
+ isSelected: toRef(() => selected(id)),
1661
+ id
1662
+ };
1663
+ const ticket = registry.register(item);
1664
+ if (toValue(enroll) && !toValue(disabled) && !toValue(ticket.disabled)) select(id);
1665
+ return ticket;
1666
+ }
1667
+ function unregister(id) {
1668
+ selectedIds.delete(id);
1669
+ registry.unregister(id);
1670
+ }
1671
+ function onboard(registrations) {
1672
+ return registry.batch(() => registrations.map((r) => register(r)));
1673
+ }
1674
+ function offboard(ids) {
1675
+ for (const id of ids) selectedIds.delete(id);
1676
+ registry.offboard(ids);
1677
+ }
1678
+ function reset() {
1679
+ selectedIds.clear();
1680
+ }
1681
+ function clear() {
1682
+ reset();
1683
+ registry.clear();
1684
+ }
1685
+ function dispose() {
1686
+ reset();
1687
+ registry.dispose();
1688
+ }
1689
+ return {
1690
+ ...registry,
1691
+ disabled,
1692
+ selectedIds,
1693
+ selectedItems,
1694
+ selectedValues,
1695
+ register,
1696
+ onboard,
1697
+ unregister,
1698
+ offboard,
1699
+ clear,
1700
+ dispose,
1701
+ reset,
1702
+ select,
1703
+ unselect,
1704
+ toggle,
1705
+ selected,
1706
+ apply,
1707
+ get size() {
1708
+ return registry.size;
1709
+ }
1710
+ };
1711
+ }
1712
+
1533
1713
  //#endregion
1534
1714
  //#region src/composables/createSelection/index.ts
1535
1715
  /**
1536
1716
  * @module useSelection
1537
1717
  *
1538
1718
  * @remarks
1539
- * Base composable for managing selected items in a collection with Set-based tracking.
1719
+ * Selection composable that extends createModel with multi-select,
1720
+ * mandatory enforcement, auto-enrollment, and ticket self-methods.
1540
1721
  *
1541
1722
  * Key features:
1542
1723
  * - Set-based selectedIds for O(1) selection checks
1724
+ * - Single or multi-select mode
1543
1725
  * - Mandatory selection mode (prevents deselecting last item)
1544
1726
  * - Auto-enrollment option (selects non-disabled items on register)
1545
1727
  * - Disabled item filtering
1546
1728
  * - Computed selectedItems and selectedValues Sets
1729
+ * - Ticket self-methods: select(), unselect(), toggle()
1547
1730
  *
1548
- * Extends useRegistry and serves as the base for useSingle, useGroup, useStep, and useFeatures.
1731
+ * Extends createModel and serves as the base for useSingle, useGroup, useStep, and useFeatures.
1549
1732
  */
1550
1733
  /**
1551
1734
  * Creates a new selection instance for managing multiple selected items.
1552
1735
  *
1553
- * Extends `useRegistry` with selection tracking via a reactive `Set` of selected IDs.
1736
+ * Extends `createModel` with multi-select, mandatory enforcement,
1737
+ * auto-enrollment, and ticket self-methods.
1554
1738
  * Supports disabled items, mandatory selection enforcement, and auto-enrollment.
1555
1739
  *
1556
1740
  * @param options The options for the selection instance.
@@ -1571,7 +1755,7 @@ function useRegistry(namespace = "v0:registry") {
1571
1755
  * - Enroll option auto-selects all non-disabled items on registration
1572
1756
  *
1573
1757
  * **Inheritance Chain:**
1574
- * `useRegistry` → `createSelection` → `createSingle`/`createGroup` → `createStep`
1758
+ * `createRegistry` → `createModel` → `createSelection` → `createSingle`/`createGroup` → `createStep`
1575
1759
  *
1576
1760
  * @see https://0.vuetifyjs.com/composables/selection/use-selection
1577
1761
  *
@@ -1613,96 +1797,86 @@ function useRegistry(namespace = "v0:registry") {
1613
1797
  * ```
1614
1798
  */
1615
1799
  function createSelection(_options = {}) {
1616
- const { disabled = false, enroll = false, mandatory = false, multiple = false, ...options } = _options;
1617
- const registry = createRegistry(options);
1618
- const selectedIds = shallowReactive(/* @__PURE__ */ new Set());
1619
- const selectedItems = computed(() => {
1620
- return new Set(Array.from(selectedIds).map((id) => registry.get(id)).filter((item) => !/* @__PURE__ */ isUndefined(item)));
1621
- });
1622
- const selectedValues = computed(() => {
1623
- return new Set(Array.from(selectedItems.value).map((item) => item.value));
1800
+ const { enroll = false, mandatory = false, multiple = false, ...options } = _options;
1801
+ const model = createModel({
1802
+ ...options,
1803
+ enroll: false
1624
1804
  });
1625
1805
  function seek(direction = "first", from) {
1626
- return registry.seek(direction, from, (ticket) => !toValue(ticket.disabled));
1806
+ return model.seek(direction, from, (ticket) => !toValue(ticket.disabled));
1627
1807
  }
1628
1808
  function mandate() {
1629
- if (!toValue(mandatory) || registry.size === 0 || selectedIds.size > 0) return;
1809
+ if (!toValue(mandatory) || model.size === 0 || model.selectedIds.size > 0) return;
1630
1810
  const ticket = seek("first");
1631
1811
  if (ticket) select(ticket.id);
1632
1812
  }
1633
1813
  function select(id) {
1634
- if (toValue(disabled)) return;
1635
- const item = registry.get(id);
1814
+ if (toValue(model.disabled)) return;
1815
+ const item = model.get(id);
1636
1816
  if (!item || toValue(item.disabled)) return;
1637
- if (!toValue(multiple)) selectedIds.clear();
1638
- selectedIds.add(id);
1817
+ if (!toValue(multiple)) model.selectedIds.clear();
1818
+ model.selectedIds.add(id);
1639
1819
  }
1640
1820
  function unselect(id) {
1641
- if (toValue(disabled)) return;
1642
- if (toValue(mandatory) && selectedIds.size === 1) return;
1643
- selectedIds.delete(id);
1821
+ if (toValue(model.disabled)) return;
1822
+ if (toValue(mandatory) && model.selectedIds.size === 1) return;
1823
+ model.selectedIds.delete(id);
1644
1824
  }
1645
1825
  function toggle(id) {
1646
- if (toValue(disabled)) return;
1647
- if (selected(id)) unselect(id);
1826
+ if (toValue(model.disabled)) return;
1827
+ if (model.selectedIds.has(id)) unselect(id);
1648
1828
  else select(id);
1649
1829
  }
1650
- function selected(id) {
1651
- return selectedIds.has(id);
1830
+ function apply(values, options$1) {
1831
+ const isMultiple = options$1?.multiple ?? toValue(multiple);
1832
+ const currentIds = new Set(model.selectedIds);
1833
+ const targetIds = /* @__PURE__ */ new Set();
1834
+ for (const value of values) {
1835
+ const ids = model.browse(toRaw(value));
1836
+ if (ids) for (const id of ids) targetIds.add(id);
1837
+ }
1838
+ if (isMultiple) {
1839
+ for (const id of currentIds.difference(targetIds)) model.selectedIds.delete(id);
1840
+ for (const id of targetIds.difference(currentIds)) model.selectedIds.add(id);
1841
+ } else {
1842
+ const next = targetIds.values().next().value;
1843
+ const last = currentIds.values().next().value;
1844
+ if (!/* @__PURE__ */ isUndefined(last)) unselect(last);
1845
+ if (!/* @__PURE__ */ isUndefined(next)) select(next);
1846
+ }
1652
1847
  }
1653
1848
  function register(registration = {}) {
1654
1849
  const id = registration.id ?? /* @__PURE__ */ useId();
1655
- const item = {
1656
- disabled: false,
1850
+ const decorated = {
1657
1851
  select: () => select(id),
1658
1852
  unselect: () => unselect(id),
1659
1853
  toggle: () => toggle(id),
1660
- isSelected: toRef(() => selected(id)),
1661
1854
  ...registration,
1662
1855
  id
1663
1856
  };
1664
- const ticket = registry.register(item);
1665
- if (toValue(enroll) && !toValue(disabled) && !toValue(item.disabled)) select(ticket.id);
1857
+ const ticket = model.register(decorated);
1858
+ if (toValue(enroll) && !toValue(model.disabled) && !toValue(ticket.disabled)) select(ticket.id);
1666
1859
  if (toValue(mandatory) === "force") mandate();
1667
1860
  return ticket;
1668
1861
  }
1669
- function unregister(id) {
1670
- selectedIds.delete(id);
1671
- registry.unregister(id);
1672
- }
1673
- function offboard(ids) {
1674
- for (const id of ids) selectedIds.delete(id);
1675
- registry.offboard(ids);
1676
- }
1677
1862
  function onboard(registrations) {
1678
- const tickets = registry.batch(() => registrations.map((registration) => register(registration)));
1863
+ const tickets = model.batch(() => registrations.map((registration) => register(registration)));
1679
1864
  if (toValue(mandatory) === "force") mandate();
1680
1865
  return tickets;
1681
1866
  }
1682
- function reset() {
1683
- registry.clear();
1684
- selectedIds.clear();
1685
- mandate();
1686
- }
1687
1867
  return {
1688
- ...registry,
1689
- disabled,
1690
- selectedIds,
1691
- selectedItems,
1692
- selectedValues,
1868
+ ...model,
1869
+ multiple,
1693
1870
  register,
1694
- unregister,
1695
1871
  onboard,
1696
- offboard,
1697
- reset,
1698
- mandate,
1699
- seek,
1700
1872
  select,
1701
1873
  unselect,
1702
1874
  toggle,
1703
- selected,
1875
+ apply,
1876
+ mandate,
1877
+ seek,
1704
1878
  get size() {
1705
- return registry.size;
1879
+ return model.size;
1706
1880
  }
1707
1881
  };
1708
1882
  }
@@ -1788,7 +1962,7 @@ function useSelection(namespace = "v0:selection") {
1788
1962
  //#endregion
1789
1963
  //#region src/components/Avatar/AvatarRoot.vue
1790
1964
  const [useAvatarRoot, provideAvatarRoot] = createContext();
1791
- const _sfc_main$59 = /* @__PURE__ */ defineComponent({
1965
+ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
1792
1966
  name: "AvatarRoot",
1793
1967
  __name: "AvatarRoot",
1794
1968
  props: {
@@ -1813,11 +1987,11 @@ const _sfc_main$59 = /* @__PURE__ */ defineComponent({
1813
1987
  };
1814
1988
  }
1815
1989
  });
1816
- var AvatarRoot_default = _sfc_main$59;
1990
+ var AvatarRoot_default = _sfc_main$67;
1817
1991
 
1818
1992
  //#endregion
1819
1993
  //#region src/components/Avatar/AvatarFallback.vue
1820
- const _sfc_main$58 = /* @__PURE__ */ defineComponent({
1994
+ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
1821
1995
  name: "AvatarFallback",
1822
1996
  __name: "AvatarFallback",
1823
1997
  props: {
@@ -1842,11 +2016,11 @@ const _sfc_main$58 = /* @__PURE__ */ defineComponent({
1842
2016
  };
1843
2017
  }
1844
2018
  });
1845
- var AvatarFallback_default = _sfc_main$58;
2019
+ var AvatarFallback_default = _sfc_main$66;
1846
2020
 
1847
2021
  //#endregion
1848
2022
  //#region src/components/Avatar/AvatarImage.vue
1849
- const _sfc_main$57 = /* @__PURE__ */ defineComponent({
2023
+ const _sfc_main$65 = /* @__PURE__ */ defineComponent({
1850
2024
  name: "AvatarImage",
1851
2025
  inheritAttrs: false,
1852
2026
  __name: "AvatarImage",
@@ -1906,7 +2080,7 @@ const _sfc_main$57 = /* @__PURE__ */ defineComponent({
1906
2080
  };
1907
2081
  }
1908
2082
  });
1909
- var AvatarImage_default = _sfc_main$57;
2083
+ var AvatarImage_default = _sfc_main$65;
1910
2084
 
1911
2085
  //#endregion
1912
2086
  //#region src/components/Avatar/index.ts
@@ -2262,7 +2436,8 @@ function useBreadcrumbs(namespace = "v0:breadcrumbs") {
2262
2436
  *
2263
2437
  * @param registry The registry instance to proxy.
2264
2438
  * @param options The options for the proxy registry.
2265
- * @template Z The type of the registry ticket.
2439
+ * @template Z The input ticket type (what users provide to register).
2440
+ * @template E The output ticket type (what users receive from get/values).
2266
2441
  * @returns A proxy registry with reactive objects.
2267
2442
  *
2268
2443
  * @see https://0.vuetifyjs.com/composables/registration/use-proxy-registry
@@ -3559,7 +3734,7 @@ const [createLocaleContext, createLocalePlugin, useLocale] = createPluginContext
3559
3734
  //#endregion
3560
3735
  //#region src/components/Breadcrumbs/BreadcrumbsRoot.vue
3561
3736
  const [useBreadcrumbsRoot, provideBreadcrumbsRoot] = createContext();
3562
- const _sfc_main$56 = /* @__PURE__ */ defineComponent({
3737
+ const _sfc_main$64 = /* @__PURE__ */ defineComponent({
3563
3738
  name: "BreadcrumbsRoot",
3564
3739
  __name: "BreadcrumbsRoot",
3565
3740
  props: {
@@ -3698,11 +3873,11 @@ const _sfc_main$56 = /* @__PURE__ */ defineComponent({
3698
3873
  };
3699
3874
  }
3700
3875
  });
3701
- var BreadcrumbsRoot_default = _sfc_main$56;
3876
+ var BreadcrumbsRoot_default = _sfc_main$64;
3702
3877
 
3703
3878
  //#endregion
3704
3879
  //#region src/components/Breadcrumbs/BreadcrumbsDivider.vue
3705
- const _sfc_main$55 = /* @__PURE__ */ defineComponent({
3880
+ const _sfc_main$63 = /* @__PURE__ */ defineComponent({
3706
3881
  name: "BreadcrumbsDivider",
3707
3882
  __name: "BreadcrumbsDivider",
3708
3883
  props: {
@@ -3749,11 +3924,11 @@ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
3749
3924
  };
3750
3925
  }
3751
3926
  });
3752
- var BreadcrumbsDivider_default = _sfc_main$55;
3927
+ var BreadcrumbsDivider_default = _sfc_main$63;
3753
3928
 
3754
3929
  //#endregion
3755
3930
  //#region src/components/Breadcrumbs/BreadcrumbsEllipsis.vue
3756
- const _sfc_main$54 = /* @__PURE__ */ defineComponent({
3931
+ const _sfc_main$62 = /* @__PURE__ */ defineComponent({
3757
3932
  name: "BreadcrumbsEllipsis",
3758
3933
  __name: "BreadcrumbsEllipsis",
3759
3934
  props: {
@@ -3807,11 +3982,11 @@ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
3807
3982
  };
3808
3983
  }
3809
3984
  });
3810
- var BreadcrumbsEllipsis_default = _sfc_main$54;
3985
+ var BreadcrumbsEllipsis_default = _sfc_main$62;
3811
3986
 
3812
3987
  //#endregion
3813
3988
  //#region src/components/Breadcrumbs/BreadcrumbsItem.vue
3814
- const _sfc_main$53 = /* @__PURE__ */ defineComponent({
3989
+ const _sfc_main$61 = /* @__PURE__ */ defineComponent({
3815
3990
  name: "BreadcrumbsItem",
3816
3991
  __name: "BreadcrumbsItem",
3817
3992
  props: {
@@ -3861,11 +4036,11 @@ const _sfc_main$53 = /* @__PURE__ */ defineComponent({
3861
4036
  };
3862
4037
  }
3863
4038
  });
3864
- var BreadcrumbsItem_default = _sfc_main$53;
4039
+ var BreadcrumbsItem_default = _sfc_main$61;
3865
4040
 
3866
4041
  //#endregion
3867
4042
  //#region src/components/Breadcrumbs/BreadcrumbsLink.vue
3868
- const _sfc_main$52 = /* @__PURE__ */ defineComponent({
4043
+ const _sfc_main$60 = /* @__PURE__ */ defineComponent({
3869
4044
  name: "BreadcrumbsLink",
3870
4045
  __name: "BreadcrumbsLink",
3871
4046
  props: {
@@ -3884,11 +4059,11 @@ const _sfc_main$52 = /* @__PURE__ */ defineComponent({
3884
4059
  };
3885
4060
  }
3886
4061
  });
3887
- var BreadcrumbsLink_default = _sfc_main$52;
4062
+ var BreadcrumbsLink_default = _sfc_main$60;
3888
4063
 
3889
4064
  //#endregion
3890
4065
  //#region src/components/Breadcrumbs/BreadcrumbsList.vue
3891
- const _sfc_main$51 = /* @__PURE__ */ defineComponent({
4066
+ const _sfc_main$59 = /* @__PURE__ */ defineComponent({
3892
4067
  name: "BreadcrumbsList",
3893
4068
  __name: "BreadcrumbsList",
3894
4069
  props: {
@@ -3908,11 +4083,11 @@ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
3908
4083
  };
3909
4084
  }
3910
4085
  });
3911
- var BreadcrumbsList_default = _sfc_main$51;
4086
+ var BreadcrumbsList_default = _sfc_main$59;
3912
4087
 
3913
4088
  //#endregion
3914
4089
  //#region src/components/Breadcrumbs/BreadcrumbsPage.vue
3915
- const _sfc_main$50 = /* @__PURE__ */ defineComponent({
4090
+ const _sfc_main$58 = /* @__PURE__ */ defineComponent({
3916
4091
  name: "BreadcrumbsPage",
3917
4092
  __name: "BreadcrumbsPage",
3918
4093
  props: {
@@ -3932,7 +4107,7 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
3932
4107
  };
3933
4108
  }
3934
4109
  });
3935
- var BreadcrumbsPage_default = _sfc_main$50;
4110
+ var BreadcrumbsPage_default = _sfc_main$58;
3936
4111
 
3937
4112
  //#endregion
3938
4113
  //#region src/components/Breadcrumbs/index.ts
@@ -3957,23 +4132,22 @@ const Breadcrumbs = {
3957
4132
  * @module useProxyModel
3958
4133
  *
3959
4134
  * @remarks
3960
- * Proxy composable for bidirectional sync between selection registry and v-model.
4135
+ * Proxy composable for bidirectional sync between a model context and v-model.
3961
4136
  *
3962
4137
  * Key features:
3963
4138
  * - Bidirectional synchronization
3964
4139
  * - Array and single-value modes
3965
4140
  * - Automatic cleanup on scope disposal
3966
- * - Perfect for form controls with selection backing
4141
+ * - Works with any ModelContext (Selection, Slider, etc.)
3967
4142
  *
3968
- * Bridges the gap between selection composables and Vue's v-model.
4143
+ * Bridges the gap between model composables and Vue's v-model.
3969
4144
  */
3970
4145
  /**
3971
- * Syncs a ref with a selection registry bidirectionally.
4146
+ * Syncs a ref with a model context bidirectionally.
3972
4147
  *
3973
- * @param registry The selection registry to bind to.
4148
+ * @param context The model context to bind to.
3974
4149
  * @param model The ref to sync.
3975
4150
  * @param options The options for the proxy model.
3976
- * @template Z The type of the selection ticket.
3977
4151
  * @returns A function to stop the sync.
3978
4152
  *
3979
4153
  * @see https://0.vuetifyjs.com/composables/forms/use-proxy-model
@@ -3992,8 +4166,8 @@ const Breadcrumbs = {
3992
4166
  * const stop = useProxyModel(registry, model)
3993
4167
  * ```
3994
4168
  */
3995
- function useProxyModel(registry, model, options) {
3996
- const multiple = options?.multiple ?? false;
4169
+ function useProxyModel(context, model, options) {
4170
+ const multiple = options?.multiple ?? context.multiple ?? false;
3997
4171
  const _transformIn = options?.transformIn;
3998
4172
  const _transformOut = options?.transformOut;
3999
4173
  function transformIn(val) {
@@ -4004,39 +4178,20 @@ function useProxyModel(registry, model, options) {
4004
4178
  if (/* @__PURE__ */ isFunction(_transformOut)) return _transformOut(val);
4005
4179
  return toValue(multiple) ? val : val[0];
4006
4180
  }
4181
+ const applyOptions = toValue(multiple) === toValue(context.multiple ?? false) ? void 0 : { multiple: toValue(multiple) };
4007
4182
  const modelAsArray = transformIn(model);
4008
4183
  const pending = new Set(modelAsArray);
4009
- for (const value of modelAsArray) {
4010
- const ids = registry.browse(value);
4011
- /* v8 ignore start -- edge case: value exists in registry at init */
4012
- if (ids) {
4013
- for (const id of ids) registry.select(id);
4014
- pending.delete(value);
4015
- }
4016
- }
4017
- const registryWatch = watch(registry.selectedValues, (val) => {
4184
+ context.apply(modelAsArray, applyOptions);
4185
+ for (const value of modelAsArray) if (Array.from(context.selectedValues.value).includes(value)) pending.delete(value);
4186
+ const contextWatch = watch(context.selectedValues, (val) => {
4018
4187
  modelWatch.pause();
4019
4188
  model.value = transformOut(Array.from(toValue(val)));
4020
4189
  modelWatch.resume();
4021
4190
  }, { flush: "sync" });
4022
4191
  const modelWatch = watch(model, (val) => {
4023
- registryWatch.pause();
4024
- const currentIds = new Set(toValue(registry.selectedIds));
4025
- const targetIds = /* @__PURE__ */ new Set();
4026
- for (const value of transformIn(val)) {
4027
- const ids = registry.browse(toRaw(value));
4028
- if (ids) for (const id of ids) targetIds.add(id);
4029
- }
4030
- if (toValue(multiple)) {
4031
- for (const id of currentIds.difference(targetIds)) registry.selectedIds.delete(id);
4032
- for (const id of targetIds.difference(currentIds)) registry.selectedIds.add(id);
4033
- } else {
4034
- const next = targetIds.values().next().value;
4035
- const last = currentIds.values().next().value;
4036
- if (!/* @__PURE__ */ isUndefined(last)) registry.unselect(last);
4037
- if (!/* @__PURE__ */ isUndefined(next)) registry.select(next);
4038
- }
4039
- registryWatch.resume();
4192
+ contextWatch.pause();
4193
+ context.apply(transformIn(val), applyOptions);
4194
+ contextWatch.resume();
4040
4195
  }, {
4041
4196
  flush: "sync",
4042
4197
  deep: toValue(multiple)
@@ -4044,18 +4199,18 @@ function useProxyModel(registry, model, options) {
4044
4199
  function onRegister(data) {
4045
4200
  const ticket = data;
4046
4201
  if (!pending.has(ticket.value) || toValue(ticket.disabled)) return;
4047
- registryWatch.pause();
4202
+ contextWatch.pause();
4048
4203
  modelWatch.pause();
4049
- registry.select(ticket.id);
4204
+ context.select?.(ticket.id);
4050
4205
  pending.delete(ticket.value);
4051
4206
  modelWatch.resume();
4052
- registryWatch.resume();
4207
+ contextWatch.resume();
4053
4208
  }
4054
- registry.on("register:ticket", onRegister);
4209
+ context.on?.("register:ticket", onRegister);
4055
4210
  function stop() {
4056
- registryWatch();
4211
+ contextWatch();
4057
4212
  modelWatch();
4058
- registry.off("register:ticket", onRegister);
4213
+ context.off?.("register:ticket", onRegister);
4059
4214
  }
4060
4215
  onScopeDispose(stop, true);
4061
4216
  return stop;
@@ -4064,7 +4219,7 @@ function useProxyModel(registry, model, options) {
4064
4219
  //#endregion
4065
4220
  //#region src/components/Checkbox/CheckboxGroup.vue
4066
4221
  const [useCheckboxGroup, provideCheckboxGroup] = createContext();
4067
- const _sfc_main$49 = /* @__PURE__ */ defineComponent({
4222
+ const _sfc_main$57 = /* @__PURE__ */ defineComponent({
4068
4223
  name: "CheckboxGroup",
4069
4224
  __name: "CheckboxGroup",
4070
4225
  props: /* @__PURE__ */ mergeModels({
@@ -4130,12 +4285,12 @@ const _sfc_main$49 = /* @__PURE__ */ defineComponent({
4130
4285
  };
4131
4286
  }
4132
4287
  });
4133
- var CheckboxGroup_default = _sfc_main$49;
4288
+ var CheckboxGroup_default = _sfc_main$57;
4134
4289
 
4135
4290
  //#endregion
4136
4291
  //#region src/components/Checkbox/CheckboxRoot.vue
4137
4292
  const [useCheckboxRoot, provideCheckboxRoot] = createContext();
4138
- const _sfc_main$48 = /* @__PURE__ */ defineComponent({
4293
+ const _sfc_main$56 = /* @__PURE__ */ defineComponent({
4139
4294
  name: "CheckboxRoot",
4140
4295
  inheritAttrs: false,
4141
4296
  __name: "CheckboxRoot",
@@ -4269,11 +4424,11 @@ const _sfc_main$48 = /* @__PURE__ */ defineComponent({
4269
4424
  };
4270
4425
  }
4271
4426
  });
4272
- var CheckboxRoot_default = _sfc_main$48;
4427
+ var CheckboxRoot_default = _sfc_main$56;
4273
4428
 
4274
4429
  //#endregion
4275
4430
  //#region src/components/Checkbox/CheckboxHiddenInput.vue
4276
- const _hoisted_1$2 = [
4431
+ const _hoisted_1$3 = [
4277
4432
  "checked",
4278
4433
  "disabled",
4279
4434
  "form",
@@ -4291,7 +4446,7 @@ const visuallyHiddenStyle$2 = {
4291
4446
  whiteSpace: "nowrap",
4292
4447
  border: "0"
4293
4448
  };
4294
- const _sfc_main$47 = /* @__PURE__ */ defineComponent({
4449
+ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
4295
4450
  name: "CheckboxHiddenInput",
4296
4451
  __name: "CheckboxHiddenInput",
4297
4452
  props: {
@@ -4323,15 +4478,15 @@ const _sfc_main$47 = /* @__PURE__ */ defineComponent({
4323
4478
  tabindex: "-1",
4324
4479
  type: "checkbox",
4325
4480
  value: value.value
4326
- }, null, 8, _hoisted_1$2);
4481
+ }, null, 8, _hoisted_1$3);
4327
4482
  };
4328
4483
  }
4329
4484
  });
4330
- var CheckboxHiddenInput_default = _sfc_main$47;
4485
+ var CheckboxHiddenInput_default = _sfc_main$55;
4331
4486
 
4332
4487
  //#endregion
4333
4488
  //#region src/components/Checkbox/CheckboxIndicator.vue
4334
- const _sfc_main$46 = /* @__PURE__ */ defineComponent({
4489
+ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
4335
4490
  name: "CheckboxIndicator",
4336
4491
  __name: "CheckboxIndicator",
4337
4492
  props: {
@@ -4364,11 +4519,11 @@ const _sfc_main$46 = /* @__PURE__ */ defineComponent({
4364
4519
  };
4365
4520
  }
4366
4521
  });
4367
- var CheckboxIndicator_default = _sfc_main$46;
4522
+ var CheckboxIndicator_default = _sfc_main$54;
4368
4523
 
4369
4524
  //#endregion
4370
4525
  //#region src/components/Checkbox/CheckboxSelectAll.vue
4371
- const _sfc_main$45 = /* @__PURE__ */ defineComponent({
4526
+ const _sfc_main$53 = /* @__PURE__ */ defineComponent({
4372
4527
  name: "CheckboxSelectAll",
4373
4528
  inheritAttrs: false,
4374
4529
  __name: "CheckboxSelectAll",
@@ -4454,7 +4609,7 @@ const _sfc_main$45 = /* @__PURE__ */ defineComponent({
4454
4609
  };
4455
4610
  }
4456
4611
  });
4457
- var CheckboxSelectAll_default = _sfc_main$45;
4612
+ var CheckboxSelectAll_default = _sfc_main$53;
4458
4613
 
4459
4614
  //#endregion
4460
4615
  //#region src/components/Checkbox/index.ts
@@ -4490,7 +4645,7 @@ const Checkbox = {
4490
4645
  //#endregion
4491
4646
  //#region src/components/Dialog/DialogRoot.vue
4492
4647
  const [useDialogContext, provideDialogContext] = createContext();
4493
- const _sfc_main$44 = /* @__PURE__ */ defineComponent({
4648
+ const _sfc_main$52 = /* @__PURE__ */ defineComponent({
4494
4649
  name: "DialogRoot",
4495
4650
  __name: "DialogRoot",
4496
4651
  props: /* @__PURE__ */ mergeModels({
@@ -4542,11 +4697,11 @@ const _sfc_main$44 = /* @__PURE__ */ defineComponent({
4542
4697
  };
4543
4698
  }
4544
4699
  });
4545
- var DialogRoot_default = _sfc_main$44;
4700
+ var DialogRoot_default = _sfc_main$52;
4546
4701
 
4547
4702
  //#endregion
4548
4703
  //#region src/components/Dialog/DialogClose.vue
4549
- const _sfc_main$43 = /* @__PURE__ */ defineComponent({
4704
+ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
4550
4705
  name: "DialogClose",
4551
4706
  __name: "DialogClose",
4552
4707
  props: {
@@ -4574,7 +4729,7 @@ const _sfc_main$43 = /* @__PURE__ */ defineComponent({
4574
4729
  };
4575
4730
  }
4576
4731
  });
4577
- var DialogClose_default = _sfc_main$43;
4732
+ var DialogClose_default = _sfc_main$51;
4578
4733
 
4579
4734
  //#endregion
4580
4735
  //#region src/composables/createPagination/index.ts
@@ -4858,17 +5013,15 @@ function defaultFilter(query, item, keys, mode = "some") {
4858
5013
  function createFilter(options = {}) {
4859
5014
  const { customFilter, keys, mode = "some" } = options;
4860
5015
  const filterFunction = customFilter ?? ((q, i) => defaultFilter(q, i, keys, mode));
4861
- const query = toRef("");
5016
+ const query = shallowRef("");
4862
5017
  function apply(_query, items) {
4863
- const itemsRef = isRef(items) ? items : toRef(() => items);
4864
- const queryRef = toRef(_query);
4865
5018
  return { items: computed(() => {
4866
- const q = toValue(queryRef);
5019
+ const q = toValue(_query);
4867
5020
  query.value = q;
4868
5021
  const queries = toArray(q).filter((q$1) => String(q$1).trim());
4869
- if (queries.length === 0) return itemsRef.value;
5022
+ if (queries.length === 0) return toValue(items);
4870
5023
  const queryParam = queries.length === 1 ? queries[0] : queries;
4871
- return itemsRef.value.filter((item) => filterFunction(queryParam, item));
5024
+ return toValue(items).filter((item) => filterFunction(queryParam, item));
4872
5025
  }) };
4873
5026
  }
4874
5027
  return {
@@ -5724,30 +5877,42 @@ function createDefaultBreakpoints() {
5724
5877
  * ```
5725
5878
  */
5726
5879
  function createBreakpoints(_options = {}) {
5727
- const { mobileBreakpoint, breakpoints } = /* @__PURE__ */ mergeDeep(createDefaultBreakpoints(), _options);
5880
+ const { ssr, ...options } = _options;
5881
+ const { mobileBreakpoint, breakpoints } = /* @__PURE__ */ mergeDeep(createDefaultBreakpoints(), options);
5728
5882
  const sorted = Object.entries(breakpoints).toSorted((a, b) => a[1] - b[1]);
5729
5883
  const names = sorted.map(([n]) => n);
5730
5884
  const mb = /* @__PURE__ */ isNumber(mobileBreakpoint) ? mobileBreakpoint : breakpoints[mobileBreakpoint] ?? breakpoints.md;
5731
- const name = shallowRef("xs");
5732
- const width = shallowRef(0);
5733
- const height = shallowRef(0);
5734
- const isMobile = shallowRef(true);
5735
- const xs = shallowRef(true);
5736
- const sm = shallowRef(false);
5737
- const md = shallowRef(false);
5738
- const lg = shallowRef(false);
5739
- const xl = shallowRef(false);
5740
- const xxl = shallowRef(false);
5741
- const smAndUp = shallowRef(false);
5742
- const mdAndUp = shallowRef(false);
5743
- const lgAndUp = shallowRef(false);
5744
- const xlAndUp = shallowRef(false);
5745
- const xxlAndUp = shallowRef(false);
5746
- const smAndDown = shallowRef(true);
5747
- const mdAndDown = shallowRef(true);
5748
- const lgAndDown = shallowRef(true);
5749
- const xlAndDown = shallowRef(true);
5750
- const xxlAndDown = shallowRef(true);
5885
+ const isSSR = !IN_BROWSER && !!ssr;
5886
+ const initialWidth = isSSR ? ssr.clientWidth : 0;
5887
+ const initialHeight = isSSR ? ssr.clientHeight ?? 0 : 0;
5888
+ let initialName = "xs";
5889
+ if (isSSR) {
5890
+ for (let i = sorted.length - 1; i >= 0; i--) if (initialWidth >= sorted[i][1]) {
5891
+ initialName = sorted[i][0];
5892
+ break;
5893
+ }
5894
+ }
5895
+ const initialIndex = names.indexOf(initialName);
5896
+ const name = shallowRef(initialName);
5897
+ const width = shallowRef(initialWidth);
5898
+ const height = shallowRef(initialHeight);
5899
+ const isMobile = shallowRef(isSSR ? initialWidth < mb : true);
5900
+ const xs = shallowRef(initialIndex === 0);
5901
+ const sm = shallowRef(initialIndex === 1);
5902
+ const md = shallowRef(initialIndex === 2);
5903
+ const lg = shallowRef(initialIndex === 3);
5904
+ const xl = shallowRef(initialIndex === 4);
5905
+ const xxl = shallowRef(initialIndex === 5);
5906
+ const smAndUp = shallowRef(initialIndex >= 1);
5907
+ const mdAndUp = shallowRef(initialIndex >= 2);
5908
+ const lgAndUp = shallowRef(initialIndex >= 3);
5909
+ const xlAndUp = shallowRef(initialIndex >= 4);
5910
+ const xxlAndUp = shallowRef(initialIndex >= 5);
5911
+ const smAndDown = shallowRef(initialIndex <= 1);
5912
+ const mdAndDown = shallowRef(initialIndex <= 2);
5913
+ const lgAndDown = shallowRef(initialIndex <= 3);
5914
+ const xlAndDown = shallowRef(initialIndex <= 4);
5915
+ const xxlAndDown = shallowRef(initialIndex <= 5);
5751
5916
  function update() {
5752
5917
  if (!IN_BROWSER) return;
5753
5918
  width.value = window.innerWidth;
@@ -5799,10 +5964,12 @@ function createBreakpoints(_options = {}) {
5799
5964
  lgAndDown: readonly(lgAndDown),
5800
5965
  xlAndDown: readonly(xlAndDown),
5801
5966
  xxlAndDown: readonly(xxlAndDown),
5967
+ ssr: isSSR,
5802
5968
  update
5803
5969
  };
5804
5970
  }
5805
- function createBreakpointsFallback() {
5971
+ function createBreakpointsFallback(options = {}) {
5972
+ if (options.ssr) return createBreakpoints(options);
5806
5973
  return {
5807
5974
  breakpoints: createDefaultBreakpoints().breakpoints,
5808
5975
  name: readonly(shallowRef("xs")),
@@ -5825,12 +5992,14 @@ function createBreakpointsFallback() {
5825
5992
  lgAndDown: readonly(shallowRef(false)),
5826
5993
  xlAndDown: readonly(shallowRef(false)),
5827
5994
  xxlAndDown: readonly(shallowRef(false)),
5995
+ ssr: false,
5828
5996
  update: () => {}
5829
5997
  };
5830
5998
  }
5831
5999
  const [createBreakpointsContext, createBreakpointsPlugin, useBreakpoints] = createPluginContext("v0:breakpoints", (options) => createBreakpoints(options), {
5832
6000
  fallback: () => createBreakpointsFallback(),
5833
6001
  setup: (context, app, _options) => {
6002
+ if (IN_BROWSER) context.update();
5834
6003
  app.mixin({ mounted() {
5835
6004
  if (!/* @__PURE__ */ isNull(this.$parent)) return;
5836
6005
  const hydration = useHydration();
@@ -6423,6 +6592,9 @@ const keyAliasMap = {
6423
6592
  space: " ",
6424
6593
  return: "enter",
6425
6594
  del: "delete",
6595
+ plus: "+",
6596
+ slash: "/",
6597
+ underscore: "_",
6426
6598
  minus: "-",
6427
6599
  hyphen: "-"
6428
6600
  };
@@ -6468,7 +6640,7 @@ function splitKeyCombination(combination, isInternal = false) {
6468
6640
  "++",
6469
6641
  "//",
6470
6642
  "__"
6471
- ].some((v) => combination.startsWith(v)) || combination.includes("++") || combination.includes("__") || combination === "+" || combination === "_" || combination.length > 1 && (combination.endsWith("+") || combination.endsWith("_")) && combination.at(-2) !== combination.at(-1) || combination === "++" || combination === "--" || combination === "__") {
6643
+ ].some((v) => combination.startsWith(v)) || combination.includes("++") || combination.includes("//") || combination.includes("__") || combination === "+" || combination === "/" || combination === "_" || combination.length > 1 && (combination.endsWith("+") || combination.endsWith("/") || combination.endsWith("_")) && combination.at(-2) !== combination.at(-1) || combination === "++" || combination === "--" || combination === "__") {
6472
6644
  if (!isInternal) logger.warn(`Invalid hotkey combination: "${combination}" has invalid structure`);
6473
6645
  return emptyResult;
6474
6646
  }
@@ -6534,7 +6706,11 @@ function splitKeySequence(str) {
6534
6706
  logger.warn("Invalid hotkey sequence: empty string provided");
6535
6707
  return [];
6536
6708
  }
6537
- const hasInvalidStart = str.startsWith("-") && !["---", "--+"].includes(str);
6709
+ const hasInvalidStart = str.startsWith("-") && ![
6710
+ "-",
6711
+ "---",
6712
+ "--+"
6713
+ ].includes(str);
6538
6714
  const hasInvalidEnd = str.endsWith("-") && !str.endsWith("+-") && !str.endsWith("_-") && str !== "-" && str !== "---";
6539
6715
  if (hasInvalidStart || hasInvalidEnd) {
6540
6716
  logger.warn(`Invalid hotkey sequence: "${str}" contains invalid combinations`);
@@ -7760,10 +7936,15 @@ function createNested(_options = {}) {
7760
7936
  openedIds.clear();
7761
7937
  activeIds.clear();
7762
7938
  rootIds.clear();
7763
- group.reset();
7939
+ group.clear();
7764
7940
  }
7765
7941
  function reset() {
7766
- clear();
7942
+ children.clear();
7943
+ parents.clear();
7944
+ openedIds.clear();
7945
+ activeIds.clear();
7946
+ rootIds.clear();
7947
+ group.reset();
7767
7948
  }
7768
7949
  const context = {
7769
7950
  ...group,
@@ -8189,45 +8370,230 @@ function useQueue(namespace = "v0:queue") {
8189
8370
  }
8190
8371
 
8191
8372
  //#endregion
8192
- //#region src/composables/useStack/index.ts
8373
+ //#region src/composables/createSlider/index.ts
8193
8374
  /**
8194
- * @module useStack
8375
+ * @module createSlider
8195
8376
  *
8196
- * @see https://0.vuetifyjs.com/composables/plugins/use-stack
8377
+ * @see https://0.vuetifyjs.com/composables/forms/create-slider
8197
8378
  *
8198
8379
  * @remarks
8199
- * Overlay z-index stacking composable with:
8200
- * - Global reactive registry of active overlays
8201
- * - Automatic z-index calculation based on selection order
8202
- * - `globalTop` tracking - is this ticket topmost globally?
8203
- * - Manual select/unselect for explicit control
8204
- * - Auto-cleanup when registered within component setup
8380
+ * Composable for managing slider state: value math, step snapping,
8381
+ * percentage conversion, and multi-thumb value operations.
8205
8382
  *
8206
- * Built on createSelection for consistent ticket-based management.
8383
+ * Extends createModel for useProxyModel compatibility:
8384
+ * - createRegistry → createModel → createSlider (ticket-per-thumb)
8385
+ *
8386
+ * Each thumb is a model ticket with a `shallowRef<number>` value.
8387
+ * Values are derived from ordered tickets, not a standalone ref.
8388
+ *
8389
+ * Designed for single-thumb, range, and multi-thumb sliders.
8390
+ * Also reusable for color picker tracks, media scrubbers,
8391
+ * gradient editors, and other 1D value-on-track controls.
8207
8392
  */
8208
8393
  /**
8209
- * Creates a new stack instance for managing overlay z-indexes.
8394
+ * Creates slider state with value math, step snapping, and multi-thumb support.
8210
8395
  *
8211
- * @param options Configuration options
8212
- * @returns Stack context with registry methods and scrim helpers
8396
+ * Extends createModel for useProxyModel compatibility. Each thumb is a model
8397
+ * ticket with a shallowRef<number> value. Values are derived from the ordered
8398
+ * tickets, enabling proper registration/unregistration lifecycle.
8213
8399
  *
8214
- * @see https://0.vuetifyjs.com/composables/plugins/use-stack
8400
+ * @param options Slider configuration.
8401
+ * @returns Slider context with values, math functions, and thumb operations.
8215
8402
  *
8216
- * @example
8403
+ * @see https://0.vuetifyjs.com/composables/forms/create-slider
8404
+ * @see {@link createModel} for the base model composable.
8405
+ *
8406
+ * @example Single thumb
8217
8407
  * ```ts
8218
- * import { createStack } from '@vuetify/v0'
8408
+ * import { createSlider } from '@vuetify/v0'
8219
8409
  *
8220
- * const stack = createStack({ baseZIndex: 1000 })
8410
+ * const slider = createSlider({ min: 0, max: 100, step: 5 })
8411
+ * const ticket = slider.register({ value: 50 })
8412
+ * slider.up(0) // values: [55]
8413
+ * slider.fromValue(50) // 50
8414
+ * ```
8221
8415
  *
8222
- * const ticket = stack.register({
8223
- * onDismiss: () => console.log('dismissed'),
8224
- * blocking: false,
8225
- * })
8416
+ * @example Range slider
8417
+ * ```ts
8418
+ * import { createSlider } from '@vuetify/v0'
8226
8419
  *
8227
- * ticket.select() // Activate overlay
8228
- * console.log(ticket.zIndex.value) // 1000
8420
+ * const slider = createSlider({ min: 0, max: 100, step: 1, range: true })
8421
+ * slider.register({ value: 25 })
8422
+ * slider.register({ value: 75 })
8423
+ * slider.set(0, 30) // values: [30, 75]
8424
+ * slider.set(1, 60) // values: [30, 60]
8425
+ * ```
8229
8426
  *
8230
- * ticket.unselect() // Deactivate overlay
8427
+ * @example Custom pointer interaction (media scrubber)
8428
+ * ```ts
8429
+ * import { createSlider } from '@vuetify/v0'
8430
+ *
8431
+ * const slider = createSlider({ min: 0, max: 217, step: 0.1 })
8432
+ * slider.register({ value: 0 })
8433
+ *
8434
+ * // pointer → fromPercent → set → fromValue → UI
8435
+ * const percent = (clientX - rect.left) / rect.width * 100
8436
+ * slider.set(0, slider.fromPercent(percent))
8437
+ * const position = slider.fromValue(slider.values.value[0])
8438
+ * ```
8439
+ */
8440
+ function createSlider(options = {}) {
8441
+ const { min = 0, max = 100, step = 1, disabled: disabledProp = false, readonly: readonlyProp = false, orientation: orientationProp = "horizontal", inverted: invertedProp = false, minStepsBetweenThumbs = 0, crossover = false, range: range$1 = false } = options;
8442
+ const model = createModel({
8443
+ disabled: disabledProp,
8444
+ multiple: true,
8445
+ events: true
8446
+ });
8447
+ const disabled = toRef(() => toValue(disabledProp));
8448
+ const readonly$1 = toRef(() => toValue(readonlyProp));
8449
+ const orientation = toRef(() => toValue(orientationProp));
8450
+ const inverted = toRef(() => toValue(invertedProp));
8451
+ const extent = max - min;
8452
+ let pending = null;
8453
+ const thumbs = computed(() => Array.from(model.selectedItems.value).toSorted((a, b) => a.index - b.index));
8454
+ const values = computed(() => thumbs.value.map((t) => toValue(t.value)));
8455
+ const selectedValues = computed(() => values.value);
8456
+ function snap(value) {
8457
+ if (step <= 0) return /* @__PURE__ */ clamp(value, min, max);
8458
+ const clamped = /* @__PURE__ */ clamp(value, min, max);
8459
+ return /* @__PURE__ */ clamp(min + Math.round((clamped - min) / step) * step, min, max);
8460
+ }
8461
+ function fromValue(value) {
8462
+ if (extent === 0) return 0;
8463
+ const p = (value - min) / extent * 100;
8464
+ return inverted.value ? 100 - p : p;
8465
+ }
8466
+ function fromPercent(p) {
8467
+ return snap(min + (inverted.value ? 100 - p : p) / 100 * extent);
8468
+ }
8469
+ function register(input) {
8470
+ const initialValue = /* @__PURE__ */ isObject(input) ? input.value : input;
8471
+ const thumbIndex = thumbs.value.length;
8472
+ const pendingValue = pending?.[thumbIndex];
8473
+ const val = /* @__PURE__ */ isUndefined(pendingValue) ? snap(initialValue ?? min) : snap(pendingValue);
8474
+ const ticket = model.register({ value: shallowRef(val) });
8475
+ if (!model.selectedIds.has(ticket.id)) model.selectedIds.add(ticket.id);
8476
+ if (pending && thumbs.value.length >= pending.length) pending = null;
8477
+ return ticket;
8478
+ }
8479
+ function apply(incoming, _options) {
8480
+ const snapped = incoming.map((v) => snap(Number(v)));
8481
+ if (thumbs.value.length === 0) {
8482
+ pending = snapped;
8483
+ return;
8484
+ }
8485
+ for (let index = 0; index < snapped.length; index++) {
8486
+ const ticket = thumbs.value[index];
8487
+ if (!ticket || !isRef(ticket.value)) continue;
8488
+ let constrained = snapped[index];
8489
+ if (!crossover) {
8490
+ const gap = minStepsBetweenThumbs * step;
8491
+ const prev = index > 0 ? snapped[index - 1] : void 0;
8492
+ const following = index < snapped.length - 1 ? snapped[index + 1] : void 0;
8493
+ if (!/* @__PURE__ */ isUndefined(prev)) constrained = Math.max(constrained, prev + gap);
8494
+ if (!/* @__PURE__ */ isUndefined(following)) constrained = Math.min(constrained, following - gap);
8495
+ }
8496
+ ticket.value.value = /* @__PURE__ */ clamp(constrained, min, max);
8497
+ }
8498
+ }
8499
+ function set(index, value) {
8500
+ if (readonly$1.value) return;
8501
+ const snapped = snap(value);
8502
+ const current = values.value;
8503
+ let constrained = snapped;
8504
+ if (!crossover) {
8505
+ const gap = minStepsBetweenThumbs * step;
8506
+ const prev = current[index - 1];
8507
+ const following = current[index + 1];
8508
+ if (index > 0 && !/* @__PURE__ */ isUndefined(prev)) constrained = Math.max(constrained, prev + gap);
8509
+ if (index < current.length - 1 && !/* @__PURE__ */ isUndefined(following)) constrained = Math.min(constrained, following - gap);
8510
+ }
8511
+ constrained = /* @__PURE__ */ clamp(constrained, min, max);
8512
+ const ticket = thumbs.value[index];
8513
+ if (ticket && isRef(ticket.value)) ticket.value.value = constrained;
8514
+ }
8515
+ function up(index, multiplier = 1) {
8516
+ set(index, (values.value[index] ?? min) + step * multiplier);
8517
+ }
8518
+ function down(index, multiplier = 1) {
8519
+ set(index, (values.value[index] ?? min) - step * multiplier);
8520
+ }
8521
+ function floor(index) {
8522
+ set(index, min);
8523
+ }
8524
+ function ceil(index) {
8525
+ set(index, max);
8526
+ }
8527
+ return {
8528
+ ...model,
8529
+ values,
8530
+ selectedValues,
8531
+ apply,
8532
+ range: range$1,
8533
+ min,
8534
+ max,
8535
+ step,
8536
+ minStepsBetweenThumbs,
8537
+ crossover,
8538
+ disabled,
8539
+ readonly: readonly$1,
8540
+ orientation,
8541
+ inverted,
8542
+ register,
8543
+ snap,
8544
+ fromValue,
8545
+ fromPercent,
8546
+ set,
8547
+ up,
8548
+ down,
8549
+ floor,
8550
+ ceil,
8551
+ get size() {
8552
+ return model.size;
8553
+ }
8554
+ };
8555
+ }
8556
+
8557
+ //#endregion
8558
+ //#region src/composables/useStack/index.ts
8559
+ /**
8560
+ * @module useStack
8561
+ *
8562
+ * @see https://0.vuetifyjs.com/composables/plugins/use-stack
8563
+ *
8564
+ * @remarks
8565
+ * Overlay z-index stacking composable with:
8566
+ * - Global reactive registry of active overlays
8567
+ * - Automatic z-index calculation based on selection order
8568
+ * - `globalTop` tracking - is this ticket topmost globally?
8569
+ * - Manual select/unselect for explicit control
8570
+ * - Auto-cleanup when registered within component setup
8571
+ *
8572
+ * Built on createSelection for consistent ticket-based management.
8573
+ */
8574
+ /**
8575
+ * Creates a new stack instance for managing overlay z-indexes.
8576
+ *
8577
+ * @param options Configuration options
8578
+ * @returns Stack context with registry methods and scrim helpers
8579
+ *
8580
+ * @see https://0.vuetifyjs.com/composables/plugins/use-stack
8581
+ *
8582
+ * @example
8583
+ * ```ts
8584
+ * import { createStack } from '@vuetify/v0'
8585
+ *
8586
+ * const stack = createStack({ baseZIndex: 1000 })
8587
+ *
8588
+ * const ticket = stack.register({
8589
+ * onDismiss: () => console.log('dismissed'),
8590
+ * blocking: false,
8591
+ * })
8592
+ *
8593
+ * ticket.select() // Activate overlay
8594
+ * console.log(ticket.zIndex.value) // 1000
8595
+ *
8596
+ * ticket.unselect() // Deactivate overlay
8231
8597
  * ```
8232
8598
  */
8233
8599
  function createStack(_options = {}) {
@@ -8687,31 +9053,50 @@ function createStorage(options = {}) {
8687
9053
  const { adapter = IN_BROWSER ? window.localStorage : new MemoryAdapter(), prefix = "v0:", serializer = {
8688
9054
  read: JSON.parse,
8689
9055
  write: JSON.stringify
8690
- } } = options;
9056
+ }, ttl } = options;
8691
9057
  const cache = /* @__PURE__ */ new Map();
8692
9058
  const watchers = /* @__PURE__ */ new Map();
8693
9059
  function has(key) {
8694
9060
  const prefixedKey = `${prefix}${key}`;
8695
9061
  return cache.has(prefixedKey);
8696
9062
  }
8697
- function get(key, defaultValue) {
8698
- const prefixedKey = `${prefix}${key}`;
8699
- if (cache.has(prefixedKey)) return cache.get(prefixedKey);
8700
- const storedValue = adapter?.getItem(prefixedKey);
8701
- let initialValue = defaultValue;
8702
- if (storedValue) try {
8703
- initialValue = serializer.read(storedValue);
9063
+ function readStored(prefixedKey) {
9064
+ const raw = adapter?.getItem(prefixedKey);
9065
+ if (!raw) return void 0;
9066
+ try {
9067
+ const parsed = serializer.read(raw);
9068
+ if (ttl && parsed && typeof parsed === "object" && "__ttl" in parsed && "__v" in parsed) {
9069
+ if (Date.now() - parsed.__t > ttl) {
9070
+ adapter?.removeItem(prefixedKey);
9071
+ return;
9072
+ }
9073
+ return parsed.__v;
9074
+ }
9075
+ return parsed;
8704
9076
  } catch (error) {
8705
9077
  console.error(`[v0:storage] Failed to parse stored value for key "${prefixedKey}":`, error);
9078
+ return;
9079
+ }
9080
+ }
9081
+ function writeStored(prefixedKey, value) {
9082
+ const wrapped = ttl ? {
9083
+ __ttl: 1,
9084
+ __v: value,
9085
+ __t: Date.now()
9086
+ } : value;
9087
+ try {
9088
+ adapter?.setItem(prefixedKey, serializer.write(wrapped));
9089
+ } catch (error) {
9090
+ console.error(`[v0:storage] Failed to write key "${prefixedKey}":`, error);
8706
9091
  }
8707
- const valueRef = ref(initialValue);
9092
+ }
9093
+ function get(key, defaultValue) {
9094
+ const prefixedKey = `${prefix}${key}`;
9095
+ if (cache.has(prefixedKey)) return cache.get(prefixedKey);
9096
+ const valueRef = ref(readStored(prefixedKey) ?? defaultValue);
8708
9097
  const stop = watch(valueRef, (newValue) => {
8709
9098
  if (/* @__PURE__ */ isNullOrUndefined(newValue)) adapter?.removeItem(prefixedKey);
8710
- else try {
8711
- adapter?.setItem(prefixedKey, serializer.write(newValue));
8712
- } catch (error) {
8713
- console.error(`[v0:storage] Failed to write key "${prefixedKey}":`, error);
8714
- }
9099
+ else writeStored(prefixedKey, newValue);
8715
9100
  }, { deep: true });
8716
9101
  watchers.set(prefixedKey, stop);
8717
9102
  cache.set(prefixedKey, valueRef);
@@ -8745,14 +9130,10 @@ function createStorage(options = {}) {
8745
9130
  const valueRef = cache.get(e.key);
8746
9131
  if (!valueRef) return;
8747
9132
  watchers.get(e.key)?.();
8748
- valueRef.value = e.newValue == null ? void 0 : serializer.read(e.newValue);
9133
+ valueRef.value = e.newValue == null ? void 0 : readStored(e.key);
8749
9134
  const stop = watch(valueRef, (newValue) => {
8750
9135
  if (/* @__PURE__ */ isNullOrUndefined(newValue)) adapter?.removeItem(e.key);
8751
- else try {
8752
- adapter?.setItem(e.key, serializer.write(newValue));
8753
- } catch (error) {
8754
- console.error(`[v0:storage] Failed to write key "${e.key}":`, error);
8755
- }
9136
+ else writeStored(e.key, newValue);
8756
9137
  }, { deep: true });
8757
9138
  watchers.set(e.key, stop);
8758
9139
  });
@@ -9918,7 +10299,7 @@ function useClickOutside(target, handler, options = {}) {
9918
10299
 
9919
10300
  //#endregion
9920
10301
  //#region src/components/Dialog/DialogContent.vue
9921
- const _sfc_main$42 = /* @__PURE__ */ defineComponent({
10302
+ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
9922
10303
  name: "DialogContent",
9923
10304
  __name: "DialogContent",
9924
10305
  props: {
@@ -10000,11 +10381,11 @@ const _sfc_main$42 = /* @__PURE__ */ defineComponent({
10000
10381
  };
10001
10382
  }
10002
10383
  });
10003
- var DialogContent_default = _sfc_main$42;
10384
+ var DialogContent_default = _sfc_main$50;
10004
10385
 
10005
10386
  //#endregion
10006
10387
  //#region src/components/Dialog/DialogDescription.vue
10007
- const _sfc_main$41 = /* @__PURE__ */ defineComponent({
10388
+ const _sfc_main$49 = /* @__PURE__ */ defineComponent({
10008
10389
  name: "DialogDescription",
10009
10390
  __name: "DialogDescription",
10010
10391
  props: {
@@ -10023,11 +10404,11 @@ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
10023
10404
  };
10024
10405
  }
10025
10406
  });
10026
- var DialogDescription_default = _sfc_main$41;
10407
+ var DialogDescription_default = _sfc_main$49;
10027
10408
 
10028
10409
  //#endregion
10029
10410
  //#region src/components/Dialog/DialogTitle.vue
10030
- const _sfc_main$40 = /* @__PURE__ */ defineComponent({
10411
+ const _sfc_main$48 = /* @__PURE__ */ defineComponent({
10031
10412
  name: "DialogTitle",
10032
10413
  __name: "DialogTitle",
10033
10414
  props: {
@@ -10046,11 +10427,11 @@ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
10046
10427
  };
10047
10428
  }
10048
10429
  });
10049
- var DialogTitle_default = _sfc_main$40;
10430
+ var DialogTitle_default = _sfc_main$48;
10050
10431
 
10051
10432
  //#endregion
10052
10433
  //#region src/components/Dialog/DialogActivator.vue
10053
- const _sfc_main$39 = /* @__PURE__ */ defineComponent({
10434
+ const _sfc_main$47 = /* @__PURE__ */ defineComponent({
10054
10435
  name: "DialogActivator",
10055
10436
  __name: "DialogActivator",
10056
10437
  props: {
@@ -10080,7 +10461,7 @@ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
10080
10461
  };
10081
10462
  }
10082
10463
  });
10083
- var DialogActivator_default = _sfc_main$39;
10464
+ var DialogActivator_default = _sfc_main$47;
10084
10465
 
10085
10466
  //#endregion
10086
10467
  //#region src/components/Dialog/index.ts
@@ -10125,7 +10506,7 @@ const Dialog = {
10125
10506
  //#endregion
10126
10507
  //#region src/components/ExpansionPanel/ExpansionPanelRoot.vue
10127
10508
  const [useExpansionPanelRoot, provideExpansionPanelRoot] = createContext();
10128
- const _sfc_main$38 = /* @__PURE__ */ defineComponent({
10509
+ const _sfc_main$46 = /* @__PURE__ */ defineComponent({
10129
10510
  name: "ExpansionPanelRoot",
10130
10511
  __name: "ExpansionPanelRoot",
10131
10512
  props: /* @__PURE__ */ mergeModels({
@@ -10182,12 +10563,12 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
10182
10563
  };
10183
10564
  }
10184
10565
  });
10185
- var ExpansionPanelRoot_default = _sfc_main$38;
10566
+ var ExpansionPanelRoot_default = _sfc_main$46;
10186
10567
 
10187
10568
  //#endregion
10188
10569
  //#region src/components/ExpansionPanel/ExpansionPanelItem.vue
10189
10570
  const [useExpansionPanelItem, provideExpansionPanelItem] = createContext({ suffix: "item" });
10190
- const _sfc_main$37 = /* @__PURE__ */ defineComponent({
10571
+ const _sfc_main$45 = /* @__PURE__ */ defineComponent({
10191
10572
  name: "ExpansionPanelItem",
10192
10573
  __name: "ExpansionPanelItem",
10193
10574
  props: {
@@ -10231,11 +10612,11 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
10231
10612
  };
10232
10613
  }
10233
10614
  });
10234
- var ExpansionPanelItem_default = _sfc_main$37;
10615
+ var ExpansionPanelItem_default = _sfc_main$45;
10235
10616
 
10236
10617
  //#endregion
10237
10618
  //#region src/components/ExpansionPanel/ExpansionPanelActivator.vue
10238
- const _sfc_main$36 = /* @__PURE__ */ defineComponent({
10619
+ const _sfc_main$44 = /* @__PURE__ */ defineComponent({
10239
10620
  name: "ExpansionPanelActivator",
10240
10621
  __name: "ExpansionPanelActivator",
10241
10622
  props: {
@@ -10281,11 +10662,11 @@ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
10281
10662
  };
10282
10663
  }
10283
10664
  });
10284
- var ExpansionPanelActivator_default = _sfc_main$36;
10665
+ var ExpansionPanelActivator_default = _sfc_main$44;
10285
10666
 
10286
10667
  //#endregion
10287
10668
  //#region src/components/ExpansionPanel/ExpansionPanelContent.vue
10288
- const _sfc_main$35 = /* @__PURE__ */ defineComponent({
10669
+ const _sfc_main$43 = /* @__PURE__ */ defineComponent({
10289
10670
  name: "ExpansionPanelContent",
10290
10671
  __name: "ExpansionPanelContent",
10291
10672
  props: {
@@ -10316,11 +10697,11 @@ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
10316
10697
  };
10317
10698
  }
10318
10699
  });
10319
- var ExpansionPanelContent_default = _sfc_main$35;
10700
+ var ExpansionPanelContent_default = _sfc_main$43;
10320
10701
 
10321
10702
  //#endregion
10322
10703
  //#region src/components/ExpansionPanel/ExpansionPanelHeader.vue
10323
- const _sfc_main$34 = /* @__PURE__ */ defineComponent({
10704
+ const _sfc_main$42 = /* @__PURE__ */ defineComponent({
10324
10705
  name: "ExpansionPanelHeader",
10325
10706
  __name: "ExpansionPanelHeader",
10326
10707
  props: {
@@ -10345,7 +10726,7 @@ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
10345
10726
  };
10346
10727
  }
10347
10728
  });
10348
- var ExpansionPanelHeader_default = _sfc_main$34;
10729
+ var ExpansionPanelHeader_default = _sfc_main$42;
10349
10730
 
10350
10731
  //#endregion
10351
10732
  //#region src/components/ExpansionPanel/index.ts
@@ -10365,7 +10746,7 @@ const ExpansionPanel = {
10365
10746
  //#endregion
10366
10747
  //#region src/components/Group/GroupRoot.vue
10367
10748
  const [useGroupRoot, provideGroupRoot] = createContext();
10368
- const _sfc_main$33 = /* @__PURE__ */ defineComponent({
10749
+ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
10369
10750
  name: "GroupRoot",
10370
10751
  __name: "GroupRoot",
10371
10752
  props: /* @__PURE__ */ mergeModels({
@@ -10415,11 +10796,11 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
10415
10796
  };
10416
10797
  }
10417
10798
  });
10418
- var GroupRoot_default = _sfc_main$33;
10799
+ var GroupRoot_default = _sfc_main$41;
10419
10800
 
10420
10801
  //#endregion
10421
10802
  //#region src/components/Group/GroupItem.vue
10422
- const _sfc_main$32 = /* @__PURE__ */ defineComponent({
10803
+ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
10423
10804
  name: "GroupItem",
10424
10805
  __name: "GroupItem",
10425
10806
  props: {
@@ -10468,7 +10849,7 @@ const _sfc_main$32 = /* @__PURE__ */ defineComponent({
10468
10849
  };
10469
10850
  }
10470
10851
  });
10471
- var GroupItem_default = _sfc_main$32;
10852
+ var GroupItem_default = _sfc_main$40;
10472
10853
 
10473
10854
  //#endregion
10474
10855
  //#region src/components/Group/index.ts
@@ -10487,7 +10868,7 @@ const Group = {
10487
10868
  const [usePaginationRoot, providePaginationRoot] = createContext();
10488
10869
  const [usePaginationControls, providePaginationControls] = createContext({ suffix: "controls" });
10489
10870
  const [usePaginationItems, providePaginationItems] = createContext({ suffix: "items" });
10490
- const _sfc_main$31 = /* @__PURE__ */ defineComponent({
10871
+ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
10491
10872
  name: "PaginationRoot",
10492
10873
  __name: "PaginationRoot",
10493
10874
  props: /* @__PURE__ */ mergeModels({
@@ -10587,11 +10968,11 @@ const _sfc_main$31 = /* @__PURE__ */ defineComponent({
10587
10968
  };
10588
10969
  }
10589
10970
  });
10590
- var PaginationRoot_default = _sfc_main$31;
10971
+ var PaginationRoot_default = _sfc_main$39;
10591
10972
 
10592
10973
  //#endregion
10593
10974
  //#region src/components/Pagination/PaginationEllipsis.vue
10594
- const _sfc_main$30 = /* @__PURE__ */ defineComponent({
10975
+ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
10595
10976
  name: "PaginationEllipsis",
10596
10977
  __name: "PaginationEllipsis",
10597
10978
  props: {
@@ -10632,11 +11013,11 @@ const _sfc_main$30 = /* @__PURE__ */ defineComponent({
10632
11013
  };
10633
11014
  }
10634
11015
  });
10635
- var PaginationEllipsis_default = _sfc_main$30;
11016
+ var PaginationEllipsis_default = _sfc_main$38;
10636
11017
 
10637
11018
  //#endregion
10638
11019
  //#region src/components/Pagination/PaginationFirst.vue
10639
- const _sfc_main$29 = /* @__PURE__ */ defineComponent({
11020
+ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
10640
11021
  name: "PaginationFirst",
10641
11022
  __name: "PaginationFirst",
10642
11023
  props: {
@@ -10691,11 +11072,11 @@ const _sfc_main$29 = /* @__PURE__ */ defineComponent({
10691
11072
  };
10692
11073
  }
10693
11074
  });
10694
- var PaginationFirst_default = _sfc_main$29;
11075
+ var PaginationFirst_default = _sfc_main$37;
10695
11076
 
10696
11077
  //#endregion
10697
11078
  //#region src/components/Pagination/PaginationItem.vue
10698
- const _sfc_main$28 = /* @__PURE__ */ defineComponent({
11079
+ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
10699
11080
  name: "PaginationItem",
10700
11081
  __name: "PaginationItem",
10701
11082
  props: {
@@ -10761,11 +11142,11 @@ const _sfc_main$28 = /* @__PURE__ */ defineComponent({
10761
11142
  };
10762
11143
  }
10763
11144
  });
10764
- var PaginationItem_default = _sfc_main$28;
11145
+ var PaginationItem_default = _sfc_main$36;
10765
11146
 
10766
11147
  //#endregion
10767
11148
  //#region src/components/Pagination/PaginationLast.vue
10768
- const _sfc_main$27 = /* @__PURE__ */ defineComponent({
11149
+ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
10769
11150
  name: "PaginationLast",
10770
11151
  __name: "PaginationLast",
10771
11152
  props: {
@@ -10820,11 +11201,11 @@ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
10820
11201
  };
10821
11202
  }
10822
11203
  });
10823
- var PaginationLast_default = _sfc_main$27;
11204
+ var PaginationLast_default = _sfc_main$35;
10824
11205
 
10825
11206
  //#endregion
10826
11207
  //#region src/components/Pagination/PaginationNext.vue
10827
- const _sfc_main$26 = /* @__PURE__ */ defineComponent({
11208
+ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
10828
11209
  name: "PaginationNext",
10829
11210
  __name: "PaginationNext",
10830
11211
  props: {
@@ -10879,11 +11260,11 @@ const _sfc_main$26 = /* @__PURE__ */ defineComponent({
10879
11260
  };
10880
11261
  }
10881
11262
  });
10882
- var PaginationNext_default = _sfc_main$26;
11263
+ var PaginationNext_default = _sfc_main$34;
10883
11264
 
10884
11265
  //#endregion
10885
11266
  //#region src/components/Pagination/PaginationPrev.vue
10886
- const _sfc_main$25 = /* @__PURE__ */ defineComponent({
11267
+ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
10887
11268
  name: "PaginationPrev",
10888
11269
  __name: "PaginationPrev",
10889
11270
  props: {
@@ -10938,11 +11319,11 @@ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
10938
11319
  };
10939
11320
  }
10940
11321
  });
10941
- var PaginationPrev_default = _sfc_main$25;
11322
+ var PaginationPrev_default = _sfc_main$33;
10942
11323
 
10943
11324
  //#endregion
10944
11325
  //#region src/components/Pagination/PaginationStatus.vue
10945
- const _sfc_main$24 = /* @__PURE__ */ defineComponent({
11326
+ const _sfc_main$32 = /* @__PURE__ */ defineComponent({
10946
11327
  name: "PaginationStatus",
10947
11328
  __name: "PaginationStatus",
10948
11329
  props: {
@@ -10986,7 +11367,7 @@ const _sfc_main$24 = /* @__PURE__ */ defineComponent({
10986
11367
  };
10987
11368
  }
10988
11369
  });
10989
- var PaginationStatus_default = _sfc_main$24;
11370
+ var PaginationStatus_default = _sfc_main$32;
10990
11371
 
10991
11372
  //#endregion
10992
11373
  //#region src/components/Pagination/index.ts
@@ -11009,7 +11390,7 @@ const Pagination = {
11009
11390
  //#endregion
11010
11391
  //#region src/components/Popover/PopoverRoot.vue
11011
11392
  const [usePopoverContext, providePopoverContext] = createContext("Popover");
11012
- const _sfc_main$23 = /* @__PURE__ */ defineComponent({
11393
+ const _sfc_main$31 = /* @__PURE__ */ defineComponent({
11013
11394
  name: "PopoverRoot",
11014
11395
  __name: "PopoverRoot",
11015
11396
  props: /* @__PURE__ */ mergeModels({
@@ -11051,11 +11432,11 @@ const _sfc_main$23 = /* @__PURE__ */ defineComponent({
11051
11432
  };
11052
11433
  }
11053
11434
  });
11054
- var PopoverRoot_default = _sfc_main$23;
11435
+ var PopoverRoot_default = _sfc_main$31;
11055
11436
 
11056
11437
  //#endregion
11057
11438
  //#region src/components/Popover/PopoverActivator.vue
11058
- const _sfc_main$22 = /* @__PURE__ */ defineComponent({
11439
+ const _sfc_main$30 = /* @__PURE__ */ defineComponent({
11059
11440
  name: "PopoverActivator",
11060
11441
  __name: "PopoverActivator",
11061
11442
  props: {
@@ -11087,11 +11468,11 @@ const _sfc_main$22 = /* @__PURE__ */ defineComponent({
11087
11468
  };
11088
11469
  }
11089
11470
  });
11090
- var PopoverActivator_default = _sfc_main$22;
11471
+ var PopoverActivator_default = _sfc_main$30;
11091
11472
 
11092
11473
  //#endregion
11093
11474
  //#region src/components/Popover/PopoverContent.vue
11094
- const _sfc_main$21 = /* @__PURE__ */ defineComponent({
11475
+ const _sfc_main$29 = /* @__PURE__ */ defineComponent({
11095
11476
  name: "PopoverContent",
11096
11477
  __name: "PopoverContent",
11097
11478
  props: {
@@ -11158,7 +11539,7 @@ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
11158
11539
  };
11159
11540
  }
11160
11541
  });
11161
- var PopoverContent_default = _sfc_main$21;
11542
+ var PopoverContent_default = _sfc_main$29;
11162
11543
 
11163
11544
  //#endregion
11164
11545
  //#region src/components/Popover/index.ts
@@ -11176,7 +11557,7 @@ const Popover = {
11176
11557
  //#endregion
11177
11558
  //#region src/components/Radio/RadioGroup.vue
11178
11559
  const [useRadioGroup, provideRadioGroup] = createContext();
11179
- const _sfc_main$20 = /* @__PURE__ */ defineComponent({
11560
+ const _sfc_main$28 = /* @__PURE__ */ defineComponent({
11180
11561
  name: "RadioGroup",
11181
11562
  __name: "RadioGroup",
11182
11563
  props: /* @__PURE__ */ mergeModels({
@@ -11238,12 +11619,12 @@ const _sfc_main$20 = /* @__PURE__ */ defineComponent({
11238
11619
  };
11239
11620
  }
11240
11621
  });
11241
- var RadioGroup_default = _sfc_main$20;
11622
+ var RadioGroup_default = _sfc_main$28;
11242
11623
 
11243
11624
  //#endregion
11244
11625
  //#region src/components/Radio/RadioRoot.vue
11245
11626
  const [useRadioRoot, provideRadioRoot] = createContext();
11246
- const _sfc_main$19 = /* @__PURE__ */ defineComponent({
11627
+ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
11247
11628
  name: "RadioRoot",
11248
11629
  inheritAttrs: false,
11249
11630
  __name: "RadioRoot",
@@ -11368,11 +11749,11 @@ const _sfc_main$19 = /* @__PURE__ */ defineComponent({
11368
11749
  };
11369
11750
  }
11370
11751
  });
11371
- var RadioRoot_default = _sfc_main$19;
11752
+ var RadioRoot_default = _sfc_main$27;
11372
11753
 
11373
11754
  //#endregion
11374
11755
  //#region src/components/Radio/RadioHiddenInput.vue
11375
- const _hoisted_1$1 = [
11756
+ const _hoisted_1$2 = [
11376
11757
  "checked",
11377
11758
  "disabled",
11378
11759
  "form",
@@ -11390,7 +11771,7 @@ const visuallyHiddenStyle$1 = {
11390
11771
  whiteSpace: "nowrap",
11391
11772
  border: "0"
11392
11773
  };
11393
- const _sfc_main$18 = /* @__PURE__ */ defineComponent({
11774
+ const _sfc_main$26 = /* @__PURE__ */ defineComponent({
11394
11775
  name: "RadioHiddenInput",
11395
11776
  __name: "RadioHiddenInput",
11396
11777
  props: {
@@ -11421,15 +11802,15 @@ const _sfc_main$18 = /* @__PURE__ */ defineComponent({
11421
11802
  tabindex: "-1",
11422
11803
  type: "radio",
11423
11804
  value: value.value
11424
- }, null, 8, _hoisted_1$1);
11805
+ }, null, 8, _hoisted_1$2);
11425
11806
  };
11426
11807
  }
11427
11808
  });
11428
- var RadioHiddenInput_default = _sfc_main$18;
11809
+ var RadioHiddenInput_default = _sfc_main$26;
11429
11810
 
11430
11811
  //#endregion
11431
11812
  //#region src/components/Radio/RadioIndicator.vue
11432
- const _sfc_main$17 = /* @__PURE__ */ defineComponent({
11813
+ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
11433
11814
  name: "RadioIndicator",
11434
11815
  __name: "RadioIndicator",
11435
11816
  props: {
@@ -11459,7 +11840,7 @@ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
11459
11840
  };
11460
11841
  }
11461
11842
  });
11462
- var RadioIndicator_default = _sfc_main$17;
11843
+ var RadioIndicator_default = _sfc_main$25;
11463
11844
 
11464
11845
  //#endregion
11465
11846
  //#region src/components/Radio/index.ts
@@ -11504,7 +11885,7 @@ const Radio = {
11504
11885
 
11505
11886
  //#endregion
11506
11887
  //#region src/components/Scrim/Scrim.vue
11507
- const _sfc_main$16 = /* @__PURE__ */ defineComponent({
11888
+ const _sfc_main$24 = /* @__PURE__ */ defineComponent({
11508
11889
  name: "Scrim",
11509
11890
  inheritAttrs: false,
11510
11891
  __name: "Scrim",
@@ -11579,12 +11960,12 @@ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
11579
11960
  };
11580
11961
  }
11581
11962
  });
11582
- var Scrim_default = _sfc_main$16;
11963
+ var Scrim_default = _sfc_main$24;
11583
11964
 
11584
11965
  //#endregion
11585
11966
  //#region src/components/Selection/SelectionRoot.vue
11586
11967
  const [useSelectionRoot, provideSelectionRoot] = createContext();
11587
- const _sfc_main$15 = /* @__PURE__ */ defineComponent({
11968
+ const _sfc_main$23 = /* @__PURE__ */ defineComponent({
11588
11969
  name: "SelectionRoot",
11589
11970
  __name: "SelectionRoot",
11590
11971
  props: /* @__PURE__ */ mergeModels({
@@ -11634,11 +12015,11 @@ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
11634
12015
  };
11635
12016
  }
11636
12017
  });
11637
- var SelectionRoot_default = _sfc_main$15;
12018
+ var SelectionRoot_default = _sfc_main$23;
11638
12019
 
11639
12020
  //#endregion
11640
12021
  //#region src/components/Selection/SelectionItem.vue
11641
- const _sfc_main$14 = /* @__PURE__ */ defineComponent({
12022
+ const _sfc_main$22 = /* @__PURE__ */ defineComponent({
11642
12023
  name: "SelectionItem",
11643
12024
  __name: "SelectionItem",
11644
12025
  props: {
@@ -11680,7 +12061,7 @@ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
11680
12061
  };
11681
12062
  }
11682
12063
  });
11683
- var SelectionItem_default = _sfc_main$14;
12064
+ var SelectionItem_default = _sfc_main$22;
11684
12065
 
11685
12066
  //#endregion
11686
12067
  //#region src/components/Selection/index.ts
@@ -11694,6 +12075,997 @@ const Selection = {
11694
12075
  Item: SelectionItem_default
11695
12076
  };
11696
12077
 
12078
+ //#endregion
12079
+ //#region src/components/Slider/SliderRoot.vue
12080
+ const [useSliderRoot, provideSliderRoot] = createContext();
12081
+ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
12082
+ name: "SliderRoot",
12083
+ inheritAttrs: false,
12084
+ __name: "SliderRoot",
12085
+ props: /* @__PURE__ */ mergeModels({
12086
+ id: { default: () => useId$1() },
12087
+ min: { default: 0 },
12088
+ max: { default: 100 },
12089
+ step: { default: 1 },
12090
+ disabled: { default: false },
12091
+ readonly: { default: false },
12092
+ orientation: { default: "horizontal" },
12093
+ inverted: {
12094
+ type: Boolean,
12095
+ default: false
12096
+ },
12097
+ minStepsBetweenThumbs: { default: 0 },
12098
+ crossover: {
12099
+ type: Boolean,
12100
+ default: false
12101
+ },
12102
+ name: {},
12103
+ form: {},
12104
+ namespace: { default: "v0:slider:root" },
12105
+ as: { default: "div" },
12106
+ renderless: { type: Boolean }
12107
+ }, {
12108
+ "modelValue": { default: () => [] },
12109
+ "modelModifiers": {}
12110
+ }),
12111
+ emits: /* @__PURE__ */ mergeModels([
12112
+ "update:model-value",
12113
+ "start",
12114
+ "end"
12115
+ ], ["update:modelValue"]),
12116
+ setup(__props, { emit: __emit }) {
12117
+ const attrs = useAttrs();
12118
+ const emit = __emit;
12119
+ const model = useModel(__props, "modelValue");
12120
+ const scalar = !/* @__PURE__ */ isArray(model.value) && !/* @__PURE__ */ isUndefined(model.value);
12121
+ const internal = computed({
12122
+ get: () => /* @__PURE__ */ isArray(model.value) ? model.value : [model.value],
12123
+ set: (arr) => {
12124
+ model.value = scalar ? arr[0] ?? 0 : arr;
12125
+ }
12126
+ });
12127
+ const slider = createSlider({
12128
+ min: __props.min,
12129
+ max: __props.max,
12130
+ step: __props.step,
12131
+ disabled: __props.disabled,
12132
+ readonly: __props.readonly,
12133
+ orientation: __props.orientation,
12134
+ inverted: __props.inverted,
12135
+ minStepsBetweenThumbs: __props.minStepsBetweenThumbs,
12136
+ crossover: __props.crossover
12137
+ });
12138
+ useProxyModel(slider, internal, { multiple: true });
12139
+ const dragging = shallowRef(null);
12140
+ const track = shallowRef(null);
12141
+ const dragOffset = shallowRef(0);
12142
+ function getPercent(e) {
12143
+ const el = track.value;
12144
+ if (!el) return 0;
12145
+ const rect = el.getBoundingClientRect();
12146
+ return toValue(slider.orientation) === "vertical" ? (rect.bottom - e.clientY - dragOffset.value) / rect.height * 100 : (e.clientX - rect.left - dragOffset.value) / rect.width * 100;
12147
+ }
12148
+ useToggleScope(() => !/* @__PURE__ */ isNull(dragging.value), () => {
12149
+ if (IN_BROWSER) document.documentElement.style.touchAction = "none";
12150
+ useDocumentEventListener("pointermove", (e) => {
12151
+ if (/* @__PURE__ */ isNull(dragging.value)) return;
12152
+ const percent = getPercent(e);
12153
+ slider.set(dragging.value, slider.fromPercent(percent));
12154
+ });
12155
+ useDocumentEventListener("pointerup", () => {
12156
+ if (IN_BROWSER) document.documentElement.style.touchAction = "";
12157
+ const values = [...slider.values.value];
12158
+ emit("end", scalar ? values[0] ?? 0 : values);
12159
+ dragging.value = null;
12160
+ dragOffset.value = 0;
12161
+ });
12162
+ });
12163
+ function onDrag(index, event, thumbEl) {
12164
+ if (toValue(__props.disabled)) return;
12165
+ if (toValue(__props.readonly)) return;
12166
+ if (event.button !== 0) return;
12167
+ event.preventDefault();
12168
+ if (thumbEl) {
12169
+ const rect = thumbEl.getBoundingClientRect();
12170
+ dragOffset.value = toValue(slider.orientation) === "vertical" ? event.clientY - (rect.top + rect.height / 2) : event.clientX - (rect.left + rect.width / 2);
12171
+ } else dragOffset.value = 0;
12172
+ dragging.value = index;
12173
+ const values = [...slider.values.value];
12174
+ emit("start", scalar ? values[0] ?? 0 : values);
12175
+ }
12176
+ const context = {
12177
+ ...slider,
12178
+ id: __props.id,
12179
+ name: __props.name,
12180
+ form: __props.form,
12181
+ dragging,
12182
+ track,
12183
+ onDrag
12184
+ };
12185
+ provideSliderRoot(__props.namespace, context);
12186
+ const isDisabled = toRef(() => toValue(__props.disabled));
12187
+ const isReadonly = toRef(() => toValue(__props.readonly));
12188
+ const slotProps = toRef(() => ({
12189
+ id: __props.id,
12190
+ values: slider.values.value,
12191
+ min: __props.min,
12192
+ max: __props.max,
12193
+ isDisabled: isDisabled.value,
12194
+ isReadonly: isReadonly.value,
12195
+ orientation: toValue(slider.orientation),
12196
+ attrs: {
12197
+ "data-disabled": isDisabled.value ? true : void 0,
12198
+ "data-readonly": isReadonly.value ? true : void 0,
12199
+ "data-orientation": toValue(slider.orientation)
12200
+ }
12201
+ }));
12202
+ return (_ctx, _cache) => {
12203
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(Atom_default), mergeProps({
12204
+ ...unref(attrs),
12205
+ ...slotProps.value.attrs
12206
+ }, {
12207
+ as: __props.as,
12208
+ renderless: __props.renderless
12209
+ }), {
12210
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12211
+ _: 3
12212
+ }, 16, ["as", "renderless"]), __props.name ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(slider).values.value, (_, index) => {
12213
+ return openBlock(), createBlock(SliderHiddenInput_default, {
12214
+ key: index,
12215
+ index
12216
+ }, null, 8, ["index"]);
12217
+ }), 128)) : createCommentVNode("v-if", true)], 64);
12218
+ };
12219
+ }
12220
+ });
12221
+ var SliderRoot_default = _sfc_main$21;
12222
+
12223
+ //#endregion
12224
+ //#region src/components/Slider/SliderHiddenInput.vue
12225
+ const _hoisted_1$1 = [
12226
+ "disabled",
12227
+ "form",
12228
+ "name",
12229
+ "value"
12230
+ ];
12231
+ const _sfc_main$20 = /* @__PURE__ */ defineComponent({
12232
+ name: "SliderHiddenInput",
12233
+ __name: "SliderHiddenInput",
12234
+ props: {
12235
+ namespace: { default: "v0:slider:root" },
12236
+ index: { default: 0 }
12237
+ },
12238
+ setup(__props) {
12239
+ const root = useSliderRoot(__props.namespace);
12240
+ const value = toRef(() => root.values.value[__props.index] ?? root.min);
12241
+ const isDisabled = toRef(() => toValue(root.disabled));
12242
+ return (_ctx, _cache) => {
12243
+ return openBlock(), createElementBlock("input", {
12244
+ disabled: isDisabled.value,
12245
+ form: unref(root).form,
12246
+ name: unref(root).name,
12247
+ tabindex: "-1",
12248
+ type: "hidden",
12249
+ value: value.value
12250
+ }, null, 8, _hoisted_1$1);
12251
+ };
12252
+ }
12253
+ });
12254
+ var SliderHiddenInput_default = _sfc_main$20;
12255
+
12256
+ //#endregion
12257
+ //#region src/components/Slider/SliderRange.vue
12258
+ const _sfc_main$19 = /* @__PURE__ */ defineComponent({
12259
+ name: "SliderRange",
12260
+ inheritAttrs: false,
12261
+ __name: "SliderRange",
12262
+ props: {
12263
+ namespace: { default: "v0:slider:root" },
12264
+ as: { default: "span" },
12265
+ renderless: { type: Boolean }
12266
+ },
12267
+ setup(__props) {
12268
+ const attrs = useAttrs();
12269
+ const root = useSliderRoot(__props.namespace);
12270
+ const rawStart = toRef(() => {
12271
+ const values = root.values.value;
12272
+ if (values.length === 0) return 0;
12273
+ if (values.length === 1) return root.fromValue(root.min);
12274
+ return root.fromValue(Math.min(...values));
12275
+ });
12276
+ const rawEnd = toRef(() => {
12277
+ const values = root.values.value;
12278
+ if (values.length === 0) return 0;
12279
+ if (values.length === 1) return root.fromValue(values[0]);
12280
+ return root.fromValue(Math.max(...values));
12281
+ });
12282
+ const start = toRef(() => Math.min(rawStart.value, rawEnd.value));
12283
+ const end = toRef(() => Math.max(rawStart.value, rawEnd.value));
12284
+ const isVertical = toRef(() => toValue(root.orientation) === "vertical");
12285
+ const slotProps = toRef(() => ({
12286
+ start: start.value,
12287
+ end: end.value,
12288
+ attrs: {
12289
+ "data-disabled": toValue(root.disabled) ? true : void 0,
12290
+ "data-readonly": toValue(root.readonly) ? true : void 0,
12291
+ "data-orientation": toValue(root.orientation),
12292
+ "style": {
12293
+ [isVertical.value ? "bottom" : "left"]: `${start.value}%`,
12294
+ [isVertical.value ? "height" : "width"]: `${end.value - start.value}%`
12295
+ }
12296
+ }
12297
+ }));
12298
+ return (_ctx, _cache) => {
12299
+ return openBlock(), createBlock(unref(Atom_default), mergeProps({
12300
+ ...unref(attrs),
12301
+ ...slotProps.value.attrs
12302
+ }, {
12303
+ as: __props.as,
12304
+ renderless: __props.renderless,
12305
+ style: [unref(attrs).style, slotProps.value.attrs.style]
12306
+ }), {
12307
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12308
+ _: 3
12309
+ }, 16, [
12310
+ "as",
12311
+ "renderless",
12312
+ "style"
12313
+ ]);
12314
+ };
12315
+ }
12316
+ });
12317
+ var SliderRange_default = _sfc_main$19;
12318
+
12319
+ //#endregion
12320
+ //#region src/components/Slider/SliderThumb.vue
12321
+ const _sfc_main$18 = /* @__PURE__ */ defineComponent({
12322
+ name: "SliderThumb",
12323
+ inheritAttrs: false,
12324
+ __name: "SliderThumb",
12325
+ props: {
12326
+ namespace: { default: "v0:slider:root" },
12327
+ ariaLabel: {},
12328
+ ariaLabelledby: {},
12329
+ ariaValuetext: {},
12330
+ as: { default: "span" },
12331
+ renderless: { type: Boolean }
12332
+ },
12333
+ setup(__props) {
12334
+ const attrs = useAttrs();
12335
+ const root = useSliderRoot(__props.namespace);
12336
+ const thumbRef = useTemplateRef("thumb");
12337
+ const ticket = root.register();
12338
+ onUnmounted(() => {
12339
+ root.unregister(ticket.id);
12340
+ });
12341
+ const index = toRef(() => ticket.index);
12342
+ const value = toRef(() => toValue(ticket.value));
12343
+ const pct = toRef(() => root.fromValue(value.value));
12344
+ const isDragging = toRef(() => root.dragging.value === index.value);
12345
+ const isDisabled = toRef(() => toValue(root.disabled));
12346
+ const isReadonly = toRef(() => toValue(root.readonly));
12347
+ const isVertical = toRef(() => toValue(root.orientation) === "vertical");
12348
+ const valueMin = toRef(() => {
12349
+ if (root.crossover) return root.min;
12350
+ const prev = root.values.value[index.value - 1];
12351
+ return /* @__PURE__ */ isUndefined(prev) ? root.min : prev;
12352
+ });
12353
+ const valueMax = toRef(() => {
12354
+ if (root.crossover) return root.max;
12355
+ const next = root.values.value[index.value + 1];
12356
+ return /* @__PURE__ */ isUndefined(next) ? root.max : next;
12357
+ });
12358
+ function onPointerdown(e) {
12359
+ root.onDrag(index.value, e, thumbRef.value?.element ?? void 0);
12360
+ }
12361
+ function onKeydown(e) {
12362
+ if (isDisabled.value || isReadonly.value) return;
12363
+ const isInverted = toValue(root.inverted);
12364
+ const actions = {
12365
+ ArrowRight: () => isInverted ? root.down(index.value) : root.up(index.value),
12366
+ ArrowUp: () => root.up(index.value),
12367
+ ArrowLeft: () => isInverted ? root.up(index.value) : root.down(index.value),
12368
+ ArrowDown: () => root.down(index.value),
12369
+ PageUp: () => root.up(index.value, 10),
12370
+ PageDown: () => root.down(index.value, 10),
12371
+ Home: () => root.floor(index.value),
12372
+ End: () => root.ceil(index.value)
12373
+ };
12374
+ if (e.shiftKey && e.key.startsWith("Arrow")) {
12375
+ e.preventDefault();
12376
+ const base = e.key === "ArrowRight" || e.key === "ArrowUp" ? "up" : "down";
12377
+ root[(e.key === "ArrowRight" || e.key === "ArrowLeft") && isInverted ? base === "up" ? "down" : "up" : base](index.value, 10);
12378
+ return;
12379
+ }
12380
+ const action = actions[e.key];
12381
+ if (!action) return;
12382
+ e.preventDefault();
12383
+ action();
12384
+ }
12385
+ const dataState = toRef(() => isDragging.value ? "dragging" : "idle");
12386
+ const slotProps = toRef(() => ({
12387
+ index: index.value,
12388
+ value: value.value,
12389
+ percent: pct.value,
12390
+ isDragging: isDragging.value,
12391
+ attrs: {
12392
+ "role": "slider",
12393
+ "tabindex": isDisabled.value ? -1 : 0,
12394
+ "aria-valuenow": value.value,
12395
+ "aria-valuemin": valueMin.value,
12396
+ "aria-valuemax": valueMax.value,
12397
+ "aria-valuetext": __props.ariaValuetext || void 0,
12398
+ "aria-orientation": toValue(root.orientation),
12399
+ "aria-disabled": isDisabled.value ? true : void 0,
12400
+ "aria-readonly": isReadonly.value ? true : void 0,
12401
+ "aria-label": __props.ariaLabel || void 0,
12402
+ "aria-labelledby": __props.ariaLabelledby || void 0,
12403
+ "data-state": dataState.value,
12404
+ "data-disabled": isDisabled.value ? true : void 0,
12405
+ "data-readonly": isReadonly.value ? true : void 0,
12406
+ "style": {
12407
+ [isVertical.value ? "bottom" : "left"]: `${pct.value}%`,
12408
+ "touch-action": "none"
12409
+ },
12410
+ "onKeydown": onKeydown,
12411
+ "onPointerdown": onPointerdown
12412
+ }
12413
+ }));
12414
+ return (_ctx, _cache) => {
12415
+ return openBlock(), createBlock(unref(Atom_default), mergeProps({ ref: "thumb" }, {
12416
+ ...unref(attrs),
12417
+ ...slotProps.value.attrs
12418
+ }, {
12419
+ as: __props.as,
12420
+ renderless: __props.renderless,
12421
+ style: [unref(attrs).style, slotProps.value.attrs.style]
12422
+ }), {
12423
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12424
+ _: 3
12425
+ }, 16, [
12426
+ "as",
12427
+ "renderless",
12428
+ "style"
12429
+ ]);
12430
+ };
12431
+ }
12432
+ });
12433
+ var SliderThumb_default = _sfc_main$18;
12434
+
12435
+ //#endregion
12436
+ //#region src/components/Slider/SliderTrack.vue
12437
+ const _sfc_main$17 = /* @__PURE__ */ defineComponent({
12438
+ name: "SliderTrack",
12439
+ inheritAttrs: false,
12440
+ __name: "SliderTrack",
12441
+ props: {
12442
+ namespace: { default: "v0:slider:root" },
12443
+ as: { default: "div" },
12444
+ renderless: { type: Boolean }
12445
+ },
12446
+ setup(__props) {
12447
+ const attrs = useAttrs();
12448
+ const root = useSliderRoot(__props.namespace);
12449
+ const trackRef = useTemplateRef("track");
12450
+ watchEffect(() => {
12451
+ root.track.value = trackRef.value?.element ?? null;
12452
+ });
12453
+ function nearest(value) {
12454
+ let closest = 0;
12455
+ let distance = Infinity;
12456
+ for (let index = 0; index < root.values.value.length; index++) {
12457
+ const d = Math.abs(root.values.value[index] - value);
12458
+ if (d < distance) {
12459
+ distance = d;
12460
+ closest = index;
12461
+ }
12462
+ }
12463
+ return closest;
12464
+ }
12465
+ function onPointerdown(e) {
12466
+ if (toValue(root.disabled)) return;
12467
+ if (toValue(root.readonly)) return;
12468
+ if (e.button !== 0) return;
12469
+ const el = trackRef.value?.element;
12470
+ if (!el) return;
12471
+ const rect = el.getBoundingClientRect();
12472
+ const percent = toValue(root.orientation) === "vertical" ? (rect.bottom - e.clientY) / rect.height * 100 : (e.clientX - rect.left) / rect.width * 100;
12473
+ const value = root.fromPercent(percent);
12474
+ const index = nearest(value);
12475
+ root.set(index, value);
12476
+ root.onDrag(index, e);
12477
+ }
12478
+ const slotProps = toRef(() => ({ attrs: {
12479
+ "data-disabled": toValue(root.disabled) ? true : void 0,
12480
+ "data-readonly": toValue(root.readonly) ? true : void 0,
12481
+ "data-orientation": toValue(root.orientation),
12482
+ "style": { "touch-action": "none" },
12483
+ "onPointerdown": onPointerdown
12484
+ } }));
12485
+ return (_ctx, _cache) => {
12486
+ return openBlock(), createBlock(unref(Atom_default), mergeProps({ ref: "track" }, {
12487
+ ...unref(attrs),
12488
+ ...slotProps.value.attrs
12489
+ }, {
12490
+ as: __props.as,
12491
+ renderless: __props.renderless,
12492
+ style: [unref(attrs).style, slotProps.value.attrs.style]
12493
+ }), {
12494
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12495
+ _: 3
12496
+ }, 16, [
12497
+ "as",
12498
+ "renderless",
12499
+ "style"
12500
+ ]);
12501
+ };
12502
+ }
12503
+ });
12504
+ var SliderTrack_default = _sfc_main$17;
12505
+
12506
+ //#endregion
12507
+ //#region src/components/Slider/index.ts
12508
+ /**
12509
+ * Slider component with sub-components for range input controls.
12510
+ *
12511
+ * @see https://0.vuetifyjs.com/components/slider
12512
+ *
12513
+ * @example
12514
+ * ```vue
12515
+ * <script setup lang="ts">
12516
+ * import { Slider } from '@vuetify/v0'
12517
+ * import { ref } from 'vue'
12518
+ *
12519
+ * const value = ref([50])
12520
+ * <\/script>
12521
+ *
12522
+ * <template>
12523
+ * <Slider.Root v-model="value" :min="0" :max="100">
12524
+ * <Slider.Track>
12525
+ * <Slider.Range />
12526
+ * </Slider.Track>
12527
+ * <Slider.Thumb />
12528
+ * </Slider.Root>
12529
+ * </template>
12530
+ * ```
12531
+ */
12532
+ const Slider = {
12533
+ Root: SliderRoot_default,
12534
+ Track: SliderTrack_default,
12535
+ Range: SliderRange_default,
12536
+ Thumb: SliderThumb_default,
12537
+ HiddenInput: SliderHiddenInput_default
12538
+ };
12539
+
12540
+ //#endregion
12541
+ //#region src/components/Splitter/SplitterRoot.vue
12542
+ const [useSplitterRoot, provideSplitterRoot] = createContext("v0:splitter");
12543
+ const _sfc_main$16 = /* @__PURE__ */ defineComponent({
12544
+ name: "SplitterRoot",
12545
+ inheritAttrs: false,
12546
+ __name: "SplitterRoot",
12547
+ props: {
12548
+ orientation: { default: "horizontal" },
12549
+ disabled: {
12550
+ type: Boolean,
12551
+ default: false
12552
+ },
12553
+ as: { default: "div" },
12554
+ renderless: { type: Boolean }
12555
+ },
12556
+ emits: ["layout"],
12557
+ setup(__props, { expose: __expose, emit: __emit }) {
12558
+ const attrs = useAttrs();
12559
+ const emit = __emit;
12560
+ const rootAtom = useTemplateRef("root");
12561
+ const rootEl = toRef(() => rootAtom.value?.element ?? null);
12562
+ const draggingHandle = shallowRef(null);
12563
+ const dragging = toRef(() => !/* @__PURE__ */ isNull(draggingHandle.value));
12564
+ const panels = createSelection({
12565
+ multiple: true,
12566
+ enroll: true,
12567
+ reactive: true
12568
+ });
12569
+ const handles = createRegistry();
12570
+ watch(() => panels.collection.size, (size, prev) => {
12571
+ const values = panels.values();
12572
+ if (values.length === 0) return;
12573
+ const total = values.reduce((sum, t) => sum + t.size, 0);
12574
+ if (total === 0 || total === 100) return;
12575
+ distribute(!/* @__PURE__ */ isUndefined(prev) && size > prev ? values.map((t) => t.defaultSize) : values.map((t) => t.size));
12576
+ }, { flush: "post" });
12577
+ function panel(index) {
12578
+ const id = panels.lookup(index);
12579
+ return /* @__PURE__ */ isNullOrUndefined(id) ? void 0 : panels.get(id);
12580
+ }
12581
+ function effectiveMin(ticket) {
12582
+ return ticket.collapsible && !toValue(ticket.isSelected) ? ticket.collapsedSize : ticket.minSize;
12583
+ }
12584
+ function resize(index, delta, options) {
12585
+ const before = panel(index);
12586
+ const after = panel(index + 1);
12587
+ if (!before || !after) return;
12588
+ const total = before.size + after.size;
12589
+ const min1 = effectiveMin(before);
12590
+ const min2 = effectiveMin(after);
12591
+ const lower = Math.max(min1, total - after.maxSize);
12592
+ const upper = Math.min(before.maxSize, total - min2);
12593
+ const size = /* @__PURE__ */ clamp(before.size + delta, lower, upper);
12594
+ before.size = size;
12595
+ after.size = total - size;
12596
+ for (const p of [before, after]) {
12597
+ if (!p.collapsible) continue;
12598
+ const collapsed = !toValue(p.isSelected);
12599
+ if (!collapsed && p.size <= p.collapsedSize) p.unselect();
12600
+ else if (collapsed && p.size > p.collapsedSize) p.select();
12601
+ }
12602
+ if (options?.emit) emitLayout();
12603
+ }
12604
+ function collapse(index, neighborIndex) {
12605
+ const ticket = panel(index);
12606
+ if (!ticket?.collapsible || !toValue(ticket.isSelected)) return;
12607
+ const neighbor = panel(neighborIndex ?? (index > 0 ? index - 1 : index + 1));
12608
+ if (!neighbor) return;
12609
+ const diff = ticket.size - ticket.collapsedSize;
12610
+ const absorbed = Math.min(diff, neighbor.maxSize - neighbor.size);
12611
+ neighbor.size += absorbed;
12612
+ ticket.size = ticket.collapsedSize;
12613
+ let remaining = diff - absorbed;
12614
+ if (remaining > 0) for (const p of panels.values()) {
12615
+ if (p.id === ticket.id || p.id === neighbor.id || remaining <= 0) continue;
12616
+ const room = p.maxSize - p.size;
12617
+ const take = Math.min(remaining, room);
12618
+ p.size += take;
12619
+ remaining -= take;
12620
+ }
12621
+ if (remaining > 0) ticket.size += remaining;
12622
+ if (ticket.size <= ticket.collapsedSize) ticket.unselect();
12623
+ emitLayout();
12624
+ }
12625
+ function expand(index, neighborIndex) {
12626
+ const ticket = panel(index);
12627
+ if (!ticket?.collapsible || toValue(ticket.isSelected)) return;
12628
+ const neighbor = panel(neighborIndex ?? (index > 0 ? index - 1 : index + 1));
12629
+ if (!neighbor) return;
12630
+ const diff = Math.min(ticket.defaultSize, ticket.maxSize) - ticket.collapsedSize;
12631
+ const available = neighbor.size - neighbor.minSize;
12632
+ const take = Math.min(diff, available);
12633
+ if (ticket.collapsedSize + take < ticket.minSize) return;
12634
+ neighbor.size -= take;
12635
+ ticket.size = ticket.collapsedSize + take;
12636
+ ticket.select();
12637
+ emitLayout();
12638
+ }
12639
+ function distribute(incoming) {
12640
+ const values = panels.values();
12641
+ if (incoming.length !== values.length) return;
12642
+ for (const [index, ticket] of values.entries()) {
12643
+ const value = incoming[index];
12644
+ ticket.size = /* @__PURE__ */ clamp(value, ticket.collapsible && value <= ticket.collapsedSize ? ticket.collapsedSize : ticket.minSize, ticket.maxSize);
12645
+ }
12646
+ let remainder = 100 - values.reduce((sum, t) => sum + t.size, 0);
12647
+ for (const ticket of values) {
12648
+ if (remainder === 0) break;
12649
+ const min = ticket.collapsible && ticket.size <= ticket.collapsedSize ? ticket.collapsedSize : ticket.minSize;
12650
+ const room = remainder > 0 ? ticket.maxSize - ticket.size : ticket.size - min;
12651
+ const adjust = remainder > 0 ? Math.min(remainder, room) : Math.max(remainder, -room);
12652
+ ticket.size += adjust;
12653
+ remainder -= adjust;
12654
+ }
12655
+ for (const ticket of values) {
12656
+ if (!ticket.collapsible) continue;
12657
+ const collapsed = !toValue(ticket.isSelected);
12658
+ if (!collapsed && ticket.size <= ticket.collapsedSize) ticket.unselect();
12659
+ else if (collapsed && ticket.size > ticket.collapsedSize) ticket.select();
12660
+ }
12661
+ emit("layout", values.map((t) => t.size));
12662
+ }
12663
+ function onStartDrag(index) {
12664
+ draggingHandle.value = index;
12665
+ }
12666
+ function onEndDrag() {
12667
+ draggingHandle.value = null;
12668
+ emitLayout();
12669
+ }
12670
+ function emitLayout() {
12671
+ emit("layout", panels.values().map((t) => t.size));
12672
+ }
12673
+ provideSplitterRoot({
12674
+ orientation: toRef(() => __props.orientation),
12675
+ disabled: toRef(() => __props.disabled),
12676
+ panels,
12677
+ handles,
12678
+ dragging,
12679
+ draggingHandle,
12680
+ rootEl,
12681
+ panel,
12682
+ resize,
12683
+ onStartDrag,
12684
+ onEndDrag,
12685
+ collapse,
12686
+ expand,
12687
+ distribute
12688
+ });
12689
+ __expose({ distribute });
12690
+ const slotProps = toRef(() => ({
12691
+ orientation: __props.orientation,
12692
+ isDisabled: __props.disabled,
12693
+ sizes: panels.values().map((t) => t.size),
12694
+ isDragging: dragging.value,
12695
+ distribute,
12696
+ attrs: {
12697
+ "data-orientation": __props.orientation,
12698
+ "data-dragging": dragging.value || void 0
12699
+ }
12700
+ }));
12701
+ return (_ctx, _cache) => {
12702
+ return openBlock(), createBlock(unref(Atom_default), mergeProps({ ref: "root" }, {
12703
+ ...unref(attrs),
12704
+ ...slotProps.value.attrs
12705
+ }, {
12706
+ as: __props.as,
12707
+ renderless: __props.renderless,
12708
+ style: {
12709
+ display: "flex",
12710
+ flexDirection: __props.orientation === "horizontal" ? "row" : "column"
12711
+ }
12712
+ }), {
12713
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12714
+ _: 3
12715
+ }, 16, [
12716
+ "as",
12717
+ "renderless",
12718
+ "style"
12719
+ ]);
12720
+ };
12721
+ }
12722
+ });
12723
+ var SplitterRoot_default = _sfc_main$16;
12724
+
12725
+ //#endregion
12726
+ //#region src/components/Splitter/SplitterPanel.vue
12727
+ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
12728
+ name: "SplitterPanel",
12729
+ inheritAttrs: false,
12730
+ __name: "SplitterPanel",
12731
+ props: /* @__PURE__ */ mergeModels({
12732
+ defaultSize: {},
12733
+ minSize: { default: 0 },
12734
+ maxSize: { default: 100 },
12735
+ collapsible: {
12736
+ type: Boolean,
12737
+ default: false
12738
+ },
12739
+ collapsedSize: { default: 0 },
12740
+ as: { default: "div" },
12741
+ renderless: { type: Boolean }
12742
+ }, {
12743
+ "collapsed": {
12744
+ type: Boolean,
12745
+ default: void 0
12746
+ },
12747
+ "collapsedModifiers": {}
12748
+ }),
12749
+ emits: /* @__PURE__ */ mergeModels(["update:collapsed", "resize"], ["update:collapsed"]),
12750
+ setup(__props, { expose: __expose, emit: __emit }) {
12751
+ const attrs = useAttrs();
12752
+ const collapsed = useModel(__props, "collapsed");
12753
+ const emit = __emit;
12754
+ const splitter = useSplitterRoot();
12755
+ const panelId = /* @__PURE__ */ useId();
12756
+ const ticket = splitter.panels.register({
12757
+ id: panelId,
12758
+ size: __props.defaultSize,
12759
+ minSize: __props.minSize,
12760
+ maxSize: __props.maxSize,
12761
+ collapsible: __props.collapsible,
12762
+ collapsedSize: __props.collapsedSize,
12763
+ defaultSize: __props.defaultSize
12764
+ });
12765
+ watchEffect(() => {
12766
+ ticket.minSize = __props.minSize;
12767
+ ticket.maxSize = __props.maxSize;
12768
+ ticket.collapsible = __props.collapsible;
12769
+ ticket.collapsedSize = __props.collapsedSize;
12770
+ ticket.defaultSize = __props.defaultSize;
12771
+ });
12772
+ onUnmounted(() => {
12773
+ splitter.panels.unregister(ticket.id);
12774
+ });
12775
+ const size = toRef(() => ticket.size);
12776
+ const isCollapsed = toRef(() => __props.collapsible && !toValue(ticket.isSelected));
12777
+ function collapse() {
12778
+ splitter.collapse(ticket.index);
12779
+ }
12780
+ function expand() {
12781
+ splitter.expand(ticket.index);
12782
+ }
12783
+ __expose({
12784
+ collapse,
12785
+ expand,
12786
+ size,
12787
+ isCollapsed
12788
+ });
12789
+ watch(collapsed, (val) => {
12790
+ if (val === void 0) return;
12791
+ if (val && !isCollapsed.value) collapse();
12792
+ else if (!val && isCollapsed.value) expand();
12793
+ }, {
12794
+ immediate: true,
12795
+ flush: "post"
12796
+ });
12797
+ watch(isCollapsed, (val) => {
12798
+ if (collapsed.value === void 0) return;
12799
+ collapsed.value = val;
12800
+ });
12801
+ watch(size, (val) => emit("resize", val));
12802
+ const slotProps = toRef(() => ({
12803
+ size: size.value,
12804
+ isCollapsed: isCollapsed.value,
12805
+ collapse,
12806
+ expand,
12807
+ attrs: {
12808
+ "id": panelId,
12809
+ "data-orientation": splitter.orientation.value,
12810
+ "data-panel-index": ticket.index,
12811
+ "data-collapsed": isCollapsed.value || void 0
12812
+ }
12813
+ }));
12814
+ return (_ctx, _cache) => {
12815
+ return openBlock(), createBlock(unref(Atom_default), mergeProps({
12816
+ ...unref(attrs),
12817
+ ...slotProps.value.attrs
12818
+ }, {
12819
+ as: __props.as,
12820
+ renderless: __props.renderless,
12821
+ style: {
12822
+ flexGrow: 0,
12823
+ flexShrink: 0,
12824
+ flexBasis: `${size.value}%`,
12825
+ overflow: "hidden"
12826
+ }
12827
+ }), {
12828
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12829
+ _: 3
12830
+ }, 16, [
12831
+ "as",
12832
+ "renderless",
12833
+ "style"
12834
+ ]);
12835
+ };
12836
+ }
12837
+ });
12838
+ var SplitterPanel_default = _sfc_main$15;
12839
+
12840
+ //#endregion
12841
+ //#region src/components/Splitter/SplitterHandle.vue
12842
+ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
12843
+ name: "SplitterHandle",
12844
+ inheritAttrs: false,
12845
+ __name: "SplitterHandle",
12846
+ props: {
12847
+ disabled: {
12848
+ type: Boolean,
12849
+ default: false
12850
+ },
12851
+ label: {},
12852
+ as: { default: "div" },
12853
+ renderless: { type: Boolean }
12854
+ },
12855
+ setup(__props) {
12856
+ const attrs = useAttrs();
12857
+ const ARROW_STEP = 1;
12858
+ const PAGE_STEP = 10;
12859
+ const splitter = useSplitterRoot();
12860
+ const ticket = splitter.handles.register();
12861
+ onUnmounted(() => {
12862
+ splitter.handles.unregister(ticket.id);
12863
+ });
12864
+ const hovering = shallowRef(false);
12865
+ const startPosition = shallowRef(0);
12866
+ let rafId = 0;
12867
+ let latestPos = 0;
12868
+ const isDisabled = toRef(() => __props.disabled || splitter.disabled.value);
12869
+ const isHorizontal = toRef(() => splitter.orientation.value === "horizontal");
12870
+ const state = toRef(() => {
12871
+ if (splitter.draggingHandle.value === ticket.index) return "drag";
12872
+ if (hovering.value) return "hover";
12873
+ return "inactive";
12874
+ });
12875
+ const valuenow = toRef(() => Math.round(splitter.panel(ticket.index)?.size ?? 0));
12876
+ const valuemin = toRef(() => {
12877
+ const p = splitter.panel(ticket.index);
12878
+ if (!p) return 0;
12879
+ return p.collapsible ? p.collapsedSize : p.minSize;
12880
+ });
12881
+ const valuemax = toRef(() => {
12882
+ const p = splitter.panel(ticket.index);
12883
+ const adjacent = splitter.panel(ticket.index + 1);
12884
+ if (!p || !adjacent) return 100;
12885
+ const adjMin = adjacent.collapsible ? adjacent.collapsedSize : adjacent.minSize;
12886
+ return Math.min(p.maxSize, p.size + adjacent.size - adjMin);
12887
+ });
12888
+ function onPointerDown(e) {
12889
+ if (isDisabled.value) return;
12890
+ e.currentTarget.setPointerCapture(e.pointerId);
12891
+ startPosition.value = isHorizontal.value ? e.clientX : e.clientY;
12892
+ if (IN_BROWSER) {
12893
+ document.documentElement.style.userSelect = "none";
12894
+ document.documentElement.style.touchAction = "none";
12895
+ }
12896
+ splitter.onStartDrag(ticket.index);
12897
+ }
12898
+ useToggleScope(() => splitter.draggingHandle.value === ticket.index, () => {
12899
+ useDocumentEventListener("pointermove", (e) => {
12900
+ latestPos = isHorizontal.value ? e.clientX : e.clientY;
12901
+ if (rafId) return;
12902
+ rafId = requestAnimationFrame(() => {
12903
+ const root = splitter.rootEl.value;
12904
+ if (!root) return;
12905
+ const rootSize = isHorizontal.value ? root.offsetWidth : root.offsetHeight;
12906
+ if (!rootSize) return;
12907
+ const delta = (latestPos - startPosition.value) / rootSize * 100;
12908
+ startPosition.value = latestPos;
12909
+ splitter.resize(ticket.index, delta);
12910
+ rafId = 0;
12911
+ });
12912
+ });
12913
+ useDocumentEventListener("pointerup", () => {
12914
+ if (rafId) cancelAnimationFrame(rafId);
12915
+ rafId = 0;
12916
+ if (IN_BROWSER) {
12917
+ document.documentElement.style.userSelect = "";
12918
+ document.documentElement.style.touchAction = "";
12919
+ }
12920
+ splitter.onEndDrag();
12921
+ });
12922
+ onScopeDispose(() => {
12923
+ if (rafId) cancelAnimationFrame(rafId);
12924
+ rafId = 0;
12925
+ splitter.onEndDrag();
12926
+ if (IN_BROWSER) {
12927
+ document.documentElement.style.userSelect = "";
12928
+ document.documentElement.style.touchAction = "";
12929
+ }
12930
+ });
12931
+ });
12932
+ function onKeydown(e) {
12933
+ if (isDisabled.value) return;
12934
+ const forward = isHorizontal.value ? "ArrowRight" : "ArrowDown";
12935
+ const backward = isHorizontal.value ? "ArrowLeft" : "ArrowUp";
12936
+ switch (e.key) {
12937
+ case forward:
12938
+ e.preventDefault();
12939
+ splitter.resize(ticket.index, ARROW_STEP, { emit: true });
12940
+ break;
12941
+ case backward:
12942
+ e.preventDefault();
12943
+ splitter.resize(ticket.index, -ARROW_STEP, { emit: true });
12944
+ break;
12945
+ case "PageDown":
12946
+ e.preventDefault();
12947
+ splitter.resize(ticket.index, PAGE_STEP, { emit: true });
12948
+ break;
12949
+ case "PageUp":
12950
+ e.preventDefault();
12951
+ splitter.resize(ticket.index, -PAGE_STEP, { emit: true });
12952
+ break;
12953
+ case "Home": {
12954
+ e.preventDefault();
12955
+ const p = splitter.panel(ticket.index);
12956
+ if (p?.collapsible) splitter.collapse(ticket.index, ticket.index + 1);
12957
+ else {
12958
+ const current = p?.size ?? 0;
12959
+ splitter.resize(ticket.index, valuemin.value - current, { emit: true });
12960
+ }
12961
+ break;
12962
+ }
12963
+ case "End": {
12964
+ e.preventDefault();
12965
+ const p = splitter.panel(ticket.index);
12966
+ if (p?.collapsible && !toValue(p.isSelected)) splitter.expand(ticket.index, ticket.index + 1);
12967
+ else {
12968
+ const current = p?.size ?? 0;
12969
+ splitter.resize(ticket.index, valuemax.value - current, { emit: true });
12970
+ }
12971
+ break;
12972
+ }
12973
+ case "Enter": {
12974
+ e.preventDefault();
12975
+ const p = splitter.panel(ticket.index);
12976
+ if (!p?.collapsible) break;
12977
+ if (toValue(p.isSelected)) splitter.collapse(ticket.index, ticket.index + 1);
12978
+ else splitter.expand(ticket.index, ticket.index + 1);
12979
+ break;
12980
+ }
12981
+ }
12982
+ }
12983
+ function onPointerEnter() {
12984
+ hovering.value = true;
12985
+ }
12986
+ function onPointerLeave() {
12987
+ hovering.value = false;
12988
+ }
12989
+ const ariaOrientation = toRef(() => splitter.orientation.value === "horizontal" ? "vertical" : "horizontal");
12990
+ const ariaControls = toRef(() => {
12991
+ const p = splitter.panel(ticket.index);
12992
+ return /* @__PURE__ */ isNullOrUndefined(p) ? void 0 : String(p.id);
12993
+ });
12994
+ const slotProps = toRef(() => ({
12995
+ isDragging: splitter.draggingHandle.value === ticket.index,
12996
+ isDisabled: isDisabled.value,
12997
+ state: state.value,
12998
+ attrs: {
12999
+ "role": "separator",
13000
+ "tabindex": isDisabled.value ? -1 : 0,
13001
+ "aria-valuenow": valuenow.value,
13002
+ "aria-valuemin": valuemin.value,
13003
+ "aria-valuemax": valuemax.value,
13004
+ "aria-orientation": ariaOrientation.value,
13005
+ "aria-controls": ariaControls.value,
13006
+ "aria-label": __props.label || void 0,
13007
+ "aria-disabled": isDisabled.value || void 0,
13008
+ "data-state": state.value,
13009
+ "data-orientation": splitter.orientation.value,
13010
+ "data-disabled": isDisabled.value || void 0,
13011
+ "style": { "touch-action": "none" },
13012
+ "onPointerdown": onPointerDown,
13013
+ "onPointerenter": onPointerEnter,
13014
+ "onPointerleave": onPointerLeave,
13015
+ "onKeydown": onKeydown
13016
+ }
13017
+ }));
13018
+ return (_ctx, _cache) => {
13019
+ return openBlock(), createBlock(unref(Atom_default), mergeProps({
13020
+ ...unref(attrs),
13021
+ ...slotProps.value.attrs
13022
+ }, {
13023
+ as: __props.as,
13024
+ renderless: __props.renderless,
13025
+ style: { flexShrink: 0 }
13026
+ }), {
13027
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13028
+ _: 3
13029
+ }, 16, ["as", "renderless"]);
13030
+ };
13031
+ }
13032
+ });
13033
+ var SplitterHandle_default = _sfc_main$14;
13034
+
13035
+ //#endregion
13036
+ //#region src/components/Splitter/index.ts
13037
+ /**
13038
+ * Splitter component with sub-components for building resizable panel layouts.
13039
+ *
13040
+ * @see https://0.vuetifyjs.com/components/splitter
13041
+ *
13042
+ * @example
13043
+ * ```vue
13044
+ * <script lang="ts" setup>
13045
+ * import { Splitter } from '@vuetify/v0'
13046
+ * <\/script>
13047
+ *
13048
+ * <template>
13049
+ * <Splitter.Root orientation="horizontal">
13050
+ * <Splitter.Panel :default-size="60" :min-size="20">
13051
+ * Left content
13052
+ * </Splitter.Panel>
13053
+ *
13054
+ * <Splitter.Handle />
13055
+ *
13056
+ * <Splitter.Panel :default-size="40" :min-size="20">
13057
+ * Right content
13058
+ * </Splitter.Panel>
13059
+ * </Splitter.Root>
13060
+ * </template>
13061
+ * ```
13062
+ */
13063
+ const Splitter = {
13064
+ Root: SplitterRoot_default,
13065
+ Panel: SplitterPanel_default,
13066
+ Handle: SplitterHandle_default
13067
+ };
13068
+
11697
13069
  //#endregion
11698
13070
  //#region src/components/Switch/SwitchGroup.vue
11699
13071
  const [useSwitchGroup, provideSwitchGroup] = createContext();
@@ -12701,4 +14073,4 @@ const Tabs = {
12701
14073
  };
12702
14074
 
12703
14075
  //#endregion
12704
- export { Atom_default as Atom, Avatar, AvatarFallback_default as AvatarFallback, AvatarImage_default as AvatarImage, AvatarRoot_default as AvatarRoot, Breadcrumbs, BreadcrumbsDivider_default as BreadcrumbsDivider, BreadcrumbsEllipsis_default as BreadcrumbsEllipsis, BreadcrumbsItem_default as BreadcrumbsItem, BreadcrumbsLink_default as BreadcrumbsLink, BreadcrumbsList_default as BreadcrumbsList, BreadcrumbsPage_default as BreadcrumbsPage, BreadcrumbsRoot_default as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, CheckboxGroup_default as CheckboxGroup, CheckboxHiddenInput_default as CheckboxHiddenInput, CheckboxIndicator_default as CheckboxIndicator, CheckboxRoot_default as CheckboxRoot, CheckboxSelectAll_default as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, DialogActivator_default as DialogActivator, DialogClose_default as DialogClose, DialogContent_default as DialogContent, DialogDescription_default as DialogDescription, DialogRoot_default as DialogRoot, DialogTitle_default as DialogTitle, ExpansionPanel, ExpansionPanelActivator_default as ExpansionPanelActivator, ExpansionPanelContent_default as ExpansionPanelContent, ExpansionPanelHeader_default as ExpansionPanelHeader, ExpansionPanelItem_default as ExpansionPanelItem, ExpansionPanelRoot_default as ExpansionPanelRoot, FeaturesAdapter, 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, PopoverActivator_default as PopoverActivator, PopoverContent_default as PopoverContent, PopoverRoot_default as PopoverRoot, Radio, RadioGroup_default as RadioGroup, RadioHiddenInput_default as RadioHiddenInput, RadioIndicator_default as RadioIndicator, RadioRoot_default as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, Scrim_default as Scrim, Selection, SelectionItem_default as SelectionItem, SelectionRoot_default as SelectionRoot, ServerAdapter, Single, SingleItem_default as SingleItem, SingleRoot_default as SingleRoot, Step, StepItem_default as StepItem, StepRoot_default as StepRoot, Switch, SwitchGroup_default as SwitchGroup, SwitchHiddenInput_default as SwitchHiddenInput, SwitchRoot_default as SwitchRoot, SwitchSelectAll_default as SwitchSelectAll, SwitchThumb_default as SwitchThumb, SwitchTrack_default as SwitchTrack, Tabs, TabsItem_default as TabsItem, TabsList_default as TabsList, TabsPanel_default as TabsPanel, TabsRoot_default as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createNested, createNestedContext, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, createRegistry, createRegistryContext, createSelection, createSelectionContext, createSingle, createSingleContext, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createVirtual, createVirtualContext, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideRadioGroup, provideRadioRoot, provideSelectionRoot, provideSingleRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, range, singleOpenStrategy, toArray, toElement, toReactive, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useCheckboxGroup, useCheckboxRoot, useClickOutside, useContext, useDataTable, useDate, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRegistry, useResizeObserver, useSelection, useSelectionRoot, useSingle, useSingleRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useWindowEventListener, version };
14076
+ export { Atom_default as Atom, Avatar, AvatarFallback_default as AvatarFallback, AvatarImage_default as AvatarImage, AvatarRoot_default as AvatarRoot, Breadcrumbs, BreadcrumbsDivider_default as BreadcrumbsDivider, BreadcrumbsEllipsis_default as BreadcrumbsEllipsis, BreadcrumbsItem_default as BreadcrumbsItem, BreadcrumbsLink_default as BreadcrumbsLink, BreadcrumbsList_default as BreadcrumbsList, BreadcrumbsPage_default as BreadcrumbsPage, BreadcrumbsRoot_default as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, CheckboxGroup_default as CheckboxGroup, CheckboxHiddenInput_default as CheckboxHiddenInput, CheckboxIndicator_default as CheckboxIndicator, CheckboxRoot_default as CheckboxRoot, CheckboxSelectAll_default as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, DialogActivator_default as DialogActivator, DialogClose_default as DialogClose, DialogContent_default as DialogContent, DialogDescription_default as DialogDescription, DialogRoot_default as DialogRoot, DialogTitle_default as DialogTitle, ExpansionPanel, ExpansionPanelActivator_default as ExpansionPanelActivator, ExpansionPanelContent_default as ExpansionPanelContent, ExpansionPanelHeader_default as ExpansionPanelHeader, ExpansionPanelItem_default as ExpansionPanelItem, ExpansionPanelRoot_default as ExpansionPanelRoot, FeaturesAdapter, 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, PopoverActivator_default as PopoverActivator, PopoverContent_default as PopoverContent, PopoverRoot_default as PopoverRoot, Radio, RadioGroup_default as RadioGroup, RadioHiddenInput_default as RadioHiddenInput, RadioIndicator_default as RadioIndicator, RadioRoot_default as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, Scrim_default as Scrim, Selection, SelectionItem_default as SelectionItem, SelectionRoot_default as SelectionRoot, ServerAdapter, Single, SingleItem_default as SingleItem, SingleRoot_default as SingleRoot, Slider, SliderHiddenInput_default as SliderHiddenInput, SliderRange_default as SliderRange, SliderRoot_default as SliderRoot, SliderThumb_default as SliderThumb, SliderTrack_default as SliderTrack, Splitter, SplitterHandle_default as SplitterHandle, SplitterPanel_default as SplitterPanel, SplitterRoot_default as SplitterRoot, Step, StepItem_default as StepItem, StepRoot_default as StepRoot, Switch, SwitchGroup_default as SwitchGroup, SwitchHiddenInput_default as SwitchHiddenInput, SwitchRoot_default as SwitchRoot, SwitchSelectAll_default as SwitchSelectAll, SwitchThumb_default as SwitchThumb, SwitchTrack_default as SwitchTrack, Tabs, TabsItem_default as TabsItem, TabsList_default as TabsList, TabsPanel_default as TabsPanel, TabsRoot_default as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, createRegistry, createRegistryContext, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createVirtual, createVirtualContext, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideRadioGroup, provideRadioRoot, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, range, singleOpenStrategy, toArray, toElement, toReactive, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useCheckboxGroup, useCheckboxRoot, useClickOutside, useContext, useDataTable, useDate, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRegistry, useResizeObserver, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useWindowEventListener, version };