@vuetify/nightly 3.0.0-beta.6 → 3.0.0-beta.9

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 (174) hide show
  1. package/CHANGELOG.md +14 -39
  2. package/dist/json/attributes.json +98 -14
  3. package/dist/json/importMap.json +64 -64
  4. package/dist/json/tags.json +23 -2
  5. package/dist/json/web-types.json +253 -40
  6. package/dist/vuetify.css +1469 -1640
  7. package/dist/vuetify.d.ts +1701 -7588
  8. package/dist/vuetify.esm.js +694 -443
  9. package/dist/vuetify.esm.js.map +1 -1
  10. package/dist/vuetify.js +693 -441
  11. package/dist/vuetify.js.map +1 -1
  12. package/dist/vuetify.min.css +3 -3
  13. package/dist/vuetify.min.js +766 -742
  14. package/dist/vuetify.min.js.map +1 -1
  15. package/lib/components/VAlert/VAlert.css +0 -3
  16. package/lib/components/VAlert/VAlert.mjs +20 -10
  17. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  18. package/lib/components/VAlert/VAlert.sass +0 -3
  19. package/lib/components/VAutocomplete/VAutocomplete.css +10 -0
  20. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -3
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.sass +10 -0
  23. package/lib/components/VAutocomplete/_variables.scss +1 -0
  24. package/lib/components/VAvatar/VAvatar.css +2 -0
  25. package/lib/components/VAvatar/VAvatar.sass +3 -0
  26. package/lib/components/VBtn/VBtn.css +29 -5
  27. package/lib/components/VBtn/VBtn.sass +40 -10
  28. package/lib/components/VBtn/_variables.scss +4 -0
  29. package/lib/components/VBtnGroup/VBtnGroup.css +1 -0
  30. package/lib/components/VCard/VCard.mjs +12 -7
  31. package/lib/components/VCard/VCard.mjs.map +1 -1
  32. package/lib/components/VCombobox/VCombobox.css +10 -0
  33. package/lib/components/VCombobox/VCombobox.mjs +2 -2
  34. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  35. package/lib/components/VCombobox/VCombobox.sass +10 -0
  36. package/lib/components/VCombobox/_variables.scss +1 -0
  37. package/lib/components/VDialog/VDialog.mjs +3 -3
  38. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  39. package/lib/components/VField/VField.css +44 -25
  40. package/lib/components/VField/VField.mjs +1 -1
  41. package/lib/components/VField/VField.mjs.map +1 -1
  42. package/lib/components/VField/VField.sass +33 -19
  43. package/lib/components/VField/_variables.scss +3 -2
  44. package/lib/components/VFileInput/VFileInput.mjs +2 -2
  45. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  46. package/lib/components/VForm/VForm.mjs +2 -2
  47. package/lib/components/VForm/VForm.mjs.map +1 -1
  48. package/lib/components/VGrid/VCol.mjs +2 -1
  49. package/lib/components/VGrid/VCol.mjs.map +1 -1
  50. package/lib/components/VGrid/VRow.mjs +8 -3
  51. package/lib/components/VGrid/VRow.mjs.map +1 -1
  52. package/lib/components/VIcon/VIcon.css +0 -10
  53. package/lib/components/VIcon/VIcon.sass +0 -10
  54. package/lib/components/VIcon/_variables.scss +0 -1
  55. package/lib/components/VImg/VImg.mjs +1 -0
  56. package/lib/components/VImg/VImg.mjs.map +1 -1
  57. package/lib/components/VInput/VInput.css +2 -1
  58. package/lib/components/VInput/VInput.sass +2 -1
  59. package/lib/components/VInput/_variables.scss +0 -1
  60. package/lib/components/VLayout/VLayout.css +0 -2
  61. package/lib/components/VLayout/VLayout.sass +0 -2
  62. package/lib/components/VList/VList.css +4 -1
  63. package/lib/components/VList/VList.sass +5 -1
  64. package/lib/components/VList/VListChildren.mjs +19 -2
  65. package/lib/components/VList/VListChildren.mjs.map +1 -1
  66. package/lib/components/VList/VListItem.mjs +18 -11
  67. package/lib/components/VList/VListItem.mjs.map +1 -1
  68. package/lib/components/VList/_variables.scss +1 -0
  69. package/lib/components/VMain/VMain.css +21 -3
  70. package/lib/components/VMain/VMain.mjs +13 -8
  71. package/lib/components/VMain/VMain.mjs.map +1 -1
  72. package/lib/components/VMain/VMain.sass +18 -3
  73. package/lib/components/VMenu/VMenu.mjs +2 -2
  74. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  75. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +12 -17
  76. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +52 -19
  77. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  78. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +15 -20
  79. package/lib/components/VNavigationDrawer/_variables.scss +1 -1
  80. package/lib/components/VNavigationDrawer/sticky.mjs +72 -0
  81. package/lib/components/VNavigationDrawer/sticky.mjs.map +1 -0
  82. package/lib/components/VOverlay/VOverlay.mjs +8 -6
  83. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  84. package/lib/components/VOverlay/_variables.scss +1 -1
  85. package/lib/components/VOverlay/useActivator.mjs +1 -1
  86. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  87. package/lib/components/VPagination/VPagination.mjs +1 -1
  88. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  89. package/lib/components/VRadio/VRadio.mjs +8 -17
  90. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  91. package/lib/components/VRadioGroup/VRadioGroup.mjs +20 -3
  92. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  93. package/lib/components/VSelect/VSelect.css +10 -0
  94. package/lib/components/VSelect/VSelect.mjs +3 -4
  95. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  96. package/lib/components/VSelect/VSelect.sass +10 -0
  97. package/lib/components/VSelect/_variables.scss +1 -0
  98. package/lib/components/VSelectionControl/VSelectionControl.mjs +9 -4
  99. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  100. package/lib/components/VSnackbar/VSnackbar.css +1 -1
  101. package/lib/components/VSnackbar/VSnackbar.mjs +4 -4
  102. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  103. package/lib/components/VSnackbar/_variables.scss +1 -3
  104. package/lib/components/VTable/VTable.mjs.map +1 -1
  105. package/lib/components/VTabs/VTab.css +0 -1
  106. package/lib/components/VTabs/VTab.sass +0 -1
  107. package/lib/components/VTextField/VTextField.css +2 -1
  108. package/lib/components/VTextField/VTextField.mjs +19 -21
  109. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  110. package/lib/components/VTextField/VTextField.sass +2 -1
  111. package/lib/components/VTextarea/VTextarea.css +6 -2
  112. package/lib/components/VTextarea/VTextarea.mjs +18 -11
  113. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  114. package/lib/components/VTextarea/VTextarea.sass +9 -2
  115. package/lib/components/VTextarea/_variables.scss +0 -1
  116. package/lib/components/VTimeline/VTimeline.css +123 -112
  117. package/lib/components/VTimeline/VTimeline.mjs +4 -4
  118. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  119. package/lib/components/VTimeline/VTimeline.sass +129 -111
  120. package/lib/components/VTimeline/VTimelineDivider.mjs +5 -2
  121. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  122. package/lib/components/VTimeline/VTimelineItem.mjs +3 -1
  123. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  124. package/lib/components/VToolbar/VToolbar.css +9 -33
  125. package/lib/components/VToolbar/VToolbar.mjs +3 -4
  126. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  127. package/lib/components/VToolbar/VToolbar.sass +5 -15
  128. package/lib/components/VToolbar/_variables.scss +3 -7
  129. package/lib/components/VTooltip/VTooltip.mjs +2 -2
  130. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  131. package/lib/components/index.d.ts +1696 -7583
  132. package/lib/composables/color.mjs +19 -26
  133. package/lib/composables/color.mjs.map +1 -1
  134. package/lib/composables/defaults.mjs +1 -1
  135. package/lib/composables/defaults.mjs.map +1 -1
  136. package/lib/composables/form.mjs +29 -9
  137. package/lib/composables/form.mjs.map +1 -1
  138. package/lib/composables/{forwardRef.mjs → forwardRefs.mjs} +29 -3
  139. package/lib/composables/forwardRefs.mjs.map +1 -0
  140. package/lib/composables/index.mjs +3 -2
  141. package/lib/composables/index.mjs.map +1 -1
  142. package/lib/composables/layout.mjs +12 -12
  143. package/lib/composables/layout.mjs.map +1 -1
  144. package/lib/composables/rtl.mjs +2 -2
  145. package/lib/composables/rtl.mjs.map +1 -1
  146. package/lib/composables/size.mjs +18 -14
  147. package/lib/composables/size.mjs.map +1 -1
  148. package/lib/composables/stack.mjs +22 -12
  149. package/lib/composables/stack.mjs.map +1 -1
  150. package/lib/composables/theme.mjs +9 -6
  151. package/lib/composables/theme.mjs.map +1 -1
  152. package/lib/composables/validation.mjs +13 -3
  153. package/lib/composables/validation.mjs.map +1 -1
  154. package/lib/entry-bundler.mjs +1 -1
  155. package/lib/index.d.ts +21 -21
  156. package/lib/styles/generic/_colors.scss +17 -9
  157. package/lib/styles/main.css +1135 -1371
  158. package/lib/styles/settings/_utilities.scss +16 -5
  159. package/lib/styles/utilities/_index.sass +0 -1
  160. package/lib/util/anchor.mjs +1 -3
  161. package/lib/util/anchor.mjs.map +1 -1
  162. package/lib/util/colorUtils.mjs +2 -2
  163. package/lib/util/colorUtils.mjs.map +1 -1
  164. package/lib/util/colors.mjs +1 -1
  165. package/lib/util/colors.mjs.map +1 -1
  166. package/lib/util/defineComponent.mjs +6 -3
  167. package/lib/util/defineComponent.mjs.map +1 -1
  168. package/lib/util/helpers.mjs +4 -1
  169. package/lib/util/helpers.mjs.map +1 -1
  170. package/lib/util/injectSelf.mjs +12 -0
  171. package/lib/util/injectSelf.mjs.map +1 -0
  172. package/package.json +3 -1
  173. package/lib/composables/forwardRef.mjs.map +0 -1
  174. package/lib/styles/utilities/_text.sass +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"VField.mjs","names":["VExpandXTransition","VFieldLabel","VIcon","IconValue","LoaderSlot","makeLoaderProps","useLoader","makeFocusProps","useFocus","makeThemeProps","provideTheme","useBackgroundColor","useTextColor","computed","ref","toRef","watch","convertToUnit","genericComponent","getUid","nullifyTransforms","pick","propsFactory","standardEasing","useRender","allowedVariants","makeVFieldProps","appendInnerIcon","bgColor","String","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","hasClear","clear","hasAppend","for","loading","loader","class","filterFieldProps","Object","keys"],"sources":["../../../src/components/VField/VField.tsx"],"sourcesContent":["// Styles\nimport './VField.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VFieldLabel } from './VFieldLabel'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\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 { LoaderSlotProps } from '@/composables/loader'\nimport type { MakeSlots } from '@/util'\nimport type { PropType, Ref } from 'vue'\nimport type { VInputSlot } from '@/components/VInput/VInput'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'solo', '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: IconValue,\n bgColor: String,\n clearable: Boolean,\n clearIcon: {\n type: IconValue,\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: IconValue,\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 'prepend-inner': [DefaultInputSlot & VInputSlot]\n 'append-inner': [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['prepend-inner'] || props.prependInnerIcon)\n const hasClear = !!(props.clearable || slots.clear)\n const hasAppend = !!(slots['append-inner'] || 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 key=\"prepend\" class=\"v-field__prepend-inner\">\n { props.prependInnerIcon && (\n <VIcon\n key=\"prepend-icon\"\n onClick={ attrs['onClick:prependInner'] }\n icon={ props.prependInnerIcon }\n />\n ) }\n\n { slots['prepend-inner']?.(slotProps.value) }\n </div>\n ) }\n\n <div class=\"v-field__field\" data-no-activator=\"\">\n { ['solo', 'filled'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel\n key=\"floating-label\"\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 key=\"clear\">\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 key=\"append\" class=\"v-field__append-inner\">\n { slots['append-inner']?.(slotProps.value) }\n\n { props.appendInnerIcon && (\n <VIcon\n key=\"append-icon\"\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"],"mappings":"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"}
