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

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 (53) hide show
  1. package/CHANGELOG.md +6 -3
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +3618 -3502
  4. package/dist/json/importMap-labs.json +34 -30
  5. package/dist/json/importMap.json +158 -158
  6. package/dist/json/tags.json +34 -0
  7. package/dist/json/web-types.json +6539 -6221
  8. package/dist/vuetify-labs.cjs +204 -13
  9. package/dist/vuetify-labs.css +3192 -3015
  10. package/dist/vuetify-labs.d.ts +527 -230
  11. package/dist/vuetify-labs.esm.js +204 -13
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +204 -13
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +31 -13
  16. package/dist/vuetify.cjs.map +1 -1
  17. package/dist/vuetify.css +2415 -2415
  18. package/dist/vuetify.d.ts +118 -143
  19. package/dist/vuetify.esm.js +31 -13
  20. package/dist/vuetify.esm.js.map +1 -1
  21. package/dist/vuetify.js +31 -13
  22. package/dist/vuetify.js.map +1 -1
  23. package/dist/vuetify.min.css +2 -2
  24. package/dist/vuetify.min.js +18 -17
  25. package/dist/vuetify.min.js.map +1 -1
  26. package/lib/components/VConfirmEdit/VConfirmEdit.d.ts +31 -6
  27. package/lib/components/VConfirmEdit/VConfirmEdit.js +17 -2
  28. package/lib/components/VConfirmEdit/VConfirmEdit.js.map +1 -1
  29. package/lib/components/VDatePicker/VDatePicker.d.ts +33 -78
  30. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +33 -78
  31. package/lib/composables/calendar.d.ts +12 -35
  32. package/lib/composables/calendar.js +11 -8
  33. package/lib/composables/calendar.js.map +1 -1
  34. package/lib/entry-bundler.js +1 -1
  35. package/lib/framework.d.ts +58 -57
  36. package/lib/framework.js +1 -1
  37. package/lib/labs/VCalendar/VCalendar.d.ts +33 -78
  38. package/lib/labs/VDateInput/VDateInput.d.ts +33 -78
  39. package/lib/labs/VDateInput/VDateInput.js +4 -0
  40. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  41. package/lib/labs/VIconBtn/VIconBtn.css +178 -0
  42. package/lib/labs/VIconBtn/VIconBtn.d.ts +608 -0
  43. package/lib/labs/VIconBtn/VIconBtn.js +184 -0
  44. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -0
  45. package/lib/labs/VIconBtn/VIconBtn.scss +110 -0
  46. package/lib/labs/VIconBtn/_variables.scss +36 -0
  47. package/lib/labs/VIconBtn/index.d.ts +1 -0
  48. package/lib/labs/VIconBtn/index.js +2 -0
  49. package/lib/labs/VIconBtn/index.js.map +1 -0
  50. package/lib/labs/components.d.ts +1 -0
  51. package/lib/labs/components.js +1 -0
  52. package/lib/labs/components.js.map +1 -1
  53. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.0-beta.0-dev.2025-03-26
2
+ * Vuetify v3.8.0-beta.0-dev.2025-03-29
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -18439,6 +18439,10 @@ const makeVConfirmEditProps = propsFactory({
18439
18439
  type: String,
18440
18440
  default: '$vuetify.confirmEdit.ok'
18441
18441
  },
18442
+ disabled: {
18443
+ type: [Boolean, Array],
18444
+ default: undefined
18445
+ },
18442
18446
  hideActions: Boolean
18443
18447
  }, 'VConfirmEdit');
