@vuetify/v0 0.1.7 → 0.1.8

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 (77) hide show
  1. package/dist/browser/index.js +1705 -458
  2. package/dist/components/index.d.mts +2 -2
  3. package/dist/components/index.mjs +19 -19
  4. package/dist/{components-CACff-Lt.mjs → components-BbxKYAXs.mjs} +1203 -312
  5. package/dist/composables/index.d.mts +3 -3
  6. package/dist/composables/index.mjs +18 -18
  7. package/dist/constants/index.mjs +1 -1
  8. package/dist/{createDataTable-CLI4TALE.mjs → createDataTable-DZouEhvH.mjs} +2 -2
  9. package/dist/{createGroup-Cf6lK9BR.mjs → createGroup-BpJFi41X.mjs} +1 -1
  10. package/dist/{createSelection-DvOR2tKk.mjs → createSelection-8MX0OHXR.mjs} +1 -1
  11. package/dist/{createSingle-Bbcwcq4R.mjs → createSingle-CbuOBb-E.mjs} +1 -1
  12. package/dist/{createTokens-CMRBDlzN.mjs → createTokens-CXlT0Vc6.mjs} +3 -2
  13. package/dist/data-table/adapters/client/index.mjs +1 -1
  14. package/dist/data-table/adapters/index.mjs +1 -1
  15. package/dist/data-table/adapters/server/index.mjs +1 -1
  16. package/dist/data-table/adapters/virtual/index.mjs +1 -1
  17. package/dist/data-table/index.mjs +10 -10
  18. package/dist/date/index.mjs +1 -1
  19. package/dist/features/adapters/posthog/index.mjs +2 -2
  20. package/dist/features/index.d.mts +1 -1
  21. package/dist/features/index.mjs +8 -8
  22. package/dist/{globals-BqRH_jdr.mjs → globals-ClSU6mqC.mjs} +1 -1
  23. package/dist/{index-BE848tZ2.d.mts → index-63-0oJS8.d.mts} +155 -53
  24. package/dist/{index-CKbxWC4t.d.mts → index-B5NU2uB7.d.mts} +2362 -1314
  25. package/dist/{index-8sflFIN8.d.mts → index-CxW4itj1.d.mts} +2 -0
  26. package/dist/index.d.mts +4 -4
  27. package/dist/index.mjs +19 -19
  28. package/dist/json/attributes.json +252 -0
  29. package/dist/json/importMap.json +60 -0
  30. package/dist/json/tags.json +128 -0
  31. package/dist/json/web-types.json +1023 -228
  32. package/dist/locale/adapters/index.mjs +2 -2
  33. package/dist/locale/adapters/v0/index.mjs +2 -2
  34. package/dist/locale/index.d.mts +1 -1
  35. package/dist/locale/index.mjs +8 -8
  36. package/dist/logger/adapters/index.mjs +2 -2
  37. package/dist/logger/adapters/pino/index.mjs +1 -1
  38. package/dist/logger/adapters/v0/index.mjs +2 -2
  39. package/dist/logger/index.d.mts +1 -1
  40. package/dist/logger/index.mjs +3 -3
  41. package/dist/palettes/ant/index.d.mts +1 -1
  42. package/dist/palettes/index.d.mts +2 -2
  43. package/dist/palettes/material/index.d.mts +1 -1
  44. package/dist/palettes/md1/index.d.mts +1 -1
  45. package/dist/palettes/md2/index.d.mts +1 -1
  46. package/dist/palettes/radix/index.d.mts +1 -1
  47. package/dist/palettes/tailwind/index.d.mts +1 -1
  48. package/dist/permissions/adapters/index.d.mts +2 -2
  49. package/dist/permissions/adapters/index.mjs +1 -1
  50. package/dist/permissions/adapters/v0/index.d.mts +1 -1
  51. package/dist/permissions/adapters/v0/index.mjs +1 -1
  52. package/dist/permissions/index.d.mts +1 -1
  53. package/dist/permissions/index.mjs +5 -5
  54. package/dist/{posthog-DbPqmaAp.mjs → posthog-BE7-t7cV.mjs} +1 -1
  55. package/dist/rules/index.d.mts +1 -1
  56. package/dist/rules/index.mjs +9 -9
  57. package/dist/storage/index.d.mts +1 -1
  58. package/dist/storage/index.mjs +17 -17
  59. package/dist/theme/adapters/index.d.mts +1 -1
  60. package/dist/theme/adapters/index.mjs +2 -2
  61. package/dist/theme/adapters/v0/index.d.mts +1 -1
  62. package/dist/theme/adapters/v0/index.mjs +2 -2
  63. package/dist/theme/index.d.mts +1 -1
  64. package/dist/theme/index.mjs +8 -8
  65. package/dist/{useClickOutside-YOGwKo7v.mjs → useClickOutside-W0Sur1rC.mjs} +477 -125
  66. package/dist/{useFeatures-BGDgUrdr.mjs → useFeatures-CUicSI-E.mjs} +3 -3
  67. package/dist/{useLocale-C8I_fNAS.mjs → useLocale-cQlPxbpV.mjs} +11 -7
  68. package/dist/{useLogger-B70T4SgK.mjs → useLogger-DY1Hbcy1.mjs} +2 -2
  69. package/dist/{usePermissions-afVt2qR7.mjs → usePermissions-BSW59R4q.mjs} +2 -2
  70. package/dist/{useRules-7C92Xzyt.mjs → useRules-BbA6_gvs.mjs} +3 -3
  71. package/dist/{useTheme-jp2wL2FJ.mjs → useTheme-Bdx2Lj5c.mjs} +4 -4
  72. package/dist/utilities/index.mjs +1 -1
  73. package/dist/{v0-CGlkn5u7.mjs → v0-2G2476h-.mjs} +1 -1
  74. package/dist/{v0-V-cQsuZD.mjs → v0-BFseIsBi.mjs} +1 -1
  75. package/dist/{v0-1bfmyZ5_.d.mts → v0-BZINNGoC.d.mts} +1 -1
  76. package/dist/{v0-CHvU3jQE.mjs → v0-CHBrvw49.mjs} +1 -1
  77. package/package.json +2 -1
@@ -81,7 +81,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
81
81
  const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
82
82
  const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
83
83
  const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
84
- const version = "0.1.7";
84
+ const version = "0.1.8";
85
85
  /* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
86
86
  const __LOGGER_ENABLED__ = false;
87
87
  //#endregion
@@ -1357,7 +1357,8 @@ function createRegistry(options) {
1357
1357
  id,
1358
1358
  index,
1359
1359
  value,
1360
- valueIsIndex
1360
+ valueIsIndex,
1361
+ unregister: () => unregister(id)
1361
1362
  };
1362
1363
  const ticket = reactive ? shallowReactive(rawTicket) : rawTicket;
1363
1364
  collection.set(ticket.id, ticket);
@@ -3642,7 +3643,7 @@ var Vuetify0LocaleAdapter = class {
3642
3643
  * @see https://0.vuetifyjs.com/composables/plugins/use-locale
3643
3644
  */
3644
3645
  function createLocale(_options = {}) {
3645
- const { adapter = new Vuetify0LocaleAdapter(), messages = {}, ...options } = _options;
3646
+ const { adapter = new Vuetify0LocaleAdapter(), messages = {}, fallback: fallbackLocale, ...options } = _options;
3646
3647
  const tokens = createTokens(messages);
3647
3648
  const registry = createSingle(options);
3648
3649
  for (const id in messages) {
@@ -3655,8 +3656,12 @@ function createLocale(_options = {}) {
3655
3656
  if (!locale) return adapter.t(fallback ?? key, ...args);
3656
3657
  const path = `${locale}.${key}`;
3657
3658
  const message = tokens.get(path)?.value;
3658
- const template = /* @__PURE__ */ isString(message) ? resolve(locale, message) : fallback ?? key;
3659
- return adapter.t(template, ...args);
3659
+ if (/* @__PURE__ */ isString(message)) return adapter.t(resolve(locale, message), ...args);
3660
+ if (fallbackLocale) {
3661
+ const fbMessage = tokens.get(`${fallbackLocale}.${key}`)?.value;
3662
+ if (/* @__PURE__ */ isString(fbMessage)) return adapter.t(resolve(fallbackLocale, fbMessage), ...args);
3663
+ }
3664
+ return adapter.t(fallback ?? key, ...args);
3660
3665
  }
3661
3666
  function n(value, ...params) {
3662
3667
  return adapter.n(value, registry.selectedId.value, ...params);
@@ -4367,14 +4372,14 @@ const _sfc_main$14 = /* @__PURE__ */ defineComponent({
4367
4372
  });
4368
4373
  //#endregion
4369
4374
  //#region src/components/Checkbox/CheckboxHiddenInput.vue
4370
- const _hoisted_1$3 = [
4375
+ const _hoisted_1$4 = [
4371
4376
  "checked",
4372
4377
  "disabled",
4373
4378
  "form",
4374
4379
  "name",
4375
4380
  "value"
4376
4381
  ];
4377
- const visuallyHiddenStyle$2 = {
4382
+ const visuallyHiddenStyle$3 = {
4378
4383
  position: "absolute",
4379
4384
  width: "1px",
4380
4385
  height: "1px",
@@ -4413,11 +4418,11 @@ const _sfc_main$12 = /* @__PURE__ */ defineComponent({
4413
4418
  form: form.value,
4414
4419
  inert: "",
4415
4420
  name: name.value,
4416
- style: visuallyHiddenStyle$2,
4421
+ style: visuallyHiddenStyle$3,
4417
4422
  tabindex: "-1",
4418
4423
  type: "checkbox",
4419
4424
  value: value.value
4420
- }, null, 8, _hoisted_1$3);
4425
+ }, null, 8, _hoisted_1$4);
4421
4426
  };
4422
4427
  }
4423
4428
  });
@@ -5864,6 +5869,7 @@ function createBreakpoints(_options = {}) {
5864
5869
  }
