vuetify 3.10.8 → 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 (68) hide show
  1. package/dist/json/attributes.json +1543 -1543
  2. package/dist/json/importMap-labs.json +18 -18
  3. package/dist/json/importMap.json +174 -174
  4. package/dist/json/web-types.json +2937 -2937
  5. package/dist/vuetify-labs.cjs +205 -216
  6. package/dist/vuetify-labs.css +4754 -4730
  7. package/dist/vuetify-labs.d.ts +72 -72
  8. package/dist/vuetify-labs.esm.js +205 -216
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +205 -216
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.cjs +137 -99
  13. package/dist/vuetify.cjs.map +1 -1
  14. package/dist/vuetify.css +2766 -2730
  15. package/dist/vuetify.d.ts +56 -56
  16. package/dist/vuetify.esm.js +137 -99
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +137 -99
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +334 -330
  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.css +21 -0
  26. package/lib/components/VBtnToggle/VBtnToggle.sass +22 -0
  27. package/lib/components/VCard/VCard.js +8 -1
  28. package/lib/components/VCard/VCard.js.map +1 -1
  29. package/lib/components/VDatePicker/VDatePicker.js +7 -16
  30. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  31. package/lib/components/VList/VList.css +6 -0
  32. package/lib/components/VList/VList.sass +6 -0
  33. package/lib/components/VList/VListItem.css +0 -3
  34. package/lib/components/VList/VListItem.sass +0 -4
  35. package/lib/components/VOverlay/useActivator.js +2 -1
  36. package/lib/components/VOverlay/useActivator.js.map +1 -1
  37. package/lib/components/VTabs/VTab.css +8 -0
  38. package/lib/components/VTabs/VTab.sass +7 -0
  39. package/lib/components/VTextField/VTextField.js +17 -7
  40. package/lib/components/VTextField/VTextField.js.map +1 -1
  41. package/lib/components/VTextarea/VTextarea.js +17 -7
  42. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  43. package/lib/composables/calendar.d.ts +6 -0
  44. package/lib/composables/calendar.js +37 -2
  45. package/lib/composables/calendar.js.map +1 -1
  46. package/lib/composables/delay.js +3 -2
  47. package/lib/composables/delay.js.map +1 -1
  48. package/lib/composables/hotkey/hotkey.js +42 -53
  49. package/lib/composables/hotkey/hotkey.js.map +1 -1
  50. package/lib/entry-bundler.js +1 -1
  51. package/lib/entry-bundler.js.map +1 -1
  52. package/lib/framework.d.ts +56 -56
  53. package/lib/framework.js +1 -1
  54. package/lib/framework.js.map +1 -1
  55. package/lib/labs/VDateInput/VDateInput.js +8 -12
  56. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  57. package/lib/labs/VHotkey/VHotkey.css +4 -16
  58. package/lib/labs/VHotkey/VHotkey.d.ts +29 -29
  59. package/lib/labs/VHotkey/VHotkey.js +62 -106
  60. package/lib/labs/VHotkey/VHotkey.js.map +1 -1
  61. package/lib/labs/VHotkey/VHotkey.scss +8 -25
  62. package/lib/styles/main.css +4 -0
  63. package/lib/styles/settings/_variables.scss +1 -0
  64. package/lib/util/box.js +3 -8
  65. package/lib/util/box.js.map +1 -1
  66. package/lib/util/throttle.js +2 -2
  67. package/lib/util/throttle.js.map +1 -1
  68. package/package.json +1 -1
package/dist/vuetify.d.ts CHANGED
@@ -105770,24 +105770,26 @@ declare module 'vue' {
105770
105770
  $children?: VNodeChild
105771
105771
  }
