vuetify 3.10.9 → 3.10.10

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 (57) hide show
  1. package/dist/json/attributes.json +3507 -3507
  2. package/dist/json/importMap-labs.json +22 -22
  3. package/dist/json/importMap.json +170 -170
  4. package/dist/json/web-types.json +6186 -6186
  5. package/dist/vuetify-labs.cjs +201 -213
  6. package/dist/vuetify-labs.css +5293 -5301
  7. package/dist/vuetify-labs.d.ts +79 -79
  8. package/dist/vuetify-labs.esm.js +201 -213
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +201 -213
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.cjs +133 -96
  13. package/dist/vuetify.cjs.map +1 -1
  14. package/dist/vuetify.css +3094 -3090
  15. package/dist/vuetify.d.ts +63 -63
  16. package/dist/vuetify.esm.js +133 -96
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +133 -96
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +332 -328
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/components/VAvatar/VAvatar.css +1 -1
  24. package/lib/components/VAvatar/_variables.scss +1 -1
  25. package/lib/components/VBtnToggle/VBtnToggle.sass +1 -1
  26. package/lib/components/VCard/VCard.js +8 -1
  27. package/lib/components/VCard/VCard.js.map +1 -1
  28. package/lib/components/VDatePicker/VDatePicker.js +7 -16
  29. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  30. package/lib/components/VTextField/VTextField.js +17 -7
  31. package/lib/components/VTextField/VTextField.js.map +1 -1
  32. package/lib/components/VTextarea/VTextarea.js +17 -7
  33. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  34. package/lib/composables/calendar.d.ts +6 -0
  35. package/lib/composables/calendar.js +37 -2
  36. package/lib/composables/calendar.js.map +1 -1
  37. package/lib/composables/delay.js +3 -2
  38. package/lib/composables/delay.js.map +1 -1
  39. package/lib/composables/hotkey/hotkey.js +42 -53
  40. package/lib/composables/hotkey/hotkey.js.map +1 -1
  41. package/lib/entry-bundler.js +1 -1
  42. package/lib/entry-bundler.js.map +1 -1
  43. package/lib/framework.d.ts +63 -63
  44. package/lib/framework.js +1 -1
  45. package/lib/framework.js.map +1 -1
  46. package/lib/labs/VDateInput/VDateInput.js +8 -12
  47. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  48. package/lib/labs/VHotkey/VHotkey.css +4 -16
  49. package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
  50. package/lib/labs/VHotkey/VHotkey.js +62 -106
  51. package/lib/labs/VHotkey/VHotkey.js.map +1 -1
  52. package/lib/labs/VHotkey/VHotkey.scss +8 -25
  53. package/lib/styles/main.css +4 -0
  54. package/lib/styles/settings/_variables.scss +1 -0
  55. package/lib/util/box.js +3 -8
  56. package/lib/util/box.js.map +1 -1
  57. package/package.json +1 -1