5865
5870
  return {
5866
5871
  breakpoints,
5872
+ mobileBreakpoint,
5867
5873
  name: readonly(name),
5868
5874
  width: readonly(width),
5869
5875
  height: readonly(height),
@@ -5890,8 +5896,10 @@ function createBreakpoints(_options = {}) {
5890
5896
  }
5891
5897
  function createBreakpointsFallback(options = {}) {
5892
5898
  if (options.ssr) return createBreakpoints(options);
5899
+ const defaults = createDefaultBreakpoints();
5893
5900
  return {
5894
- breakpoints: createDefaultBreakpoints().breakpoints,
5901
+ breakpoints: defaults.breakpoints,
5902
+ mobileBreakpoint: defaults.mobileBreakpoint,
5895
5903
  name: readonly(shallowRef("xs")),
5896
5904
  width: readonly(shallowRef(0)),
5897
5905
  height: readonly(shallowRef(0)),
@@ -6293,14 +6301,14 @@ const [createFeaturesContext, createFeaturesPlugin, useFeatures] = createPluginC
6293
6301
  * @example
6294
6302
  * ```ts
6295
6303
  * import { createForm, createValidation } from '@vuetify/v0'
6304
+ * import { shallowRef } from 'vue'
6296
6305
  *
6297
6306
  * const form = createForm()
6298
6307
  *
6299
- * // Validations register themselves — form is just the coordinator
6300
- * const validation = createValidation()
6301
- * const email = validation.register({
6302
- * id: 'email',
6303
- * value: '',
6308
+ * // Each validation is one input — form is just the coordinator
6309
+ * const email = shallowRef('')
6310
+ * const validation = createValidation({
6311
+ * value: email,
6304
6312
  * rules: ['required', 'email'],
6305
6313
  * })
6306
6314
  *
@@ -6310,12 +6318,12 @@ const [createFeaturesContext, createFeaturesPlugin, useFeatures] = createPluginC
6310
6318
  * form.reset()
6311
6319
  * ```
6312
6320
  */
6313
- function createForm(options) {
6314
- const registry = createRegistry(options);
6315
- const disabled = shallowRef(false);
6316
- const readonly = shallowRef(false);
6317
- if (!/* @__PURE__ */ isNullOrUndefined(options?.disabled)) disabled.value = toValue(options.disabled) ?? false;
6318
- if (!/* @__PURE__ */ isNullOrUndefined(options?.readonly)) readonly.value = toValue(options.readonly) ?? false;
6321
+ function createForm(options = {}) {
6322
+ const { disabled = false, readonly = false, ..._options } = options;
6323
+ const registry = createRegistry({
6324
+ ..._options,
6325
+ reactive: true
6326
+ });
6319
6327
  const isValidating = computed(() => {
6320
6328
  for (const ticket of registry.values()) if (ticket.value.isValidating.value) return true;
6321
6329
  return false;
@@ -6335,14 +6343,14 @@ function createForm(options) {
6335
6343
  return registry.register(registration);
6336
6344
  }
6337
6345
  function reset() {
6338
- for (const ticket of registry.values()) for (const field of ticket.value.values()) field.reset();
6346
+ for (const ticket of registry.values()) ticket.value.reset();
6339
6347
  }
6340
6348
  async function submit(id) {
6341
6349
  const ids = id ? toArray(id) : [...registry.keys()];
6342
- return (await Promise.all(ids.map(async (id) => {
6343
- const ticket = registry.get(id);
6350
+ return (await Promise.all(ids.map(async (key) => {
6351
+ const ticket = registry.get(key);
6344
6352
  if (!ticket) return true;
6345
- return (await Promise.all([...ticket.value.values()].map((field) => field.validate()))).every(Boolean);
6353
+ return ticket.value.validate();
6346
6354
  }))).every(Boolean);
6347
6355
  }
6348
6356
  return {
@@ -8000,6 +8008,83 @@ const [createPermissionsContext, createPermissionsPlugin, usePermissions] = crea
8000
8008
  * ```
8001
8009
  */
8002
8010
  //#endregion
8011
+ //#region src/composables/usePopover/index.ts
8012
+ /**
8013
+ * @module usePopover
8014
+ *
8015
+ * @remarks
8016
+ * Composable for native popover API behavior with CSS anchor positioning.
8017
+ * Manages open/close state, anchor styles, content attributes, and
8018
+ * bidirectional sync between reactive state and native popover events.
8019
+ *
8020
+ * Key features:
8021
+ * - Native popover API (showPopover/hidePopover)
8022
+ * - CSS anchor positioning (position-area, position-try-fallbacks)
8023
+ * - Toggle event sync for native state changes
8024
+ * - SSR-safe (no DOM ops outside browser)
8025
+ * - Optional external isOpen ref for v-model integration
8026
+ *
8027
+ * Perfect for building select, combobox, tooltip, and menu components
8028
+ * without wrapping the Popover compound component.
8029
+ */
8030
+ function usePopover(options = {}) {
8031
+ const { id: _id, positionArea = "bottom", positionTry = "most-width bottom" } = options;
8032
+ const id = _id ?? /* @__PURE__ */ useId();
8033
+ const isOpen = options.isOpen ?? shallowRef(false);
8034
+ function open() {
8035
+ isOpen.value = true;
8036
+ }
8037
+ function close() {
8038
+ isOpen.value = false;
8039
+ }
8040
+ function toggle() {
8041
+ isOpen.value = !isOpen.value;
8042
+ }
8043
+ const anchorStyles = toRef(() => ({ anchorName: `--${id}` }));
8044
+ const contentAttrs = toRef(() => ({
8045
+ id,
8046
+ popover: ""
8047
+ }));
8048
+ const contentStyles = toRef(() => ({
8049
+ "position": "fixed",
8050
+ "margin": "unset",
8051
+ "inset-area": positionArea,
8052
+ "position-area": positionArea,
8053
+ "position-anchor": `--${id}`,
8054
+ "position-try-fallbacks": positionTry
8055
+ }));
8056
+ /* v8 ignore start -- browser popover API */
8057
+ function attach(el) {
8058
+ onMounted(() => {
8059
+ const element = toValue(el);
8060
+ if (isOpen.value) element?.showPopover();
8061
+ });
8062
+ watch(isOpen, (value) => {
8063
+ const element = toValue(el);
8064
+ if (!element?.isConnected) return;
8065
+ if (value === element.matches?.(":popover-open")) return;
8066
+ if (value) element.showPopover?.();
8067
+ else element.hidePopover?.();
8068
+ });
8069
+ useEventListener(el, "toggle", (e) => {
8070
+ if (!toValue(el)?.isConnected) return;
8071
+ isOpen.value = e.newState === "open";
8072
+ });
8073
+ }
8074
+ /* v8 ignore stop */
8075
+ return {
8076
+ isOpen,
8077
+ id,
8078
+ open,
8079
+ close,
8080
+ toggle,
8081
+ anchorStyles,
8082
+ contentAttrs,
8083
+ contentStyles,
8084
+ attach
8085
+ };
8086
+ }
8087
+ //#endregion
8003
8088
  //#region src/composables/createQueue/index.ts
8004
8089
  /**
8005
8090
  * @module createQueue
@@ -8333,6 +8418,236 @@ function createRulesFallback() {
8333
8418
  }
8334
8419
  const [createRulesContext, createRulesPlugin, useRules] = createPluginContext("v0:rules", (options) => createRules(options), { fallback: () => createRulesFallback() });
8335
8420
  //#endregion
8421
+ //#region src/composables/createFocusTraversal/index.ts
8422
+ /**
8423
+ * @module createFocusTraversal
8424
+ *
8425
+ * @remarks
8426
+ * Internal factory for keyboard-driven traversal of ordered item lists.
8427
+ * Encapsulates stride-based navigation, disabled-item skipping, circular/bounded
8428
+ * movement, grid row scoping, and key-to-action mapping shared by
8429
+ * useRovingFocus and useVirtualFocus.
8430
+ *
8431
+ * Not exported from the package barrel — consumed only by sibling composables.
8432
+ */
8433
+ function mod(length, index) {
8434
+ return (index % length + length) % length;
8435
+ }
8436
+ function isRtl(e) {
8437
+ if (!IN_BROWSER) return false;
8438
+ const el = e.currentTarget;
8439
+ return el ? getComputedStyle(el).direction === "rtl" : false;
8440
+ }
8441
+ function createFocusTraversal(items, activate, options = {}) {
8442
+ const { orientation = "vertical", circular = false, columns: _columns } = options;
8443
+ const activeId = shallowRef();
8444
+ function enabled() {
8445
+ return items().filter((item) => !toValue(item.disabled));
8446
+ }
8447
+ function indexOf(id) {
8448
+ return items().findIndex((item) => item.id === id);
8449
+ }
8450
+ function go(id) {
8451
+ activeId.value = id;
8452
+ activate(id);
8453
+ }
8454
+ function step(stride) {
8455
+ const all = items();
8456
+ const length = all.length;
8457
+ if (!length) return;
8458
+ const current = /* @__PURE__ */ isUndefined(activeId.value) ? -1 : indexOf(activeId.value);
8459
+ const direction = stride > 0 ? 1 : -1;
8460
+ const absStride = Math.abs(stride);
8461
+ let index = current + stride;
8462
+ const maxHops = Math.ceil(length / absStride);
8463
+ let hops = 0;
8464
+ if (circular) index = mod(length, index);
8465
+ else if (index < 0 || index >= length) return;
8466
+ while (hops < maxHops) {
8467
+ const item = all[index];
8468
+ if (item && !toValue(item.disabled)) {
8469
+ go(item.id);
8470
+ return;
8471
+ }
8472
+ hops++;
8473
+ index = circular ? mod(length, index + stride) : index + direction * absStride;
8474
+ if (!circular && (index < 0 || index >= length)) return;
8475
+ }
8476
+ }
8477
+ function next() {
8478
+ step(1);
8479
+ }
8480
+ function prev() {
8481
+ step(-1);
8482
+ }
8483
+ function first() {
8484
+ const list = enabled();
8485
+ if (list.length > 0) go(list[0].id);
8486
+ }
8487
+ function last() {
8488
+ const list = enabled();
8489
+ if (list.length > 0) go(list.at(-1).id);
8490
+ }
8491
+ /** Focus first non-disabled item in the current row (grid mode) */
8492
+ function rowFirst() {
8493
+ const cols = toValue(_columns) ?? 0;
8494
+ if (!cols) return first();
8495
+ const all = items();
8496
+ const current = /* @__PURE__ */ isUndefined(activeId.value) ? 0 : indexOf(activeId.value);
8497
+ const rowStart = current - current % cols;
8498
+ const rowEnd = Math.min(rowStart + cols, all.length);
8499
+ for (let i = rowStart; i < rowEnd; i++) {
8500
+ const item = all[i];
8501
+ if (item && !toValue(item.disabled)) {
8502
+ go(item.id);
8503
+ return;
8504
+ }
8505
+ }
8506
+ }
8507
+ /** Focus last non-disabled item in the current row (grid mode) */
8508
+ function rowLast() {
8509
+ const cols = toValue(_columns) ?? 0;
8510
+ if (!cols) return last();
8511
+ const all = items();
8512
+ const current = /* @__PURE__ */ isUndefined(activeId.value) ? 0 : indexOf(activeId.value);
8513
+ const rowStart = current - current % cols;
8514
+ const rowEnd = Math.min(rowStart + cols, all.length);
8515
+ for (let i = rowEnd - 1; i >= rowStart; i--) {
8516
+ const item = all[i];
8517
+ if (item && !toValue(item.disabled)) {
8518
+ go(item.id);
8519
+ return;
8520
+ }
8521
+ }
8522
+ }
8523
+ function onKeydown(e) {
8524
+ const cols = toValue(_columns);
8525
+ const rtl = isRtl(e);
8526
+ if (cols) {
8527
+ switch (e.key) {
8528
+ case "ArrowRight":
8529
+ e.preventDefault();
8530
+ step(rtl ? -1 : 1);
8531
+ break;
8532
+ case "ArrowLeft":
8533
+ e.preventDefault();
8534
+ step(rtl ? 1 : -1);
8535
+ break;
8536
+ case "ArrowDown":
8537
+ e.preventDefault();
8538
+ step(cols);
8539
+ break;
8540
+ case "ArrowUp":
8541
+ e.preventDefault();
8542
+ step(-cols);
8543
+ break;
8544
+ case "Home":
8545
+ e.preventDefault();
8546
+ if (e.ctrlKey) first();
8547
+ else rowFirst();
8548
+ break;
8549
+ case "End":
8550
+ e.preventDefault();
8551
+ if (e.ctrlKey) last();
8552
+ else rowLast();
8553
+ break;
8554
+ }
8555
+ return;
8556
+ }
8557
+ const prevKeys = [];
8558
+ const nextKeys = [];
8559
+ if (orientation === "vertical" || orientation === "both") {
8560
+ prevKeys.push("ArrowUp");
8561
+ nextKeys.push("ArrowDown");
8562
+ }
8563
+ if (orientation === "horizontal" || orientation === "both") {
8564
+ prevKeys.push(rtl ? "ArrowRight" : "ArrowLeft");
8565
+ nextKeys.push(rtl ? "ArrowLeft" : "ArrowRight");
8566
+ }
8567
+ if (prevKeys.includes(e.key)) {
8568
+ e.preventDefault();
8569
+ prev();
8570
+ } else if (nextKeys.includes(e.key)) {
8571
+ e.preventDefault();
8572
+ next();
8573
+ } else if (e.key === "Home") {
8574
+ e.preventDefault();
8575
+ first();
8576
+ } else if (e.key === "End") {
8577
+ e.preventDefault();
8578
+ last();
8579
+ }
8580
+ }
8581
+ return {
8582
+ activeId,
8583
+ step,
8584
+ next,
8585
+ prev,
8586
+ first,
8587
+ last,
8588
+ onKeydown
8589
+ };
8590
+ }
8591
+ //#endregion
8592
+ //#region src/composables/useRovingFocus/index.ts
8593
+ /**
8594
+ * @module useRovingFocus
8595
+ *
8596
+ * @remarks
8597
+ * Roving tabindex composable for keyboard navigation within composite widgets.
8598
+ *
8599
+ * Key features:
8600
+ * - Arrow key navigation with orientation support
8601
+ * - Grid mode for 2D navigation (data tables, calendars)
8602
+ * - Automatic disabled item skipping
8603
+ * - Optional circular navigation
8604
+ * - Home/End key support (row-scoped in grid mode)
8605
+ * - Auto-attaches keydown listener when target is provided
8606
+ *
8607
+ * Perfect for toolbars, menus, tree items, grids, and other composite widgets.
8608
+ */
8609
+ function useRovingFocus(items, options = {}) {
8610
+ const { orientation, circular, columns, onFocus, target } = options;
8611
+ function applyFocus(id) {
8612
+ const item = items().find((i) => i.id === id);
8613
+ if (!item?.el) return false;
8614
+ onFocus?.(id);
8615
+ nextTick(() => {
8616
+ toValue(item.el)?.focus();
8617
+ });
8618
+ return true;
8619
+ }
8620
+ const traversal = createFocusTraversal(items, (id) => applyFocus(id), {
8621
+ orientation,
8622
+ circular,
8623
+ columns
8624
+ });
8625
+ function focus(id) {
8626
+ const prev = traversal.activeId.value;
8627
+ traversal.activeId.value = id;
8628
+ if (!applyFocus(id)) traversal.activeId.value = prev;
8629
+ }
8630
+ function enabled() {
8631
+ return items().filter((item) => !toValue(item.disabled));
8632
+ }
8633
+ function isTabbable(id) {
8634
+ if (!/* @__PURE__ */ isUndefined(traversal.activeId.value)) return traversal.activeId.value === id;
8635
+ const list = enabled();
8636
+ return list.length > 0 && list[0]?.id === id;
8637
+ }
8638
+ if (target) useEventListener(target, "keydown", traversal.onKeydown);
8639
+ return {
8640
+ focusedId: traversal.activeId,
8641
+ isTabbable,
8642
+ focus,
8643
+ next: traversal.next,
8644
+ prev: traversal.prev,
8645
+ first: traversal.first,
8646
+ last: traversal.last,
8647
+ onKeydown: traversal.onKeydown
8648
+ };
8649
+ }
8650
+ //#endregion
8336
8651
  //#region src/composables/useRtl/adapters/v0.ts
8337
8652
  var Vuetify0RtlAdapter = class {
8338
8653
  setup(app, context, target) {
@@ -9529,31 +9844,27 @@ function useTimeline(namespace = "v0:timeline") {
9529
9844
  * @module createValidation
9530
9845
  *
9531
9846
  * @remarks
9532
- * Per-field validation lifecycle composable.
9847
+ * Per-input validation composable built on createGroup.
9533
9848
  *
9534
9849
  * Key features:
9850
+ * - Each ticket is a rule — enable/disable via select/unselect
9535
9851
  * - Auto-register with parent form via useForm() injection
9536
9852
  * - Async rule support with generation-based race safety
9537
9853
  * - Silent validation mode
9538
9854
  * - Tri-state isValid (null/true/false)
9539
- * - isPristine tracking
9540
9855
  *
9541
9856
  * Uses useRules() to resolve alias strings via shared context.
9542
9857
  */
9858
+ const UNSET = Symbol("unset");
9543
9859
  /**
9544
- * Resolves raw rule inputs to FormValidationRule[].
9545
- * Uses the provided RulesContext if available, otherwise handles
9546
- * functions and Standard Schema objects directly.
9547
- */
9548
- function resolveRules(raw, context) {
9549
- if (context) return context.resolve(raw);
9550
- return raw.filter((r) => /* @__PURE__ */ isFunction(r) || isStandardSchema(r)).map((r) => isStandardSchema(r) ? toRule(r) : r);
9551
- }
9552
- /**
9553
- * Creates a new validation instance.
9860
+ * Creates a per-input validation instance.
9861
+ *
9862
+ * Built on `createGroup` each registered rule becomes a ticket that can be
9863
+ * enabled/disabled via selection methods (`select`, `unselect`, `toggle`).
9864
+ * Only selected (active) rules run during validation.
9554
9865
  *
9555
9866
  * @param options The options for the validation instance.
9556
- * @returns A new validation context with register(), aggregate state, etc.
9867
+ * @returns A new validation context.
9557
9868
  *
9558
9869
  * @see https://0.vuetifyjs.com/composables/forms/create-validation
9559
9870
  *
@@ -9561,111 +9872,83 @@ function resolveRules(raw, context) {
9561
9872
  * ```ts
9562
9873
  * import { createValidation } from '@vuetify/v0'
9563
9874
  *
9564
- * const validation = createValidation()
9565
- *
9566
- * const field = validation.register({
9567
- * id: 'email',
9568
- * value: '',
9569
- * rules: [(v) => !!v || 'Required'],
9875
+ * const validation = createValidation({
9876
+ * rules: [
9877
+ * v => !!v || 'Required',
9878
+ * v => /^.+@\S+\.\S+$/.test(String(v)) || 'Invalid email',
9879
+ * ],
9570
9880
  * })
9571
9881
  *
9572
- * await field.validate()
9882
+ * await validation.validate('')
9573
9883
  *
9574
- * console.log(field.errors.value) // ['Required']
9884
+ * console.log(validation.errors.value) // ['Required', 'Invalid email']
9575
9885
  *
9576
- * field.reset()
9886
+ * validation.reset()
9577
9887
  * ```
9578
9888
  */
9579
- function createValidation(options = {}) {
9580
- const registry = createRegistry(options);
9581
- const rules = useRules();
9582
- const isValidating = computed(() => {
9583
- for (const ticket of registry.values()) if (ticket.isValidating.value) return true;
9584
- return false;
9889
+ function createValidation(_options = {}) {
9890
+ const { rules: initialRules = [], value: valueSource, enroll = true, ...options } = _options;
9891
+ const group = createGroup({
9892
+ ...options,
9893
+ enroll,
9894
+ multiple: true
9585
9895
  });
9586
- const isValid = computed(() => {
9587
- let hasNull = false;
9588
- let hasFields = false;
9589
- for (const ticket of registry.values()) {
9590
- hasFields = true;
9591
- if (ticket.isValid.value === false) return false;
9592
- if (/* @__PURE__ */ isNull(ticket.isValid.value)) hasNull = true;
9896
+ const rulesContext = useRules();
9897
+ const errors = shallowRef([]);
9898
+ const isValid = shallowRef(null);
9899
+ const isValidating = shallowRef(false);
9900
+ let generation = 0;
9901
+ function register(input) {
9902
+ if (/* @__PURE__ */ isFunction(input) || /* @__PURE__ */ isString(input) || isStandardSchema(input)) {
9903
+ const resolved = rulesContext.resolve([input]);
9904
+ return group.register({ value: resolved[0] ?? (() => true) });
9593
9905
  }
9594
- if (!hasFields) return null;
9595
- return hasNull ? null : true;
9596
- });
9597
- function register(registration = {}) {
9598
- const model = shallowRef(/* @__PURE__ */ isNullOrUndefined(registration.value) ? "" : toValue(registration.value));
9599
- const resolved = resolveRules(registration.rules || [], rules);
9600
- const errors = shallowRef([]);
9601
- const isFieldValidating = shallowRef(false);
9602
- const initialValue = model.value;
9603
- const isPristine = shallowRef(true);
9604
- const isFieldValid = shallowRef(null);
9605
- function reset() {
9606
- model.value = initialValue;
9607
- errors.value = [];
9608
- isPristine.value = true;
9609
- isFieldValid.value = null;
9610
- isFieldValidating.value = false;
9611
- validationGeneration++;
9612
- }
9613
- let validationGeneration = 0;
9614
- async function validate(silent = false) {
9615
- if (resolved.length === 0) return isFieldValid.value = true;
9616
- const generation = ++validationGeneration;
9617
- isFieldValidating.value = true;
9618
- try {
9619
- const results = await Promise.all(resolved.map((rule) => rule(model.value)));
9620
- if (generation !== validationGeneration) return isFieldValid.value ?? false;
9621
- const errorMessages = results.filter((result) => /* @__PURE__ */ isString(result) || result === false).map((result) => result === false ? "Validation failed" : result);
9622
- if (!silent) {
9623
- errors.value = errorMessages;
9624
- isFieldValid.value = errorMessages.length === 0;
9625
- isPristine.value = model.value === initialValue;
9626
- }
9627
- return errorMessages.length === 0;
9628
- } finally {
9629
- if (generation === validationGeneration) isFieldValidating.value = false;
9906
+ return group.register(input);
9907
+ }
9908
+ function onboard(rules) {
9909
+ return group.batch(() => rules.map((r) => register(r)));
9910
+ }
9911
+ async function validate(_value = UNSET, silent = false) {
9912
+ const val = _value === UNSET ? toValue(valueSource) : _value;
9913
+ const activeRules = [];
9914
+ for (const ticket of group.selectedItems.value) activeRules.push(ticket.value);
9915
+ if (activeRules.length === 0) {
9916
+ if (!silent) isValid.value = true;
9917
+ return true;
9918
+ }
9919
+ const gen = ++generation;
9920
+ if (!silent) isValidating.value = true;
9921
+ try {
9922
+ const results = await Promise.all(activeRules.map((rule) => rule(val)));
9923
+ if (gen !== generation) return isValid.value ?? false;
9924
+ const errorMessages = results.filter((result) => /* @__PURE__ */ isString(result) || result === false).map((result) => result === false ? "Validation failed" : result);
9925
+ if (!silent) {
9926
+ errors.value = errorMessages;
9927
+ isValid.value = errorMessages.length === 0;
9630
9928
  }
9929
+ return errorMessages.length === 0;
9930
+ } finally {
9931
+ if (gen === generation && !silent) isValidating.value = false;
9631
9932
  }
9632
- const item = {
9633
- ...registration,
9634
- rules: resolved,
9635
- errors,
9636
- disabled: registration.disabled || false,
9637
- isValidating: isFieldValidating,
9638
- isPristine,
9639
- isValid: isFieldValid,
9640
- reset,
9641
- validate
9642
- };
9643
- const ticket = registry.register(item);
9644
- Object.defineProperty(ticket, "value", {
9645
- get() {
9646
- return model.value;
9647
- },
9648
- set(val) {
9649
- model.value = val;
9650
- isPristine.value = val === initialValue;
9651
- isFieldValid.value = null;
9652
- },
9653
- enumerable: true,
9654
- configurable: true
9655
- });
9656
- return ticket;
9657
9933
  }
9658
- function onboard(registrations) {
9659
- return registry.batch(() => registrations.map((r) => register(r)));
9934
+ function reset() {
9935
+ errors.value = [];
9936
+ isValid.value = null;
9937
+ isValidating.value = false;
9938
+ generation++;
9660
9939
  }
9940
+ if (initialRules.length > 0) onboard(initialRules);
9661
9941
  const context = {
9662
- ...registry,
9942
+ ...group,
9663
9943
  register,
9664
9944
  onboard,
9945
+ validate,
9946
+ reset,
9947
+ errors,
9665
9948
  isValid,
9666
9949
  isValidating,
9667
9950
  get size() {
9668
- return registry.size;
9951
+ return group.size;
9669
9952
  }
9670
9953
  };
9671
9954
  const form = useForm();
@@ -10120,6 +10403,80 @@ function useVirtual(namespace = "v0:virtual") {
10120
10403
  return useContext(namespace);
10121
10404
  }
10122
10405
  //#endregion
10406
+ //#region src/composables/useVirtualFocus/index.ts
10407
+ /**
10408
+ * @module useVirtualFocus
10409
+ *
10410
+ * @remarks
10411
+ * Virtual focus composable for aria-activedescendant keyboard navigation.
10412
+ * DOM focus stays on a control element while a virtual cursor highlights
10413
+ * items in a list.
10414
+ *
10415
+ * Key features:
10416
+ * - Arrow key navigation with orientation support
10417
+ * - Grid mode for 2D navigation
10418
+ * - Automatic disabled item skipping
10419
+ * - Optional circular navigation
10420
+ * - Home/End key support (row-scoped in grid mode)
10421
+ * - Auto-attaches keydown listener when target is provided
10422
+ * - Sets aria-activedescendant and data-highlighted attributes
10423
+ *
10424
+ * Perfect for comboboxes, autocompletes, listboxes, and other widgets
10425
+ * where DOM focus must remain on the control element.
10426
+ */
10427
+ function useVirtualFocus(items, options) {
10428
+ const { control, target, orientation, circular, columns, onHighlight } = options;
10429
+ let previousEl = null;
10430
+ function applyHighlight(id) {
10431
+ const item = items().find((i) => i.id === id);
10432
+ if (!item?.el) return false;
10433
+ const el = toValue(item.el);
10434
+ if (!el) return false;
10435
+ const controlEl = toValue(control);
10436
+ if (controlEl) {
10437
+ const itemId = el.getAttribute("id");
10438
+ if (itemId) controlEl.setAttribute("aria-activedescendant", itemId);
10439
+ }
10440
+ if (previousEl) delete previousEl.dataset.highlighted;
10441
+ el.dataset.highlighted = "";
10442
+ previousEl = el;
10443
+ el.scrollIntoView({ block: "nearest" });
10444
+ onHighlight?.(id);
10445
+ return true;
10446
+ }
10447
+ const traversal = createFocusTraversal(items, (id) => applyHighlight(id), {
10448
+ orientation,
10449
+ circular,
10450
+ columns
10451
+ });
10452
+ function highlight(id) {
10453
+ const prev = traversal.activeId.value;
10454
+ traversal.activeId.value = id;
10455
+ if (!applyHighlight(id)) traversal.activeId.value = prev;
10456
+ }
10457
+ function clear() {
10458
+ traversal.activeId.value = void 0;
10459
+ const controlEl = toValue(control);
10460
+ if (controlEl) controlEl.removeAttribute("aria-activedescendant");
10461
+ if (previousEl) {
10462
+ delete previousEl.dataset.highlighted;
10463
+ previousEl = null;
10464
+ }
10465
+ }
10466
+ const listener = target ?? control;
10467
+ if (listener) useEventListener(listener, "keydown", traversal.onKeydown);
10468
+ return {
10469
+ highlightedId: traversal.activeId,
10470
+ highlight,
10471
+ clear,
10472
+ next: traversal.next,
10473
+ prev: traversal.prev,
10474
+ first: traversal.first,
10475
+ last: traversal.last,
10476
+ onKeydown: traversal.onKeydown
10477
+ };
10478
+ }
10479
+ //#endregion
10123
10480
  //#region src/composables/useEventListener/index.ts
10124
10481
  /**
10125
10482
  * @module useEventListener
@@ -10891,9 +11248,79 @@ const ExpansionPanel = {
10891
11248
  Content: _sfc_main$23
10892
11249
  };
10893
11250
  //#endregion
11251
+ //#region src/components/Form/Form.vue
11252
+ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
11253
+ name: "Form",
11254
+ inheritAttrs: false,
11255
+ __name: "Form",
11256
+ props: /* @__PURE__ */ mergeModels({
11257
+ namespace: { default: "v0:form" },
11258
+ disabled: {
11259
+ type: Boolean,
11260
+ default: false
11261
+ },
11262
+ readonly: {
11263
+ type: Boolean,
11264
+ default: false
11265
+ },
11266
+ as: { default: "form" },
11267
+ renderless: { type: Boolean }
11268
+ }, {
11269
+ "modelValue": {
11270
+ type: [Boolean, null],
11271
+ default: null
11272
+ },
11273
+ "modelModifiers": {}
11274
+ }),
11275
+ emits: /* @__PURE__ */ mergeModels([
11276
+ "update:model-value",
11277
+ "submit",
11278
+ "reset"
11279
+ ], ["update:modelValue"]),
11280
+ setup(__props, { emit: __emit }) {
11281
+ const emit = __emit;
11282
+ const model = useModel(__props, "modelValue");
11283
+ const form = createForm({
11284
+ disabled: toRef(() => __props.disabled),
11285
+ readonly: toRef(() => __props.readonly)
11286
+ });
11287
+ watchEffect(() => {
11288
+ model.value = form.isValid.value;
11289
+ });
11290
+ const attrs = useAttrs();
11291
+ provideContext(__props.namespace, form);
11292
+ async function onSubmit(event) {
11293
+ event.preventDefault();
11294
+ emit("submit", { valid: await form.submit() });
11295
+ }
11296
+ function onReset(event) {
11297
+ event.preventDefault();
11298
+ form.reset();
11299
+ emit("reset");
11300
+ }
11301
+ const slotProps = toRef(() => ({
11302
+ isValid: form.isValid.value,
11303
+ isValidating: form.isValidating.value,
11304
+ isDisabled: toValue(form.disabled),
11305
+ isReadonly: toValue(form.readonly),
11306
+ submit: form.submit,
11307
+ reset: form.reset
11308
+ }));
11309
+ return (_ctx, _cache) => {
11310
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({ as: __props.as }, unref(attrs), {
11311
+ onReset,
11312
+ onSubmit
11313
+ }), {
11314
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
11315
+ _: 3
11316
+ }, 16, ["as"]);
11317
+ };
11318
+ }
11319
+ });
11320
+ //#endregion
10894
11321
  //#region src/components/Group/GroupRoot.vue
10895
11322
  const [useGroupRoot, provideGroupRoot] = createContext();
10896
- const _sfc_main$28 = /* @__PURE__ */ defineComponent({
11323
+ const _sfc_main$29 = /* @__PURE__ */ defineComponent({
10897
11324
  name: "GroupRoot",
10898
11325
  __name: "GroupRoot",
10899
11326
  props: /* @__PURE__ */ mergeModels({
@@ -10945,7 +11372,7 @@ const _sfc_main$28 = /* @__PURE__ */ defineComponent({
10945
11372
  });
10946
11373
  //#endregion
10947
11374
  //#region src/components/Group/GroupItem.vue
10948
- const _sfc_main$27 = /* @__PURE__ */ defineComponent({
11375
+ const _sfc_main$28 = /* @__PURE__ */ defineComponent({
10949
11376
  name: "GroupItem",
10950
11377
  __name: "GroupItem",
10951
11378
  props: {
@@ -11002,18 +11429,370 @@ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
11002
11429
  * @see https://0.vuetifyjs.com/components/group
11003
11430
  */
11004
11431
  const Group = {
11005
- Root: _sfc_main$28,
11006
- Item: _sfc_main$27
11432
+ Root: _sfc_main$29,
11433
+ Item: _sfc_main$28
11007
11434
  };
11008
11435
  //#endregion
11009
- //#region src/components/Pagination/PaginationRoot.vue
11010
- const [usePaginationRoot, providePaginationRoot] = createContext();
11011
- const [usePaginationControls, providePaginationControls] = createContext({ suffix: "controls" });
11012
- const [usePaginationItems, providePaginationItems] = createContext({ suffix: "items" });
11013
- const _sfc_main$35 = /* @__PURE__ */ defineComponent({
11014
- name: "PaginationRoot",
11015
- __name: "PaginationRoot",
11016
- props: /* @__PURE__ */ mergeModels({
11436
+ //#region src/components/Input/InputRoot.vue
11437
+ const [useInputRoot, provideInputRoot] = createContext();
11438
+ function parseValidateOn(value) {
11439
+ const parts = String(value).split(" ");
11440
+ let event = "blur";
11441
+ let modifier;
11442
+ for (const part of parts) if (part === "lazy" || part === "eager") modifier = part;
11443
+ else if (part === "blur" || part === "input" || part === "submit") event = part;
11444
+ return {
11445
+ event,
11446
+ modifier
11447
+ };
11448
+ }
11449
+ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
11450
+ name: "InputRoot",
11451
+ inheritAttrs: false,
11452
+ __name: "InputRoot",
11453
+ props: /* @__PURE__ */ mergeModels({
11454
+ id: { default: () => useId$1() },
11455
+ label: {},
11456
+ name: {},
11457
+ type: { default: "text" },
11458
+ form: {},
11459
+ disabled: { default: false },
11460
+ readonly: { default: false },
11461
+ required: { type: Boolean },
11462
+ rules: { default: () => [] },
11463
+ validateOn: { default: "blur" },
11464
+ error: {
11465
+ type: Boolean,
11466
+ default: false
11467
+ },
11468
+ errorMessages: {},
11469
+ namespace: { default: "v0:input:root" },
11470
+ as: { default: "div" },
11471
+ renderless: { type: Boolean }
11472
+ }, {
11473
+ "modelValue": { default: "" },
11474
+ "modelModifiers": {}
11475
+ }),
11476
+ emits: /* @__PURE__ */ mergeModels(["update:model-value", "update:isFocused"], ["update:modelValue"]),
11477
+ setup(__props) {
11478
+ const attrs = useAttrs();
11479
+ const model = useModel(__props, "modelValue");
11480
+ const parsed = toRef(() => parseValidateOn(__props.validateOn));
11481
+ const validation = createValidation({
11482
+ rules: __props.rules,
11483
+ value: model
11484
+ });
11485
+ const initialValue = model.value;
11486
+ const isPristine = shallowRef(true);
11487
+ const isFocused = shallowRef(false);
11488
+ const touched = shallowRef(false);
11489
+ const hasDescription = shallowRef(false);
11490
+ const hasError = shallowRef(false);
11491
+ const isDirty = toRef(() => model.value.length > 0);
11492
+ const isDisabled = toRef(() => toValue(__props.disabled));
11493
+ const isReadonly = toRef(() => toValue(__props.readonly));
11494
+ const descriptionId = `${__props.id}-description`;
11495
+ const errorId = `${__props.id}-error`;
11496
+ const errors = computed(() => {
11497
+ return [...__props.errorMessages ? toArray(__props.errorMessages) : [], ...validation.errors.value];
11498
+ });
11499
+ const isValid = toRef(() => {
11500
+ if (__props.error) return false;
11501
+ if (errors.value.length > 0 && validation.errors.value.length === 0) return false;
11502
+ return validation.isValid.value;
11503
+ });
11504
+ function shouldValidate(trigger) {
11505
+ const { event, modifier } = parsed.value;
11506
+ if (event === "submit") return false;
11507
+ if (modifier === "lazy" && !touched.value) return false;
11508
+ if (modifier === "eager" && validation.isValid.value === false) return true;
11509
+ return trigger === event;
11510
+ }
11511
+ watch(isFocused, (val) => {
11512
+ if (val) return;
11513
+ touched.value = true;
11514
+ if (shouldValidate("blur")) validation.validate();
11515
+ });
11516
+ watch(model, (val) => {
11517
+ isPristine.value = val === initialValue;
11518
+ if (shouldValidate("input")) validation.validate();
11519
+ });
11520
+ function validate() {
11521
+ return validation.validate();
11522
+ }
11523
+ function reset() {
11524
+ model.value = initialValue;
11525
+ isPristine.value = true;
11526
+ touched.value = false;
11527
+ validation.reset();
11528
+ }
11529
+ const state = toRef(() => {
11530
+ if (isValid.value === false) return "invalid";
11531
+ if (isValid.value === true) return "valid";
11532
+ return "pristine";
11533
+ });
11534
+ const context = {
11535
+ id: __props.id,
11536
+ label: __props.label,
11537
+ name: __props.name,
11538
+ type: __props.type,
11539
+ form: __props.form,
11540
+ required: __props.required,
11541
+ descriptionId,
11542
+ errorId,
11543
+ hasDescription,
11544
+ hasError,
11545
+ value: model,
11546
+ isDirty,
11547
+ isFocused,
11548
+ isDisabled,
11549
+ isReadonly,
11550
+ errors,
11551
+ isValid,
11552
+ isPristine,
11553
+ isValidating: validation.isValidating,
11554
+ validate,
11555
+ reset
11556
+ };
11557
+ provideInputRoot(__props.namespace, context);
11558
+ const slotProps = toRef(() => ({
11559
+ id: __props.id,
11560
+ label: __props.label,
11561
+ value: model.value,
11562
+ isDirty: isDirty.value,
11563
+ isFocused: isFocused.value,
11564
+ errors: errors.value,
11565
+ isValid: isValid.value,
11566
+ isPristine: isPristine.value,
11567
+ isValidating: validation.isValidating.value,
11568
+ isDisabled: isDisabled.value,
11569
+ isReadonly: isReadonly.value,
11570
+ validate,
11571
+ reset,
11572
+ attrs: {
11573
+ "data-state": state.value,
11574
+ "data-dirty": isDirty.value ? true : void 0,
11575
+ "data-focused": isFocused.value ? true : void 0,
11576
+ "data-disabled": isDisabled.value ? true : void 0,
11577
+ "data-readonly": isReadonly.value ? true : void 0
11578
+ }
11579
+ }));
11580
+ return (_ctx, _cache) => {
11581
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
11582
+ ...unref(attrs),
11583
+ ...slotProps.value.attrs
11584
+ }, {
11585
+ as: __props.as,
11586
+ renderless: __props.renderless
11587
+ }), {
11588
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
11589
+ _: 3
11590
+ }, 16, ["as", "renderless"]);
11591
+ };
11592
+ }
11593
+ });
11594
+ //#endregion
11595
+ //#region src/components/Input/InputControl.vue
11596
+ const _sfc_main$30 = /* @__PURE__ */ defineComponent({
11597
+ name: "InputControl",
11598
+ inheritAttrs: false,
11599
+ __name: "InputControl",
11600
+ props: {
11601
+ namespace: { default: "v0:input:root" },
11602
+ as: { default: "input" },
11603
+ renderless: { type: Boolean }
11604
+ },
11605
+ setup(__props) {
11606
+ const attrs = useAttrs();
11607
+ const root = useInputRoot(__props.namespace);
11608
+ function onInput(e) {
11609
+ const target = e.target;
11610
+ root.value.value = target.value;
11611
+ }
11612
+ function onFocus() {
11613
+ root.isFocused.value = true;
11614
+ }
11615
+ function onBlur() {
11616
+ root.isFocused.value = false;
11617
+ }
11618
+ const describedby = toRef(() => {
11619
+ return root.hasDescription.value ? root.descriptionId : void 0;
11620
+ });
11621
+ const controlAttrs = toRef(() => {
11622
+ const invalid = root.isValid.value === false;
11623
+ const disabled = root.isDisabled.value;
11624
+ const readonly = root.isReadonly.value;
11625
+ const isFocused = root.isFocused.value;
11626
+ return {
11627
+ "id": root.id,
11628
+ "type": root.type,
11629
+ "name": root.name,
11630
+ "value": root.value.value,
11631
+ "form": root.form,
11632
+ "disabled": disabled || void 0,
11633
+ "readonly": readonly || void 0,
11634
+ "required": root.required || void 0,
11635
+ "aria-invalid": invalid || void 0,
11636
+ "aria-label": root.label || void 0,
11637
+ "aria-describedby": describedby.value,
11638
+ "aria-errormessage": root.hasError.value && root.errors.value.length > 0 ? root.errorId : void 0,
11639
+ "aria-required": root.required || void 0,
11640
+ "data-state": invalid ? "invalid" : root.isValid.value === true ? "valid" : "pristine",
11641
+ "data-focused": isFocused ? true : void 0,
11642
+ "data-disabled": disabled ? true : void 0,
11643
+ "data-readonly": readonly ? true : void 0
11644
+ };
11645
+ });
11646
+ const slotProps = toRef(() => ({
11647
+ value: root.value.value,
11648
+ isFocused: root.isFocused.value,
11649
+ isDisabled: root.isDisabled.value,
11650
+ isReadonly: root.isReadonly.value,
11651
+ attrs: controlAttrs.value
11652
+ }));
11653
+ return (_ctx, _cache) => {
11654
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
11655
+ ...unref(attrs),
11656
+ ...controlAttrs.value
11657
+ }, {
11658
+ as: __props.as,
11659
+ renderless: __props.renderless,
11660
+ onBlur,
11661
+ onFocus,
11662
+ onInput
11663
+ }), {
11664
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
11665
+ _: 3
11666
+ }, 16, ["as", "renderless"]);
11667
+ };
11668
+ }
11669
+ });
11670
+ //#endregion
11671
+ //#region src/components/Input/InputDescription.vue
11672
+ const _sfc_main$31 = /* @__PURE__ */ defineComponent({
11673
+ name: "InputDescription",
11674
+ inheritAttrs: false,
11675
+ __name: "InputDescription",
11676
+ props: {
11677
+ namespace: { default: "v0:input:root" },
11678
+ as: { default: "span" },
11679
+ renderless: { type: Boolean }
11680
+ },
11681
+ setup(__props) {
11682
+ const attrs = useAttrs();
11683
+ const root = useInputRoot(__props.namespace);
11684
+ onMounted(() => {
11685
+ root.hasDescription.value = true;
11686
+ });
11687
+ onBeforeUnmount(() => {
11688
+ root.hasDescription.value = false;
11689
+ });
11690
+ return (_ctx, _cache) => {
11691
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(unref(attrs), {
11692
+ id: unref(root).descriptionId,
11693
+ as: __props.as,
11694
+ renderless: __props.renderless
11695
+ }), {
11696
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", { id: unref(root).descriptionId })]),
11697
+ _: 3
11698
+ }, 16, [
11699
+ "id",
11700
+ "as",
11701
+ "renderless"
11702
+ ]);
11703
+ };
11704
+ }
11705
+ });
11706
+ //#endregion
11707
+ //#region src/components/Input/InputError.vue
11708
+ const _sfc_main$32 = /* @__PURE__ */ defineComponent({
11709
+ name: "InputError",
11710
+ inheritAttrs: false,
11711
+ __name: "InputError",
11712
+ props: {
11713
+ namespace: { default: "v0:input:root" },
11714
+ as: { default: "span" },
11715
+ renderless: { type: Boolean }
11716
+ },
11717
+ setup(__props) {
11718
+ const attrs = useAttrs();
11719
+ const root = useInputRoot(__props.namespace);
11720
+ const errors = root.errors;
11721
+ onMounted(() => {
11722
+ root.hasError.value = true;
11723
+ });
11724
+ onBeforeUnmount(() => {
11725
+ root.hasError.value = false;
11726
+ });
11727
+ const slotProps = toRef(() => ({
11728
+ id: root.errorId,
11729
+ errors: errors.value,
11730
+ attrs: {
11731
+ "id": root.errorId,
11732
+ "aria-live": "polite",
11733
+ "data-state": errors.value.length > 0 ? "visible" : "hidden"
11734
+ }
11735
+ }));
11736
+ return (_ctx, _cache) => {
11737
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
11738
+ ...unref(attrs),
11739
+ ...slotProps.value.attrs
11740
+ }, {
11741
+ as: __props.as,
11742
+ renderless: __props.renderless
11743
+ }), {
11744
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
11745
+ _: 3
11746
+ }, 16, ["as", "renderless"]);
11747
+ };
11748
+ }
11749
+ });
11750
+ //#endregion
11751
+ //#region src/components/Input/index.ts
11752
+ /**
11753
+ * Input component with sub-components for text input controls.
11754
+ *
11755
+ * @see https://0.vuetifyjs.com/components/forms/input
11756
+ *
11757
+ * @example
11758
+ * ```vue
11759
+ * <script setup lang="ts">
11760
+ * import { Input } from '@vuetify/v0'
11761
+ * import { ref } from 'vue'
11762
+ *
11763
+ * const email = ref('')
11764
+ * <\/script>
11765
+ *
11766
+ * <template>
11767
+ * <Input.Root
11768
+ * v-model="email"
11769
+ * label="Email"
11770
+ * :rules="[(v) => !!v || 'Required', (v) => /.+@.+/.test(v) || 'Invalid email']"
11771
+ * >
11772
+ * <Input.Control />
11773
+ * <Input.Description>We'll never share your email.</Input.Description>
11774
+ * <Input.Error v-slot="{ errors }">
11775
+ * <span v-for="error in errors" :key="error">{{ error }}</span>
11776
+ * </Input.Error>
11777
+ * </Input.Root>
11778
+ * </template>
11779
+ * ```
11780
+ */
11781
+ const Input = {
11782
+ Control: _sfc_main$30,
11783
+ Description: _sfc_main$31,
11784
+ Error: _sfc_main$32,
11785
+ Root: _sfc_main$33
11786
+ };
11787
+ //#endregion
11788
+ //#region src/components/Pagination/PaginationRoot.vue
11789
+ const [usePaginationRoot, providePaginationRoot] = createContext();
11790
+ const [usePaginationControls, providePaginationControls] = createContext({ suffix: "controls" });
11791
+ const [usePaginationItems, providePaginationItems] = createContext({ suffix: "items" });
11792
+ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
11793
+ name: "PaginationRoot",
11794
+ __name: "PaginationRoot",
11795
+ props: /* @__PURE__ */ mergeModels({
11017
11796
  namespace: { default: "v0:pagination" },
11018
11797
  size: { default: 1 },
11019
11798
  totalVisible: {},
@@ -11112,7 +11891,7 @@ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
11112
11891
  });
11113
11892
  //#endregion
11114
11893
  //#region src/components/Pagination/PaginationEllipsis.vue
11115
- const _sfc_main$29 = /* @__PURE__ */ defineComponent({
11894
+ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
11116
11895
  name: "PaginationEllipsis",
11117
11896
  __name: "PaginationEllipsis",
11118
11897
  props: {
@@ -11155,7 +11934,7 @@ const _sfc_main$29 = /* @__PURE__ */ defineComponent({
11155
11934
  });
11156
11935
  //#endregion
11157
11936
  //#region src/components/Pagination/PaginationFirst.vue
11158
- const _sfc_main$30 = /* @__PURE__ */ defineComponent({
11937
+ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
11159
11938
  name: "PaginationFirst",
11160
11939
  __name: "PaginationFirst",
11161
11940
  props: {
@@ -11212,7 +11991,7 @@ const _sfc_main$30 = /* @__PURE__ */ defineComponent({
11212
11991
  });
11213
11992
  //#endregion
11214
11993
  //#region src/components/Pagination/PaginationItem.vue
11215
- const _sfc_main$31 = /* @__PURE__ */ defineComponent({
11994
+ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
11216
11995
  name: "PaginationItem",
11217
11996
  __name: "PaginationItem",
11218
11997
  props: {
@@ -11280,7 +12059,7 @@ const _sfc_main$31 = /* @__PURE__ */ defineComponent({
11280
12059
  });
11281
12060
  //#endregion
11282
12061
  //#region src/components/Pagination/PaginationLast.vue
11283
- const _sfc_main$32 = /* @__PURE__ */ defineComponent({
12062
+ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
11284
12063
  name: "PaginationLast",
11285
12064
  __name: "PaginationLast",
11286
12065
  props: {
@@ -11337,7 +12116,7 @@ const _sfc_main$32 = /* @__PURE__ */ defineComponent({
11337
12116
  });
11338
12117
  //#endregion
11339
12118
  //#region src/components/Pagination/PaginationNext.vue
11340
- const _sfc_main$33 = /* @__PURE__ */ defineComponent({
12119
+ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
11341
12120
  name: "PaginationNext",
11342
12121
  __name: "PaginationNext",
11343
12122
  props: {
@@ -11394,7 +12173,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
11394
12173
  });
11395
12174
  //#endregion
11396
12175
  //#region src/components/Pagination/PaginationPrev.vue
11397
- const _sfc_main$34 = /* @__PURE__ */ defineComponent({
12176
+ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
11398
12177
  name: "PaginationPrev",
11399
12178
  __name: "PaginationPrev",
11400
12179
  props: {
@@ -11451,7 +12230,7 @@ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
11451
12230
  });
11452
12231
  //#endregion
11453
12232
  //#region src/components/Pagination/PaginationStatus.vue
11454
- const _sfc_main$36 = /* @__PURE__ */ defineComponent({
12233
+ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
11455
12234
  name: "PaginationStatus",
11456
12235
  __name: "PaginationStatus",
11457
12236
  props: {
@@ -11503,19 +12282,19 @@ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
11503
12282
  * @see https://0.vuetifyjs.com/components/pagination
11504
12283
  */
11505
12284
  const Pagination = {
11506
- Root: _sfc_main$35,
11507
- Item: _sfc_main$31,
11508
- First: _sfc_main$30,
11509
- Prev: _sfc_main$34,
11510
- Ellipsis: _sfc_main$29,
11511
- Next: _sfc_main$33,
11512
- Last: _sfc_main$32,
11513
- Status: _sfc_main$36
12285
+ Root: _sfc_main$40,
12286
+ Item: _sfc_main$36,
12287
+ First: _sfc_main$35,
12288
+ Prev: _sfc_main$39,
12289
+ Ellipsis: _sfc_main$34,
12290
+ Next: _sfc_main$38,
12291
+ Last: _sfc_main$37,
12292
+ Status: _sfc_main$41
11514
12293
  };
11515
12294
  //#endregion
11516
12295
  //#region src/components/Popover/PopoverRoot.vue
11517
12296
  const [usePopoverContext, providePopoverContext] = createContext("Popover");
11518
- const _sfc_main$39 = /* @__PURE__ */ defineComponent({
12297
+ const _sfc_main$44 = /* @__PURE__ */ defineComponent({
11519
12298
  name: "PopoverRoot",
11520
12299
  __name: "PopoverRoot",
11521
12300
  props: /* @__PURE__ */ mergeModels({
@@ -11532,19 +12311,18 @@ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
11532
12311
  emits: ["update:modelValue"],
11533
12312
  setup(__props) {
11534
12313
  const isSelected = useModel(__props, "modelValue");
11535
- const id = __props.id ?? useId$1();
11536
- function toggle() {
11537
- isSelected.value = !isSelected.value;
11538
- }
12314
+ const popover = usePopover({
12315
+ id: __props.id,
12316
+ isOpen: isSelected
12317
+ });
11539
12318
  providePopoverContext({
11540
- isSelected,
11541
- toggle,
11542
- id
12319
+ ...popover,
12320
+ isSelected
11543
12321
  });
11544
12322
  const slotProps = toRef(() => ({
11545
- id,
12323
+ id: popover.id,
11546
12324
  isSelected: isSelected.value,
11547
- toggle
12325
+ toggle: popover.toggle
11548
12326
  }));
11549
12327
  return (_ctx, _cache) => {
11550
12328
  return openBlock(), createBlock(unref(_sfc_main), {
@@ -11559,7 +12337,7 @@ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
11559
12337
  });
11560
12338
  //#endregion
11561
12339
  //#region src/components/Popover/PopoverActivator.vue
11562
- const _sfc_main$37 = /* @__PURE__ */ defineComponent({
12340
+ const _sfc_main$42 = /* @__PURE__ */ defineComponent({
11563
12341
  name: "PopoverActivator",
11564
12342
  __name: "PopoverActivator",
11565
12343
  props: {
@@ -11571,13 +12349,16 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
11571
12349
  const props = createPropsRestProxy(__props, ["as"]);
11572
12350
  const context = usePopoverContext();
11573
12351
  const popovertarget = toRef(() => props.target ?? context.id);
11574
- const style = toRef(() => ({ anchorName: `--${toValue(popovertarget)}` }));
12352
+ const style = toRef(() => {
12353
+ if (props.target) return { anchorName: `--${props.target}` };
12354
+ return context.anchorStyles.value;
12355
+ });
11575
12356
  const slotProps = toRef(() => ({
11576
- isOpen: context.isSelected.value,
12357
+ isOpen: context.isOpen.value,
11577
12358
  attrs: {
11578
12359
  "popovertarget": toValue(popovertarget),
11579
12360
  "type": __props.as === "button" ? "button" : void 0,
11580
- "data-popover-open": context.isSelected.value ? "" : void 0
12361
+ "data-popover-open": context.isOpen.value ? "" : void 0
11581
12362
  }
11582
12363
  }));
11583
12364
  return (_ctx, _cache) => {
@@ -11593,13 +12374,13 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
11593
12374
  });
11594
12375
  //#endregion
11595
12376
  //#region src/components/Popover/PopoverContent.vue
11596
- const _sfc_main$38 = /* @__PURE__ */ defineComponent({
12377
+ const _sfc_main$43 = /* @__PURE__ */ defineComponent({
11597
12378
  name: "PopoverContent",
11598
12379
  __name: "PopoverContent",
11599
12380
  props: {
11600
12381
  id: {},
11601
- positionArea: { default: "bottom" },
11602
- positionTry: { default: "most-width bottom" },
12382
+ positionArea: {},
12383
+ positionTry: {},
11603
12384
  as: {},
11604
12385
  renderless: { type: Boolean }
11605
12386
  },
@@ -11610,37 +12391,25 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
11610
12391
  const context = usePopoverContext();
11611
12392
  const ref = useTemplateRef("ref");
11612
12393
  const id = toRef(() => props.id ?? context.id);
11613
- const style = toRef(() => ({
11614
- "position": "fixed",
11615
- "margin": "unset",
11616
- "inset-area": __props.positionArea,
11617
- "position-area": __props.positionArea,
11618
- "position-anchor": `--${toValue(id)}`,
11619
- "position-try-fallbacks": __props.positionTry
11620
- }));
11621
- /* v8 ignore start -- browser popover API */
11622
- onMounted(() => {
11623
- if (context.isSelected.value) ref.value?.element?.showPopover();
11624
- });
11625
- watch(context.isSelected, (isOpen) => {
11626
- const element = ref.value?.element;
11627
- if (!element?.isConnected) return;
11628
- if (isOpen === element.matches?.(":popover-open")) return;
11629
- if (isOpen) element.showPopover?.();
11630
- else element.hidePopover?.();
12394
+ const style = toRef(() => {
12395
+ if (props.id) return {
12396
+ "position": "fixed",
12397
+ "margin": "unset",
12398
+ "inset-area": __props.positionArea ?? "bottom",
12399
+ "position-area": __props.positionArea ?? "bottom",
12400
+ "position-anchor": `--${props.id}`,
12401
+ "position-try-fallbacks": __props.positionTry ?? "most-width bottom"
12402
+ };
12403
+ return context.contentStyles.value;
11631
12404
  });
11632
- function onToggle(e) {
11633
- if (!ref.value?.element?.isConnected) return;
11634
- context.isSelected.value = e.newState === "open";
11635
- }
11636
- /* v8 ignore stop */
12405
+ context.attach(() => ref.value?.element);
11637
12406
  function onBeforeToggle(e) {
11638
12407
  emit("beforetoggle", e);
11639
12408
  }
11640
12409
  const slotProps = toRef(() => ({
11641
- isOpen: context.isSelected.value,
12410
+ isOpen: context.isOpen.value,
11642
12411
  attrs: {
11643
- id: toValue(id),
12412
+ id: id.value,
11644
12413
  popover: ""
11645
12414
  }
11646
12415
  }));
@@ -11650,10 +12419,7 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
11650
12419
  ref,
11651
12420
  as: props.as,
11652
12421
  style: style.value
11653
- }, slotProps.value.attrs, {
11654
- onBeforetoggle: onBeforeToggle,
11655
- onToggle
11656
- }), {
12422
+ }, slotProps.value.attrs, { onBeforetoggle: onBeforeToggle }), {
11657
12423
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
11658
12424
  _: 3
11659
12425
  }, 16, ["as", "style"]);
@@ -11668,14 +12434,14 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
11668
12434
  * @see https://0.vuetifyjs.com/components/popover
11669
12435
  */
11670
12436
  const Popover = {
11671
- Root: _sfc_main$39,
11672
- Activator: _sfc_main$37,
11673
- Content: _sfc_main$38
12437
+ Root: _sfc_main$44,
12438
+ Activator: _sfc_main$42,
12439
+ Content: _sfc_main$43
11674
12440
  };
11675
12441
  //#endregion
11676
12442
  //#region src/components/Radio/RadioGroup.vue
11677
12443
  const [useRadioGroup, provideRadioGroup] = createContext();
11678
- const _sfc_main$40 = /* @__PURE__ */ defineComponent({
12444
+ const _sfc_main$45 = /* @__PURE__ */ defineComponent({
11679
12445
  name: "RadioGroup",
11680
12446
  __name: "RadioGroup",
11681
12447
  props: /* @__PURE__ */ mergeModels({
@@ -11740,7 +12506,7 @@ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
11740
12506
  //#endregion
11741
12507
  //#region src/components/Radio/RadioRoot.vue
11742
12508
  const [useRadioRoot, provideRadioRoot] = createContext();
11743
- const _sfc_main$43 = /* @__PURE__ */ defineComponent({
12509
+ const _sfc_main$48 = /* @__PURE__ */ defineComponent({
11744
12510
  name: "RadioRoot",
11745
12511
  inheritAttrs: false,
11746
12512
  __name: "RadioRoot",
@@ -11814,265 +12580,746 @@ const _sfc_main$43 = /* @__PURE__ */ defineComponent({
11814
12580
  toValue(nextItem.el)?.focus();
11815
12581
  }
11816
12582
  onUnmounted(() => {
11817
- group.unregister(ticket.id);
12583
+ group.unregister(ticket.id);
12584
+ });
12585
+ const context = {
12586
+ id: __props.id,
12587
+ label: __props.label,
12588
+ value: __props.value,
12589
+ name,
12590
+ form: __props.form,
12591
+ isChecked,
12592
+ isDisabled,
12593
+ select
12594
+ };
12595
+ provideRadioRoot(__props.namespace, context);
12596
+ const slotProps = toRef(() => ({
12597
+ id: __props.id,
12598
+ label: __props.label,
12599
+ value: __props.value,
12600
+ isChecked: isChecked.value,
12601
+ isDisabled: isDisabled.value,
12602
+ select,
12603
+ attrs: {
12604
+ "type": __props.as === "button" ? "button" : void 0,
12605
+ "role": "radio",
12606
+ "aria-checked": isChecked.value,
12607
+ "aria-disabled": isDisabled.value || void 0,
12608
+ "aria-label": __props.label || void 0,
12609
+ "aria-labelledby": __props.ariaLabelledby || void 0,
12610
+ "aria-describedby": __props.ariaDescribedby || void 0,
12611
+ "aria-invalid": __props.ariaInvalid || void 0,
12612
+ "tabindex": isTabbable.value ? 0 : -1,
12613
+ "data-state": dataState.value,
12614
+ "data-disabled": isDisabled.value ? true : void 0,
12615
+ "data-radio-id": __props.id
12616
+ }
12617
+ }));
12618
+ return (_ctx, _cache) => {
12619
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main), mergeProps({ ref: "root" }, {
12620
+ ...unref(attrs),
12621
+ ...slotProps.value.attrs
12622
+ }, {
12623
+ as: __props.as,
12624
+ renderless: __props.renderless,
12625
+ onClick,
12626
+ onKeydown
12627
+ }), {
12628
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12629
+ _: 3
12630
+ }, 16, ["as", "renderless"]), unref(name) ? (openBlock(), createBlock(_sfc_main$46, { key: 0 })) : createCommentVNode("v-if", true)], 64);
12631
+ };
12632
+ }
12633
+ });
12634
+ //#endregion
12635
+ //#region src/components/Radio/RadioHiddenInput.vue
12636
+ const _hoisted_1$3 = [
12637
+ "checked",
12638
+ "disabled",
12639
+ "form",
12640
+ "name",
12641
+ "value"
12642
+ ];
12643
+ const visuallyHiddenStyle$2 = {
12644
+ position: "absolute",
12645
+ width: "1px",
12646
+ height: "1px",
12647
+ padding: "0",
12648
+ margin: "-1px",
12649
+ overflow: "hidden",
12650
+ clip: "rect(0, 0, 0, 0)",
12651
+ whiteSpace: "nowrap",
12652
+ border: "0"
12653
+ };
12654
+ const _sfc_main$46 = /* @__PURE__ */ defineComponent({
12655
+ name: "RadioHiddenInput",
12656
+ __name: "RadioHiddenInput",
12657
+ props: {
12658
+ namespace: { default: "v0:radio:root" },
12659
+ name: {},
12660
+ value: {},
12661
+ form: {}
12662
+ },
12663
+ setup(__props) {
12664
+ const root = useRadioRoot(__props.namespace);
12665
+ const name = toRef(() => __props.name ?? root.name);
12666
+ const form = toRef(() => __props.form ?? root.form);
12667
+ const value = toRef(() => {
12668
+ const v = __props.value ?? root.value ?? "on";
12669
+ if (/* @__PURE__ */ isObject(v)) return JSON.stringify(v);
12670
+ return String(v);
12671
+ });
12672
+ const isChecked = root.isChecked;
12673
+ const isDisabled = root.isDisabled;
12674
+ return (_ctx, _cache) => {
12675
+ return openBlock(), createElementBlock("input", {
12676
+ checked: unref(isChecked),
12677
+ disabled: unref(isDisabled),
12678
+ form: form.value,
12679
+ inert: "",
12680
+ name: name.value,
12681
+ style: visuallyHiddenStyle$2,
12682
+ tabindex: "-1",
12683
+ type: "radio",
12684
+ value: value.value
12685
+ }, null, 8, _hoisted_1$3);
12686
+ };
12687
+ }
12688
+ });
12689
+ //#endregion
12690
+ //#region src/components/Radio/RadioIndicator.vue
12691
+ const _sfc_main$47 = /* @__PURE__ */ defineComponent({
12692
+ name: "RadioIndicator",
12693
+ __name: "RadioIndicator",
12694
+ props: {
12695
+ namespace: { default: "v0:radio:root" },
12696
+ as: { default: "span" },
12697
+ renderless: { type: Boolean }
12698
+ },
12699
+ setup(__props) {
12700
+ const root = useRadioRoot(__props.namespace);
12701
+ const isChecked = toRef(() => toValue(root.isChecked));
12702
+ const dataState = toRef(() => isChecked.value ? "checked" : "unchecked");
12703
+ const slotProps = toRef(() => ({
12704
+ isChecked: isChecked.value,
12705
+ attrs: {
12706
+ "data-state": dataState.value,
12707
+ "style": { visibility: isChecked.value ? "visible" : "hidden" }
12708
+ }
12709
+ }));
12710
+ return (_ctx, _cache) => {
12711
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, {
12712
+ as: __props.as,
12713
+ renderless: __props.renderless
12714
+ }), {
12715
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12716
+ _: 3
12717
+ }, 16, ["as", "renderless"]);
12718
+ };
12719
+ }
12720
+ });
12721
+ //#endregion
12722
+ //#region src/components/Radio/index.ts
12723
+ /**
12724
+ * Radio component with sub-components for radio button controls.
12725
+ *
12726
+ * @see https://0.vuetifyjs.com/components/forms/radio
12727
+ *
12728
+ * @example
12729
+ * ```vue
12730
+ * <script lang="ts" setup>
12731
+ * import { Radio } from '@vuetify/v0'
12732
+ * import { ref } from 'vue'
12733
+ *
12734
+ * const selected = ref<string>()
12735
+ * <\/script>
12736
+ *
12737
+ * <template>
12738
+ * <Radio.Group v-model="selected">
12739
+ * <label>
12740
+ * <Radio.Root value="a">
12741
+ * <Radio.Indicator>●</Radio.Indicator>
12742
+ * </Radio.Root>
12743
+ * Option A
12744
+ * </label>
12745
+ * <label>
12746
+ * <Radio.Root value="b">
12747
+ * <Radio.Indicator>●</Radio.Indicator>
12748
+ * </Radio.Root>
12749
+ * Option B
12750
+ * </label>
12751
+ * </Radio.Group>
12752
+ * </template>
12753
+ * ```
12754
+ */
12755
+ const Radio = {
12756
+ Group: _sfc_main$45,
12757
+ HiddenInput: _sfc_main$46,
12758
+ Indicator: _sfc_main$47,
12759
+ Root: _sfc_main$48
12760
+ };
12761
+ //#endregion
12762
+ //#region src/components/Scrim/Scrim.vue
12763
+ const _sfc_main$49 = /* @__PURE__ */ defineComponent({
12764
+ name: "Scrim",
12765
+ inheritAttrs: false,
12766
+ __name: "Scrim",
12767
+ props: {
12768
+ transition: { default: "fade" },
12769
+ teleport: {
12770
+ type: Boolean,
12771
+ default: true
12772
+ },
12773
+ teleportTo: { default: "body" },
12774
+ as: { default: "div" },
12775
+ renderless: { type: Boolean }
12776
+ },
12777
+ setup(__props) {
12778
+ const attrs = useAttrs();
12779
+ const stack = useStack();
12780
+ const tickets = computed(() => Array.from(stack.selectedItems.value));
12781
+ function onDismiss(ticket) {
12782
+ if (!ticket.blocking) ticket.dismiss();
12783
+ }
12784
+ function getSlotProps(ticket) {
12785
+ return {
12786
+ ticket,
12787
+ zIndex: ticket.zIndex.value - 1,
12788
+ isBlocking: ticket.blocking,
12789
+ dismiss: () => onDismiss(ticket)
12790
+ };
12791
+ }
12792
+ function getStyle(ticket) {
12793
+ return { zIndex: ticket.zIndex.value - 1 };
12794
+ }
12795
+ return (_ctx, _cache) => {
12796
+ return __props.teleport ? (openBlock(), createBlock(Teleport, {
12797
+ key: 0,
12798
+ to: __props.teleportTo
12799
+ }, [createVNode(TransitionGroup, { name: __props.transition }, {
12800
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(tickets.value, (ticket) => {
12801
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
12802
+ key: ticket.id,
12803
+ as: __props.as,
12804
+ style: getStyle(ticket)
12805
+ }, { ref_for: true }, unref(attrs), { onClick: () => onDismiss(ticket) }), {
12806
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", mergeProps({ ref_for: true }, getSlotProps(ticket)))]),
12807
+ _: 2
12808
+ }, 1040, [
12809
+ "as",
12810
+ "style",
12811
+ "onClick"
12812
+ ]);
12813
+ }), 128))]),
12814
+ _: 3
12815
+ }, 8, ["name"])], 8, ["to"])) : (openBlock(), createBlock(TransitionGroup, {
12816
+ key: 1,
12817
+ name: __props.transition
12818
+ }, {
12819
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(tickets.value, (ticket) => {
12820
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
12821
+ key: ticket.id,
12822
+ as: __props.as,
12823
+ style: getStyle(ticket)
12824
+ }, { ref_for: true }, unref(attrs), { onClick: () => onDismiss(ticket) }), {
12825
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", mergeProps({ ref_for: true }, getSlotProps(ticket)))]),
12826
+ _: 2
12827
+ }, 1040, [
12828
+ "as",
12829
+ "style",
12830
+ "onClick"
12831
+ ]);
12832
+ }), 128))]),
12833
+ _: 3
12834
+ }, 8, ["name"]));
12835
+ };
12836
+ }
12837
+ });
12838
+ //#endregion
12839
+ //#region src/components/Select/SelectHiddenInput.vue
12840
+ const _hoisted_1$2 = [
12841
+ "disabled",
12842
+ "form",
12843
+ "name",
12844
+ "value"
12845
+ ];
12846
+ const visuallyHiddenStyle$1 = {
12847
+ position: "absolute",
12848
+ width: "1px",
12849
+ height: "1px",
12850
+ padding: "0",
12851
+ margin: "-1px",
12852
+ overflow: "hidden",
12853
+ clip: "rect(0, 0, 0, 0)",
12854
+ whiteSpace: "nowrap",
12855
+ border: "0"
12856
+ };
12857
+ const _sfc_main$81 = /* @__PURE__ */ defineComponent({
12858
+ name: "SelectHiddenInput",
12859
+ __name: "SelectHiddenInput",
12860
+ props: { namespace: { default: "v0:select" } },
12861
+ setup(__props) {
12862
+ const context = useSelectContext(__props.namespace);
12863
+ const values = toRef(() => {
12864
+ return Array.from(context.selection.selectedValues.value).map((v) => {
12865
+ if (/* @__PURE__ */ isNullOrUndefined(v)) return "";
12866
+ if (/* @__PURE__ */ isObject(v)) return JSON.stringify(v);
12867
+ return String(v);
12868
+ });
12869
+ });
12870
+ const isDisabled = toRef(() => toValue(context.disabled));
12871
+ return (_ctx, _cache) => {
12872
+ return openBlock(true), createElementBlock(Fragment, null, renderList(values.value, (val, index) => {
12873
+ return openBlock(), createElementBlock("input", {
12874
+ key: index,
12875
+ disabled: isDisabled.value,
12876
+ form: unref(context).form,
12877
+ inert: "",
12878
+ name: unref(context).name,
12879
+ style: visuallyHiddenStyle$1,
12880
+ tabindex: "-1",
12881
+ type: "hidden",
12882
+ value: val
12883
+ }, null, 8, _hoisted_1$2);
12884
+ }), 128);
12885
+ };
12886
+ }
12887
+ });
12888
+ //#endregion
12889
+ //#region src/components/Select/SelectRoot.vue
12890
+ const [useSelectContext, provideSelectContext] = createContext();
12891
+ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
12892
+ name: "SelectRoot",
12893
+ __name: "SelectRoot",
12894
+ props: /* @__PURE__ */ mergeModels({
12895
+ namespace: { default: "v0:select" },
12896
+ id: {},
12897
+ name: {},
12898
+ form: {},
12899
+ disabled: {
12900
+ type: Boolean,
12901
+ default: false
12902
+ },
12903
+ multiple: {
12904
+ type: Boolean,
12905
+ default: false
12906
+ },
12907
+ mandatory: {
12908
+ type: [Boolean, String],
12909
+ default: false
12910
+ },
12911
+ as: { default: null },
12912
+ renderless: { type: Boolean }
12913
+ }, {
12914
+ "modelValue": {},
12915
+ "modelModifiers": {}
12916
+ }),
12917
+ emits: /* @__PURE__ */ mergeModels(["update:model-value"], ["update:modelValue"]),
12918
+ setup(__props) {
12919
+ const model = useModel(__props, "modelValue");
12920
+ const id = __props.id ?? useId$1();
12921
+ const listboxId = `${id}-listbox`;
12922
+ const activatorId = `${id}-activator`;
12923
+ const selection = createSelection({
12924
+ multiple: __props.multiple,
12925
+ mandatory: __props.mandatory,
12926
+ disabled: toRef(() => __props.disabled),
12927
+ events: true
12928
+ });
12929
+ useProxyModel(selection, model, { multiple: __props.multiple });
12930
+ const selectedId = toRef(() => {
12931
+ const ids = Array.from(selection.selectedIds);
12932
+ return ids.length > 0 ? ids[0] : void 0;
12933
+ });
12934
+ const popover = usePopover({ id });
12935
+ const isOpen = popover.isOpen;
12936
+ const activatorEl = shallowRef(null);
12937
+ const virtualFocus = useVirtualFocus(() => selection.values().map((ticket) => ({
12938
+ id: ticket.id,
12939
+ el: () => document.querySelector(`#${CSS.escape(`${id}-option-${ticket.id}`)}`),
12940
+ disabled: ticket.disabled
12941
+ })), {
12942
+ control: activatorEl,
12943
+ target: () => null,
12944
+ orientation: "vertical"
12945
+ });
12946
+ watch(isOpen, (open) => {
12947
+ if (!open) {
12948
+ virtualFocus.clear();
12949
+ return;
12950
+ }
12951
+ nextTick(() => {
12952
+ const selected = selectedId.value;
12953
+ if (!/* @__PURE__ */ isUndefined(selected)) virtualFocus.highlight(String(selected));
12954
+ });
12955
+ }, { flush: "post" });
12956
+ function open() {
12957
+ if (!isOpen.value && !toValue(__props.disabled)) isOpen.value = true;
12958
+ }
12959
+ function close() {
12960
+ isOpen.value = false;
12961
+ }
12962
+ function toggle() {
12963
+ if (isOpen.value) close();
12964
+ else open();
12965
+ }
12966
+ function select(itemId) {
12967
+ if (__props.multiple) selection.toggle(itemId);
12968
+ else {
12969
+ selection.select(itemId);
12970
+ close();
12971
+ }
12972
+ }
12973
+ provideSelectContext(__props.namespace, {
12974
+ isOpen,
12975
+ disabled: toRef(() => __props.disabled),
12976
+ multiple: __props.multiple,
12977
+ id,
12978
+ listboxId,
12979
+ activatorId,
12980
+ name: __props.name,
12981
+ form: __props.form,
12982
+ activatorEl,
12983
+ selection,
12984
+ virtualFocus,
12985
+ popover,
12986
+ open,
12987
+ close,
12988
+ toggle,
12989
+ select
12990
+ });
12991
+ const slotProps = toRef(() => ({
12992
+ id,
12993
+ isOpen: isOpen.value,
12994
+ isDisabled: toValue(__props.disabled),
12995
+ open,
12996
+ close,
12997
+ toggle
12998
+ }));
12999
+ return (_ctx, _cache) => {
13000
+ return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main), {
13001
+ as: __props.as,
13002
+ renderless: ""
13003
+ }, {
13004
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13005
+ _: 3
13006
+ }, 8, ["as"]), __props.name ? (openBlock(), createBlock(_sfc_main$81, { key: 0 })) : createCommentVNode("v-if", true)], 64);
13007
+ };
13008
+ }
13009
+ });
13010
+ //#endregion
13011
+ //#region src/components/Select/SelectActivator.vue
13012
+ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
13013
+ name: "SelectActivator",
13014
+ __name: "SelectActivator",
13015
+ props: {
13016
+ namespace: { default: "v0:select" },
13017
+ as: { default: "button" },
13018
+ renderless: { type: Boolean }
13019
+ },
13020
+ setup(__props) {
13021
+ const context = useSelectContext(__props.namespace);
13022
+ const activatorEl = useTemplateRef("activator");
13023
+ watchEffect(() => {
13024
+ context.activatorEl.value = activatorEl.value?.element ?? null;
13025
+ });
13026
+ function onClick() {
13027
+ context.toggle();
13028
+ }
13029
+ function onKeydown(e) {
13030
+ if (context.isOpen.value) switch (e.key) {
13031
+ case " ":
13032
+ case "Enter":
13033
+ e.preventDefault();
13034
+ if (!/* @__PURE__ */ isUndefined(context.virtualFocus.highlightedId.value)) context.select(context.virtualFocus.highlightedId.value);
13035
+ break;
13036
+ case "Escape":
13037
+ e.preventDefault();
13038
+ context.close();
13039
+ break;
13040
+ case "Tab":
13041
+ context.close();
13042
+ break;
13043
+ case "ArrowDown":
13044
+ case "ArrowUp":
13045
+ case "Home":
13046
+ case "End":
13047
+ context.virtualFocus.onKeydown(e);
13048
+ break;
13049
+ }
13050
+ else switch (e.key) {
13051
+ case " ":
13052
+ case "Enter":
13053
+ case "ArrowDown":
13054
+ case "ArrowUp":
13055
+ e.preventDefault();
13056
+ context.open();
13057
+ break;
13058
+ }
13059
+ }
13060
+ const style = toRef(() => context.popover.anchorStyles.value);
13061
+ const slotProps = toRef(() => ({
13062
+ isOpen: context.isOpen.value,
13063
+ attrs: {
13064
+ "id": context.activatorId,
13065
+ "role": "combobox",
13066
+ "type": __props.as === "button" ? "button" : void 0,
13067
+ "aria-expanded": context.isOpen.value,
13068
+ "aria-haspopup": "listbox",
13069
+ "aria-controls": context.listboxId,
13070
+ "data-select-open": context.isOpen.value ? "" : void 0
13071
+ }
13072
+ }));
13073
+ return (_ctx, _cache) => {
13074
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
13075
+ ref: "activator",
13076
+ as: __props.as,
13077
+ style: style.value
13078
+ }, slotProps.value.attrs, {
13079
+ onClick,
13080
+ onKeydown
13081
+ }), {
13082
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13083
+ _: 3
13084
+ }, 16, ["as", "style"]);
13085
+ };
13086
+ }
13087
+ });
13088
+ //#endregion
13089
+ //#region src/components/Select/SelectContent.vue
13090
+ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
13091
+ name: "SelectContent",
13092
+ __name: "SelectContent",
13093
+ props: {
13094
+ namespace: { default: "v0:select" },
13095
+ as: { default: "div" },
13096
+ renderless: { type: Boolean }
13097
+ },
13098
+ setup(__props) {
13099
+ const context = useSelectContext(__props.namespace);
13100
+ const content = useTemplateRef("content");
13101
+ context.popover.attach(() => content.value?.element);
13102
+ const { hasContent } = useLazy(context.isOpen);
13103
+ const slotProps = toRef(() => ({ isOpen: context.isOpen.value }));
13104
+ const attrs = toRef(() => ({
13105
+ ...context.popover.contentAttrs.value,
13106
+ "id": context.listboxId,
13107
+ "role": "listbox",
13108
+ "aria-multiselectable": context.multiple || void 0,
13109
+ "tabindex": -1
13110
+ }));
13111
+ const style = toRef(() => context.popover.contentStyles.value);
13112
+ return (_ctx, _cache) => {
13113
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({
13114
+ ref_key: "content",
13115
+ ref: content,
13116
+ as: __props.as,
13117
+ style: style.value
13118
+ }, attrs.value), {
13119
+ default: withCtx(() => [unref(hasContent) ? renderSlot(_ctx.$slots, "default", normalizeProps(mergeProps({ key: 0 }, slotProps.value))) : createCommentVNode("v-if", true)]),
13120
+ _: 3
13121
+ }, 16, ["as", "style"]);
13122
+ };
13123
+ }
13124
+ });
13125
+ //#endregion
13126
+ //#region src/components/Select/SelectCue.vue
13127
+ const _sfc_main$52 = /* @__PURE__ */ defineComponent({
13128
+ name: "SelectCue",
13129
+ __name: "SelectCue",
13130
+ props: {
13131
+ namespace: { default: "v0:select" },
13132
+ as: { default: "span" },
13133
+ renderless: { type: Boolean }
13134
+ },
13135
+ setup(__props) {
13136
+ const context = useSelectContext(__props.namespace);
13137
+ const slotProps = toRef(() => ({
13138
+ isOpen: context.isOpen.value,
13139
+ attrs: {
13140
+ "aria-hidden": true,
13141
+ "data-state": context.isOpen.value ? "open" : "closed"
13142
+ }
13143
+ }));
13144
+ return (_ctx, _cache) => {
13145
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({ as: __props.as }, slotProps.value.attrs), {
13146
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13147
+ _: 3
13148
+ }, 16, ["as"]);
13149
+ };
13150
+ }
13151
+ });
13152
+ //#endregion
13153
+ //#region src/components/Select/SelectItem.vue
13154
+ const _sfc_main$53 = /* @__PURE__ */ defineComponent({
13155
+ name: "SelectItem",
13156
+ __name: "SelectItem",
13157
+ props: {
13158
+ namespace: { default: "v0:select" },
13159
+ id: {},
13160
+ value: {},
13161
+ disabled: {},
13162
+ as: { default: "div" },
13163
+ renderless: { type: Boolean }
13164
+ },
13165
+ setup(__props) {
13166
+ const context = useSelectContext(__props.namespace);
13167
+ const ticket = context.selection.register({
13168
+ id: __props.id,
13169
+ value: __props.value,
13170
+ disabled: __props.disabled
13171
+ });
13172
+ const elementId = `${context.id}-option-${ticket.id}`;
13173
+ const isSelected = toRef(() => toValue(ticket.isSelected));
13174
+ const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(context.disabled));
13175
+ const isHighlighted = toRef(() => context.virtualFocus.highlightedId.value === ticket.id);
13176
+ function onClick() {
13177
+ if (!toValue(isDisabled)) context.select(ticket.id);
13178
+ }
13179
+ onUnmounted(() => {
13180
+ context.selection.unregister(ticket.id);
11818
13181
  });
11819
- const context = {
11820
- id: __props.id,
11821
- label: __props.label,
11822
- value: __props.value,
11823
- name,
11824
- form: __props.form,
11825
- isChecked,
11826
- isDisabled,
11827
- select
11828
- };
11829
- provideRadioRoot(__props.namespace, context);
11830
13182
  const slotProps = toRef(() => ({
11831
- id: __props.id,
11832
- label: __props.label,
11833
13183
  value: __props.value,
11834
- isChecked: isChecked.value,
13184
+ isSelected: isSelected.value,
13185
+ isHighlighted: isHighlighted.value,
11835
13186
  isDisabled: isDisabled.value,
11836
- select,
13187
+ select: () => context.select(ticket.id),
11837
13188
  attrs: {
11838
- "type": __props.as === "button" ? "button" : void 0,
11839
- "role": "radio",
11840
- "aria-checked": isChecked.value,
13189
+ "id": elementId,
13190
+ "role": "option",
13191
+ "aria-selected": isSelected.value,
11841
13192
  "aria-disabled": isDisabled.value || void 0,
11842
- "aria-label": __props.label || void 0,
11843
- "aria-labelledby": __props.ariaLabelledby || void 0,
11844
- "aria-describedby": __props.ariaDescribedby || void 0,
11845
- "aria-invalid": __props.ariaInvalid || void 0,
11846
- "tabindex": isTabbable.value ? 0 : -1,
11847
- "data-state": dataState.value,
11848
- "data-disabled": isDisabled.value ? true : void 0,
11849
- "data-radio-id": __props.id
13193
+ "data-selected": isSelected.value || void 0,
13194
+ "data-highlighted": isHighlighted.value ? "" : void 0,
13195
+ "data-disabled": isDisabled.value || void 0,
13196
+ "data-id": String(ticket.id)
11850
13197
  }
11851
13198
  }));
11852
13199
  return (_ctx, _cache) => {
11853
- return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main), mergeProps({ ref: "root" }, {
11854
- ...unref(attrs),
11855
- ...slotProps.value.attrs
11856
- }, {
11857
- as: __props.as,
11858
- renderless: __props.renderless,
11859
- onClick,
11860
- onKeydown
11861
- }), {
13200
+ return openBlock(), createBlock(unref(_sfc_main), mergeProps({ as: __props.as }, slotProps.value.attrs, { onClick }), {
11862
13201
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
11863
13202
  _: 3
11864
- }, 16, ["as", "renderless"]), unref(name) ? (openBlock(), createBlock(_sfc_main$41, { key: 0 })) : createCommentVNode("v-if", true)], 64);
13203
+ }, 16, ["as"]);
11865
13204
  };
