@vuetify/nightly 3.8.0-beta.0-dev.2025-03-25 → 3.8.0-beta.0-dev.2025-03-26

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.0-beta.0-dev.2025-03-25
2
+ * Vuetify v3.8.0-beta.0-dev.2025-03-26
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -28940,6 +28940,7 @@
28940
28940
  type: String,
28941
28941
  default: 'bottom start'
28942
28942
  },
28943
+ ...makeDisplayProps(),
28943
28944
  ...makeFocusProps(),
28944
28945
  ...makeVConfirmEditProps({
28945
28946
  hideActions: true
@@ -28970,6 +28971,9 @@
28970
28971
  t
28971
28972
  } = useLocale();
28972
28973
  const adapter = useDate();
28974
+ const {
28975
+ mobile
28976
+ } = useDisplay();
28973
28977
  const {
28974
28978
  isFocused,
28975
28979
  focus,
@@ -28977,6 +28981,7 @@
28977
28981
  } = useFocus(props);
28978
28982
  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);
28979
28983
  const menu = vue.shallowRef(false);
28984
+ const isEditingInput = vue.shallowRef(false);
28980
28985
  const vDateInputRef = vue.ref();
28981
28986
  function format(date) {
28982
28987
  if (typeof props.displayFormat === 'function') {
@@ -28998,7 +29003,17 @@
28998
29003
  }
28999
29004
  return adapter.isValid(model.value) ? format(adapter.date(model.value)) : '';
29000
29005
  });
29006
+ const inputmode = vue.computed(() => {
29007
+ if (!mobile.value) return undefined;
29008
+ if (isEditingInput.value) return 'text';
29009
+ return 'none';
29010
+ });
29001
29011
  const isInteractive = vue.computed(() => !props.disabled && !props.readonly);
29012
+ const isReadonly = vue.computed(() => !(mobile.value && isEditingInput.value) && props.readonly);
29013
+ vue.watch(menu, val => {
29014
+ if (val) return;
29015
+ isEditingInput.value = false;
29016
+ });
29002
29017
  function onKeydown(e) {
29003
29018
  if (e.key !== 'Enter') return;
29004
29019
  if (!menu.value || !isFocused.value) {
@@ -29011,11 +29026,16 @@
29011
29026
  function onClick(e) {
29012
29027
  e.preventDefault();
29013
29028
  e.stopPropagation();
29014
- menu.value = true;
29029
+ if (menu.value && mobile.value) {
29030
+ isEditingInput.value = true;
29031
+ } else {
29032
+ menu.value = true;
29033
+ }
29015
29034
  }
29016
29035
  function onCancel() {
29017
29036
  emit('cancel');
29018
29037
  menu.value = false;
29038
+ isEditingInput.value = false;
29019
29039
  }
29020
29040
  function onSave(value) {
29021
29041
  emit('save', value);
@@ -29025,6 +29045,19 @@
29025
29045
  if (value != null) return;
29026
29046
  model.value = null;
29027
29047
  }
29048
+ function onUpdateMenuModel(isMenuOpen) {
29049
+ if (isMenuOpen) return;
29050
+ isEditingInput.value = false;
29051
+ }
29052
+ function onBlur() {
29053
+ blur();
29054
+
29055
+ // When in mobile mode and editing is done (due to keyboard dismissal), close the menu
29056
+ if (mobile.value && isEditingInput.value && !isFocused.value) {
29057
+ menu.value = false;
29058
+ isEditingInput.value = false;
29059
+ }
29060
+ }
29028
29061
  useRender(() => {
29029
29062
  const confirmEditProps = VConfirmEdit.filterProps(props);
29030
29063
  const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
@@ -29035,10 +29068,12 @@
29035
29068
  "class": props.class,
29036
29069
  "style": props.style,
29037
29070
  "modelValue": display.value,
29071
+ "inputmode": inputmode.value,
29072
+ "readonly": isReadonly.value,
29038
29073
  "onKeydown": isInteractive.value ? onKeydown : undefined,
29039
29074
  "focused": menu.value || isFocused.value,
29040
29075
  "onFocus": focus,
29041
- "onBlur": blur,
29076
+ "onBlur": onBlur,
29042
29077
  "onClick:control": isInteractive.value ? onClick : undefined,
29043
29078
  "onClick:prepend": isInteractive.value ? onClick : undefined,
29044
29079
  "onUpdate:modelValue": onUpdateDisplayModel
@@ -29046,7 +29081,7 @@
29046
29081
  ...slots,
29047
29082
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, {
29048
29083
  "modelValue": menu.value,
29049
- "onUpdate:modelValue": $event => menu.value = $event,
29084
+ "onUpdate:modelValue": [$event => menu.value = $event, onUpdateMenuModel],
29050
29085
  "activator": "parent",
29051
29086
  "min-width": "0",
29052
29087
  "eager": isFocused.value,
@@ -31314,7 +31349,7 @@
31314
31349
  };
31315
31350
  });
31316
31351
  }
31317
- const version$1 = "3.8.0-beta.0-dev.2025-03-25";
31352
+ const version$1 = "3.8.0-beta.0-dev.2025-03-26";
31318
31353
  createVuetify$1.version = version$1;
31319
31354
 
31320
31355
  // Vue's inject() can only be used in setup
@@ -31599,7 +31634,7 @@
31599
31634
 
31600
31635
  /* eslint-disable local-rules/sort-imports */
31601
31636
 
31602
- const version = "3.8.0-beta.0-dev.2025-03-25";
31637
+ const version = "3.8.0-beta.0-dev.2025-03-26";
31603
31638
 
31604
31639
  /* eslint-disable local-rules/sort-imports */
31605
31640