@vuetify/nightly 3.6.4-master.2024-05-10 → 3.6.5-master.2024-05-12

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 (60) hide show
  1. package/CHANGELOG.md +4 -9
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +268 -4
  4. package/dist/json/importMap-labs.json +18 -6
  5. package/dist/json/importMap.json +138 -138
  6. package/dist/json/tags.json +81 -0
  7. package/dist/json/web-types.json +1253 -6
  8. package/dist/vuetify-labs.css +2350 -2542
  9. package/dist/vuetify-labs.d.ts +1615 -28
  10. package/dist/vuetify-labs.esm.js +298 -11
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +298 -11
  13. package/dist/vuetify-labs.min.css +3 -3
  14. package/dist/vuetify.css +4466 -4726
  15. package/dist/vuetify.d.ts +94 -70
  16. package/dist/vuetify.esm.js +38 -11
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +38 -11
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +3 -3
  21. package/dist/vuetify.min.js +47 -48
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/components/VBtn/index.d.mts +2 -0
  24. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +3 -1
  25. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  26. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +15 -4
  27. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  28. package/lib/components/VExpansionPanel/index.d.mts +82 -27
  29. package/lib/components/VSlideGroup/index.d.mts +2 -0
  30. package/lib/components/VStepper/VStepper.mjs +5 -2
  31. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  32. package/lib/components/VStepper/VStepperItem.mjs +5 -2
  33. package/lib/components/VStepper/VStepperItem.mjs.map +1 -1
  34. package/lib/components/VStepper/index.d.mts +1 -1
  35. package/lib/components/VTabs/index.d.mts +2 -0
  36. package/lib/components/VWindow/index.d.mts +2 -0
  37. package/lib/components/index.d.mts +48 -27
  38. package/lib/composables/group.mjs +8 -0
  39. package/lib/composables/group.mjs.map +1 -1
  40. package/lib/entry-bundler.mjs +1 -1
  41. package/lib/framework.mjs +1 -1
  42. package/lib/index.d.mts +46 -43
  43. package/lib/labs/VStepperVertical/VStepperVertical.mjs +106 -0
  44. package/lib/labs/VStepperVertical/VStepperVertical.mjs.map +1 -0
  45. package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs +38 -0
  46. package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs.map +1 -0
  47. package/lib/labs/VStepperVertical/VStepperVerticalItem.css +69 -0
  48. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +134 -0
  49. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs.map +1 -0
  50. package/lib/labs/VStepperVertical/VStepperVerticalItem.sass +74 -0
  51. package/lib/labs/VStepperVertical/_variables.scss +3 -0
  52. package/lib/labs/VStepperVertical/index.d.mts +1590 -0
  53. package/lib/labs/VStepperVertical/index.mjs +4 -0
  54. package/lib/labs/VStepperVertical/index.mjs.map +1 -0
  55. package/lib/labs/components.d.mts +1599 -20
  56. package/lib/labs/components.mjs +1 -0
  57. package/lib/labs/components.mjs.map +1 -1
  58. package/lib/styles/generic/_colors.scss +0 -1
  59. package/lib/styles/main.css +0 -260
  60. package/package.json +1 -1