11866
13205
  }
11867
13206
  });
11868
13207
  //#endregion
11869
- //#region src/components/Radio/RadioHiddenInput.vue
11870
- const _hoisted_1$2 = [
11871
- "checked",
11872
- "disabled",
11873
- "form",
11874
- "name",
11875
- "value"
11876
- ];
11877
- const visuallyHiddenStyle$1 = {
11878
- position: "absolute",
11879
- width: "1px",
11880
- height: "1px",
11881
- padding: "0",
11882
- margin: "-1px",
11883
- overflow: "hidden",
11884
- clip: "rect(0, 0, 0, 0)",
11885
- whiteSpace: "nowrap",
11886
- border: "0"
11887
- };
11888
- const _sfc_main$41 = /* @__PURE__ */ defineComponent({
11889
- name: "RadioHiddenInput",
11890
- __name: "RadioHiddenInput",
13208
+ //#region src/components/Select/SelectPlaceholder.vue
13209
+ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
13210
+ name: "SelectPlaceholder",
13211
+ __name: "SelectPlaceholder",
11891
13212
  props: {
11892
- namespace: { default: "v0:radio:root" },
11893
- name: {},
11894
- value: {},
11895
- form: {}
13213
+ namespace: { default: "v0:select" },
13214
+ as: { default: "span" },
13215
+ renderless: { type: Boolean }
11896
13216
  },
11897
13217
  setup(__props) {
11898
- const root = useRadioRoot(__props.namespace);
11899
- const name = toRef(() => __props.name ?? root.name);
11900
- const form = toRef(() => __props.form ?? root.form);
11901
- const value = toRef(() => {
11902
- const v = __props.value ?? root.value ?? "on";
11903
- if (/* @__PURE__ */ isObject(v)) return JSON.stringify(v);
11904
- return String(v);
11905
- });
11906
- const isChecked = root.isChecked;
11907
- const isDisabled = root.isDisabled;
13218
+ const context = useSelectContext(__props.namespace);
13219
+ const hasValue = toRef(() => context.selection.selectedIds.size > 0);
11908
13220
  return (_ctx, _cache) => {
11909
- return openBlock(), createElementBlock("input", {
11910
- checked: unref(isChecked),
11911
- disabled: unref(isDisabled),
11912
- form: form.value,
11913
- inert: "",
11914
- name: name.value,
11915
- style: visuallyHiddenStyle$1,
11916
- tabindex: "-1",
11917
- type: "radio",
11918
- value: value.value
11919
- }, null, 8, _hoisted_1$2);
13221
+ return !hasValue.value ? (openBlock(), createBlock(unref(_sfc_main), {
13222
+ key: 0,
13223
+ as: __props.as
13224
+ }, {
13225
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", { hasValue: hasValue.value })]),
13226
+ _: 3
13227
+ }, 8, ["as"])) : createCommentVNode("v-if", true);
11920
13228
  };
11921
13229
  }
11922
13230
  });
