@vuetify/nightly 3.8.8-master.2025-06-06 → 3.8.8-master.2025-06-08

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 (61) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/dist/json/attributes.json +2080 -2080
  3. package/dist/json/importMap-labs.json +20 -20
  4. package/dist/json/importMap.json +160 -160
  5. package/dist/json/web-types.json +3925 -3925
  6. package/dist/vuetify-labs.cjs +117 -59
  7. package/dist/vuetify-labs.css +3446 -3446
  8. package/dist/vuetify-labs.d.ts +65 -59
  9. package/dist/vuetify-labs.esm.js +117 -59
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +117 -59
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +104 -40
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +3061 -3061
  16. package/dist/vuetify.d.ts +60 -59
  17. package/dist/vuetify.esm.js +104 -40
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +104 -40
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +147 -140
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VDataTable/VDataTableColumn.js +1 -0
  25. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  26. package/lib/components/VDataTable/VDataTableFooter.js +3 -1
  27. package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
  28. package/lib/components/VDataTable/VDataTableHeaders.js +8 -1
  29. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  30. package/lib/components/VDatePicker/VDatePickerMonth.js +2 -2
  31. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  32. package/lib/components/VFileInput/VFileInput.js +8 -3
  33. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  34. package/lib/components/VNumberInput/VNumberInput.d.ts +5 -0
  35. package/lib/components/VNumberInput/VNumberInput.js +7 -11
  36. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  37. package/lib/components/VOtpInput/VOtpInput.js +5 -2
  38. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  39. package/lib/components/VSlider/VSliderThumb.js +1 -1
  40. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  41. package/lib/components/VTextField/VTextField.js +5 -4
  42. package/lib/components/VTextField/VTextField.js.map +1 -1
  43. package/lib/composables/date/date.d.ts +1 -4
  44. package/lib/composables/date/date.js +13 -14
  45. package/lib/composables/date/date.js.map +1 -1
  46. package/lib/composables/fileDrop.d.ts +4 -0
  47. package/lib/composables/fileDrop.js +50 -0
  48. package/lib/composables/fileDrop.js.map +1 -0
  49. package/lib/entry-bundler.d.ts +0 -3
  50. package/lib/entry-bundler.js +1 -1
  51. package/lib/framework.d.ts +55 -59
  52. package/lib/framework.js +1 -1
  53. package/lib/labs/VColorInput/VColorInput.js +3 -8
  54. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  55. package/lib/labs/VDateInput/VDateInput.d.ts +5 -0
  56. package/lib/labs/VDateInput/VDateInput.js +7 -10
  57. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  58. package/lib/labs/VFileUpload/VFileUpload.js +7 -3
  59. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  60. package/lib/labs/entry-bundler.d.ts +0 -3
  61. package/package.json +1 -1
package/dist/vuetify.d.ts CHANGED
@@ -86,7 +86,6 @@ declare function useRtl(): {
86
86
 
87
87
  interface DateInstance extends DateModule.InternalAdapter {
88
88
  locale?: any;
89
- createDateRange: (start: unknown, stop?: unknown) => unknown[];
90
89
  }
91
90
  /** Supports module augmentation to specify date adapter types */
92
91
  declare namespace DateModule {
@@ -51075,6 +51074,7 @@ declare const VNumberInput: {
51075
51074
  "v-slot:increment"?: false | ((arg: ControlSlot$1) => vue.VNodeChild) | undefined;
51076
51075
  "v-slot:decrement"?: false | ((arg: ControlSlot$1) => vue.VNodeChild) | undefined;
51077
51076
  } & {
51077
+ "onUpdate:focused"?: ((val: boolean) => any) | undefined;
51078
51078
  "onUpdate:modelValue"?: ((val: number) => any) | undefined;
51079
51079
  }, Omit<Omit<{
51080
51080
  $: vue.ComponentInternalInstance;
@@ -53015,6 +53015,7 @@ declare const VNumberInput: {
53015
53015
  } | {};
53016
53016
  }) | {};
53017
53017
  }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
53018
+ 'update:focused': (val: boolean) => true;
53018
53019
  'update:modelValue': (val: number) => true;