@@ -1438,6 +1438,8 @@ interface GroupProvide {
1438
1438
  interface GroupItemProvide {
1439
1439
  id: number;
1440
1440
  isSelected: Ref<boolean>;
1441
+ isFirst: Ref<boolean>;
1442
+ isLast: Ref<boolean>;
1441
1443
  toggle: () => void;
1442
1444
  select: (value: boolean) => void;
1443
1445
  selectedClass: Ref<(string | undefined)[] | false>;
@@ -32238,6 +32240,10 @@ declare const VEmptyState: {
32238
32240
  }>>;
32239
32241
  type VEmptyState = InstanceType<typeof VEmptyState>;
32240
32242
 
32243
+ type VExpansionPanelSlot = {
32244
+ prev: () => void;
32245
+ next: () => void;
32246
+ };
32241
32247
  declare const VExpansionPanels: {
32242
32248
  new (...args: any[]): vue.CreateComponentPublicInstance<{
32243
32249
  flat: boolean;
@@ -32273,16 +32279,19 @@ declare const VExpansionPanels: {
32273
32279
  bgColor?: string | undefined;
32274
32280
  } & {
32275
32281
  $children?: vue.VNodeChild | {
32276
- default?: (() => vue.VNodeChild) | undefined;
32277
- } | (() => vue.VNodeChild);
32282
+ default?: ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32283
+ } | ((arg: VExpansionPanelSlot) => vue.VNodeChild);
32278
32284
  'v-slots'?: {
32279
- default?: false | (() => vue.VNodeChild) | undefined;
32285
+ default?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32280
32286
  } | undefined;
32281
32287
  } & {
32282
- "v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
32288
+ "v-slot:default"?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32283
32289
  } & {
32284
32290
  "onUpdate:modelValue"?: ((val: unknown) => any) | undefined;
32285
- }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32291
+ }, {
32292
+ next: () => void;
32293
+ prev: () => void;
32294
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32286
32295
  'update:modelValue': (val: unknown) => boolean;
32287
32296
  }, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
32288
32297
  flat: boolean;
@@ -32318,13 +32327,13 @@ declare const VExpansionPanels: {
32318
32327
  bgColor?: string | undefined;
32319
32328
  } & {
32320
32329
  $children?: vue.VNodeChild | {
32321
- default?: (() => vue.VNodeChild) | undefined;
32322
- } | (() => vue.VNodeChild);
32330
+ default?: ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32331
+ } | ((arg: VExpansionPanelSlot) => vue.VNodeChild);
32323
32332
  'v-slots'?: {
32324
- default?: false | (() => vue.VNodeChild) | undefined;
32333
+ default?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32325
32334
  } | undefined;
32326
32335
  } & {
32327
- "v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
32336
+ "v-slot:default"?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32328
32337
  } & {
32329
32338
  "onUpdate:modelValue"?: ((val: unknown) => any) | undefined;
32330
32339
  }, {
@@ -32348,7 +32357,7 @@ declare const VExpansionPanels: {
32348
32357
  hideActions: boolean;
32349
32358
  focusable: boolean;
32350
32359
  }, true, {}, vue.SlotsType<Partial<{
32351
- default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
32360
+ default: (arg: VExpansionPanelSlot) => vue.VNode<vue.RendererNode, vue.RendererElement, {
32352
32361
  [key: string]: any;
32353
32362
  }>[];
32354
32363
  }>>, {
@@ -32392,16 +32401,19 @@ declare const VExpansionPanels: {
32392
32401
  bgColor?: string | undefined;
32393
32402
  } & {
32394
32403
  $children?: vue.VNodeChild | {
32395
- default?: (() => vue.VNodeChild) | undefined;
32396
- } | (() => vue.VNodeChild);
32404
+ default?: ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32405
+ } | ((arg: VExpansionPanelSlot) => vue.VNodeChild);
32397
32406
  'v-slots'?: {
32398
- default?: false | (() => vue.VNodeChild) | undefined;
32407
+ default?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32399
32408
  } | undefined;
32400
32409
  } & {
32401
- "v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
32410
+ "v-slot:default"?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32402
32411
  } & {
32403
32412
  "onUpdate:modelValue"?: ((val: unknown) => any) | undefined;
32404
- }, {}, {}, {}, {}, {
32413
+ }, {
32414
+ next: () => void;
32415
+ prev: () => void;
32416
+ }, {}, {}, {}, {
32405
32417
  flat: boolean;
32406
32418
  style: vue.StyleValue;
32407
32419
  disabled: boolean;
@@ -32459,16 +32471,19 @@ declare const VExpansionPanels: {
32459
32471
  bgColor?: string | undefined;
32460
32472
  } & {
32461
32473
  $children?: vue.VNodeChild | {
32462
- default?: (() => vue.VNodeChild) | undefined;
32463
- } | (() => vue.VNodeChild);
32474
+ default?: ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32475
+ } | ((arg: VExpansionPanelSlot) => vue.VNodeChild);
32464
32476
  'v-slots'?: {
32465
- default?: false | (() => vue.VNodeChild) | undefined;
32477
+ default?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32466
32478
  } | undefined;
32467
32479
  } & {
32468
- "v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
32480
+ "v-slot:default"?: false | ((arg: VExpansionPanelSlot) => vue.VNodeChild) | undefined;
32469
32481
  } & {
32470
32482
  "onUpdate:modelValue"?: ((val: unknown) => any) | undefined;
32471
- }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32483
+ }, {
32484
+ next: () => void;
32485
+ prev: () => void;
32486
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32472
32487
  'update:modelValue': (val: unknown) => boolean;
32473
32488
  }, string, {
32474
32489
  flat: boolean;
@@ -32491,7 +32506,7 @@ declare const VExpansionPanels: {
32491
32506
  hideActions: boolean;
32492
32507
  focusable: boolean;
32493
32508
  }, {}, string, vue.SlotsType<Partial<{
32494
- default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
32509
+ default: (arg: VExpansionPanelSlot) => vue.VNode<vue.RendererNode, vue.RendererElement, {
32495
32510
  [key: string]: any;
32496
32511
  }>[];
32497
32512
  }>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & FilterPropsOptions<{
@@ -32660,10 +32675,12 @@ declare const VExpansionPanel: {
32660
32675
  "onGroup:selected"?: ((val: {
32661
32676
  value: boolean;
32662
32677
  }) => any) | undefined;
32663
- }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32678
+ }, {
32679
+ groupItem: GroupItemProvide;
32680
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32664
32681
  'group:selected': (val: {
32665
32682
  value: boolean;
32666
- }) => boolean;
32683
+ }) => true;
32667
32684
  }, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
32668
32685
  style: vue.StyleValue;
32669
32686
  disabled: boolean;