1
+ {"version":3,"file":"VField.mjs","names":["VExpandXTransition","VFieldLabel","VIcon","IconValue","LoaderSlot","makeLoaderProps","useLoader","makeFocusProps","useFocus","makeThemeProps","provideTheme","useBackgroundColor","useTextColor","computed","ref","toRef","watch","convertToUnit","genericComponent","getUid","nullifyTransforms","pick","propsFactory","standardEasing","useRender","allowedVariants","makeVFieldProps","appendInnerIcon","bgColor","String","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","hasClear","clear","hasAppend","for","loading","loader","class","filterFieldProps","Object","keys"],"sources":["../../../src/components/VField/VField.tsx"],"sourcesContent":["// Styles\nimport './VField.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VFieldLabel } from './VFieldLabel'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\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 { LoaderSlotProps } from '@/composables/loader'\nimport type { MakeSlots } from '@/util'\nimport type { PropType, Ref } from 'vue'\nimport type { VInputSlot } from '@/components/VInput/VInput'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'solo', '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: IconValue,\n bgColor: String,\n clearable: Boolean,\n clearIcon: {\n type: IconValue,\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: IconValue,\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 'prepend-inner': [DefaultInputSlot & VInputSlot]\n 'append-inner': [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 || 150\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['prepend-inner'] || props.prependInnerIcon)\n const hasClear = !!(props.clearable || slots.clear)\n const hasAppend = !!(slots['append-inner'] || 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 key=\"prepend\" class=\"v-field__prepend-inner\">\n { props.prependInnerIcon && (\n <VIcon\n key=\"prepend-icon\"\n onClick={ attrs['onClick:prependInner'] }\n icon={ props.prependInnerIcon }\n />\n ) }\n\n { slots['prepend-inner']?.(slotProps.value) }\n </div>\n ) }\n\n <div class=\"v-field__field\" data-no-activator=\"\">\n { ['solo', 'filled'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel\n key=\"floating-label\"\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 key=\"clear\">\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 key=\"append\" class=\"v-field__append-inner\">\n { slots['append-inner']?.(slotProps.value) }\n\n { props.appendInnerIcon && (\n <VIcon\n key=\"append-icon\"\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"],"mappings":"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"}
@@ -31,12 +31,8 @@
31
31
  /* endregion */
