vuetify 3.4.2 → 3.4.3

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/json/attributes.json +2187 -2187
  2. package/dist/json/importMap.json +114 -114
  3. package/dist/json/web-types.json +3977 -3962
  4. package/dist/vuetify-labs.css +1645 -1636
  5. package/dist/vuetify-labs.d.ts +298 -151
  6. package/dist/vuetify-labs.esm.js +710 -696
  7. package/dist/vuetify-labs.esm.js.map +1 -1
  8. package/dist/vuetify-labs.js +709 -695
  9. package/dist/vuetify-labs.min.css +2 -2
  10. package/dist/vuetify.css +915 -906
  11. package/dist/vuetify.d.ts +332 -185
  12. package/dist/vuetify.esm.js +710 -696
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +709 -695
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +222 -221
  18. package/dist/vuetify.min.js.map +1 -1
  19. package/lib/blueprints/index.d.mts +48 -48
  20. package/lib/blueprints/md1.d.mts +48 -48
  21. package/lib/blueprints/md2.d.mts +48 -48
  22. package/lib/blueprints/md3.d.mts +48 -48
  23. package/lib/components/VBtn/VBtn.css +3 -0
  24. package/lib/components/VBtn/VBtn.sass +4 -0
  25. package/lib/components/VBtn/_variables.scss +1 -0
  26. package/lib/components/VCarousel/VCarousel.css +2 -1
  27. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  28. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  29. package/lib/components/VCarousel/VCarousel.sass +3 -1
  30. package/lib/components/VCarousel/_variables.scss +6 -0
  31. package/lib/components/VCheckbox/index.d.mts +32 -20
  32. package/lib/components/VDataTable/VDataTable.mjs +2 -1
  33. package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
  34. package/lib/components/VDataTable/VDataTableFooter.css +1 -1
  35. package/lib/components/VDataTable/VDataTableFooter.mjs +18 -31
  36. package/lib/components/VDataTable/VDataTableFooter.mjs.map +1 -1
  37. package/lib/components/VDataTable/VDataTableHeaders.mjs +1 -1
  38. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  39. package/lib/components/VDataTable/_variables.scss +1 -1
  40. package/lib/components/VDataTable/index.d.mts +3 -3
  41. package/lib/components/VDatePicker/VDatePicker.mjs +3 -3
  42. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  43. package/lib/components/VDatePicker/VDatePickerMonth.mjs +18 -15
  44. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  45. package/lib/components/VOtpInput/VOtpInput.mjs +1 -0
  46. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  47. package/lib/components/VPagination/VPagination.mjs +2 -2
  48. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  49. package/lib/components/VRadio/index.d.mts +16 -10
  50. package/lib/components/VRadioGroup/index.d.mts +16 -10
  51. package/lib/components/VSelect/VSelect.mjs +3 -1
  52. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  53. package/lib/components/VSelectionControl/index.d.mts +16 -10
  54. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  55. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  56. package/lib/components/VSelectionControlGroup/index.d.mts +16 -10
  57. package/lib/components/VSlideGroup/VSlideGroup.mjs +2 -2
  58. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  59. package/lib/components/VSwitch/index.d.mts +16 -10
  60. package/lib/components/VTable/VTable.css +6 -1
  61. package/lib/components/VTable/VTable.sass +6 -1
  62. package/lib/components/VTable/_variables.scss +2 -0
  63. package/lib/components/VTabs/VTab.mjs +4 -3
  64. package/lib/components/VTabs/VTab.mjs.map +1 -1
  65. package/lib/components/VTabs/index.d.mts +72 -0
  66. package/lib/components/index.d.mts +187 -73
  67. package/lib/composables/date/date.mjs +21 -13
  68. package/lib/composables/date/date.mjs.map +1 -1
  69. package/lib/composables/router.mjs +7 -2
  70. package/lib/composables/router.mjs.map +1 -1
  71. package/lib/entry-bundler.mjs +1 -1
  72. package/lib/framework.mjs +4 -3
  73. package/lib/framework.mjs.map +1 -1
  74. package/lib/index.d.mts +145 -112
  75. package/lib/locale/fr.mjs +1 -1
  76. package/lib/locale/fr.mjs.map +1 -1
  77. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.4.2
2
+ * Vuetify v3.4.3
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, withModifiers, toDisplayString, onBeforeUpdate, vModelText } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -4967,6 +4967,13 @@ function usePosition(props) {
4967
4967
  }
4968
4968
 
4969
4969
  // Utilities
4970
+
4971
+ // Types
4972
+
4973
+ function useRoute() {
4974
+ const vm = getCurrentInstance('useRoute');
4975
+ return computed(() => vm?.proxy?.$route);
4976
+ }
4970
4977
  function useRouter() {
4971
4978
  return getCurrentInstance('useRouter')?.proxy?.$router;
4972
4979
  }
@@ -4984,12 +4991,17 @@ function useLink(props, attrs) {
4984
4991
  };
4985
4992
  }
4986
4993
  const link = props.to ? RouterLink.useLink(props) : undefined;
4994
+ const route = useRoute();
4987
4995
  return {
4988
4996
  isLink,
4989
4997
  isClickable,
4990
4998
  route: link?.route,
4991
4999
  navigate: link?.navigate,
4992
- isActive: link && computed(() => props.exact ? link.isExactActive?.value : link.isActive?.value),
5000
+ isActive: link && computed(() => {
5001
+ if (!props.exact) return link.isActive?.value;
5002
+ if (!route.value) return link.isExactActive?.value;
5003
+ return link.isExactActive?.value && deepEqual(link.route.value.query, route.value.query);
5004
+ }),
4993
5005
  href: computed(() => props.to ? link?.route.value.href : props.href)
4994
5006
  };
4995
5007
  }