11923
13231
  //#endregion
11924
- //#region src/components/Radio/RadioIndicator.vue
11925
- const _sfc_main$42 = /* @__PURE__ */ defineComponent({
11926
- name: "RadioIndicator",
11927
- __name: "RadioIndicator",
13232
+ //#region src/components/Select/SelectValue.vue
13233
+ const _sfc_main$56 = /* @__PURE__ */ defineComponent({
13234
+ name: "SelectValue",
13235
+ __name: "SelectValue",
11928
13236
  props: {
11929
- namespace: { default: "v0:radio:root" },
13237
+ namespace: { default: "v0:select" },
11930
13238
  as: { default: "span" },
11931
13239
  renderless: { type: Boolean }
11932
13240
  },
11933
13241
  setup(__props) {
11934
- const root = useRadioRoot(__props.namespace);
11935
- const isChecked = toRef(() => toValue(root.isChecked));
11936
- const dataState = toRef(() => isChecked.value ? "checked" : "unchecked");
13242
+ const context = useSelectContext(__props.namespace);
13243
+ const items = toRef(() => Array.from(context.selection.selectedItems.value));
13244
+ const values = toRef(() => Array.from(context.selection.selectedValues.value));
13245
+ const hasValue = toRef(() => context.selection.selectedIds.size > 0);
11937
13246
  const slotProps = toRef(() => ({
11938
- isChecked: isChecked.value,
11939
- attrs: {
11940
- "data-state": dataState.value,
11941
- "style": { visibility: isChecked.value ? "visible" : "hidden" }
11942
- }
13247
+ selectedItem: items.value[0],
13248
+ selectedItems: items.value,
13249
+ selectedValue: values.value[0],
13250
+ selectedValues: values.value,
13251
+ hasValue: hasValue.value,
13252
+ attrs: {}
11943
13253
  }));
11944
13254
  return (_ctx, _cache) => {
11945
- return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, {
11946
- as: __props.as,
11947
- renderless: __props.renderless
11948
- }), {
11949
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13255
+ return hasValue.value ? (openBlock(), createBlock(unref(_sfc_main), {
13256
+ key: 0,
13257
+ as: __props.as
13258
+ }, {
13259
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)), () => [createTextVNode(toDisplayString(values.value[0]), 1)])]),
11950
13260
  _: 3
11951
- }, 16, ["as", "renderless"]);
13261
+ }, 8, ["as"])) : createCommentVNode("v-if", true);
11952
13262
  };
