vuetify 3.7.17 → 3.7.19

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 (43) hide show
  1. package/dist/json/attributes.json +3397 -3385
  2. package/dist/json/importMap-labs.json +16 -16
  3. package/dist/json/importMap.json +168 -168
  4. package/dist/json/tags.json +3 -0
  5. package/dist/json/web-types.json +6343 -6293
  6. package/dist/vuetify-labs.css +3200 -3200
  7. package/dist/vuetify-labs.d.ts +77 -35
  8. package/dist/vuetify-labs.esm.js +116 -37
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +116 -37
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +2769 -2769
  13. package/dist/vuetify.d.ts +95 -92
  14. package/dist/vuetify.esm.js +43 -20
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +43 -20
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +12 -12
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VDataTable/VDataTableRow.mjs +18 -3
  22. package/lib/components/VDataTable/VDataTableRow.mjs.map +1 -1
  23. package/lib/components/VDataTable/index.d.mts +91 -88
  24. package/lib/components/VDatePicker/VDatePicker.mjs +1 -1
  25. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  26. package/lib/components/VDatePicker/VDatePickerMonth.mjs +21 -12
  27. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  28. package/lib/components/VDatePicker/index.d.mts +3 -3
  29. package/lib/components/VIcon/VIcon.mjs +2 -2
  30. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  31. package/lib/components/index.d.mts +38 -35
  32. package/lib/composables/calendar.mjs +1 -1
  33. package/lib/composables/calendar.mjs.map +1 -1
  34. package/lib/entry-bundler.mjs +1 -1
  35. package/lib/framework.mjs +1 -1
  36. package/lib/index.d.mts +57 -57
  37. package/lib/labs/VDateInput/VDateInput.mjs +75 -18
  38. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  39. package/lib/labs/VDateInput/index.d.mts +43 -0
  40. package/lib/labs/components.d.mts +43 -4
  41. package/lib/util/helpers.mjs +1 -1
  42. package/lib/util/helpers.mjs.map +1 -1
  43. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.17
