@vuetify/nightly 3.0.0-beta.0 → 3.0.0-beta.2

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 (277) hide show
  1. package/CHANGELOG.md +53 -2
  2. package/dist/json/attributes.json +343 -195
  3. package/dist/json/importMap.json +20 -0
  4. package/dist/json/tags.json +106 -44
  5. package/dist/json/web-types.json +946 -549
  6. package/dist/vuetify.css +1486 -1085
  7. package/dist/vuetify.d.ts +9036 -8077
  8. package/dist/vuetify.esm.js +1511 -944
  9. package/dist/vuetify.esm.js.map +1 -1
  10. package/dist/vuetify.js +1510 -943
  11. package/dist/vuetify.js.map +1 -1
  12. package/dist/vuetify.min.css +3 -3
  13. package/dist/vuetify.min.js +825 -754
  14. package/dist/vuetify.min.js.map +1 -1
  15. package/lib/components/VAlert/VAlert.css +29 -8
  16. package/lib/components/VAlert/VAlert.mjs +31 -17
  17. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  18. package/lib/components/VAlert/VAlert.sass +27 -7
  19. package/lib/components/VAlert/VAlertTitle.mjs +1 -0
  20. package/lib/components/VAlert/VAlertTitle.mjs.map +1 -1
  21. package/lib/components/VAlert/_variables.scss +14 -7
  22. package/lib/components/VApp/VApp.css +1 -0
  23. package/lib/components/VApp/VApp.sass +1 -0
  24. package/lib/components/VAppBar/VAppBar.mjs +7 -3
  25. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  26. package/lib/components/VAppBar/VAppBarTitle.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs +82 -69
  28. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  29. package/lib/components/VAvatar/VAvatar.mjs +15 -14
  30. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  31. package/lib/components/VBanner/VBanner.css +82 -58
  32. package/lib/components/VBanner/VBanner.mjs +39 -43
  33. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  34. package/lib/components/VBanner/VBanner.sass +61 -54
  35. package/lib/components/VBanner/VBannerActions.mjs +34 -2
  36. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  37. package/lib/components/VBanner/VBannerAvatar.mjs +20 -0
  38. package/lib/components/VBanner/VBannerAvatar.mjs.map +1 -0
  39. package/lib/components/VBanner/VBannerIcon.mjs +20 -0
  40. package/lib/components/VBanner/VBannerIcon.mjs.map +1 -0
  41. package/lib/components/VBanner/_variables.scss +10 -14
  42. package/lib/components/VBanner/index.mjs +2 -0
  43. package/lib/components/VBanner/index.mjs.map +1 -1
  44. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +2 -0
  45. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  46. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +10 -9
  47. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  48. package/lib/components/VBtn/VBtn.css +20 -1
  49. package/lib/components/VBtn/VBtn.mjs +20 -7
  50. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  51. package/lib/components/VBtn/VBtn.sass +15 -2
  52. package/lib/components/VBtn/_variables.scss +3 -0
  53. package/lib/components/VBtnGroup/VBtnGroup.css +14 -6
  54. package/lib/components/VBtnGroup/VBtnGroup.sass +14 -6
  55. package/lib/components/VCard/VCard.css +13 -11
  56. package/lib/components/VCard/VCard.mjs +5 -2
  57. package/lib/components/VCard/VCard.mjs.map +1 -1
  58. package/lib/components/VCard/VCard.sass +12 -9
  59. package/lib/components/VCard/VCardActions.mjs +1 -2
  60. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  61. package/lib/components/VCard/VCardContent.mjs +3 -0
  62. package/lib/components/VCard/VCardContent.mjs.map +1 -0
  63. package/lib/components/VCard/_variables.scss +11 -5
  64. package/lib/components/VCard/index.mjs +1 -0
  65. package/lib/components/VCard/index.mjs.map +1 -1
  66. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  67. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  68. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  69. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  70. package/lib/components/VChip/VChip.css +3 -0
  71. package/lib/components/VChip/VChip.sass +3 -0
  72. package/lib/components/VChip/_variables.scss +3 -0
  73. package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -1
  74. package/lib/components/VCombobox/VCombobox.mjs +92 -74
  75. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  76. package/lib/components/VDialog/VDialog.css +31 -11
  77. package/lib/components/VDialog/VDialog.mjs +6 -9
  78. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  79. package/lib/components/VDialog/VDialog.sass +27 -10
  80. package/lib/components/VDialog/_variables.scss +3 -6
  81. package/lib/components/VExpansionPanel/VExpansionPanel.css +3 -2
  82. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +6 -2
  83. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  84. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +5 -3
  85. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  86. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -0
  87. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  88. package/lib/components/VField/VField.css +1 -1
  89. package/lib/components/VField/VField.mjs +3 -4
  90. package/lib/components/VField/VField.mjs.map +1 -1
  91. package/lib/components/VField/VField.sass +1 -1
  92. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  93. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  94. package/lib/components/VFooter/VFooter.mjs +32 -15
  95. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  96. package/lib/components/VForm/VForm.mjs +25 -11
  97. package/lib/components/VForm/VForm.mjs.map +1 -1
  98. package/lib/components/VIcon/VIcon.css +27 -12
  99. package/lib/components/VIcon/VIcon.mjs +19 -16
  100. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  101. package/lib/components/VIcon/VIcon.sass +27 -16
  102. package/lib/components/VIcon/_variables.scss +1 -0
  103. package/lib/components/VInput/VInput.css +3 -1
  104. package/lib/components/VInput/VInput.mjs +3 -4
  105. package/lib/components/VInput/VInput.mjs.map +1 -1
  106. package/lib/components/VInput/VInput.sass +3 -1
  107. package/lib/components/VInput/_variables.scss +4 -0
  108. package/lib/components/VList/VList.css +7 -6
  109. package/lib/components/VList/VList.mjs +36 -17
  110. package/lib/components/VList/VList.mjs.map +1 -1
  111. package/lib/components/VList/VList.sass +3 -2
  112. package/lib/components/VList/VListChildren.mjs +1 -1
  113. package/lib/components/VList/VListChildren.mjs.map +1 -1
  114. package/lib/components/VList/VListGroup.mjs +28 -10
  115. package/lib/components/VList/VListGroup.mjs.map +1 -1
  116. package/lib/components/VList/VListItem.css +119 -42
  117. package/lib/components/VList/VListItem.mjs +36 -32
  118. package/lib/components/VList/VListItem.mjs.map +1 -1
  119. package/lib/components/VList/VListItem.sass +76 -28
  120. package/lib/components/VList/VListItemAction.mjs +29 -0
  121. package/lib/components/VList/VListItemAction.mjs.map +1 -0
  122. package/lib/components/VList/VListItemAvatar.mjs +10 -16
  123. package/lib/components/VList/VListItemAvatar.mjs.map +1 -1
  124. package/lib/components/VList/VListItemIcon.mjs +23 -0
  125. package/lib/components/VList/VListItemIcon.mjs.map +1 -0
  126. package/lib/components/VList/VListItemMedia.mjs +4 -4
  127. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  128. package/lib/components/VList/_variables.scss +12 -3
  129. package/lib/components/VList/index.mjs +2 -0
  130. package/lib/components/VList/index.mjs.map +1 -1
  131. package/lib/components/VMenu/VMenu.css +2 -12
  132. package/lib/components/VMenu/VMenu.mjs +61 -31
  133. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  134. package/lib/components/VMenu/VMenu.sass +3 -6
  135. package/lib/components/VMenu/shared.mjs +2 -0
  136. package/lib/components/VMenu/shared.mjs.map +1 -0
  137. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  138. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  139. package/lib/components/VOverlay/VOverlay.css +8 -0
  140. package/lib/components/VOverlay/VOverlay.mjs +16 -15
  141. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  142. package/lib/components/VOverlay/VOverlay.sass +9 -0
  143. package/lib/components/VOverlay/_variables.scss +1 -0
  144. package/lib/components/VOverlay/positionStrategies.mjs +7 -3
  145. package/lib/components/VOverlay/positionStrategies.mjs.map +1 -1
  146. package/lib/components/VOverlay/scrollStrategies.mjs +9 -0
  147. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  148. package/lib/components/VOverlay/useActivator.mjs +50 -14
  149. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  150. package/lib/components/VPagination/VPagination.mjs +10 -12
  151. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  152. package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
  153. package/lib/components/VRadio/VRadio.mjs +1 -2
  154. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  155. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  156. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  157. package/lib/components/VRangeSlider/VRangeSlider.mjs +5 -2
  158. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  159. package/lib/components/VRating/VRating.css +2 -2
  160. package/lib/components/VRating/VRating.mjs +13 -3
  161. package/lib/components/VRating/VRating.mjs.map +1 -1
  162. package/lib/components/VRating/VRating.sass +2 -2
  163. package/lib/components/VSelect/VSelect.mjs +70 -91
  164. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  165. package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -1
  166. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  167. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +2 -2
  168. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  169. package/lib/components/VSlideGroup/VSlideGroup.css +0 -5
  170. package/lib/components/VSlideGroup/VSlideGroup.mjs +36 -14
  171. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  172. package/lib/components/VSlideGroup/VSlideGroup.sass +0 -4
  173. package/lib/components/VSlideGroup/VSlideGroupItem.mjs +3 -1
  174. package/lib/components/VSlideGroup/VSlideGroupItem.mjs.map +1 -1
  175. package/lib/components/VSlider/VSlider.css +7 -2
  176. package/lib/components/VSlider/VSlider.sass +11 -5
  177. package/lib/components/VSlider/VSliderTrack.css +6 -6
  178. package/lib/components/VSlider/VSliderTrack.mjs +1 -1
  179. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  180. package/lib/components/VSlider/VSliderTrack.sass +7 -7
  181. package/lib/components/VSlider/_variables.scss +5 -2
  182. package/lib/components/VSnackbar/VSnackbar.css +14 -13
  183. package/lib/components/VSnackbar/VSnackbar.mjs +22 -10
  184. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  185. package/lib/components/VSnackbar/VSnackbar.sass +15 -16
  186. package/lib/components/VSnackbar/_variables.scss +0 -4
  187. package/lib/components/VSwitch/VSwitch.mjs +8 -5
  188. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  189. package/lib/components/VSystemBar/VSystemBar.css +0 -5
  190. package/lib/components/VSystemBar/VSystemBar.mjs +31 -14
  191. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  192. package/lib/components/VSystemBar/VSystemBar.sass +0 -5
  193. package/lib/components/VSystemBar/_variables.scss +0 -3
  194. package/lib/components/VTabs/VTab.mjs +28 -32
  195. package/lib/components/VTabs/VTab.mjs.map +1 -1
  196. package/lib/components/VTabs/VTabs.css +6 -2
  197. package/lib/components/VTabs/VTabs.mjs +7 -8
  198. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  199. package/lib/components/VTabs/VTabs.sass +6 -1
  200. package/lib/components/VTabs/shared.mjs +2 -0
  201. package/lib/components/VTabs/shared.mjs.map +1 -0
  202. package/lib/components/VTextField/VTextField.css +4 -4
  203. package/lib/components/VTextField/VTextField.mjs +5 -9
  204. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  205. package/lib/components/VTextField/VTextField.sass +5 -5
  206. package/lib/components/VTextarea/VTextarea.css +7 -4
  207. package/lib/components/VTextarea/VTextarea.sass +9 -5
  208. package/lib/components/VTimeline/VTimeline.css +187 -48
  209. package/lib/components/VTimeline/VTimeline.mjs +27 -11
  210. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  211. package/lib/components/VTimeline/VTimeline.sass +196 -51
  212. package/lib/components/VTimeline/VTimelineDivider.mjs +2 -1
  213. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  214. package/lib/components/VTimeline/_variables.scss +2 -1
  215. package/lib/components/VToolbar/VToolbar.css +8 -1
  216. package/lib/components/VToolbar/VToolbar.mjs +8 -11
  217. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  218. package/lib/components/VToolbar/VToolbar.sass +2 -1
  219. package/lib/components/VToolbar/VToolbarItems.mjs +0 -1
  220. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  221. package/lib/components/VToolbar/_variables.scss +13 -1
  222. package/lib/components/VWindow/VWindow.mjs +0 -8
  223. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  224. package/lib/components/index.d.ts +9025 -8077
  225. package/lib/composables/defaults.mjs +2 -2
  226. package/lib/composables/defaults.mjs.map +1 -1
  227. package/lib/composables/form.mjs +18 -5
  228. package/lib/composables/form.mjs.map +1 -1
  229. package/lib/composables/forwardRef.mjs +10 -6
  230. package/lib/composables/forwardRef.mjs.map +1 -1
  231. package/lib/composables/group.mjs +14 -6
  232. package/lib/composables/group.mjs.map +1 -1
  233. package/lib/composables/index.mjs.map +1 -1
  234. package/lib/composables/items.mjs +56 -0
  235. package/lib/composables/items.mjs.map +1 -0
  236. package/lib/composables/layout.mjs +7 -3
  237. package/lib/composables/layout.mjs.map +1 -1
  238. package/lib/composables/loader.mjs.map +1 -1
  239. package/lib/composables/nested/nested.mjs +27 -14
  240. package/lib/composables/nested/nested.mjs.map +1 -1
  241. package/lib/composables/nested/openStrategies.mjs +63 -36
  242. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  243. package/lib/composables/nested/selectStrategies.mjs +163 -122
  244. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  245. package/lib/composables/overlay.mjs +5 -1
  246. package/lib/composables/overlay.mjs.map +1 -1
  247. package/lib/composables/proxiedModel.mjs.map +1 -1
  248. package/lib/composables/resizeObserver.mjs +1 -9
  249. package/lib/composables/resizeObserver.mjs.map +1 -1
  250. package/lib/composables/router.mjs +17 -5
  251. package/lib/composables/router.mjs.map +1 -1
  252. package/lib/composables/selectLink.mjs +19 -0
  253. package/lib/composables/selectLink.mjs.map +1 -0
  254. package/lib/composables/stack.mjs +7 -4
  255. package/lib/composables/stack.mjs.map +1 -1
  256. package/lib/composables/validation.mjs +6 -3
  257. package/lib/composables/validation.mjs.map +1 -1
  258. package/lib/composables/variant.mjs +0 -3
  259. package/lib/composables/variant.mjs.map +1 -1
  260. package/lib/directives/ripple/index.mjs +15 -3
  261. package/lib/directives/ripple/index.mjs.map +1 -1
  262. package/lib/entry-bundler.mjs +1 -1
  263. package/lib/framework.mjs +12 -7
  264. package/lib/framework.mjs.map +1 -1
  265. package/lib/index.d.ts +18 -2
  266. package/lib/locale/ca.mjs +9 -9
  267. package/lib/locale/ca.mjs.map +1 -1
  268. package/lib/styles/generic/_colors.scss +0 -1
  269. package/lib/styles/main.css +400 -392
  270. package/lib/styles/settings/_utilities.scss +54 -26
  271. package/lib/styles/tools/_states.sass +2 -1
  272. package/lib/util/defineComponent.mjs +37 -6
  273. package/lib/util/defineComponent.mjs.map +1 -1
  274. package/lib/util/getCurrentInstance.mjs +1 -1
  275. package/lib/util/getCurrentInstance.mjs.map +1 -1
  276. package/lib/util/helpers.mjs.map +1 -1
  277. package/package.json +31 -29
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VField/VField.tsx"],"names":["VExpandXTransition","VIcon","VFieldLabel","LoaderSlot","makeLoaderProps","useLoader","makeThemeProps","provideTheme","useBackgroundColor","useTextColor","makeFocusProps","useFocus","computed","ref","toRef","watch","convertToUnit","genericComponent","getUid","nullifyTransforms","pick","propsFactory","standardEasing","useRender","allowedVariants","makeVFieldProps","appendInnerIcon","String","bgColor","clearable","Boolean","clearIcon","type","default","active","color","dirty","disabled","error","label","persistentClear","prependInnerIcon","reverse","singleLine","variant","validator","v","includes","VField","name","inheritAttrs","props","id","emits","e","focused","val","setup","attrs","emit","slots","themeClasses","loaderClasses","focusClasses","isFocused","focus","blur","isActive","hasLabel","uid","labelRef","floatingLabelRef","controlRef","backgroundColorClasses","backgroundColorStyles","textColorClasses","textColorStyles","value","undefined","el","$el","targetEl","rect","targetRect","getBoundingClientRect","x","y","height","targetWidth","width","Math","abs","maxWidth","duration","parseFloat","getComputedStyle","transitionDuration","scale","getPropertyValue","style","visibility","animate","transform","easing","direction","finished","then","removeProperty","flush","slotProps","onClick","target","document","activeElement","preventDefault","isOutlined","hasPrepend","prependInner","hasClear","clear","hasAppend","appendInner","for","loading","loader","class","filterFieldProps","Object","keys"],"mappings":"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","sourcesContent":["// Styles\nimport './VField.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\nimport { VFieldLabel } from './VFieldLabel'\n\n// Composables\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\n\n// Utilities\nimport { computed, ref, toRef, watch } from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getUid,\n nullifyTransforms,\n pick,\n propsFactory,\n standardEasing,\n useRender,\n} from '@/util'\n\n// Types\nimport type { VInputSlot } from '@/components/VInput/VInput'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'contained', 'plain'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport interface DefaultInputSlot {\n isActive: Ref<boolean>\n isFocused: Ref<boolean>\n controlRef: Ref<HTMLElement | undefined>\n focus: () => void\n blur: () => void\n}\n\nexport interface VFieldSlot extends DefaultInputSlot {\n props: Record<string, unknown>\n}\n\nexport const makeVFieldProps = propsFactory({\n appendInnerIcon: String,\n bgColor: String,\n clearable: Boolean,\n clearIcon: {\n type: String,\n default: '$clear',\n },\n active: Boolean,\n color: String,\n dirty: Boolean,\n disabled: Boolean,\n error: Boolean,\n label: String,\n persistentClear: Boolean,\n prependInnerIcon: String,\n reverse: Boolean,\n singleLine: Boolean,\n variant: {\n type: String as PropType<Variant>,\n default: 'filled',\n validator: (v: any) => allowedVariants.includes(v),\n },\n\n ...makeThemeProps(),\n ...makeLoaderProps(),\n}, 'v-field')\n\nexport type VFieldSlots = MakeSlots<{\n clear: []\n prependInner: [DefaultInputSlot & VInputSlot]\n appendInner: [DefaultInputSlot & VInputSlot]\n label: [DefaultInputSlot & VInputSlot]\n loader: [LoaderSlotProps]\n default: [VFieldSlot]\n}>\n\nexport const VField = genericComponent<new <T>() => {\n $props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n }\n $slots: VFieldSlots\n}>()({\n name: 'VField',\n\n inheritAttrs: false,\n\n props: {\n id: String,\n\n ...makeFocusProps(),\n ...makeVFieldProps(),\n },\n\n emits: {\n 'click:clear': (e: MouseEvent) => true,\n 'click:prepend-inner': (e: MouseEvent) => true,\n 'click:append-inner': (e: MouseEvent) => true,\n 'click:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { loaderClasses } = useLoader(props)\n const { focusClasses, isFocused, focus, blur } = useFocus(props)\n\n const isActive = computed(() => props.dirty || props.active)\n const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label))\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n\n const labelRef = ref<VFieldLabel>()\n const floatingLabelRef = ref<VFieldLabel>()\n const controlRef = ref<HTMLElement>()\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'bgColor'))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n isActive.value &&\n isFocused.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n\n watch(isActive, val => {\n if (hasLabel.value) {\n const el: HTMLElement = labelRef.value!.$el\n const targetEl: HTMLElement = floatingLabelRef.value!.$el\n const rect = nullifyTransforms(el)\n const targetRect = targetEl.getBoundingClientRect()\n\n const x = targetRect.x - rect.x\n const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2)\n\n const targetWidth = targetRect.width / 0.75\n const width = Math.abs(targetWidth - rect.width) > 1\n ? { maxWidth: convertToUnit(targetWidth) }\n : undefined\n\n const duration = parseFloat(getComputedStyle(el).transitionDuration) * 1000\n const scale = parseFloat(getComputedStyle(targetEl).getPropertyValue('--v-field-label-scale'))\n\n el.style.visibility = 'visible'\n targetEl.style.visibility = 'hidden'\n\n el.animate([\n { transform: 'translate(0)' },\n { transform: `translate(${x}px, ${y}px) scale(${scale})`, ...width },\n ], {\n duration,\n easing: standardEasing,\n direction: val ? 'normal' : 'reverse',\n }).finished.then(() => {\n el.style.removeProperty('visibility')\n targetEl.style.removeProperty('visibility')\n })\n }\n }, { flush: 'post' })\n\n const slotProps = computed<DefaultInputSlot>(() => ({\n isActive,\n isFocused,\n controlRef,\n blur,\n focus,\n }))\n\n function onClick (e: MouseEvent) {\n if (e.target !== document.activeElement) {\n e.preventDefault()\n }\n\n emit('click:control', e)\n }\n\n useRender(() => {\n const isOutlined = props.variant === 'outlined'\n const hasPrepend = (slots.prependInner || props.prependInnerIcon)\n const hasClear = !!(props.clearable || slots.clear)\n const hasAppend = !!(slots.appendInner || props.appendInnerIcon || hasClear)\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n\n return (\n <div\n class={[\n 'v-field',\n {\n 'v-field--active': isActive.value,\n 'v-field--appended': hasAppend,\n 'v-field--disabled': props.disabled,\n 'v-field--dirty': props.dirty,\n 'v-field--error': props.error,\n 'v-field--has-background': !!props.bgColor,\n 'v-field--persistent-clear': props.persistentClear,\n 'v-field--prepended': hasPrepend,\n 'v-field--reverse': props.reverse,\n 'v-field--single-line': props.singleLine,\n [`v-field--variant-${props.variant}`]: true,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n focusClasses.value,\n loaderClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n textColorStyles.value,\n ]}\n onClick={ onClick }\n { ...attrs }\n >\n <div class=\"v-field__overlay\" />\n\n <LoaderSlot\n name=\"v-field\"\n active={ props.loading }\n color={ props.error ? 'error' : props.color }\n v-slots={{ default: slots.loader }}\n />\n\n { hasPrepend && (\n <div\n class=\"v-field__prepend-inner\"\n >\n { props.prependInnerIcon && (\n <VIcon\n onClick={ (e: MouseEvent) => emit('click:prepend-inner', e) }\n icon={ props.prependInnerIcon }\n />\n ) }\n\n { slots?.prependInner?.(slotProps.value) }\n </div>\n ) }\n\n <div class=\"v-field__field\">\n { ['contained', 'filled'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel\n ref={ floatingLabelRef }\n class={[textColorClasses.value]}\n floating\n >\n { label }\n </VFieldLabel>\n ) }\n\n <VFieldLabel ref={ labelRef } for={ id.value }>\n { label }\n </VFieldLabel>\n\n { slots.default?.({\n ...slotProps.value,\n props: {\n id: id.value,\n class: 'v-field__input',\n },\n focus,\n blur,\n } as VFieldSlot) }\n </div>\n\n { hasClear && (\n <VExpandXTransition>\n <div\n class=\"v-field__clearable\"\n v-show={ props.dirty }\n >\n { slots.clear\n ? slots.clear()\n : (\n <VIcon\n onClick={ (e: MouseEvent) => emit('click:clear', e) }\n icon={ props.clearIcon }\n />\n )\n }\n </div>\n </VExpandXTransition>\n ) }\n\n { hasAppend && (\n <div\n class=\"v-field__append-inner\"\n >\n { slots?.appendInner?.(slotProps.value) }\n\n { props.appendInnerIcon && (\n <VIcon\n onClick={ (e: MouseEvent) => emit('click:append-inner', e) }\n icon={ props.appendInnerIcon }\n />\n ) }\n </div>\n ) }\n\n <div\n class={[\n 'v-field__outline',\n textColorClasses.value,\n ]}\n >\n { isOutlined && (\n <>\n <div class=\"v-field__outline__start\" />\n\n { hasLabel.value && (\n <div class=\"v-field__outline__notch\">\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n </div>\n ) }\n\n <div class=\"v-field__outline__end\" />\n </>\n ) }\n\n { ['plain', 'underlined'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n ) }\n </div>\n </div>\n )\n })\n\n return {\n controlRef,\n }\n },\n})\n\nexport type VField = InstanceType<typeof VField>\n\n// TODO: this is kinda slow, might be better to implicitly inherit props instead\nexport function filterFieldProps (attrs: Record<string, unknown>) {\n return pick(attrs, Object.keys(VField.props))\n}\n"],"file":"VField.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VField/VField.tsx"],"names":["VExpandXTransition","VIcon","VFieldLabel","LoaderSlot","makeLoaderProps","useLoader","makeThemeProps","provideTheme","useBackgroundColor","useTextColor","makeFocusProps","useFocus","computed","ref","toRef","watch","convertToUnit","genericComponent","getUid","nullifyTransforms","pick","propsFactory","standardEasing","useRender","allowedVariants","makeVFieldProps","appendInnerIcon","String","bgColor","clearable","Boolean","clearIcon","type","default","active","color","dirty","disabled","error","label","persistentClear","prependInnerIcon","reverse","singleLine","variant","validator","v","includes","VField","name","inheritAttrs","props","id","emits","e","focused","val","setup","attrs","emit","slots","themeClasses","loaderClasses","focusClasses","isFocused","focus","blur","isActive","hasLabel","uid","labelRef","floatingLabelRef","controlRef","backgroundColorClasses","backgroundColorStyles","textColorClasses","textColorStyles","value","undefined","el","$el","targetEl","rect","targetRect","getBoundingClientRect","x","y","height","targetWidth","width","Math","abs","maxWidth","duration","parseFloat","getComputedStyle","transitionDuration","scale","getPropertyValue","style","visibility","animate","transform","easing","direction","finished","then","removeProperty","flush","slotProps","onClick","target","document","activeElement","preventDefault","isOutlined","hasPrepend","prependInner","hasClear","clear","hasAppend","appendInner","for","loading","loader","class","filterFieldProps","Object","keys"],"mappings":"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","sourcesContent":["// Styles\nimport './VField.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\nimport { VFieldLabel } from './VFieldLabel'\n\n// Composables\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\n\n// Utilities\nimport { computed, ref, toRef, watch } from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getUid,\n nullifyTransforms,\n pick,\n propsFactory,\n standardEasing,\n useRender,\n} from '@/util'\n\n// Types\nimport type { VInputSlot } from '@/components/VInput/VInput'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'contained', 'plain'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport interface DefaultInputSlot {\n isActive: Ref<boolean>\n isFocused: Ref<boolean>\n controlRef: Ref<HTMLElement | undefined>\n focus: () => void\n blur: () => void\n}\n\nexport interface VFieldSlot extends DefaultInputSlot {\n props: Record<string, unknown>\n}\n\nexport const makeVFieldProps = propsFactory({\n appendInnerIcon: String,\n bgColor: String,\n clearable: Boolean,\n clearIcon: {\n type: String,\n default: '$clear',\n },\n active: Boolean,\n color: String,\n dirty: Boolean,\n disabled: Boolean,\n error: Boolean,\n label: String,\n persistentClear: Boolean,\n prependInnerIcon: String,\n reverse: Boolean,\n singleLine: Boolean,\n variant: {\n type: String as PropType<Variant>,\n default: 'filled',\n validator: (v: any) => allowedVariants.includes(v),\n },\n\n ...makeThemeProps(),\n ...makeLoaderProps(),\n}, 'v-field')\n\nexport type VFieldSlots = MakeSlots<{\n clear: []\n prependInner: [DefaultInputSlot & VInputSlot]\n appendInner: [DefaultInputSlot & VInputSlot]\n label: [DefaultInputSlot & VInputSlot]\n loader: [LoaderSlotProps]\n default: [VFieldSlot]\n}>\n\nexport const VField = genericComponent<new <T>() => {\n $props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n }\n $slots: VFieldSlots\n}>()({\n name: 'VField',\n\n inheritAttrs: false,\n\n props: {\n id: String,\n\n ...makeFocusProps(),\n ...makeVFieldProps(),\n },\n\n emits: {\n 'click:clear': (e: MouseEvent) => true,\n 'click:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { loaderClasses } = useLoader(props)\n const { focusClasses, isFocused, focus, blur } = useFocus(props)\n\n const isActive = computed(() => props.dirty || props.active)\n const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label))\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n\n const labelRef = ref<VFieldLabel>()\n const floatingLabelRef = ref<VFieldLabel>()\n const controlRef = ref<HTMLElement>()\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'bgColor'))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n isActive.value &&\n isFocused.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n\n watch(isActive, val => {\n if (hasLabel.value) {\n const el: HTMLElement = labelRef.value!.$el\n const targetEl: HTMLElement = floatingLabelRef.value!.$el\n const rect = nullifyTransforms(el)\n const targetRect = targetEl.getBoundingClientRect()\n\n const x = targetRect.x - rect.x\n const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2)\n\n const targetWidth = targetRect.width / 0.75\n const width = Math.abs(targetWidth - rect.width) > 1\n ? { maxWidth: convertToUnit(targetWidth) }\n : undefined\n\n const duration = parseFloat(getComputedStyle(el).transitionDuration) * 1000\n const scale = parseFloat(getComputedStyle(targetEl).getPropertyValue('--v-field-label-scale'))\n\n el.style.visibility = 'visible'\n targetEl.style.visibility = 'hidden'\n\n el.animate([\n { transform: 'translate(0)' },\n { transform: `translate(${x}px, ${y}px) scale(${scale})`, ...width },\n ], {\n duration,\n easing: standardEasing,\n direction: val ? 'normal' : 'reverse',\n }).finished.then(() => {\n el.style.removeProperty('visibility')\n targetEl.style.removeProperty('visibility')\n })\n }\n }, { flush: 'post' })\n\n const slotProps = computed<DefaultInputSlot>(() => ({\n isActive,\n isFocused,\n controlRef,\n blur,\n focus,\n }))\n\n function onClick (e: MouseEvent) {\n if (e.target !== document.activeElement) {\n e.preventDefault()\n }\n\n emit('click:control', e)\n }\n\n useRender(() => {\n const isOutlined = props.variant === 'outlined'\n const hasPrepend = (slots.prependInner || props.prependInnerIcon)\n const hasClear = !!(props.clearable || slots.clear)\n const hasAppend = !!(slots.appendInner || props.appendInnerIcon || hasClear)\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n\n return (\n <div\n class={[\n 'v-field',\n {\n 'v-field--active': isActive.value,\n 'v-field--appended': hasAppend,\n 'v-field--disabled': props.disabled,\n 'v-field--dirty': props.dirty,\n 'v-field--error': props.error,\n 'v-field--has-background': !!props.bgColor,\n 'v-field--persistent-clear': props.persistentClear,\n 'v-field--prepended': hasPrepend,\n 'v-field--reverse': props.reverse,\n 'v-field--single-line': props.singleLine,\n 'v-field--has-label': !!label,\n [`v-field--variant-${props.variant}`]: true,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n focusClasses.value,\n loaderClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n textColorStyles.value,\n ]}\n onClick={ onClick }\n { ...attrs }\n >\n <div class=\"v-field__overlay\" />\n\n <LoaderSlot\n name=\"v-field\"\n active={ props.loading }\n color={ props.error ? 'error' : props.color }\n v-slots={{ default: slots.loader }}\n />\n\n { hasPrepend && (\n <div\n class=\"v-field__prepend-inner\"\n >\n { props.prependInnerIcon && (\n <VIcon\n onClick={ attrs['onClick:prependInner'] }\n icon={ props.prependInnerIcon }\n />\n ) }\n\n { slots?.prependInner?.(slotProps.value) }\n </div>\n ) }\n\n <div class=\"v-field__field\">\n { ['contained', 'filled'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel\n ref={ floatingLabelRef }\n class={[textColorClasses.value]}\n floating\n >\n { label }\n </VFieldLabel>\n ) }\n\n <VFieldLabel ref={ labelRef } for={ id.value }>\n { label }\n </VFieldLabel>\n\n { slots.default?.({\n ...slotProps.value,\n props: {\n id: id.value,\n class: 'v-field__input',\n },\n focus,\n blur,\n } as VFieldSlot) }\n </div>\n\n { hasClear && (\n <VExpandXTransition>\n <div\n class=\"v-field__clearable\"\n v-show={ props.dirty }\n >\n { slots.clear\n ? slots.clear()\n : (\n <VIcon\n onClick={ (e: MouseEvent) => emit('click:clear', e) }\n icon={ props.clearIcon }\n />\n )\n }\n </div>\n </VExpandXTransition>\n ) }\n\n { hasAppend && (\n <div\n class=\"v-field__append-inner\"\n >\n { slots?.appendInner?.(slotProps.value) }\n\n { props.appendInnerIcon && (\n <VIcon\n onClick={ attrs['onClick:appendInner'] }\n icon={ props.appendInnerIcon }\n />\n ) }\n </div>\n ) }\n\n <div\n class={[\n 'v-field__outline',\n textColorClasses.value,\n ]}\n >\n { isOutlined && (\n <>\n <div class=\"v-field__outline__start\" />\n\n { hasLabel.value && (\n <div class=\"v-field__outline__notch\">\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n </div>\n ) }\n\n <div class=\"v-field__outline__end\" />\n </>\n ) }\n\n { ['plain', 'underlined'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n ) }\n </div>\n </div>\n )\n })\n\n return {\n controlRef,\n }\n },\n})\n\nexport type VField = InstanceType<typeof VField>\n\n// TODO: this is kinda slow, might be better to implicitly inherit props instead\nexport function filterFieldProps (attrs: Record<string, unknown>) {\n return pick(attrs, Object.keys(VField.props))\n}\n"],"file":"VField.mjs"}
@@ -10,7 +10,7 @@
10
10
  .v-field
