@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.
- package/CHANGELOG.md +6 -3
- package/dist/_component-variables-labs.sass +1 -0
- package/dist/json/attributes.json +3618 -3502
- package/dist/json/importMap-labs.json +34 -30
- package/dist/json/importMap.json +158 -158
- package/dist/json/tags.json +34 -0
- package/dist/json/web-types.json +6539 -6221
- package/dist/vuetify-labs.cjs +204 -13
- package/dist/vuetify-labs.css +3192 -3015
- package/dist/vuetify-labs.d.ts +527 -230
- package/dist/vuetify-labs.esm.js +204 -13
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +204 -13
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +31 -13
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2415 -2415
- package/dist/vuetify.d.ts +118 -143
- package/dist/vuetify.esm.js +31 -13
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +31 -13
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +18 -17
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VConfirmEdit/VConfirmEdit.d.ts +31 -6
- package/lib/components/VConfirmEdit/VConfirmEdit.js +17 -2
- package/lib/components/VConfirmEdit/VConfirmEdit.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.d.ts +33 -78
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +33 -78
- package/lib/composables/calendar.d.ts +12 -35
- package/lib/composables/calendar.js +11 -8
- package/lib/composables/calendar.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +58 -57
- package/lib/framework.js +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +33 -78
- package/lib/labs/VDateInput/VDateInput.d.ts +33 -78
- package/lib/labs/VDateInput/VDateInput.js +4 -0
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.css +178 -0
- package/lib/labs/VIconBtn/VIconBtn.d.ts +608 -0
- package/lib/labs/VIconBtn/VIconBtn.js +184 -0
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -0
- package/lib/labs/VIconBtn/VIconBtn.scss +110 -0
- package/lib/labs/VIconBtn/_variables.scss +36 -0
- package/lib/labs/VIconBtn/index.d.ts +1 -0
- package/lib/labs/VIconBtn/index.js +2 -0
- package/lib/labs/VIconBtn/index.js.map +1 -0
- package/lib/labs/components.d.ts +1 -0
- package/lib/labs/components.js +1 -0
- package/lib/labs/components.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify-labs.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.0-beta.0-dev.2025-03-
|
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
|
*/
|
@@ -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":
|
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":
|
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:
|
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
|
21969
|
-
|
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
|
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
|
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-
|
31543
|
+
const version$1 = "3.8.0-beta.0-dev.2025-03-29";
|
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-
|
31828
|
+
const version = "3.8.0-beta.0-dev.2025-03-29";
|
31638
31829
|
|
31639
31830
|
/* eslint-disable local-rules/sort-imports */
|
31640
31831
|
|