53019
53020
  }, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, {
53020
53021
  flat: boolean;
@@ -53211,6 +53212,7 @@ declare const VNumberInput: {
53211
53212
  "v-slot:increment"?: false | ((arg: ControlSlot$1) => vue.VNodeChild) | undefined;
53212
53213
  "v-slot:decrement"?: false | ((arg: ControlSlot$1) => vue.VNodeChild) | undefined;
53213
53214
  } & {
53215
+ "onUpdate:focused"?: ((val: boolean) => any) | undefined;
53214
53216
  "onUpdate:modelValue"?: ((val: number) => any) | undefined;
53215
53217
  }, Omit<Omit<{
53216
53218
  $: vue.ComponentInternalInstance;
@@ -55324,6 +55326,7 @@ declare const VNumberInput: {
55324
55326
  "v-slot:increment"?: false | ((arg: ControlSlot$1) => vue.VNodeChild) | undefined;
55325
55327
  "v-slot:decrement"?: false | ((arg: ControlSlot$1) => vue.VNodeChild) | undefined;
55326
55328
  } & {
55329
+ "onUpdate:focused"?: ((val: boolean) => any) | undefined;
55327
55330
  "onUpdate:modelValue"?: ((val: number) => any) | undefined;
55328
55331
  }, Omit<Omit<{
55329
55332
  $: vue.ComponentInternalInstance;
@@ -57264,6 +57267,7 @@ declare const VNumberInput: {
57264
57267
  } | {};
57265
57268
  }) | {};
57266
57269
  }, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
57270
+ 'update:focused': (val: boolean) => true;
57267
57271
  'update:modelValue': (val: number) => true;