11953
13263
  }
11954
13264
  });
11955
13265
  //#endregion
11956
- //#region src/components/Radio/index.ts
13266
+ //#region src/components/Select/index.ts
11957
13267
  /**
11958
- * Radio component with sub-components for radio button controls.
13268
+ * Select component with sub-components for building dropdown selects.
11959
13269
  *
11960
- * @see https://0.vuetifyjs.com/components/forms/radio
13270
+ * @see https://0.vuetifyjs.com/components/select
11961
13271
  *
11962
13272
  * @example
11963
13273
  * ```vue
11964
13274
  * <script lang="ts" setup>
11965
- * import { Radio } from '@vuetify/v0'
13275
+ * import { Select } from '@vuetify/v0'
11966
13276
  * import { ref } from 'vue'
11967
13277
  *
11968
- * const selected = ref<string>()
13278
+ * const selected = ref()
13279
+ * const items = [
13280
+ * { id: 'apple', label: 'Apple' },
13281
+ * { id: 'banana', label: 'Banana' },
13282
+ * { id: 'cherry', label: 'Cherry' },
13283
+ * ]
11969
13284
  * <\/script>
11970
13285
  *
11971
13286
  * <template>
11972
- * <Radio.Group v-model="selected">
11973
- * <label>
11974
- * <Radio.Root value="a">
11975
- * <Radio.Indicator>●</Radio.Indicator>
11976
- * </Radio.Root>
11977
- * Option A
11978
- * </label>
11979
- * <label>
11980
- * <Radio.Root value="b">
11981
- * <Radio.Indicator>●</Radio.Indicator>
11982
- * </Radio.Root>
11983
- * Option B
11984
- * </label>
11985
- * </Radio.Group>
13287
+ * <Select.Root v-model="selected">
13288
+ * <Select.Activator>
13289
+ * <Select.Value v-slot="{ selectedValue }">
13290
+ * {{ selectedValue }}
13291
+ * </Select.Value>
13292
+ * <Select.Placeholder>Pick a fruit</Select.Placeholder>
13293
+ * </Select.Activator>
13294
+ *
13295
+ * <Select.Content>
13296
+ * <Select.Item
13297
+ * v-for="item in items"
13298
+ * :key="item.id"
13299
+ * :id="item.id"
13300
+ * :value="item.label"
13301
+ * v-slot="{ isSelected, attrs }"
13302
+ * >
13303
+ * <div v-bind="attrs">{{ item.label }}</div>
13304
+ * </Select.Item>
13305
+ * </Select.Content>
13306
+ * </Select.Root>
11986
13307
  * </template>
11987
13308
  * ```
11988
13309
  */
