@vuetify/nightly 3.7.18-master.2025-03-22 → 3.7.18-master.2025-03-25

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.
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.7.18-master.2025-03-22";
19
+ export const version = "3.7.18-master.2025-03-25";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.mjs";
package/lib/framework.mjs CHANGED
@@ -97,7 +97,7 @@ export function createVuetify() {
97
97
  goTo
98
98
  };
99
99
  }
100
- export const version = "3.7.18-master.2025-03-22";
100
+ export const version = "3.7.18-master.2025-03-25";
101
101
  createVuetify.version = version;
102
102
 
103
103
  // Vue's inject() can only be used in setup
package/lib/index.d.mts CHANGED
@@ -486,26 +486,26 @@ declare module 'vue' {
486
486
  $children?: VNodeChild
487
487
  }
488
488
  export interface GlobalComponents {
489
+ VAlert: typeof import('vuetify/components')['VAlert']
490
+ VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
491
+ VApp: typeof import('vuetify/components')['VApp']
489
492
  VAppBar: typeof import('vuetify/components')['VAppBar']
490
493
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
491
494
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
492
- VBadge: typeof import('vuetify/components')['VBadge']
493
- VApp: typeof import('vuetify/components')['VApp']
494
495
  VAvatar: typeof import('vuetify/components')['VAvatar']
496
+ VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
497
+ VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
498
+ VBadge: typeof import('vuetify/components')['VBadge']
499
+ VBtn: typeof import('vuetify/components')['VBtn']
495
500
  VBanner: typeof import('vuetify/components')['VBanner']
496
501
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
497
502
  VBannerText: typeof import('vuetify/components')['VBannerText']
498
- VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
499
- VAlert: typeof import('vuetify/components')['VAlert']
500
- VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
503
+ VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
501
504
  VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
502
505
  VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
503
506
  VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
504
- VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
505
- VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
506
507
  VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
507
- VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
508
- VBtn: typeof import('vuetify/components')['VBtn']
508
+ VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
509
509
  VCard: typeof import('vuetify/components')['VCard']
510
510
  VCardActions: typeof import('vuetify/components')['VCardActions']
511
511
  VCardItem: typeof import('vuetify/components')['VCardItem']
@@ -516,16 +516,10 @@ declare module 'vue' {
516
516
  VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
517
517
  VCarousel: typeof import('vuetify/components')['VCarousel']
518
518
  VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
519
- VCode: typeof import('vuetify/components')['VCode']
520
- VChipGroup: typeof import('vuetify/components')['VChipGroup']
521
- VColorPicker: typeof import('vuetify/components')['VColorPicker']
522
- VDatePicker: typeof import('vuetify/components')['VDatePicker']
523
- VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
524
- VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
525
- VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
526
- VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
527
- VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
528
519
  VChip: typeof import('vuetify/components')['VChip']
520
+ VCombobox: typeof import('vuetify/components')['VCombobox']
521
+ VColorPicker: typeof import('vuetify/components')['VColorPicker']
522
+ VChipGroup: typeof import('vuetify/components')['VChipGroup']
529
523
  VDataTable: typeof import('vuetify/components')['VDataTable']
530
524
  VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
531
525
  VDataTableFooter: typeof import('vuetify/components')['VDataTableFooter']
@@ -533,32 +527,38 @@ declare module 'vue' {
533
527
  VDataTableRow: typeof import('vuetify/components')['VDataTableRow']
534
528
  VDataTableVirtual: typeof import('vuetify/components')['VDataTableVirtual']
535
529
  VDataTableServer: typeof import('vuetify/components')['VDataTableServer']
536
- VCombobox: typeof import('vuetify/components')['VCombobox']
530
+ VCode: typeof import('vuetify/components')['VCode']
537
531
  VCounter: typeof import('vuetify/components')['VCounter']
538
532
  VDialog: typeof import('vuetify/components')['VDialog']
539
533
  VDivider: typeof import('vuetify/components')['VDivider']
540
534
  VEmptyState: typeof import('vuetify/components')['VEmptyState']
535
+ VDatePicker: typeof import('vuetify/components')['VDatePicker']
536
+ VDatePickerControls: typeof import('vuetify/components')['VDatePickerControls']
537
+ VDatePickerHeader: typeof import('vuetify/components')['VDatePickerHeader']
538
+ VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
539
+ VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
540
+ VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
541
+ VFileInput: typeof import('vuetify/components')['VFileInput']
542
+ VFab: typeof import('vuetify/components')['VFab']
543
+ VField: typeof import('vuetify/components')['VField']
544
+ VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
541
545
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
542
546
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
543
547
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
544
548
  VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
545
- VFab: typeof import('vuetify/components')['VFab']
546
- VFileInput: typeof import('vuetify/components')['VFileInput']
547
549
  VFooter: typeof import('vuetify/components')['VFooter']
550
+ VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
551
+ VImg: typeof import('vuetify/components')['VImg']
552
+ VKbd: typeof import('vuetify/components')['VKbd']
548
553
  VIcon: typeof import('vuetify/components')['VIcon']
549
554
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
550
555
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
551
556
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
552
557
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
553
- VImg: typeof import('vuetify/components')['VImg']
554
- VField: typeof import('vuetify/components')['VField']
555
- VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
556
558
  VInput: typeof import('vuetify/components')['VInput']
557
- VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
558
559
  VItemGroup: typeof import('vuetify/components')['VItemGroup']
559
560
  VItem: typeof import('vuetify/components')['VItem']
560
- VKbd: typeof import('vuetify/components')['VKbd']
561
- VMain: typeof import('vuetify/components')['VMain']
561
+ VLabel: typeof import('vuetify/components')['VLabel']
562
562
  VList: typeof import('vuetify/components')['VList']
563
563
  VListGroup: typeof import('vuetify/components')['VListGroup']
564
564
  VListImg: typeof import('vuetify/components')['VListImg']
@@ -568,26 +568,26 @@ declare module 'vue' {
568
568
  VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
569
569
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
570
570
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
571
- VLabel: typeof import('vuetify/components')['VLabel']
571
+ VMain: typeof import('vuetify/components')['VMain']
572
+ VMessages: typeof import('vuetify/components')['VMessages']
572
573
  VMenu: typeof import('vuetify/components')['VMenu']
573
- VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
574
+ VOverlay: typeof import('vuetify/components')['VOverlay']
574
575
  VOtpInput: typeof import('vuetify/components')['VOtpInput']
575
- VMessages: typeof import('vuetify/components')['VMessages']
576
+ VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
576
577
  VPagination: typeof import('vuetify/components')['VPagination']
577
- VOverlay: typeof import('vuetify/components')['VOverlay']
578
- VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
579
578
  VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
580
- VRating: typeof import('vuetify/components')['VRating']
581
579
  VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
582
- VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
583
580
  VSelect: typeof import('vuetify/components')['VSelect']
584
- VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
585
- VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
586
- VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
581
+ VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
582
+ VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
583
+ VRating: typeof import('vuetify/components')['VRating']
587
584
  VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
585
+ VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
588
586
  VSheet: typeof import('vuetify/components')['VSheet']
589
- VSnackbar: typeof import('vuetify/components')['VSnackbar']
590
587
  VSlider: typeof import('vuetify/components')['VSlider']
588
+ VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
589
+ VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
590
+ VSystemBar: typeof import('vuetify/components')['VSystemBar']
591
591
  VStepper: typeof import('vuetify/components')['VStepper']
592
592
  VStepperActions: typeof import('vuetify/components')['VStepperActions']
593
593
  VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
@@ -595,34 +595,34 @@ declare module 'vue' {
595
595
  VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
596
596
  VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
597
597
  VTable: typeof import('vuetify/components')['VTable']
598
+ VSnackbar: typeof import('vuetify/components')['VSnackbar']
598
599
  VSwitch: typeof import('vuetify/components')['VSwitch']
599
- VSystemBar: typeof import('vuetify/components')['VSystemBar']
600
600
  VTab: typeof import('vuetify/components')['VTab']
601
601
  VTabs: typeof import('vuetify/components')['VTabs']
602
602
  VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
603
603
  VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
604
- VTooltip: typeof import('vuetify/components')['VTooltip']
605
- VTimeline: typeof import('vuetify/components')['VTimeline']
606
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
604
+ VTextarea: typeof import('vuetify/components')['VTextarea']
607
605
  VTextField: typeof import('vuetify/components')['VTextField']
608
606
  VToolbar: typeof import('vuetify/components')['VToolbar']
609
607
  VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
610
608
  VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
611
- VTextarea: typeof import('vuetify/components')['VTextarea']
609
+ VTooltip: typeof import('vuetify/components')['VTooltip']
612
610
  VWindow: typeof import('vuetify/components')['VWindow']
613
611
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
612
+ VTimeline: typeof import('vuetify/components')['VTimeline']
613
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
614
614
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
615
615
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
616
616
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
617
+ VForm: typeof import('vuetify/components')['VForm']
617
618
  VContainer: typeof import('vuetify/components')['VContainer']
618
619
  VCol: typeof import('vuetify/components')['VCol']
619
620
  VRow: typeof import('vuetify/components')['VRow']
620
621
  VSpacer: typeof import('vuetify/components')['VSpacer']
621
- VForm: typeof import('vuetify/components')['VForm']
622
622
  VHover: typeof import('vuetify/components')['VHover']
623
+ VLazy: typeof import('vuetify/components')['VLazy']
623
624
  VLayout: typeof import('vuetify/components')['VLayout']
624
625
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
625
- VLazy: typeof import('vuetify/components')['VLazy']
626
626
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
627
627
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
628
628
  VParallax: typeof import('vuetify/components')['VParallax']
@@ -660,18 +660,18 @@ declare module 'vue' {
660
660
  VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
661
661
  VPicker: typeof import('vuetify/labs/components')['VPicker']
662
662
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
663
- VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
664
- VTimePicker: typeof import('vuetify/labs/components')['VTimePicker']
665
- VTimePickerClock: typeof import('vuetify/labs/components')['VTimePickerClock']
666
- VTimePickerControls: typeof import('vuetify/labs/components')['VTimePickerControls']
667
663
  VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
668
664
  VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
669
665
  VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
666
+ VNumberInput: typeof import('vuetify/labs/components')['VNumberInput']
670
667
  VTreeview: typeof import('vuetify/labs/components')['VTreeview']
671
668
  VTreeviewItem: typeof import('vuetify/labs/components')['VTreeviewItem']
672
669
  VTreeviewGroup: typeof import('vuetify/labs/components')['VTreeviewGroup']
670
+ VTimePicker: typeof import('vuetify/labs/components')['VTimePicker']
671
+ VTimePickerClock: typeof import('vuetify/labs/components')['VTimePickerClock']
672
+ VTimePickerControls: typeof import('vuetify/labs/components')['VTimePickerControls']
673
673
  VDateInput: typeof import('vuetify/labs/components')['VDateInput']
674
- VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
675
674
  VSnackbarQueue: typeof import('vuetify/labs/components')['VSnackbarQueue']
675
+ VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
676
676
  }
677
677
  }
@@ -5,19 +5,22 @@ import { makeVDatePickerProps, VDatePicker } from "../../components/VDatePicker/
5
5
  import { VMenu } from "../../components/VMenu/VMenu.mjs";
6
6
  import { makeVTextFieldProps, VTextField } from "../../components/VTextField/VTextField.mjs"; // Composables
7
7
  import { useDate } from "../../composables/date/index.mjs";
8
+ import { makeDisplayProps, useDisplay } from "../../composables/display.mjs";
8
9
  import { makeFocusProps, useFocus } from "../../composables/focus.mjs";
9
10
  import { forwardRefs } from "../../composables/forwardRefs.mjs";
10
11
  import { useLocale } from "../../composables/locale.mjs";
11
12
  import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
12
- import { computed, ref, shallowRef } from 'vue';
13
+ import { computed, ref, shallowRef, watch } from 'vue';
13
14
  import { genericComponent, omit, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
14
15
  // Types
15
16
  export const makeVDateInputProps = propsFactory({
17
+ displayFormat: [Function, String],
16
18
  hideActions: Boolean,
17
19
  location: {
18
20
  type: String,
19
21
  default: 'bottom start'
20
22
  },
23
+ ...makeDisplayProps(),
21
24
  ...makeFocusProps(),
22
25
  ...makeVConfirmEditProps(),
23
26
  ...makeVTextFieldProps({
@@ -33,16 +36,22 @@ export const VDateInput = genericComponent()({
33
36
  name: 'VDateInput',
34
37
  props: makeVDateInputProps(),
35
38
  emits: {
39
+ save: value => true,
40
+ cancel: () => true,
36
41
  'update:modelValue': val => true
37
42
  },
38
43
  setup(props, _ref) {
39
44
  let {
45
+ emit,
40
46
  slots
41
47
  } = _ref;
42
48
  const {
43
49
  t
44
50
  } = useLocale();
45
51
  const adapter = useDate();
52
+ const {
53
+ mobile
54
+ } = useDisplay();
46
55
  const {
47
56
  isFocused,
48
57
  focus,
@@ -50,7 +59,14 @@ export const VDateInput = genericComponent()({
50
59
  } = useFocus(props);
51
60
  const model = useProxiedModel(props, 'modelValue', props.multiple ? [] : null, val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val, val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val);
52
61
  const menu = shallowRef(false);
62
+ const isEditingInput = shallowRef(false);
53
63
  const vDateInputRef = ref();
64
+ function format(date) {
65
+ if (typeof props.displayFormat === 'function') {
66
+ return props.displayFormat(date);
67
+ }
68
+ return adapter.format(date, props.displayFormat ?? 'keyboardDate');
69
+ }
54
70
  const display = computed(() => {
55
71
  const value = wrapInArray(model.value);
56
72
  if (!value.length) return null;
@@ -60,11 +76,22 @@ export const VDateInput = genericComponent()({
60
76
  if (props.multiple === 'range') {
61
77
  const start = value[0];
62
78
  const end = value[value.length - 1];
63
- return adapter.isValid(start) && adapter.isValid(end) ? `${adapter.format(adapter.date(start), 'keyboardDate')} - ${adapter.format(adapter.date(end), 'keyboardDate')}` : '';
79
+ if (!adapter.isValid(start) || !adapter.isValid(end)) return '';
80
+ return `${format(adapter.date(start))} - ${format(adapter.date(end))}`;
64
81
  }
65
- return adapter.isValid(model.value) ? adapter.format(adapter.date(model.value), 'keyboardDate') : '';
82
+ return adapter.isValid(model.value) ? format(adapter.date(model.value)) : '';
83
+ });
84
+ const inputmode = computed(() => {
85
+ if (!mobile.value) return undefined;
86
+ if (isEditingInput.value) return 'text';
87
+ return 'none';
66
88
  });
67
89
  const isInteractive = computed(() => !props.disabled && !props.readonly);
90
+ const isReadonly = computed(() => !(mobile.value && isEditingInput.value) && props.readonly);
91
+ watch(menu, val => {
92
+ if (val) return;
93
+ isEditingInput.value = false;
94
+ });
68
95
  function onKeydown(e) {
69
96
  if (e.key !== 'Enter') return;
70
97
  if (!menu.value || !isFocused.value) {
@@ -77,15 +104,38 @@ export const VDateInput = genericComponent()({
77
104
  function onClick(e) {
78
105
  e.preventDefault();
79
106
  e.stopPropagation();
80
- menu.value = true;
107
+ if (menu.value && mobile.value) {
108
+ isEditingInput.value = true;
109
+ } else {
110
+ menu.value = true;
111
+ }
81
112
  }
82
- function onSave() {
113
+ function onCancel() {
114
+ emit('cancel');
83
115
  menu.value = false;
116
+ isEditingInput.value = false;
84
117
  }
85
- function onUpdateModel(value) {
118
+ function onSave(value) {
119
+ emit('save', value);
120
+ menu.value = false;
121
+ }
122
+ function onUpdateDisplayModel(value) {
86
123
  if (value != null) return;
87
124
  model.value = null;
88
125
  }
126
+ function onUpdateMenuModel(isMenuOpen) {
127
+ if (isMenuOpen) return;
128
+ isEditingInput.value = false;
129
+ }
130
+ function onBlur() {
131
+ blur();
132
+
133
+ // When in mobile mode and editing is done (due to keyboard dismissal), close the menu
134
+ if (mobile.value && isEditingInput.value && !isFocused.value) {
135
+ menu.value = false;
136
+ isEditingInput.value = false;
137
+ }
138
+ }
89
139
  useRender(() => {
90
140
  const confirmEditProps = VConfirmEdit.filterProps(props);
91
141
  const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
@@ -96,18 +146,20 @@ export const VDateInput = genericComponent()({
96
146
  "class": props.class,
97
147
  "style": props.style,
98
148
  "modelValue": display.value,
149
+ "inputmode": inputmode.value,
150
+ "readonly": isReadonly.value,
99
151
  "onKeydown": isInteractive.value ? onKeydown : undefined,
100
152
  "focused": menu.value || isFocused.value,
101
153
  "onFocus": focus,
102
- "onBlur": blur,
154
+ "onBlur": onBlur,
103
155
  "onClick:control": isInteractive.value ? onClick : undefined,
104
156
  "onClick:prepend": isInteractive.value ? onClick : undefined,
105
- "onUpdate:modelValue": onUpdateModel
157
+ "onUpdate:modelValue": onUpdateDisplayModel
106
158
  }), {
107
159
  ...slots,
108
160
  default: () => _createVNode(_Fragment, null, [_createVNode(VMenu, {
109
161
  "modelValue": menu.value,
110
- "onUpdate:modelValue": $event => menu.value = $event,
162
+ "onUpdate:modelValue": [$event => menu.value = $event, onUpdateMenuModel],
111
163
  "activator": "parent",
112
164
  "min-width": "0",
113
165
  "eager": isFocused.value,
@@ -119,7 +171,7 @@ export const VDateInput = genericComponent()({
119
171
  "modelValue": model.value,
120
172
  "onUpdate:modelValue": $event => model.value = $event,
121
173
  "onSave": onSave,
122
- "onCancel": () => menu.value = false
174
+ "onCancel": onCancel
123
175
  }), {
124
176
  default: _ref2 => {
125
177
  let {
@@ -129,16 +181,21 @@ export const VDateInput = genericComponent()({
129
181
  cancel,
130
182
  isPristine
131
183
  } = _ref2;
184
+ function onUpdateModel(value) {
185
+ if (!props.hideActions) {
186
+ proxyModel.value = value;
187
+ } else {
188
+ model.value = value;
189
+ if (!props.multiple) {
190
+ menu.value = false;
191
+ }
192
+ }
193
+ emit('save', value);
194
+ vDateInputRef.value?.blur();
195
+ }
132
196
  return _createVNode(VDatePicker, _mergeProps(datePickerProps, {
133
197
  "modelValue": props.hideActions ? model.value : proxyModel.value,
134
- "onUpdate:modelValue": val => {
135
- if (!props.hideActions) {
136
- proxyModel.value = val;
137
- } else {
138
- model.value = val;
139
- if (!props.multiple) menu.value = false;
140
- }
141
- },
198
+ "onUpdate:modelValue": value => onUpdateModel(value),
142
199
  "onMousedown": e => e.preventDefault()
143
200
  }), {
144
201
  actions: !props.hideActions ? () => slots.actions?.({
@@ -1 +1 @@
1
- {"version":3,"file":"VDateInput.mjs","names":["makeVConfirmEditProps","VConfirmEdit","makeVDatePickerProps","VDatePicker","VMenu","makeVTextFieldProps","VTextField","useDate","makeFocusProps","useFocus","forwardRefs","useLocale","useProxiedModel","computed","ref","shallowRef","genericComponent","omit","propsFactory","useRender","wrapInArray","makeVDateInputProps","hideActions","Boolean","location","type","String","default","placeholder","prependIcon","hideHeader","showAdjacentMonths","VDateInput","name","props","emits","val","setup","_ref","slots","t","adapter","isFocused","focus","blur","model","multiple","Array","isArray","map","item","toJsDate","date","menu","vDateInputRef","display","value","length","start","end","isValid","format","isInteractive","disabled","readonly","onKeydown","e","key","target","onClick","preventDefault","stopPropagation","onSave","onUpdateModel","confirmEditProps","filterProps","datePickerProps","textFieldProps","_createVNode","_mergeProps","class","style","undefined","_Fragment","$event","onCancel","_ref2","actions","proxyModel","save","cancel","isPristine"],"sources":["../../../src/labs/VDateInput/VDateInput.tsx"],"sourcesContent":["// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\n// Types\nexport type VDateInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VDateInputActionsSlot\n default: never\n}\n\nexport const makeVDateInputProps = propsFactory({\n hideActions: Boolean,\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom start',\n },\n ...makeFocusProps(),\n ...makeVConfirmEditProps(),\n ...makeVTextFieldProps({\n placeholder: 'mm/dd/yyyy',\n prependIcon: '$calendar',\n }),\n ...omit(makeVDatePickerProps({\n hideHeader: true,\n showAdjacentMonths: true,\n }), ['active', 'location', 'rounded']),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<VDateInputSlots>()({\n name: 'VDateInput',\n\n props: makeVDateInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const adapter = useDate()\n const { isFocused, focus, blur } = useFocus(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.multiple ? [] : null,\n val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n )\n\n const menu = shallowRef(false)\n const vDateInputRef = ref()\n\n const display = computed(() => {\n const value = wrapInArray(model.value)\n\n if (!value.length) return null\n\n if (props.multiple === true) {\n return t('$vuetify.datePicker.itemsSelected', value.length)\n }\n\n if (props.multiple === 'range') {\n const start = value[0]\n const end = value[value.length - 1]\n\n return adapter.isValid(start) && adapter.isValid(end)\n ? `${adapter.format(adapter.date(start), 'keyboardDate')} - ${adapter.format(adapter.date(end), 'keyboardDate')}`\n : ''\n }\n\n return adapter.isValid(model.value) ? adapter.format(adapter.date(model.value), 'keyboardDate') : ''\n })\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n\n return\n }\n\n const target = e.target as HTMLInputElement\n\n model.value = target.value === '' ? null : target.value\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n menu.value = true\n }\n\n function onSave () {\n menu.value = false\n }\n\n function onUpdateModel (value: string) {\n if (value != null) return\n\n model.value = null\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']))\n const textFieldProps = VTextField.filterProps(props)\n\n return (\n <VTextField\n ref={ vDateInputRef }\n { ...textFieldProps }\n class={ props.class }\n style={ props.style }\n modelValue={ display.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onFocus={ focus }\n onBlur={ blur }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prepend={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ onUpdateModel }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n min-width=\"0\"\n eager={ isFocused.value }\n location={ props.location }\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n onSave={ onSave }\n onCancel={ () => menu.value = false }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n return (\n <VDatePicker\n { ...datePickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ val => {\n if (!props.hideActions) {\n proxyModel.value = val\n } else {\n model.value = val\n\n if (!props.multiple) menu.value = false\n }\n }}\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VDatePicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vDateInputRef)\n },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VDateInput.mjs","names":["makeVConfirmEditProps","VConfirmEdit","makeVDatePickerProps","VDatePicker","VMenu","makeVTextFieldProps","VTextField","useDate","makeDisplayProps","useDisplay","makeFocusProps","useFocus","forwardRefs","useLocale","useProxiedModel","computed","ref","shallowRef","watch","genericComponent","omit","propsFactory","useRender","wrapInArray","makeVDateInputProps","displayFormat","Function","String","hideActions","Boolean","location","type","default","placeholder","prependIcon","hideHeader","showAdjacentMonths","VDateInput","name","props","emits","save","value","cancel","val","setup","_ref","emit","slots","t","adapter","mobile","isFocused","focus","blur","model","multiple","Array","isArray","map","item","toJsDate","date","menu","isEditingInput","vDateInputRef","format","display","length","start","end","isValid","inputmode","undefined","isInteractive","disabled","readonly","isReadonly","onKeydown","e","key","target","onClick","preventDefault","stopPropagation","onCancel","onSave","onUpdateDisplayModel","onUpdateMenuModel","isMenuOpen","onBlur","confirmEditProps","filterProps","datePickerProps","textFieldProps","_createVNode","_mergeProps","class","style","_Fragment","$event","_ref2","actions","proxyModel","isPristine","onUpdateModel"],"sources":["../../../src/labs/VDateInput/VDateInput.tsx"],"sourcesContent":["// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\n// Types\nexport type VDateInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VDateInputActionsSlot\n default: never\n}\n\nexport const makeVDateInputProps = propsFactory({\n displayFormat: [Function, String],\n hideActions: Boolean,\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom start',\n },\n\n ...makeDisplayProps(),\n ...makeFocusProps(),\n ...makeVConfirmEditProps(),\n ...makeVTextFieldProps({\n placeholder: 'mm/dd/yyyy',\n prependIcon: '$calendar',\n }),\n ...omit(makeVDatePickerProps({\n hideHeader: true,\n showAdjacentMonths: true,\n }), ['active', 'location', 'rounded']),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<VDateInputSlots>()({\n name: 'VDateInput',\n\n props: makeVDateInputProps(),\n\n emits: {\n save: (value: string) => true,\n cancel: () => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { emit, slots }) {\n const { t } = useLocale()\n const adapter = useDate()\n const { mobile } = useDisplay()\n const { isFocused, focus, blur } = useFocus(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.multiple ? [] : null,\n val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n )\n\n const menu = shallowRef(false)\n const isEditingInput = shallowRef(false)\n const vDateInputRef = ref()\n\n function format (date: unknown) {\n if (typeof props.displayFormat === 'function') {\n return props.displayFormat(date)\n }\n\n return adapter.format(date, props.displayFormat ?? 'keyboardDate')\n }\n\n const display = computed(() => {\n const value = wrapInArray(model.value)\n\n if (!value.length) return null\n\n if (props.multiple === true) {\n return t('$vuetify.datePicker.itemsSelected', value.length)\n }\n\n if (props.multiple === 'range') {\n const start = value[0]\n const end = value[value.length - 1]\n\n if (!adapter.isValid(start) || !adapter.isValid(end)) return ''\n\n return `${format(adapter.date(start))} - ${format(adapter.date(end))}`\n }\n\n return adapter.isValid(model.value) ? format(adapter.date(model.value)) : ''\n })\n\n const inputmode = computed(() => {\n if (!mobile.value) return undefined\n if (isEditingInput.value) return 'text'\n\n return 'none'\n })\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n const isReadonly = computed(() => !(mobile.value && isEditingInput.value) && props.readonly)\n\n watch(menu, val => {\n if (val) return\n\n isEditingInput.value = false\n })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n\n return\n }\n\n const target = e.target as HTMLInputElement\n\n model.value = target.value === '' ? null : target.value\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n if (menu.value && mobile.value) {\n isEditingInput.value = true\n } else {\n menu.value = true\n }\n }\n\n function onCancel () {\n emit('cancel')\n menu.value = false\n isEditingInput.value = false\n }\n\n function onSave (value: string) {\n emit('save', value)\n menu.value = false\n }\n\n function onUpdateDisplayModel (value: string) {\n if (value != null) return\n\n model.value = null\n }\n\n function onUpdateMenuModel (isMenuOpen: boolean) {\n if (isMenuOpen) return\n\n isEditingInput.value = false\n }\n\n function onBlur () {\n blur()\n\n // When in mobile mode and editing is done (due to keyboard dismissal), close the menu\n if (mobile.value && isEditingInput.value && !isFocused.value) {\n menu.value = false\n isEditingInput.value = false\n }\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']))\n const textFieldProps = VTextField.filterProps(props)\n\n return (\n <VTextField\n ref={ vDateInputRef }\n { ...textFieldProps }\n class={ props.class }\n style={ props.style }\n modelValue={ display.value }\n inputmode={ inputmode.value }\n readonly={ isReadonly.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onFocus={ focus }\n onBlur={ onBlur }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prepend={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ onUpdateDisplayModel }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n min-width=\"0\"\n eager={ isFocused.value }\n location={ props.location }\n closeOnContentClick={ false }\n openOnClick={ false }\n onUpdate:modelValue={ onUpdateMenuModel }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n\n if (!props.multiple) {\n menu.value = false\n }\n }\n\n emit('save', value)\n vDateInputRef.value?.blur()\n }\n\n return (\n <VDatePicker\n { ...datePickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VDatePicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vDateInputRef)\n },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n"],"mappings":"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","ignoreList":[]}