11
11
  display: grid
12
12
  grid-template-areas: "prepend-inner field clear append-inner"
13
- grid-template-columns: min-content auto min-content min-content
13
+ grid-template-columns: min-content minmax(0, 1fr) min-content min-content
14
14
  font-size: $field-font-size
15
15
  letter-spacing: $field-letter-spacing
16
16
  max-width: $field-max-width
@@ -143,7 +143,7 @@ export const VFileInput = defineComponent({
143
143
  }
144
144
 
145
145
  useRender(() => {
146
- const hasCounter = !!(slots.counter || props.counter || counterValue.value);
146
+ const hasCounter = !!(slots.counter || props.counter);
147
147
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
148
148
  const [{
149
149
  modelValue: _,
@@ -221,6 +221,7 @@ export const VFileInput = defineComponent({
221
221
  });
222
222
  },
223
223
  details: hasCounter ? () => _createVNode(_Fragment, null, [_createVNode("span", null, null), _createVNode(VCounter, {
224
+ "active": !!model.value.length,
224
225
  "value": counterValue.value
225
226
  }, slots.counter)]) : undefined
226
227
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"names":["filterFieldProps","makeVFieldProps","VChip","VCounter","VField","useForwardRef","useLocale","useProxiedModel","computed","nextTick","ref","defineComponent","filterInputAttrs","humanReadableFileSize","useRender","wrapInArray","filterInputProps","makeVInputProps","VInput","VFileInput","name","inheritAttrs","props","chips","Boolean","counter","counterSizeString","type","String","default","counterString","multiple","hint","persistentHint","placeholder","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","val","every","clearable","emits","e","files","setup","attrs","emit","slots","t","model","base","undefined","totalBytes","value","reduce","bytes","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","isFocused","inputRef","messages","onFocus","document","activeElement","focus","onControlClick","click","onClear","stopPropagation","hasCounter","rootAttrs","inputAttrs","_","inputProps","fieldProps","isDisabled","isDirty","isReadonly","isValid","class","fieldClass","slotProps","target","selection","text","color","join","details"],"mappings":"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","sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { useForwardRef } from '@/composables/forwardRef'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref } from 'vue'\nimport { defineComponent, filterInputAttrs, humanReadableFileSize, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\n\nexport const VFileInput = defineComponent({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: {\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n multiple: Boolean,\n hint: String,\n persistentHint: Boolean,\n placeholder: String,\n showSize: {\n type: [Boolean, Number] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(v)\n )\n },\n },\n\n ...makeVInputProps(),\n\n prependIcon: {\n type: String,\n default: '$file',\n },\n modelValue: {\n type: Array as PropType<File[]>,\n default: () => ([]),\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n },\n\n emits: {\n 'click:clear': (e: MouseEvent) => true,\n 'click:control': (e: MouseEvent) => true,\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(props, 'modelValue')\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n const messages = computed(() => {\n return props.messages.length\n ? props.messages\n : (props.persistentHint) ? props.hint : ''\n })\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) {\n isFocused.value = true\n }\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n if (inputRef?.value) {\n inputRef.value.value = ''\n }\n\n emit('click:clear', e)\n })\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || counterValue.value)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [{ modelValue: _, ...inputProps }] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class=\"v-file-input\"\n { ...rootAttrs }\n { ...inputProps }\n onClick:prepend={ onControlClick }\n messages={ messages.value }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onClick:control={ onControlClick }\n onClick:clear={ onClear }\n { ...fieldProps }\n active={ isDirty.value || isFocused.value }\n dirty={ isDirty.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n onFocus()\n } }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n } }\n onFocus={ onFocus }\n onBlur={ () => (isFocused.value = false) }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { model.value.length > 0 && (\n <div class={ fieldClass }>\n { slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n color={ props.color }\n >{ text }</VChip>\n ))\n : fileNames.value.join(', ') }\n </div>\n ) }\n </>\n ),\n }}\n </VField>\n ),\n details: hasCounter ? () => (\n <>\n <span />\n\n <VCounter\n value={ counterValue.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return useForwardRef({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"file":"VFileInput.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"names":["filterFieldProps","makeVFieldProps","VChip","VCounter","VField","useForwardRef","useLocale","useProxiedModel","computed","nextTick","ref","defineComponent","filterInputAttrs","humanReadableFileSize","useRender","wrapInArray","filterInputProps","makeVInputProps","VInput","VFileInput","name","inheritAttrs","props","chips","Boolean","counter","counterSizeString","type","String","default","counterString","multiple","hint","persistentHint","placeholder","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","val","every","clearable","emits","e","files","setup","attrs","emit","slots","t","model","base","undefined","totalBytes","value","reduce","bytes","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","isFocused","inputRef","messages","onFocus","document","activeElement","focus","onControlClick","click","onClear","stopPropagation","hasCounter","rootAttrs","inputAttrs","_","inputProps","fieldProps","isDisabled","isDirty","isReadonly","isValid","class","fieldClass","slotProps","target","selection","text","color","join","details"],"mappings":"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","sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { useForwardRef } from '@/composables/forwardRef'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref } from 'vue'\nimport { defineComponent, filterInputAttrs, humanReadableFileSize, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\n\nexport const VFileInput = defineComponent({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: {\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n multiple: Boolean,\n hint: String,\n persistentHint: Boolean,\n placeholder: String,\n showSize: {\n type: [Boolean, Number] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(v)\n )\n },\n },\n\n ...makeVInputProps(),\n\n prependIcon: {\n type: String,\n default: '$file',\n },\n modelValue: {\n type: Array as PropType<File[]>,\n default: () => ([]),\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n },\n\n emits: {\n 'click:clear': (e: MouseEvent) => true,\n 'click:control': (e: MouseEvent) => true,\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(props, 'modelValue')\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n const messages = computed(() => {\n return props.messages.length\n ? props.messages\n : (props.persistentHint) ? props.hint : ''\n })\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) {\n isFocused.value = true\n }\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n if (inputRef?.value) {\n inputRef.value.value = ''\n }\n\n emit('click:clear', e)\n })\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [{ modelValue: _, ...inputProps }] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class=\"v-file-input\"\n { ...rootAttrs }\n { ...inputProps }\n onClick:prepend={ onControlClick }\n messages={ messages.value }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onClick:control={ onControlClick }\n onClick:clear={ onClear }\n { ...fieldProps }\n active={ isDirty.value || isFocused.value }\n dirty={ isDirty.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n onFocus()\n } }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n } }\n onFocus={ onFocus }\n onBlur={ () => (isFocused.value = false) }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { model.value.length > 0 && (\n <div class={ fieldClass }>\n { slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n color={ props.color }\n >{ text }</VChip>\n ))\n : fileNames.value.join(', ') }\n </div>\n ) }\n </>\n ),\n }}\n </VField>\n ),\n details: hasCounter ? () => (\n <>\n <span />\n\n <VCounter\n active={ !!model.value.length }\n value={ counterValue.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return useForwardRef({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"file":"VFileInput.mjs"}
@@ -3,24 +3,28 @@ import { createVNode as _createVNode, resolveDirective as _resolveDirective } fr
3
3
  import "./VFooter.css"; // Composables
4
4
 
5
5
  import { makeBorderProps, useBorder } from "../../composables/border.mjs";
6
- import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
7
6
  import { makeElevationProps, useElevation } from "../../composables/elevation.mjs";
8
- import { makePositionProps, usePosition } from "../../composables/position.mjs";
7
+ import { makeLayoutItemProps, useLayoutItem } from "../../composables/layout.mjs";
9
8
  import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
10
9
  import { makeTagProps } from "../../composables/tag.mjs";
11
10
  import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
12
- import { useBackgroundColor } from "../../composables/color.mjs"; // Utilities
11
+ import { useBackgroundColor } from "../../composables/color.mjs";
12
+ import { useResizeObserver } from "../../composables/resizeObserver.mjs"; // Utilities
13
13
 
14
+ import { computed, ref, toRef } from 'vue';
14
15
  import { defineComponent } from "../../util/index.mjs";
15
- import { toRef } from 'vue';
16
16
  export const VFooter = defineComponent({
17
17
  name: 'VFooter',
18
18
  props: {
19
+ app: Boolean,
19
20
  color: String,
21
+ height: {
22
+ type: [Number, String],
23
+ default: 'auto'
24
+ },
20
25
  ...makeBorderProps(),
21
- ...makeDimensionProps(),
22
26
  ...makeElevationProps(),
23
- ...makePositionProps(),
27
+ ...makeLayoutItemProps(),
24
28
  ...makeRoundedProps(),
25
29
  ...makeTagProps({
26
30
  tag: 'footer'
@@ -42,22 +46,35 @@ export const VFooter = defineComponent({
42
46
  const {
43
47
  borderClasses
44
48
  } = useBorder(props);
45
- const {
46
- dimensionStyles
47
- } = useDimension(props);
48
49
  const {
49
50
  elevationClasses
50
51
  } = useElevation(props);
51
- const {
52
- positionClasses,
53
- positionStyles
54
- } = usePosition(props);
55
52
  const {
56
53
  roundedClasses
57
54
  } = useRounded(props);
55
+ const autoHeight = ref(32);
56
+ const {
57
+ resizeRef
58
+ } = useResizeObserver(entries => {
59
+ if (!entries.length) return;
60
+ autoHeight.value = entries[0].target.clientHeight;
61
+ });
62
+ const height = computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10));
63
+ const {
64
+ layoutItemStyles
65
+ } = useLayoutItem({
66
+ id: props.name,
67
+ priority: computed(() => parseInt(props.priority, 10)),
68
+ position: computed(() => 'bottom'),
69
+ layoutSize: height,
70
+ elementSize: computed(() => props.height === 'auto' ? undefined : height.value),
71
+ active: computed(() => props.app),
72
+ absolute: toRef(props, 'absolute')
73
+ });
58
74
  return () => _createVNode(props.tag, {
59
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
60
- "style": [backgroundColorStyles, dimensionStyles.value, positionStyles.value]
75
+ "ref": resizeRef,
76
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
77
+ "style": [backgroundColorStyles, props.app ? layoutItemStyles.value : undefined]
61
78
  }, slots);
62
79
  }
63
80
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VFooter/VFooter.tsx"],"names":["makeBorderProps","useBorder","makeDimensionProps","useDimension","makeElevationProps","useElevation","makePositionProps","usePosition","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","useBackgroundColor","defineComponent","toRef","VFooter","name","props","color","String","tag","setup","slots","themeClasses","backgroundColorClasses","backgroundColorStyles","borderClasses","dimensionStyles","elevationClasses","positionClasses","positionStyles","roundedClasses","value"],"mappings":";AAAA;AACA,uB,CAEA;;SACSA,e,EAAiBC,S;SACjBC,kB,EAAoBC,Y;SACpBC,kB,EAAoBC,Y;SACpBC,iB,EAAmBC,W;SACnBC,gB,EAAkBC,U;SAClBC,Y;SACAC,c,EAAgBC,Y;SAChBC,kB,uCAET;;SACSC,e;AACT,SAASC,KAAT,QAAsB,KAAtB;AAEA,OAAO,MAAMC,OAAO,GAAGF,eAAe,CAAC;AACrCG,EAAAA,IAAI,EAAE,SAD+B;AAGrCC,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAEC,MADF;AAGL,OAAGpB,eAAe,EAHb;AAIL,OAAGE,kBAAkB,EAJhB;AAKL,OAAGE,kBAAkB,EALhB;AAML,OAAGE,iBAAiB,EANf;AAOL,OAAGE,gBAAgB,EAPd;AAQL,OAAGE,YAAY,CAAC;AAAEW,MAAAA,GAAG,EAAE;AAAP,KAAD,CARV;AASL,OAAGV,cAAc;AATZ,GAH8B;;AAerCW,EAAAA,KAAK,CAAEJ,KAAF,QAAoB;AAAA,QAAX;AAAEK,MAAAA;AAAF,KAAW;AACvB,UAAM;AAAEC,MAAAA;AAAF,QAAmBZ,YAAY,CAACM,KAAD,CAArC;AACA,UAAM;AAAEO,MAAAA,sBAAF;AAA0BC,MAAAA;AAA1B,QAAoDb,kBAAkB,CAACE,KAAK,CAACG,KAAD,EAAQ,OAAR,CAAN,CAA5E;AACA,UAAM;AAAES,MAAAA;AAAF,QAAoB1B,SAAS,CAACiB,KAAD,CAAnC;AACA,UAAM;AAAEU,MAAAA;AAAF,QAAsBzB,YAAY,CAACe,KAAD,CAAxC;AACA,UAAM;AAAEW,MAAAA;AAAF,QAAuBxB,YAAY,CAACa,KAAD,CAAzC;AACA,UAAM;AAAEY,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAAsCxB,WAAW,CAACW,KAAD,CAAvD;AACA,UAAM;AAAEc,MAAAA;AAAF,QAAqBvB,UAAU,CAACS,KAAD,CAArC;AAEA,WAAO;AAAA,eAEI,CACL,UADK,EAELM,YAAY,CAACS,KAFR,EAGLR,sBAAsB,CAACQ,KAHlB,EAILN,aAAa,CAACM,KAJT,EAKLJ,gBAAgB,CAACI,KALZ,EAMLH,eAAe,CAACG,KANX,EAOLD,cAAc,CAACC,KAPV,CAFJ;AAAA,eAWI,CACLP,qBADK,EAELE,eAAe,CAACK,KAFX,EAGLF,cAAc,CAACE,KAHV;AAXJ,OAgBOV,KAhBP,CAAP;AAmBD;;AA3CoC,CAAD,CAA/B","sourcesContent":["// Styles\nimport './VFooter.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor } from '@/composables/color'\n\n// Utilities\nimport { defineComponent } from '@/util'\nimport { toRef } from 'vue'\n\nexport const VFooter = defineComponent({\n name: 'VFooter',\n\n props: {\n color: String,\n\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'footer' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n 'v-footer',\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n"],"file":"VFooter.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VFooter/VFooter.tsx"],"names":["makeBorderProps","useBorder","makeElevationProps","useElevation","makeLayoutItemProps","useLayoutItem","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","useBackgroundColor","useResizeObserver","computed","ref","toRef","defineComponent","VFooter","name","props","app","Boolean","color","String","height","type","Number","default","tag","setup","slots","themeClasses","backgroundColorClasses","backgroundColorStyles","borderClasses","elevationClasses","roundedClasses","autoHeight","resizeRef","entries","length","value","target","clientHeight","parseInt","layoutItemStyles","id","priority","position","layoutSize","elementSize","undefined","active","absolute"],"mappings":"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","sourcesContent":["// Styles\nimport './VFooter.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, ref, toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VFooter = defineComponent({\n name: 'VFooter',\n\n props: {\n app: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 'auto',\n },\n\n ...makeBorderProps(),\n ...makeElevationProps(),\n ...makeLayoutItemProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'footer' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { borderClasses } = useBorder(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n const autoHeight = ref(32)\n const { resizeRef } = useResizeObserver(entries => {\n if (!entries.length) return\n autoHeight.value = entries[0].target.clientHeight\n })\n const height = computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10))\n const { layoutItemStyles } = useLayoutItem({\n id: props.name,\n priority: computed(() => parseInt(props.priority, 10)),\n position: computed(() => 'bottom'),\n layoutSize: height,\n elementSize: computed(() => props.height === 'auto' ? undefined : height.value),\n active: computed(() => props.app),\n absolute: toRef(props, 'absolute'),\n })\n\n return () => (\n <props.tag\n ref={ resizeRef }\n class={[\n 'v-footer',\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles,\n props.app ? layoutItemStyles.value : undefined,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n"],"file":"VFooter.mjs"}
@@ -4,6 +4,8 @@ import { createForm, makeFormProps } from "../../composables/form.mjs"; // Utili
4
4
 
5
5
  import { ref } from 'vue';
6
6
  import { defineComponent, useRender } from "../../util/index.mjs";
7
+ import { useForwardRef } from "../../composables/forwardRef.mjs"; // Types
8
+
7
9
  export const VForm = defineComponent({
8
10
  name: 'VForm',
9
11
  props: { ...makeFormProps()
@@ -26,17 +28,29 @@ export const VForm = defineComponent({
26
28
  form.reset();
27
29
  }
28
30
 
29
- function onSubmit(e) {
31
+ function onSubmit(_e) {
32
+ const e = _e;
33
+ const ready = form.validate();
34
+ e.then = ready.then.bind(ready);
35
+ e.catch = ready.catch.bind(ready);
36
+ e.finally = ready.finally.bind(ready);
37
+ emit('submit', e);
38
+
39
+ if (!e.defaultPrevented) {
40
+ ready.then(_ref2 => {
41
+ let {
42
+ valid
43
+ } = _ref2;
44
+
45
+ if (valid) {
46
+ var _formRef$value;
47
+
48
+ (_formRef$value = formRef.value) == null ? void 0 : _formRef$value.submit();
49
+ }
50
+ });
51
+ }
52
+
30
53
  e.preventDefault();
31
- form.validate().then(_ref2 => {
32
- let {
33
- valid
34
- } = _ref2;
35
-
36
- if (valid) {
37
- emit('submit', e);
38
- }
39
- });
40
54
  }
41
55
 
42
56
  useRender(() => {
@@ -50,7 +64,7 @@ export const VForm = defineComponent({
50
64
  "onSubmit": onSubmit
51
65
  }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, form)]);
52
66
  });
53
- return form;
67
+ return useForwardRef(form, formRef);
54
68
  }
55
69
 
56
70
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VForm/VForm.tsx"],"names":["createForm","makeFormProps","ref","defineComponent","useRender","VForm","name","props","emits","val","submit","e","setup","slots","emit","form","formRef","onReset","preventDefault","reset","onSubmit","validate","then","valid","default"],"mappings":";AAAA;SACSA,U,EAAYC,a,sCAErB;;AACA,SAASC,GAAT,QAAoB,KAApB;SACSC,e,EAAiBC,S;AAE1B,OAAO,MAAMC,KAAK,GAAGF,eAAe,CAAC;AACnCG,EAAAA,IAAI,EAAE,OAD6B;AAGnCC,EAAAA,KAAK,EAAE,EACL,GAAGN,aAAa;AADX,GAH4B;AAOnCO,EAAAA,KAAK,EAAE;AACL,yBAAsBC,GAAD,IAAyB,IADzC;AAELC,IAAAA,MAAM,EAAGC,CAAD,IAAc;AAFjB,GAP4B;;AAYnCC,EAAAA,KAAK,CAAEL,KAAF,QAA0B;AAAA,QAAjB;AAAEM,MAAAA,KAAF;AAASC,MAAAA;AAAT,KAAiB;AAC7B,UAAMC,IAAI,GAAGf,UAAU,CAACO,KAAD,CAAvB;AACA,UAAMS,OAAO,GAAGd,GAAG,EAAnB;;AAEA,aAASe,OAAT,CAAkBN,CAAlB,EAA4B;AAC1BA,MAAAA,CAAC,CAACO,cAAF;AACAH,MAAAA,IAAI,CAACI,KAAL;AACD;;AAED,aAASC,QAAT,CAAmBT,CAAnB,EAA6B;AAC3BA,MAAAA,CAAC,CAACO,cAAF;AACAH,MAAAA,IAAI,CAACM,QAAL,GAAgBC,IAAhB,CAAqB,SAAe;AAAA,YAAd;AAAEC,UAAAA;AAAF,SAAc;;AAClC,YAAIA,KAAJ,EAAW;AACTT,UAAAA,IAAI,CAAC,QAAD,EAAWH,CAAX,CAAJ;AACD;AACF,OAJD;AAKD;;AAEDP,IAAAA,SAAS,CAAC;AAAA;;AAAA;AAAA,eAEAY,OAFA;AAAA,iBAGA,QAHA;AAAA;AAAA,mBAKIC,OALJ;AAAA,oBAMKG;AANL,4BAQJP,KAAK,CAACW,OARF,qBAQJ,oBAAAX,KAAK,EAAWE,IAAX,CARD;AAAA,KAAD,CAAT;AAYA,WAAOA,IAAP;AACD;;AA3CkC,CAAD,CAA7B","sourcesContent":["// Composables\nimport { createForm, makeFormProps } from '@/composables/form'\n\n// Utilities\nimport { ref } from 'vue'\nimport { defineComponent, useRender } from '@/util'\n\nexport const VForm = defineComponent({\n name: 'VForm',\n\n props: {\n ...makeFormProps(),\n },\n\n emits: {\n 'update:modelValue': (val: boolean | null) => true,\n submit: (e: Event) => true,\n },\n\n setup (props, { slots, emit }) {\n const form = createForm(props)\n const formRef = ref<HTMLFormElement>()\n\n function onReset (e: Event) {\n e.preventDefault()\n form.reset()\n }\n\n function onSubmit (e: Event) {\n e.preventDefault()\n form.validate().then(({ valid }) => {\n if (valid) {\n emit('submit', e)\n }\n })\n }\n\n useRender(() => ((\n <form\n ref={ formRef }\n class=\"v-form\"\n novalidate\n onReset={ onReset }\n onSubmit={ onSubmit }\n >\n { slots.default?.(form) }\n </form>\n )))\n\n return form\n },\n})\n\nexport type VForm = InstanceType<typeof VForm>\n"],"file":"VForm.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VForm/VForm.tsx"],"names":["createForm","makeFormProps","ref","defineComponent","useRender","useForwardRef","VForm","name","props","emits","val","submit","e","setup","slots","emit","form","formRef","onReset","preventDefault","reset","onSubmit","_e","ready","validate","then","bind","catch","finally","defaultPrevented","valid","value","default"],"mappings":";AAAA;SACSA,U,EAAYC,a,sCAErB;;AACA,SAASC,GAAT,QAAoB,KAApB;SACSC,e,EAAiBC,S;SACjBC,a,4CAET;;AAGA,OAAO,MAAMC,KAAK,GAAGH,eAAe,CAAC;AACnCI,EAAAA,IAAI,EAAE,OAD6B;AAGnCC,EAAAA,KAAK,EAAE,EACL,GAAGP,aAAa;AADX,GAH4B;AAOnCQ,EAAAA,KAAK,EAAE;AACL,yBAAsBC,GAAD,IAAyB,IADzC;AAELC,IAAAA,MAAM,EAAGC,CAAD,IAA2B;AAF9B,GAP4B;;AAYnCC,EAAAA,KAAK,CAAEL,KAAF,QAA0B;AAAA,QAAjB;AAAEM,MAAAA,KAAF;AAASC,MAAAA;AAAT,KAAiB;AAC7B,UAAMC,IAAI,GAAGhB,UAAU,CAACQ,KAAD,CAAvB;AACA,UAAMS,OAAO,GAAGf,GAAG,EAAnB;;AAEA,aAASgB,OAAT,CAAkBN,CAAlB,EAA4B;AAC1BA,MAAAA,CAAC,CAACO,cAAF;AACAH,MAAAA,IAAI,CAACI,KAAL;AACD;;AAED,aAASC,QAAT,CAAmBC,EAAnB,EAA8B;AAC5B,YAAMV,CAAC,GAAGU,EAAV;AAEA,YAAMC,KAAK,GAAGP,IAAI,CAACQ,QAAL,EAAd;AACAZ,MAAAA,CAAC,CAACa,IAAF,GAASF,KAAK,CAACE,IAAN,CAAWC,IAAX,CAAgBH,KAAhB,CAAT;AACAX,MAAAA,CAAC,CAACe,KAAF,GAAUJ,KAAK,CAACI,KAAN,CAAYD,IAAZ,CAAiBH,KAAjB,CAAV;AACAX,MAAAA,CAAC,CAACgB,OAAF,GAAYL,KAAK,CAACK,OAAN,CAAcF,IAAd,CAAmBH,KAAnB,CAAZ;AAEAR,MAAAA,IAAI,CAAC,QAAD,EAAWH,CAAX,CAAJ;;AAEA,UAAI,CAACA,CAAC,CAACiB,gBAAP,EAAyB;AACvBN,QAAAA,KAAK,CAACE,IAAN,CAAW,SAAe;AAAA,cAAd;AAAEK,YAAAA;AAAF,WAAc;;AACxB,cAAIA,KAAJ,EAAW;AAAA;;AACT,8BAAAb,OAAO,CAACc,KAAR,oCAAepB,MAAf;AACD;AACF,SAJD;AAKD;;AAEDC,MAAAA,CAAC,CAACO,cAAF;AACD;;AAEDf,IAAAA,SAAS,CAAC;AAAA;;AAAA;AAAA,eAEAa,OAFA;AAAA,iBAGA,QAHA;AAAA;AAAA,mBAKIC,OALJ;AAAA,oBAMKG;AANL,4BAQJP,KAAK,CAACkB,OARF,qBAQJ,oBAAAlB,KAAK,EAAWE,IAAX,CARD;AAAA,KAAD,CAAT;AAYA,WAAOX,aAAa,CAACW,IAAD,EAAOC,OAAP,CAApB;AACD;;AAvDkC,CAAD,CAA7B","sourcesContent":["// Composables\nimport { createForm, makeFormProps } from '@/composables/form'\n\n// Utilities\nimport { ref } from 'vue'\nimport { defineComponent, useRender } from '@/util'\nimport { useForwardRef } from '@/composables/forwardRef'\n\n// Types\nimport type { SubmitEventPromise } from '@/composables/form'\n\nexport const VForm = defineComponent({\n name: 'VForm',\n\n props: {\n ...makeFormProps(),\n },\n\n emits: {\n 'update:modelValue': (val: boolean | null) => true,\n submit: (e: SubmitEventPromise) => true,\n },\n\n setup (props, { slots, emit }) {\n const form = createForm(props)\n const formRef = ref<HTMLFormElement>()\n\n function onReset (e: Event) {\n e.preventDefault()\n form.reset()\n }\n\n function onSubmit (_e: Event) {\n const e = _e as SubmitEventPromise\n\n const ready = form.validate()\n e.then = ready.then.bind(ready)\n e.catch = ready.catch.bind(ready)\n e.finally = ready.finally.bind(ready)\n\n emit('submit', e)\n\n if (!e.defaultPrevented) {\n ready.then(({ valid }) => {\n if (valid) {\n formRef.value?.submit()\n }\n })\n }\n\n e.preventDefault()\n }\n\n useRender(() => ((\n <form\n ref={ formRef }\n class=\"v-form\"\n novalidate\n onReset={ onReset }\n onSubmit={ onSubmit }\n >\n { slots.default?.(form) }\n </form>\n )))\n\n return useForwardRef(form, formRef)\n },\n})\n\nexport type VForm = InstanceType<typeof VForm>\n"],"file":"VForm.mjs"}
@@ -1,4 +1,5 @@
1
1
  .v-icon {
2
+ --v-icon-size-multiplier: 1;
2
3
  align-items: center;
3
4
  display: inline-flex;
4
5
  font-feature-settings: "liga";
@@ -12,26 +13,23 @@
12
13
  vertical-align: middle;
13
14
  width: 1em;
14
15
  }
15
- .v-icon--left {
16
- margin-inline-end: 8px;
17
- }
18
- .v-icon--right {
19
- margin-inline-start: 8px;
16
+ .v-icon--clickable {
17
+ cursor: pointer;
20
18
  }
21
19
  .v-icon--size-x-small {
22
- font-size: 1em;
20
+ font-size: calc(var(--v-icon-size-multiplier) * 1em);
23
21
  }
24
22
  .v-icon--size-small {
25
- font-size: 1.25em;
23
+ font-size: calc(var(--v-icon-size-multiplier) * 1.25em);
26
24
  }
27
25
  .v-icon--size-default {
28
- font-size: 1.5em;
26
+ font-size: calc(var(--v-icon-size-multiplier) * 1.5em);
29
27
  }
30
28
  .v-icon--size-large {
31
- font-size: 1.75em;
29
+ font-size: calc(var(--v-icon-size-multiplier) * 1.75em);
32
30
  }
33
31
  .v-icon--size-x-large {
34
- font-size: 2em;
32
+ font-size: calc(var(--v-icon-size-multiplier) * 2em);
35
33
  }
36
34
 
37
35
  .v-icon__svg {
@@ -40,11 +38,28 @@
40
38
  height: 100%;
41
39
  }
42
40
 
43
- .v-btn:not(.v-btn--icon) .v-icon--left {
41
+ .v-icon--start {
42
+ margin-inline-end: 8px;
43
+ }
44
+ .v-btn:not(.v-btn--icon) .v-icon--start {
44
45
  margin-inline-start: calc(var(--v-btn-height) / -9);
45
46
  margin-inline-end: calc(var(--v-btn-height) / 4.5);
46
47
  }
47
- .v-btn:not(.v-btn--icon) .v-icon--right {
48
+ .v-btn.v-btn--stacked .v-icon--start {
49
+ margin-inline-start: 0;
50
+ margin-inline-end: 0;
51
+ margin-bottom: 4px;
52
+ }
53
+
54
+ .v-icon--end {
55
+ margin-inline-start: 8px;
56
+ }
57
+ .v-btn:not(.v-btn--icon) .v-icon--end {
48
58
  margin-inline-start: calc(var(--v-btn-height) / 4.5);
49
59
  margin-inline-end: calc(var(--v-btn-height) / -9);
60
+ }
61
+ .v-btn.v-btn--stacked .v-icon--end {
62
+ margin-inline-start: 0;
63
+ margin-inline-end: 0;
64
+ margin-top: 4px;
50
65
  }
@@ -9,26 +9,28 @@ import { useTextColor } from "../../composables/color.mjs";
9
9
  import { makeThemeProps, provideTheme } from "../../composables/theme.mjs"; // Utilities
10
10
 
11
11
  import { computed, toRef } from 'vue';
12
- import { convertToUnit, defineComponent, flattenFragments } from "../../util/index.mjs"; // Types
12
+ import { convertToUnit, defineComponent, flattenFragments, propsFactory } from "../../util/index.mjs"; // Types
13
13
 
14
+ export const makeVIconProps = propsFactory({
15
+ color: String,
16
+ start: Boolean,
17
+ end: Boolean,
18
+ icon: {
19
+ type: [String, Object]
20
+ },
21
+ ...makeSizeProps(),
22
+ ...makeTagProps({
23
+ tag: 'i'
24
+ }),
25
+ ...makeThemeProps()
26
+ }, 'v-icon');
14
27
  export const VIcon = defineComponent({
15
28
  name: 'VIcon',
16
- props: {
17
- color: String,
18
- left: Boolean,
19
- right: Boolean,
20
- icon: {
21
- type: [String, Object]
22
- },
23
- ...makeSizeProps(),
24
- ...makeTagProps({
25
- tag: 'i'
26
- }),
27
- ...makeThemeProps()
28
- },
29
+ props: makeVIconProps(),
29
30
 
30
31
  setup(props, _ref) {
31
32
  let {
33
+ attrs,
32
34
  slots
33
35
  } = _ref;
34
36
  let slotIcon;
@@ -61,8 +63,9 @@ export const VIcon = defineComponent({
61
63
  "tag": props.tag,
62
64
  "icon": iconData.value.icon,
63
65
  "class": ['v-icon', 'notranslate', sizeClasses.value, textColorClasses.value, themeClasses.value, {
64
- 'v-icon--left': props.left,
65
- 'v-icon--right': props.right
66
+ 'v-icon--clickable': !!attrs.onClick,
67
+ 'v-icon--start': props.start,
68
+ 'v-icon--end': props.end
66
69
  }],
67
70
  "style": [!sizeClasses.value ? {
68
71
  fontSize: convertToUnit(props.size),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VIcon/VIcon.tsx"],"names":["makeSizeProps","useSize","makeTagProps","useIcon","useTextColor","makeThemeProps","provideTheme","computed","toRef","convertToUnit","defineComponent","flattenFragments","VIcon","name","props","color","String","left","Boolean","right","icon","type","Object","tag","setup","slots","slotIcon","default","slot","filter","node","children","themeClasses","iconData","sizeClasses","textColorClasses","textColorStyles","value","fontSize","size","width","height","undefined"],"mappings":";AAAA;AACA,qB,CAEA;;SACSA,a,EAAeC,O;SACfC,Y;SACAC,O;SACAC,Y;SACAC,c,EAAgBC,Y,uCAEzB;;AACA,SAASC,QAAT,EAAmBC,KAAnB,QAAgC,KAAhC;SACSC,a,EAAeC,e,EAAiBC,gB,gCAEzC;;AAIA,OAAO,MAAMC,KAAK,GAAGF,eAAe,CAAC;AACnCG,EAAAA,IAAI,EAAE,OAD6B;AAGnCC,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAEC,MADF;AAELC,IAAAA,IAAI,EAAEC,OAFD;AAGLC,IAAAA,KAAK,EAAED,OAHF;AAILE,IAAAA,IAAI,EAAE;AACJC,MAAAA,IAAI,EAAE,CAACL,MAAD,EAASM,MAAT;AADF,KAJD;AAOL,OAAGtB,aAAa,EAPX;AAQL,OAAGE,YAAY,CAAC;AAAEqB,MAAAA,GAAG,EAAE;AAAP,KAAD,CARV;AASL,OAAGlB,cAAc;AATZ,GAH4B;;AAenCmB,EAAAA,KAAK,CAAEV,KAAF,QAAoB;AAAA,QAAX;AAAEW,MAAAA;AAAF,KAAW;AACvB,QAAIC,QAAJ;;AACA,QAAID,KAAK,CAACE,OAAV,EAAmB;AACjBD,MAAAA,QAAQ,GAAGnB,QAAQ,CAAC,MAAM;AAAA;;AACxB,cAAMqB,IAAI,qBAAGH,KAAK,CAACE,OAAT,qBAAG,oBAAAF,KAAK,CAAlB;AACA,YAAI,CAACG,IAAL,EAAW;AAEX,wCAAOjB,gBAAgB,CAACiB,IAAD,CAAhB,CAAuBC,MAAvB,CAA8BC,IAAI,IACvCA,IAAI,CAACC,QAAL,IAAiB,OAAOD,IAAI,CAACC,QAAZ,KAAyB,QADrC,EAEL,CAFK,CAAP,qBAAO,sBAEDA,QAFN;AAGD,OAPkB,CAAnB;AAQD;;AAED,UAAM;AAAEC,MAAAA;AAAF,QAAmB1B,YAAY,CAACQ,KAAD,CAArC;AACA,UAAM;AAAEmB,MAAAA;AAAF,QAAe9B,OAAO,CAACuB,QAAQ,IAAIZ,KAAb,CAA5B;AACA,UAAM;AAAEoB,MAAAA;AAAF,QAAkBjC,OAAO,CAACa,KAAD,CAA/B;AACA,UAAM;AAAEqB,MAAAA,gBAAF;AAAoBC,MAAAA;AAApB,QAAwChC,YAAY,CAACI,KAAK,CAACM,KAAD,EAAQ,OAAR,CAAN,CAA1D;AAEA,WAAO,MAAM;AACX;AAAA,eAEUA,KAAK,CAACS,GAFhB;AAAA,gBAGWU,QAAQ,CAACI,KAAT,CAAejB,IAH1B;AAAA,iBAIW,CACL,QADK,EAEL,aAFK,EAGLc,WAAW,CAACG,KAHP,EAILF,gBAAgB,CAACE,KAJZ,EAKLL,YAAY,CAACK,KALR,EAML;AACE,0BAAgBvB,KAAK,CAACG,IADxB;AAEE,2BAAiBH,KAAK,CAACK;AAFzB,SANK,CAJX;AAAA,iBAeW,CACL,CAACe,WAAW,CAACG,KAAb,GAAsB;AACpBC,UAAAA,QAAQ,EAAE7B,aAAa,CAACK,KAAK,CAACyB,IAAP,CADH;AAEpBC,UAAAA,KAAK,EAAE/B,aAAa,CAACK,KAAK,CAACyB,IAAP,CAFA;AAGpBE,UAAAA,MAAM,EAAEhC,aAAa,CAACK,KAAK,CAACyB,IAAP;AAHD,SAAtB,GAIKG,SALA,EAMLN,eAAe,CAACC,KANX,CAfX;AAAA,uBAuBgB;AAvBhB;AA0BD,KA3BD;AA4BD;;AA7DkC,CAAD,CAA7B","sourcesContent":["// Styles\nimport './VIcon.sass'\n\n// Composables\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useIcon } from '@/composables/icons'\nimport { useTextColor } from '@/composables/color'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, flattenFragments } from '@/util'\n\n// Types\nimport type { IconValue } from '@/composables/icons'\nimport type { ComputedRef, PropType } from 'vue'\n\nexport const VIcon = defineComponent({\n name: 'VIcon',\n\n props: {\n color: String,\n left: Boolean,\n right: Boolean,\n icon: {\n type: [String, Object] as PropType<IconValue>,\n },\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'i' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n let slotIcon: ComputedRef<string | undefined> | undefined\n if (slots.default) {\n slotIcon = computed(() => {\n const slot = slots.default?.()\n if (!slot) return\n\n return flattenFragments(slot).filter(node =>\n node.children && typeof node.children === 'string'\n )[0]?.children as string\n })\n }\n\n const { themeClasses } = provideTheme(props)\n const { iconData } = useIcon(slotIcon || props)\n const { sizeClasses } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n return (\n <iconData.value.component\n tag={ props.tag }\n icon={ iconData.value.icon }\n class={[\n 'v-icon',\n 'notranslate',\n sizeClasses.value,\n textColorClasses.value,\n themeClasses.value,\n {\n 'v-icon--left': props.left,\n 'v-icon--right': props.right,\n },\n ]}\n style={[\n !sizeClasses.value ? ({\n fontSize: convertToUnit(props.size),\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }) : undefined,\n textColorStyles.value,\n ]}\n aria-hidden=\"true\"\n />\n )\n }\n },\n})\n"],"file":"VIcon.mjs"}
1
+ {"version":3,"sources":["../../../src/components/VIcon/VIcon.tsx"],"names":["makeSizeProps","useSize","makeTagProps","useIcon","useTextColor","makeThemeProps","provideTheme","computed","toRef","convertToUnit","defineComponent","flattenFragments","propsFactory","makeVIconProps","color","String","start","Boolean","end","icon","type","Object","tag","VIcon","name","props","setup","attrs","slots","slotIcon","default","slot","filter","node","children","themeClasses","iconData","sizeClasses","textColorClasses","textColorStyles","value","onClick","fontSize","size","width","height","undefined"],"mappings":";AAAA;AACA,qB,CAEA;;SACSA,a,EAAeC,O;SACfC,Y;SACAC,O;SACAC,Y;SACAC,c,EAAgBC,Y,uCAEzB;;AACA,SAASC,QAAT,EAAmBC,KAAnB,QAAgC,KAAhC;SACSC,a,EAAeC,e,EAAiBC,gB,EAAkBC,Y,gCAE3D;;AAIA,OAAO,MAAMC,cAAc,GAAGD,YAAY,CAAC;AACzCE,EAAAA,KAAK,EAAEC,MADkC;AAEzCC,EAAAA,KAAK,EAAEC,OAFkC;AAGzCC,EAAAA,GAAG,EAAED,OAHoC;AAIzCE,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE,CAACL,MAAD,EAASM,MAAT;AADF,GAJmC;AAQzC,KAAGrB,aAAa,EARyB;AASzC,KAAGE,YAAY,CAAC;AAAEoB,IAAAA,GAAG,EAAE;AAAP,GAAD,CAT0B;AAUzC,KAAGjB,cAAc;AAVwB,CAAD,EAWvC,QAXuC,CAAnC;AAaP,OAAO,MAAMkB,KAAK,GAAGb,eAAe,CAAC;AACnCc,EAAAA,IAAI,EAAE,OAD6B;AAGnCC,EAAAA,KAAK,EAAEZ,cAAc,EAHc;;AAKnCa,EAAAA,KAAK,CAAED,KAAF,QAA2B;AAAA,QAAlB;AAAEE,MAAAA,KAAF;AAASC,MAAAA;AAAT,KAAkB;AAC9B,QAAIC,QAAJ;;AACA,QAAID,KAAK,CAACE,OAAV,EAAmB;AACjBD,MAAAA,QAAQ,GAAGtB,QAAQ,CAAC,MAAM;AAAA;;AACxB,cAAMwB,IAAI,qBAAGH,KAAK,CAACE,OAAT,qBAAG,oBAAAF,KAAK,CAAlB;AACA,YAAI,CAACG,IAAL,EAAW;AAEX,wCAAOpB,gBAAgB,CAACoB,IAAD,CAAhB,CAAuBC,MAAvB,CAA8BC,IAAI,IACvCA,IAAI,CAACC,QAAL,IAAiB,OAAOD,IAAI,CAACC,QAAZ,KAAyB,QADrC,EAEL,CAFK,CAAP,qBAAO,sBAEDA,QAFN;AAGD,OAPkB,CAAnB;AAQD;;AAED,UAAM;AAAEC,MAAAA;AAAF,QAAmB7B,YAAY,CAACmB,KAAD,CAArC;AACA,UAAM;AAAEW,MAAAA;AAAF,QAAejC,OAAO,CAAC0B,QAAQ,IAAIJ,KAAb,CAA5B;AACA,UAAM;AAAEY,MAAAA;AAAF,QAAkBpC,OAAO,CAACwB,KAAD,CAA/B;AACA,UAAM;AAAEa,MAAAA,gBAAF;AAAoBC,MAAAA;AAApB,QAAwCnC,YAAY,CAACI,KAAK,CAACiB,KAAD,EAAQ,OAAR,CAAN,CAA1D;AAEA,WAAO,MAAM;AACX;AAAA,eAEUA,KAAK,CAACH,GAFhB;AAAA,gBAGWc,QAAQ,CAACI,KAAT,CAAerB,IAH1B;AAAA,iBAIW,CACL,QADK,EAEL,aAFK,EAGLkB,WAAW,CAACG,KAHP,EAILF,gBAAgB,CAACE,KAJZ,EAKLL,YAAY,CAACK,KALR,EAML;AACE,+BAAqB,CAAC,CAACb,KAAK,CAACc,OAD/B;AAEE,2BAAiBhB,KAAK,CAACT,KAFzB;AAGE,yBAAeS,KAAK,CAACP;AAHvB,SANK,CAJX;AAAA,iBAgBW,CACL,CAACmB,WAAW,CAACG,KAAb,GAAsB;AACpBE,UAAAA,QAAQ,EAAEjC,aAAa,CAACgB,KAAK,CAACkB,IAAP,CADH;AAEpBC,UAAAA,KAAK,EAAEnC,aAAa,CAACgB,KAAK,CAACkB,IAAP,CAFA;AAGpBE,UAAAA,MAAM,EAAEpC,aAAa,CAACgB,KAAK,CAACkB,IAAP;AAHD,SAAtB,GAIKG,SALA,EAMLP,eAAe,CAACC,KANX,CAhBX;AAAA,uBAwBgB;AAxBhB;AA2BD,KA5BD;AA6BD;;AApDkC,CAAD,CAA7B","sourcesContent":["// Styles\nimport './VIcon.sass'\n\n// Composables\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useIcon } from '@/composables/icons'\nimport { useTextColor } from '@/composables/color'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, flattenFragments, propsFactory } from '@/util'\n\n// Types\nimport type { IconValue } from '@/composables/icons'\nimport type { ComputedRef, PropType } from 'vue'\n\nexport const makeVIconProps = propsFactory({\n color: String,\n start: Boolean,\n end: Boolean,\n icon: {\n type: [String, Object] as PropType<IconValue>,\n },\n\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'i' }),\n ...makeThemeProps(),\n}, 'v-icon')\n\nexport const VIcon = defineComponent({\n name: 'VIcon',\n\n props: makeVIconProps(),\n\n setup (props, { attrs, slots }) {\n let slotIcon: ComputedRef<string | undefined> | undefined\n if (slots.default) {\n slotIcon = computed(() => {\n const slot = slots.default?.()\n if (!slot) return\n\n return flattenFragments(slot).filter(node =>\n node.children && typeof node.children === 'string'\n )[0]?.children as string\n })\n }\n\n const { themeClasses } = provideTheme(props)\n const { iconData } = useIcon(slotIcon || props)\n const { sizeClasses } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n return (\n <iconData.value.component\n tag={ props.tag }\n icon={ iconData.value.icon }\n class={[\n 'v-icon',\n 'notranslate',\n sizeClasses.value,\n textColorClasses.value,\n themeClasses.value,\n {\n 'v-icon--clickable': !!attrs.onClick,\n 'v-icon--start': props.start,\n 'v-icon--end': props.end,\n },\n ]}\n style={[\n !sizeClasses.value ? ({\n fontSize: convertToUnit(props.size),\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }) : undefined,\n textColorStyles.value,\n ]}\n aria-hidden=\"true\"\n />\n )\n }\n },\n})\n"],"file":"VIcon.mjs"}
@@ -4,6 +4,7 @@
4
4
  @use './variables' as *
5
5
 
6
6
  .v-icon
7
+ --v-icon-size-multiplier: 1
7
8
  align-items: center
8
9
  display: inline-flex
9
10
  font-feature-settings: 'liga'
@@ -17,28 +18,38 @@
17
18
  vertical-align: $icon-vertical-align
18
19
  width: $icon-size
19
20
 
20
- &--left
21
- margin-inline-end: $icon-margin-start
22
-
23
- &--right
24
- margin-inline-start: $icon-margin-end
21
+ &--clickable
22
+ cursor: pointer
25
23
 
26
24
  @each $name in settings.$sizes
27
25
  &--size-#{$name}
28
- font-size: map.get($icon-sizes, $name)
26
+ font-size: calc(var(--v-icon-size-multiplier) * #{map.get($icon-sizes, $name)})
29
27
 
30
28
  .v-icon__svg
31
29
  fill: currentColor
32
30
  width: 100%
33
31
  height: 100%
34
32
 
35
- .v-icon
36
- &--left
37
- .v-btn:not(.v-btn--icon) &
38
- margin-inline-start: $icon-btn-margin-start
39
- margin-inline-end: $icon-btn-margin-end
40
-
41
- &--right
42
- .v-btn:not(.v-btn--icon) &
43
- margin-inline-start: $icon-btn-margin-end
44
- margin-inline-end: $icon-btn-margin-start
33
+ .v-icon--start
34
+ margin-inline-end: $icon-margin-start
35
+
36
+ .v-btn:not(.v-btn--icon) &
37
+ margin-inline-start: $icon-btn-margin-start
38
+ margin-inline-end: $icon-btn-margin-end
39
+
40
+ .v-btn.v-btn--stacked &
41
+ margin-inline-start: 0
42
+ margin-inline-end: 0
43
+ margin-bottom: $icon-btn-stacked-margin
44
+
45
+ .v-icon--end
46
+ margin-inline-start: $icon-margin-end
47
+
48
+ .v-btn:not(.v-btn--icon) &
49
+ margin-inline-start: $icon-btn-margin-end
50
+ margin-inline-end: $icon-btn-margin-start
51
+
52
+ .v-btn.v-btn--stacked &
53
+ margin-inline-start: 0
54
+ margin-inline-end: 0
55
+ margin-top: $icon-btn-stacked-margin