32
32
  /* region MODIFIERS */
33
33
  .v-field
34
- $root: &
35
-
36
34
  &--prepended
37
35
  padding-inline-start: $field-control-affixed-padding
38
- --v-field-padding-start: #{$field-control-affixed-inner-padding}
39
- --v-field-padding-end: #{$field-control-affixed-inner-padding}
40
36
 
41
37
  &--appended
42
38
  padding-inline-end: $field-control-affixed-padding
@@ -56,16 +52,20 @@
56
52
  &--variant-underlined
57
53
  border-radius: 0
58
54
  padding: 0
59
- --v-field-padding-start: 0
60
- --v-field-padding-end: 0
61
- --v-field-padding-top: 0
62
-
63
- &.v-field--single-line
64
- --v-field-padding-top: 0
55
+ --v-field-padding-start: 0px
56
+ --v-field-padding-end: 0px
57
+ --v-field-padding-top: 6px
58
+ --v-field-padding-bottom: 2px
65
59
 
66
60
  &--variant-outlined,
67
61
  &--single-line
68
- --v-field-padding-top: 0
62
+ --v-field-padding-top: 0px
63
+ $root: &
64
+
65
+ @at-root
66
+ @include tools.density('v-input', $input-density) using ($modifier)
67
+ @at-root #{selector.nest(&, $root)}
68
+ --v-field-padding-bottom: #{16px + $modifier * .5}
69
69
 
