@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.
Files changed (209) hide show
  1. package/CHANGELOG.md +20 -9
  2. package/dist/json/attributes.json +3539 -3539
  3. package/dist/json/importMap-labs.json +14 -14
  4. package/dist/json/importMap.json +130 -130
  5. package/dist/json/web-types.json +6434 -6398
  6. package/dist/vuetify-labs.cjs +55 -36
  7. package/dist/vuetify-labs.css +26440 -28193
  8. package/dist/vuetify-labs.d.ts +197 -590
  9. package/dist/vuetify-labs.esm.js +55 -36
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +55 -36
  12. package/dist/vuetify-labs.min.css +3 -4
  13. package/dist/vuetify.cjs +47 -28
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +22837 -24587
  16. package/dist/vuetify.d.ts +197 -590
  17. package/dist/vuetify.esm.js +47 -28
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +47 -28
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +3 -4
  22. package/dist/vuetify.min.js +18 -18
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAlert/VAlert.css +211 -220
  25. package/lib/components/VApp/VApp.css +16 -15
  26. package/lib/components/VAppBar/VAppBar.css +14 -12
  27. package/lib/components/VAutocomplete/VAutocomplete.css +85 -84
  28. package/lib/components/VAutocomplete/VAutocomplete.d.ts +18 -9
  29. package/lib/components/VAutocomplete/VAutocomplete.js +6 -3
  30. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  31. package/lib/components/VAvatar/VAvatar.css +108 -106
  32. package/lib/components/VBadge/VBadge.css +77 -77
  33. package/lib/components/VBanner/VBanner.css +161 -166
  34. package/lib/components/VBottomNavigation/VBottomNavigation.css +65 -64
  35. package/lib/components/VBottomSheet/VBottomSheet.css +34 -31
  36. package/lib/components/VBreadcrumbs/VBreadcrumbs.css +54 -57
  37. package/lib/components/VBtn/VBtn.css +400 -436
  38. package/lib/components/VBtn/VBtn.sass +10 -23
  39. package/lib/components/VBtn/_variables.scss +1 -1
  40. package/lib/components/VBtnGroup/VBtnGroup.css +87 -88
  41. package/lib/components/VBtnToggle/VBtnToggle.css +16 -14
  42. package/lib/components/VCard/VCard.css +294 -302
  43. package/lib/components/VCarousel/VCarousel.css +62 -64
  44. package/lib/components/VCarousel/VCarousel.sass +1 -1
  45. package/lib/components/VCheckbox/VCheckbox.css +7 -5
  46. package/lib/components/VChip/VChip.css +378 -411
  47. package/lib/components/VChipGroup/VChipGroup.css +19 -18
  48. package/lib/components/VCode/VCode.css +13 -11
  49. package/lib/components/VColorPicker/VColorPicker.css +23 -23
  50. package/lib/components/VColorPicker/VColorPickerCanvas.css +24 -22
  51. package/lib/components/VColorPicker/VColorPickerEdit.css +29 -28
  52. package/lib/components/VColorPicker/VColorPickerPreview.css +69 -67
  53. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -2
  54. package/lib/components/VColorPicker/VColorPickerSwatches.css +34 -34
  55. package/lib/components/VCombobox/VCombobox.css +85 -84
  56. package/lib/components/VCombobox/VCombobox.d.ts +18 -9
  57. package/lib/components/VCombobox/VCombobox.js +6 -3
  58. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  59. package/lib/components/VCounter/VCounter.css +7 -5
  60. package/lib/components/VDataTable/VDataTable.css +202 -200
  61. package/lib/components/VDataTable/VDataTable.sass +20 -10
  62. package/lib/components/VDataTable/VDataTableFooter.css +33 -31
  63. package/lib/components/VDataTable/VDataTableFooter.js +7 -7
  64. package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
  65. package/lib/components/VDatePicker/VDatePicker.css +8 -6
  66. package/lib/components/VDatePicker/VDatePickerControls.css +56 -58
  67. package/lib/components/VDatePicker/VDatePickerHeader.css +56 -60
  68. package/lib/components/VDatePicker/VDatePickerMonth.css +46 -50
  69. package/lib/components/VDatePicker/VDatePickerMonths.css +20 -19
  70. package/lib/components/VDatePicker/VDatePickerYears.css +16 -15
  71. package/lib/components/VDialog/VDialog.css +98 -98
  72. package/lib/components/VDivider/VDivider.css +52 -52
  73. package/lib/components/VEmptyState/VEmptyState.css +62 -67
  74. package/lib/components/VExpansionPanel/VExpansionPanel.css +203 -209
  75. package/lib/components/VExpansionPanel/VExpansionPanel.sass +27 -25
  76. package/lib/components/VFab/VFab.css +78 -73
  77. package/lib/components/VFab/VFab.sass +5 -4
  78. package/lib/components/VField/VField.css +541 -589
  79. package/lib/components/VField/VField.sass +4 -11
  80. package/lib/components/VField/_variables.scss +1 -1
  81. package/lib/components/VFileInput/VFileInput.css +34 -32
  82. package/lib/components/VFileInput/VFileInput.js +1 -1
  83. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  84. package/lib/components/VFooter/VFooter.css +38 -36
  85. package/lib/components/VForm/VForm.d.ts +111 -531
  86. package/lib/components/VForm/VForm.js +11 -1
  87. package/lib/components/VForm/VForm.js.map +1 -1
  88. package/lib/components/VGrid/VGrid.css +565 -592
  89. package/lib/components/VIcon/VIcon.css +52 -53
  90. package/lib/components/VImg/VImg.css +50 -51
  91. package/lib/components/VInfiniteScroll/VInfiniteScroll.css +36 -37
  92. package/lib/components/VInput/VInput.css +136 -147
  93. package/lib/components/VItemGroup/VItemGroup.css +7 -5
  94. package/lib/components/VKbd/VKbd.css +33 -31
  95. package/lib/components/VLabel/VLabel.css +16 -15
  96. package/lib/components/VLayout/VLayout.css +10 -8
  97. package/lib/components/VLayout/VLayoutItem.css +8 -7
  98. package/lib/components/VList/VList.css +104 -108
  99. package/lib/components/VList/VList.sass +1 -1
  100. package/lib/components/VList/VListItem.css +442 -454
  101. package/lib/components/VList/VListItem.sass +2 -1
  102. package/lib/components/VLocaleProvider/VLocaleProvider.css +4 -2
  103. package/lib/components/VMain/VMain.css +32 -30
  104. package/lib/components/VMenu/VMenu.css +21 -19
  105. package/lib/components/VMessages/VMessages.css +17 -15
  106. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +102 -104
  107. package/lib/components/VNumberInput/VNumberInput.css +59 -57
  108. package/lib/components/VOtpInput/VOtpInput.css +56 -58
  109. package/lib/components/VOtpInput/VOtpInput.js +2 -2
  110. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  111. package/lib/components/VOverlay/VOverlay.css +61 -64
  112. package/lib/components/VOverlay/VOverlay.sass +14 -13
  113. package/lib/components/VPagination/VPagination.css +10 -8
  114. package/lib/components/VParallax/VParallax.css +8 -6
  115. package/lib/components/VProgressCircular/VProgressCircular.css +95 -101
  116. package/lib/components/VProgressLinear/VProgressLinear.css +209 -222
  117. package/lib/components/VRadioGroup/VRadioGroup.css +14 -12
  118. package/lib/components/VRating/VRating.css +52 -53
  119. package/lib/components/VResponsive/VResponsive.css +25 -26
  120. package/lib/components/VSelect/VSelect.css +59 -57
  121. package/lib/components/VSelect/VSelect.d.ts +18 -9
  122. package/lib/components/VSelect/VSelect.js +6 -3
  123. package/lib/components/VSelect/VSelect.js.map +1 -1
  124. package/lib/components/VSelectionControl/VSelectionControl.css +98 -100
  125. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.css +10 -8
  126. package/lib/components/VSheet/VSheet.css +38 -36
  127. package/lib/components/VSkeletonLoader/VSkeletonLoader.css +225 -224
  128. package/lib/components/VSlideGroup/VSlideGroup.css +53 -55
  129. package/lib/components/VSlider/VSlider.css +53 -57
  130. package/lib/components/VSlider/VSliderThumb.css +142 -153
  131. package/lib/components/VSlider/VSliderTrack.css +155 -174
  132. package/lib/components/VSnackbar/VSnackbar.css +140 -140
  133. package/lib/components/VSnackbar/VSnackbar.js +1 -1
  134. package/lib/components/VSnackbar/VSnackbar.js.map +1 -1
  135. package/lib/components/VSpeedDial/VSpeedDial.css +43 -41
  136. package/lib/components/VStepper/VStepper.css +55 -56
  137. package/lib/components/VStepper/VStepperItem.css +112 -115
  138. package/lib/components/VSwitch/VSwitch.css +129 -139
  139. package/lib/components/VSystemBar/VSystemBar.css +45 -43
  140. package/lib/components/VTable/VTable.css +142 -143
  141. package/lib/components/VTable/VTable.sass +4 -2
  142. package/lib/components/VTabs/VTab.css +30 -29
  143. package/lib/components/VTabs/VTabs.css +59 -65
  144. package/lib/components/VTextField/VTextField.css +77 -85
  145. package/lib/components/VTextarea/VTextarea.css +48 -40
  146. package/lib/components/VTextarea/VTextarea.sass +4 -2
  147. package/lib/components/VThemeProvider/VThemeProvider.css +5 -3
  148. package/lib/components/VTimePicker/VTimePicker.css +4 -2
  149. package/lib/components/VTimePicker/VTimePickerClock.css +127 -130
  150. package/lib/components/VTimePicker/VTimePickerControls.css +103 -104
  151. package/lib/components/VTimeline/VTimeline.css +388 -427
  152. package/lib/components/VToolbar/VToolbar.css +137 -144
  153. package/lib/components/VTooltip/VTooltip.css +27 -23
  154. package/lib/components/VTooltip/VTooltip.sass +8 -6
  155. package/lib/components/VTreeview/VTreeview.js +1 -1
  156. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  157. package/lib/components/VTreeview/VTreeviewItem.css +83 -85
  158. package/lib/components/VVirtualScroll/VVirtualScroll.css +11 -9
  159. package/lib/components/VWindow/VWindow.css +88 -85
  160. package/lib/composables/theme.js +3 -3
  161. package/lib/composables/theme.js.map +1 -1
  162. package/lib/directives/ripple/VRipple.css +38 -36
  163. package/lib/entry-bundler.js +1 -1
  164. package/lib/entry-bundler.js.map +1 -1
  165. package/lib/framework.d.ts +45 -45
  166. package/lib/framework.js +1 -1
  167. package/lib/framework.js.map +1 -1
  168. package/lib/labs/VCalendar/VCalendar.css +219 -225
  169. package/lib/labs/VCalendar/VCalendarDay.css +40 -41
  170. package/lib/labs/VCalendar/VCalendarHeader.css +13 -13
  171. package/lib/labs/VCalendar/VCalendarInterval.css +43 -42
  172. package/lib/labs/VCalendar/VCalendarIntervalEvent.css +7 -5
  173. package/lib/labs/VCalendar/VCalendarMonthDay.css +61 -58
  174. package/lib/labs/VCalendar/VCalendarMonthDay.sass +3 -2
  175. package/lib/labs/VColorInput/VColorInput.css +5 -3
  176. package/lib/labs/VColorInput/VColorInput.js +1 -1
  177. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  178. package/lib/labs/VDateInput/VDateInput.js +1 -1
  179. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  180. package/lib/labs/VFileUpload/VFileUpload.css +74 -77
  181. package/lib/labs/VFileUpload/VFileUpload.js +1 -1
  182. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  183. package/lib/labs/VHotkey/VHotkey.css +242 -241
  184. package/lib/labs/VIconBtn/VIconBtn.css +162 -164
  185. package/lib/labs/VPicker/VPicker.css +62 -67
  186. package/lib/labs/VStepperVertical/VStepperVertical.js +4 -4
  187. package/lib/labs/VStepperVertical/VStepperVertical.js.map +1 -1
  188. package/lib/labs/VStepperVertical/VStepperVerticalItem.js +1 -1
  189. package/lib/labs/VStepperVertical/VStepperVerticalItem.js.map +1 -1
  190. package/lib/styles/elements/_global.sass +1 -1
  191. package/lib/styles/generic/_colors.scss +3 -3
  192. package/lib/styles/generic/_layers.scss +13 -1
  193. package/lib/styles/generic/_reset.scss +0 -1
  194. package/lib/styles/generic/_transitions.scss +32 -32
  195. package/lib/styles/main.css +14677 -16153
  196. package/lib/styles/settings/_utilities.scss +0 -5
  197. package/lib/styles/settings/_variables.scss +2 -3
  198. package/lib/styles/tools/_border.sass +4 -4
  199. package/lib/styles/tools/_display.sass +0 -10
  200. package/lib/styles/tools/_elevation.sass +2 -2
  201. package/lib/styles/tools/_index.sass +0 -2
  202. package/lib/styles/tools/_layer.scss +4 -2
  203. package/lib/styles/tools/_position.sass +2 -2
  204. package/lib/styles/tools/_rounded.sass +2 -2
  205. package/lib/styles/tools/_utilities.sass +1 -5
  206. package/lib/styles/utilities/_elevation.scss +1 -1
  207. package/package.json +1 -1
  208. package/lib/styles/tools/_bootable.sass +0 -3
  209. package/lib/styles/tools/_radius.sass +0 -10
