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

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 (55) hide show
  1. package/CHANGELOG.md +7 -3
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +3154 -3038
  4. package/dist/json/importMap-labs.json +24 -20
  5. package/dist/json/importMap.json +176 -176
  6. package/dist/json/tags.json +34 -0
  7. package/dist/json/web-types.json +5829 -5511
  8. package/dist/vuetify-labs.cjs +204 -13
  9. package/dist/vuetify-labs.css +4590 -4409
  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 +2980 -2976
  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/lib/styles/main.css +4 -0
  54. package/lib/styles/settings/_utilities.scss +5 -0
  55. 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-31
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -18443,6 +18443,10 @@
18443
18443
  type: String,
18444
18444
  default: '$vuetify.confirmEdit.ok'
18445
18445
  },
18446
+ disabled: {
18447
+ type: [Boolean, Array],
18448
+ default: undefined
18449
+ },
18446
18450
  hideActions: Boolean
18447
18451
  }, 'VConfirmEdit');
18448
18452
  const VConfirmEdit = genericComponent()({
@@ -18469,6 +18473,17 @@
18469
18473
  const isPristine = vue.computed(() => {
18470
18474
  return deepEqual(model.value, internalModel.value);
18471
18475
  });
18476
+ function isActionDisabled(action) {
18477
+ if (typeof props.disabled === 'boolean') {
18478
+ return props.disabled;
18479
+ }
18480
+ if (Array.isArray(props.disabled)) {
18481
+ return props.disabled.includes(action);
18482
+ }
18483
+ return isPristine.value;
18484
+ }
18485
+ const isSaveDisabled = vue.computed(() => isActionDisabled('save'));
18486
+ const isCancelDisabled = vue.computed(() => isActionDisabled('cancel'));
18472
18487
  function save() {
18473
18488
  model.value = internalModel.value;
18474
18489
  emit('save', internalModel.value);
@@ -18479,13 +18494,13 @@
18479
18494
  }
18480
18495
  function actions(actionsProps) {
18481
18496
  return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBtn, vue.mergeProps({
18482
- "disabled": isPristine.value,
18497
+ "disabled": isCancelDisabled.value,
18483
18498
  "variant": "text",
18484
18499
  "color": props.color,
18485
18500
  "onClick": cancel,
18486
18501
  "text": t(props.cancelText)
18487
18502
  }, actionsProps), null), vue.createVNode(VBtn, vue.mergeProps({
18488
- "disabled": isPristine.value,
18503
+ "disabled": isSaveDisabled.value,
18489
18504
  "variant": "text",
18490
18505
  "color": props.color,
18491
18506
  "onClick": save,
@@ -21940,7 +21955,10 @@
21940
21955
  type: String,
21941
21956
  default: 'dynamic'
21942
21957
  },
21943
- firstDayOfWeek: [Number, String]
21958
+ firstDayOfWeek: {
21959
+ type: [Number, String],
21960
+ default: 0
21961
+ }
21944
21962
  }, 'calendar');
21945
21963
  function useCalendar(props) {
21946
21964
  const adapter = useDate();
@@ -21961,15 +21979,15 @@
21961
21979
  const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
21962
21980
  return adapter.setMonth(date, value);
21963
21981
  }, v => adapter.getMonth(v));
21964
- const defaultFirstDayOfWeek = vue.computed(() => {
21965
- return props.firstDayOfWeek ?? props.weekdays[0];
21966
- });
21967
21982
  const weekDays = vue.computed(() => {
21968
- const firstDayOfWeek = Number(props.firstDayOfWeek ?? 0);
21969
- return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
21983
+ const firstDayOfWeek = Number(props.firstDayOfWeek);
21984
+
21985
+ // Always generate all days, regardless of props.weekdays
21986
+ return [0, 1, 2, 3, 4, 5, 6].map(day => (day + firstDayOfWeek) % 7);
21970
21987
  });
21971
21988
  const weeksInMonth = vue.computed(() => {
21972
- const weeks = adapter.getWeekArray(month.value, defaultFirstDayOfWeek.value);
21989
+ const firstDayOfWeek = Number(props.firstDayOfWeek);
21990
+ const weeks = adapter.getWeekArray(month.value, firstDayOfWeek);
21973
21991
  const days = weeks.flat();
21974
21992
 
21975
21993
  // Make sure there's always 6 weeks in month (6 * 7 days)
@@ -22047,7 +22065,7 @@
22047
22065
  if (typeof props.allowedDates === 'function') {
22048
22066
  return !props.allowedDates(date);
22049
22067
  }
22050
- return false;
22068
+ return !props.weekdays.includes(adapter.toJsDate(date).getDay());
22051
22069
  }
22052
22070
  return {
22053
22071
  displayValue,
@@ -28983,6 +29001,7 @@
28983
29001
  const menu = vue.shallowRef(false);
28984
29002
  const isEditingInput = vue.shallowRef(false);
28985
29003
  const vDateInputRef = vue.ref();
29004
+ const disabledActions = vue.ref(['save']);
28986
29005
  function format(date) {
28987
29006
  if (typeof props.displayFormat === 'function') {
28988
29007
  return props.displayFormat(date);
@@ -29013,6 +29032,7 @@
29013
29032
  vue.watch(menu, val => {
29014
29033
  if (val) return;
29015
29034
  isEditingInput.value = false;
29035
+ disabledActions.value = ['save'];
29016
29036
  });
29017
29037
  function onKeydown(e) {
29018
29038
  if (e.key !== 'Enter') return;
@@ -29092,6 +29112,7 @@
29092
29112
  default: () => [vue.createVNode(VConfirmEdit, vue.mergeProps(confirmEditProps, {
29093
29113
  "modelValue": model.value,
29094
29114
  "onUpdate:modelValue": $event => model.value = $event,
29115
+ "disabled": disabledActions.value,
29095
29116
  "onSave": onSave,
29096
29117
  "onCancel": onCancel
29097
29118
  }), {
@@ -29114,6 +29135,7 @@
29114
29135
  }
29115
29136
  emit('save', value);
29116
29137
  vDateInputRef.value?.blur();
29138
+ disabledActions.value = [];
29117
29139
  }
29118
29140
  return vue.createVNode(VDatePicker, vue.mergeProps(datePickerProps, {
29119
29141
  "modelValue": props.hideActions ? model.value : proxyModel.value,
@@ -29451,6 +29473,174 @@
29451
29473
 
29452
29474
  // Types
29453
29475
 
29476
+ const makeVIconBtnProps = propsFactory({
29477
+ active: {
29478
+ type: Boolean,
29479
+ default: undefined
29480
+ },
29481
+ activeColor: String,
29482
+ activeIcon: [String, Function, Object],
29483
+ activeVariant: String,
29484
+ baseVariant: {
29485
+ type: String,
29486
+ default: 'tonal'
29487
+ },
29488
+ disabled: Boolean,
29489
+ height: [Number, String],
29490
+ width: [Number, String],
29491
+ hideOverlay: Boolean,
29492
+ icon: [String, Function, Object],
29493
+ iconColor: String,
29494
+ iconSize: {
29495
+ type: [Number, String],
29496
+ default: 'default'
29497
+ },
29498
+ iconSizes: {
29499
+ type: Array,
29500
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
29501
+ },
29502
+ loading: Boolean,
29503
+ opacity: [Number, String],
29504
+ readonly: Boolean,
29505
+ rotate: [Number, String],
29506
+ size: {
29507
+ type: [Number, String],
29508
+ default: 'default'
29509
+ },
29510
+ sizes: {
29511
+ type: Array,
29512
+ default: () => [['x-small', 16], ['small', 24], ['default', 40], ['large', 48], ['x-large', 56]]
29513
+ },
29514
+ text: {
29515
+ type: [String, Number, Boolean],
29516
+ default: undefined
29517
+ },
29518
+ ...makeBorderProps(),
29519
+ ...makeComponentProps(),
29520
+ ...makeElevationProps(),
29521
+ ...makeRoundedProps(),
29522
+ ...makeTagProps({
29523
+ tag: 'button'
29524
+ }),
29525
+ ...makeThemeProps(),
29526
+ ...makeVariantProps({
29527
+ variant: 'flat'
29528
+ })
29529
+ }, 'VIconBtn');
29530
+ const VIconBtn = genericComponent()({
29531
+ name: 'VIconBtn',
29532
+ props: makeVIconBtnProps(),
29533
+ emits: {
29534
+ 'update:active': value => true
29535
+ },
29536
+ setup(props, _ref) {
29537
+ let {
29538
+ attrs,
29539
+ slots
29540
+ } = _ref;
29541
+ const isActive = useProxiedModel(props, 'active');
29542
+ const {
29543
+ themeClasses
29544
+ } = provideTheme(props);
29545
+ const {
29546
+ borderClasses
29547
+ } = useBorder(props);
29548
+ const {
29549
+ elevationClasses
29550
+ } = useElevation(props);
29551
+ const {
29552
+ roundedClasses
29553
+ } = useRounded(props);
29554
+ const {
29555
+ colorClasses,
29556
+ colorStyles,
29557
+ variantClasses
29558
+ } = useVariant(vue.toRef(() => ({
29559
+ color: (() => {
29560
+ if (props.disabled) return undefined;
29561
+ if (!isActive.value) return props.color;
29562
+ // Use an inline fallback as opposed to setting a default color
29563
+ // because non-toggle buttons are default flat whereas toggle
29564
+ // buttons are default tonal and active flat. The exact use
29565
+ // case for this is a toggle button with no active color.
29566
+ return props.activeColor ?? props.color ?? 'surface-variant';
29567
+ })(),
29568
+ variant: (() => {
29569
+ if (isActive.value === undefined) return props.variant;
29570
+ if (isActive.value) return props.activeVariant ?? props.variant;
29571
+ return props.baseVariant ?? props.variant;
29572
+ })()
29573
+ })));
29574
+ const btnSizeMap = new Map(props.sizes);
29575
+ const iconSizeMap = new Map(props.iconSizes);
29576
+ function onClick() {
29577
+ if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
29578
+ isActive.value = !isActive.value;
29579
+ }
29580
+ useRender(() => {
29581
+ const icon = isActive.value ? props.activeIcon ?? props.icon : props.icon;
29582
+ const size = props.size;
29583
+ const hasNamedSize = btnSizeMap.has(size);
29584
+ const btnSize = hasNamedSize ? btnSizeMap.get(size) : size;
29585
+ const btnHeight = props.height ?? btnSize;
29586
+ const btnWidth = props.width ?? btnSize;
29587
+ const _iconSize = hasNamedSize ? size : props.iconSize ?? size;
29588
+ const iconSize = iconSizeMap.get(_iconSize) ?? _iconSize;
29589
+ const iconProps = {
29590
+ icon,
29591
+ size: iconSize,
29592
+ iconColor: props.iconColor,
29593
+ opacity: props.opacity
29594
+ };
29595
+ return vue.createVNode(props.tag, {
29596
+ "class": [{
29597
+ 'v-icon-btn': true,
29598
+ 'v-icon-btn--active': isActive.value,
29599
+ 'v-icon-btn--disabled': props.disabled,
29600
+ 'v-icon-btn--loading': props.loading,
29601
+ 'v-icon-btn--readonly': props.readonly,
29602
+ [`v-icon-btn--${props.size}`]: true
29603
+ }, themeClasses.value, colorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, variantClasses.value, props.class],
29604
+ "style": [{
29605
+ '--v-icon-btn-rotate': convertToUnit(props.rotate, 'deg'),
29606
+ '--v-icon-btn-height': convertToUnit(btnHeight),
29607
+ '--v-icon-btn-width': convertToUnit(btnWidth)
29608
+ }, colorStyles.value, props.style],
29609
+ "tabindex": props.disabled || props.readonly ? -1 : 0,
29610
+ "onClick": onClick
29611
+ }, {
29612
+ default: () => [genOverlays(!props.hideOverlay, 'v-icon-btn'), vue.createVNode("div", {
29613
+ "class": "v-icon-btn__content",
29614
+ "data-no-activator": ""
29615
+ }, [!slots.default && icon ? vue.createVNode(VIcon, vue.mergeProps({
29616
+ "key": "content-icon"
29617
+ }, iconProps), null) : vue.createVNode(VDefaultsProvider, {
29618
+ "key": "content-defaults",
29619
+ "disabled": !icon,
29620
+ "defaults": {
29621
+ VIcon: {
29622
+ ...iconProps
29623
+ }
29624
+ }
29625
+ }, {
29626
+ default: () => slots.default?.() ?? vue.toDisplayString(props.text)
29627
+ })]), !!props.loading && vue.createVNode("span", {
29628
+ "key": "loader",
29629
+ "class": "v-icon-btn__loader"
29630
+ }, [slots.loader?.() ?? vue.createVNode(VProgressCircular, {
29631
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
29632
+ "indeterminate": "disable-shrink",
29633
+ "width": "2",
29634
+ "size": iconSize
29635
+ }, null)])]
29636
+ });
29637
+ });
29638
+ return {};
29639
+ }
29640
+ });
29641
+
29642
+ // Types
29643
+
29454
29644
  const makeVStepperVerticalActionsProps = propsFactory({
29455
29645
  ...makeVStepperActionsProps()
29456
29646
  }, 'VStepperActions');
@@ -30930,6 +31120,7 @@
30930
31120
  VForm: VForm,
30931
31121
  VHover: VHover,
30932
31122
  VIcon: VIcon,
31123
+ VIconBtn: VIconBtn,
30933
31124
  VImg: VImg,
30934
31125
  VInfiniteScroll: VInfiniteScroll,
30935
31126
  VInput: VInput,
@@ -31349,7 +31540,7 @@
31349
31540
  };
31350
31541
  });
31351
31542
  }
31352
- const version$1 = "3.8.0-beta.0-dev.2025-03-26";
31543
+ const version$1 = "3.8.0-beta.0-dev.2025-03-31";
31353
31544
  createVuetify$1.version = version$1;
31354
31545
 
31355
31546
  // Vue's inject() can only be used in setup
@@ -31634,7 +31825,7 @@
31634
31825
 
31635
31826
  /* eslint-disable local-rules/sort-imports */
31636
31827
 
31637
- const version = "3.8.0-beta.0-dev.2025-03-26";
31828
+ const version = "3.8.0-beta.0-dev.2025-03-31";
31638
31829
 
31639
31830
  /* eslint-disable local-rules/sort-imports */
31640
31831