70
70
  &--variant-solo,
71
71
  &--variant-filled
@@ -77,6 +77,7 @@
77
77
  --v-input-control-height: #{$field-control-height + $modifier}
78
78
  --v-field-padding-bottom: #{$field-control-padding-bottom + $modifier * .5}
79
79
 
80
+ &--variant-plain,
80
81
  &--variant-underlined
81
82
  $root: &
82
83
 
@@ -84,7 +85,13 @@
84
85
  @include tools.density('v-input', $input-density) using ($modifier)
85
86
  @at-root #{selector.nest(&, $root)}
86
87
  --v-input-control-height: #{$field-control-underlined-height + $modifier}
87
- --v-field-padding-bottom: #{$field-control-padding-bottom + $modifier * .25}
88
+
89
+ // These are separate so they can override the default variant styles
90
+ &--prepended
91
+ --v-field-padding-start: #{$field-control-affixed-inner-padding}
92
+
93
+ &--appended
94
+ --v-field-padding-end: #{$field-control-affixed-inner-padding}
88
95
 
89
96
  /* endregion */
90
97
  /* region ELEMENTS */
@@ -94,15 +101,22 @@
94
101
  flex-wrap: wrap
95
102
  letter-spacing: $field-letter-spacing
96
103
  opacity: $field-input-opacity
104
+ min-height: var(--v-input-control-height, $input-control-height)
97
105
  padding-inline-start: var(--v-field-padding-start)
98
106
  padding-inline-end: var(--v-field-padding-end)
99
- padding-top: var(--v-field-padding-top, $field-control-padding-top)
100
- flex: 1 0 0
101
- min-width: 0
107
+ padding-top: calc(var(--v-field-padding-top, $field-control-padding-top) + var(--v-input-padding-top, 0))
108
+ padding-bottom: var(--v-field-padding-bottom, $field-control-padding-bottom)
109
+ width: 100%
102
110
 
103
111
  input
104
112
  letter-spacing: inherit
105
113
 
114
+ @at-root
115
+ & input::placeholder,
116
+ textarea#{&}::placeholder
117
+ color: currentColor
118
+ opacity: var(--v-disabled-opacity)
119
+
106
120
  &:focus,
107
121
  &:active
108
122
  outline: none
@@ -113,10 +127,10 @@
113
127
 
114
128
  .v-field__field
115
129
  flex: 1 0
116
- min-height: var(--v-input-control-height, $input-control-height)
117
130
  grid-area: field
118
- padding-bottom: var(--v-field-padding-bottom, $field-control-padding-bottom)
119
131
  position: relative
132
+ align-items: flex-start
133
+ display: flex
120
134
 
121
135
  /* endregion */
122
136
  /* region AFFIXES */
@@ -131,7 +145,6 @@
131
145
  grid-area: append-inner
132
146
  padding-inline-start: var(--v-field-padding-after)
133
147
 
134
- .v-field__field,
135
148
  .v-field__prepend-inner,
136
149
  .v-field__append-inner,
137
150
  .v-field__clearable
@@ -184,6 +197,7 @@
184
197
  max-width: calc(100% - var(--v-field-padding-start) - var(--v-field-padding-end))
185
198
  pointer-events: none
186
199
  position: absolute
200
+ top: var(--v-input-padding-top, $field-control-padding-top)
187
201
  transform-origin: left center
188
202
  transition: $field-transition-timing
189
203
  transition-property: opacity, transform
@@ -219,7 +233,7 @@
219
233
 
220
234
  .v-field--variant-plain &,
221
235
  .v-field--variant-underlined &
222
- transform: translateY(-6px)
236
+ transform: translateY(-16px)
223
237
  margin: 0
224
238
 
225
239
  .v-field--variant-outlined &
@@ -21,11 +21,12 @@ $field-control-solo-elevation: 2 !default;
21
21
  $field-control-filled-background: rgba(var(--v-theme-on-surface), var(--v-idle-opacity)) !default;
22
22
  $field-control-padding-start: 16px !default;
23
23
  $field-control-padding-end: 16px !default;
24
- $field-control-padding-top: 8px !default;
24
+ $field-control-padding-top: 10px !default;
25
25
  $field-control-padding-bottom: 6px !default;
26
26
  $field-control-affixed-padding: 12px !default;
27
27
  $field-control-affixed-inner-padding: 6px !default;
28
- $field-control-underlined-height: 40px !default;
28
+ $field-control-underlined-height: 48px !default;
29
+ $field-control-underlined-padding-bottom: 2px !default;
29
30
  $field-control-height: 56px !default;
30
31
 
31
32
  // INPUT
@@ -9,7 +9,7 @@ import { VCounter } from "../VCounter/index.mjs";
9
9
  import { VField } from "../VField/index.mjs"; // Composables
10
10
 
11
11
  import { IconValue } from "../../composables/icons.mjs";
12
- import { useForwardRef } from "../../composables/forwardRef.mjs";
12
+ import { forwardRefs } from "../../composables/forwardRefs.mjs";
13
13
  import { useLocale } from "../../composables/locale.mjs";
14
14
  import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
15
15
 
@@ -232,7 +232,7 @@ export const VFileInput = defineComponent({
232
232
  } : undefined
233
233
  });