11989
- const Radio = {
11990
- Group: _sfc_main$40,
11991
- HiddenInput: _sfc_main$41,
11992
- Indicator: _sfc_main$42,
11993
- Root: _sfc_main$43
13310
+ const Select = {
13311
+ Root: _sfc_main$55,
13312
+ Activator: _sfc_main$50,
13313
+ Value: _sfc_main$56,
13314
+ Content: _sfc_main$51,
13315
+ Cue: _sfc_main$52,
13316
+ Item: _sfc_main$53,
13317
+ Placeholder: _sfc_main$54
11994
13318
  };
11995
13319
  //#endregion
11996
- //#region src/components/Scrim/Scrim.vue
11997
- const _sfc_main$44 = /* @__PURE__ */ defineComponent({
11998
- name: "Scrim",
11999
- inheritAttrs: false,
12000
- __name: "Scrim",
12001
- props: {
12002
- transition: { default: "fade" },
12003
- teleport: {
12004
- type: Boolean,
12005
- default: true
12006
- },
12007
- teleportTo: { default: "body" },
12008
- as: { default: "div" },
12009
- renderless: { type: Boolean }
12010
- },
12011
- setup(__props) {
12012
- const attrs = useAttrs();
12013
- const stack = useStack();
12014
- const tickets = computed(() => Array.from(stack.selectedItems.value));
12015
- function onDismiss(ticket) {
12016
- if (!ticket.blocking) ticket.dismiss();
12017
- }
12018
- function getSlotProps(ticket) {
12019
- return {
12020
- ticket,
12021
- zIndex: ticket.zIndex.value - 1,
12022
- isBlocking: ticket.blocking,
12023
- dismiss: () => onDismiss(ticket)
12024
- };
12025
- }
12026
- function getStyle(ticket) {
12027
- return { zIndex: ticket.zIndex.value - 1 };
12028
- }
12029
- return (_ctx, _cache) => {
12030
- return __props.teleport ? (openBlock(), createBlock(Teleport, {
12031
- key: 0,
12032
- to: __props.teleportTo
12033
- }, [createVNode(TransitionGroup, { name: __props.transition }, {
12034
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(tickets.value, (ticket) => {
12035
- return openBlock(), createBlock(unref(_sfc_main), mergeProps({
12036
- key: ticket.id,
12037
- as: __props.as,
12038
- style: getStyle(ticket)
12039
- }, { ref_for: true }, unref(attrs), { onClick: () => onDismiss(ticket) }), {
12040
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", mergeProps({ ref_for: true }, getSlotProps(ticket)))]),
12041
- _: 2
12042
- }, 1040, [
12043
- "as",
12044
- "style",
12045
- "onClick"
12046
- ]);
12047
- }), 128))]),
12048
- _: 3
12049
- }, 8, ["name"])], 8, ["to"])) : (openBlock(), createBlock(TransitionGroup, {
12050
- key: 1,
12051
- name: __props.transition
12052
- }, {
12053
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(tickets.value, (ticket) => {
12054
- return openBlock(), createBlock(unref(_sfc_main), mergeProps({
12055
- key: ticket.id,
12056
- as: __props.as,
12057
- style: getStyle(ticket)
12058
- }, { ref_for: true }, unref(attrs), { onClick: () => onDismiss(ticket) }), {
12059
- default: withCtx(() => [renderSlot(_ctx.$slots, "default", mergeProps({ ref_for: true }, getSlotProps(ticket)))]),
12060
- _: 2
12061
- }, 1040, [
12062
- "as",
12063
- "style",
12064
- "onClick"
12065
- ]);
12066
- }), 128))]),
12067
- _: 3
12068
- }, 8, ["name"]));
12069
- };
12070
- }
12071
- });
12072
- //#endregion
12073
13320
  //#region src/components/Selection/SelectionRoot.vue