2
+ * Vuetify v3.7.19
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -229,7 +229,7 @@ function has(obj, key) {
229
229
  function pick(obj, paths) {
230
230
  const found = {};
231
231
  for (const key of paths) {
232
- if (Object.hasOwn(obj, key)) {
232
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
233
233
  found[key] = obj[key];
234
234
  }
235
235
  }
@@ -4670,7 +4670,7 @@ const VIcon = genericComponent()({
4670
4670
  const slotIcon = ref();
4671
4671
  const {
4672
4672
  themeClasses
4673
- } = provideTheme(props);
4673
+ } = useTheme();
4674
4674
  const {
4675
4675
  iconData
4676
4676
  } = useIcon(computed(() => slotIcon.value || props.icon));
@@ -20343,22 +20343,37 @@ const VDataTableRow = genericComponent()({
20343
20343
  "width": !mobile.value ? column.width : undefined
20344
20344
  }, cellProps, columnCellProps), {
20345
20345
  default: () => {
20346
- if (slots[slotName] && !mobile.value) return slots[slotName]?.(slotProps);
20347
20346
  if (column.key === 'data-table-select') {
20348
- return slots['item.data-table-select']?.(slotProps) ?? createVNode(VCheckboxBtn, {
20347
+ return slots['item.data-table-select']?.({
20348
+ ...slotProps,
20349
+ props: {
20350
+ disabled: !item.selectable,
20351
+ modelValue: isSelected([item]),
20352
+ onClick: withModifiers(() => toggleSelect(item), ['stop'])
20353
+ }
20354
+ }) ?? createVNode(VCheckboxBtn, {
20349
20355
  "disabled": !item.selectable,
20350
20356
  "modelValue": isSelected([item]),
20351
20357
  "onClick": withModifiers(() => toggleSelect(item), ['stop'])
20352
20358
  }, null);
20353
20359
  }
20354
20360
  if (column.key === 'data-table-expand') {
20355
- return slots['item.data-table-expand']?.(slotProps) ?? createVNode(VBtn, {
20361
+ return slots['item.data-table-expand']?.({
20362
+ ...slotProps,
20363
+ props: {
20364
+ icon: isExpanded(item) ? '$collapse' : '$expand',
20365
+ size: 'small',
20366
+ variant: 'text',
20367
+ onClick: withModifiers(() => toggleExpand(item), ['stop'])
20368
+ }
20369
+ }) ?? createVNode(VBtn, {
20356
20370
  "icon": isExpanded(item) ? '$collapse' : '$expand',
20357
20371
  "size": "small",
20358
20372
  "variant": "text",
20359
20373
  "onClick": withModifiers(() => toggleExpand(item), ['stop'])
20360
20374
  }, null);
20361
20375
  }
20376
+ if (slots[slotName] && !mobile.value) return slots[slotName](slotProps);
20362
20377
  const displayValue = toDisplayString(slotProps.value);
20363
20378
  return !mobile.value ? displayValue : createVNode(Fragment, null, [createVNode("div", {
20364
20379
  "class": "v-data-table__td-title"
@@ -21687,7 +21702,7 @@ const makeCalendarProps = propsFactory({
21687
21702
  }, 'calendar');
21688
21703
  function useCalendar(props) {
21689
21704
  const adapter = useDate();
21690
- const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v));
21705
+ const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v).map(i => adapter.date(i)));
21691
21706
  const displayValue = computed(() => {
21692
21707
  if (props.displayValue) return adapter.date(props.displayValue);
21693
21708
  if (model.value.length > 0) return adapter.date(model.value[0]);
@@ -21916,7 +21931,7 @@ const VDatePickerMonth = genericComponent()({
21916
21931
  model.value = [value];
21917
21932
  }
21918
21933
  }
21919
- useRender(() => createVNode("div", {
21934
+ return () => createVNode("div", {
21920
21935
  "class": "v-date-picker-month"
21921
21936
  }, [props.showWeek && createVNode("div", {
21922
21937
  "key": "weeks",
@@ -21938,13 +21953,6 @@ const VDatePickerMonth = genericComponent()({
21938
21953
  }, [weekDay])), daysInMonth.value.map((item, i) => {
21939
21954
  const slotProps = {
21940
21955
  props: {
21941
- class: 'v-date-picker-month__day-btn',
21942
- color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
21943
- disabled: item.isDisabled,
21944
- icon: true,
21945
- ripple: false,
21946
- text: item.localized,
21947
- variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
21948
21956
  onClick: () => onClick(item.date)
21949
21957
  },
21950
21958
  item,
@@ -21962,9 +21970,24 @@ const VDatePickerMonth = genericComponent()({
21962
21970
  'v-date-picker-month__day--week-start': item.isWeekStart
21963
21971
  }],
21964
21972
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
21965
- }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, null))]);
21973
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && createVNode(VDefaultsProvider, {
21974
+ "defaults": {
21975
+ VBtn: {
21976
+ class: 'v-date-picker-month__day-btn',
21977
+ color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
21978
+ disabled: item.isDisabled,
21979
+ icon: true,
21980
+ ripple: false,
21981
+ text: item.localized,
21982
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
21983
+ onClick: () => onClick(item.date)
21984
+ }
21985
+ }
21986
+ }, {
21987
+ default: () => [slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, null)]
21988
+ })]);
21966
21989
  })])]
21967
- })]));
21990
+ })]);
21968
21991
  }
21969
21992
  });
21970
21993
 