234
234
  });
235
- return useForwardRef({}, vInputRef, vFieldRef, inputRef);
235
+ return forwardRefs({}, vInputRef, vFieldRef, inputRef);
236
236
  }
237
237
 
238
238
  });
@@ -1 +1 @@
1
- {"version":3,"file":"VFileInput.mjs","names":["filterFieldProps","makeVFieldProps","filterInputProps","makeVInputProps","VInput","VChip","VCounter","VField","IconValue","useForwardRef","useLocale","useProxiedModel","computed","nextTick","ref","defineComponent","filterInputAttrs","humanReadableFileSize","useRender","wrapInArray","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","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","fieldProps","isDisabled","isDirty","isReadonly","isValid","class","fieldClass","slotProps","target","selection","text","color","join"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\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'\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: IconValue,\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 hasDetails = !!(hasCounter || slots.details)\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: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ !!model.value.length }\n value={ counterValue.value }\n v-slots={ slots.counter }\n />\n </>\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"],"mappings":"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"}
1
+ {"version":3,"file":"VFileInput.mjs","names":["filterFieldProps","makeVFieldProps","filterInputProps","makeVInputProps","VInput","VChip","VCounter","VField","IconValue","forwardRefs","useLocale","useProxiedModel","computed","nextTick","ref","defineComponent","filterInputAttrs","humanReadableFileSize","useRender","wrapInArray","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","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","fieldProps","isDisabled","isDirty","isReadonly","isValid","class","fieldClass","slotProps","target","selection","text","color","join"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { forwardRefs } from '@/composables/forwardRefs'\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'\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: IconValue,\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 hasDetails = !!(hasCounter || slots.details)\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: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ !!model.value.length }\n value={ counterValue.value }\n v-slots={ slots.counter }\n />\n </>\n ) }\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { createVNode as _createVNode } from "vue";
2
2
  // Composables
3
3
  import { createForm, makeFormProps } from "../../composables/form.mjs";
4
- import { useForwardRef } from "../../composables/forwardRef.mjs"; // Utilities
4
+ import { forwardRefs } from "../../composables/forwardRefs.mjs"; // Utilities
5
5
 
6
6
  import { ref } from 'vue';
7
7
  import { defineComponent, useRender } from "../../util/index.mjs"; // Types
@@ -64,7 +64,7 @@ export const VForm = defineComponent({
64
64
  "onSubmit": onSubmit
65
65
  }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, form)]);
66
66
  });
67
- return useForwardRef(form, formRef);
67
+ return forwardRefs(form, formRef);
68
68
  }
69
69
 