105772
105772
  export interface GlobalComponents {
105773
- VApp: VApp
105774
- VAlert: VAlert
105775
- VAlertTitle: VAlertTitle
105776
- VAutocomplete: VAutocomplete
105777
105773
  VAppBar: VAppBar
105778
105774
  VAppBarNavIcon: VAppBarNavIcon
105779
105775
  VAppBarTitle: VAppBarTitle
105780
- VBanner: VBanner
105781
- VBannerActions: VBannerActions
105782
- VBannerText: VBannerText
105776
+ VApp: VApp
105783
105777
  VBadge: VBadge
105784
- VAvatar: VAvatar
105785
105778
  VBottomSheet: VBottomSheet
105786
- VBtn: VBtn
105779
+ VAutocomplete: VAutocomplete
105780
+ VAlert: VAlert
105781
+ VAlertTitle: VAlertTitle
105782
+ VBottomNavigation: VBottomNavigation
105783
+ VAvatar: VAvatar
105787
105784
  VBreadcrumbs: VBreadcrumbs
105788
105785
  VBreadcrumbsItem: VBreadcrumbsItem
105789
105786
  VBreadcrumbsDivider: VBreadcrumbsDivider
105790
- VBottomNavigation: VBottomNavigation
105787
+ VBtnGroup: VBtnGroup
105788
+ VBanner: VBanner
105789
+ VBannerActions: VBannerActions
105790
+ VBannerText: VBannerText
105791
+ VBtn: VBtn
105792
+ VCode: VCode
105791
105793
  VBtnToggle: VBtnToggle
105792
105794
  VCard: VCard
105793
105795
  VCardActions: VCardActions
@@ -105797,11 +105799,13 @@ declare module 'vue' {
105797
105799
  VCardTitle: VCardTitle
105798
105800
  VCarousel: VCarousel
105799
105801
  VCarouselItem: VCarouselItem
105802
+ VChip: VChip
105800
105803
  VChipGroup: VChipGroup
105801
- VBtnGroup: VBtnGroup
105802
105804
  VCheckbox: VCheckbox
105803
105805
  VCheckboxBtn: VCheckboxBtn
105804
- VChip: VChip
105806
+ VCombobox: VCombobox
105807
+ VFab: VFab
105808
+ VCounter: VCounter
105805
105809
  VDataTable: VDataTable
105806
105810
  VDataTableHeaders: VDataTableHeaders
105807
105811
  VDataTableFooter: VDataTableFooter
@@ -105810,40 +105814,40 @@ declare module 'vue' {
105810
105814
  VDataTableVirtual: VDataTableVirtual
105811
105815
  VDataTableServer: VDataTableServer
105812
105816
  VColorPicker: VColorPicker
105813
- VCombobox: VCombobox
105814
- VCounter: VCounter
105815
- VCode: VCode
105817
+ VDialog: VDialog
105818
+ VDivider: VDivider
105819
+ VFooter: VFooter
105820
+ VExpansionPanels: VExpansionPanels
105821
+ VExpansionPanel: VExpansionPanel
105822
+ VExpansionPanelText: VExpansionPanelText
105823
+ VExpansionPanelTitle: VExpansionPanelTitle
105816
105824
  VDatePicker: VDatePicker
105817
105825
  VDatePickerControls: VDatePickerControls
105818
105826
  VDatePickerHeader: VDatePickerHeader
105819
105827
  VDatePickerMonth: VDatePickerMonth
105820
105828
  VDatePickerMonths: VDatePickerMonths
105821
105829
  VDatePickerYears: VDatePickerYears
105822
- VDialog: VDialog
105823
- VEmptyState: VEmptyState
105824
105830
  VField: VField
105825
105831
  VFieldLabel: VFieldLabel
105826
- VDivider: VDivider
105827
- VExpansionPanels: VExpansionPanels
105828
- VExpansionPanel: VExpansionPanel
105829
- VExpansionPanelText: VExpansionPanelText
105830
- VExpansionPanelTitle: VExpansionPanelTitle
105831
- VFooter: VFooter
105832
- VFab: VFab
105832
+ VEmptyState: VEmptyState
105833
105833
  VFileInput: VFileInput
105834
+ VImg: VImg
105834
105835
  VIcon: VIcon
105835
105836
  VComponentIcon: VComponentIcon
105836
105837
  VSvgIcon: VSvgIcon
105837
105838
  VLigatureIcon: VLigatureIcon
105838
105839
  VClassIcon: VClassIcon
105839
- VImg: VImg
105840
- VInfiniteScroll: VInfiniteScroll
105841
105840
  VItemGroup: VItemGroup
105842
105841
  VItem: VItem
105843
105842
  VKbd: VKbd
105843
+ VLabel: VLabel
105844
+ VInfiniteScroll: VInfiniteScroll
105845
+ VMain: VMain
105844
105846
  VInput: VInput
105847
+ VMenu: VMenu
105845
105848
  VNavigationDrawer: VNavigationDrawer
105846
- VLabel: VLabel
105849
+ VOverlay: VOverlay
105850
+ VMessages: VMessages
105847
105851
  VList: VList
105848
105852
  VListGroup: VListGroup
105849
105853
  VListImg: VListImg
@@ -105853,28 +105857,22 @@ declare module 'vue' {
105853
105857
  VListItemSubtitle: VListItemSubtitle
105854
105858
  VListItemTitle: VListItemTitle
105855
105859
  VListSubheader: VListSubheader
105856
- VMenu: VMenu
105857
- VNumberInput: VNumberInput
105858
- VMessages: VMessages
105859
105860
  VOtpInput: VOtpInput
105860
- VMain: VMain
105861
+ VNumberInput: VNumberInput
105861
105862
  VPagination: VPagination
105862
- VProgressLinear: VProgressLinear
105863
- VOverlay: VOverlay
105864
- VRadioGroup: VRadioGroup
105865
- VRating: VRating
105866
105863
  VProgressCircular: VProgressCircular
105867
- VSelectionControlGroup: VSelectionControlGroup
105864
+ VRadioGroup: VRadioGroup
105865
+ VProgressLinear: VProgressLinear
105868
105866
  VSelect: VSelect
105867
+ VRating: VRating
105869
105868
  VSelectionControl: VSelectionControl
105869
+ VSlideGroup: VSlideGroup
105870
+ VSlideGroupItem: VSlideGroupItem
105871
+ VSelectionControlGroup: VSelectionControlGroup
105872
+ VSheet: VSheet
105870
105873
  VSlider: VSlider
105871
105874
  VSkeletonLoader: VSkeletonLoader
105872
- VSheet: VSheet
105873
105875
  VSnackbar: VSnackbar
105874
- VSlideGroup: VSlideGroup
105875
- VSlideGroupItem: VSlideGroupItem
105876
- VSystemBar: VSystemBar
105877
- VSwitch: VSwitch
105878
105876
  VStepper: VStepper
105879
105877
  VStepperActions: VStepperActions
105880
105878
  VStepperHeader: VStepperHeader
@@ -105885,46 +105883,49 @@ declare module 'vue' {
105885
105883
  VTabs: VTabs
105886
105884
  VTabsWindow: VTabsWindow
105887
105885
  VTabsWindowItem: VTabsWindowItem
105886
+ VSwitch: VSwitch
105887
+ VSystemBar: VSystemBar
105888
105888
  VTable: VTable
105889
105889
  VTextarea: VTextarea
105890
- VTextField: VTextField
105891
105890
  VTimePicker: VTimePicker
105892
105891
  VTimePickerClock: VTimePickerClock
105893
105892
  VTimePickerControls: VTimePickerControls
105893
+ VTextField: VTextField
105894
+ VToolbar: VToolbar
105895
+ VToolbarTitle: VToolbarTitle
105896
+ VToolbarItems: VToolbarItems
105894
105897
  VTimeline: VTimeline
105895
105898
  VTimelineItem: VTimelineItem
105899
+ VTooltip: VTooltip
105896
105900
  VTreeview: VTreeview
105897
105901
  VTreeviewItem: VTreeviewItem
105898
105902
  VTreeviewGroup: VTreeviewGroup
105899
- VTooltip: VTooltip
105900
- VToolbar: VToolbar
105901
- VToolbarTitle: VToolbarTitle
105902
- VToolbarItems: VToolbarItems
105903
105903
  VWindow: VWindow
105904
105904
  VWindowItem: VWindowItem
105905
105905
  VConfirmEdit: VConfirmEdit
105906
105906
  VDataIterator: VDataIterator
105907
105907
  VDefaultsProvider: VDefaultsProvider
105908
105908
  VForm: VForm
105909
- VHover: VHover
105910
105909
  VContainer: VContainer
105911
105910
  VCol: VCol
105912
105911
  VRow: VRow
105913
105912
  VSpacer: VSpacer
105914
- VLazy: VLazy
105915
105913
  VLayout: VLayout
105916
105914
  VLayoutItem: VLayoutItem
105915
+ VHover: VHover
105916
+ VLazy: VLazy
105917
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
- VValidation: VValidation
105927
105926
  VThemeProvider: VThemeProvider
105927
+ VVirtualScroll: VVirtualScroll
105928
+ VValidation: VValidation
105928
105929
  VFabTransition: VFabTransition
105929
105930
  VDialogBottomTransition: VDialogBottomTransition
105930
105931
  VDialogTopTransition: VDialogTopTransition
@@ -105941,21 +105942,20 @@ declare module 'vue' {
105941
105942
  VExpandTransition: VExpandTransition
105942
105943
  VExpandXTransition: VExpandXTransition
105943
105944
  VDialogTransition: VDialogTransition
105944
- VVirtualScroll: VVirtualScroll
105945
105945
  VCalendar: VCalendar
105946
+ VIconBtn: VIconBtn
105946
105947
  VFileUpload: VFileUpload
105947
105948
  VFileUploadItem: VFileUploadItem
105948
- VColorInput: VColorInput
105949
105949
  VStepperVertical: VStepperVertical
105950
105950
  VStepperVerticalItem: VStepperVerticalItem
105951
105951
  VStepperVerticalActions: VStepperVerticalActions
105952
+ VColorInput: VColorInput
105953
+ VHotkey: VHotkey
105954
+ VPicker: VPicker
105955
+ VPickerTitle: VPickerTitle
105952
105956
  VPie: VPie
105953
105957
  VPieSegment: VPieSegment
105954
105958
  VPieTooltip: VPieTooltip
105955
- VIconBtn: VIconBtn
105956
- VPicker: VPicker
105957
- VPickerTitle: VPickerTitle
105958
- VHotkey: VHotkey
105959
105959
  VVideo: VVideo
105960
105960
  VVideoControls: VVideoControls
105961
105961
  VVideoVolume: VVideoVolume
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.10.8
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
 
@@ -1756,7 +1751,7 @@ function throttle(fn, delay) {
1756
1751
  const elapsed = now - Math.max(start, lastExec);
1757
1752
  function invoke() {
1758
1753
  lastExec = Date.now();
1759
- timeoutId = window.setTimeout(clear, delay);
1754
+ timeoutId = setTimeout(clear, delay);
1760
1755
  fn(...args);
1761
1756
  }
1762
1757
  if (!throttling) {
@@ -1767,7 +1762,7 @@ function throttle(fn, delay) {
1767
1762
  } else if (elapsed >= delay) {
1768
1763
  invoke();
1769
1764
  } else if (options.trailing) {
1770
- timeoutId = window.setTimeout(invoke, delay - elapsed);
1765
+ timeoutId = setTimeout(invoke, delay - elapsed);
1771
1766
  }
1772
1767
  };
1773
1768
  wrap.clear = clear;
@@ -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
  });
@@ -11701,7 +11697,8 @@ function useActivator(props, _ref) {
11701
11697
  };
11702
11698
  }
11703
11699
  if (openOnFocus.value) {
11704
- events.onFocusin = () => {
11700
+ events.onFocusin = e => {
11701
+ if (!e.target.matches(':focus-visible')) return;
11705
11702
  isFocused = true;
11706
11703
  runOpenDelay();
11707
11704
  };
@@ -13079,14 +13076,24 @@ const VTextField = genericComponent()({
13079
13076
  }
13080
13077
  function onInput(e) {
13081
13078
  const el = e.target;
13082
- model.value = el.value;
13083
- if (props.modelModifiers?.trim && ['text', 'search', 'password', 'tel', 'url'].includes(props.type)) {
13084
- const caretPosition = [el.selectionStart, el.selectionEnd];
13085
- nextTick(() => {
13086
- el.selectionStart = caretPosition[0];
13087
- el.selectionEnd = caretPosition[1];
13088
- });
13079
+ if (!(props.modelModifiers?.trim && ['text', 'search', 'password', 'tel', 'url'].includes(props.type))) {
13080
+ model.value = el.value;
13081
+ return;
13089
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
+ });
13090
13097
  }
13091
13098
  useRender(() => {
13092
13099
  const hasCounter = !!(slots.counter || props.counter !== false && props.counter != null);
@@ -15813,6 +15820,12 @@ const VCard = genericComponent()({
15813
15820
  roundedClasses
15814
15821
  } = useRounded(props);
15815
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
+ });
15816
15829
  useRender(() => {
15817
15830
  const isLink = props.link !== false && link.isLink.value;
15818
15831
  const isClickable = !props.disabled && props.link !== false && (props.link || link.isClickable.value);
@@ -15855,7 +15868,7 @@ const VCard = genericComponent()({
15855
15868
  }, slots.image)]), createVNode(LoaderSlot, {
15856
15869
  "name": "v-card",
15857
15870
  "active": !!props.loading,
15858
- "color": typeof props.loading === 'boolean' ? undefined : props.loading
15871
+ "color": loadingColor.value
15859
15872
  }, {
15860
15873
  default: slots.loader
15861
15874
  }), hasCardItem && createVNode(VCardItem, {
@@ -19278,11 +19291,6 @@ function useHotkey(keys, callback) {
19278
19291
  let keyGroups;
19279
19292
  let isSequence = false;
19280
19293
  let groupIndex = 0;
19281
- function clearTimer() {
19282
- if (!timeout) return;
19283
- clearTimeout(timeout);
19284
- timeout = 0;
19285
- }
19286
19294
  function isInputFocused() {
19287
19295
  if (toValue(inputs)) return false;
19288
19296
  const activeElement = document.activeElement;
@@ -19290,12 +19298,12 @@ function useHotkey(keys, callback) {
19290
19298
  }
19291
19299
  function resetSequence() {
19292
19300
  groupIndex = 0;
19293
- clearTimer();
19301
+ clearTimeout(timeout);
19294
19302
  }
19295
19303
  function handler(e) {
19296
19304
  const group = keyGroups[groupIndex];
19297
19305
  if (!group || isInputFocused()) return;
19298
- if (!matchesKeyGroup(e, group)) {
19306
+ if (!matchesKeyGroup(e, group, isMac)) {
19299
19307
  if (isSequence) resetSequence();
19300
19308
  return;
19301
19309
  }
@@ -19304,7 +19312,7 @@ function useHotkey(keys, callback) {
19304
19312
  callback(e);
19305
19313
  return;
19306
19314
  }
19307
- clearTimer();
19315
+ clearTimeout(timeout);
19308
19316
  groupIndex++;
19309
19317
  if (groupIndex === keyGroups.length) {
19310
19318
  callback(e);
@@ -19315,12 +19323,12 @@ function useHotkey(keys, callback) {
19315
19323
  }
19316
19324
  function cleanup() {
19317
19325
  window.removeEventListener(toValue(event), handler);
19318
- clearTimer();
19326
+ clearTimeout(timeout);
19319
19327
  }
19320
- watch(() => toValue(keys), function (unrefKeys) {
19328
+ watch(() => toValue(keys), newKeys => {
19321
19329
  cleanup();
19322
- if (unrefKeys) {
19323
- const groups = splitKeySequence(unrefKeys.toLowerCase());
19330
+ if (newKeys) {
19331
+ const groups = splitKeySequence(newKeys.toLowerCase());
19324
19332
  isSequence = groups.length > 1;
19325
19333
  keyGroups = groups;
19326
19334
  resetSequence();
@@ -19331,55 +19339,50 @@ function useHotkey(keys, callback) {
19331
19339
  });
19332
19340
 
19333
19341
  // Watch for changes in the event type to re-register the listener
19334
- watch(() => toValue(event), function (newEvent, oldEvent) {
19342
+ watch(() => toValue(event), (newEvent, oldEvent) => {
19335
19343
  if (oldEvent && keyGroups && keyGroups.length > 0) {
19336
19344
  window.removeEventListener(oldEvent, handler);
19337
19345
  window.addEventListener(newEvent, handler);
19338
19346
  }
19339
19347
  });
19340
- try {
19341
- getCurrentInstance('useHotkey');
19342
- onBeforeUnmount(cleanup);
19343
- } catch {
19344
- // Not in Vue setup context
19345
- }
19346
- function parseKeyGroup(group) {
19347
- 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'];
19348
19362
 
19349
- // Use the shared combination splitting logic
19350
- const parts = splitKeyCombination(group.toLowerCase());
19363
+ // Use the shared combination splitting logic
19364
+ const parts = splitKeyCombination(group.toLowerCase());
19351
19365
 
19352
- // If the combination is invalid, return empty result
19353
- if (parts.length === 0) {
19354
- return {
19355
- modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])),
19356
- actualKey: undefined
19357
- };
19358
- }
19359
- const modifiers = Object.fromEntries(MODIFIERS.map(m => [m, false]));
19360
- let actualKey;
19361
- for (const part of parts) {
19362
- if (MODIFIERS.includes(part)) {
19363
- modifiers[part] = true;
19364
- } else {
19365
- actualKey = part;
19366
- }
19367
- }
19366
+ // If the combination is invalid, return empty result
19367
+ if (parts.length === 0) {
19368
19368
  return {
19369
- modifiers,
19370
- actualKey
19369
+ modifiers: Object.fromEntries(MODIFIERS.map(m => [m, false])),
19370
+ actualKey: undefined
19371
19371
  };
19372
19372
  }
19373
- function matchesKeyGroup(e, group) {
19374
- const {
19375
- modifiers,
19376
- actualKey
19377
- } = parseKeyGroup(group);
19378
- const expectCtrl = modifiers.ctrl || !isMac && (modifiers.cmd || modifiers.meta);
19379
- const expectMeta = isMac && (modifiers.cmd || modifiers.meta);
19380
- 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
+ }
19381
19381
  }
19382
- return cleanup;
19382
+ return {
19383
+ modifiers,
19384
+ actualKey
19385
+ };
19383
19386
  }
19384
19387
 
19385
19388
  // Utilities
@@ -24000,11 +24003,15 @@ function useCalendar(props) {
24000
24003
  return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek, props.firstDayOfYear) : null;
24001
24004
  });
24002
24005
  });
24006
+ const {
24007
+ minDate,
24008
+ maxDate
24009
+ } = useCalendarRange(props);
24003
24010
  function isDisabled(value) {
24004
24011
  if (props.disabled) return true;
24005
24012
  const date = adapter.date(value);
24006
- if (props.min && adapter.isBefore(adapter.endOfDay(date), adapter.date(props.min))) return true;
24007
- 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;
24008
24015
  if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {
24009
24016
  return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date));
24010
24017
  }
@@ -24024,6 +24031,37 @@ function useCalendar(props) {
24024
24031
  weekNumbers
24025
24032
  };
24026
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
+ }
24027
24065
 
24028
24066
  // Types
24029
24067
 
@@ -24464,24 +24502,14 @@ const VDatePicker = genericComponent()({
24464
24502
  const viewMode = useProxiedModel(props, 'viewMode');
24465
24503
  // const inputMode = useProxiedModel(props, 'inputMode')
24466
24504
 
24467
- const minDate = computed(() => {
24468
- const date = adapter.date(props.min);
24469
- return props.min && adapter.isValid(date) ? date : null;
24470
- });
24471
- const maxDate = computed(() => {
24472
- const date = adapter.date(props.max);
24473
- return props.max && adapter.isValid(date) ? date : null;
24474
- });
24505
+ const {
24506
+ minDate,
24507
+ maxDate,
24508
+ clampDate
24509
+ } = useCalendarRange(props);
24475
24510
  const internal = computed(() => {
24476
24511
  const today = adapter.date();
24477
- let value = today;
24478
- if (model.value?.[0]) {
24479
- value = adapter.date(model.value[0]);
24480
- } else if (minDate.value && adapter.isBefore(today, minDate.value)) {
24481
- value = minDate.value;
24482
- } else if (maxDate.value && adapter.isAfter(today, maxDate.value)) {
24483
- value = maxDate.value;
24484
- }
24512
+ const value = model.value?.[0] ? adapter.date(model.value[0]) : clampDate(today);
24485
24513
  return value && adapter.isValid(value) ? value : today;
24486
24514
  });
24487
24515
  const headerColor = toRef(() => props.headerColor ?? props.color);
@@ -30268,14 +30296,24 @@ const VTextarea = genericComponent()({
30268
30296
  }
30269
30297
  function onInput(e) {
30270
30298
  const el = e.target;
30271
- model.value = el.value;
30272
- if (props.modelModifiers?.trim) {
30273
- const caretPosition = [el.selectionStart, el.selectionEnd];
30274
- nextTick(() => {
30275
- el.selectionStart = caretPosition[0];
30276
- el.selectionEnd = caretPosition[1];
30277
- });
30299
+ if (!props.modelModifiers?.trim) {
30300
+ model.value = el.value;
30301
+ return;
30278
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
+ });
30279
30317
  }
30280
30318
  const sizerRef = ref();
30281
30319
  const rows = ref(Number(props.rows));
@@ -32514,7 +32552,7 @@ function createVuetify$1() {
32514
32552
  };
32515
32553
  });
32516
32554
  }
32517
- const version$1 = "3.10.8";
32555
+ const version$1 = "3.10.10";
32518
32556
  createVuetify$1.version = version$1;
32519
32557
 
32520
32558
  // Vue's inject() can only be used in setup
@@ -32539,7 +32577,7 @@ const createVuetify = function () {
32539
32577
  ...options
32540
32578
  });
32541
32579
  };
32542
- const version = "3.10.8";
32580
+ const version = "3.10.10";
32543
32581
  createVuetify.version = version;
32544
32582
 
32545
32583
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useMask, useRtl, useTheme, version };