18444
18448
  const VConfirmEdit = genericComponent()({
@@ -18465,6 +18469,17 @@ const VConfirmEdit = genericComponent()({
18465
18469
  const isPristine = computed(() => {
18466
18470
  return deepEqual(model.value, internalModel.value);
18467
18471
  });
18472
+ function isActionDisabled(action) {
18473
+ if (typeof props.disabled === 'boolean') {
18474
+ return props.disabled;
18475
+ }
18476
+ if (Array.isArray(props.disabled)) {
18477
+ return props.disabled.includes(action);
18478
+ }
18479
+ return isPristine.value;
18480
+ }
18481
+ const isSaveDisabled = computed(() => isActionDisabled('save'));
18482
+ const isCancelDisabled = computed(() => isActionDisabled('cancel'));
18468
18483
  function save() {
18469
18484
  model.value = internalModel.value;
18470
18485
  emit('save', internalModel.value);
@@ -18475,13 +18490,13 @@ const VConfirmEdit = genericComponent()({
18475
18490
  }
18476
18491
  function actions(actionsProps) {
18477
18492
  return createVNode(Fragment, null, [createVNode(VBtn, mergeProps({
18478
- "disabled": isPristine.value,
18493
+ "disabled": isCancelDisabled.value,
18479
18494
  "variant": "text",
18480
18495
  "color": props.color,
18481
18496
  "onClick": cancel,
18482
18497
  "text": t(props.cancelText)
18483
18498
  }, actionsProps), null), createVNode(VBtn, mergeProps({
18484
- "disabled": isPristine.value,
18499
+ "disabled": isSaveDisabled.value,
18485
18500
  "variant": "text",
18486
18501
  "color": props.color,
18487
18502
  "onClick": save,
@@ -21936,7 +21951,10 @@ const makeCalendarProps = propsFactory({
21936
21951
  type: String,
21937
21952
  default: 'dynamic'
21938
21953
  },
21939
- firstDayOfWeek: [Number, String]
21954
+ firstDayOfWeek: {
21955
+ type: [Number, String],
21956
+ default: 0
21957
+ }
21940
21958
  }, 'calendar');
21941
21959
  function useCalendar(props) {
21942
21960
  const adapter = useDate();
@@ -21957,15 +21975,15 @@ function useCalendar(props) {
21957
21975
  const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
21958
21976
  return adapter.setMonth(date, value);
21959
21977
  }, v => adapter.getMonth(v));
21960
- const defaultFirstDayOfWeek = computed(() => {
21961
- return props.firstDayOfWeek ?? props.weekdays[0];
21962
- });
21963
21978
  const weekDays = computed(() => {
21964
- const firstDayOfWeek = Number(props.firstDayOfWeek ?? 0);
21965
- return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
21979
+ const firstDayOfWeek = Number(props.firstDayOfWeek);
21980
+
21981
+ // Always generate all days, regardless of props.weekdays
21982
+ return [0, 1, 2, 3, 4, 5, 6].map(day => (day + firstDayOfWeek) % 7);
21966
21983
  });
21967
21984
  const weeksInMonth = computed(() => {
21968
- const weeks = adapter.getWeekArray(month.value, defaultFirstDayOfWeek.value);
21985
+ const firstDayOfWeek = Number(props.firstDayOfWeek);
21986
+ const weeks = adapter.getWeekArray(month.value, firstDayOfWeek);
21969
21987
  const days = weeks.flat();
21970
21988
 
21971
21989
  // Make sure there's always 6 weeks in month (6 * 7 days)
@@ -22043,7 +22061,7 @@ function useCalendar(props) {
22043
22061
  if (typeof props.allowedDates === 'function') {
22044
22062
  return !props.allowedDates(date);
22045
22063
  }
22046
- return false;
22064
+ return !props.weekdays.includes(adapter.toJsDate(date).getDay());
22047
22065
  }
22048
22066
  return {
22049
22067
  displayValue,
@@ -28979,6 +28997,7 @@ const VDateInput = genericComponent()({
28979
28997
  const menu = shallowRef(false);
28980
28998
  const isEditingInput = shallowRef(false);
28981
28999
  const vDateInputRef = ref();
29000
+ const disabledActions = ref(['save']);
28982
29001
  function format(date) {
28983
29002
  if (typeof props.displayFormat === 'function') {
28984
29003
  return props.displayFormat(date);
@@ -29009,6 +29028,7 @@ const VDateInput = genericComponent()({
29009
29028
  watch(menu, val => {
29010
29029
  if (val) return;
29011
29030
  isEditingInput.value = false;
29031
+ disabledActions.value = ['save'];
29012
29032
  });
29013
29033
  function onKeydown(e) {
29014
29034
  if (e.key !== 'Enter') return;
@@ -29088,6 +29108,7 @@ const VDateInput = genericComponent()({
29088
29108
  default: () => [createVNode(VConfirmEdit, mergeProps(confirmEditProps, {
29089
29109
  "modelValue": model.value,
29090
29110
  "onUpdate:modelValue": $event => model.value = $event,
29111
+ "disabled": disabledActions.value,
29091
29112
  "onSave": onSave,
29092
29113
  "onCancel": onCancel
29093
29114
  }), {
@@ -29110,6 +29131,7 @@ const VDateInput = genericComponent()({
29110
29131
  }
29111
29132
  emit('save', value);
29112
29133
  vDateInputRef.value?.blur();
29134
+ disabledActions.value = [];
29113
29135
  }
29114
29136
  return createVNode(VDatePicker, mergeProps(datePickerProps, {
29115
29137
  "modelValue": props.hideActions ? model.value : proxyModel.value,
@@ -29447,6 +29469,174 @@ const VFileUpload = genericComponent()({
29447
29469
 
29448
29470
  // Types
29449
29471
 
29472
+ const makeVIconBtnProps = propsFactory({
29473
+ active: {
29474
+ type: Boolean,
29475
+ default: undefined
29476
+ },
29477
+ activeColor: String,
29478
+ activeIcon: [String, Function, Object],
29479
+ activeVariant: String,
29480
+ baseVariant: {
29481
+ type: String,
29482
+ default: 'tonal'
29483
+ },
29484
+ disabled: Boolean,
29485
+ height: [Number, String],
29486
+ width: [Number, String],
29487
+ hideOverlay: Boolean,
29488
+ icon: [String, Function, Object],
29489
+ iconColor: String,
29490
+ iconSize: {
29491
+ type: [Number, String],
29492
+ default: 'default'
29493
+ },
29494
+ iconSizes: {
29495
+ type: Array,
29496
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
29497
+ },
29498
+ loading: Boolean,
29499
+ opacity: [Number, String],
29500
+ readonly: Boolean,
29501
+ rotate: [Number, String],
29502
+ size: {
29503
+ type: [Number, String],
29504
+ default: 'default'
29505
+ },
29506
+ sizes: {
29507
+ type: Array,
29508
+ default: () => [['x-small', 16], ['small', 24], ['default', 40], ['large', 48], ['x-large', 56]]
29509
+ },
29510
+ text: {
29511
+ type: [String, Number, Boolean],
29512
+ default: undefined
29513
+ },
29514
+ ...makeBorderProps(),
29515
+ ...makeComponentProps(),
29516
+ ...makeElevationProps(),
29517
+ ...makeRoundedProps(),
29518
+ ...makeTagProps({
29519
+ tag: 'button'
29520
+ }),
29521
+ ...makeThemeProps(),
29522
+ ...makeVariantProps({
29523
+ variant: 'flat'
29524
+ })
29525
+ }, 'VIconBtn');
29526
+ const VIconBtn = genericComponent()({
29527
+ name: 'VIconBtn',
29528
+ props: makeVIconBtnProps(),
29529
+ emits: {
29530
+ 'update:active': value => true
29531
+ },
29532
+ setup(props, _ref) {
29533
+ let {
29534
+ attrs,
29535
+ slots
29536
+ } = _ref;
29537
+ const isActive = useProxiedModel(props, 'active');
29538
+ const {
29539
+ themeClasses
29540
+ } = provideTheme(props);
29541
+ const {
29542
+ borderClasses
29543
+ } = useBorder(props);
29544
+ const {
29545
+ elevationClasses
29546
+ } = useElevation(props);
29547
+ const {
29548
+ roundedClasses
29549
+ } = useRounded(props);
29550
+ const {
29551
+ colorClasses,
29552
+ colorStyles,
29553
+ variantClasses
29554
+ } = useVariant(toRef(() => ({
29555
+ color: (() => {
29556
+ if (props.disabled) return undefined;
29557
+ if (!isActive.value) return props.color;
29558
+ // Use an inline fallback as opposed to setting a default color
29559
+ // because non-toggle buttons are default flat whereas toggle
29560
+ // buttons are default tonal and active flat. The exact use
29561
+ // case for this is a toggle button with no active color.
29562
+ return props.activeColor ?? props.color ?? 'surface-variant';
29563
+ })(),
29564
+ variant: (() => {
29565
+ if (isActive.value === undefined) return props.variant;
29566
+ if (isActive.value) return props.activeVariant ?? props.variant;
29567
+ return props.baseVariant ?? props.variant;
29568
+ })()
29569
+ })));
29570
+ const btnSizeMap = new Map(props.sizes);
29571
+ const iconSizeMap = new Map(props.iconSizes);
29572
+ function onClick() {
29573
+ if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
29574
+ isActive.value = !isActive.value;
29575
+ }
29576
+ useRender(() => {
29577
+ const icon = isActive.value ? props.activeIcon ?? props.icon : props.icon;
29578
+ const size = props.size;
29579
+ const hasNamedSize = btnSizeMap.has(size);
29580
+ const btnSize = hasNamedSize ? btnSizeMap.get(size) : size;
29581
+ const btnHeight = props.height ?? btnSize;
29582
+ const btnWidth = props.width ?? btnSize;
29583
+ const _iconSize = hasNamedSize ? size : props.iconSize ?? size;
29584
+ const iconSize = iconSizeMap.get(_iconSize) ?? _iconSize;
29585
+ const iconProps = {
29586
+ icon,
29587
+ size: iconSize,
29588
+ iconColor: props.iconColor,
29589
+ opacity: props.opacity
29590
+ };
29591
+ return createVNode(props.tag, {
29592
+ "class": [{
29593
+ 'v-icon-btn': true,
29594
+ 'v-icon-btn--active': isActive.value,
29595
+ 'v-icon-btn--disabled': props.disabled,
29596
+ 'v-icon-btn--loading': props.loading,
29597
+ 'v-icon-btn--readonly': props.readonly,
29598
+ [`v-icon-btn--${props.size}`]: true
29599
+ }, themeClasses.value, colorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, variantClasses.value, props.class],
29600
+ "style": [{
29601
+ '--v-icon-btn-rotate': convertToUnit(props.rotate, 'deg'),
29602
+ '--v-icon-btn-height': convertToUnit(btnHeight),
29603
+ '--v-icon-btn-width': convertToUnit(btnWidth)
29604
+ }, colorStyles.value, props.style],
29605
+ "tabindex": props.disabled || props.readonly ? -1 : 0,
29606
+ "onClick": onClick
29607
+ }, {
29608
+ default: () => [genOverlays(!props.hideOverlay, 'v-icon-btn'), createVNode("div", {
29609
+ "class": "v-icon-btn__content",
29610
+ "data-no-activator": ""
29611
+ }, [!slots.default && icon ? createVNode(VIcon, mergeProps({
29612
+ "key": "content-icon"
29613
+ }, iconProps), null) : createVNode(VDefaultsProvider, {
29614
+ "key": "content-defaults",
29615
+ "disabled": !icon,
29616
+ "defaults": {
29617
+ VIcon: {
29618
+ ...iconProps
29619
+ }
29620
+ }
29621
+ }, {
29622
+ default: () => slots.default?.() ?? toDisplayString(props.text)
29623
+ })]), !!props.loading && createVNode("span", {
29624
+ "key": "loader",
29625
+ "class": "v-icon-btn__loader"
29626
+ }, [slots.loader?.() ?? createVNode(VProgressCircular, {
29627
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
29628
+ "indeterminate": "disable-shrink",
29629
+ "width": "2",
29630
+ "size": iconSize
29631
+ }, null)])]
29632
+ });
29633
+ });
29634
+ return {};
29635
+ }
29636
+ });
29637
+
29638
+ // Types
29639
+
29450
29640
  const makeVStepperVerticalActionsProps = propsFactory({
29451
29641
  ...makeVStepperActionsProps()
29452
29642
  }, 'VStepperActions');
@@ -30926,6 +31116,7 @@ var components = /*#__PURE__*/Object.freeze({
30926
31116
  VForm: VForm,
30927
31117
  VHover: VHover,
30928
31118
  VIcon: VIcon,
31119
+ VIconBtn: VIconBtn,
30929
31120
  VImg: VImg,
30930
31121
  VInfiniteScroll: VInfiniteScroll,
30931
31122
  VInput: VInput,
@@ -31345,7 +31536,7 @@ function createVuetify$1() {
31345
31536
  };
31346
31537
  });
31347
31538
  }
31348
- const version$1 = "3.8.0-beta.0-dev.2025-03-26";
31539
+ const version$1 = "3.8.0-beta.0-dev.2025-03-29";
31349
31540
  createVuetify$1.version = version$1;
31350
31541
 
31351
31542
  // Vue's inject() can only be used in setup
@@ -31630,7 +31821,7 @@ var index = /*#__PURE__*/Object.freeze({
31630
31821
 
31631
31822
  /* eslint-disable local-rules/sort-imports */
31632
31823
 
31633
- const version = "3.8.0-beta.0-dev.2025-03-26";
31824
+ const version = "3.8.0-beta.0-dev.2025-03-29";
31634
31825
 
31635
31826
  /* eslint-disable local-rules/sort-imports */
31636
31827