70
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"VForm.mjs","names":["createForm","makeFormProps","useForwardRef","ref","defineComponent","useRender","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"],"sources":["../../../src/components/VForm/VForm.tsx"],"sourcesContent":["// Composables\nimport { createForm, makeFormProps } from '@/composables/form'\nimport { useForwardRef } from '@/composables/forwardRef'\n\n// Utilities\nimport { ref } from 'vue'\nimport { defineComponent, useRender } from '@/util'\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"],"mappings":";AAAA;SACSA,U,EAAYC,a;SACZC,a,4CAET;;AACA,SAASC,GAAT,QAAoB,KAApB;SACSC,e,EAAiBC,S,gCAE1B;;AAGA,OAAO,MAAMC,KAAK,GAAGF,eAAe,CAAC;EACnCG,IAAI,EAAE,OAD6B;EAGnCC,KAAK,EAAE,EACL,GAAGP,aAAa;EADX,CAH4B;EAOnCQ,KAAK,EAAE;IACL,qBAAsBC,GAAD,IAAyB,IADzC;IAELC,MAAM,EAAGC,CAAD,IAA2B;EAF9B,CAP4B;;EAYnCC,KAAK,CAAEL,KAAF,QAA0B;IAAA,IAAjB;MAAEM,KAAF;MAASC;IAAT,CAAiB;IAC7B,MAAMC,IAAI,GAAGhB,UAAU,CAACQ,KAAD,CAAvB;IACA,MAAMS,OAAO,GAAGd,GAAG,EAAnB;;IAEA,SAASe,OAAT,CAAkBN,CAAlB,EAA4B;MAC1BA,CAAC,CAACO,cAAF;MACAH,IAAI,CAACI,KAAL;IACD;;IAED,SAASC,QAAT,CAAmBC,EAAnB,EAA8B;MAC5B,MAAMV,CAAC,GAAGU,EAAV;MAEA,MAAMC,KAAK,GAAGP,IAAI,CAACQ,QAAL,EAAd;MACAZ,CAAC,CAACa,IAAF,GAASF,KAAK,CAACE,IAAN,CAAWC,IAAX,CAAgBH,KAAhB,CAAT;MACAX,CAAC,CAACe,KAAF,GAAUJ,KAAK,CAACI,KAAN,CAAYD,IAAZ,CAAiBH,KAAjB,CAAV;MACAX,CAAC,CAACgB,OAAF,GAAYL,KAAK,CAACK,OAAN,CAAcF,IAAd,CAAmBH,KAAnB,CAAZ;MAEAR,IAAI,CAAC,QAAD,EAAWH,CAAX,CAAJ;;MAEA,IAAI,CAACA,CAAC,CAACiB,gBAAP,EAAyB;QACvBN,KAAK,CAACE,IAAN,CAAW,SAAe;UAAA,IAAd;YAAEK;UAAF,CAAc;;UACxB,IAAIA,KAAJ,EAAW;YAAA;;YACT,kBAAAb,OAAO,CAACc,KAAR,oCAAepB,MAAf;UACD;QACF,CAJD;MAKD;;MAEDC,CAAC,CAACO,cAAF;IACD;;IAEDd,SAAS,CAAC;MAAA;;MAAA;QAAA,OAEAY,OAFA;QAAA,SAGA,QAHA;QAAA;QAAA,WAKIC,OALJ;QAAA,YAMKG;MANL,sBAQJP,KAAK,CAACkB,OARF,qBAQJ,oBAAAlB,KAAK,EAAWE,IAAX,CARD;IAAA,CAAD,CAAT;IAYA,OAAOd,aAAa,CAACc,IAAD,EAAOC,OAAP,CAApB;EACD;;AAvDkC,CAAD,CAA7B"}
1
+ {"version":3,"file":"VForm.mjs","names":["createForm","makeFormProps","forwardRefs","ref","defineComponent","useRender","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"],"sources":["../../../src/components/VForm/VForm.tsx"],"sourcesContent":["// Composables\nimport { createForm, makeFormProps } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\n\n// Utilities\nimport { ref } from 'vue'\nimport { defineComponent, useRender } from '@/util'\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 forwardRefs(form, formRef)\n },\n})\n\nexport type VForm = InstanceType<typeof VForm>\n"],"mappings":";AAAA;SACSA,U,EAAYC,a;SACZC,W,6CAET;;AACA,SAASC,GAAT,QAAoB,KAApB;SACSC,e,EAAiBC,S,gCAE1B;;AAGA,OAAO,MAAMC,KAAK,GAAGF,eAAe,CAAC;EACnCG,IAAI,EAAE,OAD6B;EAGnCC,KAAK,EAAE,EACL,GAAGP,aAAa;EADX,CAH4B;EAOnCQ,KAAK,EAAE;IACL,qBAAsBC,GAAD,IAAyB,IADzC;IAELC,MAAM,EAAGC,CAAD,IAA2B;EAF9B,CAP4B;;EAYnCC,KAAK,CAAEL,KAAF,QAA0B;IAAA,IAAjB;MAAEM,KAAF;MAASC;IAAT,CAAiB;IAC7B,MAAMC,IAAI,GAAGhB,UAAU,CAACQ,KAAD,CAAvB;IACA,MAAMS,OAAO,GAAGd,GAAG,EAAnB;;IAEA,SAASe,OAAT,CAAkBN,CAAlB,EAA4B;MAC1BA,CAAC,CAACO,cAAF;MACAH,IAAI,CAACI,KAAL;IACD;;IAED,SAASC,QAAT,CAAmBC,EAAnB,EAA8B;MAC5B,MAAMV,CAAC,GAAGU,EAAV;MAEA,MAAMC,KAAK,GAAGP,IAAI,CAACQ,QAAL,EAAd;MACAZ,CAAC,CAACa,IAAF,GAASF,KAAK,CAACE,IAAN,CAAWC,IAAX,CAAgBH,KAAhB,CAAT;MACAX,CAAC,CAACe,KAAF,GAAUJ,KAAK,CAACI,KAAN,CAAYD,IAAZ,CAAiBH,KAAjB,CAAV;MACAX,CAAC,CAACgB,OAAF,GAAYL,KAAK,CAACK,OAAN,CAAcF,IAAd,CAAmBH,KAAnB,CAAZ;MAEAR,IAAI,CAAC,QAAD,EAAWH,CAAX,CAAJ;;MAEA,IAAI,CAACA,CAAC,CAACiB,gBAAP,EAAyB;QACvBN,KAAK,CAACE,IAAN,CAAW,SAAe;UAAA,IAAd;YAAEK;UAAF,CAAc;;UACxB,IAAIA,KAAJ,EAAW;YAAA;;YACT,kBAAAb,OAAO,CAACc,KAAR,oCAAepB,MAAf;UACD;QACF,CAJD;MAKD;;MAEDC,CAAC,CAACO,cAAF;IACD;;IAEDd,SAAS,CAAC;MAAA;;MAAA;QAAA,OAEAY,OAFA;QAAA,SAGA,QAHA;QAAA;QAAA,WAKIC,OALJ;QAAA,YAMKG;MANL,sBAQJP,KAAK,CAACkB,OARF,qBAQJ,oBAAAlB,KAAK,EAAWE,IAAX,CARD;IAAA,CAAD,CAAT;IAYA,OAAOd,WAAW,CAACc,IAAD,EAAOC,OAAP,CAAlB;EACD;;AAvDkC,CAAD,CAA7B"}
@@ -73,6 +73,7 @@ function breakpointClass(type, prop, val) {
73
73
  return className.toLowerCase();
74
74
  }
75
75
 