57268
57272
  }, string, {
57269
57273
  flat: boolean;
@@ -85816,7 +85820,6 @@ declare const createVuetify: {
85816
85820
  options: InternalDateOptions;
85817
85821
  instance: {
85818
85822
  locale?: any;
85819
- createDateRange: (start: unknown, stop?: unknown) => unknown[];
85820
85823
  date: (value?: any) => unknown;
85821
85824
  format: (date: unknown, formatString: string) => string;
85822
85825
  toJsDate: (value: unknown) => Date;
@@ -85860,8 +85863,6 @@ declare const createVuetify: {
85860
85863
  setHours: (date: unknown, hours: number) => unknown;
85861
85864
  getMinutes: (date: unknown) => number;
85862
85865
  setMinutes: (date: unknown, minutes: number) => unknown;
85863
- } & {
85864
- createDateRange(start: unknown, stop?: unknown): unknown[];
85865
85866
  };
85866
85867
  };
85867
85868
  goTo: GoToInstance;
@@ -85911,37 +85912,36 @@ declare module 'vue' {
85911
85912
  VAppBar: VAppBar
85912
85913
  VAppBarNavIcon: VAppBarNavIcon
85913
85914
  VAppBarTitle: VAppBarTitle
85915
+ VAutocomplete: VAutocomplete
85914
85916
  VAlert: VAlert
85915
85917
  VAlertTitle: VAlertTitle
85916
- VAutocomplete: VAutocomplete
85917
85918
  VAvatar: VAvatar
85918
- VBadge: VBadge
85919
85919
  VBanner: VBanner
85920
85920
  VBannerActions: VBannerActions
85921
85921
  VBannerText: VBannerText
85922
85922
  VBottomSheet: VBottomSheet
85923
- VBottomNavigation: VBottomNavigation
85923
+ VBadge: VBadge
85924
85924
  VBreadcrumbs: VBreadcrumbs
85925
85925
  VBreadcrumbsItem: VBreadcrumbsItem
85926
85926
  VBreadcrumbsDivider: VBreadcrumbsDivider
85927
+ VBottomNavigation: VBottomNavigation
85928
+ VBtnGroup: VBtnGroup
85929
+ VBtnToggle: VBtnToggle
85930
+ VCarousel: VCarousel
85931
+ VCarouselItem: VCarouselItem
85927
85932
  VBtn: VBtn
85933
+ VChipGroup: VChipGroup
85934
+ VChip: VChip
85935
+ VCheckbox: VCheckbox
85936
+ VCheckboxBtn: VCheckboxBtn
85928
85937
  VCard: VCard
85929
85938
  VCardActions: VCardActions
85930
85939
  VCardItem: VCardItem
85931
85940
  VCardSubtitle: VCardSubtitle
85932
85941
  VCardText: VCardText
85933
85942
  VCardTitle: VCardTitle
85934
- VCarousel: VCarousel
85935
- VCarouselItem: VCarouselItem
85936
- VChipGroup: VChipGroup
85937
85943
  VCode: VCode
85938
- VBtnToggle: VBtnToggle
85939
- VCheckbox: VCheckbox
85940
- VCheckboxBtn: VCheckboxBtn
85941
- VCombobox: VCombobox
85942
- VCounter: VCounter
85943
85944
  VColorPicker: VColorPicker
85944
- VBtnGroup: VBtnGroup
85945
85945
  VDataTable: VDataTable
85946
85946
  VDataTableHeaders: VDataTableHeaders
85947
85947
  VDataTableFooter: VDataTableFooter
@@ -85949,37 +85949,38 @@ declare module 'vue' {
85949
85949
  VDataTableRow: VDataTableRow
85950
85950
  VDataTableVirtual: VDataTableVirtual
85951
85951
  VDataTableServer: VDataTableServer
85952
- VChip: VChip
85953
- VEmptyState: VEmptyState
85952
+ VCombobox: VCombobox
85954
85953
  VDatePicker: VDatePicker
85955
85954
  VDatePickerControls: VDatePickerControls
85956
85955
  VDatePickerHeader: VDatePickerHeader
85957
85956
  VDatePickerMonth: VDatePickerMonth
85958
85957
  VDatePickerMonths: VDatePickerMonths
85959
85958
  VDatePickerYears: VDatePickerYears
85959
+ VCounter: VCounter
85960
+ VDialog: VDialog
85961
+ VEmptyState: VEmptyState
85960
85962
  VDivider: VDivider
85961
- VFab: VFab
85962
85963
  VExpansionPanels: VExpansionPanels
85963
85964
  VExpansionPanel: VExpansionPanel
85964
85965
  VExpansionPanelText: VExpansionPanelText
85965
85966
  VExpansionPanelTitle: VExpansionPanelTitle
85966
- VDialog: VDialog
85967
- VField: VField
85968
- VFieldLabel: VFieldLabel
85967
+ VFab: VFab
85969
85968
  VFileInput: VFileInput
85970
85969
  VFooter: VFooter
85971
- VInput: VInput
85970
+ VField: VField
85971
+ VFieldLabel: VFieldLabel
85972
85972
  VIcon: VIcon
85973
85973
  VComponentIcon: VComponentIcon
85974
85974
  VSvgIcon: VSvgIcon
85975
85975
  VLigatureIcon: VLigatureIcon
85976
85976
  VClassIcon: VClassIcon
85977
+ VImg: VImg
85978
+ VInput: VInput
85977
85979
  VInfiniteScroll: VInfiniteScroll
85980
+ VKbd: VKbd
85978
85981
  VItemGroup: VItemGroup
85979
85982
  VItem: VItem
85980
- VImg: VImg
85981
85983
  VLabel: VLabel
85982
- VKbd: VKbd
85983
85984
  VList: VList
85984
85985
  VListGroup: VListGroup
85985
85986
  VListImg: VListImg
@@ -85990,70 +85991,68 @@ declare module 'vue' {
85990
85991
  VListItemTitle: VListItemTitle
85991
85992
  VListSubheader: VListSubheader
85992
85993
  VMain: VMain
85993
- VNavigationDrawer: VNavigationDrawer
85994
- VMenu: VMenu
85995
85994
  VMessages: VMessages
85996
- VOtpInput: VOtpInput
85995
+ VMenu: VMenu
85997
85996
  VNumberInput: VNumberInput
85998
- VPagination: VPagination
85997
+ VNavigationDrawer: VNavigationDrawer
85998
+ VOtpInput: VOtpInput
85999
85999
  VProgressLinear: VProgressLinear
86000
86000
  VOverlay: VOverlay
86001
+ VPagination: VPagination
86002
+ VSelect: VSelect
86001
86003
  VProgressCircular: VProgressCircular
86002
86004
  VRadioGroup: VRadioGroup
86003
86005
  VRating: VRating
86004
- VSelectionControl: VSelectionControl
86005
- VSheet: VSheet
86006
- VSelect: VSelect
86007
- VSkeletonLoader: VSkeletonLoader
86008
86006
  VSelectionControlGroup: VSelectionControlGroup
86009
86007
  VSlideGroup: VSlideGroup
86010
86008
  VSlideGroupItem: VSlideGroupItem
86009
+ VSheet: VSheet
86010
+ VSelectionControl: VSelectionControl
86011
+ VSkeletonLoader: VSkeletonLoader
86011
86012
  VSlider: VSlider
86012
- VTextField: VTextField
86013
+ VSnackbar: VSnackbar
86013
86014
  VStepper: VStepper
86014
86015
  VStepperActions: VStepperActions
86015
86016
  VStepperHeader: VStepperHeader
86016
86017
  VStepperItem: VStepperItem
86017
86018
  VStepperWindow: VStepperWindow
86018
86019
  VStepperWindowItem: VStepperWindowItem
86020
+ VSwitch: VSwitch
86021
+ VTable: VTable
86019
86022
  VSystemBar: VSystemBar
86020
- VSnackbar: VSnackbar
86023
+ VTextarea: VTextarea
86024
+ VTextField: VTextField
86021
86025
  VTab: VTab
86022
86026
  VTabs: VTabs
86023
86027
  VTabsWindow: VTabsWindow
86024
86028
  VTabsWindowItem: VTabsWindowItem
86025
- VTextarea: VTextarea
86026
- VTable: VTable
86027
- VWindow: VWindow
86028
- VWindowItem: VWindowItem
86029
+ VTimeline: VTimeline
86030
+ VTimelineItem: VTimelineItem
86031
+ VTooltip: VTooltip
86029
86032
  VToolbar: VToolbar
86030
86033
  VToolbarTitle: VToolbarTitle
86031
86034
  VToolbarItems: VToolbarItems
86032
- VTooltip: VTooltip
86033
- VSwitch: VSwitch
86035
+ VWindow: VWindow
86036
+ VWindowItem: VWindowItem
86034
86037
  VConfirmEdit: VConfirmEdit
86035
- VDataIterator: VDataIterator
86036
86038
  VDefaultsProvider: VDefaultsProvider
86037
- VContainer: VContainer
86038
- VCol: VCol
86039
- VRow: VRow
86040
- VSpacer: VSpacer
86041
- VHover: VHover
86042
86039
  VForm: VForm
86043
- VLazy: VLazy
86040
+ VDataIterator: VDataIterator
86041
+ VHover: VHover
86044
86042
  VLayout: VLayout
86045
86043
  VLayoutItem: VLayoutItem
86046
86044
  VLocaleProvider: VLocaleProvider
86045
+ VLazy: VLazy
86047
86046
  VNoSsr: VNoSsr
86048
86047
  VParallax: VParallax
86048
+ VRadio: VRadio
86049
86049
  VRangeSlider: VRangeSlider
86050
86050
  VResponsive: VResponsive
86051
- VRadio: VRadio
86052
- VSparkline: VSparkline
86053
86051
  VSpeedDial: VSpeedDial
86052
+ VSparkline: VSparkline
86054
86053
  VThemeProvider: VThemeProvider
86055
- VValidation: VValidation
86056
86054
  VVirtualScroll: VVirtualScroll
86055
+ VValidation: VValidation
86057
86056
  VFabTransition: VFabTransition
86058
86057
  VDialogBottomTransition: VDialogBottomTransition
86059
86058
  VDialogTopTransition: VDialogTopTransition
@@ -86070,8 +86069,10 @@ declare module 'vue' {
86070
86069
  VExpandTransition: VExpandTransition
86071
86070
  VExpandXTransition: VExpandXTransition
86072
86071
  VDialogTransition: VDialogTransition
86073
- VTimeline: VTimeline
86074
- VTimelineItem: VTimelineItem
86072
+ VContainer: VContainer
86073
+ VCol: VCol
86074
+ VRow: VRow
86075
+ VSpacer: VSpacer
86075
86076
  VSnackbarQueue: VSnackbarQueue
86076
86077
  VCalendar: VCalendar
86077
86078
  VCalendarDay: VCalendarDay
@@ -86079,22 +86080,22 @@ declare module 'vue' {
86079
86080
  VCalendarInterval: VCalendarInterval
86080
86081
  VCalendarIntervalEvent: VCalendarIntervalEvent
86081
86082
  VCalendarMonthDay: VCalendarMonthDay
86082
- VPicker: VPicker
86083
- VPickerTitle: VPickerTitle
86083
+ VFileUpload: VFileUpload
86084
+ VFileUploadItem: VFileUploadItem
86084
86085
  VIconBtn: VIconBtn
86086
+ VColorInput: VColorInput
86085
86087
  VStepperVertical: VStepperVertical
86086
86088
  VStepperVerticalItem: VStepperVerticalItem
86087
86089
  VStepperVerticalActions: VStepperVerticalActions
86090
+ VPicker: VPicker
86091
+ VPickerTitle: VPickerTitle
86088
86092
  VTreeview: VTreeview
86089
86093
  VTreeviewItem: VTreeviewItem
86090
86094
  VTreeviewGroup: VTreeviewGroup
86091
- VColorInput: VColorInput
86092
- VFileUpload: VFileUpload
86093
- VFileUploadItem: VFileUploadItem
86094
86095
  VTimePicker: VTimePicker
86095
86096
  VTimePickerClock: VTimePickerClock
86096
86097
  VTimePickerControls: VTimePickerControls
86097
- VPullToRefresh: VPullToRefresh
86098
86098
  VDateInput: VDateInput
86099
+ VPullToRefresh: VPullToRefresh
86099
86100
  }
86100
86101
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.8-master.2025-06-06
2
+ * Vuetify v3.8.8-master.2025-06-08
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -12392,10 +12392,12 @@ const VTextField = genericComponent()({
12392
12392
  const inputRef = ref();
12393
12393
  const isActive = computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value || props.active);
12394
12394
  function onFocus() {
12395
- if (inputRef.value !== document.activeElement) {
12396
- inputRef.value?.focus();
12397
- }
12398
12395
  if (!isFocused.value) focus();
12396
+ nextTick(() => {
12397
+ if (inputRef.value !== document.activeElement) {
12398
+ inputRef.value?.focus();
12399
+ }
12400
+ });
12399
12401
  }
12400
12402
  function onControlMousedown(e) {
12401
12403
  emit('mousedown:control', e);
@@ -12404,7 +12406,6 @@ const VTextField = genericComponent()({
12404
12406
  e.preventDefault();
12405
12407
  }
12406
12408
  function onControlClick(e) {
12407
- onFocus();
12408
12409
  emit('click:control', e);
12409
12410
  }
12410
12411
  function onClear(e, reset) {
@@ -16533,7 +16534,7 @@ const VSliderThumb = genericComponent()({
16533
16534
  default: () => [withDirectives(createElementVNode("div", {
16534
16535
  "class": "v-slider-thumb__label-container"
16535
16536
  }, [createElementVNode("div", {
16536
- "class": normalizeClass(['v-slider-thumb__label'])
16537
+ "class": normalizeClass(['v-slider-thumb__label', textColorClasses.value])
16537
16538
  }, [createElementVNode("div", null, [slots['thumb-label']?.({
16538
16539
  modelValue: props.modelValue
16539
16540
  }) ?? props.modelValue.toFixed(step.value ? decimals.value : 1)])])]), [[vShow, thumbLabel.value && props.focused || thumbLabel.value === 'always']])]
@@ -18105,6 +18106,18 @@ function createDate(options, locale) {
18105
18106
  instance: createInstance(_options, locale)
18106
18107
  };
18107
18108
  }
18109
+ function createDateRange(adapter, start, stop) {
18110
+ const diff = adapter.getDiff(stop ?? start, start, 'days');
18111
+ const datesInRange = [start];
18112
+ for (let i = 1; i < diff; i++) {
18113
+ const nextDate = adapter.addDays(start, i);
18114
+ datesInRange.push(nextDate);
18115
+ }
18116
+ if (stop) {
18117
+ datesInRange.push(adapter.endOfDay(stop));
18118
+ }
18119
+ return datesInRange;
18120
+ }
18108
18121
  function createInstance(options, locale) {
18109
18122
  const instance = reactive(typeof options.adapter === 'function'
18110
18123
  // eslint-disable-next-line new-cap
@@ -18115,20 +18128,7 @@ function createInstance(options, locale) {
18115
18128
  watch(locale.current, value => {
18116
18129
  instance.locale = options.locale[value] ?? value ?? instance.locale;
18117
18130
  });
18118
- return Object.assign(instance, {
18119
- createDateRange(start, stop) {
18120
- const diff = instance.getDiff(stop ?? start, start, 'days');
18121
- const datesInRange = [start];
18122
- for (let i = 1; i < diff; i++) {
18123
- const nextDate = instance.addDays(start, i);
18124
- datesInRange.push(nextDate);
18125
- }
18126
- if (stop) {
18127
- datesInRange.push(instance.endOfDay(stop));
18128
- }
18129
- return datesInRange;
18130
- }
18131
- });
18131
+ return instance;
18132
18132
  }
18133
18133
  function useDate() {
18134
18134
  const options = inject$1(DateOptionsSymbol);
@@ -20217,7 +20217,9 @@ const VDataTableFooter = genericComponent()({
20217
20217
  "class": "v-data-table-footer"
20218
20218
  }, [slots.prepend?.(), createElementVNode("div", {
20219
20219
  "class": "v-data-table-footer__items-per-page"
20220
- }, [createElementVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
20220
+ }, [createElementVNode("span", {
20221
+ "aria-label": t(props.itemsPerPageText)
20222
+ }, [t(props.itemsPerPageText)]), createVNode(VSelect, {
20221
20223
  "items": itemsPerPageOptions.value,
20222
20224
  "modelValue": itemsPerPage.value,
20223
20225
  "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
@@ -20269,6 +20271,7 @@ const VDataTableColumn = defineFunctionalComponent({
20269
20271
  } = _ref;
20270
20272
  const Tag = props.tag ?? 'td';
20271
20273
  return createVNode(Tag, {
20274
+ "tabindex": "0",
20272
20275
  "class": normalizeClass(['v-data-table__td', {
20273
20276
  'v-data-table-column--fixed': props.fixed,
20274
20277
  'v-data-table-column--last-fixed': props.lastFixed,
@@ -20613,6 +20616,11 @@ const VDataTableHeaders = genericComponent()({
20613
20616
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20614
20617
  };
20615
20618
  }
20619
+ function handleEnterKeyPress(event, column) {
20620
+ if (event.key === 'Enter' && !props.disableSort) {
20621
+ toggleSort(column);
20622
+ }
20623
+ }
20616
20624
  function getSortIcon(column) {
20617
20625
  const item = sortBy.value.find(item => item.key === column.key);
20618
20626
  if (!item) return props.sortAscIcon;
@@ -20669,7 +20677,9 @@ const VDataTableHeaders = genericComponent()({
20669
20677
  "nowrap": column.nowrap,
20670
20678
  "lastFixed": column.lastFixed,
20671
20679
  "noPadding": noPadding
20672
- }, headerProps), {
20680
+ }, headerProps, {
20681
+ "onKeydown": event => column.sortable && handleEnterKeyPress(event, column)
20682
+ }), {
20673
20683
  default: () => {
20674
20684
  const columnSlotName = `header.${column.key}`;
20675
20685
  const columnSlotProps = {
@@ -22522,7 +22532,7 @@ const VDatePickerMonth = genericComponent()({
22522
22532
  } else {
22523
22533
  rangeStop.value = adapter.endOfDay(_value);
22524
22534
  }
22525
- model.value = adapter.createDateRange(rangeStart.value, rangeStop.value);
22535
+ model.value = createDateRange(adapter, rangeStart.value, rangeStop.value);
22526
22536
  } else {
22527
22537
  rangeStart.value = value;
22528
22538
  rangeStop.value = undefined;
@@ -23609,6 +23619,56 @@ const VFab = genericComponent()({
23609
23619
 
23610
23620
  // Types
23611
23621
 
23622
+ function useFileDrop() {
23623
+ function hasFilesOrFolders(e) {
23624
+ const entries = [...(e.dataTransfer?.items ?? [])].filter(x => x.kind === 'file').map(x => x.webkitGetAsEntry()).filter(Boolean);
23625
+ return entries.length > 0 || [...(e.dataTransfer?.files ?? [])].length > 0;
23626
+ }
23627
+ async function handleDrop(e) {
23628
+ const result = [];
23629
+ const entries = [...(e.dataTransfer?.items ?? [])].filter(x => x.kind === 'file').map(x => x.webkitGetAsEntry()).filter(Boolean);
23630
+ if (entries.length) {
23631
+ for (const entry of entries) {
23632
+ const files = await traverseFileTree(entry, appendIfDirectory('.', entry));
23633
+ result.push(...files.map(x => x.file));
23634
+ }
23635
+ } else {
23636
+ result.push(...[...(e.dataTransfer?.files ?? [])]);
23637
+ }
23638
+ return result;
23639
+ }
23640
+ return {
23641
+ handleDrop,
23642
+ hasFilesOrFolders
23643
+ };
23644
+ }
23645
+ function traverseFileTree(item) {
23646
+ let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
23647
+ return new Promise((resolve, reject) => {
23648
+ if (item.isFile) {
23649
+ const fileEntry = item;
23650
+ fileEntry.file(file => resolve([{
23651
+ file,
23652
+ path
23653
+ }]), reject);
23654
+ } else if (item.isDirectory) {
23655
+ const directoryReader = item.createReader();
23656
+ directoryReader.readEntries(async entries => {
23657
+ const files = [];
23658
+ for (const entry of entries) {
23659
+ files.push(...(await traverseFileTree(entry, appendIfDirectory(path, entry))));
23660
+ }
23661
+ resolve(files);
23662
+ });
23663
+ }
23664
+ });
23665
+ }
23666
+ function appendIfDirectory(path, item) {
23667
+ return item.isDirectory ? `${path}/${item.name}` : path;
23668
+ }
23669
+
23670
+ // Types
23671
+
23612
23672
  const makeVFileInputProps = propsFactory({
23613
23673
  chips: Boolean,
23614
23674
  counter: Boolean,
@@ -23693,6 +23753,10 @@ const VFileInput = genericComponent()({
23693
23753
  const isActive = toRef(() => isFocused.value || props.active);
23694
23754
  const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));
23695
23755
  const isDragging = shallowRef(false);
23756
+ const {
23757
+ handleDrop,
23758
+ hasFilesOrFolders
23759
+ } = useFileDrop();
23696
23760
  function onFocus() {
23697
23761
  if (inputRef.value !== document.activeElement) {
23698
23762
  inputRef.value?.focus();
@@ -23726,13 +23790,13 @@ const VFileInput = genericComponent()({
23726
23790
  e.preventDefault();
23727
23791
  isDragging.value = false;
23728
23792
  }
23729
- function onDrop(e) {
23793
+ async function onDrop(e) {
23730
23794
  e.preventDefault();
23731
23795
  e.stopImmediatePropagation();
23732
23796
  isDragging.value = false;
23733
- if (!e.dataTransfer?.files?.length || !inputRef.value) return;
23797
+ if (!inputRef.value || !hasFilesOrFolders(e)) return;
23734
23798
  const dataTransfer = new DataTransfer();
23735
- for (const file of e.dataTransfer.files) {
23799
+ for (const file of await handleDrop(e)) {
23736
23800
  dataTransfer.items.add(file);
23737
23801
  }
23738
23802
  inputRef.value.files = dataTransfer.files;
@@ -25163,6 +25227,7 @@ const VNumberInput = genericComponent()({
25163
25227
  ...makeVNumberInputProps()
25164
25228
  },
25165
25229
  emits: {
25230
+ 'update:focused': val => true,
25166
25231
  'update:modelValue': val => true
25167
25232
  },
25168
25233
  setup(props, _ref) {
@@ -25178,11 +25243,7 @@ const VNumberInput = genericComponent()({
25178
25243
  });
25179
25244
  const form = useForm(props);
25180
25245
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
25181
- const {
25182
- isFocused,
25183
- focus,
25184
- blur
25185
- } = useFocus(props);
25246
+ const isFocused = shallowRef(props.focused);
25186
25247
  function correctPrecision(val) {
25187
25248
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25188
25249
  const fixed = precision == null ? String(val) : val.toFixed(precision);
@@ -25367,11 +25428,9 @@ const VNumberInput = genericComponent()({
25367
25428
  inputText.value = model.value.toString();
25368
25429
  }
25369
25430
  function onFocus() {
25370
- focus();
25371
25431
  trimDecimalZeros();
25372
25432
  }
25373
25433
  function onBlur() {
25374
- blur();
25375
25434
  clampModel();
25376
25435
  }
25377
25436
  useRender(() => {
@@ -25464,9 +25523,12 @@ const VNumberInput = genericComponent()({
25464
25523
  }, null)]) : props.reverse && controlVariant.value !== 'hidden' ? createElementVNode(Fragment, null, [controlNode(), dividerNode()]) : undefined;
25465
25524
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
25466
25525
  return createVNode(VTextField, mergeProps({
25467
- "ref": vTextFieldRef,
25526
+ "ref": vTextFieldRef
25527
+ }, textFieldProps, {
25468
25528
  "modelValue": inputText.value,
25469
25529
  "onUpdate:modelValue": $event => inputText.value = $event,
25530
+ "focused": isFocused.value,
25531
+ "onUpdate:focused": $event => isFocused.value = $event,
25470
25532
  "validationValue": model.value,
25471
25533
  "onBeforeinput": onBeforeinput,
25472
25534
  "onFocus": onFocus,
@@ -25479,8 +25541,7 @@ const VNumberInput = genericComponent()({
25479
25541
  'v-number-input--reverse': props.reverse,
25480
25542
  'v-number-input--split': controlVariant.value === 'split',
25481
25543
  'v-number-input--stacked': controlVariant.value === 'stacked'
25482
- }, props.class]
25483
- }, textFieldProps, {
25544
+ }, props.class],
25484
25545
  "style": props.style,
25485
25546
  "inputmode": "decimal"
25486
25547
  }), {
@@ -25615,7 +25676,7 @@ const VOtpInput = genericComponent()({
25615
25676
  function onPaste(index, e) {
25616
25677
  e.preventDefault();
25617
25678
  e.stopPropagation();
25618
- const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
25679
+ const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
25619
25680
  if (isValidNumber(clipboardText)) return;
25620
25681
  model.value = clipboardText.split('');
25621
25682
  inputRef.value?.[index].blur();
@@ -25647,7 +25708,10 @@ const VOtpInput = genericComponent()({
25647
25708
  scoped: true
25648
25709
  });
25649
25710
  watch(model, val => {
25650
- if (val.length === length.value) emit('finish', val.join(''));
25711
+ if (val.length === length.value) {
25712
+ focusIndex.value = length.value - 1;
25713
+ emit('finish', val.join(''));
25714
+ }
25651
25715
  }, {
25652
25716
  deep: true
25653
25717
  });
@@ -29400,7 +29464,7 @@ function createVuetify$1() {
29400
29464
  };
29401
29465
  });
29402
29466
  }
29403
- const version$1 = "3.8.8-master.2025-06-06";
29467
+ const version$1 = "3.8.8-master.2025-06-08";
29404
29468
  createVuetify$1.version = version$1;
29405
29469
 
29406
29470
  // Vue's inject() can only be used in setup
@@ -29425,7 +29489,7 @@ const createVuetify = function () {
29425
29489
  ...options
29426
29490
  });
29427
29491
  };
29428
- const version = "3.8.8-master.2025-06-06";
29492
+ const version = "3.8.8-master.2025-06-08";
29429
29493
  createVuetify.version = version;
29430
29494
 
29431
29495
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };