diff --git a/packages/vuetify/src/components/VBottomNavigation/VBottomNavigation.tsx b/packages/vuetify/src/components/VBottomNavigation/VBottomNavigation.tsx index d64d0e30f4b..03ee9b1410a 100644 --- a/packages/vuetify/src/components/VBottomNavigation/VBottomNavigation.tsx +++ b/packages/vuetify/src/components/VBottomNavigation/VBottomNavigation.tsx @@ -27,6 +27,7 @@ import { convertToUnit, genericComponent, propsFactory, useRender } from '@/util import type { GenericProps } from '@/util' export const makeVBottomNavigationProps = propsFactory({ + baseColor: String, bgColor: String, color: String, grow: Boolean, @@ -100,6 +101,7 @@ export const VBottomNavigation = genericComponent( provideDefaults({ VBtn: { + baseColor: toRef(props, 'baseColor'), color: toRef(props, 'color'), density: toRef(props, 'density'), stacked: computed(() => props.mode !== 'horizontal'), diff --git a/packages/vuetify/src/components/VBtn/VBtn.tsx b/packages/vuetify/src/components/VBtn/VBtn.tsx index 933df33c792..38dd91125ca 100644 --- a/packages/vuetify/src/components/VBtn/VBtn.tsx +++ b/packages/vuetify/src/components/VBtn/VBtn.tsx @@ -49,6 +49,7 @@ export const makeVBtnProps = propsFactory({ type: Boolean, default: undefined, }, + baseColor: String, symbol: { type: null, default: VBtnToggleSymbol, @@ -100,7 +101,6 @@ export const VBtn = genericComponent()({ setup (props, { attrs, slots }) { const { themeClasses } = provideTheme(props) const { borderClasses } = useBorder(props) - const { colorClasses, colorStyles, variantClasses } = useVariant(props) const { densityClasses } = useDensity(props) const { dimensionStyles } = useDimension(props) const { elevationClasses } = useElevation(props) @@ -123,6 +123,19 @@ export const VBtn = genericComponent()({ return group?.isSelected.value }) + + const variantProps = computed(() => { + const showColor = ( + (group?.isSelected.value && (!link.isLink.value || link.isActive?.value)) || + (!group || link.isActive?.value) + ) + return ({ + color: showColor ? props.color ?? props.baseColor : props.baseColor, + variant: props.variant, + }) + }) + const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps) + const isDisabled = computed(() => group?.disabled.value || props.disabled) const isElevated = computed(() => { return props.variant === 'elevated' && !(props.disabled || props.flat || props.border) @@ -158,10 +171,6 @@ export const VBtn = genericComponent()({ const hasPrepend = !!(props.prependIcon || slots.prepend) const hasAppend = !!(props.appendIcon || slots.append) const hasIcon = !!(props.icon && props.icon !== true) - const hasColor = ( - (group?.isSelected.value && (!link.isLink.value || link.isActive?.value)) || - (!group || link.isActive?.value) - ) return ( ()({ }, themeClasses.value, borderClasses.value, - hasColor ? colorClasses.value : undefined, + colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, @@ -193,7 +202,7 @@ export const VBtn = genericComponent()({ props.class, ]} style={[ - hasColor ? colorStyles.value : undefined, + colorStyles.value, dimensionStyles.value, locationStyles.value, sizeStyles.value, diff --git a/packages/vuetify/src/components/VBtnGroup/VBtnGroup.tsx b/packages/vuetify/src/components/VBtnGroup/VBtnGroup.tsx index c4d0dc732ee..a0e1653f45f 100644 --- a/packages/vuetify/src/components/VBtnGroup/VBtnGroup.tsx +++ b/packages/vuetify/src/components/VBtnGroup/VBtnGroup.tsx @@ -17,6 +17,7 @@ import { toRef } from 'vue' import { genericComponent, propsFactory, useRender } from '@/util' export const makeVBtnGroupProps = propsFactory({ + baseColor: String, divided: Boolean, ...makeBorderProps(), @@ -44,6 +45,7 @@ export const VBtnGroup = genericComponent()({ provideDefaults({ VBtn: { height: 'auto', + baseColor: toRef(props, 'baseColor'), color: toRef(props, 'color'), density: toRef(props, 'density'), flat: true,