@@ -3,6 +3,7 @@ import { useWebHover } from '@/src/common/lib/useWebHover';
33import {
44 Atoms ,
55 BorderRadius ,
6+ Spacing ,
67 useTheme ,
78 withHexOpacity ,
89 type BorderRadiusToken ,
@@ -52,8 +53,18 @@ const SIZE_CONFIG: Record<
5253 borderRadius : BorderRadiusToken ;
5354 }
5455> = {
55- sm : { paddingV : 4 , paddingH : 6 , iconSize : 16 , borderRadius : 'full' } ,
56- md : { paddingV : 12 , paddingH : 18 , iconSize : 20 , borderRadius : 'full' } ,
56+ sm : {
57+ paddingV : 4 ,
58+ paddingH : Spacing [ 'lg' ] ,
59+ iconSize : 16 ,
60+ borderRadius : 'full' ,
61+ } ,
62+ md : {
63+ paddingV : 12 ,
64+ paddingH : Spacing [ 'xl' ] ,
65+ iconSize : 20 ,
66+ borderRadius : 'full' ,
67+ } ,
5768 lg : { paddingV : 18 , paddingH : 24 , iconSize : 24 , borderRadius : 'full' } ,
5869} ;
5970
@@ -74,6 +85,10 @@ export function Button({
7485
7586 const sizeConfig = SIZE_CONFIG [ size ] ;
7687 const borderRadius = BorderRadius [ sizeConfig . borderRadius ] ;
88+ const iconOnly = ! ! icon && ! title ;
89+ const paddingHorizontal = iconOnly
90+ ? sizeConfig . paddingV
91+ : sizeConfig . paddingH ;
7792 const isDisabled = ! ! disabled ;
7893 const iconColor = isDisabled
7994 ? withHexOpacity ( theme . palette . neutral_500 , '80' )
@@ -100,7 +115,7 @@ export function Button({
100115 ! fullWidth && styles . fitContent ,
101116 {
102117 paddingVertical : sizeConfig . paddingV ,
103- paddingHorizontal : sizeConfig . paddingH ,
118+ paddingHorizontal,
104119 borderRadius,
105120 } ,
106121 surfaceStyle ,
@@ -109,24 +124,27 @@ export function Button({
109124 ] }
110125 { ...props }
111126 >
112- < View style = { [ styles . content , icon && title && { marginLeft : - 3 } ] } >
127+ < View style = { [ styles . content ] } >
113128 { icon &&
114129 icon ( {
115130 size : sizeConfig . iconSize ,
116131 color : iconColor ,
117132 } ) }
118- < Text
119- fontWeight = { FONT_WEIGHT }
120- color = { isDisabled ? 'neutral_1000' : textColorMap [ variant ] }
121- style = {
122- isDisabled
123- ? { color : withHexOpacity ( theme . palette . neutral_500 , '80' ) }
124- : undefined
125- }
126- numberOfLines = { 1 }
127- >
128- { title }
129- </ Text >
133+ { ! iconOnly && (
134+ < Text
135+ fontSize = { size }
136+ fontWeight = { FONT_WEIGHT }
137+ color = { isDisabled ? 'neutral_1000' : textColorMap [ variant ] }
138+ style = {
139+ isDisabled
140+ ? { color : withHexOpacity ( theme . palette . neutral_500 , '80' ) }
141+ : undefined
142+ }
143+ numberOfLines = { 1 }
144+ >
145+ { title }
146+ </ Text >
147+ ) }
130148 </ View >
131149 </ Pressable >
132150 </ Animated . View >
0 commit comments