@@ -1,6 +1,8 @@
1
- .v-calendar-internal-event {
2
- overflow: hidden;
3
- padding: 4px;
4
- text-overflow: ellipsis;
5
- white-space: nowrap;
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
- .v-calendar-month__day {
2
- position: relative;
3
- display: flex;
4
- flex-direction: column;
5
- min-width: 0;
6
- min-height: 150px;
7
- border-right: thin solid #e0e0e0;
8
- border-bottom: thin solid #e0e0e0;
9
- flex: 1 1 auto;
10
- border-inline-end: thin solid #e0e0e0;
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
- flex: 1;
15
- width: 0;
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
- .v-calendar-weekly__day.v-present .v-calendar-weekly__day-month {
29
- color: currentColor;
30
- }
31
-
32
- .v-calendar-weekly__day-label {
33
- text-decoration: none;
34
- user-select: none;
35
- cursor: pointer;
36
- box-shadow: none;
37
- text-align: center;
38
- }
39
- .v-calendar-weekly__day-label .v-btn {
40
- font-size: 12px;
41
- text-transform: none !important;
42
- }
43
- .v-calendar-weekly__day-label .v-btn.v-calendar-weekly__day-label__today {
44
- background: rgba(var(--v-theme-surface-variant), var(--v-medium-emphasis-opacity));
45
- color: rgb(var(--v-theme-on-surface-variant));
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
- text-transform: none !important
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))
@@ -1,4 +1,6 @@
1
- /* region INPUT */
2
- .v-color-input {
3
- padding: 0;
1
+ @layer vuetify.components {
2
+ /* region INPUT */
3
+ .v-color-input {
4
+ padding: 0;
5
+ }
4
6
  }
@@ -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
- "minWidth": "0",
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":"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","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
- "minWidth": "0",
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
- .v-file-upload {
2
- padding: 64px 16px;
3
- flex-direction: column;
4
- justify-content: center;
5
- align-items: center;
6
- position: relative;
7
- }
8
- .v-file-upload.v-sheet {
9
- display: flex;
10
- border-radius: 4px;
11
- border-style: dashed;
12
- border-width: 2px;
13
- }
14
- .v-file-upload.v-file-upload--density-compact {
15
- padding: 32px 0;
16
- flex-direction: row;
17
- gap: 1rem;
18
- }
19
- .v-file-upload .v-overlay__scrim {
20
- pointer-events: none;
21
- }
22
- .v-file-upload--disabled {
23
- pointer-events: none;
24
- opacity: var(--v-disabled-opacity);
25
- }
26
- .v-file-upload--dragging > * {
27
- pointer-events: none;
28
- }
29
- .v-file-upload--clickable {
30
- cursor: pointer;
31
- }
32
- .v-file-upload input[type=file] {
33
- left: 0;
34
- opacity: 0;
35
- position: absolute;
36
- cursor: pointer;
37
- top: 0;
38
- z-index: -1;
39
- }
40
-
41
- .v-file-upload-title {
42
- font-size: 1.5rem;
43
- font-weight: 600;
44
- text-align: center;
45
- }
46
-
47
- .v-file-upload-icon {
48
- opacity: var(--v-medium-emphasis-opacity);
49
- font-size: 3rem;
50
- margin-bottom: 1rem;
51
- }
52
- .v-file-upload--density-comfortable .v-file-upload-icon {
53
- font-size: 2.5rem;
54
- margin-bottom: 0.5rem;
55
- }
56
- .v-file-upload--density-compact .v-file-upload-icon {
57
- font-size: 2rem;
58
- margin-bottom: 0rem;
59
- }
60
-
61
- .v-file-upload-divider {
62
- align-items: center;
63
- display: flex;
64
- margin: 32px 0;
65
- justify-content: center;
66
- width: 100%;
67
- }
68
- .v-file-upload-divider .v-divider__wrapper {
69
- max-width: 100%;
70
- }
71
-
72
- .v-file-upload-items {
73
- margin: 16px 0;
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
- "modelValue": isDragging.value,
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":[]}