@vuetify/nightly 3.9.0-master.2025-07-09 → 3.9.0-next.2025-07-09
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 +20 -9
- package/dist/json/attributes.json +3539 -3539
- package/dist/json/importMap-labs.json +14 -14
- package/dist/json/importMap.json +130 -130
- package/dist/json/web-types.json +6434 -6398
- package/dist/vuetify-labs.cjs +55 -36
- package/dist/vuetify-labs.css +26440 -28193
- package/dist/vuetify-labs.d.ts +197 -590
- package/dist/vuetify-labs.esm.js +55 -36
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +55 -36
- package/dist/vuetify-labs.min.css +3 -4
- package/dist/vuetify.cjs +47 -28
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +22837 -24587
- package/dist/vuetify.d.ts +197 -590
- package/dist/vuetify.esm.js +47 -28
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +47 -28
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +3 -4
- package/dist/vuetify.min.js +18 -18
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +211 -220
- package/lib/components/VApp/VApp.css +16 -15
- package/lib/components/VAppBar/VAppBar.css +14 -12
- package/lib/components/VAutocomplete/VAutocomplete.css +85 -84
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +18 -9
- package/lib/components/VAutocomplete/VAutocomplete.js +6 -3
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VAvatar/VAvatar.css +108 -106
- package/lib/components/VBadge/VBadge.css +77 -77
- package/lib/components/VBanner/VBanner.css +161 -166
- package/lib/components/VBottomNavigation/VBottomNavigation.css +65 -64
- package/lib/components/VBottomSheet/VBottomSheet.css +34 -31
- package/lib/components/VBreadcrumbs/VBreadcrumbs.css +54 -57
- package/lib/components/VBtn/VBtn.css +400 -436
- package/lib/components/VBtn/VBtn.sass +10 -23
- package/lib/components/VBtn/_variables.scss +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.css +87 -88
- package/lib/components/VBtnToggle/VBtnToggle.css +16 -14
- package/lib/components/VCard/VCard.css +294 -302
- package/lib/components/VCarousel/VCarousel.css +62 -64
- package/lib/components/VCarousel/VCarousel.sass +1 -1
- package/lib/components/VCheckbox/VCheckbox.css +7 -5
- package/lib/components/VChip/VChip.css +378 -411
- package/lib/components/VChipGroup/VChipGroup.css +19 -18
- package/lib/components/VCode/VCode.css +13 -11
- package/lib/components/VColorPicker/VColorPicker.css +23 -23
- package/lib/components/VColorPicker/VColorPickerCanvas.css +24 -22
- package/lib/components/VColorPicker/VColorPickerEdit.css +29 -28
- package/lib/components/VColorPicker/VColorPickerPreview.css +69 -67
- package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -2
- package/lib/components/VColorPicker/VColorPickerSwatches.css +34 -34
- package/lib/components/VCombobox/VCombobox.css +85 -84
- package/lib/components/VCombobox/VCombobox.d.ts +18 -9
- package/lib/components/VCombobox/VCombobox.js +6 -3
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VCounter/VCounter.css +7 -5
- package/lib/components/VDataTable/VDataTable.css +202 -200
- package/lib/components/VDataTable/VDataTable.sass +20 -10
- package/lib/components/VDataTable/VDataTableFooter.css +33 -31
- package/lib/components/VDataTable/VDataTableFooter.js +7 -7
- package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.css +8 -6
- package/lib/components/VDatePicker/VDatePickerControls.css +56 -58
- package/lib/components/VDatePicker/VDatePickerHeader.css +56 -60
- package/lib/components/VDatePicker/VDatePickerMonth.css +46 -50
- package/lib/components/VDatePicker/VDatePickerMonths.css +20 -19
- package/lib/components/VDatePicker/VDatePickerYears.css +16 -15
- package/lib/components/VDialog/VDialog.css +98 -98
- package/lib/components/VDivider/VDivider.css +52 -52
- package/lib/components/VEmptyState/VEmptyState.css +62 -67
- package/lib/components/VExpansionPanel/VExpansionPanel.css +203 -209
- package/lib/components/VExpansionPanel/VExpansionPanel.sass +27 -25
- package/lib/components/VFab/VFab.css +78 -73
- package/lib/components/VFab/VFab.sass +5 -4
- package/lib/components/VField/VField.css +541 -589
- package/lib/components/VField/VField.sass +4 -11
- package/lib/components/VField/_variables.scss +1 -1
- package/lib/components/VFileInput/VFileInput.css +34 -32
- package/lib/components/VFileInput/VFileInput.js +1 -1
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VFooter/VFooter.css +38 -36
- package/lib/components/VForm/VForm.d.ts +111 -531
- package/lib/components/VForm/VForm.js +11 -1
- package/lib/components/VForm/VForm.js.map +1 -1
- package/lib/components/VGrid/VGrid.css +565 -592
- package/lib/components/VIcon/VIcon.css +52 -53
- package/lib/components/VImg/VImg.css +50 -51
- package/lib/components/VInfiniteScroll/VInfiniteScroll.css +36 -37
- package/lib/components/VInput/VInput.css +136 -147
- package/lib/components/VItemGroup/VItemGroup.css +7 -5
- package/lib/components/VKbd/VKbd.css +33 -31
- package/lib/components/VLabel/VLabel.css +16 -15
- package/lib/components/VLayout/VLayout.css +10 -8
- package/lib/components/VLayout/VLayoutItem.css +8 -7
- package/lib/components/VList/VList.css +104 -108
- package/lib/components/VList/VList.sass +1 -1
- package/lib/components/VList/VListItem.css +442 -454
- package/lib/components/VList/VListItem.sass +2 -1
- package/lib/components/VLocaleProvider/VLocaleProvider.css +4 -2
- package/lib/components/VMain/VMain.css +32 -30
- package/lib/components/VMenu/VMenu.css +21 -19
- package/lib/components/VMessages/VMessages.css +17 -15
- package/lib/components/VNavigationDrawer/VNavigationDrawer.css +102 -104
- package/lib/components/VNumberInput/VNumberInput.css +59 -57
- package/lib/components/VOtpInput/VOtpInput.css +56 -58
- package/lib/components/VOtpInput/VOtpInput.js +2 -2
- package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +61 -64
- package/lib/components/VOverlay/VOverlay.sass +14 -13
- package/lib/components/VPagination/VPagination.css +10 -8
- package/lib/components/VParallax/VParallax.css +8 -6
- package/lib/components/VProgressCircular/VProgressCircular.css +95 -101
- package/lib/components/VProgressLinear/VProgressLinear.css +209 -222
- package/lib/components/VRadioGroup/VRadioGroup.css +14 -12
- package/lib/components/VRating/VRating.css +52 -53
- package/lib/components/VResponsive/VResponsive.css +25 -26
- package/lib/components/VSelect/VSelect.css +59 -57
- package/lib/components/VSelect/VSelect.d.ts +18 -9
- package/lib/components/VSelect/VSelect.js +6 -3
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.css +98 -100
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.css +10 -8
- package/lib/components/VSheet/VSheet.css +38 -36
- package/lib/components/VSkeletonLoader/VSkeletonLoader.css +225 -224
- package/lib/components/VSlideGroup/VSlideGroup.css +53 -55
- package/lib/components/VSlider/VSlider.css +53 -57
- package/lib/components/VSlider/VSliderThumb.css +142 -153
- package/lib/components/VSlider/VSliderTrack.css +155 -174
- package/lib/components/VSnackbar/VSnackbar.css +140 -140
- package/lib/components/VSnackbar/VSnackbar.js +1 -1
- package/lib/components/VSnackbar/VSnackbar.js.map +1 -1
- package/lib/components/VSpeedDial/VSpeedDial.css +43 -41
- package/lib/components/VStepper/VStepper.css +55 -56
- package/lib/components/VStepper/VStepperItem.css +112 -115
- package/lib/components/VSwitch/VSwitch.css +129 -139
- package/lib/components/VSystemBar/VSystemBar.css +45 -43
- package/lib/components/VTable/VTable.css +142 -143
- package/lib/components/VTable/VTable.sass +4 -2
- package/lib/components/VTabs/VTab.css +30 -29
- package/lib/components/VTabs/VTabs.css +59 -65
- package/lib/components/VTextField/VTextField.css +77 -85
- package/lib/components/VTextarea/VTextarea.css +48 -40
- package/lib/components/VTextarea/VTextarea.sass +4 -2
- package/lib/components/VThemeProvider/VThemeProvider.css +5 -3
- package/lib/components/VTimePicker/VTimePicker.css +4 -2
- package/lib/components/VTimePicker/VTimePickerClock.css +127 -130
- package/lib/components/VTimePicker/VTimePickerControls.css +103 -104
- package/lib/components/VTimeline/VTimeline.css +388 -427
- package/lib/components/VToolbar/VToolbar.css +137 -144
- package/lib/components/VTooltip/VTooltip.css +27 -23
- package/lib/components/VTooltip/VTooltip.sass +8 -6
- package/lib/components/VTreeview/VTreeview.js +1 -1
- package/lib/components/VTreeview/VTreeview.js.map +1 -1
- package/lib/components/VTreeview/VTreeviewItem.css +83 -85
- package/lib/components/VVirtualScroll/VVirtualScroll.css +11 -9
- package/lib/components/VWindow/VWindow.css +88 -85
- package/lib/composables/theme.js +3 -3
- package/lib/composables/theme.js.map +1 -1
- package/lib/directives/ripple/VRipple.css +38 -36
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +45 -45
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.css +219 -225
- package/lib/labs/VCalendar/VCalendarDay.css +40 -41
- package/lib/labs/VCalendar/VCalendarHeader.css +13 -13
- package/lib/labs/VCalendar/VCalendarInterval.css +43 -42
- package/lib/labs/VCalendar/VCalendarIntervalEvent.css +7 -5
- package/lib/labs/VCalendar/VCalendarMonthDay.css +61 -58
- package/lib/labs/VCalendar/VCalendarMonthDay.sass +3 -2
- package/lib/labs/VColorInput/VColorInput.css +5 -3
- package/lib/labs/VColorInput/VColorInput.js +1 -1
- package/lib/labs/VColorInput/VColorInput.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.js +1 -1
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VFileUpload/VFileUpload.css +74 -77
- package/lib/labs/VFileUpload/VFileUpload.js +1 -1
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/lib/labs/VHotkey/VHotkey.css +242 -241
- package/lib/labs/VIconBtn/VIconBtn.css +162 -164
- package/lib/labs/VPicker/VPicker.css +62 -67
- package/lib/labs/VStepperVertical/VStepperVertical.js +4 -4
- package/lib/labs/VStepperVertical/VStepperVertical.js.map +1 -1
- package/lib/labs/VStepperVertical/VStepperVerticalItem.js +1 -1
- package/lib/labs/VStepperVertical/VStepperVerticalItem.js.map +1 -1
- package/lib/styles/elements/_global.sass +1 -1
- package/lib/styles/generic/_colors.scss +3 -3
- package/lib/styles/generic/_layers.scss +13 -1
- package/lib/styles/generic/_reset.scss +0 -1
- package/lib/styles/generic/_transitions.scss +32 -32
- package/lib/styles/main.css +14677 -16153
- package/lib/styles/settings/_utilities.scss +0 -5
- package/lib/styles/settings/_variables.scss +2 -3
- package/lib/styles/tools/_border.sass +4 -4
- package/lib/styles/tools/_display.sass +0 -10
- package/lib/styles/tools/_elevation.sass +2 -2
- package/lib/styles/tools/_index.sass +0 -2
- package/lib/styles/tools/_layer.scss +4 -2
- package/lib/styles/tools/_position.sass +2 -2
- package/lib/styles/tools/_rounded.sass +2 -2
- package/lib/styles/tools/_utilities.sass +1 -5
- package/lib/styles/utilities/_elevation.scss +1 -1
- package/package.json +1 -1
- package/lib/styles/tools/_bootable.sass +0 -3
- package/lib/styles/tools/_radius.sass +0 -10
@@ -1,6 +1,8 @@
|
|
1
|
-
.
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
@layer vuetify.components {
|
2
|
+
.v-calendar-internal-event {
|
3
|
+
overflow: hidden;
|
4
|
+
padding: 4px;
|
5
|
+
text-overflow: ellipsis;
|
6
|
+
white-space: nowrap;
|
7
|
+
}
|
6
8
|
}
|
@@ -1,61 +1,64 @@
|
|
1
|
-
.
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
@layer vuetify.components {
|
2
|
+
.v-calendar-month__day {
|
3
|
+
position: relative;
|
4
|
+
display: flex;
|
5
|
+
flex-direction: column;
|
6
|
+
min-width: 0;
|
7
|
+
min-height: 150px;
|
8
|
+
border-right: thin solid #e0e0e0;
|
9
|
+
border-bottom: thin solid #e0e0e0;
|
10
|
+
flex: 1 1 auto;
|
11
|
+
border-inline-end: thin solid #e0e0e0;
|
12
|
+
}
|
13
|
+
.v-calendar-weekly__day {
|
14
|
+
width: 0;
|
15
|
+
overflow: hidden;
|
16
|
+
user-select: none;
|
17
|
+
position: relative;
|
18
|
+
padding: 0px 0px 0px 0px;
|
19
|
+
min-width: 0;
|
20
|
+
min-height: 150px;
|
21
|
+
border-right: thin solid #e0e0e0;
|
22
|
+
border-bottom: thin solid #e0e0e0;
|
23
|
+
flex: 1 1 auto;
|
24
|
+
border-inline-end: thin solid #e0e0e0;
|
25
|
+
text-align: center;
|
26
|
+
}
|
27
|
+
.v-calendar-weekly__day.v-present .v-calendar-weekly__day-month {
|
28
|
+
color: currentColor;
|
29
|
+
}
|
30
|
+
.v-calendar-weekly__day-label {
|
31
|
+
text-decoration: none;
|
32
|
+
user-select: none;
|
33
|
+
cursor: pointer;
|
34
|
+
box-shadow: none;
|
35
|
+
text-align: center;
|
36
|
+
}
|
37
|
+
.v-calendar-weekly__day-label .v-btn {
|
38
|
+
font-size: 12px;
|
39
|
+
}
|
11
40
|
}
|
12
|
-
|
13
|
-
.v-calendar-weekly__day {
|
14
|
-
|
15
|
-
|
16
|
-
overflow: hidden;
|
17
|
-
user-select: none;
|
18
|
-
position: relative;
|
19
|
-
padding: 0px 0px 0px 0px;
|
20
|
-
min-width: 0;
|
21
|
-
min-height: 150px;
|
22
|
-
border-right: thin solid #e0e0e0;
|
23
|
-
border-bottom: thin solid #e0e0e0;
|
24
|
-
flex: 1 1 auto;
|
25
|
-
border-inline-end: thin solid #e0e0e0;
|
26
|
-
text-align: center;
|
41
|
+
@layer vuetify.overrides {
|
42
|
+
.v-calendar-weekly__day-label .v-btn {
|
43
|
+
text-transform: none;
|
44
|
+
}
|
27
45
|
}
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
}
|
43
|
-
.v-calendar-weekly__day-
|
44
|
-
|
45
|
-
|
46
|
-
}
|
47
|
-
|
48
|
-
.v-calendar-weekly__day-month {
|
49
|
-
position: absolute;
|
50
|
-
text-decoration: none;
|
51
|
-
user-select: none;
|
52
|
-
box-shadow: none;
|
53
|
-
top: 0;
|
54
|
-
left: 36px;
|
55
|
-
height: 32px;
|
56
|
-
line-height: 32px;
|
57
|
-
}
|
58
|
-
|
59
|
-
.v-calendar-weekly__day-alldayevents-container {
|
60
|
-
min-height: 24px;
|
46
|
+
@layer vuetify.components {
|
47
|
+
.v-calendar-weekly__day-label .v-btn.v-calendar-weekly__day-label__today {
|
48
|
+
background: rgba(var(--v-theme-surface-variant), var(--v-medium-emphasis-opacity));
|
49
|
+
color: rgb(var(--v-theme-on-surface-variant));
|
50
|
+
}
|
51
|
+
.v-calendar-weekly__day-month {
|
52
|
+
position: absolute;
|
53
|
+
text-decoration: none;
|
54
|
+
user-select: none;
|
55
|
+
box-shadow: none;
|
56
|
+
top: 0;
|
57
|
+
left: 36px;
|
58
|
+
height: 32px;
|
59
|
+
line-height: 32px;
|
60
|
+
}
|
61
|
+
.v-calendar-weekly__day-alldayevents-container {
|
62
|
+
min-height: 24px;
|
63
|
+
}
|
61
64
|
}
|
@@ -17,7 +17,6 @@
|
|
17
17
|
border-inline-end: $calendar-line-width solid $calendar-line-color
|
18
18
|
|
19
19
|
.v-calendar-weekly__day
|
20
|
-
flex: 1
|
21
20
|
width: 0
|
22
21
|
overflow: hidden
|
23
22
|
user-select: none
|
@@ -47,7 +46,9 @@
|
|
47
46
|
|
48
47
|
.v-btn
|
49
48
|
font-size: $calendar-weekly-day-label-font-size
|
50
|
-
|
49
|
+
|
50
|
+
@include tools.layer('overrides')
|
51
|
+
text-transform: none
|
51
52
|
|
52
53
|
&.v-calendar-weekly__day-label__today
|
53
54
|
background: rgba(var(--v-theme-surface-variant), var(--v-medium-emphasis-opacity))
|
@@ -83,7 +83,7 @@ export const VColorInput = genericComponent()({
|
|
83
83
|
"modelValue": menu.value,
|
84
84
|
"onUpdate:modelValue": $event => menu.value = $event,
|
85
85
|
"activator": "parent",
|
86
|
-
"
|
86
|
+
"min-width": "0",
|
87
87
|
"closeOnContentClick": false,
|
88
88
|
"openOnClick": false
|
89
89
|
}, {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VColorInput.js","names":["makeVColorPickerProps","VColorPicker","makeVConfirmEditProps","VConfirmEdit","VIcon","VMenu","makeVTextFieldProps","VTextField","makeFocusProps","useProxiedModel","computed","shallowRef","genericComponent","omit","propsFactory","useRender","makeVColorInputProps","pip","Boolean","pipIcon","type","String","default","VColorInput","name","props","emits","val","setup","_ref","slots","model","menu","isFocused","focused","isInteractive","disabled","readonly","display","value","onKeydown","e","key","target","onClick","preventDefault","stopPropagation","onSave","confirmEditProps","filterProps","colorPickerProps","textFieldProps","hasPrepend","prepend","_createVNode","_mergeProps","class","style","undefined","event","arg","_createElementVNode","_Fragment","$event","_ref2","actions","proxyModel","save","cancel","isPristine","hideActions"],"sources":["../../../src/labs/VColorInput/VColorInput.tsx"],"sourcesContent":["// Styles\nimport './VColorInput.sass'\n\n// Components\nimport { makeVColorPickerProps, VColorPicker } from '@/components/VColorPicker/VColorPicker'\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { makeFocusProps } from '@/composables/focus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VColorInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VColorInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VColorInputActionsSlot\n default: never\n}\n\nexport const makeVColorInputProps = propsFactory({\n pip: Boolean,\n pipIcon: {\n type: String,\n default: '$color',\n },\n\n ...makeFocusProps(),\n ...makeVConfirmEditProps(),\n ...makeVTextFieldProps(),\n ...omit(makeVColorPickerProps(), ['width']),\n}, 'VColorInput')\n\nexport const VColorInput = genericComponent<VColorInputSlots>()({\n name: 'VColorInput',\n\n props: makeVColorInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const menu = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const display = computed(() => model.value || null)\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n\n return\n }\n\n const target = e.target as HTMLInputElement\n\n model.value = target.value\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n menu.value = true\n }\n\n function onSave () {\n menu.value = false\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']))\n const textFieldProps = VTextField.filterProps(omit(props, ['prependInnerIcon']))\n\n const hasPrepend = !!(slots.prepend || props.pipIcon)\n\n return (\n <VTextField\n { ...textFieldProps }\n class={[\n 'v-color-input',\n props.class,\n ]}\n style={ props.style }\n modelValue={ display.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prependInner={ isInteractive.value ? onClick : undefined }\n onUpdate:focused={ event => isFocused.value = event }\n onClick:appendInner={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ val => {\n model.value = val\n }}\n >\n {{\n ...slots,\n prepend: props.pipIcon ? arg => (\n <>\n { hasPrepend && (\n <VIcon\n color={ props.pip ? model.value as string : undefined }\n icon={ props.pipIcon }\n />\n )}\n\n { slots.prepend?.(arg) }\n </>\n ) : undefined,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n minWidth=\"0\"\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n onSave={ onSave }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n return (\n <VColorPicker\n { ...colorPickerProps }\n modelValue={ proxyModel.value }\n onUpdate:modelValue={ val => {\n proxyModel.value = val\n model.value = val\n }}\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VColorPicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n },\n})\n\nexport type VColorInput = InstanceType<typeof VColorInput>\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"VColorInput.js","names":["makeVColorPickerProps","VColorPicker","makeVConfirmEditProps","VConfirmEdit","VIcon","VMenu","makeVTextFieldProps","VTextField","makeFocusProps","useProxiedModel","computed","shallowRef","genericComponent","omit","propsFactory","useRender","makeVColorInputProps","pip","Boolean","pipIcon","type","String","default","VColorInput","name","props","emits","val","setup","_ref","slots","model","menu","isFocused","focused","isInteractive","disabled","readonly","display","value","onKeydown","e","key","target","onClick","preventDefault","stopPropagation","onSave","confirmEditProps","filterProps","colorPickerProps","textFieldProps","hasPrepend","prepend","_createVNode","_mergeProps","class","style","undefined","event","arg","_createElementVNode","_Fragment","$event","_ref2","actions","proxyModel","save","cancel","isPristine","hideActions"],"sources":["../../../src/labs/VColorInput/VColorInput.tsx"],"sourcesContent":["// Styles\nimport './VColorInput.sass'\n\n// Components\nimport { makeVColorPickerProps, VColorPicker } from '@/components/VColorPicker/VColorPicker'\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { makeFocusProps } from '@/composables/focus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VColorInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VColorInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VColorInputActionsSlot\n default: never\n}\n\nexport const makeVColorInputProps = propsFactory({\n pip: Boolean,\n pipIcon: {\n type: String,\n default: '$color',\n },\n\n ...makeFocusProps(),\n ...makeVConfirmEditProps(),\n ...makeVTextFieldProps(),\n ...omit(makeVColorPickerProps(), ['width']),\n}, 'VColorInput')\n\nexport const VColorInput = genericComponent<VColorInputSlots>()({\n name: 'VColorInput',\n\n props: makeVColorInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const menu = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const display = computed(() => model.value || null)\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n\n return\n }\n\n const target = e.target as HTMLInputElement\n\n model.value = target.value\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n menu.value = true\n }\n\n function onSave () {\n menu.value = false\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']))\n const textFieldProps = VTextField.filterProps(omit(props, ['prependInnerIcon']))\n\n const hasPrepend = !!(slots.prepend || props.pipIcon)\n\n return (\n <VTextField\n { ...textFieldProps }\n class={[\n 'v-color-input',\n props.class,\n ]}\n style={ props.style }\n modelValue={ display.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prependInner={ isInteractive.value ? onClick : undefined }\n onUpdate:focused={ event => isFocused.value = event }\n onClick:appendInner={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ val => {\n model.value = val\n }}\n >\n {{\n ...slots,\n prepend: props.pipIcon ? arg => (\n <>\n { hasPrepend && (\n <VIcon\n color={ props.pip ? model.value as string : undefined }\n icon={ props.pipIcon }\n />\n )}\n\n { slots.prepend?.(arg) }\n </>\n ) : undefined,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n min-width=\"0\"\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n onSave={ onSave }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n return (\n <VColorPicker\n { ...colorPickerProps }\n modelValue={ proxyModel.value }\n onUpdate:modelValue={ val => {\n proxyModel.value = val\n model.value = val\n }}\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VColorPicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n },\n})\n\nexport type VColorInput = InstanceType<typeof VColorInput>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,qBAAqB,EAAEC,YAAY;AAAA,SACnCC,qBAAqB,EAAEC,YAAY;AAAA,SACnCC,KAAK;AAAA,SACLC,KAAK;AAAA,SACLC,mBAAmB,EAAEC,UAAU,qDAExC;AAAA,SACSC,cAAc;AAAA,SACdC,eAAe,6CAExB;AACA,SAASC,QAAQ,EAAEC,UAAU,QAAQ,KAAK;AAAA,SACjCC,gBAAgB,EAAEC,IAAI,EAAEC,YAAY,EAAEC,SAAS,+BAExD;AAcA,OAAO,MAAMC,oBAAoB,GAAGF,YAAY,CAAC;EAC/CG,GAAG,EAAEC,OAAO;EACZC,OAAO,EAAE;IACPC,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EAED,GAAGd,cAAc,CAAC,CAAC;EACnB,GAAGN,qBAAqB,CAAC,CAAC;EAC1B,GAAGI,mBAAmB,CAAC,CAAC;EACxB,GAAGO,IAAI,CAACb,qBAAqB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AAC5C,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAMuB,WAAW,GAAGX,gBAAgB,CAAmB,CAAC,CAAC;EAC9DY,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAET,oBAAoB,CAAC,CAAC;EAE7BU,KAAK,EAAE;IACL,mBAAmB,EAAGC,GAAW,IAAK;EACxC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAME,KAAK,GAAGtB,eAAe,CAACgB,KAAK,EAAE,YAAY,CAAC;IAClD,MAAMO,IAAI,GAAGrB,UAAU,CAAC,KAAK,CAAC;IAC9B,MAAMsB,SAAS,GAAGtB,UAAU,CAACc,KAAK,CAACS,OAAO,CAAC;IAE3C,MAAMC,aAAa,GAAGzB,QAAQ,CAAC,MAAM,CAACe,KAAK,CAACW,QAAQ,IAAI,CAACX,KAAK,CAACY,QAAQ,CAAC;IAExE,MAAMC,OAAO,GAAG5B,QAAQ,CAAC,MAAMqB,KAAK,CAACQ,KAAK,IAAI,IAAI,CAAC;IAEnD,SAASC,SAASA,CAAEC,CAAgB,EAAE;MACpC,IAAIA,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;MAEvB,IAAI,CAACV,IAAI,CAACO,KAAK,IAAI,CAACN,SAAS,CAACM,KAAK,EAAE;QACnCP,IAAI,CAACO,KAAK,GAAG,IAAI;QAEjB;MACF;MAEA,MAAMI,MAAM,GAAGF,CAAC,CAACE,MAA0B;MAE3CZ,KAAK,CAACQ,KAAK,GAAGI,MAAM,CAACJ,KAAK;IAC5B;IAEA,SAASK,OAAOA,CAAEH,CAAa,EAAE;MAC/BA,CAAC,CAACI,cAAc,CAAC,CAAC;MAClBJ,CAAC,CAACK,eAAe,CAAC,CAAC;MAEnBd,IAAI,CAACO,KAAK,GAAG,IAAI;IACnB;IAEA,SAASQ,MAAMA,CAAA,EAAI;MACjBf,IAAI,CAACO,KAAK,GAAG,KAAK;IACpB;IAEAxB,SAAS,CAAC,MAAM;MACd,MAAMiC,gBAAgB,GAAG7C,YAAY,CAAC8C,WAAW,CAACxB,KAAK,CAAC;MACxD,MAAMyB,gBAAgB,GAAGjD,YAAY,CAACgD,WAAW,CAACpC,IAAI,CAACY,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;MACnF,MAAM0B,cAAc,GAAG5C,UAAU,CAAC0C,WAAW,CAACpC,IAAI,CAACY,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;MAEhF,MAAM2B,UAAU,GAAG,CAAC,EAAEtB,KAAK,CAACuB,OAAO,IAAI5B,KAAK,CAACN,OAAO,CAAC;MAErD,OAAAmC,YAAA,CAAA/C,UAAA,EAAAgD,WAAA,CAESJ,cAAc;QAAA,SACZ,CACL,eAAe,EACf1B,KAAK,CAAC+B,KAAK,CACZ;QAAA,SACO/B,KAAK,CAACgC,KAAK;QAAA,cACNnB,OAAO,CAACC,KAAK;QAAA,aACdJ,aAAa,CAACI,KAAK,GAAGC,SAAS,GAAGkB,SAAS;QAAA,WAC7C1B,IAAI,CAACO,KAAK,IAAIN,SAAS,CAACM,KAAK;QAAA,mBACrBJ,aAAa,CAACI,KAAK,GAAGK,OAAO,GAAGc,SAAS;QAAA,wBACpCvB,aAAa,CAACI,KAAK,GAAGK,OAAO,GAAGc,SAAS;QAAA,oBAC7CC,KAAK,IAAI1B,SAAS,CAACM,KAAK,GAAGoB,KAAK;QAAA,uBAC7BxB,aAAa,CAACI,KAAK,GAAGK,OAAO,GAAGc,SAAS;QAAA,uBACzC/B,GAAG,IAAI;UAC3BI,KAAK,CAACQ,KAAK,GAAGZ,GAAG;QACnB;MAAC;QAGC,GAAGG,KAAK;QACRuB,OAAO,EAAE5B,KAAK,CAACN,OAAO,GAAGyC,GAAG,IAAAC,mBAAA,CAAAC,SAAA,SAEvBV,UAAU,IAAAE,YAAA,CAAAlD,KAAA;UAAA,SAECqB,KAAK,CAACR,GAAG,GAAGc,KAAK,CAACQ,KAAK,GAAamB,SAAS;UAAA,QAC9CjC,KAAK,CAACN;QAAO,QAExB,EAEEW,KAAK,CAACuB,OAAO,GAAGO,GAAG,CAAC,EAEzB,GAAGF,SAAS;QACbpC,OAAO,EAAEA,CAAA,KAAAuC,mBAAA,CAAAC,SAAA,SAAAR,YAAA,CAAAjD,KAAA;UAAA,cAGO2B,IAAI,CAACO,KAAK;UAAA,uBAAAwB,MAAA,IAAV/B,IAAI,CAACO,KAAK,GAAAwB,MAAA;UAAA;UAAA;UAAA,uBAGE,KAAK;UAAA,eACb;QAAK;UAAAzC,OAAA,EAAAA,CAAA,MAAAgC,YAAA,CAAAnD,YAAA,EAAAoD,WAAA,CAGZP,gBAAgB;YAAA,cACXjB,KAAK,CAACQ,KAAK;YAAA,uBAAAwB,MAAA,IAAXhC,KAAK,CAACQ,KAAK,GAAAwB,MAAA;YAAA,UACZhB;UAAM;YAGbzB,OAAO,EAAE0C,KAAA,IAA8D;cAAA,IAA7D;gBAAEC,OAAO;gBAAElC,KAAK,EAAEmC,UAAU;gBAAEC,IAAI;gBAAEC,MAAM;gBAAEC;cAAW,CAAC,GAAAL,KAAA;cAChE,OAAAV,YAAA,CAAArD,YAAA,EAAAsD,WAAA,CAESL,gBAAgB;gBAAA,cACRgB,UAAU,CAAC3B,KAAK;gBAAA,uBACPZ,GAAG,IAAI;kBAC3BuC,UAAU,CAAC3B,KAAK,GAAGZ,GAAG;kBACtBI,KAAK,CAACQ,KAAK,GAAGZ,GAAG;gBACnB,CAAC;gBAAA,eACcc,CAAa,IAAKA,CAAC,CAACI,cAAc,CAAC;cAAC;gBAGjDoB,OAAO,EAAE,CAACxC,KAAK,CAAC6C,WAAW,GAAG,MAAMxC,KAAK,CAACmC,OAAO,GAAG;kBAAEE,IAAI;kBAAEC,MAAM;kBAAEC;gBAAW,CAAC,CAAC,IAAIJ,OAAO,CAAC,CAAC,GAAGP;cAAS;YAIlH;UAAC;QAAA,IAKL5B,KAAK,CAACR,OAAO,GAAG,CAAC;MAEtB;IAIT,CAAC,CAAC;EACJ;AACF,CAAC,CAAC","ignoreList":[]}
|
@@ -207,7 +207,7 @@ export const VDateInput = genericComponent()({
|
|
207
207
|
"modelValue": menu.value,
|
208
208
|
"onUpdate:modelValue": $event => menu.value = $event,
|
209
209
|
"activator": "parent",
|
210
|
-
"
|
210
|
+
"min-width": "0",
|
211
211
|
"eager": isFocused.value,
|
212
212
|
"location": props.location,
|
213
213
|
"closeOnContentClick": false,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VDateInput.js","names":["makeVConfirmEditProps","VConfirmEdit","makeVDatePickerProps","VDatePicker","VMenu","makeVTextFieldProps","VTextField","useDate","createDateRange","makeDateFormatProps","useDateFormat","makeDisplayProps","useDisplay","makeFocusProps","forwardRefs","useLocale","useProxiedModel","computed","ref","shallowRef","watch","genericComponent","omit","propsFactory","useRender","wrapInArray","makeVDateInputProps","displayFormat","Function","String","location","type","default","menu","Boolean","updateOn","Array","mobile","hideActions","prependIcon","hideHeader","showAdjacentMonths","VDateInput","name","props","emits","save","value","cancel","val","setup","_ref","emit","slots","t","current","currentLocale","adapter","isValid","parseDate","formatDate","parserFormat","emptyModelValue","multiple","model","isArray","map","item","toJsDate","date","isEditingInput","isFocused","focused","vTextFieldRef","disabledActions","format","display","length","start","end","inputmode","undefined","isInteractive","disabled","readonly","isReadonly","onKeydown","e","key","includes","onUserInput","target","onClick","preventDefault","stopPropagation","onCancel","onSave","onUpdateDisplayModel","onBlur","_ref2","trim","parts","split","every","stop","toSorted","a","b","isAfter","confirmEditProps","filterProps","datePickerProps","textFieldProps","_createVNode","_mergeProps","class","style","placeholder","event","_createElementVNode","_Fragment","$event","_ref3","actions","proxyModel","isPristine","onUpdateModel"],"sources":["../../../src/labs/VDateInput/VDateInput.tsx"],"sourcesContent":["// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { createDateRange } from '@/composables/date/date'\nimport { makeDateFormatProps, useDateFormat } from '@/composables/dateFormat'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeFocusProps } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\n// Types\nexport type VDateInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VDateInputActionsSlot\n default: never\n}\n\nexport const makeVDateInputProps = propsFactory({\n displayFormat: [Function, String],\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom start',\n },\n menu: Boolean,\n updateOn: {\n type: Array as PropType<('blur' | 'enter')[]>,\n default: () => ['blur', 'enter'],\n },\n\n ...makeDateFormatProps(),\n ...makeDisplayProps({\n mobile: null,\n }),\n ...makeFocusProps(),\n ...makeVConfirmEditProps({\n hideActions: true,\n }),\n ...makeVTextFieldProps({\n prependIcon: '$calendar',\n }),\n ...omit(makeVDatePickerProps({\n hideHeader: true,\n showAdjacentMonths: true,\n }), ['active', 'location', 'rounded']),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<VDateInputSlots>()({\n name: 'VDateInput',\n\n props: makeVDateInputProps(),\n\n emits: {\n save: (value: string) => true,\n cancel: () => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: string) => true,\n 'update:menu': (val: boolean) => true,\n },\n\n setup (props, { emit, slots }) {\n const { t, current: currentLocale } = useLocale()\n const adapter = useDate()\n const { isValid, parseDate, formatDate, parserFormat } = useDateFormat(props, currentLocale)\n const { mobile } = useDisplay(props)\n\n const emptyModelValue = () => props.multiple ? [] : null\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n emptyModelValue(),\n val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n )\n\n const menu = useProxiedModel(props, 'menu')\n const isEditingInput = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n const vTextFieldRef = ref<VTextField>()\n const disabledActions = ref<typeof VConfirmEdit['props']['disabled']>(['save'])\n\n function format (date: unknown) {\n if (typeof props.displayFormat === 'function') {\n return props.displayFormat(date)\n }\n if (props.displayFormat) {\n return adapter.format(date, props.displayFormat ?? 'keyboardDate')\n }\n return formatDate(date)\n }\n\n const display = computed(() => {\n const value = wrapInArray(model.value)\n\n if (!value.length) return null\n\n if (props.multiple === true) {\n return t('$vuetify.datePicker.itemsSelected', value.length)\n }\n\n if (props.multiple === 'range') {\n const start = value[0]\n const end = value[value.length - 1]\n\n if (!adapter.isValid(start) || !adapter.isValid(end)) return ''\n\n return `${format(adapter.date(start))} - ${format(adapter.date(end))}`\n }\n\n return adapter.isValid(model.value) ? format(adapter.date(model.value)) : ''\n })\n\n const inputmode = computed(() => {\n if (!mobile.value) return undefined\n if (isEditingInput.value) return 'text'\n\n return 'none'\n })\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const isReadonly = computed(() => {\n if (!props.updateOn.length) return true\n\n return !(mobile.value && isEditingInput.value) && props.readonly\n })\n\n watch(menu, val => {\n if (val) return\n\n isEditingInput.value = false\n disabledActions.value = ['save']\n })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n }\n\n if (props.updateOn.includes('enter')) {\n onUserInput(e.target as HTMLInputElement)\n }\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n if (menu.value && mobile.value) {\n isEditingInput.value = true\n } else {\n menu.value = true\n }\n }\n\n function onCancel () {\n emit('cancel')\n menu.value = false\n isEditingInput.value = false\n }\n\n function onSave (value: string) {\n emit('save', value)\n menu.value = false\n }\n\n function onUpdateDisplayModel (value: unknown) {\n if (value != null) return\n\n model.value = emptyModelValue()\n }\n\n function onBlur (e: FocusEvent) {\n if (props.updateOn.includes('blur')) {\n onUserInput(e.target as HTMLInputElement)\n }\n\n // When in mobile mode and editing is done (due to keyboard dismissal), close the menu\n if (mobile.value && isEditingInput.value && !isFocused.value) {\n menu.value = false\n isEditingInput.value = false\n }\n }\n\n function onUserInput ({ value }: HTMLInputElement) {\n if (!value.trim()) {\n model.value = emptyModelValue()\n } else if (!props.multiple) {\n if (isValid(value)) {\n model.value = parseDate(value)\n }\n } else {\n const parts = value.trim().split(/\\D+-\\D+|[^\\d\\-/.]+/)\n if (parts.every(isValid)) {\n if (props.multiple === 'range') {\n const [start, stop] = parts.map(parseDate).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1)\n model.value = createDateRange(adapter, start, stop)\n } else {\n model.value = parts.map(parseDate)\n }\n }\n }\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']))\n const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']))\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n { ...textFieldProps }\n class={ props.class }\n style={ props.style }\n modelValue={ display.value }\n inputmode={ inputmode.value }\n placeholder={ props.placeholder ?? parserFormat.value }\n readonly={ isReadonly.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onBlur={ onBlur }\n validationValue={ model.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prepend={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ onUpdateDisplayModel }\n onUpdate:focused={ event => isFocused.value = event }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n minWidth=\"0\"\n eager={ isFocused.value }\n location={ props.location }\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n disabled={ disabledActions.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n\n if (!props.multiple) {\n menu.value = false\n }\n }\n\n emit('save', value)\n\n disabledActions.value = []\n }\n\n return (\n <VDatePicker\n { ...datePickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VDatePicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"VDateInput.js","names":["makeVConfirmEditProps","VConfirmEdit","makeVDatePickerProps","VDatePicker","VMenu","makeVTextFieldProps","VTextField","useDate","createDateRange","makeDateFormatProps","useDateFormat","makeDisplayProps","useDisplay","makeFocusProps","forwardRefs","useLocale","useProxiedModel","computed","ref","shallowRef","watch","genericComponent","omit","propsFactory","useRender","wrapInArray","makeVDateInputProps","displayFormat","Function","String","location","type","default","menu","Boolean","updateOn","Array","mobile","hideActions","prependIcon","hideHeader","showAdjacentMonths","VDateInput","name","props","emits","save","value","cancel","val","setup","_ref","emit","slots","t","current","currentLocale","adapter","isValid","parseDate","formatDate","parserFormat","emptyModelValue","multiple","model","isArray","map","item","toJsDate","date","isEditingInput","isFocused","focused","vTextFieldRef","disabledActions","format","display","length","start","end","inputmode","undefined","isInteractive","disabled","readonly","isReadonly","onKeydown","e","key","includes","onUserInput","target","onClick","preventDefault","stopPropagation","onCancel","onSave","onUpdateDisplayModel","onBlur","_ref2","trim","parts","split","every","stop","toSorted","a","b","isAfter","confirmEditProps","filterProps","datePickerProps","textFieldProps","_createVNode","_mergeProps","class","style","placeholder","event","_createElementVNode","_Fragment","$event","_ref3","actions","proxyModel","isPristine","onUpdateModel"],"sources":["../../../src/labs/VDateInput/VDateInput.tsx"],"sourcesContent":["// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { createDateRange } from '@/composables/date/date'\nimport { makeDateFormatProps, useDateFormat } from '@/composables/dateFormat'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeFocusProps } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\n// Types\nexport type VDateInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VDateInputActionsSlot\n default: never\n}\n\nexport const makeVDateInputProps = propsFactory({\n displayFormat: [Function, String],\n location: {\n type: String as PropType<StrategyProps['location']>,\n default: 'bottom start',\n },\n menu: Boolean,\n updateOn: {\n type: Array as PropType<('blur' | 'enter')[]>,\n default: () => ['blur', 'enter'],\n },\n\n ...makeDateFormatProps(),\n ...makeDisplayProps({\n mobile: null,\n }),\n ...makeFocusProps(),\n ...makeVConfirmEditProps({\n hideActions: true,\n }),\n ...makeVTextFieldProps({\n prependIcon: '$calendar',\n }),\n ...omit(makeVDatePickerProps({\n hideHeader: true,\n showAdjacentMonths: true,\n }), ['active', 'location', 'rounded']),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<VDateInputSlots>()({\n name: 'VDateInput',\n\n props: makeVDateInputProps(),\n\n emits: {\n save: (value: string) => true,\n cancel: () => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: string) => true,\n 'update:menu': (val: boolean) => true,\n },\n\n setup (props, { emit, slots }) {\n const { t, current: currentLocale } = useLocale()\n const adapter = useDate()\n const { isValid, parseDate, formatDate, parserFormat } = useDateFormat(props, currentLocale)\n const { mobile } = useDisplay(props)\n\n const emptyModelValue = () => props.multiple ? [] : null\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n emptyModelValue(),\n val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n )\n\n const menu = useProxiedModel(props, 'menu')\n const isEditingInput = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n const vTextFieldRef = ref<VTextField>()\n const disabledActions = ref<typeof VConfirmEdit['props']['disabled']>(['save'])\n\n function format (date: unknown) {\n if (typeof props.displayFormat === 'function') {\n return props.displayFormat(date)\n }\n if (props.displayFormat) {\n return adapter.format(date, props.displayFormat ?? 'keyboardDate')\n }\n return formatDate(date)\n }\n\n const display = computed(() => {\n const value = wrapInArray(model.value)\n\n if (!value.length) return null\n\n if (props.multiple === true) {\n return t('$vuetify.datePicker.itemsSelected', value.length)\n }\n\n if (props.multiple === 'range') {\n const start = value[0]\n const end = value[value.length - 1]\n\n if (!adapter.isValid(start) || !adapter.isValid(end)) return ''\n\n return `${format(adapter.date(start))} - ${format(adapter.date(end))}`\n }\n\n return adapter.isValid(model.value) ? format(adapter.date(model.value)) : ''\n })\n\n const inputmode = computed(() => {\n if (!mobile.value) return undefined\n if (isEditingInput.value) return 'text'\n\n return 'none'\n })\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const isReadonly = computed(() => {\n if (!props.updateOn.length) return true\n\n return !(mobile.value && isEditingInput.value) && props.readonly\n })\n\n watch(menu, val => {\n if (val) return\n\n isEditingInput.value = false\n disabledActions.value = ['save']\n })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n }\n\n if (props.updateOn.includes('enter')) {\n onUserInput(e.target as HTMLInputElement)\n }\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n if (menu.value && mobile.value) {\n isEditingInput.value = true\n } else {\n menu.value = true\n }\n }\n\n function onCancel () {\n emit('cancel')\n menu.value = false\n isEditingInput.value = false\n }\n\n function onSave (value: string) {\n emit('save', value)\n menu.value = false\n }\n\n function onUpdateDisplayModel (value: unknown) {\n if (value != null) return\n\n model.value = emptyModelValue()\n }\n\n function onBlur (e: FocusEvent) {\n if (props.updateOn.includes('blur')) {\n onUserInput(e.target as HTMLInputElement)\n }\n\n // When in mobile mode and editing is done (due to keyboard dismissal), close the menu\n if (mobile.value && isEditingInput.value && !isFocused.value) {\n menu.value = false\n isEditingInput.value = false\n }\n }\n\n function onUserInput ({ value }: HTMLInputElement) {\n if (!value.trim()) {\n model.value = emptyModelValue()\n } else if (!props.multiple) {\n if (isValid(value)) {\n model.value = parseDate(value)\n }\n } else {\n const parts = value.trim().split(/\\D+-\\D+|[^\\d\\-/.]+/)\n if (parts.every(isValid)) {\n if (props.multiple === 'range') {\n const [start, stop] = parts.map(parseDate).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1)\n model.value = createDateRange(adapter, start, stop)\n } else {\n model.value = parts.map(parseDate)\n }\n }\n }\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']))\n const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']))\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n { ...textFieldProps }\n class={ props.class }\n style={ props.style }\n modelValue={ display.value }\n inputmode={ inputmode.value }\n placeholder={ props.placeholder ?? parserFormat.value }\n readonly={ isReadonly.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onBlur={ onBlur }\n validationValue={ model.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prepend={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ onUpdateDisplayModel }\n onUpdate:focused={ event => isFocused.value = event }\n >\n {{\n ...slots,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n min-width=\"0\"\n eager={ isFocused.value }\n location={ props.location }\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n disabled={ disabledActions.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n\n if (!props.multiple) {\n menu.value = false\n }\n }\n\n emit('save', value)\n\n disabledActions.value = []\n }\n\n return (\n <VDatePicker\n { ...datePickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VDatePicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n"],"mappings":"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","ignoreList":[]}
|
@@ -1,78 +1,75 @@
|
|
1
|
-
.
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
.v-file-upload-title {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
}
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
.v-file-upload-
|
73
|
-
|
74
|
-
}
|
75
|
-
|
76
|
-
.v-file-upload-item:not(:first-child) {
|
77
|
-
margin-top: 8px;
|
1
|
+
@layer vuetify.components {
|
2
|
+
.v-file-upload {
|
3
|
+
padding: 64px 16px;
|
4
|
+
flex-direction: column;
|
5
|
+
justify-content: center;
|
6
|
+
align-items: center;
|
7
|
+
position: relative;
|
8
|
+
}
|
9
|
+
.v-file-upload.v-sheet {
|
10
|
+
display: flex;
|
11
|
+
border-radius: 4px;
|
12
|
+
border-style: dashed;
|
13
|
+
border-width: 2px;
|
14
|
+
}
|
15
|
+
.v-file-upload.v-file-upload--density-compact {
|
16
|
+
padding: 32px 0;
|
17
|
+
flex-direction: row;
|
18
|
+
gap: 1rem;
|
19
|
+
}
|
20
|
+
.v-file-upload .v-overlay__scrim {
|
21
|
+
pointer-events: none;
|
22
|
+
}
|
23
|
+
.v-file-upload--disabled {
|
24
|
+
pointer-events: none;
|
25
|
+
opacity: var(--v-disabled-opacity);
|
26
|
+
}
|
27
|
+
.v-file-upload--dragging > * {
|
28
|
+
pointer-events: none;
|
29
|
+
}
|
30
|
+
.v-file-upload--clickable {
|
31
|
+
cursor: pointer;
|
32
|
+
}
|
33
|
+
.v-file-upload input[type=file] {
|
34
|
+
left: 0;
|
35
|
+
opacity: 0;
|
36
|
+
position: absolute;
|
37
|
+
cursor: pointer;
|
38
|
+
top: 0;
|
39
|
+
z-index: -1;
|
40
|
+
}
|
41
|
+
.v-file-upload-title {
|
42
|
+
font-size: 1.5rem;
|
43
|
+
font-weight: 600;
|
44
|
+
text-align: center;
|
45
|
+
}
|
46
|
+
.v-file-upload-icon {
|
47
|
+
opacity: var(--v-medium-emphasis-opacity);
|
48
|
+
font-size: 3rem;
|
49
|
+
margin-bottom: 1rem;
|
50
|
+
}
|
51
|
+
.v-file-upload--density-comfortable .v-file-upload-icon {
|
52
|
+
font-size: 2.5rem;
|
53
|
+
margin-bottom: 0.5rem;
|
54
|
+
}
|
55
|
+
.v-file-upload--density-compact .v-file-upload-icon {
|
56
|
+
font-size: 2rem;
|
57
|
+
margin-bottom: 0rem;
|
58
|
+
}
|
59
|
+
.v-file-upload-divider {
|
60
|
+
align-items: center;
|
61
|
+
display: flex;
|
62
|
+
margin: 32px 0;
|
63
|
+
justify-content: center;
|
64
|
+
width: 100%;
|
65
|
+
}
|
66
|
+
.v-file-upload-divider .v-divider__wrapper {
|
67
|
+
max-width: 100%;
|
68
|
+
}
|
69
|
+
.v-file-upload-items {
|
70
|
+
margin: 16px 0;
|
71
|
+
}
|
72
|
+
.v-file-upload-item:not(:first-child) {
|
73
|
+
margin-top: 8px;
|
74
|
+
}
|
78
75
|
}
|
@@ -197,7 +197,7 @@ export const VFileUpload = genericComponent()({
|
|
197
197
|
})]), props.subtitle && _createElementVNode("div", {
|
198
198
|
"class": "v-file-upload-subtitle"
|
199
199
|
}, [props.subtitle])]), _createVNode(VOverlay, {
|
200
|
-
"
|
200
|
+
"model-value": isDragging.value,
|
201
201
|
"contained": true,
|
202
202
|
"scrim": props.scrim
|
203
203
|
}, null), slots.input?.({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VFileUpload.js","names":["VFileUploadItem","VBtn","VDefaultsProvider","makeVDividerProps","VDivider","VIcon","VOverlay","makeVSheetProps","VSheet","makeDelayProps","makeDensityProps","useDensity","useFileDrop","IconValue","useLocale","useProxiedModel","ref","shallowRef","filterInputAttrs","genericComponent","pick","propsFactory","useRender","wrapInArray","makeVFileUploadProps","browseText","type","String","default","dividerText","title","subtitle","icon","modelValue","Array","Object","validator","val","every","v","clearable","Boolean","disabled","hideBrowse","multiple","scrim","showSize","name","length","VFileUpload","inheritAttrs","props","emits","files","setup","_ref","attrs","slots","t","densityClasses","model","isArray","isDragging","vSheetRef","inputRef","handleDrop","onDragover","e","preventDefault","stopImmediatePropagation","value","onDragleave","onDrop","dataTransfer","DataTransfer","file","items","add","dispatchEvent","Event","bubbles","onClick","click","onClickRemove","index","newValue","filter","_","i","hasTitle","hasIcon","hasBrowse","browse","density","cardProps","filterProps","dividerProps","rootAttrs","inputAttrs","inputNode","_createElementVNode","_mergeProps","target","_Fragment","_createVNode","class","style","undefined","divider","readonly","size","text","variant","input","map","slotProps","onClick:remove","item"],"sources":["../../../src/labs/VFileUpload/VFileUpload.tsx"],"sourcesContent":["// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { ref, shallowRef } from 'vue'\nimport { filterInputAttrs, genericComponent, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nexport type VFileUploadSlots = {\n browse: {\n props: { onClick: (e: MouseEvent) => void }\n }\n default: never\n icon: never\n input: {\n inputNode: VNode\n }\n item: {\n file: File\n props: { 'onClick:remove': () => void }\n }\n title: never\n divider: never\n}\n\nexport const makeVFileUploadProps = propsFactory({\n browseText: {\n type: String,\n default: '$vuetify.fileUpload.browse',\n },\n dividerText: {\n type: String,\n default: '$vuetify.fileUpload.divider',\n },\n title: {\n type: String,\n default: '$vuetify.fileUpload.title',\n },\n subtitle: String,\n icon: {\n type: IconValue,\n default: '$upload',\n },\n modelValue: {\n type: [Array, Object] as PropType<File[] | File>,\n default: null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n clearable: Boolean,\n disabled: Boolean,\n hideBrowse: Boolean,\n multiple: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n showSize: Boolean,\n name: String,\n\n ...makeDelayProps(),\n ...makeDensityProps(),\n ...pick(makeVDividerProps({\n length: 150,\n }), ['length', 'thickness', 'opacity']),\n ...makeVSheetProps(),\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n name: 'VFileUpload',\n\n inheritAttrs: false,\n\n props: makeVFileUploadProps(),\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const { densityClasses } = useDensity(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (props.multiple || Array.isArray(props.modelValue)) ? val : val[0],\n )\n\n const isDragging = shallowRef(false)\n const vSheetRef = ref<InstanceType<typeof VSheet> | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n const { handleDrop } = useFileDrop()\n\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value) return\n\n const dataTransfer = new DataTransfer()\n for (const file of await handleDrop(e)) {\n dataTransfer.items.add(file)\n }\n\n inputRef.value.files = dataTransfer.files\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n function onClick () {\n inputRef.value?.click()\n }\n\n function onClickRemove (index: number) {\n const newValue = model.value.filter((_, i) => i !== index)\n model.value = newValue\n\n if (newValue.length > 0 || !inputRef.value) return\n\n inputRef.value.value = ''\n }\n\n useRender(() => {\n const hasTitle = !!(slots.title || props.title)\n const hasIcon = !!(slots.icon || props.icon)\n const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n const cardProps = VSheet.filterProps(props)\n const dividerProps = VDivider.filterProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n name={ props.name }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n <VSheet\n ref={ vSheetRef }\n { ...cardProps }\n class={[\n 'v-file-upload',\n {\n 'v-file-upload--clickable': !hasBrowse,\n 'v-file-upload--disabled': props.disabled,\n 'v-file-upload--dragging': isDragging.value,\n },\n densityClasses.value,\n props.class,\n ]}\n style={[\n props.style,\n ]}\n onDragleave={ onDragleave }\n onDragover={ onDragover }\n onDrop={ onDrop }\n onClick={ !hasBrowse ? onClick : undefined }\n { ...rootAttrs }\n >\n { hasIcon && (\n <div key=\"icon\" class=\"v-file-upload-icon\">\n { !slots.icon ? (\n <VIcon\n key=\"icon-icon\"\n icon={ props.icon }\n />\n ) : (\n <VDefaultsProvider\n key=\"icon-defaults\"\n defaults={{\n VIcon: {\n icon: props.icon,\n },\n }}\n >\n { slots.icon() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-file-upload-title\">\n { slots.title?.() ?? t(props.title) }\n </div>\n )}\n\n { props.density === 'default' && (\n <>\n <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n { slots.divider?.() ?? (\n <VDivider { ...dividerProps }>\n { t(props.dividerText) }\n </VDivider>\n )}\n </div>\n\n { hasBrowse && (\n <>\n { !slots.browse ? (\n <VBtn\n readonly={ props.disabled }\n size=\"large\"\n text={ t(props.browseText) }\n variant=\"tonal\"\n onClick={ onClick }\n />\n ) : (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n readonly: props.disabled,\n size: 'large',\n text: t(props.browseText),\n variant: 'tonal',\n },\n }}\n >\n { slots.browse({ props: { onClick } }) }\n </VDefaultsProvider>\n )}\n </>\n )}\n\n { props.subtitle && (\n <div class=\"v-file-upload-subtitle\">\n { props.subtitle }\n </div>\n )}\n </>\n )}\n\n <VOverlay\n modelValue={ isDragging.value }\n contained\n scrim={ props.scrim }\n />\n\n { slots.input?.({ inputNode }) ?? inputNode }\n </VSheet>\n\n { model.value.length > 0 && (\n <div class=\"v-file-upload-items\">\n { model.value.map((file, i) => {\n const slotProps = {\n file,\n props: {\n 'onClick:remove': () => onClickRemove(i),\n },\n }\n\n return (\n <VDefaultsProvider\n key={ i }\n defaults={{\n VFileUploadItem: {\n file,\n clearable: props.clearable,\n disabled: props.disabled,\n showSize: props.showSize,\n },\n }}\n >\n { slots.item?.(slotProps) ?? (\n <VFileUploadItem\n key={ i }\n onClick:remove={ () => onClickRemove(i) }\n v-slots={ slots }\n />\n )}\n </VDefaultsProvider>\n )\n })}\n </div>\n )}\n </>\n )\n })\n },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"VFileUpload.js","names":["VFileUploadItem","VBtn","VDefaultsProvider","makeVDividerProps","VDivider","VIcon","VOverlay","makeVSheetProps","VSheet","makeDelayProps","makeDensityProps","useDensity","useFileDrop","IconValue","useLocale","useProxiedModel","ref","shallowRef","filterInputAttrs","genericComponent","pick","propsFactory","useRender","wrapInArray","makeVFileUploadProps","browseText","type","String","default","dividerText","title","subtitle","icon","modelValue","Array","Object","validator","val","every","v","clearable","Boolean","disabled","hideBrowse","multiple","scrim","showSize","name","length","VFileUpload","inheritAttrs","props","emits","files","setup","_ref","attrs","slots","t","densityClasses","model","isArray","isDragging","vSheetRef","inputRef","handleDrop","onDragover","e","preventDefault","stopImmediatePropagation","value","onDragleave","onDrop","dataTransfer","DataTransfer","file","items","add","dispatchEvent","Event","bubbles","onClick","click","onClickRemove","index","newValue","filter","_","i","hasTitle","hasIcon","hasBrowse","browse","density","cardProps","filterProps","dividerProps","rootAttrs","inputAttrs","inputNode","_createElementVNode","_mergeProps","target","_Fragment","_createVNode","class","style","undefined","divider","readonly","size","text","variant","input","map","slotProps","onClick:remove","item"],"sources":["../../../src/labs/VFileUpload/VFileUpload.tsx"],"sourcesContent":["// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { ref, shallowRef } from 'vue'\nimport { filterInputAttrs, genericComponent, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nexport type VFileUploadSlots = {\n browse: {\n props: { onClick: (e: MouseEvent) => void }\n }\n default: never\n icon: never\n input: {\n inputNode: VNode\n }\n item: {\n file: File\n props: { 'onClick:remove': () => void }\n }\n title: never\n divider: never\n}\n\nexport const makeVFileUploadProps = propsFactory({\n browseText: {\n type: String,\n default: '$vuetify.fileUpload.browse',\n },\n dividerText: {\n type: String,\n default: '$vuetify.fileUpload.divider',\n },\n title: {\n type: String,\n default: '$vuetify.fileUpload.title',\n },\n subtitle: String,\n icon: {\n type: IconValue,\n default: '$upload',\n },\n modelValue: {\n type: [Array, Object] as PropType<File[] | File>,\n default: null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n clearable: Boolean,\n disabled: Boolean,\n hideBrowse: Boolean,\n multiple: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n showSize: Boolean,\n name: String,\n\n ...makeDelayProps(),\n ...makeDensityProps(),\n ...pick(makeVDividerProps({\n length: 150,\n }), ['length', 'thickness', 'opacity']),\n ...makeVSheetProps(),\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n name: 'VFileUpload',\n\n inheritAttrs: false,\n\n props: makeVFileUploadProps(),\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const { densityClasses } = useDensity(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (props.multiple || Array.isArray(props.modelValue)) ? val : val[0],\n )\n\n const isDragging = shallowRef(false)\n const vSheetRef = ref<InstanceType<typeof VSheet> | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n const { handleDrop } = useFileDrop()\n\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value) return\n\n const dataTransfer = new DataTransfer()\n for (const file of await handleDrop(e)) {\n dataTransfer.items.add(file)\n }\n\n inputRef.value.files = dataTransfer.files\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n function onClick () {\n inputRef.value?.click()\n }\n\n function onClickRemove (index: number) {\n const newValue = model.value.filter((_, i) => i !== index)\n model.value = newValue\n\n if (newValue.length > 0 || !inputRef.value) return\n\n inputRef.value.value = ''\n }\n\n useRender(() => {\n const hasTitle = !!(slots.title || props.title)\n const hasIcon = !!(slots.icon || props.icon)\n const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n const cardProps = VSheet.filterProps(props)\n const dividerProps = VDivider.filterProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n name={ props.name }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n <VSheet\n ref={ vSheetRef }\n { ...cardProps }\n class={[\n 'v-file-upload',\n {\n 'v-file-upload--clickable': !hasBrowse,\n 'v-file-upload--disabled': props.disabled,\n 'v-file-upload--dragging': isDragging.value,\n },\n densityClasses.value,\n props.class,\n ]}\n style={[\n props.style,\n ]}\n onDragleave={ onDragleave }\n onDragover={ onDragover }\n onDrop={ onDrop }\n onClick={ !hasBrowse ? onClick : undefined }\n { ...rootAttrs }\n >\n { hasIcon && (\n <div key=\"icon\" class=\"v-file-upload-icon\">\n { !slots.icon ? (\n <VIcon\n key=\"icon-icon\"\n icon={ props.icon }\n />\n ) : (\n <VDefaultsProvider\n key=\"icon-defaults\"\n defaults={{\n VIcon: {\n icon: props.icon,\n },\n }}\n >\n { slots.icon() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-file-upload-title\">\n { slots.title?.() ?? t(props.title) }\n </div>\n )}\n\n { props.density === 'default' && (\n <>\n <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n { slots.divider?.() ?? (\n <VDivider { ...dividerProps }>\n { t(props.dividerText) }\n </VDivider>\n )}\n </div>\n\n { hasBrowse && (\n <>\n { !slots.browse ? (\n <VBtn\n readonly={ props.disabled }\n size=\"large\"\n text={ t(props.browseText) }\n variant=\"tonal\"\n onClick={ onClick }\n />\n ) : (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n readonly: props.disabled,\n size: 'large',\n text: t(props.browseText),\n variant: 'tonal',\n },\n }}\n >\n { slots.browse({ props: { onClick } }) }\n </VDefaultsProvider>\n )}\n </>\n )}\n\n { props.subtitle && (\n <div class=\"v-file-upload-subtitle\">\n { props.subtitle }\n </div>\n )}\n </>\n )}\n\n <VOverlay\n model-value={ isDragging.value }\n contained\n scrim={ props.scrim }\n />\n\n { slots.input?.({ inputNode }) ?? inputNode }\n </VSheet>\n\n { model.value.length > 0 && (\n <div class=\"v-file-upload-items\">\n { model.value.map((file, i) => {\n const slotProps = {\n file,\n props: {\n 'onClick:remove': () => onClickRemove(i),\n },\n }\n\n return (\n <VDefaultsProvider\n key={ i }\n defaults={{\n VFileUploadItem: {\n file,\n clearable: props.clearable,\n disabled: props.disabled,\n showSize: props.showSize,\n },\n }}\n >\n { slots.item?.(slotProps) ?? (\n <VFileUploadItem\n key={ i }\n onClick:remove={ () => onClickRemove(i) }\n v-slots={ slots }\n />\n )}\n </VDefaultsProvider>\n )\n })}\n </div>\n )}\n </>\n )\n })\n },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n"],"mappings":"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","ignoreList":[]}
|