76
+ const ALIGN_SELF_VALUES = ['auto', 'start', 'end', 'center', 'baseline', 'stretch'];
76
77
  export const VCol = defineComponent({
77
78
  name: 'VCol',
78
79
  props: {
@@ -94,7 +95,7 @@ export const VCol = defineComponent({
94
95
  alignSelf: {
95
96
  type: String,
96
97
  default: null,
97
- validator: str => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str)
98
+ validator: str => ALIGN_SELF_VALUES.includes(str)
98
99
  },
99
100
  ...makeTagProps()
100
101
  },
@@ -1 +1 @@
1
- {"version":3,"file":"VCol.mjs","names":["makeTagProps","capitalize","computed","h","defineComponent","breakpoints","breakpointProps","reduce","props","val","type","Boolean","String","Number","default","offsetProps","orderProps","propMap","col","Object","keys","offset","order","breakpointClass","prop","className","undefined","breakpoint","replace","toLowerCase","VCol","name","cols","alignSelf","validator","str","includes","setup","slots","classes","classList","forEach","value","push","hasColClasses","some","startsWith","tag","class"],"sources":["../../../src/components/VGrid/VCol.ts"],"sourcesContent":["// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Record<string, Prop<boolean | string | number, false>>)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className: string = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n if (type === 'col') {\n className = 'v-' + className\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert <v-col sm></v-col> to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .v-col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VCol = defineComponent({\n name: 'VCol',\n\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('v-col-'))\n\n classList.push({\n // Default to .v-col if no other col-{bp}-* classes generated nor `cols` specified.\n 'v-col': !hasColClasses || !props.cols,\n [`v-col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: classes.value,\n }, slots.default?.())\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"VCol.mjs","names":["makeTagProps","capitalize","computed","h","defineComponent","breakpoints","breakpointProps","reduce","props","val","type","Boolean","String","Number","default","offsetProps","orderProps","propMap","col","Object","keys","offset","order","breakpointClass","prop","className","undefined","breakpoint","replace","toLowerCase","ALIGN_SELF_VALUES","VCol","name","cols","alignSelf","validator","str","includes","setup","slots","classes","classList","forEach","value","push","hasColClasses","some","startsWith","tag","class"],"sources":["../../../src/components/VGrid/VCol.ts"],"sourcesContent":["// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop, PropType } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Record<string, Prop<boolean | string | number, false>>)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className: string = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n if (type === 'col') {\n className = 'v-' + className\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert <v-col sm></v-col> to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .v-col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst ALIGN_SELF_VALUES = ['auto', 'start', 'end', 'center', 'baseline', 'stretch'] as const\n\nexport const VCol = defineComponent({\n name: 'VCol',\n\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String as PropType<typeof ALIGN_SELF_VALUES[number]>,\n default: null,\n validator: (str: any) => ALIGN_SELF_VALUES.includes(str),\n },\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('v-col-'))\n\n classList.push({\n // Default to .v-col if no other col-{bp}-* classes generated nor `cols` specified.\n 'v-col': !hasColClasses || !props.cols,\n [`v-col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: classes.value,\n }, slots.default?.())\n },\n})\n\nexport type VCol = InstanceType<typeof VCol>\n"],"mappings":"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"}
@@ -9,6 +9,7 @@ import { defineComponent } from "../../util/index.mjs"; // Types
9
9
  const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
10
10
 
11
11
  const ALIGNMENT = ['start', 'end', 'center'];
12
+ const SPACE = ['space-between', 'space-around', 'space-evenly'];
12
13
 
13
14
  function makeRowProps(prefix, def) {
14
15
  return breakpoints.reduce((props, val) => {
@@ -17,23 +18,27 @@ function makeRowProps(prefix, def) {
17
18
  }, {});
18
19
  }
19
20
 
20
- const alignValidator = str => [...ALIGNMENT, 'baseline', 'stretch'].includes(str);
21
+ const ALIGN_VALUES = [...ALIGNMENT, 'baseline', 'stretch'];
22
+
23
+ const alignValidator = str => ALIGN_VALUES.includes(str);
21
24
 
22
25
  const alignProps = makeRowProps('align', () => ({
23
26
  type: String,
24
27
  default: null,
25
28
  validator: alignValidator
26
29
  }));
30
+ const JUSTIFY_VALUES = [...ALIGNMENT, ...SPACE];
27
31
 
28
- const justifyValidator = str => [...ALIGNMENT, 'space-between', 'space-around'].includes(str);
32
+ const justifyValidator = str => JUSTIFY_VALUES.includes(str);
29
33
 
30
34
  const justifyProps = makeRowProps('justify', () => ({
31
35
  type: String,
32
36
  default: null,
33
37
  validator: justifyValidator
34
38
  }));
39
+ const ALIGN_CONTENT_VALUES = [...ALIGNMENT, ...SPACE, 'stretch'];
35
40
 
36
- const alignContentValidator = str => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str);
41
+ const alignContentValidator = str => ALIGN_CONTENT_VALUES.includes(str);
37
42
 
38
43
  const alignContentProps = makeRowProps('alignContent', () => ({
39
44
  type: String,
@@ -1 +1 @@
1
- {"version":3,"file":"VRow.mjs","names":["makeTagProps","capitalize","computed","h","defineComponent","breakpoints","ALIGNMENT","makeRowProps","prefix","def","reduce","props","val","alignValidator","str","includes","alignProps","type","String","default","validator","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","Object","keys","justify","alignContent","classMap","breakpointClass","prop","className","undefined","breakpoint","replace","toLowerCase","VRow","name","dense","Boolean","noGutters","setup","slots","classes","classList","forEach","value","push","tag","class"],"sources":["../../../src/components/VGrid/VRow.ts"],"sourcesContent":["// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst ALIGNMENT = ['start', 'end', 'center'] as const\n\nfunction makeRowProps (prefix: string, def: () => Prop<string, null>) {\n return breakpoints.reduce((props, val) => {\n props[prefix + capitalize(val)] = def()\n return props\n }, {} as Record<string, Prop<string, null>>)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeRowProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeRowProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeRowProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VRow = defineComponent({\n name: 'VRow',\n\n props: {\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n\n ...alignContentProps,\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'v-row--no-gutters': props.noGutters,\n 'v-row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: ['v-row', classes.value],\n }, slots.default?.())\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"VRow.mjs","names":["makeTagProps","capitalize","computed","h","defineComponent","breakpoints","ALIGNMENT","SPACE","makeRowProps","prefix","def","reduce","props","val","ALIGN_VALUES","alignValidator","str","includes","alignProps","type","String","default","validator","JUSTIFY_VALUES","justifyValidator","justifyProps","ALIGN_CONTENT_VALUES","alignContentValidator","alignContentProps","propMap","align","Object","keys","justify","alignContent","classMap","breakpointClass","prop","className","undefined","breakpoint","replace","toLowerCase","VRow","name","dense","Boolean","noGutters","setup","slots","classes","classList","forEach","value","push","tag","class"],"sources":["../../../src/components/VGrid/VRow.ts"],"sourcesContent":["// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop, PropType } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst ALIGNMENT = ['start', 'end', 'center'] as const\n\nconst SPACE = ['space-between', 'space-around', 'space-evenly'] as const\n\nfunction makeRowProps <T> (prefix: string, def: () => Prop<T, null>) {\n return breakpoints.reduce((props, val) => {\n props[prefix + capitalize(val)] = def()\n return props\n }, {} as Record<string, Prop<T, null>>)\n}\n\nconst ALIGN_VALUES = [...ALIGNMENT, 'baseline', 'stretch'] as const\nconst alignValidator = (str: any) => ALIGN_VALUES.includes(str)\nconst alignProps = makeRowProps('align', () => ({\n type: String as PropType<typeof ALIGN_VALUES[number]>,\n default: null,\n validator: alignValidator,\n}))\n\nconst JUSTIFY_VALUES = [...ALIGNMENT, ...SPACE] as const\nconst justifyValidator = (str: any) => JUSTIFY_VALUES.includes(str)\nconst justifyProps = makeRowProps('justify', () => ({\n type: String as PropType<typeof JUSTIFY_VALUES[number]>,\n default: null,\n validator: justifyValidator,\n}))\n\nconst ALIGN_CONTENT_VALUES = [...ALIGNMENT, ...SPACE, 'stretch'] as const\nconst alignContentValidator = (str: any) => ALIGN_CONTENT_VALUES.includes(str)\nconst alignContentProps = makeRowProps('alignContent', () => ({\n type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VRow = defineComponent({\n name: 'VRow',\n\n props: {\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String as PropType<typeof ALIGN_VALUES[number]>,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>,\n default: null,\n validator: alignContentValidator,\n },\n\n ...alignContentProps,\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'v-row--no-gutters': props.noGutters,\n 'v-row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: ['v-row', classes.value],\n }, slots.default?.())\n },\n})\n\nexport type VRow = InstanceType<typeof VRow>\n"],"mappings":"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"}
@@ -41,17 +41,7 @@
41
41
  .v-icon--start {
42
42
  margin-inline-end: 8px;
43
43
  }
44
- .v-btn.v-btn--stacked .v-icon--start {
45
- margin-inline-start: 0;
46
- margin-inline-end: 0;
47
- margin-bottom: 4px;
48
- }
49
44
 
50
45
  .v-icon--end {
51
46
  margin-inline-start: 8px;
52
- }
53
- .v-btn.v-btn--stacked .v-icon--end {
54
- margin-inline-start: 0;
55
- margin-inline-end: 0;
56
- margin-top: 4px;
57
47
  }
@@ -32,15 +32,5 @@
32
32
  .v-icon--start
33
33
  margin-inline-end: $icon-margin-start
34
34
 
35
- .v-btn.v-btn--stacked &
36
- margin-inline-start: 0
37
- margin-inline-end: 0
38
- margin-bottom: $icon-btn-stacked-margin
39
-
40
35
  .v-icon--end
41
36
  margin-inline-start: $icon-margin-end
42
-
43
- .v-btn.v-btn--stacked &
44
- margin-inline-start: 0
45
- margin-inline-end: 0
46
- margin-top: $icon-btn-stacked-margin
@@ -3,7 +3,6 @@
3
3
  @use '../../styles/tools';
4
4
 
5
5
  // VIcon
6
- $icon-btn-stacked-margin: 4px !default;
7
6
  $icon-left-margin-left: map.get(settings.$grid-gutters, 'md') !default;
8
7
  $icon-letter-spacing: normal !default;
9
8
  $icon-line-height: 1 !default;
@@ -164,6 +164,7 @@ export const VImg = defineComponent({
164
164
  class: ['v-img__img', containClasses.value],
165
165
  src: normalisedSrc.value.src,
166
166
  srcset: normalisedSrc.value.srcset,
167
+ alt: '',
167
168
  sizes: props.sizes,
168
169
  ref: image,
169
170
  onLoad,