@@ -5806,7 +5818,10 @@ const makeSelectionControlGroupProps = propsFactory({
5806
5818
  default: null
5807
5819
  },
5808
5820
  name: String,
5809
- readonly: Boolean,
5821
+ readonly: {
5822
+ type: Boolean,
5823
+ default: null
5824
+ },
5810
5825
  modelValue: null,
5811
5826
  type: String,
5812
5827
  valueComparator: {
@@ -11445,7 +11460,9 @@ const VSelect = genericComponent()({
11445
11460
  item,
11446
11461
  index,
11447
11462
  props: itemProps
11448
- }) ?? createVNode(VListItem, itemProps, {
11463
+ }) ?? createVNode(VListItem, mergeProps(itemProps, {
11464
+ "role": "option"
11465
+ }), {
11449
11466
  prepend: _ref3 => {
11450
11467
  let {
11451
11468
  isSelected
@@ -13407,7 +13424,7 @@ const VCarousel = genericComponent()({
13407
13424
  const props = {
13408
13425
  id: `carousel-item-${item.id}`,
13409
13426
  'aria-label': t('$vuetify.carousel.ariaLabel.delimiter', index + 1, group.items.value.length),
13410
- class: [group.isSelected(item.id) && 'v-btn--active'],
13427
+ class: ['v-carousel__controls__item', group.isSelected(item.id) && 'v-btn--active'],
13411
13428
  onClick: () => group.select(item.id, true)
13412
13429
  };
13413
13430
  return slots.item ? slots.item({
@@ -16802,13 +16819,11 @@ class VuetifyDateAdapter {
16802
16819
  }
16803
16820
  }
16804
16821
 
16805
- // Utilities
16806
-
16807
- // Types
16808
-
16822
+ // Composables
16823
+ const DateOptionsSymbol = Symbol.for('vuetify:date-options');
16809
16824
  const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
16810
16825
  function createDate(options, locale) {
16811
- const date = mergeDeep({
16826
+ const _options = mergeDeep({
16812
16827
  adapter: VuetifyDateAdapter,
16813
16828
  locale: {
16814
16829
  af: 'af-ZA',
@@ -16854,22 +16869,28 @@ function createDate(options, locale) {
16854
16869
  zhHant: 'zh-TW'
16855
16870
  }
16856
16871
  }, options);
16857
- const instance = reactive(typeof date.adapter === 'function'
16872
+ return {
16873
+ options: _options,
16874
+ instance: createInstance(_options, locale)
16875
+ };
16876
+ }
16877
+ function createInstance(options, locale) {
16878
+ const instance = reactive(typeof options.adapter === 'function'
16858
16879
  // eslint-disable-next-line new-cap
16859
- ? new date.adapter({
16860
- locale: date.locale?.[locale.current.value] ?? locale.current.value,
16861
- formats: date.formats
16862
- }) : date.adapter);
16880
+ ? new options.adapter({
16881
+ locale: options.locale[locale.current.value] ?? locale.current.value,
16882
+ formats: options.formats
16883
+ }) : options.adapter);
16863
16884
  watch(locale.current, value => {
16864
- const newLocale = date.locale ? date.locale[value] : value;
16865
- instance.locale = newLocale ?? instance.locale;
16885
+ instance.locale = options.locale[value] ?? value ?? instance.locale;
16866
16886
  });
16867
16887
  return instance;
16868
16888
  }
16869
16889
  function useDate() {
16870
- const instance = inject$1(DateAdapterSymbol);
16871
- if (!instance) throw new Error('[Vuetify] Could not find injected date adapter');
16872
- return instance;
16890
+ const options = inject$1(DateOptionsSymbol);
16891
+ if (!options) throw new Error('[Vuetify] Could not find injected date options');
16892
+ const locale = useLocale();
16893
+ return createInstance(options, locale);
16873
16894
  }
16874
16895
 
16875
16896
  // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
@@ -17210,152 +17231,473 @@ const VDataIterator = genericComponent()({
17210
17231
  }
17211
17232
  });
17212
17233
 
17234
+ // Utilities
17235
+
17213
17236
  // Types
17214
17237
 
17215
- const makeVDataTableFooterProps = propsFactory({
17238
+ function useRefs() {
17239
+ const refs = ref([]);
17240
+ onBeforeUpdate(() => refs.value = []);
17241
+ function updateRef(e, i) {
17242
+ refs.value[i] = e;
17243
+ }
17244
+ return {
17245
+ refs,
17246
+ updateRef
17247
+ };
17248
+ }
17249
+
17250
+ // Types
17251
+
17252
+ const makeVPaginationProps = propsFactory({
17253
+ activeColor: String,
17254
+ start: {
17255
+ type: [Number, String],
17256
+ default: 1
17257
+ },
17258
+ modelValue: {
17259
+ type: Number,
17260
+ default: props => props.start
17261
+ },
17262
+ disabled: Boolean,
17263
+ length: {
17264
+ type: [Number, String],
17265
+ default: 1,
17266
+ validator: val => val % 1 === 0
17267
+ },
17268
+ totalVisible: [Number, String],
17269
+ firstIcon: {
17270
+ type: IconValue,
17271
+ default: '$first'
17272
+ },
17216
17273
  prevIcon: {
17217
- type: String,
17274
+ type: IconValue,
17218
17275
  default: '$prev'
17219
17276
  },
17220
17277
  nextIcon: {
17221
- type: String,
17278
+ type: IconValue,
17222
17279
  default: '$next'
17223
17280
  },
17224
- firstIcon: {
17281
+ lastIcon: {
17282
+ type: IconValue,
17283
+ default: '$last'
17284
+ },
17285
+ ariaLabel: {
17225
17286
  type: String,
17226
- default: '$first'
17287
+ default: '$vuetify.pagination.ariaLabel.root'
17227
17288
  },
17228
- lastIcon: {
17289
+ pageAriaLabel: {
17229
17290
  type: String,
17230
- default: '$last'
17291
+ default: '$vuetify.pagination.ariaLabel.page'
17231
17292
  },
17232
- itemsPerPageText: {
17293
+ currentPageAriaLabel: {
17233
17294
  type: String,
17234
- default: '$vuetify.dataFooter.itemsPerPageText'
17295
+ default: '$vuetify.pagination.ariaLabel.currentPage'
17235
17296
  },
17236
- pageText: {
17297
+ firstAriaLabel: {
17237
17298
  type: String,
17238
- default: '$vuetify.dataFooter.pageText'
17299
+ default: '$vuetify.pagination.ariaLabel.first'
17239
17300
  },
17240
- firstPageLabel: {
17301
+ previousAriaLabel: {
17241
17302
  type: String,
17242
- default: '$vuetify.dataFooter.firstPage'
17303
+ default: '$vuetify.pagination.ariaLabel.previous'
17243
17304
  },
17244
- prevPageLabel: {
17305
+ nextAriaLabel: {
17245
17306
  type: String,
17246
- default: '$vuetify.dataFooter.prevPage'
17307
+ default: '$vuetify.pagination.ariaLabel.next'
17247
17308
  },
17248
- nextPageLabel: {
17309
+ lastAriaLabel: {
17249
17310
  type: String,
17250
- default: '$vuetify.dataFooter.nextPage'
17311
+ default: '$vuetify.pagination.ariaLabel.last'
17251
17312
  },
17252
- lastPageLabel: {
17313
+ ellipsis: {
17253
17314
  type: String,
17254
- default: '$vuetify.dataFooter.lastPage'
17315
+ default: '...'
17255
17316
  },
17256
- itemsPerPageOptions: {
17257
- type: Array,
17258
- default: () => [{
17259
- value: 10,
17260
- title: '10'
17261
- }, {
17262
- value: 25,
17263
- title: '25'
17264
- }, {
17265
- value: 50,
17266
- title: '50'
17267
- }, {
17268
- value: 100,
17269
- title: '100'
17270
- }, {
17271
- value: -1,
17272
- title: '$vuetify.dataFooter.itemsPerPageAll'
17273
- }]
17317
+ showFirstLastPage: Boolean,
17318
+ ...makeBorderProps(),
17319
+ ...makeComponentProps(),
17320
+ ...makeDensityProps(),
17321
+ ...makeElevationProps(),
17322
+ ...makeRoundedProps(),
17323
+ ...makeSizeProps(),
17324
+ ...makeTagProps({
17325
+ tag: 'nav'
17326
+ }),
17327
+ ...makeThemeProps(),
17328
+ ...makeVariantProps({
17329
+ variant: 'text'
17330
+ })
17331
+ }, 'VPagination');
17332
+ const VPagination = genericComponent()({
17333
+ name: 'VPagination',
17334
+ props: makeVPaginationProps(),
17335
+ emits: {
17336
+ 'update:modelValue': value => true,
17337
+ first: value => true,
17338
+ prev: value => true,
17339
+ next: value => true,
17340
+ last: value => true
17274
17341
  },
17275
- showCurrentPage: Boolean
17276
- }, 'VDataTableFooter');
17277
- const VDataTableFooter = genericComponent()({
17278
- name: 'VDataTableFooter',
17279
- props: makeVDataTableFooterProps(),
17280
17342
  setup(props, _ref) {
17281
17343
  let {
17282
- slots
17344
+ slots,
17345
+ emit
17283
17346
  } = _ref;
17347
+ const page = useProxiedModel(props, 'modelValue');
17284
17348
  const {
17285
- t
17349
+ t,
17350
+ n
17286
17351
  } = useLocale();
17287
17352
  const {
17288
- page,
17289
- pageCount,
17290
- startIndex,
17291
- stopIndex,
17292
- itemsLength,
17293
- itemsPerPage,
17294
- setItemsPerPage
17295
- } = usePagination();
17296
- const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => {
17297
- if (typeof option === 'number') {
17298
- return {
17299
- value: option,
17300
- title: option === -1 ? t('$vuetify.dataFooter.itemsPerPageAll') : String(option)
17301
- };
17353
+ isRtl
17354
+ } = useRtl();
17355
+ const {
17356
+ themeClasses
17357
+ } = provideTheme(props);
17358
+ const {
17359
+ width
17360
+ } = useDisplay();
17361
+ const maxButtons = shallowRef(-1);
17362
+ provideDefaults(undefined, {
17363
+ scoped: true
17364
+ });
17365
+ const {
17366
+ resizeRef
17367
+ } = useResizeObserver(entries => {
17368
+ if (!entries.length) return;
17369
+ const {
17370
+ target,
17371
+ contentRect
17372
+ } = entries[0];
17373
+ const firstItem = target.querySelector('.v-pagination__list > *');
17374
+ if (!firstItem) return;
17375
+ const totalWidth = contentRect.width;
17376
+ const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;
17377
+ maxButtons.value = getMax(totalWidth, itemWidth);
17378
+ });
17379
+ const length = computed(() => parseInt(props.length, 10));
17380
+ const start = computed(() => parseInt(props.start, 10));
17381
+ const totalVisible = computed(() => {
17382
+ if (props.totalVisible != null) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;
17383
+ return getMax(width.value, 58);
17384
+ });
17385
+ function getMax(totalWidth, itemWidth) {
17386
+ const minButtons = props.showFirstLastPage ? 5 : 3;
17387
+ return Math.max(0, Math.floor(
17388
+ // Round to two decimal places to avoid floating point errors
17389
+ +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
17390
+ }
17391
+ const range = computed(() => {
17392
+ if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
17393
+ if (totalVisible.value <= 0) return [];else if (totalVisible.value === 1) return [page.value];
17394
+ if (length.value <= totalVisible.value) {
17395
+ return createRange(length.value, start.value);
17302
17396
  }
17303
- return {
17304
- ...option,
17305
- title: t(option.title)
17306
- };
17307
- }));
17308
- return () => createVNode("div", {
17309
- "class": "v-data-table-footer"
17310
- }, [slots.prepend?.(), createVNode("div", {
17311
- "class": "v-data-table-footer__items-per-page"
17312
- }, [createVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
17313
- "items": itemsPerPageOptions.value,
17314
- "modelValue": itemsPerPage.value,
17315
- "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
17316
- "density": "compact",
17317
- "variant": "outlined",
17318
- "hide-details": true
17319
- }, null)]), createVNode("div", {
17320
- "class": "v-data-table-footer__info"
17321
- }, [createVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), createVNode("div", {
17322
- "class": "v-data-table-footer__pagination"
17323
- }, [createVNode(VBtn, {
17324
- "icon": props.firstIcon,
17325
- "variant": "plain",
17326
- "onClick": () => page.value = 1,
17327
- "disabled": page.value === 1,
17328
- "aria-label": t(props.firstPageLabel)
17329
- }, null), createVNode(VBtn, {
17330
- "icon": props.prevIcon,
17331
- "variant": "plain",
17332
- "onClick": () => page.value = Math.max(1, page.value - 1),
17333
- "disabled": page.value === 1,
17334
- "aria-label": t(props.prevPageLabel)
17335
- }, null), props.showCurrentPage && createVNode("span", {
17336
- "key": "page",
17337
- "class": "v-data-table-footer__page"
17338
- }, [page.value]), createVNode(VBtn, {
17339
- "icon": props.nextIcon,
17340
- "variant": "plain",
17341
- "onClick": () => page.value = Math.min(pageCount.value, page.value + 1),
17342
- "disabled": page.value === pageCount.value,
17343
- "aria-label": t(props.nextPageLabel)
17344
- }, null), createVNode(VBtn, {
17345
- "icon": props.lastIcon,
17346
- "variant": "plain",
17347
- "onClick": () => page.value = pageCount.value,
17348
- "disabled": page.value === pageCount.value,
17349
- "aria-label": t(props.lastPageLabel)
17350
- }, null)])]);
17351
- }
17352
- });
17353
-
17354
- // Types
17397
+ const even = totalVisible.value % 2 === 0;
17398
+ const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);
17399
+ const left = even ? middle : middle + 1;
17400
+ const right = length.value - middle;
17401
+ if (left - page.value >= 0) {
17402
+ return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];
17403
+ } else if (page.value - right >= (even ? 1 : 0)) {
17404
+ const rangeLength = totalVisible.value - 1;
17405
+ const rangeStart = length.value - rangeLength + start.value;
17406
+ return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
17407
+ } else {
17408
+ const rangeLength = Math.max(1, totalVisible.value - 3);
17409
+ const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
17410
+ return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
17411
+ }
17412
+ });
17355
17413
 
17356
- const VDataTableColumn = defineFunctionalComponent({
17357
- align: {
17358
- type: String,
17414
+ // TODO: 'first' | 'prev' | 'next' | 'last' does not work here?
17415
+ function setValue(e, value, event) {
17416
+ e.preventDefault();
17417
+ page.value = value;
17418
+ event && emit(event, value);
17419
+ }
17420
+ const {
17421
+ refs,
17422
+ updateRef
17423
+ } = useRefs();
17424
+ provideDefaults({
17425
+ VPaginationBtn: {
17426
+ color: toRef(props, 'color'),
17427
+ border: toRef(props, 'border'),
17428
+ density: toRef(props, 'density'),
17429
+ size: toRef(props, 'size'),
17430
+ variant: toRef(props, 'variant'),
17431
+ rounded: toRef(props, 'rounded'),
17432
+ elevation: toRef(props, 'elevation')
17433
+ }
17434
+ });
17435
+ const items = computed(() => {
17436
+ return range.value.map((item, index) => {
17437
+ const ref = e => updateRef(e, index);
17438
+ if (typeof item === 'string') {
17439
+ return {
17440
+ isActive: false,
17441
+ key: `ellipsis-${index}`,
17442
+ page: item,
17443
+ props: {
17444
+ ref,
17445
+ ellipsis: true,
17446
+ icon: true,
17447
+ disabled: true
17448
+ }
17449
+ };
17450
+ } else {
17451
+ const isActive = item === page.value;
17452
+ return {
17453
+ isActive,
17454
+ key: item,
17455
+ page: n(item),
17456
+ props: {
17457
+ ref,
17458
+ ellipsis: false,
17459
+ icon: true,
17460
+ disabled: !!props.disabled || +props.length < 2,
17461
+ color: isActive ? props.activeColor : props.color,
17462
+ ariaCurrent: isActive,
17463
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
17464
+ onClick: e => setValue(e, item)
17465
+ }
17466
+ };
17467
+ }
17468
+ });
17469
+ });
17470
+ const controls = computed(() => {
17471
+ const prevDisabled = !!props.disabled || page.value <= start.value;
17472
+ const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;
17473
+ return {
17474
+ first: props.showFirstLastPage ? {
17475
+ icon: isRtl.value ? props.lastIcon : props.firstIcon,
17476
+ onClick: e => setValue(e, start.value, 'first'),
17477
+ disabled: prevDisabled,
17478
+ ariaLabel: t(props.firstAriaLabel),
17479
+ ariaDisabled: prevDisabled
17480
+ } : undefined,
17481
+ prev: {
17482
+ icon: isRtl.value ? props.nextIcon : props.prevIcon,
17483
+ onClick: e => setValue(e, page.value - 1, 'prev'),
17484
+ disabled: prevDisabled,
17485
+ ariaLabel: t(props.previousAriaLabel),
17486
+ ariaDisabled: prevDisabled
17487
+ },
17488
+ next: {
17489
+ icon: isRtl.value ? props.prevIcon : props.nextIcon,
17490
+ onClick: e => setValue(e, page.value + 1, 'next'),
17491
+ disabled: nextDisabled,
17492
+ ariaLabel: t(props.nextAriaLabel),
17493
+ ariaDisabled: nextDisabled
17494
+ },
17495
+ last: props.showFirstLastPage ? {
17496
+ icon: isRtl.value ? props.firstIcon : props.lastIcon,
17497
+ onClick: e => setValue(e, start.value + length.value - 1, 'last'),
17498
+ disabled: nextDisabled,
17499
+ ariaLabel: t(props.lastAriaLabel),
17500
+ ariaDisabled: nextDisabled
17501
+ } : undefined
17502
+ };
17503
+ });
17504
+ function updateFocus() {
17505
+ const currentIndex = page.value - start.value;
17506
+ refs.value[currentIndex]?.$el.focus();
17507
+ }
17508
+ function onKeydown(e) {
17509
+ if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
17510
+ page.value = page.value - 1;
17511
+ nextTick(updateFocus);
17512
+ } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
17513
+ page.value = page.value + 1;
17514
+ nextTick(updateFocus);
17515
+ }
17516
+ }
17517
+ useRender(() => createVNode(props.tag, {
17518
+ "ref": resizeRef,
17519
+ "class": ['v-pagination', themeClasses.value, props.class],
17520
+ "style": props.style,
17521
+ "role": "navigation",
17522
+ "aria-label": t(props.ariaLabel),
17523
+ "onKeydown": onKeydown,
17524
+ "data-test": "v-pagination-root"
17525
+ }, {
17526
+ default: () => [createVNode("ul", {
17527
+ "class": "v-pagination__list"
17528
+ }, [props.showFirstLastPage && createVNode("li", {
17529
+ "key": "first",
17530
+ "class": "v-pagination__first",
17531
+ "data-test": "v-pagination-first"
17532
+ }, [slots.first ? slots.first(controls.value.first) : createVNode(VBtn, mergeProps({
17533
+ "_as": "VPaginationBtn"
17534
+ }, controls.value.first), null)]), createVNode("li", {
17535
+ "key": "prev",
17536
+ "class": "v-pagination__prev",
17537
+ "data-test": "v-pagination-prev"
17538
+ }, [slots.prev ? slots.prev(controls.value.prev) : createVNode(VBtn, mergeProps({
17539
+ "_as": "VPaginationBtn"
17540
+ }, controls.value.prev), null)]), items.value.map((item, index) => createVNode("li", {
17541
+ "key": item.key,
17542
+ "class": ['v-pagination__item', {
17543
+ 'v-pagination__item--is-active': item.isActive
17544
+ }],
17545
+ "data-test": "v-pagination-item"
17546
+ }, [slots.item ? slots.item(item) : createVNode(VBtn, mergeProps({
17547
+ "_as": "VPaginationBtn"
17548
+ }, item.props), {
17549
+ default: () => [item.page]
17550
+ })])), createVNode("li", {
17551
+ "key": "next",
17552
+ "class": "v-pagination__next",
17553
+ "data-test": "v-pagination-next"
17554
+ }, [slots.next ? slots.next(controls.value.next) : createVNode(VBtn, mergeProps({
17555
+ "_as": "VPaginationBtn"
17556
+ }, controls.value.next), null)]), props.showFirstLastPage && createVNode("li", {
17557
+ "key": "last",
17558
+ "class": "v-pagination__last",
17559
+ "data-test": "v-pagination-last"
17560
+ }, [slots.last ? slots.last(controls.value.last) : createVNode(VBtn, mergeProps({
17561
+ "_as": "VPaginationBtn"
17562
+ }, controls.value.last), null)])])]
17563
+ }));
17564
+ return {};
17565
+ }
17566
+ });
17567
+
17568
+ // Types
17569
+
17570
+ const makeVDataTableFooterProps = propsFactory({
17571
+ prevIcon: {
17572
+ type: String,
17573
+ default: '$prev'
17574
+ },
17575
+ nextIcon: {
17576
+ type: String,
17577
+ default: '$next'
17578
+ },
17579
+ firstIcon: {
17580
+ type: String,
17581
+ default: '$first'
17582
+ },
17583
+ lastIcon: {
17584
+ type: String,
17585
+ default: '$last'
17586
+ },
17587
+ itemsPerPageText: {
17588
+ type: String,
17589
+ default: '$vuetify.dataFooter.itemsPerPageText'
17590
+ },
17591
+ pageText: {
17592
+ type: String,
17593
+ default: '$vuetify.dataFooter.pageText'
17594
+ },
17595
+ firstPageLabel: {
17596
+ type: String,
17597
+ default: '$vuetify.dataFooter.firstPage'
17598
+ },
17599
+ prevPageLabel: {
17600
+ type: String,
17601
+ default: '$vuetify.dataFooter.prevPage'
17602
+ },
17603
+ nextPageLabel: {
17604
+ type: String,
17605
+ default: '$vuetify.dataFooter.nextPage'
17606
+ },
17607
+ lastPageLabel: {
17608
+ type: String,
17609
+ default: '$vuetify.dataFooter.lastPage'
17610
+ },
17611
+ itemsPerPageOptions: {
17612
+ type: Array,
17613
+ default: () => [{
17614
+ value: 10,
17615
+ title: '10'
17616
+ }, {
17617
+ value: 25,
17618
+ title: '25'
17619
+ }, {
17620
+ value: 50,
17621
+ title: '50'
17622
+ }, {
17623
+ value: 100,
17624
+ title: '100'
17625
+ }, {
17626
+ value: -1,
17627
+ title: '$vuetify.dataFooter.itemsPerPageAll'
17628
+ }]
17629
+ },
17630
+ showCurrentPage: Boolean
17631
+ }, 'VDataTableFooter');
17632
+ const VDataTableFooter = genericComponent()({
17633
+ name: 'VDataTableFooter',
17634
+ props: makeVDataTableFooterProps(),
17635
+ setup(props, _ref) {
17636
+ let {
17637
+ slots
17638
+ } = _ref;
17639
+ const {
17640
+ t
17641
+ } = useLocale();
17642
+ const {
17643
+ page,
17644
+ pageCount,
17645
+ startIndex,
17646
+ stopIndex,
17647
+ itemsLength,
17648
+ itemsPerPage,
17649
+ setItemsPerPage
17650
+ } = usePagination();
17651
+ const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => {
17652
+ if (typeof option === 'number') {
17653
+ return {
17654
+ value: option,
17655
+ title: option === -1 ? t('$vuetify.dataFooter.itemsPerPageAll') : String(option)
17656
+ };
17657
+ }
17658
+ return {
17659
+ ...option,
17660
+ title: t(option.title)
17661
+ };
17662
+ }));
17663
+ useRender(() => createVNode("div", {
17664
+ "class": "v-data-table-footer"
17665
+ }, [slots.prepend?.(), createVNode("div", {
17666
+ "class": "v-data-table-footer__items-per-page"
17667
+ }, [createVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
17668
+ "items": itemsPerPageOptions.value,
17669
+ "modelValue": itemsPerPage.value,
17670
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
17671
+ "density": "compact",
17672
+ "variant": "outlined",
17673
+ "hide-details": true
17674
+ }, null)]), createVNode("div", {
17675
+ "class": "v-data-table-footer__info"
17676
+ }, [createVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), createVNode("div", {
17677
+ "class": "v-data-table-footer__pagination"
17678
+ }, [createVNode(VPagination, {
17679
+ "modelValue": page.value,
17680
+ "onUpdate:modelValue": $event => page.value = $event,
17681
+ "density": "comfortable",
17682
+ "first-aria-label": props.firstPageLabel,
17683
+ "last-aria-label": props.lastPageLabel,
17684
+ "length": pageCount.value,
17685
+ "next-aria-label": props.nextPageLabel,
17686
+ "prev-aria-label": props.prevPageLabel,
17687
+ "rounded": true,
17688
+ "show-first-last-page": true,
17689
+ "total-visible": props.showCurrentPage ? 1 : 0,
17690
+ "variant": "plain"
17691
+ }, null)])]));
17692
+ return {};
17693
+ }
17694
+ });
17695
+
17696
+ // Types
17697
+
17698
+ const VDataTableColumn = defineFunctionalComponent({
17699
+ align: {
17700
+ type: String,
17359
17701
  default: 'start'
17360
17702
  },
17361
17703
  fixed: Boolean,
@@ -17734,7 +18076,7 @@ const VDataTableHeaders = genericComponent()({
17734
18076
  }, loaderClasses.value],
17735
18077
  "style": {
17736
18078
  width: convertToUnit(column.width),
17737
- minWidth: convertToUnit(column.width),
18079
+ minWidth: convertToUnit(column.minWidth),
17738
18080
  ...getFixedStyles(column, y)
17739
18081
  },
17740
18082
  "colspan": column.colspan,
@@ -18369,7 +18711,7 @@ const VDataTable = genericComponent()({
18369
18711
  default: () => slots.default ? slots.default(slotProps.value) : createVNode(Fragment, null, [slots.colgroup?.(slotProps.value), createVNode("thead", null, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), createVNode("tbody", null, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
18370
18712
  "items": paginatedItems.value
18371
18713
  }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
18372
- bottom: () => slots.bottom ? slots.bottom(slotProps.value) : createVNode(Fragment, null, [createVNode(VDataTableFooter, dataTableFooterProps, {
18714
+ bottom: () => slots.bottom ? slots.bottom(slotProps.value) : createVNode(Fragment, null, [createVNode(VDivider, null, null), createVNode(VDataTableFooter, dataTableFooterProps, {
18373
18715
  prepend: slots['footer.prepend']
18374
18716
  })])
18375
18717
  });
@@ -19242,21 +19584,20 @@ const VDatePickerMonth = genericComponent()({
19242
19584
  // model comes in always as array
19243
19585
  // leaves as array if multiple
19244
19586
  const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v));
19245
- // shorthand to access the first value in the model or a fresh date
19246
- const _model = computed(() => {
19247
- const value = model.value?.[0];
19248
- return value && adapter.isValid(value) ? value : adapter.date();
19587
+ const displayValue = computed(() => {
19588
+ if (model.value.length > 0) return adapter.date(model.value[0]);
19589
+ if (props.min) return adapter.date(props.min);
19590
+ if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0]);
19591
+ return adapter.date();
19249
19592
  });
19250
19593
  const year = useProxiedModel(props, 'year', undefined, v => {
19251
- let date = adapter.date(_model.value);
19252
- if (v != null) date = adapter.setYear(date, Number(v));
19253
- return adapter.startOfYear(date);
19594
+ const value = v != null ? Number(v) : adapter.getYear(displayValue.value);
19595
+ return adapter.startOfYear(adapter.setYear(adapter.date(), value));
19254
19596
  }, v => adapter.getYear(v));
19255
19597
  const month = useProxiedModel(props, 'month', undefined, v => {
19256
- let date = adapter.date(_model.value);
19257
- if (v != null) date = adapter.setMonth(date, Number(v));
19258
- date = adapter.setYear(date, adapter.getYear(year.value));
19259
- return date;
19598
+ const value = v != null ? Number(v) : adapter.getMonth(displayValue.value);
19599
+ const date = adapter.setYear(adapter.date(), adapter.getYear(year.value));
19600
+ return adapter.setMonth(date, value);
19260
19601
  }, v => adapter.getMonth(v));
19261
19602
  const weeksInMonth = computed(() => {
19262
19603
  const weeks = adapter.getWeekArray(month.value);
@@ -19310,9 +19651,9 @@ const VDatePickerMonth = genericComponent()({
19310
19651
  function isDisabled(value) {
19311
19652
  if (props.disabled) return true;
19312
19653
  const date = adapter.date(value);
19313
- if (props.min && adapter.isAfter(props.min, date)) return true;
19314
- if (props.max && adapter.isAfter(date, props.max)) return true;
19315
- if (Array.isArray(props.allowedDates)) {
19654
+ if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true;
19655
+ if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true;
19656
+ if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {
19316
19657
  return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date));
19317
19658
  }
19318
19659
  if (typeof props.allowedDates === 'function') {
@@ -19334,6 +19675,10 @@ const VDatePickerMonth = genericComponent()({
19334
19675
  model.value = [value];
19335
19676
  }
19336
19677
  }
19678
+ watch(displayValue, val => {
19679
+ month.value = val;
19680
+ year.value = val;
19681
+ });
19337
19682
  return () => createVNode("div", {
19338
19683
  "class": "v-date-picker-month"
19339
19684
  }, [props.showWeek && createVNode("div", {
@@ -19705,22 +20050,22 @@ const VDatePicker = genericComponent()({
19705
20050
  function onClickNext() {
19706
20051
  if (month.value < 11) {
19707
20052
  month.value++;
19708
- emit('update:month', month.value);
19709
20053
  } else {
19710
20054
  year.value++;
19711
20055
  month.value = 0;
19712
20056
  emit('update:year', year.value);
19713
20057
  }
20058
+ emit('update:month', month.value);
19714
20059
  }
19715
20060
  function onClickPrev() {
19716
20061
  if (month.value > 0) {
19717
20062
  month.value--;
19718
- emit('update:month', month.value);
19719
20063
  } else {
19720
20064
  year.value--;
19721
20065
  month.value = 11;
19722
- emit('update:year', month.value);
20066
+ emit('update:year', year.value);
19723
20067
  }
20068
+ emit('update:month', month.value);
19724
20069
  }
19725
20070
  function onClickMonth() {
19726
20071
  viewMode.value = viewMode.value === 'months' ? 'month' : 'months';
@@ -21448,577 +21793,244 @@ const VNavigationDrawer = genericComponent()({
21448
21793
  }, {
21449
21794
  default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && createVNode("div", mergeProps({
21450
21795
  "class": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],
21451
- "style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
21452
- "onClick": () => isActive.value = false
21453
- }, scopeId), null)]
21454
- })]);
21455
- });
21456
- return {
21457
- isStuck
21458
- };
21459
- }
21460
- });
21461
-
21462
- // Composables
21463
- const VNoSsr = defineComponent({
21464
- name: 'VNoSsr',
21465
- setup(_, _ref) {
21466
- let {
21467
- slots
21468
- } = _ref;
21469
- const show = useHydration();
21470
- return () => show.value && slots.default?.();
21471
- }
21472
- });
21473
-
21474
- // Types
21475
-
21476
- const makeVOtpInputProps = propsFactory({
21477
- autofocus: Boolean,
21478
- divider: String,
21479
- focusAll: Boolean,
21480
- label: {
21481
- type: String,
21482
- default: '$vuetify.input.otp'
21483
- },
21484
- length: {
21485
- type: [Number, String],
21486
- default: 6
21487
- },
21488
- modelValue: {
21489
- type: [Number, String],
21490
- default: undefined
21491
- },
21492
- placeholder: String,
21493
- type: {
21494
- type: String,
21495
- default: 'number'
21496
- },
21497
- ...makeDimensionProps(),
21498
- ...makeFocusProps(),
21499
- ...only(makeVFieldProps({
21500
- variant: 'outlined'
21501
- }), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'rounded', 'style', 'theme', 'variant'])
21502
- }, 'VOtpInput');
21503
- const VOtpInput = genericComponent()({
21504
- name: 'VOtpInput',
21505
- props: makeVOtpInputProps(),
21506
- emits: {
21507
- finish: val => true,
21508
- 'update:focused': val => true,
21509
- 'update:modelValue': val => true
21510
- },
21511
- setup(props, _ref) {
21512
- let {
21513
- attrs,
21514
- emit,
21515
- slots
21516
- } = _ref;
21517
- const {
21518
- dimensionStyles
21519
- } = useDimension(props);
21520
- const {
21521
- isFocused,
21522
- focus,
21523
- blur
21524
- } = useFocus(props);
21525
- const model = useProxiedModel(props, 'modelValue', '', val => String(val).split(''), val => val.join(''));
21526
- const {
21527
- t
21528
- } = useLocale();
21529
- const length = computed(() => Number(props.length));
21530
- const fields = computed(() => Array(length.value).fill(0));
21531
- const focusIndex = ref(-1);
21532
- const contentRef = ref();
21533
- const inputRef = ref([]);
21534
- const current = computed(() => inputRef.value[focusIndex.value]);
21535
- function onInput() {
21536
- // The maxlength attribute doesn't work for the number type input, so the text type is used.
21537
- // The following logic simulates the behavior of a number input.
21538
- if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
21539
- current.value.value = '';
21540
- return;
21541
- }
21542
- const array = model.value.slice();
21543
- const value = current.value.value;
21544
- array[focusIndex.value] = value;
21545
- let target = null;
21546
- if (focusIndex.value > model.value.length) {
21547
- target = model.value.length + 1;
21548
- } else if (focusIndex.value + 1 !== length.value) {
21549
- target = 'next';
21550
- }
21551
- model.value = array;
21552
- if (target) focusChild(contentRef.value, target);
21553
- }
21554
- function onKeydown(e) {
21555
- const array = model.value.slice();
21556
- const index = focusIndex.value;
21557
- let target = null;
21558
- if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'].includes(e.key)) return;
21559
- e.preventDefault();
21560
- if (e.key === 'ArrowLeft') {
21561
- target = 'prev';
21562
- } else if (e.key === 'ArrowRight') {
21563
- target = 'next';
21564
- } else if (['Backspace', 'Delete'].includes(e.key)) {
21565
- array[focusIndex.value] = '';
21566
- model.value = array;
21567
- if (focusIndex.value > 0 && e.key === 'Backspace') {
21568
- target = 'prev';
21569
- } else {
21570
- requestAnimationFrame(() => {
21571
- inputRef.value[index]?.select();
21572
- });
21573
- }
21574
- }
21575
- requestAnimationFrame(() => {
21576
- if (target != null) {
21577
- focusChild(contentRef.value, target);
21578
- }
21579
- });
21580
- }
21581
- function onPaste(index, e) {
21582
- e.preventDefault();
21583
- e.stopPropagation();
21584
- model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
21585
- inputRef.value?.[index].blur();
21586
- }
21587
- function reset() {
21588
- model.value = [];
21589
- }
21590
- function onFocus(e, index) {
21591
- focus();
21592
- focusIndex.value = index;
21593
- }
21594
- function onBlur() {
21595
- blur();
21596
- focusIndex.value = -1;
21597
- }
21598
- provideDefaults({
21599
- VField: {
21600
- color: computed(() => props.color),
21601
- bgColor: computed(() => props.color),
21602
- baseColor: computed(() => props.baseColor),
21603
- disabled: computed(() => props.disabled),
21604
- error: computed(() => props.error),
21605
- variant: computed(() => props.variant)
21606
- }
21607
- }, {
21608
- scoped: true
21609
- });
21610
- watch(model, val => {
21611
- if (val.length === length.value) emit('finish', val.join(''));
21612
- }, {
21613
- deep: true
21614
- });
21615
- watch(focusIndex, val => {
21616
- if (val < 0) return;
21617
- nextTick(() => {
21618
- inputRef.value[val]?.select();
21619
- });
21620
- });
21621
- useRender(() => {
21622
- const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
21623
- return createVNode("div", mergeProps({
21624
- "class": ['v-otp-input', {
21625
- 'v-otp-input--divided': !!props.divider
21626
- }, props.class],
21627
- "style": [props.style]
21628
- }, rootAttrs), [createVNode("div", {
21629
- "ref": contentRef,
21630
- "class": "v-otp-input__content",
21631
- "style": [dimensionStyles.value]
21632
- }, [fields.value.map((_, i) => createVNode(Fragment, null, [props.divider && i !== 0 && createVNode("span", {
21633
- "class": "v-otp-input__divider"
21634
- }, [props.divider]), createVNode(VField, {
21635
- "focused": isFocused.value && props.focusAll || focusIndex.value === i,
21636
- "key": i
21637
- }, {
21638
- ...slots,
21639
- default: () => {
21640
- return createVNode("input", {
21641
- "ref": val => inputRef.value[i] = val,
21642
- "aria-label": t(props.label, i + 1),
21643
- "autofocus": i === 0 && props.autofocus,
21644
- "autocomplete": "one-time-code",
21645
- "class": ['v-otp-input__field'],
21646
- "inputmode": props.type === 'number' ? 'numeric' : 'text',
21647
- "min": props.type === 'number' ? 0 : undefined,
21648
- "maxlength": "1",
21649
- "placeholder": props.placeholder,
21650
- "type": props.type === 'number' ? 'text' : props.type,
21651
- "value": model.value[i],
21652
- "onInput": onInput,
21653
- "onFocus": e => onFocus(e, i),
21654
- "onBlur": onBlur,
21655
- "onKeydown": onKeydown,
21656
- "onPaste": event => onPaste(i, event)
21657
- }, null);
21658
- }
21659
- })])), createVNode("input", mergeProps({
21660
- "class": "v-otp-input-input",
21661
- "type": "hidden"
21662
- }, inputAttrs, {
21663
- "value": model.value.join('')
21664
- }), null), createVNode(VOverlay, {
21665
- "contained": true,
21666
- "content-class": "v-otp-input__loader",
21667
- "model-value": !!props.loading,
21668
- "persistent": true
21669
- }, {
21670
- default: () => [slots.loader?.() ?? createVNode(VProgressCircular, {
21671
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
21672
- "indeterminate": true,
21673
- "size": "24",
21674
- "width": "2"
21675
- }, null)]
21676
- }), slots.default?.()])]);
21796
+ "style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
21797
+ "onClick": () => isActive.value = false
21798
+ }, scopeId), null)]
21799
+ })]);
21677
21800
  });
21678
21801
  return {
21679
- blur: () => {
21680
- inputRef.value?.some(input => input.blur());
21681
- },
21682
- focus: () => {
21683
- inputRef.value?.[0].focus();
21684
- },
21685
- reset,
21686
- isFocused
21802
+ isStuck
21687
21803
  };
21688
21804
  }
21689
21805
  });
21690
21806
 
21691
- // Utilities
21692
-
21693
- // Types
21694
-
21695
- function useRefs() {
21696
- const refs = ref([]);
21697
- onBeforeUpdate(() => refs.value = []);
21698
- function updateRef(e, i) {
21699
- refs.value[i] = e;
21807
+ // Composables
21808
+ const VNoSsr = defineComponent({
21809
+ name: 'VNoSsr',
21810
+ setup(_, _ref) {
21811
+ let {
21812
+ slots
21813
+ } = _ref;
21814
+ const show = useHydration();
21815
+ return () => show.value && slots.default?.();
21700
21816
  }
21701
- return {
21702
- refs,
21703
- updateRef
21704
- };
21705
- }
21817
+ });
21706
21818
 
21707
21819
  // Types
21708
21820
 
21709
- const makeVPaginationProps = propsFactory({
21710
- activeColor: String,
21711
- start: {
21712
- type: [Number, String],
21713
- default: 1
21714
- },
21715
- modelValue: {
21716
- type: Number,
21717
- default: props => props.start
21821
+ const makeVOtpInputProps = propsFactory({
21822
+ autofocus: Boolean,
21823
+ divider: String,
21824
+ focusAll: Boolean,
21825
+ label: {
21826
+ type: String,
21827
+ default: '$vuetify.input.otp'
21718
21828
  },
21719
- disabled: Boolean,
21720
21829
  length: {
21721
21830
  type: [Number, String],
21722
- default: 1,
21723
- validator: val => val % 1 === 0
21724
- },
21725
- totalVisible: [Number, String],
21726
- firstIcon: {
21727
- type: IconValue,
21728
- default: '$first'
21729
- },
21730
- prevIcon: {
21731
- type: IconValue,
21732
- default: '$prev'
21733
- },
21734
- nextIcon: {
21735
- type: IconValue,
21736
- default: '$next'
21737
- },
21738
- lastIcon: {
21739
- type: IconValue,
21740
- default: '$last'
21741
- },
21742
- ariaLabel: {
21743
- type: String,
21744
- default: '$vuetify.pagination.ariaLabel.root'
21745
- },
21746
- pageAriaLabel: {
21747
- type: String,
21748
- default: '$vuetify.pagination.ariaLabel.page'
21749
- },
21750
- currentPageAriaLabel: {
21751
- type: String,
21752
- default: '$vuetify.pagination.ariaLabel.currentPage'
21753
- },
21754
- firstAriaLabel: {
21755
- type: String,
21756
- default: '$vuetify.pagination.ariaLabel.first'
21757
- },
21758
- previousAriaLabel: {
21759
- type: String,
21760
- default: '$vuetify.pagination.ariaLabel.previous'
21761
- },
21762
- nextAriaLabel: {
21763
- type: String,
21764
- default: '$vuetify.pagination.ariaLabel.next'
21831
+ default: 6
21765
21832
  },
21766
- lastAriaLabel: {
21767
- type: String,
21768
- default: '$vuetify.pagination.ariaLabel.last'
21833
+ modelValue: {
21834
+ type: [Number, String],
21835
+ default: undefined
21769
21836
  },
21770
- ellipsis: {
21837
+ placeholder: String,
21838
+ type: {
21771
21839
  type: String,
21772
- default: '...'
21840
+ default: 'number'
21773
21841
  },
21774
- showFirstLastPage: Boolean,
21775
- ...makeBorderProps(),
21776
- ...makeComponentProps(),
21777
- ...makeDensityProps(),
21778
- ...makeElevationProps(),
21779
- ...makeRoundedProps(),
21780
- ...makeSizeProps(),
21781
- ...makeTagProps({
21782
- tag: 'nav'
21783
- }),
21784
- ...makeThemeProps(),
21785
- ...makeVariantProps({
21786
- variant: 'text'
21787
- })
21788
- }, 'VPagination');
21789
- const VPagination = genericComponent()({
21790
- name: 'VPagination',
21791
- props: makeVPaginationProps(),
21842
+ ...makeDimensionProps(),
21843
+ ...makeFocusProps(),
21844
+ ...only(makeVFieldProps({
21845
+ variant: 'outlined'
21846
+ }), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'rounded', 'style', 'theme', 'variant'])
21847
+ }, 'VOtpInput');
21848
+ const VOtpInput = genericComponent()({
21849
+ name: 'VOtpInput',
21850
+ props: makeVOtpInputProps(),
21792
21851
  emits: {
21793
- 'update:modelValue': value => true,
21794
- first: value => true,
21795
- prev: value => true,
21796
- next: value => true,
21797
- last: value => true
21852
+ finish: val => true,
21853
+ 'update:focused': val => true,
21854
+ 'update:modelValue': val => true
21798
21855
  },
21799
21856
  setup(props, _ref) {
21800
21857
  let {
21801
- slots,
21802
- emit
21858
+ attrs,
21859
+ emit,
21860
+ slots
21803
21861
  } = _ref;
21804
- const page = useProxiedModel(props, 'modelValue');
21805
- const {
21806
- t,
21807
- n
21808
- } = useLocale();
21809
- const {
21810
- isRtl
21811
- } = useRtl();
21812
21862
  const {
21813
- themeClasses
21814
- } = provideTheme(props);
21863
+ dimensionStyles
21864
+ } = useDimension(props);
21815
21865
  const {
21816
- width
21817
- } = useDisplay();
21818
- const maxButtons = shallowRef(-1);
21819
- provideDefaults(undefined, {
21820
- scoped: true
21821
- });
21866
+ isFocused,
21867
+ focus,
21868
+ blur
21869
+ } = useFocus(props);
21870
+ const model = useProxiedModel(props, 'modelValue', '', val => String(val).split(''), val => val.join(''));
21822
21871
  const {
21823
- resizeRef
21824
- } = useResizeObserver(entries => {
21825
- if (!entries.length) return;
21826
- const {
21827
- target,
21828
- contentRect
21829
- } = entries[0];
21830
- const firstItem = target.querySelector('.v-pagination__list > *');
21831
- if (!firstItem) return;
21832
- const totalWidth = contentRect.width;
21833
- const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;
21834
- maxButtons.value = getMax(totalWidth, itemWidth);
21835
- });
21836
- const length = computed(() => parseInt(props.length, 10));
21837
- const start = computed(() => parseInt(props.start, 10));
21838
- const totalVisible = computed(() => {
21839
- if (props.totalVisible) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;
21840
- return getMax(width.value, 58);
21841
- });
21842
- function getMax(totalWidth, itemWidth) {
21843
- const minButtons = props.showFirstLastPage ? 5 : 3;
21844
- return Math.max(0, Math.floor(
21845
- // Round to two decimal places to avoid floating point errors
21846
- +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
21847
- }
21848
- const range = computed(() => {
21849
- if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
21850
- if (totalVisible.value <= 1) return [page.value];
21851
- if (length.value <= totalVisible.value) {
21852
- return createRange(length.value, start.value);
21872
+ t
21873
+ } = useLocale();
21874
+ const length = computed(() => Number(props.length));
21875
+ const fields = computed(() => Array(length.value).fill(0));
21876
+ const focusIndex = ref(-1);
21877
+ const contentRef = ref();
21878
+ const inputRef = ref([]);
21879
+ const current = computed(() => inputRef.value[focusIndex.value]);
21880
+ function onInput() {
21881
+ // The maxlength attribute doesn't work for the number type input, so the text type is used.
21882
+ // The following logic simulates the behavior of a number input.
21883
+ if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
21884
+ current.value.value = '';
21885
+ return;
21853
21886
  }
21854
- const even = totalVisible.value % 2 === 0;
21855
- const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);
21856
- const left = even ? middle : middle + 1;
21857
- const right = length.value - middle;
21858
- if (left - page.value >= 0) {
21859
- return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];
21860
- } else if (page.value - right >= (even ? 1 : 0)) {
21861
- const rangeLength = totalVisible.value - 1;
21862
- const rangeStart = length.value - rangeLength + start.value;
21863
- return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
21864
- } else {
21865
- const rangeLength = Math.max(1, totalVisible.value - 3);
21866
- const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
21867
- return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
21887
+ const array = model.value.slice();
21888
+ const value = current.value.value;
21889
+ array[focusIndex.value] = value;
21890
+ let target = null;
21891
+ if (focusIndex.value > model.value.length) {
21892
+ target = model.value.length + 1;
21893
+ } else if (focusIndex.value + 1 !== length.value) {
21894
+ target = 'next';
21895
+ }
21896
+ model.value = array;
21897
+ if (target) focusChild(contentRef.value, target);
21898
+ }
21899
+ function onKeydown(e) {
21900
+ const array = model.value.slice();
21901
+ const index = focusIndex.value;
21902
+ let target = null;
21903
+ if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'].includes(e.key)) return;
21904
+ e.preventDefault();
21905
+ if (e.key === 'ArrowLeft') {
21906
+ target = 'prev';
21907
+ } else if (e.key === 'ArrowRight') {
21908
+ target = 'next';
21909
+ } else if (['Backspace', 'Delete'].includes(e.key)) {
21910
+ array[focusIndex.value] = '';
21911
+ model.value = array;
21912
+ if (focusIndex.value > 0 && e.key === 'Backspace') {
21913
+ target = 'prev';
21914
+ } else {
21915
+ requestAnimationFrame(() => {
21916
+ inputRef.value[index]?.select();
21917
+ });
21918
+ }
21868
21919
  }
21869
- });
21870
-
21871
- // TODO: 'first' | 'prev' | 'next' | 'last' does not work here?
21872
- function setValue(e, value, event) {
21920
+ requestAnimationFrame(() => {
21921
+ if (target != null) {
21922
+ focusChild(contentRef.value, target);
21923
+ }
21924
+ });
21925
+ }
21926
+ function onPaste(index, e) {
21873
21927
  e.preventDefault();
21874
- page.value = value;
21875
- event && emit(event, value);
21928
+ e.stopPropagation();
21929
+ model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
21930
+ inputRef.value?.[index].blur();
21931
+ }
21932
+ function reset() {
21933
+ model.value = [];
21934
+ }
21935
+ function onFocus(e, index) {
21936
+ focus();
21937
+ focusIndex.value = index;
21938
+ }
21939
+ function onBlur() {
21940
+ blur();
21941
+ focusIndex.value = -1;
21876
21942
  }
21877
- const {
21878
- refs,
21879
- updateRef
21880
- } = useRefs();
21881
21943
  provideDefaults({
21882
- VPaginationBtn: {
21883
- color: toRef(props, 'color'),
21884
- border: toRef(props, 'border'),
21885
- density: toRef(props, 'density'),
21886
- size: toRef(props, 'size'),
21887
- variant: toRef(props, 'variant'),
21888
- rounded: toRef(props, 'rounded'),
21889
- elevation: toRef(props, 'elevation')
21944
+ VField: {
21945
+ color: computed(() => props.color),
21946
+ bgColor: computed(() => props.color),
21947
+ baseColor: computed(() => props.baseColor),
21948
+ disabled: computed(() => props.disabled),
21949
+ error: computed(() => props.error),
21950
+ variant: computed(() => props.variant)
21890
21951
  }
21952
+ }, {
21953
+ scoped: true
21891
21954
  });
21892
- const items = computed(() => {
21893
- return range.value.map((item, index) => {
21894
- const ref = e => updateRef(e, index);
21895
- if (typeof item === 'string') {
21896
- return {
21897
- isActive: false,
21898
- key: `ellipsis-${index}`,
21899
- page: item,
21900
- props: {
21901
- ref,
21902
- ellipsis: true,
21903
- icon: true,
21904
- disabled: true
21905
- }
21906
- };
21907
- } else {
21908
- const isActive = item === page.value;
21909
- return {
21910
- isActive,
21911
- key: item,
21912
- page: n(item),
21913
- props: {
21914
- ref,
21915
- ellipsis: false,
21916
- icon: true,
21917
- disabled: !!props.disabled || +props.length < 2,
21918
- color: isActive ? props.activeColor : props.color,
21919
- ariaCurrent: isActive,
21920
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
21921
- onClick: e => setValue(e, item)
21922
- }
21923
- };
21924
- }
21955
+ watch(model, val => {
21956
+ if (val.length === length.value) emit('finish', val.join(''));
21957
+ }, {
21958
+ deep: true
21959
+ });
21960
+ watch(focusIndex, val => {
21961
+ if (val < 0) return;
21962
+ nextTick(() => {
21963
+ inputRef.value[val]?.select();
21925
21964
  });
21926
21965
  });
21927
- const controls = computed(() => {
21928
- const prevDisabled = !!props.disabled || page.value <= start.value;
21929
- const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;
21930
- return {
21931
- first: props.showFirstLastPage ? {
21932
- icon: isRtl.value ? props.lastIcon : props.firstIcon,
21933
- onClick: e => setValue(e, start.value, 'first'),
21934
- disabled: prevDisabled,
21935
- ariaLabel: t(props.firstAriaLabel),
21936
- ariaDisabled: prevDisabled
21937
- } : undefined,
21938
- prev: {
21939
- icon: isRtl.value ? props.nextIcon : props.prevIcon,
21940
- onClick: e => setValue(e, page.value - 1, 'prev'),
21941
- disabled: prevDisabled,
21942
- ariaLabel: t(props.previousAriaLabel),
21943
- ariaDisabled: prevDisabled
21944
- },
21945
- next: {
21946
- icon: isRtl.value ? props.prevIcon : props.nextIcon,
21947
- onClick: e => setValue(e, page.value + 1, 'next'),
21948
- disabled: nextDisabled,
21949
- ariaLabel: t(props.nextAriaLabel),
21950
- ariaDisabled: nextDisabled
21951
- },
21952
- last: props.showFirstLastPage ? {
21953
- icon: isRtl.value ? props.firstIcon : props.lastIcon,
21954
- onClick: e => setValue(e, start.value + length.value - 1, 'last'),
21955
- disabled: nextDisabled,
21956
- ariaLabel: t(props.lastAriaLabel),
21957
- ariaDisabled: nextDisabled
21958
- } : undefined
21959
- };
21966
+ useRender(() => {
21967
+ const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
21968
+ return createVNode("div", mergeProps({
21969
+ "class": ['v-otp-input', {
21970
+ 'v-otp-input--divided': !!props.divider
21971
+ }, props.class],
21972
+ "style": [props.style]
21973
+ }, rootAttrs), [createVNode("div", {
21974
+ "ref": contentRef,
21975
+ "class": "v-otp-input__content",
21976
+ "style": [dimensionStyles.value]
21977
+ }, [fields.value.map((_, i) => createVNode(Fragment, null, [props.divider && i !== 0 && createVNode("span", {
21978
+ "class": "v-otp-input__divider"
21979
+ }, [props.divider]), createVNode(VField, {
21980
+ "focused": isFocused.value && props.focusAll || focusIndex.value === i,
21981
+ "key": i
21982
+ }, {
21983
+ ...slots,
21984
+ default: () => {
21985
+ return createVNode("input", {
21986
+ "ref": val => inputRef.value[i] = val,
21987
+ "aria-label": t(props.label, i + 1),
21988
+ "autofocus": i === 0 && props.autofocus,
21989
+ "autocomplete": "one-time-code",
21990
+ "class": ['v-otp-input__field'],
21991
+ "disabled": props.disabled,
21992
+ "inputmode": props.type === 'number' ? 'numeric' : 'text',
21993
+ "min": props.type === 'number' ? 0 : undefined,
21994
+ "maxlength": "1",
21995
+ "placeholder": props.placeholder,
21996
+ "type": props.type === 'number' ? 'text' : props.type,
21997
+ "value": model.value[i],
21998
+ "onInput": onInput,
21999
+ "onFocus": e => onFocus(e, i),
22000
+ "onBlur": onBlur,
22001
+ "onKeydown": onKeydown,
22002
+ "onPaste": event => onPaste(i, event)
22003
+ }, null);
22004
+ }
22005
+ })])), createVNode("input", mergeProps({
22006
+ "class": "v-otp-input-input",
22007
+ "type": "hidden"
22008
+ }, inputAttrs, {
22009
+ "value": model.value.join('')
22010
+ }), null), createVNode(VOverlay, {
22011
+ "contained": true,
22012
+ "content-class": "v-otp-input__loader",
22013
+ "model-value": !!props.loading,
22014
+ "persistent": true
22015
+ }, {
22016
+ default: () => [slots.loader?.() ?? createVNode(VProgressCircular, {
22017
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
22018
+ "indeterminate": true,
22019
+ "size": "24",
22020
+ "width": "2"
22021
+ }, null)]
22022
+ }), slots.default?.()])]);
21960
22023
  });
21961
- function updateFocus() {
21962
- const currentIndex = page.value - start.value;
21963
- refs.value[currentIndex]?.$el.focus();
21964
- }
21965
- function onKeydown(e) {
21966
- if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
21967
- page.value = page.value - 1;
21968
- nextTick(updateFocus);
21969
- } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
21970
- page.value = page.value + 1;
21971
- nextTick(updateFocus);
21972
- }
21973
- }
21974
- useRender(() => createVNode(props.tag, {
21975
- "ref": resizeRef,
21976
- "class": ['v-pagination', themeClasses.value, props.class],
21977
- "style": props.style,
21978
- "role": "navigation",
21979
- "aria-label": t(props.ariaLabel),
21980
- "onKeydown": onKeydown,
21981
- "data-test": "v-pagination-root"
21982
- }, {
21983
- default: () => [createVNode("ul", {
21984
- "class": "v-pagination__list"
21985
- }, [props.showFirstLastPage && createVNode("li", {
21986
- "key": "first",
21987
- "class": "v-pagination__first",
21988
- "data-test": "v-pagination-first"
21989
- }, [slots.first ? slots.first(controls.value.first) : createVNode(VBtn, mergeProps({
21990
- "_as": "VPaginationBtn"
21991
- }, controls.value.first), null)]), createVNode("li", {
21992
- "key": "prev",
21993
- "class": "v-pagination__prev",
21994
- "data-test": "v-pagination-prev"
21995
- }, [slots.prev ? slots.prev(controls.value.prev) : createVNode(VBtn, mergeProps({
21996
- "_as": "VPaginationBtn"
21997
- }, controls.value.prev), null)]), items.value.map((item, index) => createVNode("li", {
21998
- "key": item.key,
21999
- "class": ['v-pagination__item', {
22000
- 'v-pagination__item--is-active': item.isActive
22001
- }],
22002
- "data-test": "v-pagination-item"
22003
- }, [slots.item ? slots.item(item) : createVNode(VBtn, mergeProps({
22004
- "_as": "VPaginationBtn"
22005
- }, item.props), {
22006
- default: () => [item.page]
22007
- })])), createVNode("li", {
22008
- "key": "next",
22009
- "class": "v-pagination__next",
22010
- "data-test": "v-pagination-next"
22011
- }, [slots.next ? slots.next(controls.value.next) : createVNode(VBtn, mergeProps({
22012
- "_as": "VPaginationBtn"
22013
- }, controls.value.next), null)]), props.showFirstLastPage && createVNode("li", {
22014
- "key": "last",
22015
- "class": "v-pagination__last",
22016
- "data-test": "v-pagination-last"
22017
- }, [slots.last ? slots.last(controls.value.last) : createVNode(VBtn, mergeProps({
22018
- "_as": "VPaginationBtn"
22019
- }, controls.value.last), null)])])]
22020
- }));
22021
- return {};
22024
+ return {
22025
+ blur: () => {
22026
+ inputRef.value?.some(input => input.blur());
22027
+ },
22028
+ focus: () => {
22029
+ inputRef.value?.[0].focus();
22030
+ },
22031
+ reset,
22032
+ isFocused
22033
+ };
22022
22034
  }
22023
22035
  });
22024
22036
 
@@ -23080,7 +23092,7 @@ const VSlideGroup = genericComponent()({
23080
23092
  "class": ['v-slide-group__prev', {
23081
23093
  'v-slide-group__prev--disabled': !hasPrev.value
23082
23094
  }],
23083
- "onClick": () => scrollTo('prev')
23095
+ "onClick": () => hasPrev.value && scrollTo('prev')
23084
23096
  }, [slots.prev?.(slotProps.value) ?? createVNode(VFadeTransition, null, {
23085
23097
  default: () => [createVNode(VIcon, {
23086
23098
  "icon": isRtl.value ? props.nextIcon : props.prevIcon
@@ -23105,7 +23117,7 @@ const VSlideGroup = genericComponent()({
23105
23117
  "class": ['v-slide-group__next', {
23106
23118
  'v-slide-group__next--disabled': !hasNext.value
23107
23119
  }],
23108
- "onClick": () => scrollTo('next')
23120
+ "onClick": () => hasNext.value && scrollTo('next')
23109
23121
  }, [slots.next?.(slotProps.value) ?? createVNode(VFadeTransition, null, {
23110
23122
  default: () => [createVNode(VIcon, {
23111
23123
  "icon": isRtl.value ? props.prevIcon : props.nextIcon
@@ -23998,11 +24010,12 @@ const VTab = genericComponent()({
23998
24010
  "maxWidth": props.fixed ? 300 : undefined,
23999
24011
  "onGroup:selected": updateSlider
24000
24012
  }), {
24001
- default: () => [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
24013
+ ...slots,
24014
+ default: () => createVNode(Fragment, null, [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
24002
24015
  "ref": sliderEl,
24003
24016
  "class": ['v-tab__slider', sliderColorClasses.value],
24004
24017
  "style": sliderColorStyles.value
24005
- }, null)]
24018
+ }, null)])
24006
24019
  });
24007
24020
  });
24008
24021
  return {};
@@ -25069,7 +25082,8 @@ function createVuetify$1() {
25069
25082
  app.provide(ThemeSymbol, theme);
25070
25083
  app.provide(IconSymbol, icons);
25071
25084
  app.provide(LocaleSymbol, locale);
25072
- app.provide(DateAdapterSymbol, date);
25085
+ app.provide(DateOptionsSymbol, date.options);
25086
+ app.provide(DateAdapterSymbol, date.instance);
25073
25087
  if (IN_BROWSER && options.ssr) {
25074
25088
  if (app.$nuxt) {
25075
25089
  app.$nuxt.hook('app:suspense:resolve', () => {
@@ -25115,7 +25129,7 @@ function createVuetify$1() {
25115
25129
  date
25116
25130
  };
25117
25131
  }
25118
- const version$1 = "3.4.2";
25132
+ const version$1 = "3.4.3";
25119
25133
  createVuetify$1.version = version$1;
25120
25134
 
25121
25135
  // Vue's inject() can only be used in setup
@@ -25140,7 +25154,7 @@ const createVuetify = function () {
25140
25154
  ...options
25141
25155
  });
25142
25156
  };
25143
- const version = "3.4.2";
25157
+ const version = "3.4.3";
25144
25158
  createVuetify.version = version;
25145
25159
 
25146
25160
  export { components, createVuetify, directives, useDate, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };