1
+ import { unit } from '../../_util/cssinjs' ;
1
2
import type { CSSObject } from '../../_util/cssinjs' ;
2
- import type { FullToken , GenerateStyle } from '../../theme/internal' ;
3
- import { genComponentStyleHook , mergeToken } from '../../theme/internal' ;
3
+
4
4
import { resetComponent } from '../../style' ;
5
+ import type { FullToken , GenerateStyle , GetDefaultToken } from '../../theme/internal' ;
6
+ import { genStyleHooks , mergeToken } from '../../theme/internal' ;
5
7
6
8
export interface ComponentToken {
7
9
/**
8
- * @desc 头像背景色
9
- * @descEN Background color of Avatar
10
+ * @desc 头像尺寸
11
+ * @descEN Size of Avatar
10
12
*/
11
13
containerSize : number ;
12
14
/**
@@ -51,10 +53,14 @@ export interface ComponentToken {
51
53
groupBorderColor : string ;
52
54
}
53
55
56
+ /**
57
+ * @desc Avatar 组件的 Token
58
+ * @descEN Token for Avatar component
59
+ */
54
60
type AvatarToken = FullToken < 'Avatar' > & {
61
+ avatarBgColor : string ;
55
62
avatarBg : string ;
56
63
avatarColor : string ;
57
- avatarBgColor : string ;
58
64
} ;
59
65
60
66
const genBaseStyle : GenerateStyle < AvatarToken > = token => {
@@ -81,22 +87,12 @@ const genBaseStyle: GenerateStyle<AvatarToken> = token => {
81
87
const avatarSizeStyle = ( size : number , fontSize : number , radius : number ) : CSSObject => ( {
82
88
width : size ,
83
89
height : size ,
84
- lineHeight : `${ size - lineWidth * 2 } px` ,
85
90
borderRadius : '50%' ,
86
91
87
92
[ `&${ componentCls } -square` ] : {
88
93
borderRadius : radius ,
89
94
} ,
90
95
91
- [ `${ componentCls } -string` ] : {
92
- position : 'absolute' ,
93
- left : {
94
- _skip_check_ : true ,
95
- value : '50%' ,
96
- } ,
97
- transformOrigin : '0 center' ,
98
- } ,
99
-
100
96
[ `&${ componentCls } -icon` ] : {
101
97
fontSize,
102
98
[ `> ${ iconCls } ` ] : {
@@ -109,16 +105,18 @@ const genBaseStyle: GenerateStyle<AvatarToken> = token => {
109
105
[ componentCls ] : {
110
106
...resetComponent ( token ) ,
111
107
position : 'relative' ,
112
- display : 'inline-block' ,
108
+ display : 'inline-flex' ,
109
+ justifyContent : 'center' ,
110
+ alignItems : 'center' ,
113
111
overflow : 'hidden' ,
114
112
color : avatarColor ,
115
113
whiteSpace : 'nowrap' ,
116
114
textAlign : 'center' ,
117
115
verticalAlign : 'middle' ,
118
116
background : avatarBg ,
119
- border : `${ lineWidth } px ${ lineType } transparent` ,
117
+ border : `${ unit ( lineWidth ) } ${ lineType } transparent` ,
120
118
121
- [ ` &-image` ] : {
119
+ ' &-image' : {
122
120
background : 'transparent' ,
123
121
} ,
124
122
@@ -128,11 +126,11 @@ const genBaseStyle: GenerateStyle<AvatarToken> = token => {
128
126
129
127
...avatarSizeStyle ( containerSize , textFontSize , borderRadius ) ,
130
128
131
- [ ` &-lg` ] : {
129
+ ' &-lg' : {
132
130
...avatarSizeStyle ( containerSizeLG , textFontSizeLG , borderRadiusLG ) ,
133
131
} ,
134
132
135
- [ ` &-sm` ] : {
133
+ ' &-sm' : {
136
134
...avatarSizeStyle ( containerSizeSM , textFontSizeSM , borderRadiusSM ) ,
137
135
} ,
138
136
@@ -153,11 +151,11 @@ const genGroupStyle: GenerateStyle<AvatarToken> = token => {
153
151
[ `${ componentCls } -group` ] : {
154
152
display : 'inline-flex' ,
155
153
156
- [ ` ${ componentCls } ` ] : {
154
+ [ componentCls ] : {
157
155
borderColor : groupBorderColor ,
158
156
} ,
159
157
160
- [ ` > *:not(:first-child)` ] : {
158
+ ' > *:not(:first-child)' : {
161
159
marginInlineStart : groupOverlapping ,
162
160
} ,
163
161
} ,
@@ -169,7 +167,33 @@ const genGroupStyle: GenerateStyle<AvatarToken> = token => {
169
167
} ;
170
168
} ;
171
169
172
- export default genComponentStyleHook (
170
+ export const prepareComponentToken : GetDefaultToken < 'Avatar' > = token => {
171
+ const {
172
+ controlHeight,
173
+ controlHeightLG,
174
+ controlHeightSM,
175
+ fontSize,
176
+ fontSizeLG,
177
+ fontSizeXL,
178
+ fontSizeHeading3,
179
+ marginXS,
180
+ marginXXS,
181
+ colorBorderBg,
182
+ } = token ;
183
+ return {
184
+ containerSize : controlHeight ,
185
+ containerSizeLG : controlHeightLG ,
186
+ containerSizeSM : controlHeightSM ,
187
+ textFontSize : Math . round ( ( fontSizeLG + fontSizeXL ) / 2 ) ,
188
+ textFontSizeLG : fontSizeHeading3 ,
189
+ textFontSizeSM : fontSize ,
190
+ groupSpace : marginXXS ,
191
+ groupOverlapping : - marginXS ,
192
+ groupBorderColor : colorBorderBg ,
193
+ } ;
194
+ } ;
195
+
196
+ export default genStyleHooks (
173
197
'Avatar' ,
174
198
token => {
175
199
const { colorTextLightSolid, colorTextPlaceholder } = token ;
@@ -179,33 +203,5 @@ export default genComponentStyleHook(
179
203
} ) ;
180
204
return [ genBaseStyle ( avatarToken ) , genGroupStyle ( avatarToken ) ] ;
181
205
} ,
182
- token => {
183
- const {
184
- controlHeight,
185
- controlHeightLG,
186
- controlHeightSM,
187
-
188
- fontSize,
189
- fontSizeLG,
190
- fontSizeXL,
191
- fontSizeHeading3,
192
-
193
- marginXS,
194
- marginXXS,
195
- colorBorderBg,
196
- } = token ;
197
- return {
198
- containerSize : controlHeight ,
199
- containerSizeLG : controlHeightLG ,
200
- containerSizeSM : controlHeightSM ,
201
-
202
- textFontSize : Math . round ( ( fontSizeLG + fontSizeXL ) / 2 ) ,
203
- textFontSizeLG : fontSizeHeading3 ,
204
- textFontSizeSM : fontSize ,
205
-
206
- groupSpace : marginXXS ,
207
- groupOverlapping : - marginXS ,
208
- groupBorderColor : colorBorderBg ,
209
- } ;
210
- } ,
206
+ prepareComponentToken ,
211
207
) ;
0 commit comments