12074
13321
  const [useSelectionRoot, provideSelectionRoot] = createContext();
12075
- const _sfc_main$46 = /* @__PURE__ */ defineComponent({
13322
+ const _sfc_main$58 = /* @__PURE__ */ defineComponent({
12076
13323
  name: "SelectionRoot",
12077
13324
  __name: "SelectionRoot",
12078
13325
  props: /* @__PURE__ */ mergeModels({
@@ -12124,7 +13371,7 @@ const _sfc_main$46 = /* @__PURE__ */ defineComponent({
12124
13371
  });
12125
13372
  //#endregion
12126
13373
  //#region src/components/Selection/SelectionItem.vue
12127
- const _sfc_main$45 = /* @__PURE__ */ defineComponent({
13374
+ const _sfc_main$57 = /* @__PURE__ */ defineComponent({
12128
13375
  name: "SelectionItem",
12129
13376
  __name: "SelectionItem",
12130
13377
  props: {
@@ -12174,13 +13421,13 @@ const _sfc_main$45 = /* @__PURE__ */ defineComponent({
12174
13421
  * @see https://0.vuetifyjs.com/components/selection
12175
13422
  */
12176
13423
  const Selection = {
12177
- Root: _sfc_main$46,
12178
- Item: _sfc_main$45
13424
+ Root: _sfc_main$58,
13425
+ Item: _sfc_main$57
12179
13426
  };
12180
13427
  //#endregion
12181
13428
  //#region src/components/Slider/SliderRoot.vue
12182
13429
  const [useSliderRoot, provideSliderRoot] = createContext();
12183
- const _sfc_main$51 = /* @__PURE__ */ defineComponent({
13430
+ const _sfc_main$63 = /* @__PURE__ */ defineComponent({
12184
13431
  name: "SliderRoot",
12185
13432
  inheritAttrs: false,
12186
13433
  __name: "SliderRoot",
@@ -12312,7 +13559,7 @@ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
12312
13559
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
12313
13560
  _: 3
12314
13561
  }, 16, ["as", "renderless"]), __props.name ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(slider).values.value, (_, index) => {
12315
- return openBlock(), createBlock(_sfc_main$49, {
13562
+ return openBlock(), createBlock(_sfc_main$61, {
12316
13563
  key: index,
12317
13564
  index
12318
13565
  }, null, 8, ["index"]);
@@ -12328,7 +13575,7 @@ const _hoisted_1$1 = [
12328
13575
  "name",
12329
13576
  "value"
12330
13577
  ];
12331
- const _sfc_main$49 = /* @__PURE__ */ defineComponent({
13578
+ const _sfc_main$61 = /* @__PURE__ */ defineComponent({
12332
13579
  name: "SliderHiddenInput",
12333
13580
  __name: "SliderHiddenInput",
12334
13581
  props: {
@@ -12353,7 +13600,7 @@ const _sfc_main$49 = /* @__PURE__ */ defineComponent({
12353
13600
  });
12354
13601
  //#endregion
12355
13602
  //#region src/components/Slider/SliderRange.vue
12356
- const _sfc_main$50 = /* @__PURE__ */ defineComponent({
13603
+ const _sfc_main$62 = /* @__PURE__ */ defineComponent({
12357
13604
  name: "SliderRange",
12358
13605
  inheritAttrs: false,
12359
13606
  __name: "SliderRange",
@@ -12414,7 +13661,7 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
12414
13661
  });
12415
13662
  //#endregion
12416
13663
  //#region src/components/Slider/SliderThumb.vue
12417
- const _sfc_main$52 = /* @__PURE__ */ defineComponent({
13664
+ const _sfc_main$64 = /* @__PURE__ */ defineComponent({
12418
13665
  name: "SliderThumb",
12419
13666
  inheritAttrs: false,
12420
13667
  __name: "SliderThumb",
@@ -12528,7 +13775,7 @@ const _sfc_main$52 = /* @__PURE__ */ defineComponent({
12528
13775
  });
12529
13776
  //#endregion
12530
13777
  //#region src/components/Slider/SliderTrack.vue
12531
- const _sfc_main$53 = /* @__PURE__ */ defineComponent({
13778
+ const _sfc_main$65 = /* @__PURE__ */ defineComponent({
12532
13779
  name: "SliderTrack",
12533
13780
  inheritAttrs: false,
12534
13781
  __name: "SliderTrack",
@@ -12622,16 +13869,16 @@ const _sfc_main$53 = /* @__PURE__ */ defineComponent({
12622
13869
  * ```
12623
13870
  */
12624
13871
  const Slider = {
12625
- Root: _sfc_main$51,
12626
- Track: _sfc_main$53,
12627
- Range: _sfc_main$50,
12628
- Thumb: _sfc_main$52,
12629
- HiddenInput: _sfc_main$49
13872
+ Root: _sfc_main$63,
13873
+ Track: _sfc_main$65,
13874
+ Range: _sfc_main$62,
13875
+ Thumb: _sfc_main$64,
13876
+ HiddenInput: _sfc_main$61
12630
13877
  };
12631
13878
  //#endregion
12632
13879
  //#region src/components/Splitter/SplitterRoot.vue
12633
13880
  const [useSplitterRoot, provideSplitterRoot] = createContext("v0:splitter");
12634
- const _sfc_main$56 = /* @__PURE__ */ defineComponent({
13881
+ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
12635
13882
  name: "SplitterRoot",
12636
13883
  inheritAttrs: false,
12637
13884
  __name: "SplitterRoot",
@@ -12813,7 +14060,7 @@ const _sfc_main$56 = /* @__PURE__ */ defineComponent({
12813
14060
  });
12814
14061
  //#endregion
12815
14062
  //#region src/components/Splitter/SplitterPanel.vue
12816
- const _sfc_main$55 = /* @__PURE__ */ defineComponent({
14063
+ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
12817
14064
  name: "SplitterPanel",
12818
14065
  inheritAttrs: false,
12819
14066
  __name: "SplitterPanel",
@@ -12926,7 +14173,7 @@ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
12926
14173
  });
12927
14174
  //#endregion
12928
14175
  //#region src/components/Splitter/SplitterHandle.vue
12929
- const _sfc_main$54 = /* @__PURE__ */ defineComponent({
14176
+ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
12930
14177
  name: "SplitterHandle",
12931
14178
  inheritAttrs: false,
12932
14179
  __name: "SplitterHandle",
@@ -13146,14 +14393,14 @@ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
13146
14393
  * ```
13147
14394
  */
13148
14395
  const Splitter = {
13149
- Root: _sfc_main$56,
13150
- Panel: _sfc_main$55,
13151
- Handle: _sfc_main$54
14396
+ Root: _sfc_main$68,
14397
+ Panel: _sfc_main$67,
14398
+ Handle: _sfc_main$66
13152
14399
  };
13153
14400
  //#endregion
13154
14401
  //#region src/components/Switch/SwitchGroup.vue
13155
14402
  const [useSwitchGroup, provideSwitchGroup] = createContext();
13156
- const _sfc_main$59 = /* @__PURE__ */ defineComponent({
14403
+ const _sfc_main$71 = /* @__PURE__ */ defineComponent({
13157
14404
  name: "SwitchGroup",
13158
14405
  __name: "SwitchGroup",
13159
14406
  props: /* @__PURE__ */ mergeModels({
@@ -13222,7 +14469,7 @@ const _sfc_main$59 = /* @__PURE__ */ defineComponent({
13222
14469
  //#endregion
13223
14470
  //#region src/components/Switch/SwitchRoot.vue
13224
14471
  const [useSwitchRoot, provideSwitchRoot] = createContext();
13225
- const _sfc_main$61 = /* @__PURE__ */ defineComponent({
14472
+ const _sfc_main$73 = /* @__PURE__ */ defineComponent({
13226
14473
  name: "SwitchRoot",
13227
14474
  inheritAttrs: false,
13228
14475
  __name: "SwitchRoot",
@@ -13352,7 +14599,7 @@ const _sfc_main$61 = /* @__PURE__ */ defineComponent({
13352
14599
  }), {
13353
14600
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
13354
14601
  _: 3
13355
- }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$60, { key: 0 })) : createCommentVNode("v-if", true)], 64);
14602
+ }, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$72, { key: 0 })) : createCommentVNode("v-if", true)], 64);
13356
14603
  };
13357
14604
  }
13358
14605
  });
@@ -13376,7 +14623,7 @@ const visuallyHiddenStyle = {
13376
14623
  whiteSpace: "nowrap",
13377
14624
  border: "0"
13378
14625
  };
13379
- const _sfc_main$60 = /* @__PURE__ */ defineComponent({
14626
+ const _sfc_main$72 = /* @__PURE__ */ defineComponent({
13380
14627
  name: "SwitchHiddenInput",
13381
14628
  __name: "SwitchHiddenInput",
13382
14629
  props: {
@@ -13414,7 +14661,7 @@ const _sfc_main$60 = /* @__PURE__ */ defineComponent({
13414
14661
  });
13415
14662
  //#endregion
13416
14663
  //#region src/components/Switch/SwitchSelectAll.vue
13417
- const _sfc_main$62 = /* @__PURE__ */ defineComponent({
14664
+ const _sfc_main$74 = /* @__PURE__ */ defineComponent({
13418
14665
  name: "SwitchSelectAll",
13419
14666
  inheritAttrs: false,
13420
14667
  __name: "SwitchSelectAll",
@@ -13502,7 +14749,7 @@ const _sfc_main$62 = /* @__PURE__ */ defineComponent({
13502
14749
  });
13503
14750
  //#endregion
13504
14751
  //#region src/components/Switch/SwitchThumb.vue
13505
- const _sfc_main$63 = /* @__PURE__ */ defineComponent({
14752
+ const _sfc_main$75 = /* @__PURE__ */ defineComponent({
13506
14753
  name: "SwitchThumb",
13507
14754
  __name: "SwitchThumb",
13508
14755
  props: {
@@ -13537,7 +14784,7 @@ const _sfc_main$63 = /* @__PURE__ */ defineComponent({
13537
14784
  });
13538
14785
  //#endregion
13539
14786
  //#region src/components/Switch/SwitchTrack.vue
13540
- const _sfc_main$64 = /* @__PURE__ */ defineComponent({
14787
+ const _sfc_main$76 = /* @__PURE__ */ defineComponent({
13541
14788
  name: "SwitchTrack",
13542
14789
  __name: "SwitchTrack",
13543
14790
  props: {
@@ -13596,17 +14843,17 @@ const _sfc_main$64 = /* @__PURE__ */ defineComponent({
13596
14843
  * ```
13597
14844
  */
13598
14845
  const Switch = {
13599
- Group: _sfc_main$59,
13600
- HiddenInput: _sfc_main$60,
13601
- Root: _sfc_main$61,
13602
- SelectAll: _sfc_main$62,
13603
- Thumb: _sfc_main$63,
13604
- Track: _sfc_main$64
14846
+ Group: _sfc_main$71,
14847
+ HiddenInput: _sfc_main$72,
14848
+ Root: _sfc_main$73,
14849
+ SelectAll: _sfc_main$74,
14850
+ Thumb: _sfc_main$75,
14851
+ Track: _sfc_main$76
13605
14852
  };
13606
14853
  //#endregion
13607
14854
  //#region src/components/Single/SingleRoot.vue
13608
14855
  const [useSingleRoot, provideSingleRoot] = createContext();
13609
- const _sfc_main$48 = /* @__PURE__ */ defineComponent({
14856
+ const _sfc_main$60 = /* @__PURE__ */ defineComponent({
13610
14857
  name: "SingleRoot",
13611
14858
  __name: "SingleRoot",
13612
14859
  props: /* @__PURE__ */ mergeModels({
@@ -13652,7 +14899,7 @@ const _sfc_main$48 = /* @__PURE__ */ defineComponent({
13652
14899
  });
13653
14900
  //#endregion
13654
14901
  //#region src/components/Single/SingleItem.vue
13655
- const _sfc_main$47 = /* @__PURE__ */ defineComponent({
14902
+ const _sfc_main$59 = /* @__PURE__ */ defineComponent({
13656
14903
  name: "SingleItem",
13657
14904
  __name: "SingleItem",
13658
14905
  props: {
@@ -13702,13 +14949,13 @@ const _sfc_main$47 = /* @__PURE__ */ defineComponent({
13702
14949
  * @see https://0.vuetifyjs.com/components/single
13703
14950
  */
13704
14951
  const Single = {
13705
- Root: _sfc_main$48,
13706
- Item: _sfc_main$47
14952
+ Root: _sfc_main$60,
14953
+ Item: _sfc_main$59
13707
14954
  };
13708
14955
  //#endregion
13709
14956
  //#region src/components/Step/StepRoot.vue
13710
14957
  const [useStepRoot, provideStepRoot] = createContext();
13711
- const _sfc_main$58 = /* @__PURE__ */ defineComponent({
14958
+ const _sfc_main$70 = /* @__PURE__ */ defineComponent({
13712
14959
  name: "StepRoot",
13713
14960
  __name: "StepRoot",
13714
14961
  props: /* @__PURE__ */ mergeModels({
@@ -13759,7 +15006,7 @@ const _sfc_main$58 = /* @__PURE__ */ defineComponent({
13759
15006
  });
13760
15007
  //#endregion
13761
15008
  //#region src/components/Step/StepItem.vue
13762
- const _sfc_main$57 = /* @__PURE__ */ defineComponent({
15009
+ const _sfc_main$69 = /* @__PURE__ */ defineComponent({
13763
15010
  name: "StepItem",
13764
15011
  __name: "StepItem",
13765
15012
  props: {
@@ -13809,13 +15056,13 @@ const _sfc_main$57 = /* @__PURE__ */ defineComponent({
13809
15056
  * @see https://0.vuetifyjs.com/components/step
13810
15057
  */
13811
15058
  const Step = {
13812
- Root: _sfc_main$58,
13813
- Item: _sfc_main$57
15059
+ Root: _sfc_main$70,
15060
+ Item: _sfc_main$69
13814
15061
  };
13815
15062
  //#endregion
13816
15063
  //#region src/components/Tabs/TabsRoot.vue
13817
15064
  const [useTabsRoot, provideTabsRoot] = createContext();
13818
- const _sfc_main$68 = /* @__PURE__ */ defineComponent({
15065
+ const _sfc_main$80 = /* @__PURE__ */ defineComponent({
13819
15066
  name: "TabsRoot",
13820
15067
  __name: "TabsRoot",
13821
15068
  props: /* @__PURE__ */ mergeModels({
@@ -13883,7 +15130,7 @@ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
13883
15130
  });
13884
15131
  //#endregion
13885
15132
  //#region src/components/Tabs/TabsList.vue
13886
- const _sfc_main$66 = /* @__PURE__ */ defineComponent({
15133
+ const _sfc_main$78 = /* @__PURE__ */ defineComponent({
13887
15134
  name: "TabsList",
13888
15135
  inheritAttrs: false,
13889
15136
  __name: "TabsList",
@@ -13924,7 +15171,7 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
13924
15171
  });
13925
15172
  //#endregion
13926
15173
  //#region src/components/Tabs/TabsItem.vue
13927
- const _sfc_main$65 = /* @__PURE__ */ defineComponent({
15174
+ const _sfc_main$77 = /* @__PURE__ */ defineComponent({
13928
15175
  name: "TabsItem",
13929
15176
  inheritAttrs: false,
13930
15177
  __name: "TabsItem",
@@ -14039,7 +15286,7 @@ const _sfc_main$65 = /* @__PURE__ */ defineComponent({
14039
15286
  });
14040
15287
  //#endregion
14041
15288
  //#region src/components/Tabs/TabsPanel.vue
14042
- const _sfc_main$67 = /* @__PURE__ */ defineComponent({
15289
+ const _sfc_main$79 = /* @__PURE__ */ defineComponent({
14043
15290
  name: "TabsPanel",
14044
15291
  inheritAttrs: false,
14045
15292
  __name: "TabsPanel",
@@ -14120,10 +15367,10 @@ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
14120
15367
  * ```
14121
15368
  */
14122
15369
  const Tabs = {
14123
- Root: _sfc_main$68,
14124
- List: _sfc_main$66,
14125
- Item: _sfc_main$65,
14126
- Panel: _sfc_main$67
15370
+ Root: _sfc_main$80,
15371
+ List: _sfc_main$78,
15372
+ Item: _sfc_main$77,
15373
+ Panel: _sfc_main$79
14127
15374
  };
14128
15375
  //#endregion
14129
- export { _sfc_main as Atom, Avatar, _sfc_main$1 as AvatarFallback, _sfc_main$2 as AvatarImage, _sfc_main$3 as AvatarRoot, Breadcrumbs, _sfc_main$4 as BreadcrumbsDivider, _sfc_main$5 as BreadcrumbsEllipsis, _sfc_main$6 as BreadcrumbsItem, _sfc_main$7 as BreadcrumbsLink, _sfc_main$8 as BreadcrumbsList, _sfc_main$9 as BreadcrumbsPage, _sfc_main$10 as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, _sfc_main$11 as CheckboxGroup, _sfc_main$12 as CheckboxHiddenInput, _sfc_main$13 as CheckboxIndicator, _sfc_main$14 as CheckboxRoot, _sfc_main$15 as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$16 as DialogActivator, _sfc_main$17 as DialogClose, _sfc_main$18 as DialogContent, _sfc_main$19 as DialogDescription, _sfc_main$20 as DialogRoot, _sfc_main$21 as DialogTitle, ExpansionPanel, _sfc_main$22 as ExpansionPanelActivator, _sfc_main$23 as ExpansionPanelContent, _sfc_main$24 as ExpansionPanelHeader, _sfc_main$25 as ExpansionPanelItem, _sfc_main$26 as ExpansionPanelRoot, FeaturesAdapter, Group, _sfc_main$27 as GroupItem, _sfc_main$28 as GroupRoot, IN_BROWSER, MemoryAdapter, Pagination, _sfc_main$29 as PaginationEllipsis, _sfc_main$30 as PaginationFirst, _sfc_main$31 as PaginationItem, _sfc_main$32 as PaginationLast, _sfc_main$33 as PaginationNext, _sfc_main$34 as PaginationPrev, _sfc_main$35 as PaginationRoot, _sfc_main$36 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$37 as PopoverActivator, _sfc_main$38 as PopoverContent, _sfc_main$39 as PopoverRoot, Radio, _sfc_main$40 as RadioGroup, _sfc_main$41 as RadioHiddenInput, _sfc_main$42 as RadioIndicator, _sfc_main$43 as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$44 as Scrim, Selection, _sfc_main$45 as SelectionItem, _sfc_main$46 as SelectionRoot, ServerAdapter, Single, _sfc_main$47 as SingleItem, _sfc_main$48 as SingleRoot, Slider, _sfc_main$49 as SliderHiddenInput, _sfc_main$50 as SliderRange, _sfc_main$51 as SliderRoot, _sfc_main$52 as SliderThumb, _sfc_main$53 as SliderTrack, Splitter, _sfc_main$54 as SplitterHandle, _sfc_main$55 as SplitterPanel, _sfc_main$56 as SplitterRoot, Step, _sfc_main$57 as StepItem, _sfc_main$58 as StepRoot, Switch, _sfc_main$59 as SwitchGroup, _sfc_main$60 as SwitchHiddenInput, _sfc_main$61 as SwitchRoot, _sfc_main$62 as SwitchSelectAll, _sfc_main$63 as SwitchThumb, _sfc_main$64 as SwitchTrack, Tabs, _sfc_main$65 as TabsItem, _sfc_main$66 as TabsList, _sfc_main$67 as TabsPanel, _sfc_main$68 as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0RtlAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, createRegistry, createRegistryContext, createRtl, createRtlContext, createRtlFallback, createRtlPlugin, createRules, createRulesContext, createRulesFallback, createRulesPlugin, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createValidation, createVirtual, createVirtualContext, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, 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, useRtl, useRules, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useWindowEventListener, version };
15376
+ export { _sfc_main as Atom, Avatar, _sfc_main$1 as AvatarFallback, _sfc_main$2 as AvatarImage, _sfc_main$3 as AvatarRoot, Breadcrumbs, _sfc_main$4 as BreadcrumbsDivider, _sfc_main$5 as BreadcrumbsEllipsis, _sfc_main$6 as BreadcrumbsItem, _sfc_main$7 as BreadcrumbsLink, _sfc_main$8 as BreadcrumbsList, _sfc_main$9 as BreadcrumbsPage, _sfc_main$10 as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, _sfc_main$11 as CheckboxGroup, _sfc_main$12 as CheckboxHiddenInput, _sfc_main$13 as CheckboxIndicator, _sfc_main$14 as CheckboxRoot, _sfc_main$15 as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$16 as DialogActivator, _sfc_main$17 as DialogClose, _sfc_main$18 as DialogContent, _sfc_main$19 as DialogDescription, _sfc_main$20 as DialogRoot, _sfc_main$21 as DialogTitle, ExpansionPanel, _sfc_main$22 as ExpansionPanelActivator, _sfc_main$23 as ExpansionPanelContent, _sfc_main$24 as ExpansionPanelHeader, _sfc_main$25 as ExpansionPanelItem, _sfc_main$26 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$27 as Form, Group, _sfc_main$28 as GroupItem, _sfc_main$29 as GroupRoot, IN_BROWSER, Input, _sfc_main$30 as InputControl, _sfc_main$31 as InputDescription, _sfc_main$32 as InputError, _sfc_main$33 as InputRoot, MemoryAdapter, Pagination, _sfc_main$34 as PaginationEllipsis, _sfc_main$35 as PaginationFirst, _sfc_main$36 as PaginationItem, _sfc_main$37 as PaginationLast, _sfc_main$38 as PaginationNext, _sfc_main$39 as PaginationPrev, _sfc_main$40 as PaginationRoot, _sfc_main$41 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$42 as PopoverActivator, _sfc_main$43 as PopoverContent, _sfc_main$44 as PopoverRoot, Radio, _sfc_main$45 as RadioGroup, _sfc_main$46 as RadioHiddenInput, _sfc_main$47 as RadioIndicator, _sfc_main$48 as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$49 as Scrim, Select, _sfc_main$50 as SelectActivator, _sfc_main$51 as SelectContent, _sfc_main$52 as SelectCue, _sfc_main$53 as SelectItem, _sfc_main$54 as SelectPlaceholder, _sfc_main$55 as SelectRoot, _sfc_main$56 as SelectValue, Selection, _sfc_main$57 as SelectionItem, _sfc_main$58 as SelectionRoot, ServerAdapter, Single, _sfc_main$59 as SingleItem, _sfc_main$60 as SingleRoot, Slider, _sfc_main$61 as SliderHiddenInput, _sfc_main$62 as SliderRange, _sfc_main$63 as SliderRoot, _sfc_main$64 as SliderThumb, _sfc_main$65 as SliderTrack, Splitter, _sfc_main$66 as SplitterHandle, _sfc_main$67 as SplitterPanel, _sfc_main$68 as SplitterRoot, Step, _sfc_main$69 as StepItem, _sfc_main$70 as StepRoot, Switch, _sfc_main$71 as SwitchGroup, _sfc_main$72 as SwitchHiddenInput, _sfc_main$73 as SwitchRoot, _sfc_main$74 as SwitchSelectAll, _sfc_main$75 as SwitchThumb, _sfc_main$76 as SwitchTrack, Tabs, _sfc_main$77 as TabsItem, _sfc_main$78 as TabsList, _sfc_main$79 as TabsPanel, _sfc_main$80 as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0RtlAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, createRegistry, createRegistryContext, createRtl, createRtlContext, createRtlFallback, createRtlPlugin, createRules, createRulesContext, createRulesFallback, createRulesPlugin, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createValidation, createVirtual, createVirtualContext, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, provideInputRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideRadioGroup, provideRadioRoot, provideSelectContext, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, range, singleOpenStrategy, toArray, toElement, toReactive, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useCheckboxGroup, useCheckboxRoot, useClickOutside, useContext, useDataTable, useDate, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useInputRoot, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopover, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRegistry, useResizeObserver, useRovingFocus, useRtl, useRules, useSelectContext, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useToggleScope, useTokens, useVirtual, useVirtualFocus, useWindowEventListener, version };