@@ -32785,7 +32802,9 @@ declare const VExpansionPanel: {
32785
32802
  "onGroup:selected"?: ((val: {
32786
32803
  value: boolean;
32787
32804
  }) => any) | undefined;
32788
- }, {}, {}, {}, {}, {
32805
+ }, {
32806
+ groupItem: GroupItemProvide;
32807
+ }, {}, {}, {}, {
32789
32808
  style: vue.StyleValue;
32790
32809
  disabled: boolean;
32791
32810
  tag: string;
@@ -32849,10 +32868,12 @@ declare const VExpansionPanel: {
32849
32868
  "onGroup:selected"?: ((val: {
32850
32869
  value: boolean;
32851
32870
  }) => any) | undefined;
32852
- }, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32871
+ }, {
32872
+ groupItem: GroupItemProvide;
32873
+ }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
32853
32874
  'group:selected': (val: {
32854
32875
  value: boolean;
32855
- }) => boolean;
32876
+ }) => true;
32856
32877
  }, string, {
32857
32878
  style: vue.StyleValue;
32858
32879
  disabled: boolean;
@@ -57728,6 +57749,7 @@ declare const VSpeedDial: {
57728
57749
  }>>;
57729
57750
  type VSpeedDial = InstanceType<typeof VSpeedDial>;
57730
57751
 
57752
+ type StepperItem = string | Record<string, any>;
57731
57753
  type StepperItemSlot = {
57732
57754
  canEdit: boolean;
57733
57755
  hasError: boolean;
@@ -58052,7 +58074,6 @@ declare const VStepperItem: {
58052
58074
  }>>;
58053
58075
  type VStepperItem = InstanceType<typeof VStepperItem>;
58054
58076
 
58055
- type StepperItem = string | Record<string, any>;
58056
58077
  type VStepperSlot = {
58057
58078
  prev: () => void;
58058
58079
  next: () => void;
@@ -47,6 +47,12 @@ export function useGroupItem(props, injectKey) {
47
47
  const isSelected = computed(() => {
48
48
  return group.isSelected(id);
49
49
  });
50
+ const isFirst = computed(() => {
51
+ return group.items.value[0].id === id;
52
+ });
53
+ const isLast = computed(() => {
54
+ return group.items.value[group.items.value.length - 1].id === id;
55
+ });
50
56
  const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass]);
51
57
  watch(isSelected, value => {
52
58
  vm.emit('group:selected', {
@@ -58,6 +64,8 @@ export function useGroupItem(props, injectKey) {
58
64
  return {
59
65
  id,
60
66
  isSelected,
67
+ isFirst,
68
+ isLast,
61
69
  toggle: () => group.select(id, !isSelected.value),
62
70
  select: value => group.select(id, value),
63
71
  selectedClass,
@@ -1 +1 @@
1
- {"version":3,"file":"group.mjs","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","onUpdated","provide","reactive","toRef","unref","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","getUid","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","emit","flush","toggle","select","useGroup","isUnmounted","items","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","useIndexAsValue","splice","push","forceMandatoryValue","findIndex","find","i","internalValue","slice","includes","step","offset","currentId","currentIndex","newIndex","newItem","state","prev","next","getItemIndex","ids","forEach","itemByIndex","values","itemIndex"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, provide, reactive, toRef, unref, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\nimport type { EventProp } from '@/util'\n\nexport interface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n useIndexAsValue?: boolean\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': EventProp<[unknown]> | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<Readonly<number[]>>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: ComputedRef<{\n id: number\n value: unknown\n disabled: boolean | undefined\n }[]>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': EventProp<[{ value: boolean }]> | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = getUid()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(props, 'value')\n const disabled = computed(() => !!(group.disabled.value || props.disabled))\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n }, { flush: 'sync' })\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (unref(unwrapped.value) == null) {\n unwrapped.value = index\n unwrapped.useIndexAsValue = true\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n onUpdated(() => {\n // #19655 update the items that use the index as the value.\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i\n }\n }\n })\n\n function select (id: number, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: number[] = []\n\n modelValue.forEach(value => {\n const item = items.find(item => deepEqual(value, item.value))\n const itemByIndex = items[value]\n\n if (item?.value != null) {\n ids.push(item.id)\n } else if (itemByIndex != null) {\n ids.push(itemByIndex.id)\n }\n })\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = []\n\n ids.forEach(id => {\n const itemIndex = items.findIndex(item => item.id === id)\n if (~itemIndex) {\n const item = items[itemIndex]\n values.push(item.value != null ? item.value : itemIndex)\n }\n })\n\n return values\n}\n"],"mappings":"AAAA;AAAA,SACSA,eAAe,8BAExB;AACA,SAASC,QAAQ,EAAEC,MAAM,EAAEC,eAAe,EAAEC,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5GC,WAAW,EAAEC,SAAS,EAAEC,uBAAuB,EAAEC,kBAAkB,EAAEC,MAAM,EAAEC,YAAY,EAAEC,WAAW,6BAE/G;AAkDA,OAAO,MAAMC,cAAc,GAAGF,YAAY,CAAC;EACzCG,UAAU,EAAE;IACVC,IAAI,EAAE,IAAI;IACVC,OAAO,EAAEC;EACX,CAAC;EACDC,QAAQ,EAAEC,OAAO;EACjBC,SAAS,EAAE,CAACD,OAAO,EAAEE,MAAM,CAAgC;EAC3DC,GAAG,EAAEC,MAAM;EACXC,aAAa,EAAEH,MAAM;EACrBI,QAAQ,EAAEN;AACZ,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,MAAMO,kBAAkB,GAAGf,YAAY,CAAC;EAC7CgB,KAAK,EAAE,IAAI;EACXF,QAAQ,EAAEN,OAAO;EACjBK,aAAa,EAAEH;AACjB,CAAC,EAAE,YAAY,CAAC;;AAMhB;;AAWA,OAAO,SAASO,YAAYA,CAC1BC,KAAqB,EACrBC,SAAqC,EAEZ;EAAA,IADzBC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAf,SAAA,GAAAe,SAAA,MAAG,IAAI;EAEf,MAAME,EAAE,GAAGzB,kBAAkB,CAAC,cAAc,CAAC;EAE7C,IAAI,CAACyB,EAAE,EAAE;IACP,MAAM,IAAIC,KAAK,CACb,kFACF,CAAC;EACH;EAEA,MAAMC,EAAE,GAAG1B,MAAM,CAAC,CAAC;EAEnBT,OAAO,CAACoC,MAAM,CAACC,GAAG,CAAE,GAAER,SAAS,CAACS,WAAY,KAAI,CAAC,EAAEH,EAAE,CAAC;EAEtD,MAAMI,KAAK,GAAG3C,MAAM,CAACiC,SAAS,EAAE,IAAI,CAAC;EAErC,IAAI,CAACU,KAAK,EAAE;IACV,IAAI,CAACT,QAAQ,EAAE,OAAOS,KAAK;IAE3B,MAAM,IAAIL,KAAK,CAAE,2DAA0DL,SAAS,CAACS,WAAY,EAAC,CAAC;EACrG;EAEA,MAAMZ,KAAK,GAAGxB,KAAK,CAAC0B,KAAK,EAAE,OAAO,CAAC;EACnC,MAAMJ,QAAQ,GAAG7B,QAAQ,CAAC,MAAM,CAAC,EAAE4C,KAAK,CAACf,QAAQ,CAACE,KAAK,IAAIE,KAAK,CAACJ,QAAQ,CAAC,CAAC;EAE3Ee,KAAK,CAACC,QAAQ,CAAC;IACbL,EAAE;IACFT,KAAK;IACLF;EACF,CAAC,EAAES,EAAE,CAAC;EAENpC,eAAe,CAAC,MAAM;IACpB0C,KAAK,CAACE,UAAU,CAACN,EAAE,CAAC;EACtB,CAAC,CAAC;EAEF,MAAMO,UAAU,GAAG/C,QAAQ,CAAC,MAAM;IAChC,OAAO4C,KAAK,CAACG,UAAU,CAACP,EAAE,CAAC;EAC7B,CAAC,CAAC;EAEF,MAAMZ,aAAa,GAAG5B,QAAQ,CAAC,MAAM+C,UAAU,CAAChB,KAAK,IAAI,CAACa,KAAK,CAAChB,aAAa,CAACG,KAAK,EAAEE,KAAK,CAACL,aAAa,CAAC,CAAC;EAE1GnB,KAAK,CAACsC,UAAU,EAAEhB,KAAK,IAAI;IACzBO,EAAE,CAACU,IAAI,CAAC,gBAAgB,EAAE;MAAEjB;IAAM,CAAC,CAAC;EACtC,CAAC,EAAE;IAAEkB,KAAK,EAAE;EAAO,CAAC,CAAC;EAErB,OAAO;IACLT,EAAE;IACFO,UAAU;IACVG,MAAM,EAAEA,CAAA,KAAMN,KAAK,CAACO,MAAM,CAACX,EAAE,EAAE,CAACO,UAAU,CAAChB,KAAK,CAAC;IACjDoB,MAAM,EAAGpB,KAAc,IAAKa,KAAK,CAACO,MAAM,CAACX,EAAE,EAAET,KAAK,CAAC;IACnDH,aAAa;IACbG,KAAK;IACLF,QAAQ;IACRe;EACF,CAAC;AACH;AAEA,OAAO,SAASQ,QAAQA,CACtBnB,KAAiB,EACjBC,SAAqC,EACrC;EACA,IAAImB,WAAW,GAAG,KAAK;EACvB,MAAMC,KAAK,GAAGhD,QAAQ,CAAc,EAAE,CAAC;EACvC,MAAMiD,QAAQ,GAAGxD,eAAe,CAC9BkC,KAAK,EACL,YAAY,EACZ,EAAE,EACFuB,CAAC,IAAI;IACH,IAAIA,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE;IAExB,OAAOC,MAAM,CAACH,KAAK,EAAEtC,WAAW,CAACwC,CAAC,CAAC,CAAC;EACtC,CAAC,EACDA,CAAC,IAAI;IACH,MAAME,GAAG,GAAGC,SAAS,CAACL,KAAK,EAAEE,CAAC,CAAC;IAE/B,OAAOvB,KAAK,CAACX,QAAQ,GAAGoC,GAAG,GAAGA,GAAG,CAAC,CAAC,CAAC;EACtC,CACF,CAAC;EAED,MAAME,OAAO,GAAG/C,kBAAkB,CAAC,UAAU,CAAC;EAE9C,SAASgC,QAAQA,CAAEgB,IAAe,EAAEvB,EAA6B,EAAE;IACjE;IACA,MAAMwB,SAAS,GAAGD,IAAuC;IAEzD,MAAME,GAAG,GAAGtB,MAAM,CAACC,GAAG,CAAE,GAAER,SAAS,CAACS,WAAY,KAAI,CAAC;IACrD,MAAMqB,QAAQ,GAAGpD,uBAAuB,CAACmD,GAAG,EAAEH,OAAO,EAAEK,KAAK,CAAC;IAC7D,MAAMC,KAAK,GAAGF,QAAQ,CAACG,OAAO,CAAC7B,EAAE,CAAC;IAElC,IAAI9B,KAAK,CAACsD,SAAS,CAAC/B,KAAK,CAAC,IAAI,IAAI,EAAE;MAClC+B,SAAS,CAAC/B,KAAK,GAAGmC,KAAK;MACvBJ,SAAS,CAACM,eAAe,GAAG,IAAI;IAClC;IAEA,IAAIF,KAAK,GAAG,CAAC,CAAC,EAAE;MACdZ,KAAK,CAACe,MAAM,CAACH,KAAK,EAAE,CAAC,EAAEJ,SAAS,CAAC;IACnC,CAAC,MAAM;MACLR,KAAK,CAACgB,IAAI,CAACR,SAAS,CAAC;IACvB;EACF;EAEA,SAAShB,UAAUA,CAAEN,EAAU,EAAE;IAC/B,IAAIa,WAAW,EAAE;;IAEjB;IACA;IACA;;IAEAkB,mBAAmB,CAAC,CAAC;IAErB,MAAML,KAAK,GAAGZ,KAAK,CAACkB,SAAS,CAACX,IAAI,IAAIA,IAAI,CAACrB,EAAE,KAAKA,EAAE,CAAC;IACrDc,KAAK,CAACe,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;EACxB;;EAEA;EACA,SAASK,mBAAmBA,CAAA,EAAI;IAC9B,MAAMV,IAAI,GAAGP,KAAK,CAACmB,IAAI,CAACZ,IAAI,IAAI,CAACA,IAAI,CAAChC,QAAQ,CAAC;IAC/C,IAAIgC,IAAI,IAAI5B,KAAK,CAACT,SAAS,KAAK,OAAO,IAAI,CAAC+B,QAAQ,CAACxB,KAAK,CAACM,MAAM,EAAE;MACjEkB,QAAQ,CAACxB,KAAK,GAAG,CAAC8B,IAAI,CAACrB,EAAE,CAAC;IAC5B;EACF;EAEArC,SAAS,CAAC,MAAM;IACdoE,mBAAmB,CAAC,CAAC;EACvB,CAAC,CAAC;EAEFrE,eAAe,CAAC,MAAM;IACpBmD,WAAW,GAAG,IAAI;EACpB,CAAC,CAAC;EAEFjD,SAAS,CAAC,MAAM;IACd;IACA,KAAK,IAAIsE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpB,KAAK,CAACjB,MAAM,EAAEqC,CAAC,EAAE,EAAE;MACrC,IAAIpB,KAAK,CAACoB,CAAC,CAAC,CAACN,eAAe,EAAE;QAC5Bd,KAAK,CAACoB,CAAC,CAAC,CAAC3C,KAAK,GAAG2C,CAAC;MACpB;IACF;EACF,CAAC,CAAC;EAEF,SAASvB,MAAMA,CAAEX,EAAU,EAAET,KAAe,EAAE;IAC5C,MAAM8B,IAAI,GAAGP,KAAK,CAACmB,IAAI,CAACZ,IAAI,IAAIA,IAAI,CAACrB,EAAE,KAAKA,EAAE,CAAC;IAC/C,IAAIT,KAAK,IAAI8B,IAAI,EAAEhC,QAAQ,EAAE;IAE7B,IAAII,KAAK,CAACX,QAAQ,EAAE;MAClB,MAAMqD,aAAa,GAAGpB,QAAQ,CAACxB,KAAK,CAAC6C,KAAK,CAAC,CAAC;MAC5C,MAAMV,KAAK,GAAGS,aAAa,CAACH,SAAS,CAAChB,CAAC,IAAIA,CAAC,KAAKhB,EAAE,CAAC;MACpD,MAAMO,UAAU,GAAG,CAACmB,KAAK;MACzBnC,KAAK,GAAGA,KAAK,IAAI,CAACgB,UAAU;;MAE5B;MACA;MACA;MACA,IACEA,UAAU,IACVd,KAAK,CAACT,SAAS,IACfmD,aAAa,CAACtC,MAAM,IAAI,CAAC,EACzB;;MAEF;MACA;MACA,IACE,CAACU,UAAU,IACXd,KAAK,CAACP,GAAG,IAAI,IAAI,IACjBiD,aAAa,CAACtC,MAAM,GAAG,CAAC,GAAGJ,KAAK,CAACP,GAAG,EACpC;MAEF,IAAIwC,KAAK,GAAG,CAAC,IAAInC,KAAK,EAAE4C,aAAa,CAACL,IAAI,CAAC9B,EAAE,CAAC,MACzC,IAAI0B,KAAK,IAAI,CAAC,IAAI,CAACnC,KAAK,EAAE4C,aAAa,CAACN,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;MAE7DX,QAAQ,CAACxB,KAAK,GAAG4C,aAAa;IAChC,CAAC,MAAM;MACL,MAAM5B,UAAU,GAAGQ,QAAQ,CAACxB,KAAK,CAAC8C,QAAQ,CAACrC,EAAE,CAAC;MAC9C,IAAIP,KAAK,CAACT,SAAS,IAAIuB,UAAU,EAAE;MAEnCQ,QAAQ,CAACxB,KAAK,GAAIA,KAAK,IAAI,CAACgB,UAAU,GAAI,CAACP,EAAE,CAAC,GAAG,EAAE;IACrD;EACF;EAEA,SAASsC,IAAIA,CAAEC,MAAc,EAAE;IAC7B;IACA,IAAI9C,KAAK,CAACX,QAAQ,EAAEZ,WAAW,CAAC,yDAAyD,CAAC;IAE1F,IAAI,CAAC6C,QAAQ,CAACxB,KAAK,CAACM,MAAM,EAAE;MAC1B,MAAMwB,IAAI,GAAGP,KAAK,CAACmB,IAAI,CAACZ,IAAI,IAAI,CAACA,IAAI,CAAChC,QAAQ,CAAC;MAC/CgC,IAAI,KAAKN,QAAQ,CAACxB,KAAK,GAAG,CAAC8B,IAAI,CAACrB,EAAE,CAAC,CAAC;IACtC,CAAC,MAAM;MACL,MAAMwC,SAAS,GAAGzB,QAAQ,CAACxB,KAAK,CAAC,CAAC,CAAC;MACnC,MAAMkD,YAAY,GAAG3B,KAAK,CAACkB,SAAS,CAACE,CAAC,IAAIA,CAAC,CAAClC,EAAE,KAAKwC,SAAS,CAAC;MAE7D,IAAIE,QAAQ,GAAG,CAACD,YAAY,GAAGF,MAAM,IAAIzB,KAAK,CAACjB,MAAM;MACrD,IAAI8C,OAAO,GAAG7B,KAAK,CAAC4B,QAAQ,CAAC;MAE7B,OAAOC,OAAO,CAACtD,QAAQ,IAAIqD,QAAQ,KAAKD,YAAY,EAAE;QACpDC,QAAQ,GAAG,CAACA,QAAQ,GAAGH,MAAM,IAAIzB,KAAK,CAACjB,MAAM;QAC7C8C,OAAO,GAAG7B,KAAK,CAAC4B,QAAQ,CAAC;MAC3B;MAEA,IAAIC,OAAO,CAACtD,QAAQ,EAAE;MAEtB0B,QAAQ,CAACxB,KAAK,GAAG,CAACuB,KAAK,CAAC4B,QAAQ,CAAC,CAAC1C,EAAE,CAAC;IACvC;EACF;EAEA,MAAM4C,KAAmB,GAAG;IAC1BvC,QAAQ;IACRC,UAAU;IACVS,QAAQ;IACRJ,MAAM;IACNtB,QAAQ,EAAEtB,KAAK,CAAC0B,KAAK,EAAE,UAAU,CAAC;IAClCoD,IAAI,EAAEA,CAAA,KAAMP,IAAI,CAACxB,KAAK,CAACjB,MAAM,GAAG,CAAC,CAAC;IAClCiD,IAAI,EAAEA,CAAA,KAAMR,IAAI,CAAC,CAAC,CAAC;IACnB/B,UAAU,EAAGP,EAAU,IAAKe,QAAQ,CAACxB,KAAK,CAAC8C,QAAQ,CAACrC,EAAE,CAAC;IACvDZ,aAAa,EAAE5B,QAAQ,CAAC,MAAMiC,KAAK,CAACL,aAAa,CAAC;IAClD0B,KAAK,EAAEtD,QAAQ,CAAC,MAAMsD,KAAK,CAAC;IAC5BiC,YAAY,EAAGxD,KAAc,IAAKwD,YAAY,CAACjC,KAAK,EAAEvB,KAAK;EAC7D,CAAC;EAED1B,OAAO,CAAC6B,SAAS,EAAEkD,KAAK,CAAC;EAEzB,OAAOA,KAAK;AACd;AAEA,SAASG,YAAYA,CAAEjC,KAA6B,EAAEvB,KAAc,EAAE;EACpE,MAAMyD,GAAG,GAAG/B,MAAM,CAACH,KAAK,EAAE,CAACvB,KAAK,CAAC,CAAC;EAElC,IAAI,CAACyD,GAAG,CAACnD,MAAM,EAAE,OAAO,CAAC,CAAC;EAE1B,OAAOiB,KAAK,CAACkB,SAAS,CAACX,IAAI,IAAIA,IAAI,CAACrB,EAAE,KAAKgD,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD;AAEA,SAAS/B,MAAMA,CAAEH,KAA6B,EAAEpC,UAAiB,EAAE;EACjE,MAAMsE,GAAa,GAAG,EAAE;EAExBtE,UAAU,CAACuE,OAAO,CAAC1D,KAAK,IAAI;IAC1B,MAAM8B,IAAI,GAAGP,KAAK,CAACmB,IAAI,CAACZ,IAAI,IAAIlD,SAAS,CAACoB,KAAK,EAAE8B,IAAI,CAAC9B,KAAK,CAAC,CAAC;IAC7D,MAAM2D,WAAW,GAAGpC,KAAK,CAACvB,KAAK,CAAC;IAEhC,IAAI8B,IAAI,EAAE9B,KAAK,IAAI,IAAI,EAAE;MACvByD,GAAG,CAAClB,IAAI,CAACT,IAAI,CAACrB,EAAE,CAAC;IACnB,CAAC,MAAM,IAAIkD,WAAW,IAAI,IAAI,EAAE;MAC9BF,GAAG,CAAClB,IAAI,CAACoB,WAAW,CAAClD,EAAE,CAAC;IAC1B;EACF,CAAC,CAAC;EAEF,OAAOgD,GAAG;AACZ;AAEA,SAAS7B,SAASA,CAAEL,KAA6B,EAAEkC,GAAU,EAAE;EAC7D,MAAMG,MAAiB,GAAG,EAAE;EAE5BH,GAAG,CAACC,OAAO,CAACjD,EAAE,IAAI;IAChB,MAAMoD,SAAS,GAAGtC,KAAK,CAACkB,SAAS,CAACX,IAAI,IAAIA,IAAI,CAACrB,EAAE,KAAKA,EAAE,CAAC;IACzD,IAAI,CAACoD,SAAS,EAAE;MACd,MAAM/B,IAAI,GAAGP,KAAK,CAACsC,SAAS,CAAC;MAC7BD,MAAM,CAACrB,IAAI,CAACT,IAAI,CAAC9B,KAAK,IAAI,IAAI,GAAG8B,IAAI,CAAC9B,KAAK,GAAG6D,SAAS,CAAC;IAC1D;EACF,CAAC,CAAC;EAEF,OAAOD,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"file":"group.mjs","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","onUpdated","provide","reactive","toRef","unref","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","getUid","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","arguments","length","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","isFirst","items","isLast","emit","flush","toggle","select","useGroup","isUnmounted","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","useIndexAsValue","splice","push","forceMandatoryValue","findIndex","find","i","internalValue","slice","includes","step","offset","currentId","currentIndex","newIndex","newItem","state","prev","next","getItemIndex","ids","forEach","itemByIndex","values","itemIndex"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, provide, reactive, toRef, unref, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\nimport type { EventProp } from '@/util'\n\nexport interface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n useIndexAsValue?: boolean\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': EventProp<[unknown]> | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<Readonly<number[]>>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: ComputedRef<{\n id: number\n value: unknown\n disabled: boolean | undefined\n }[]>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n isFirst: Ref<boolean>\n isLast: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': EventProp<[{ value: boolean }]> | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = getUid()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(props, 'value')\n const disabled = computed(() => !!(group.disabled.value || props.disabled))\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n const isFirst = computed(() => {\n return group.items.value[0].id === id\n })\n const isLast = computed(() => {\n return group.items.value[group.items.value.length - 1].id === id\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n }, { flush: 'sync' })\n\n return {\n id,\n isSelected,\n isFirst,\n isLast,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (unref(unwrapped.value) == null) {\n unwrapped.value = index\n unwrapped.useIndexAsValue = true\n }\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n onUpdated(() => {\n // #19655 update the items that use the index as the value.\n for (let i = 0; i < items.length; i++) {\n if (items[i].useIndexAsValue) {\n items[i].value = i\n }\n }\n })\n\n function select (id: number, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids: number[] = []\n\n modelValue.forEach(value => {\n const item = items.find(item => deepEqual(value, item.value))\n const itemByIndex = items[value]\n\n if (item?.value != null) {\n ids.push(item.id)\n } else if (itemByIndex != null) {\n ids.push(itemByIndex.id)\n }\n })\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values: unknown[] = []\n\n ids.forEach(id => {\n const itemIndex = items.findIndex(item => item.id === id)\n if (~itemIndex) {\n const item = items[itemIndex]\n values.push(item.value != null ? item.value : itemIndex)\n }\n })\n\n return values\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.6.4-master.2024-05-10";
19
+ export const version = "3.6.5-master.2024-05-12";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.mjs";
package/lib/framework.mjs CHANGED
@@ -97,7 +97,7 @@ export function createVuetify() {
97
97
  goTo
98
98
  };
99
99
  }
100
- export const version = "3.6.4-master.2024-05-10";
100
+ export const version = "3.6.5-master.2024-05-12";
101
101
  createVuetify.version = version;
102
102
 
103
103
  // Vue's inject() can only be used in setup
package/lib/index.d.mts CHANGED
@@ -493,49 +493,42 @@ declare module '@vue/runtime-core' {
493
493
  }
494
494
 
495
495
  export interface GlobalComponents {
496
+ VApp: typeof import('vuetify/components')['VApp']
497
+ VAlert: typeof import('vuetify/components')['VAlert']
498
+ VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
499
+ VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
496
500
  VAppBar: typeof import('vuetify/components')['VAppBar']
497
501
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
498
502
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
499
- VAlert: typeof import('vuetify/components')['VAlert']
500
- VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
501
503
  VAvatar: typeof import('vuetify/components')['VAvatar']
502
- VApp: typeof import('vuetify/components')['VApp']
503
- VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
504
504
  VBadge: typeof import('vuetify/components')['VBadge']
505
+ VBanner: typeof import('vuetify/components')['VBanner']
506
+ VBannerActions: typeof import('vuetify/components')['VBannerActions']
507
+ VBannerText: typeof import('vuetify/components')['VBannerText']
508
+ VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
505
509
  VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
506
510
  VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
507
511
  VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
508
512
  VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
509
- VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
510
- VBanner: typeof import('vuetify/components')['VBanner']
511
- VBannerActions: typeof import('vuetify/components')['VBannerActions']
512
- VBannerText: typeof import('vuetify/components')['VBannerText']
513
- VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
514
513
  VBtn: typeof import('vuetify/components')['VBtn']
514
+ VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
515
+ VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
516
+ VCarousel: typeof import('vuetify/components')['VCarousel']
517
+ VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
515
518
  VCard: typeof import('vuetify/components')['VCard']
516
519
  VCardActions: typeof import('vuetify/components')['VCardActions']
517
520
  VCardItem: typeof import('vuetify/components')['VCardItem']
518
521
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
519
522
  VCardText: typeof import('vuetify/components')['VCardText']
520
523
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
521
- VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
522
- VCarousel: typeof import('vuetify/components')['VCarousel']
523
- VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
524
+ VCode: typeof import('vuetify/components')['VCode']
524
525
  VCheckbox: typeof import('vuetify/components')['VCheckbox']
525
526
  VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
526
- VChipGroup: typeof import('vuetify/components')['VChipGroup']
527
527
  VChip: typeof import('vuetify/components')['VChip']
528
- VCode: typeof import('vuetify/components')['VCode']
529
528
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
529
+ VChipGroup: typeof import('vuetify/components')['VChipGroup']
530
530
  VCounter: typeof import('vuetify/components')['VCounter']
531
- VDatePicker: typeof import('vuetify/components')['VDatePicker']
532
- VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
533
- VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
534
- VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
535
- VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
536
- VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
537
531
  VCombobox: typeof import('vuetify/components')['VCombobox']
538
- VDialog: typeof import('vuetify/components')['VDialog']
539
532
  VDataTable: typeof import('vuetify/components')['VDataTable']
540
533
  VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
541
534
  VDataTableFooter: typeof import('vuetify/components')['VDataTableFooter']
@@ -543,7 +536,14 @@ declare module '@vue/runtime-core' {
543
536
  VDataTableRow: typeof import('vuetify/components')['VDataTableRow']
544
537
  VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
545
538
  VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
539
+ VDatePicker: typeof import('vuetify/components')['VDatePicker']
540
+ VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
541
+ VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
542
+ VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
543
+ VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
544
+ VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
546
545
  VDivider: typeof import('vuetify/components')['VDivider']
546
+ VDialog: typeof import('vuetify/components')['VDialog']
547
547
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
548
548
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
549
549
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
@@ -552,17 +552,16 @@ declare module '@vue/runtime-core' {
552
552
  VField: typeof import('vuetify/components')['VField']
553
553
  VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
554
554
  VFab: typeof import('vuetify/components')['VFab']
555
- VFooter: typeof import('vuetify/components')['VFooter']
556
555
  VFileInput: typeof import('vuetify/components')['VFileInput']
557
- VImg: typeof import('vuetify/components')['VImg']
556
+ VFooter: typeof import('vuetify/components')['VFooter']
558
557
  VIcon: typeof import('vuetify/components')['VIcon']
559
558
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
560
559
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
561
560
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
562
561
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
563
- VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
564
562
  VInput: typeof import('vuetify/components')['VInput']
565
- VLabel: typeof import('vuetify/components')['VLabel']
563
+ VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
564
+ VImg: typeof import('vuetify/components')['VImg']
566
565
  VItemGroup: typeof import('vuetify/components')['VItemGroup']
567
566
  VItem: typeof import('vuetify/components')['VItem']
568
567
  VKbd: typeof import('vuetify/components')['VKbd']
@@ -575,43 +574,44 @@ declare module '@vue/runtime-core' {
575
574
  VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
576
575
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
577
576
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
577
+ VLabel: typeof import('vuetify/components')['VLabel']
578
578
  VMenu: typeof import('vuetify/components')['VMenu']
579
- VMain: typeof import('vuetify/components')['VMain']
580
- VMessages: typeof import('vuetify/components')['VMessages']
581
579
  VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
580
+ VMessages: typeof import('vuetify/components')['VMessages']
581
+ VMain: typeof import('vuetify/components')['VMain']
582
+ VOverlay: typeof import('vuetify/components')['VOverlay']
582
583
  VOtpInput: typeof import('vuetify/components')['VOtpInput']
583
584
  VPagination: typeof import('vuetify/components')['VPagination']
584
- VOverlay: typeof import('vuetify/components')['VOverlay']
585
585
  VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
586
586
  VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
587
- VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
588
587
  VRating: typeof import('vuetify/components')['VRating']
589
588
  VSelect: typeof import('vuetify/components')['VSelect']
590
- VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
589
+ VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
591
590
  VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
592
- VSheet: typeof import('vuetify/components')['VSheet']
593
- VSnackbar: typeof import('vuetify/components')['VSnackbar']
594
591
  VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
595
592
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
596
593
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
594
+ VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
595
+ VSheet: typeof import('vuetify/components')['VSheet']
596
+ VSnackbar: typeof import('vuetify/components')['VSnackbar']
597
+ VSlider: typeof import('vuetify/components')['VSlider']
597
598
  VStepper: typeof import('vuetify/components')['VStepper']
598
599
  VStepperActions: typeof import('vuetify/components')['VStepperActions']
599
600
  VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
600
601
  VStepperItem: typeof import('vuetify/components')['VStepperItem']
601
602
  VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
602
603
  VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
603
- VSlider: typeof import('vuetify/components')['VSlider']
604
604
  VSwitch: typeof import('vuetify/components')['VSwitch']
605
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
606
+ VTable: typeof import('vuetify/components')['VTable']
605
607
  VTab: typeof import('vuetify/components')['VTab']
606
608
  VTabs: typeof import('vuetify/components')['VTabs']
607
609
  VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
608
610
  VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
609
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
610
- VTable: typeof import('vuetify/components')['VTable']
611
- VTextarea: typeof import('vuetify/components')['VTextarea']
612
- VTextField: typeof import('vuetify/components')['VTextField']
613
611
  VTimeline: typeof import('vuetify/components')['VTimeline']
614
612
  VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
613
+ VTextarea: typeof import('vuetify/components')['VTextarea']
614
+ VTextField: typeof import('vuetify/components')['VTextField']
615
615
  VToolbar: typeof import('vuetify/components')['VToolbar']
616
616
  VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
617
617
  VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
@@ -621,26 +621,26 @@ declare module '@vue/runtime-core' {
621
621
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
622
622
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
623
623
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
624
- VForm: typeof import('vuetify/components')['VForm']
625
- VHover: typeof import('vuetify/components')['VHover']
626
624
  VContainer: typeof import('vuetify/components')['VContainer']
627
625
  VCol: typeof import('vuetify/components')['VCol']
628
626
  VRow: typeof import('vuetify/components')['VRow']
629
627
  VSpacer: typeof import('vuetify/components')['VSpacer']
628
+ VForm: typeof import('vuetify/components')['VForm']
629
+ VHover: typeof import('vuetify/components')['VHover']
630
630
  VLayout: typeof import('vuetify/components')['VLayout']
631
631
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
632
632
  VLazy: typeof import('vuetify/components')['VLazy']
633
633
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
634
634
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
635
- VParallax: typeof import('vuetify/components')['VParallax']
636
635
  VRadio: typeof import('vuetify/components')['VRadio']
636
+ VParallax: typeof import('vuetify/components')['VParallax']
637
637
  VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
638
638
  VResponsive: typeof import('vuetify/components')['VResponsive']
639
639
  VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
640
640
  VSparkline: typeof import('vuetify/components')['VSparkline']
641
641
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
642
- VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
643
642
  VValidation: typeof import('vuetify/components')['VValidation']
643
+ VVirtualScroll: typeof import('vuetify/components')['VVirtualScroll']
644
644
  VFabTransition: typeof import('vuetify/components')['VFabTransition']
645
645
  VDialogBottomTransition: typeof import('vuetify/components')['VDialogBottomTransition']
646
646
  VDialogTopTransition: typeof import('vuetify/components')['VDialogTopTransition']
@@ -663,17 +663,20 @@ declare module '@vue/runtime-core' {
663
663
  VCalendarInterval: typeof import('vuetify/labs/components')['VCalendarInterval']
664
664
  VCalendarIntervalEvent: typeof import('vuetify/labs/components')['VCalendarIntervalEvent']
665
665
  VCalendarMonthDay: typeof import('vuetify/labs/components')['VCalendarMonthDay']
666
+ VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
666
667
  VPicker: typeof import('vuetify/labs/components')['VPicker']
667
668
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
668
- VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
669
+ VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
670
+ VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
671
+ VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
669
672
  VTimePicker: typeof import('vuetify/labs/components')['VTimePicker']
670
673
  VTimePickerClock: typeof import('vuetify/labs/components')['VTimePickerClock']
671
674
  VTimePickerControls: typeof import('vuetify/labs/components')['VTimePickerControls']
672
675
  VTreeview: typeof import('vuetify/labs/components')['VTreeview']
673
676
  VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
674
677
  VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
675
- VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
676
678
  VDateInput: typeof import('vuetify/labs/components')['VDateInput']
679
+ VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
677
680
  VSnackbarQueue: typeof import('vuetify/labs/components')['VSnackbarQueue']
678
681
  }
679
682
  }
@@ -0,0 +1,106 @@
1
+ import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue";
2
+ // Components
3
+ import { VStepperVerticalItem } from "./VStepperVerticalItem.mjs";
4
+ import { makeVExpansionPanelsProps, VExpansionPanels } from "../../components/VExpansionPanel/VExpansionPanels.mjs";
5
+ import { makeStepperProps } from "../../components/VStepper/VStepper.mjs"; // Composables
6
+ import { provideDefaults } from "../../composables/defaults.mjs";
7
+ import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
8
+ import { computed, ref, toRefs } from 'vue';
9
+ import { genericComponent, getPropertyFromItem, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
10
+ export const makeVStepperVerticalProps = propsFactory({
11
+ prevText: {
12
+ type: String,
13
+ default: '$vuetify.stepper.prev'
14
+ },
15
+ nextText: {
16
+ type: String,
17
+ default: '$vuetify.stepper.next'
18
+ },
19
+ ...makeStepperProps(),
20
+ ...omit(makeVExpansionPanelsProps({
21
+ mandatory: 'force',
22
+ variant: 'accordion'
23
+ }), ['static'])
24
+ }, 'VStepperVertical');
25
+ export const VStepperVertical = genericComponent()({
26
+ name: 'VStepperVertical',
27
+ props: makeVStepperVerticalProps(),
28
+ emits: {
29
+ 'update:modelValue': val => true
30
+ },
31
+ setup(props, _ref) {
32
+ let {
33
+ slots
34
+ } = _ref;
35
+ const vExpansionPanelsRef = ref();
36
+ const {
37
+ color,
38
+ editable,
39
+ prevText,
40
+ nextText,
41
+ hideActions
42
+ } = toRefs(props);
43
+ const model = useProxiedModel(props, 'modelValue');
44
+ const items = computed(() => props.items.map((item, index) => {
45
+ const title = getPropertyFromItem(item, props.itemTitle, item);
46
+ const value = getPropertyFromItem(item, props.itemValue, index + 1);
47
+ return {
48
+ title,
49
+ value,
50
+ raw: item
51
+ };
52
+ }));
53
+ provideDefaults({
54
+ VStepperVerticalItem: {
55
+ color,
56
+ editable,
57
+ prevText,
58
+ nextText,
59
+ hideActions,
60
+ static: true
61
+ },
62
+ VStepperActions: {
63
+ color
64
+ }
65
+ });
66
+ useRender(() => {
67
+ const expansionPanelProps = VExpansionPanels.filterProps(props);
68
+ return _createVNode(VExpansionPanels, _mergeProps(expansionPanelProps, {
69
+ "modelValue": model.value,
70
+ "onUpdate:modelValue": $event => model.value = $event,
71
+ "ref": vExpansionPanelsRef,
72
+ "class": ['v-stepper', {
73
+ 'v-stepper--alt-labels': props.altLabels,
74
+ 'v-stepper--flat': props.flat,
75
+ 'v-stepper--non-linear': props.nonLinear,
76
+ 'v-stepper--mobile': props.mobile
77
+ }, props.class],
78
+ "style": props.style
79
+ }), {
80
+ ...slots,
81
+ default: _ref2 => {
82
+ let {
83
+ prev,
84
+ next
85
+ } = _ref2;
86
+ return _createVNode(_Fragment, null, [items.value.map(_ref3 => {
87
+ let {
88
+ raw,
89
+ ...item
90
+ } = _ref3;
91
+ return _createVNode(VStepperVerticalItem, item, {
92
+ ...slots,
93
+ default: slots[`item.${item.value}`]
94
+ });
95
+ }), slots.default?.({
96
+ prev,
97
+ next,
98
+ step: model.value
99
+ })]);
100
+ }
101
+ });
102
+ });
103
+ return {};
104
+ }
105
+ });
106
+ //# sourceMappingURL=VStepperVertical.mjs.map