@@ -22260,7 +22283,7 @@ const VDatePicker = genericComponent()({
22260
22283
  const {
22261
22284
  t
22262
22285
  } = useLocale();
22263
- const model = useProxiedModel(props, 'modelValue', undefined, v => wrapInArray(v), v => props.multiple ? v : v[0]);
22286
+ const model = useProxiedModel(props, 'modelValue', undefined, v => wrapInArray(v).map(i => adapter.date(i)), v => props.multiple ? v : v[0]);
22264
22287
  const viewMode = useProxiedModel(props, 'viewMode');
22265
22288
  // const inputMode = useProxiedModel(props, 'inputMode')
22266
22289
 
@@ -28229,11 +28252,13 @@ const VCalendar = genericComponent()({
28229
28252
  // Types
28230
28253
 
28231
28254
  const makeVDateInputProps = propsFactory({
28255
+ displayFormat: [Function, String],
28232
28256
  hideActions: Boolean,
28233
28257
  location: {
28234
28258
  type: String,
28235
28259
  default: 'bottom start'
28236
28260
  },
28261
+ ...makeDisplayProps(),
28237
28262
  ...makeFocusProps(),
28238
28263
  ...makeVConfirmEditProps(),
28239
28264
  ...makeVTextFieldProps({
@@ -28249,16 +28274,22 @@ const VDateInput = genericComponent()({
28249
28274
  name: 'VDateInput',
28250
28275
  props: makeVDateInputProps(),
28251
28276
  emits: {
28277
+ save: value => true,
28278
+ cancel: () => true,
28252
28279
  'update:modelValue': val => true
28253
28280
  },
28254
28281
  setup(props, _ref) {
28255
28282
  let {
28283
+ emit,
28256
28284
  slots
28257
28285
  } = _ref;
28258
28286
  const {
28259
28287
  t
28260
28288
  } = useLocale();
28261
28289
  const adapter = useDate();
28290
+ const {
28291
+ mobile
28292
+ } = useDisplay();
28262
28293
  const {
28263
28294
  isFocused,
28264
28295
  focus,
@@ -28266,7 +28297,14 @@ const VDateInput = genericComponent()({
28266
28297
  } = useFocus(props);
28267
28298
  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);
28268
28299
  const menu = shallowRef(false);
28300
+ const isEditingInput = shallowRef(false);
28269
28301
  const vDateInputRef = ref();
28302
+ function format(date) {
28303
+ if (typeof props.displayFormat === 'function') {
28304
+ return props.displayFormat(date);
28305
+ }
28306
+ return adapter.format(date, props.displayFormat ?? 'keyboardDate');
28307
+ }
28270
28308
  const display = computed(() => {
28271
28309
  const value = wrapInArray(model.value);
28272
28310
  if (!value.length) return null;
@@ -28276,11 +28314,22 @@ const VDateInput = genericComponent()({
28276
28314
  if (props.multiple === 'range') {
28277
28315
  const start = value[0];
28278
28316
  const end = value[value.length - 1];
28279
- return adapter.isValid(start) && adapter.isValid(end) ? `${adapter.format(adapter.date(start), 'keyboardDate')} - ${adapter.format(adapter.date(end), 'keyboardDate')}` : '';
28317
+ if (!adapter.isValid(start) || !adapter.isValid(end)) return '';
28318
+ return `${format(adapter.date(start))} - ${format(adapter.date(end))}`;
28280
28319
  }
28281
- return adapter.isValid(model.value) ? adapter.format(adapter.date(model.value), 'keyboardDate') : '';
28320
+ return adapter.isValid(model.value) ? format(adapter.date(model.value)) : '';
28321
+ });
28322
+ const inputmode = computed(() => {
28323
+ if (!mobile.value) return undefined;
28324
+ if (isEditingInput.value) return 'text';
28325
+ return 'none';
28282
28326
  });
28283
28327
  const isInteractive = computed(() => !props.disabled && !props.readonly);
28328
+ const isReadonly = computed(() => !(mobile.value && isEditingInput.value) && props.readonly);
28329
+ watch(menu, val => {
28330
+ if (val) return;
28331
+ isEditingInput.value = false;
28332
+ });
28284
28333
  function onKeydown(e) {
28285
28334
  if (e.key !== 'Enter') return;
28286
28335
  if (!menu.value || !isFocused.value) {
@@ -28293,15 +28342,38 @@ const VDateInput = genericComponent()({
28293
28342
  function onClick(e) {
28294
28343
  e.preventDefault();
28295
28344
  e.stopPropagation();
28296
- menu.value = true;
28345
+ if (menu.value && mobile.value) {
28346
+ isEditingInput.value = true;
28347
+ } else {
28348
+ menu.value = true;
28349
+ }
28350
+ }
28351
+ function onCancel() {
28352
+ emit('cancel');
28353
+ menu.value = false;
28354
+ isEditingInput.value = false;
28297
28355
  }
28298
- function onSave() {
28356
+ function onSave(value) {
28357
+ emit('save', value);
28299
28358
  menu.value = false;
28300
28359
  }
28301
- function onUpdateModel(value) {
28360
+ function onUpdateDisplayModel(value) {
28302
28361
  if (value != null) return;
28303
28362
  model.value = null;
28304
28363
  }
28364
+ function onUpdateMenuModel(isMenuOpen) {
28365
+ if (isMenuOpen) return;
28366
+ isEditingInput.value = false;
28367
+ }
28368
+ function onBlur() {
28369
+ blur();
28370
+
28371
+ // When in mobile mode and editing is done (due to keyboard dismissal), close the menu
28372
+ if (mobile.value && isEditingInput.value && !isFocused.value) {
28373
+ menu.value = false;
28374
+ isEditingInput.value = false;
28375
+ }
28376
+ }
28305
28377
  useRender(() => {
28306
28378
  const confirmEditProps = VConfirmEdit.filterProps(props);
28307
28379
  const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
@@ -28312,18 +28384,20 @@ const VDateInput = genericComponent()({
28312
28384
  "class": props.class,
28313
28385
  "style": props.style,
28314
28386
  "modelValue": display.value,
28387
+ "inputmode": inputmode.value,
28388
+ "readonly": isReadonly.value,
28315
28389
  "onKeydown": isInteractive.value ? onKeydown : undefined,
28316
28390
  "focused": menu.value || isFocused.value,
28317
28391
  "onFocus": focus,
28318
- "onBlur": blur,
28392
+ "onBlur": onBlur,
28319
28393
  "onClick:control": isInteractive.value ? onClick : undefined,
28320
28394
  "onClick:prepend": isInteractive.value ? onClick : undefined,
28321
- "onUpdate:modelValue": onUpdateModel
28395
+ "onUpdate:modelValue": onUpdateDisplayModel
28322
28396
  }), {
28323
28397
  ...slots,
28324
28398
  default: () => createVNode(Fragment, null, [createVNode(VMenu, {
28325
28399
  "modelValue": menu.value,
28326
- "onUpdate:modelValue": $event => menu.value = $event,
28400
+ "onUpdate:modelValue": [$event => menu.value = $event, onUpdateMenuModel],
28327
28401
  "activator": "parent",
28328
28402
  "min-width": "0",
28329
28403
  "eager": isFocused.value,
@@ -28335,7 +28409,7 @@ const VDateInput = genericComponent()({
28335
28409
  "modelValue": model.value,
28336
28410
  "onUpdate:modelValue": $event => model.value = $event,
28337
28411
  "onSave": onSave,
28338
- "onCancel": () => menu.value = false
28412
+ "onCancel": onCancel
28339
28413
  }), {
28340
28414
  default: _ref2 => {
28341
28415
  let {
@@ -28345,16 +28419,21 @@ const VDateInput = genericComponent()({
28345
28419
  cancel,
28346
28420
  isPristine
28347
28421
  } = _ref2;
28422
+ function onUpdateModel(value) {
28423
+ if (!props.hideActions) {
28424
+ proxyModel.value = value;
28425
+ } else {
28426
+ model.value = value;
28427
+ if (!props.multiple) {
28428
+ menu.value = false;
28429
+ }
28430
+ }
28431
+ emit('save', value);
28432
+ vDateInputRef.value?.blur();
28433
+ }
28348
28434
  return createVNode(VDatePicker, mergeProps(datePickerProps, {
28349
28435
  "modelValue": props.hideActions ? model.value : proxyModel.value,
28350
- "onUpdate:modelValue": val => {
28351
- if (!props.hideActions) {
28352
- proxyModel.value = val;
28353
- } else {
28354
- model.value = val;
28355
- if (!props.multiple) menu.value = false;
28356
- }
28357
- },
28436
+ "onUpdate:modelValue": value => onUpdateModel(value),
28358
28437
  "onMousedown": e => e.preventDefault()
28359
28438
  }), {
28360
28439
  actions: !props.hideActions ? () => slots.actions?.({
@@ -31072,7 +31151,7 @@ function createVuetify$1() {
31072
31151
  goTo
31073
31152
  };
31074
31153
  }
31075
- const version$1 = "3.7.17";
31154
+ const version$1 = "3.7.19";
31076
31155
  createVuetify$1.version = version$1;
31077
31156
 
31078
31157
  // Vue's inject() can only be used in setup
@@ -31325,7 +31404,7 @@ var index = /*#__PURE__*/Object.freeze({
31325
31404
 
31326
31405
  /* eslint-disable local-rules/sort-imports */
31327
31406
 
31328
- const version = "3.7.17";
31407
+ const version = "3.7.19";
31329
31408
 
31330
31409
  /* eslint-disable local-rules/sort-imports */
31331
31410