Skip to content

Commit 9debce7

Browse files
fix(Button/Link): merge active-class / inactive-class with app config (#4446)
Co-authored-by: Benjamin Canac <canacb1@gmail.com>
1 parent 772631c commit 9debce7

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

‎src/runtime/components/Button.vue

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,15 @@ import { useAppConfig } from '#imports'
5050
import { useComponentIcons } from '../composables/useComponentIcons'
5151
import { useButtonGroup } from '../composables/useButtonGroup'
5252
import { formLoadingInjectionKey } from '../composables/useFormField'
53-
import { omit } from '../utils'
53+
import { omit, mergeClasses } from '../utils'
5454
import { tv } from '../utils/tv'
5555
import { pickLinkProps } from '../utils/link'
5656
import UIcon from './Icon.vue'
5757
import UAvatar from './Avatar.vue'
5858
import ULink from './Link.vue'
5959
import ULinkBase from './LinkBase.vue'
6060
61-
const props = withDefaults(defineProps<ButtonProps>(), {
62-
active: undefined,
63-
activeClass: '',
64-
inactiveClass: ''
65-
})
61+
const props = defineProps<ButtonProps>()
6662
const slots = defineSlots<ButtonSlots>()
6763
6864
const appConfig = useAppConfig() as Button['AppConfig']
@@ -97,10 +93,10 @@ const ui = computed(() => tv({
9793
variants: {
9894
active: {
9995
true: {
100-
base: props.activeClass
96+
base: mergeClasses(appConfig.ui?.button?.variants?.active?.true?.base, props.activeClass)
10197
},
10298
false: {
103-
base: props.inactiveClass
99+
base: mergeClasses(appConfig.ui?.button?.variants?.active?.false?.base, props.inactiveClass)
104100
}
105101
}
106102
}

‎src/runtime/components/Link.vue

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,12 @@ export interface LinkSlots {
8888

8989
<script setup lang="ts">
9090
import { computed } from 'vue'
91-
import { defu } from 'defu'
9291
import { isEqual } from 'ohash/utils'
9392
import { useForwardProps } from 'reka-ui'
93+
import { defu } from 'defu'
9494
import { reactiveOmit } from '@vueuse/core'
9595
import { useRoute, useAppConfig } from '#imports'
96+
import { mergeClasses } from '../utils'
9697
import { tv } from '../utils/tv'
9798
import { isPartiallyEqual } from '../utils/link'
9899
import ULinkBase from './LinkBase.vue'
@@ -103,9 +104,7 @@ const props = withDefaults(defineProps<LinkProps>(), {
103104
as: 'button',
104105
type: 'button',
105106
ariaCurrentValue: 'page',
106-
active: undefined,
107-
activeClass: '',
108-
inactiveClass: ''
107+
active: undefined
109108
})
110109
defineSlots<LinkSlots>()
111110
@@ -119,8 +118,8 @@ const ui = computed(() => tv({
119118
...defu({
120119
variants: {
121120
active: {
122-
true: props.activeClass,
123-
false: props.inactiveClass
121+
true: mergeClasses(appConfig.ui?.link?.variants?.active?.true, props.activeClass),
122+
false: mergeClasses(appConfig.ui?.link?.variants?.active?.false, props.inactiveClass)
124123
}
125124
}
126125
}, appConfig.ui?.link || {})

‎src/runtime/utils/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,14 @@ export function compare<T>(value?: T, currentValue?: T, comparator?: string | ((
8585
export function isArrayOfArray<A>(item: A[] | A[][]): item is A[][] {
8686
return Array.isArray(item[0])
8787
}
88+
89+
export function mergeClasses(appConfigClass?: string | string[], propClass?: string) {
90+
if (!appConfigClass && !propClass) {
91+
return ''
92+
}
93+
94+
return [
95+
...(Array.isArray(appConfigClass) ? appConfigClass : [appConfigClass]),
96+
propClass
97+
].filter(Boolean)
98+
}

0 commit comments

Comments
 (0)