package/dist/vuetify.d.ts CHANGED
@@ -105773,38 +105773,39 @@ declare module 'vue' {
105773
105773
  VAppBar: VAppBar
105774
105774
  VAppBarNavIcon: VAppBarNavIcon
105775
105775
  VAppBarTitle: VAppBarTitle
105776
+ VApp: VApp
105777
+ VBadge: VBadge
105778
+ VBottomSheet: VBottomSheet
105779
+ VAutocomplete: VAutocomplete
105776
105780
  VAlert: VAlert
105777
105781
  VAlertTitle: VAlertTitle
105778
- VAvatar: VAvatar
105779
- VAutocomplete: VAutocomplete
105780
- VBadge: VBadge
105781
- VApp: VApp
105782
- VBanner: VBanner
105783
- VBannerActions: VBannerActions
105784
- VBannerText: VBannerText
105785
105782
  VBottomNavigation: VBottomNavigation
105786
- VBottomSheet: VBottomSheet
105787
- VBtn: VBtn
105783
+ VAvatar: VAvatar
105788
105784
  VBreadcrumbs: VBreadcrumbs
105789
105785
  VBreadcrumbsItem: VBreadcrumbsItem
105790
105786
  VBreadcrumbsDivider: VBreadcrumbsDivider
105791
- VBtnToggle: VBtnToggle
105792
105787
  VBtnGroup: VBtnGroup
105788
+ VBanner: VBanner
105789
+ VBannerActions: VBannerActions
105790
+ VBannerText: VBannerText
105791
+ VBtn: VBtn
105793
105792
  VCode: VCode
105794
- VCheckbox: VCheckbox
105795
- VCheckboxBtn: VCheckboxBtn
105796
- VChip: VChip
105797
- VCarousel: VCarousel
105798
- VCarouselItem: VCarouselItem
105799
- VColorPicker: VColorPicker
105793
+ VBtnToggle: VBtnToggle
105800
105794
  VCard: VCard
105801
105795
  VCardActions: VCardActions
105802
105796
  VCardItem: VCardItem
105803
105797
  VCardSubtitle: VCardSubtitle
105804
105798
  VCardText: VCardText
105805
105799
  VCardTitle: VCardTitle
105806
- VCombobox: VCombobox
105800
+ VCarousel: VCarousel
105801
+ VCarouselItem: VCarouselItem
105802
+ VChip: VChip
105807
105803
  VChipGroup: VChipGroup
105804
+ VCheckbox: VCheckbox
105805
+ VCheckboxBtn: VCheckboxBtn
105806
+ VCombobox: VCombobox
105807
+ VFab: VFab
105808
+ VCounter: VCounter
105808
105809
  VDataTable: VDataTable
105809
105810
  VDataTableHeaders: VDataTableHeaders
105810
105811
  VDataTableFooter: VDataTableFooter
@@ -105812,38 +105813,41 @@ declare module 'vue' {
105812
105813
  VDataTableRow: VDataTableRow
105813
105814
  VDataTableVirtual: VDataTableVirtual
105814
105815
  VDataTableServer: VDataTableServer
105815
- VCounter: VCounter
105816
+ VColorPicker: VColorPicker
105817
+ VDialog: VDialog
105816
105818
  VDivider: VDivider
105819
+ VFooter: VFooter
105820
+ VExpansionPanels: VExpansionPanels
105821
+ VExpansionPanel: VExpansionPanel
105822
+ VExpansionPanelText: VExpansionPanelText
105823
+ VExpansionPanelTitle: VExpansionPanelTitle
105817
105824
  VDatePicker: VDatePicker
105818
105825
  VDatePickerControls: VDatePickerControls
105819
105826
  VDatePickerHeader: VDatePickerHeader
105820
105827
  VDatePickerMonth: VDatePickerMonth
105821
105828
  VDatePickerMonths: VDatePickerMonths
105822
105829
  VDatePickerYears: VDatePickerYears
105823
- VExpansionPanels: VExpansionPanels
105824
- VExpansionPanel: VExpansionPanel
105825
- VExpansionPanelText: VExpansionPanelText
105826
- VExpansionPanelTitle: VExpansionPanelTitle
105827
- VEmptyState: VEmptyState
105828
- VFileInput: VFileInput
105829
- VFab: VFab
105830
105830
  VField: VField
105831
105831
  VFieldLabel: VFieldLabel
105832
+ VEmptyState: VEmptyState
105833
+ VFileInput: VFileInput
105834
+ VImg: VImg
105832
105835
  VIcon: VIcon
105833
105836
  VComponentIcon: VComponentIcon
105834
105837
  VSvgIcon: VSvgIcon
105835
105838
  VLigatureIcon: VLigatureIcon
105836
105839
  VClassIcon: VClassIcon
105837
- VFooter: VFooter
105840
+ VItemGroup: VItemGroup
105841
+ VItem: VItem
105842
+ VKbd: VKbd
105838
105843
  VLabel: VLabel
105839
- VImg: VImg
105840
105844
  VInfiniteScroll: VInfiniteScroll
105841
- VInput: VInput
105842
- VKbd: VKbd
105843
105845
  VMain: VMain
105844
- VItemGroup: VItemGroup
105845
- VItem: VItem
105846
- VDialog: VDialog
105846
+ VInput: VInput
105847
+ VMenu: VMenu
105848
+ VNavigationDrawer: VNavigationDrawer
105849
+ VOverlay: VOverlay
105850
+ VMessages: VMessages
105847
105851
  VList: VList
105848
105852
  VListGroup: VListGroup
105849
105853
  VListImg: VListImg
@@ -105853,53 +105857,49 @@ declare module 'vue' {
105853
105857
  VListItemSubtitle: VListItemSubtitle
105854
105858
  VListItemTitle: VListItemTitle
105855
105859
  VListSubheader: VListSubheader
105856
- VMenu: VMenu
105857
- VMessages: VMessages
105858
- VNavigationDrawer: VNavigationDrawer
105859
- VNumberInput: VNumberInput
105860
105860
  VOtpInput: VOtpInput
105861
+ VNumberInput: VNumberInput
105861
105862
  VPagination: VPagination
105862
- VRadioGroup: VRadioGroup
105863
- VOverlay: VOverlay
105864
105863
  VProgressCircular: VProgressCircular
105864
+ VRadioGroup: VRadioGroup
105865
105865
  VProgressLinear: VProgressLinear
105866
- VSelectionControlGroup: VSelectionControlGroup
105867
- VRating: VRating
105868
105866
  VSelect: VSelect
105867
+ VRating: VRating
105869
105868
  VSelectionControl: VSelectionControl
105870
- VSkeletonLoader: VSkeletonLoader
105871
- VSheet: VSheet
105872
105869
  VSlideGroup: VSlideGroup
105873
105870
  VSlideGroupItem: VSlideGroupItem
105871
+ VSelectionControlGroup: VSelectionControlGroup
105872
+ VSheet: VSheet
105873
+ VSlider: VSlider
105874
+ VSkeletonLoader: VSkeletonLoader
105875
+ VSnackbar: VSnackbar
105874
105876
  VStepper: VStepper
105875
105877
  VStepperActions: VStepperActions
105876
105878
  VStepperHeader: VStepperHeader
105877
105879
  VStepperItem: VStepperItem
105878
105880
  VStepperWindow: VStepperWindow
105879
105881
  VStepperWindowItem: VStepperWindowItem
105880
- VSnackbar: VSnackbar
105881
- VSlider: VSlider
105882
- VSwitch: VSwitch
105883
105882
  VTab: VTab
105884
105883
  VTabs: VTabs
105885
105884
  VTabsWindow: VTabsWindow
105886
105885
  VTabsWindowItem: VTabsWindowItem
105886
+ VSwitch: VSwitch
105887
105887
  VSystemBar: VSystemBar
105888
- VTextField: VTextField
105889
- VTextarea: VTextarea
105890
105888
  VTable: VTable
105891
- VTimeline: VTimeline
105892
- VTimelineItem: VTimelineItem
105893
- VToolbar: VToolbar
105894
- VToolbarTitle: VToolbarTitle
105895
- VToolbarItems: VToolbarItems
105889
+ VTextarea: VTextarea
105896
105890
  VTimePicker: VTimePicker
105897
105891
  VTimePickerClock: VTimePickerClock
105898
105892
  VTimePickerControls: VTimePickerControls
105893
+ VTextField: VTextField
105894
+ VToolbar: VToolbar
105895
+ VToolbarTitle: VToolbarTitle
105896
+ VToolbarItems: VToolbarItems
105897
+ VTimeline: VTimeline
105898
+ VTimelineItem: VTimelineItem
105899
+ VTooltip: VTooltip
105899
105900
  VTreeview: VTreeview
105900
105901
  VTreeviewItem: VTreeviewItem
105901
105902
  VTreeviewGroup: VTreeviewGroup
105902
- VTooltip: VTooltip
105903
105903
  VWindow: VWindow
105904
105904
  VWindowItem: VWindowItem
105905
105905
  VConfirmEdit: VConfirmEdit
@@ -105910,18 +105910,18 @@ declare module 'vue' {
105910
105910
  VCol: VCol
105911
105911
  VRow: VRow
105912
105912
  VSpacer: VSpacer
105913
- VLazy: VLazy
105914
- VHover: VHover
105915
- VLocaleProvider: VLocaleProvider
105916
105913
  VLayout: VLayout
105917
105914
  VLayoutItem: VLayoutItem
105915
+ VHover: VHover
105916
+ VLazy: VLazy
105917
+ VLocaleProvider: VLocaleProvider
105918
105918
  VNoSsr: VNoSsr
105919
105919
  VParallax: VParallax
105920
105920
  VRadio: VRadio
105921
105921
  VRangeSlider: VRangeSlider
105922
105922
  VResponsive: VResponsive
105923
- VSparkline: VSparkline
105924
105923
  VSnackbarQueue: VSnackbarQueue
105924
+ VSparkline: VSparkline
105925
105925
  VSpeedDial: VSpeedDial
105926
105926
  VThemeProvider: VThemeProvider
105927
105927
  VVirtualScroll: VVirtualScroll
@@ -105942,23 +105942,23 @@ declare module 'vue' {
105942
105942
  VExpandTransition: VExpandTransition
105943
105943
  VExpandXTransition: VExpandXTransition
105944
105944
  VDialogTransition: VDialogTransition
105945
+ VCalendar: VCalendar
105946
+ VIconBtn: VIconBtn
105945
105947
  VFileUpload: VFileUpload
105946
105948
  VFileUploadItem: VFileUploadItem
105949
+ VStepperVertical: VStepperVertical
105950
+ VStepperVerticalItem: VStepperVerticalItem
105951
+ VStepperVerticalActions: VStepperVerticalActions
105947
105952
  VColorInput: VColorInput
105948
- VIconBtn: VIconBtn
105949
- VCalendar: VCalendar
105953
+ VHotkey: VHotkey
105950
105954
  VPicker: VPicker
105951
105955
  VPickerTitle: VPickerTitle
105952
105956
  VPie: VPie
105953
105957
  VPieSegment: VPieSegment
105954
105958
  VPieTooltip: VPieTooltip
105955
- VStepperVertical: VStepperVertical
105956
- VStepperVerticalItem: VStepperVerticalItem
105957
- VStepperVerticalActions: VStepperVerticalActions
105958
105959
  VVideo: VVideo
105959
105960
  VVideoControls: VVideoControls
105960
105961
  VVideoVolume: VVideoVolume
105961
- VHotkey: VHotkey
105962
105962
  VDateInput: VDateInput
105963
105963
  VMaskInput: VMaskInput
105964
105964
  VPullToRefresh: VPullToRefresh
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.10.9
2
+ * Vuetify v3.10.10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -609,7 +609,8 @@ function getAxis(anchor) {
609
609
  class Box {
610
610
  constructor(args) {
611
611
  const pageScale = document.body.currentCSSZoom ?? 1;
612
- const factor = args instanceof DOMRect ? 1 + (1 - pageScale) / pageScale : 1;
612
+ const ignoreZoom = args.top === undefined; // detect DOMRect without breaking in jsdom
613
+ const factor = ignoreZoom ? 1 : 1 + (1 - pageScale) / pageScale;
613
614
  const {
614
615
  x,
615
616
  y,
@@ -679,13 +680,7 @@ function getElementBox(el) {
679
680
  });
680
681
  }
681
682
  } else {
682
- const rect = el.getBoundingClientRect();
683
- return new Box({
684
- x: rect.x,
685
- y: rect.y,
686
- width: el.clientWidth,
687
- height: el.clientHeight
688
- });
683
+ return new Box(el.getBoundingClientRect());
689
684
  }
690
685
  }
691
686
 
@@ -11571,9 +11566,10 @@ function useDelay(props, cb) {
11571
11566
  let clearDelay = () => {};
11572
11567
  function runDelay(isOpening, options) {
11573
11568
  clearDelay?.();
11574
- const delay = Math.max(options?.minDelay ?? 0, Number(isOpening ? props.openDelay : props.closeDelay));
11569
+ const delay = isOpening ? props.openDelay : props.closeDelay;
11570
+ const normalizedDelay = Math.max(options?.minDelay ?? 0, Number(delay ?? 0));
11575
11571
  return new Promise(resolve => {
11576
- clearDelay = defer(delay, () => {
11572
+ clearDelay = defer(normalizedDelay, () => {
11577
11573
  cb?.(isOpening);
11578
11574
  resolve(isOpening);
11579
11575
  });
@@ -13080,14 +13076,24 @@ const VTextField = genericComponent()({
13080
13076
  }
13081
13077
  function onInput(e) {
13082
13078
  const el = e.target;
13083
- model.value = el.value;
13084
- if (props.modelModifiers?.trim && ['text', 'search', 'password', 'tel', 'url'].includes(props.type)) {
13085
- const caretPosition = [el.selectionStart, el.selectionEnd];
13086
- nextTick(() => {
13087
- el.selectionStart = caretPosition[0];
13088
- el.selectionEnd = caretPosition[1];
13089
- });
13079
+ if (!(props.modelModifiers?.trim && ['text', 'search', 'password', 'tel', 'url'].includes(props.type))) {
13080
+ model.value = el.value;
13081
+ return;
13090
13082
  }
13083
+ const value = el.value;
13084
+ const start = el.selectionStart;
13085
+ const end = el.selectionEnd;
13086
+ model.value = value;
13087
+ nextTick(() => {
13088
+ let offset = 0;
13089
+ if (value.trimStart().length === el.value.length) {
13090
+ // #22307 - Whitespace has been removed from the
13091
+ // start, offset the caret position to compensate
13092
+ offset = value.length - el.value.length;
13093
+ }
13094
+ if (start != null) el.selectionStart = start - offset;
13095
+ if (end != null) el.selectionEnd = end - offset;
13096
+ });
13091
13097
  }
13092
13098
  useRender(() => {
13093
13099
  const hasCounter = !!(slots.counter || props.counter !== false && props.counter != null);
@@ -15814,6 +15820,12 @@ const VCard = genericComponent()({
15814
15820
  roundedClasses
15815
15821
  } = useRounded(props);
15816
15822
  const link = useLink(props, attrs);
15823
+ const loadingColor = shallowRef(undefined);
15824
+ watch(() => props.loading, (val, old) => {
15825
+ loadingColor.value = !val && typeof old === 'string' ? old : typeof val === 'boolean' ? undefined : val;
15826
+ }, {
15827
+ immediate: true
15828
+ });
15817
15829
  useRender(() => {
15818
15830
  const isLink = props.link !== false && link.isLink.value;
15819
15831
  const isClickable = !props.disabled && props.link !== false && (props.link || link.isClickable.value);
@@ -15856,7 +15868,7 @@ const VCard = genericComponent()({
15856
15868
  }, slots.image)]), createVNode(LoaderSlot, {
15857
15869
  "name": "v-card",
15858
15870
  "active": !!props.loading,
15859
- "color": typeof props.loading === 'boolean' ? undefined : props.loading
15871
+ "color": loadingColor.value
15860
15872
  }, {
15861
15873
  default: slots.loader
15862
15874
  }), hasCardItem && createVNode(VCardItem, {
@@ -19279,11 +19291,6 @@ function useHotkey(keys, callback) {
19279
19291
  let keyGroups;
19280
19292
  let isSequence = false;
19281
19293
  let groupIndex = 0;
19282
- function clearTimer() {
19283
- if (!timeout) return;
19284
- clearTimeout(timeout);
19285
- timeout = 0;
19286
- }
19287
19294
  function isInputFocused() {
19288
19295
  if (toValue(inputs)) return false;
19289
19296
  const activeElement = document.activeElement;
@@ -19291,12 +19298,12 @@ function useHotkey(keys, callback) {
19291
19298
  }
19292
19299
  function resetSequence() {
19293
19300
  groupIndex = 0;
19294
- clearTimer();
19301
+ clearTimeout(timeout);
19295
19302
  }
19296
19303
  function handler(e) {
19297
19304
  const group = keyGroups[groupIndex];
19298
19305
  if (!group || isInputFocused()) return;
19299
- if (!matchesKeyGroup(e, group)) {
19306
+ if (!matchesKeyGroup(e, group, isMac)) {
19300
19307
  if (isSequence) resetSequence();
19301
19308
  return;
19302
19309
  }
@@ -19305,7 +19312,7 @@ function useHotkey(keys, callback) {
19305
19312
  callback(e);
19306
19313
  return;
19307
19314
  }
19308
- clearTimer();
19315
+ clearTimeout(timeout);
19309
19316
  groupIndex++;
19310
19317
  if (groupIndex === keyGroups.length) {
19311
19318
  callback(e);
@@ -19316,12 +19323,12 @@ function useHotkey(keys, callback) {
19316
19323
  }
19317
19324
  function cleanup() {
19318
19325
  window.removeEventListener(toValue(event), handler);
19319
- clearTimer();
19326
+ clearTimeout(timeout);
19320
19327
  }
19321
- watch(() => toValue(keys), function (unrefKeys) {
19328
+ watch(() => toValue(keys), newKeys => {
19322
19329
  cleanup();
19323
- if (unrefKeys) {
19324
- const groups = splitKeySequence(unrefKeys.toLowerCase());
19330
+ if (newKeys) {
19331
+ const groups = splitKeySequence(newKeys.toLowerCase());
19325
19332
  isSequence = groups.length > 1;
19326
19333
  keyGroups = groups;
19327
19334
  resetSequence();
@@ -19332,55 +19339,50 @@ function useHotkey(keys, callback) {
19332
19339
  });
19333
19340
 
19334
19341
  // Watch for changes in the event type to re-register the listener
19335
- watch(() => toValue(event), function (newEvent, oldEvent) {
19342
+ watch(() => toValue(event), (newEvent, oldEvent) => {
19336
19343
  if (oldEvent && keyGroups && keyGroups.length > 0) {
19337
19344
  window.removeEventListener(oldEvent, handler);
19338
19345
  window.addEventListener(newEvent, handler);
19339
19346
  }
19340
19347
  });
19341
- try {
19342
- getCurrentInstance('useHotkey');
19343
- onBeforeUnmount(cleanup);
19344
- } catch {
19345
- // Not in Vue setup context
19346
- }
19347
- function parseKeyGroup(group) {
19348
- const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd'];
19348
+ onScopeDispose(cleanup, true);
19349
+ return cleanup;
19350
+ }
19351
+ function matchesKeyGroup(e, group, isMac) {
19352
+ const {
19353
+ modifiers,
19354
+ actualKey
19355
+ } = parseKeyGroup(group);
19356
+ const expectCtrl = modifiers.ctrl || !isMac && (modifiers.cmd || modifiers.meta);
19357
+ const expectMeta = isMac && (modifiers.cmd || modifiers.meta);
19358
+ return e.ctrlKey === expectCtrl && e.metaKey === expectMeta && e.shiftKey === modifiers.shift && e.altKey === modifiers.alt && e.key.toLowerCase() === actualKey?.toLowerCase();
19359
+ }
19360
+ function parseKeyGroup(group) {
19361
+ const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd'];
19349
19362
 
19350
- // Use the shared combination splitting logic
19351
- const parts = splitKeyCombination(group.toLowerCase());
19363
+ // Use the shared combination splitting logic
19364
+ const parts = splitKeyCombination(group.toLowerCase());
19352
19365
 
19353
- // If the combination is invalid, return empty result
19354
- if (parts.length === 0) {
19355
- return {
19356
- modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])),
19357
- actualKey: undefined
19358
- };
19359
- }
19360
- const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false]));
19361
- let actualKey;
19362
- for (const part of parts) {
19363
- if (MODIFIERS.includes(part)) {
19364
- modifiers[part] = true;
19365
- } else {
19366
- actualKey = part;
19367
- }
19368
- }
19366
+ // If the combination is invalid, return empty result
19367
+ if (parts.length === 0) {
19369
19368
  return {
19370
- modifiers,
19371
- actualKey
19369
+ modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])),
19370
+ actualKey: undefined
19372
19371
  };
19373
19372
  }
19374
- function matchesKeyGroup(e, group) {
19375
- const {
19376
- modifiers,
19377
- actualKey
19378
- } = parseKeyGroup(group);
19379
- const expectCtrl = modifiers.ctrl || !isMac && (modifiers.cmd || modifiers.meta);
19380
- const expectMeta = isMac && (modifiers.cmd || modifiers.meta);
19381
- return e.ctrlKey === expectCtrl && e.metaKey === expectMeta && e.shiftKey === modifiers.shift && e.altKey === modifiers.alt && e.key.toLowerCase() === actualKey?.toLowerCase();
19373
+ const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false]));
19374
+ let actualKey;
19375
+ for (const part of parts) {
19376
+ if (MODIFIERS.includes(part)) {
19377
+ modifiers[part] = true;
19378
+ } else {
19379
+ actualKey = part;
19380
+ }
19382
19381
  }
19383
- return cleanup;
19382
+ return {
19383
+ modifiers,
19384
+ actualKey
19385
+ };
19384
19386
  }
19385
19387
 
19386
19388
  // Utilities
@@ -24001,11 +24003,15 @@ function useCalendar(props) {
24001
24003
  return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek, props.firstDayOfYear) : null;
24002
24004
  });
24003
24005
  });
24006
+ const {
24007
+ minDate,
24008
+ maxDate
24009
+ } = useCalendarRange(props);
24004
24010
  function isDisabled(value) {
24005
24011
  if (props.disabled) return true;
24006
24012
  const date = adapter.date(value);
24007
- if (props.min && adapter.isBefore(adapter.endOfDay(date), adapter.date(props.min))) return true;
24008
- if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true;
24013
+ if (minDate.value && adapter.isBefore(adapter.endOfDay(date), minDate.value)) return true;
24014
+ if (maxDate.value && adapter.isAfter(date, maxDate.value)) return true;
24009
24015
  if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {
24010
24016
  return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date));
24011
24017
  }
@@ -24025,6 +24031,37 @@ function useCalendar(props) {
24025
24031
  weekNumbers
24026
24032
  };
24027
24033
  }
24034
+ function useCalendarRange(props) {
24035
+ const adapter = useDate();
24036
+ const minDate = computed(() => {
24037
+ if (!props.min) return null;
24038
+ const date = adapter.date(props.min);
24039
+ return adapter.isValid(date) ? date : null;
24040
+ });
24041
+ const maxDate = computed(() => {
24042
+ if (!props.max) return null;
24043
+ const date = adapter.date(props.max);
24044
+ return adapter.isValid(date) ? date : null;
24045
+ });
24046
+ function clampDate(date) {
24047
+ if (minDate.value && adapter.isBefore(date, minDate.value)) {
24048
+ return minDate.value;
24049
+ }
24050
+ if (maxDate.value && adapter.isAfter(date, maxDate.value)) {
24051
+ return maxDate.value;
24052
+ }
24053
+ return date;
24054
+ }
24055
+ function isInAllowedRange(date) {
24056
+ return (!minDate.value || adapter.isAfter(date, minDate.value)) && (!maxDate.value || adapter.isBefore(date, maxDate.value));
24057
+ }
24058
+ return {
24059
+ minDate,
24060
+ maxDate,
24061
+ clampDate,
24062
+ isInAllowedRange
24063
+ };
24064
+ }
24028
24065
 
24029
24066
  // Types
24030
24067
 
@@ -24465,24 +24502,14 @@ const VDatePicker = genericComponent()({
24465
24502
  const viewMode = useProxiedModel(props, 'viewMode');
24466
24503
  // const inputMode = useProxiedModel(props, 'inputMode')
24467
24504
 
24468
- const minDate = computed(() => {
24469
- const date = adapter.date(props.min);
24470
- return props.min && adapter.isValid(date) ? date : null;
24471
- });
24472
- const maxDate = computed(() => {
24473
- const date = adapter.date(props.max);
24474
- return props.max && adapter.isValid(date) ? date : null;
24475
- });
24505
+ const {
24506
+ minDate,
24507
+ maxDate,
24508
+ clampDate
24509
+ } = useCalendarRange(props);
24476
24510
  const internal = computed(() => {
24477
24511
  const today = adapter.date();
24478
- let value = today;
24479
- if (model.value?.[0]) {
24480
- value = adapter.date(model.value[0]);
24481
- } else if (minDate.value && adapter.isBefore(today, minDate.value)) {
24482
- value = minDate.value;
24483
- } else if (maxDate.value && adapter.isAfter(today, maxDate.value)) {
24484
- value = maxDate.value;
24485
- }
24512
+ const value = model.value?.[0] ? adapter.date(model.value[0]) : clampDate(today);
24486
24513
  return value && adapter.isValid(value) ? value : today;
24487
24514
  });
24488
24515
  const headerColor = toRef(() => props.headerColor ?? props.color);
@@ -30269,14 +30296,24 @@ const VTextarea = genericComponent()({
30269
30296
  }
30270
30297
  function onInput(e) {
30271
30298
  const el = e.target;
30272
- model.value = el.value;
30273
- if (props.modelModifiers?.trim) {
30274
- const caretPosition = [el.selectionStart, el.selectionEnd];
30275
- nextTick(() => {
30276
- el.selectionStart = caretPosition[0];
30277
- el.selectionEnd = caretPosition[1];
30278
- });
30299
+ if (!props.modelModifiers?.trim) {
30300
+ model.value = el.value;
30301
+ return;
30279
30302
  }
30303
+ const value = el.value;
30304
+ const start = el.selectionStart;
30305
+ const end = el.selectionEnd;
30306
+ model.value = value;
30307
+ nextTick(() => {
30308
+ let offset = 0;
30309
+ if (value.trimStart().length === el.value.length) {
30310
+ // #22307 - Whitespace has been removed from the
30311
+ // start, offset the caret position to compensate
30312
+ offset = value.length - el.value.length;
30313
+ }
30314
+ if (start != null) el.selectionStart = start - offset;
30315
+ if (end != null) el.selectionEnd = end - offset;
30316
+ });
30280
30317
  }
30281
30318
  const sizerRef = ref();
30282
30319
  const rows = ref(Number(props.rows));
@@ -32515,7 +32552,7 @@ function createVuetify$1() {
32515
32552
  };
32516
32553
  });
32517
32554
  }
32518
- const version$1 = "3.10.9";
32555
+ const version$1 = "3.10.10";
32519
32556
  createVuetify$1.version = version$1;
32520
32557
 
32521
32558
  // Vue's inject() can only be used in setup
@@ -32540,7 +32577,7 @@ const createVuetify = function () {
32540
32577
  ...options
32541
32578
  });
32542
32579
  };
32543
- const version = "3.10.9";
32580
+ const version = "3.10.10";
32544
32581
  createVuetify.version = version;
32545
32582
 
32546
32583
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useMask, useRtl, useTheme, version };