Skip to content

Commit b330dc4

Browse files
authored
fix/issue 414/button link height mismatch (#416)
* fix: add default display class to fix height in FwbButton * chore: remove unused ButtonLinkExample.vue and sort button class definitions
1 parent ffd9410 commit b330dc4

File tree

3 files changed

+39
-63
lines changed

3 files changed

+39
-63
lines changed

docs/components/button/examples/ButtonLinkExample.vue

Lines changed: 0 additions & 21 deletions
This file was deleted.

docs/components/button/examples/FwbButtonExampleLink.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="vp-raw flex flex-wrap gap-2">
2+
<div class="flex flex-wrap gap-2 vp-raw">
33
<fwb-button
44
href="https://google.com"
55
target="_blank"

src/components/FwbButton/composables/useButtonClasses.ts

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,95 +4,91 @@ import type { ButtonDuotoneGradient, ButtonGradient, ButtonMonochromeGradient, B
44

55
export type ButtonClassMap<T extends string> = { hover: Record<T, string>, default: Record<T, string> }
66

7+
const buttonDefaultClasses = 'inline-block'
8+
79
const buttonColorClasses: ButtonClassMap<ButtonVariant> = {
810
default: {
9-
default: 'text-white bg-blue-700 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg dark:bg-blue-600 focus:outline-none dark:focus:ring-blue-800',
11+
alternative: 'font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600',
1012
blue: 'text-white bg-blue-700 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg dark:bg-blue-600 focus:outline-none dark:focus:ring-blue-800',
11-
alternative:
12-
'font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600',
1313
dark: 'text-white bg-gray-800 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg dark:bg-gray-800 dark:focus:ring-gray-700 dark:border-gray-700',
14-
light:
15-
'text-gray-900 bg-white border border-gray-300 focus:outline-none focus:ring-4 focus:ring-gray-200 font-medium rounded-lg dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:focus:ring-gray-700',
14+
default: 'text-white bg-blue-700 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg dark:bg-blue-600 focus:outline-none dark:focus:ring-blue-800',
1615
green: 'focus:outline-none text-white bg-green-700 focus:ring-4 focus:ring-green-300 font-medium rounded-lg dark:bg-green-600 dark:focus:ring-green-800',
16+
light: 'text-gray-900 bg-white border border-gray-300 focus:outline-none focus:ring-4 focus:ring-gray-200 font-medium rounded-lg dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:focus:ring-gray-700',
17+
pink: 'focus:outline-none text-white bg-pink-700 focus:ring-4 focus:ring-pink-300 font-medium rounded-lg dark:bg-pink-600 dark:focus:ring-pink-900',
18+
purple: 'focus:outline-none text-white bg-purple-700 focus:ring-4 focus:ring-purple-300 font-medium rounded-lg dark:bg-purple-600 dark:focus:ring-purple-900',
1719
red: 'focus:outline-none text-white bg-red-700 focus:ring-4 focus:ring-red-300 font-medium rounded-lg dark:bg-red-600 dark:focus:ring-red-900',
1820
yellow: 'focus:outline-none text-white bg-yellow-400 focus:ring-4 focus:ring-yellow-300 font-medium rounded-lg dark:focus:ring-yellow-900',
19-
purple: 'focus:outline-none text-white bg-purple-700 focus:ring-4 focus:ring-purple-300 font-medium rounded-lg dark:bg-purple-600 dark:focus:ring-purple-900',
20-
pink: 'focus:outline-none text-white bg-pink-700 focus:ring-4 focus:ring-pink-300 font-medium rounded-lg dark:bg-pink-600 dark:focus:ring-pink-900',
2121
},
2222
hover: {
23-
default: 'hover:bg-blue-800 dark:hover:bg-blue-700',
24-
blue: 'hover:bg-blue-800 dark:hover:bg-blue-700',
2523
alternative: 'hover:bg-gray-100 hover:text-blue-700 dark:hover:text-white dark:hover:bg-gray-700',
24+
blue: 'hover:bg-blue-800 dark:hover:bg-blue-700',
2625
dark: 'hover:bg-gray-900 dark:hover:bg-gray-700',
27-
light: 'hover:bg-gray-100 dark:hover:border-gray-600 dark:hover:bg-gray-700',
26+
default: 'hover:bg-blue-800 dark:hover:bg-blue-700',
2827
green: 'hover:bg-green-800 dark:hover:bg-green-700',
28+
light: 'hover:bg-gray-100 dark:hover:border-gray-600 dark:hover:bg-gray-700',
29+
pink: 'hover:bg-pink-800 dark:hover:bg-pink-700',
30+
purple: 'hover:bg-purple-800 dark:hover:bg-purple-700',
2931
red: 'hover:bg-red-800 dark:hover:bg-red-700',
3032
yellow: 'hover:bg-yellow-500',
31-
purple: 'hover:bg-purple-800 dark:hover:bg-purple-700',
32-
pink: 'hover:bg-pink-800 dark:hover:bg-pink-700',
3333
},
3434
}
3535

3636
const buttonOutlineColorClasses: ButtonClassMap<Exclude<ButtonVariant, 'light' | 'alternative'>> = {
3737
default: {
38-
dark: 'text-gray-900 border border-gray-800 focus:ring-4 focus:outline-none focus:ring-gray-300 font-medium rounded-lg text-sm text-center dark:border-gray-600 dark:text-gray-400 dark:focus:ring-gray-800',
39-
default:
40-
'text-blue-700 border border-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm text-center dark:border-blue-500 dark:text-blue-500 dark:focus:ring-blue-800',
4138
blue: 'text-blue-700 border border-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm text-center dark:border-blue-500 dark:text-blue-500 dark:focus:ring-blue-800',
42-
green:
43-
'text-green-700 border border-green-700 focus:ring-4 focus:outline-none focus:ring-green-300 font-medium rounded-lg text-sm text-center dark:border-green-500 dark:text-green-500 dark:focus:ring-green-800',
44-
purple:
45-
'text-purple-700 border border-purple-700 focus:ring-4 focus:outline-none focus:ring-purple-300 font-medium rounded-lg text-sm text-center dark:border-purple-400 dark:text-purple-400 dark:focus:ring-purple-900',
39+
dark: 'text-gray-900 border border-gray-800 focus:ring-4 focus:outline-none focus:ring-gray-300 font-medium rounded-lg text-sm text-center dark:border-gray-600 dark:text-gray-400 dark:focus:ring-gray-800',
40+
default: 'text-blue-700 border border-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm text-center dark:border-blue-500 dark:text-blue-500 dark:focus:ring-blue-800',
41+
green: 'text-green-700 border border-green-700 focus:ring-4 focus:outline-none focus:ring-green-300 font-medium rounded-lg text-sm text-center dark:border-green-500 dark:text-green-500 dark:focus:ring-green-800',
4642
pink: 'text-pink-700 border border-pink-700 focus:ring-4 focus:outline-none focus:ring-pink-300 font-medium rounded-lg text-sm text-center dark:border-pink-400 dark:text-pink-400 dark:focus:ring-pink-900',
43+
purple: 'text-purple-700 border border-purple-700 focus:ring-4 focus:outline-none focus:ring-purple-300 font-medium rounded-lg text-sm text-center dark:border-purple-400 dark:text-purple-400 dark:focus:ring-purple-900',
4744
red: 'text-red-700 border border-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm text-center dark:border-red-500 dark:text-red-500 dark:focus:ring-red-900',
48-
yellow:
49-
'text-yellow-400 border border-yellow-400 focus:ring-4 focus:outline-none focus:ring-yellow-300 font-medium rounded-lg text-sm text-center dark:border-yellow-300 dark:text-yellow-300 dark:focus:ring-yellow-900',
45+
yellow: 'text-yellow-400 border border-yellow-400 focus:ring-4 focus:outline-none focus:ring-yellow-300 font-medium rounded-lg text-sm text-center dark:border-yellow-300 dark:text-yellow-300 dark:focus:ring-yellow-900',
5046
},
5147
hover: {
48+
blue: 'hover:text-white hover:bg-blue-800 dark:hover:text-white dark:hover:bg-blue-600',
5249
dark: 'hover:text-white hover:bg-gray-900 dark:hover:text-white dark:hover:bg-gray-600',
5350
default: 'hover:text-white hover:bg-blue-800 dark:hover:text-white dark:hover:bg-blue-600',
54-
blue: 'hover:text-white hover:bg-blue-800 dark:hover:text-white dark:hover:bg-blue-600',
5551
green: 'hover:text-white hover:bg-green-800 dark:hover:text-white dark:hover:bg-green-600',
56-
purple: 'hover:text-white hover:bg-purple-800 dark:hover:text-white dark:hover:bg-purple-500',
5752
pink: 'hover:text-white hover:bg-pink-800 dark:hover:text-white dark:hover:bg-pink-500',
53+
purple: 'hover:text-white hover:bg-purple-800 dark:hover:text-white dark:hover:bg-purple-500',
5854
red: 'hover:text-white hover:bg-red-800 dark:hover:text-white dark:hover:bg-red-600',
5955
yellow: 'hover:text-white hover:bg-yellow-500 dark:hover:text-white dark:hover:bg-yellow-400',
6056
},
6157
}
6258

6359
const buttonGradientClasses: ButtonClassMap<ButtonGradient> = {
6460
hover: {
65-
'cyan-blue': 'hover:bg-gradient-to-bl',
66-
'green-blue': 'hover:bg-gradient-to-bl',
67-
'pink-orange': 'hover:bg-gradient-to-bl',
68-
'purple-blue': 'hover:bg-gradient-to-bl',
69-
'purple-pink': 'hover:bg-gradient-to-l',
70-
'red-yellow': 'hover:bg-gradient-to-bl',
71-
'teal-lime': 'hover:bg-gradient-to-l hover:from-teal-200 hover:to-lime-200',
7261
'blue': 'hover:bg-gradient-to-br',
62+
'cyan-blue': 'hover:bg-gradient-to-bl',
7363
'cyan': 'hover:bg-gradient-to-br',
64+
'green-blue': 'hover:bg-gradient-to-bl',
7465
'green': 'hover:bg-gradient-to-br',
7566
'lime': 'hover:bg-gradient-to-br',
67+
'pink-orange': 'hover:bg-gradient-to-bl',
7668
'pink': 'hover:bg-gradient-to-br',
69+
'purple-blue': 'hover:bg-gradient-to-bl',
70+
'purple-pink': 'hover:bg-gradient-to-l',
7771
'purple': 'hover:bg-gradient-to-br',
72+
'red-yellow': 'hover:bg-gradient-to-bl',
7873
'red': 'hover:bg-gradient-to-br',
74+
'teal-lime': 'hover:bg-gradient-to-l hover:from-teal-200 hover:to-lime-200',
7975
'teal': 'hover:bg-gradient-to-br',
8076
},
8177
default: {
82-
'cyan-blue': 'text-white bg-gradient-to-r from-cyan-500 to-blue-500 focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 font-medium rounded-lg',
83-
'green-blue': 'text-white bg-gradient-to-br from-green-400 to-blue-600 focus:ring-4 focus:outline-none focus:ring-green-200 dark:focus:ring-green-800 font-medium rounded-lg',
84-
'pink-orange': 'text-white bg-gradient-to-br from-pink-500 to-orange-400 focus:ring-4 focus:outline-none focus:ring-pink-200 dark:focus:ring-pink-800 font-medium rounded-lg',
85-
'purple-blue': 'text-white bg-gradient-to-br from-purple-600 to-blue-500 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg',
86-
'purple-pink': 'text-white bg-gradient-to-r from-purple-500 to-pink-500 focus:ring-4 focus:outline-none focus:ring-purple-200 dark:focus:ring-purple-800 font-medium rounded-lg',
87-
'red-yellow': 'text-gray-900 bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 focus:ring-4 focus:outline-none focus:ring-red-100 dark:focus:ring-red-400 font-medium rounded-lg',
88-
'teal-lime': 'text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 focus:ring-4 focus:outline-none focus:ring-lime-200 dark:focus:ring-teal-700 font-medium rounded-lg',
8978
'blue': 'text-white bg-gradient-to-r from-blue-500 via-blue-600 to-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 rounded-lg',
79+
'cyan-blue': 'text-white bg-gradient-to-r from-cyan-500 to-blue-500 focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 font-medium rounded-lg',
9080
'cyan': 'text-white bg-gradient-to-r from-cyan-500 via-cyan-600 to-cyan-700 focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 rounded-lg',
81+
'green-blue': 'text-white bg-gradient-to-br from-green-400 to-blue-600 focus:ring-4 focus:outline-none focus:ring-green-200 dark:focus:ring-green-800 font-medium rounded-lg',
9182
'green': 'text-white bg-gradient-to-r from-green-500 via-green-600 to-green-700 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 rounded-lg',
9283
'lime': 'text-gray-900 bg-gradient-to-r from-lime-500 via-lime-600 to-lime-700 focus:ring-4 focus:outline-none focus:ring-lime-300 dark:focus:ring-lime-800 rounded-lg',
84+
'pink-orange': 'text-white bg-gradient-to-br from-pink-500 to-orange-400 focus:ring-4 focus:outline-none focus:ring-pink-200 dark:focus:ring-pink-800 font-medium rounded-lg',
9385
'pink': 'text-white bg-gradient-to-r from-pink-500 via-pink-600 to-pink-700 focus:ring-4 focus:outline-none focus:ring-pink-300 dark:focus:ring-pink-800 rounded-lg',
86+
'purple-blue': 'text-white bg-gradient-to-br from-purple-600 to-blue-500 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg',
87+
'purple-pink': 'text-white bg-gradient-to-r from-purple-500 to-pink-500 focus:ring-4 focus:outline-none focus:ring-purple-200 dark:focus:ring-purple-800 font-medium rounded-lg',
9488
'purple': 'text-white bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 focus:ring-4 focus:outline-none focus:ring-purple-300 dark:focus:ring-purple-800 rounded-lg',
89+
'red-yellow': 'text-gray-900 bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 focus:ring-4 focus:outline-none focus:ring-red-100 dark:focus:ring-red-400 font-medium rounded-lg',
9590
'red': 'text-white bg-gradient-to-r from-red-500 via-red-600 to-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 rounded-lg',
91+
'teal-lime': 'text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 focus:ring-4 focus:outline-none focus:ring-lime-200 dark:focus:ring-teal-700 font-medium rounded-lg',
9692
'teal': 'text-white bg-gradient-to-r from-teal-500 via-teal-600 to-teal-700 focus:ring-4 focus:outline-none focus:ring-teal-300 dark:focus:ring-teal-800 rounded-lg',
9793
},
9894
}
@@ -147,15 +143,15 @@ const buttonShadowClasses: Record<ButtonMonochromeGradient, string> = {
147143

148144
interface UseButtonClassesProps {
149145
class: Ref<string | object>
150-
pill: Ref<boolean>
146+
color: Ref<ButtonVariant>
151147
disabled: Ref<boolean>
148+
gradient: Ref<ButtonGradient | null>
152149
loading: Ref<boolean>
153150
outline: Ref<boolean>
151+
pill: Ref<boolean>
152+
shadow: Ref<ButtonMonochromeGradient | '' | boolean | null>
154153
size: Ref<ButtonSize>
155154
square: Ref<boolean>
156-
color: Ref<ButtonVariant>
157-
gradient: Ref<ButtonGradient | null>
158-
shadow: Ref<ButtonMonochromeGradient | '' | boolean | null>
159155
}
160156

161157
const simpleGradients = ['blue', 'green', 'cyan', 'teal', 'lime', 'red', 'pink', 'purple']
@@ -225,6 +221,7 @@ export function useButtonClasses (props: UseButtonClassesProps): { wrapperClasse
225221
}
226222

227223
return [
224+
buttonDefaultClasses,
228225
backgroundClass,
229226
hoverClass,
230227
shadowClass,

0 commit comments

Comments
 (0)