@douyinfe/semi-ui 2.12.0 → 2.12.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/avatar/index.tsx +2 -2
  2. package/backtop/index.tsx +11 -7
  3. package/badge/index.tsx +1 -1
  4. package/banner/index.tsx +5 -5
  5. package/breadcrumb/index.tsx +5 -3
  6. package/button/Button.tsx +10 -8
  7. package/card/index.tsx +43 -41
  8. package/carousel/CarouselArrow.tsx +2 -0
  9. package/carousel/index.tsx +1 -0
  10. package/cascader/index.tsx +101 -123
  11. package/cascader/item.tsx +1 -1
  12. package/checkbox/checkbox.tsx +13 -2
  13. package/collapsible/index.tsx +8 -1
  14. package/datePicker/dateInput.tsx +1 -0
  15. package/datePicker/datePicker.tsx +13 -5
  16. package/dist/css/semi.css +40 -40
  17. package/dist/css/semi.min.css +1 -1
  18. package/dist/umd/semi-ui.js +491 -362
  19. package/dist/umd/semi-ui.js.map +1 -1
  20. package/dist/umd/semi-ui.min.js +1 -1
  21. package/dist/umd/semi-ui.min.js.map +1 -1
  22. package/divider/index.tsx +8 -4
  23. package/dropdown/index.tsx +1 -1
  24. package/empty/index.tsx +13 -5
  25. package/form/hoc/withField.tsx +1 -1
  26. package/form/label.tsx +1 -1
  27. package/grid/col.tsx +1 -1
  28. package/grid/row.tsx +1 -1
  29. package/iconButton/index.tsx +2 -1
  30. package/input/index.tsx +38 -11
  31. package/lib/cjs/avatar/index.js +4 -2
  32. package/lib/cjs/backtop/index.js +2 -1
  33. package/lib/cjs/badge/index.js +2 -1
  34. package/lib/cjs/banner/index.js +9 -4
  35. package/lib/cjs/breadcrumb/index.js +4 -3
  36. package/lib/cjs/button/Button.d.ts +1 -1
  37. package/lib/cjs/button/Button.js +13 -3
  38. package/lib/cjs/button/index.d.ts +1 -1
  39. package/lib/cjs/card/index.js +10 -5
  40. package/lib/cjs/carousel/CarouselArrow.js +6 -2
  41. package/lib/cjs/carousel/CarouselIndicator.d.ts +1 -1
  42. package/lib/cjs/carousel/index.d.ts +1 -1
  43. package/lib/cjs/carousel/index.js +2 -1
  44. package/lib/cjs/cascader/index.js +9 -6
  45. package/lib/cjs/cascader/item.js +2 -1
  46. package/lib/cjs/checkbox/checkbox.js +8 -4
  47. package/lib/cjs/collapsible/index.js +2 -1
  48. package/lib/cjs/datePicker/dateInput.d.ts +1 -1
  49. package/lib/cjs/datePicker/dateInput.js +2 -1
  50. package/lib/cjs/datePicker/datePicker.d.ts +1 -1
  51. package/lib/cjs/datePicker/datePicker.js +4 -2
  52. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -1
  53. package/lib/cjs/divider/index.js +2 -1
  54. package/lib/cjs/dropdown/index.js +2 -1
  55. package/lib/cjs/empty/index.js +8 -4
  56. package/lib/cjs/form/baseForm.d.ts +1 -1
  57. package/lib/cjs/form/field.d.ts +1 -1
  58. package/lib/cjs/form/hoc/withField.js +2 -1
  59. package/lib/cjs/form/label.js +2 -1
  60. package/lib/cjs/grid/col.js +2 -1
  61. package/lib/cjs/grid/row.js +2 -1
  62. package/lib/cjs/iconButton/index.js +3 -1
  63. package/lib/cjs/input/index.js +9 -5
  64. package/lib/cjs/list/index.js +6 -3
  65. package/lib/cjs/modal/ConfirmModal.js +2 -1
  66. package/lib/cjs/modal/Modal.js +6 -2
  67. package/lib/cjs/modal/ModalContent.js +13 -6
  68. package/lib/cjs/modal/confirm.d.ts +5 -5
  69. package/lib/cjs/notification/notice.js +6 -3
  70. package/lib/cjs/pagination/index.js +4 -2
  71. package/lib/cjs/popconfirm/index.js +6 -3
  72. package/lib/cjs/radio/radio.d.ts +1 -1
  73. package/lib/cjs/radio/radio.js +4 -2
  74. package/lib/cjs/radio/radioGroup.d.ts +1 -1
  75. package/lib/cjs/rating/item.js +2 -1
  76. package/lib/cjs/scrollList/index.js +6 -3
  77. package/lib/cjs/select/index.js +8 -4
  78. package/lib/cjs/select/option.js +2 -1
  79. package/lib/cjs/sideSheet/SideSheetContent.js +6 -3
  80. package/lib/cjs/skeleton/index.js +3 -1
  81. package/lib/cjs/space/index.js +2 -1
  82. package/lib/cjs/spin/index.js +7 -3
  83. package/lib/cjs/switch/index.js +6 -4
  84. package/lib/cjs/table/Table.d.ts +1 -1
  85. package/lib/cjs/table/Table.js +6 -3
  86. package/lib/cjs/tabs/TabBar.js +2 -1
  87. package/lib/cjs/tabs/TabPane.js +5 -2
  88. package/lib/cjs/tagInput/index.js +4 -2
  89. package/lib/cjs/timePicker/Combobox.js +3 -1
  90. package/lib/cjs/timePicker/TimePicker.d.ts +2 -2
  91. package/lib/cjs/timePicker/TimeShape.d.ts +1 -1
  92. package/lib/cjs/timePicker/index.d.ts +2 -2
  93. package/lib/cjs/toast/toast.js +6 -3
  94. package/lib/cjs/transfer/index.js +2 -1
  95. package/lib/cjs/tree/treeNode.js +2 -1
  96. package/lib/cjs/treeSelect/index.js +6 -3
  97. package/lib/cjs/typography/base.d.ts +1 -1
  98. package/lib/cjs/typography/base.js +2 -1
  99. package/lib/cjs/typography/paragraph.d.ts +1 -1
  100. package/lib/cjs/typography/text.d.ts +1 -1
  101. package/lib/cjs/typography/title.d.ts +2 -2
  102. package/lib/cjs/upload/index.d.ts +2 -2
  103. package/lib/cjs/upload/index.js +13 -6
  104. package/lib/es/avatar/index.js +4 -2
  105. package/lib/es/backtop/index.js +2 -1
  106. package/lib/es/badge/index.js +2 -1
  107. package/lib/es/banner/index.js +9 -4
  108. package/lib/es/breadcrumb/index.js +4 -3
  109. package/lib/es/button/Button.d.ts +1 -1
  110. package/lib/es/button/Button.js +11 -3
  111. package/lib/es/button/index.d.ts +1 -1
  112. package/lib/es/card/index.js +10 -5
  113. package/lib/es/carousel/CarouselArrow.js +6 -2
  114. package/lib/es/carousel/CarouselIndicator.d.ts +1 -1
  115. package/lib/es/carousel/index.d.ts +1 -1
  116. package/lib/es/carousel/index.js +2 -1
  117. package/lib/es/cascader/index.js +9 -6
  118. package/lib/es/cascader/item.js +2 -1
  119. package/lib/es/checkbox/checkbox.js +8 -4
  120. package/lib/es/collapsible/index.js +2 -1
  121. package/lib/es/datePicker/dateInput.d.ts +1 -1
  122. package/lib/es/datePicker/dateInput.js +2 -1
  123. package/lib/es/datePicker/datePicker.d.ts +1 -1
  124. package/lib/es/datePicker/datePicker.js +4 -2
  125. package/lib/es/datePicker/monthsGrid.d.ts +1 -1
  126. package/lib/es/divider/index.js +2 -1
  127. package/lib/es/dropdown/index.js +2 -1
  128. package/lib/es/empty/index.js +8 -4
  129. package/lib/es/form/baseForm.d.ts +1 -1
  130. package/lib/es/form/field.d.ts +1 -1
  131. package/lib/es/form/hoc/withField.js +2 -1
  132. package/lib/es/form/label.js +2 -1
  133. package/lib/es/grid/col.js +2 -1
  134. package/lib/es/grid/row.js +2 -1
  135. package/lib/es/iconButton/index.js +3 -1
  136. package/lib/es/input/index.js +9 -5
  137. package/lib/es/list/index.js +6 -3
  138. package/lib/es/modal/ConfirmModal.js +2 -1
  139. package/lib/es/modal/Modal.js +6 -2
  140. package/lib/es/modal/ModalContent.js +13 -6
  141. package/lib/es/modal/confirm.d.ts +5 -5
  142. package/lib/es/notification/notice.js +6 -3
  143. package/lib/es/pagination/index.js +4 -2
  144. package/lib/es/popconfirm/index.js +6 -3
  145. package/lib/es/radio/radio.d.ts +1 -1
  146. package/lib/es/radio/radio.js +4 -2
  147. package/lib/es/radio/radioGroup.d.ts +1 -1
  148. package/lib/es/rating/item.js +2 -1
  149. package/lib/es/scrollList/index.js +6 -3
  150. package/lib/es/select/index.js +8 -4
  151. package/lib/es/select/option.js +2 -1
  152. package/lib/es/sideSheet/SideSheetContent.js +6 -3
  153. package/lib/es/skeleton/index.js +3 -1
  154. package/lib/es/space/index.js +2 -1
  155. package/lib/es/spin/index.js +7 -3
  156. package/lib/es/switch/index.js +6 -4
  157. package/lib/es/table/Table.d.ts +1 -1
  158. package/lib/es/table/Table.js +6 -3
  159. package/lib/es/tabs/TabBar.js +2 -1
  160. package/lib/es/tabs/TabPane.js +5 -2
  161. package/lib/es/tagInput/index.js +4 -2
  162. package/lib/es/timePicker/Combobox.js +3 -1
  163. package/lib/es/timePicker/TimePicker.d.ts +2 -2
  164. package/lib/es/timePicker/TimeShape.d.ts +1 -1
  165. package/lib/es/timePicker/index.d.ts +2 -2
  166. package/lib/es/toast/toast.js +6 -3
  167. package/lib/es/transfer/index.js +2 -1
  168. package/lib/es/tree/treeNode.js +2 -1
  169. package/lib/es/treeSelect/index.js +6 -3
  170. package/lib/es/typography/base.d.ts +1 -1
  171. package/lib/es/typography/base.js +2 -1
  172. package/lib/es/typography/paragraph.d.ts +1 -1
  173. package/lib/es/typography/text.d.ts +1 -1
  174. package/lib/es/typography/title.d.ts +2 -2
  175. package/lib/es/upload/index.d.ts +2 -2
  176. package/lib/es/upload/index.js +13 -6
  177. package/list/index.tsx +16 -4
  178. package/modal/ConfirmModal.tsx +1 -1
  179. package/modal/Modal.tsx +2 -0
  180. package/modal/ModalContent.tsx +27 -14
  181. package/notification/notice.tsx +16 -4
  182. package/package.json +9 -9
  183. package/pagination/index.tsx +16 -2
  184. package/popconfirm/index.tsx +11 -3
  185. package/radio/radio.tsx +10 -2
  186. package/rating/item.tsx +1 -1
  187. package/scrollList/index.tsx +19 -3
  188. package/select/index.tsx +12 -4
  189. package/select/option.tsx +5 -1
  190. package/sideSheet/SideSheetContent.tsx +3 -3
  191. package/skeleton/index.tsx +1 -1
  192. package/space/index.tsx +1 -1
  193. package/spin/index.tsx +15 -9
  194. package/switch/index.tsx +9 -14
  195. package/table/Table.tsx +5 -3
  196. package/tabs/TabBar.tsx +1 -1
  197. package/tabs/TabPane.tsx +9 -4
  198. package/tagInput/index.tsx +2 -2
  199. package/timePicker/Combobox.tsx +6 -1
  200. package/toast/toast.tsx +3 -3
  201. package/transfer/index.tsx +1 -0
  202. package/tree/treeNode.tsx +1 -1
  203. package/treeSelect/index.tsx +15 -3
  204. package/typography/base.tsx +1 -1
  205. package/upload/index.tsx +107 -38
  206. package/yarn-error.log +26235 -0
@@ -163,7 +163,7 @@ export default class ModalContent extends BaseComponent<ModalContentReactProps,
163
163
  } = this.props;
164
164
  let closer;
165
165
  if (closable) {
166
- const iconType = closeIcon || <IconClose/>;
166
+ const iconType = closeIcon || <IconClose x-semi-prop="closeIcon" />;
167
167
  closer = (
168
168
  <Button
169
169
  aria-label="close"
@@ -182,7 +182,7 @@ export default class ModalContent extends BaseComponent<ModalContentReactProps,
182
182
 
183
183
  renderIcon = () => {
184
184
  const { icon } = this.props;
185
- return icon ? <span className={`${cssClasses.DIALOG}-icon-wrapper`}>{icon}</span> : null;
185
+ return icon ? <span className={`${cssClasses.DIALOG}-icon-wrapper`} x-semi-prop="icon">{icon}</span> : null;
186
186
  };
187
187
 
188
188
  renderHeader = () => {
@@ -197,8 +197,14 @@ export default class ModalContent extends BaseComponent<ModalContentReactProps,
197
197
  (
198
198
  <div className={`${cssClasses.DIALOG}-header`}>
199
199
  {icon}
200
- <Typography.Title heading={5} className={`${cssClasses.DIALOG}-title`}
201
- id={`${cssClasses.DIALOG}-title`}>{title}</Typography.Title>
200
+ <Typography.Title
201
+ heading={5}
202
+ className={`${cssClasses.DIALOG}-title`}
203
+ id={`${cssClasses.DIALOG}-title`}
204
+ x-semi-prop="title"
205
+ >
206
+ {title}
207
+ </Typography.Title>
202
208
  {closer}
203
209
  </div>
204
210
  );
@@ -216,16 +222,19 @@ export default class ModalContent extends BaseComponent<ModalContentReactProps,
216
222
  const closer = this.renderCloseBtn();
217
223
  const icon = this.renderIcon();
218
224
  const hasHeader = title !== null && title !== undefined || 'header' in this.props;
219
- return hasHeader ?
220
- <div className={bodyCls} id={`${cssClasses.DIALOG}-body`} style={bodyStyle}>{children}</div> :
221
- (
222
- <div className={`${cssClasses.DIALOG}-body-wrapper`}>
223
- {icon}
224
- <div className={bodyCls} style={bodyStyle}>{children}</div>
225
- {closer}
225
+ return hasHeader ? (
226
+ <div className={bodyCls} id={`${cssClasses.DIALOG}-body`} style={bodyStyle} x-semi-prop="children">
227
+ {children}
228
+ </div>
229
+ ) : (
230
+ <div className={`${cssClasses.DIALOG}-body-wrapper`}>
231
+ {icon}
232
+ <div className={bodyCls} style={bodyStyle} x-semi-prop="children">
233
+ {children}
226
234
  </div>
227
- );
228
-
235
+ {closer}
236
+ </div>
237
+ );
229
238
  };
230
239
 
231
240
  getDialogElement = () => {
@@ -248,7 +257,11 @@ export default class ModalContent extends BaseComponent<ModalContentReactProps,
248
257
  }
249
258
  const body = this.renderBody();
250
259
  const header = this.renderHeader();
251
- const footer = props.footer ? <div className={`${cssClasses.DIALOG}-footer`}>{props.footer}</div> : null;
260
+ const footer = props.footer ? (
261
+ <div className={`${cssClasses.DIALOG}-footer`} x-semi-prop="footer">
262
+ {props.footer}
263
+ </div>
264
+ ) : null;
252
265
  const dialogElement = (
253
266
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
254
267
  <div
@@ -106,7 +106,7 @@ class Notice extends BaseComponent<NoticeReactProps, NoticeState> {
106
106
  }
107
107
  if (iconType) {
108
108
  return (
109
- <div className={iconCls}>
109
+ <div className={iconCls} x-semi-prop="icon">
110
110
  {isSemiIcon(iconType) ? React.cloneElement(iconType, { size: iconType.props.size || 'large' }) : iconType}
111
111
  </div>
112
112
  );
@@ -170,14 +170,26 @@ class Notice extends BaseComponent<NoticeReactProps, NoticeState> {
170
170
  <div>{this.renderTypeIcon()}</div>
171
171
  <div className={`${prefixCls}-inner`}>
172
172
  <div className={`${prefixCls}-content-wrapper`}>
173
- {title ? <div id={titleID} className={`${prefixCls}-title`}>{title}</div> : ''}
174
- {content ? <div className={`${prefixCls}-content`}>{content}</div> : ''}
173
+ {title ? (
174
+ <div id={titleID} className={`${prefixCls}-title`} x-semi-prop="title">
175
+ {title}
176
+ </div>
177
+ ) : (
178
+ ''
179
+ )}
180
+ {content ? (
181
+ <div className={`${prefixCls}-content`} x-semi-prop="content">
182
+ {content}
183
+ </div>
184
+ ) : (
185
+ ''
186
+ )}
175
187
  </div>
176
188
  {showClose && (
177
189
  <Button
178
190
  className={`${prefixCls}-icon-close`}
179
191
  type="tertiary"
180
- icon={<IconClose/>}
192
+ icon={<IconClose />}
181
193
  theme="borderless"
182
194
  size="small"
183
195
  onClick={this.close}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-ui",
3
- "version": "2.12.0",
3
+ "version": "2.12.1-alpha.2",
4
4
  "description": "",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es/index.js",
@@ -14,12 +14,12 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@babel/runtime-corejs3": "^7.15.4",
17
- "@douyinfe/semi-animation": "2.12.0",
18
- "@douyinfe/semi-animation-react": "2.12.0",
19
- "@douyinfe/semi-foundation": "2.12.0",
20
- "@douyinfe/semi-icons": "2.12.0",
21
- "@douyinfe/semi-illustrations": "2.12.0",
22
- "@douyinfe/semi-theme-default": "2.12.0",
17
+ "@douyinfe/semi-animation": "2.12.1-alpha.2",
18
+ "@douyinfe/semi-animation-react": "2.12.1-alpha.2",
19
+ "@douyinfe/semi-foundation": "2.12.1-alpha.2",
20
+ "@douyinfe/semi-icons": "2.12.1-alpha.2",
21
+ "@douyinfe/semi-illustrations": "2.12.1-alpha.2",
22
+ "@douyinfe/semi-theme-default": "2.12.1-alpha.2",
23
23
  "@types/react-window": "^1.8.2",
24
24
  "async-validator": "^3.5.0",
25
25
  "classnames": "^2.2.6",
@@ -69,13 +69,13 @@
69
69
  ],
70
70
  "author": "",
71
71
  "license": "MIT",
72
- "gitHead": "250dbc61a1fe08552905accf4aba65eda83016ce",
72
+ "gitHead": "af5b8be827d8d1892c76b21ebea71ab0f13eaaa5",
73
73
  "devDependencies": {
74
74
  "@babel/plugin-proposal-decorators": "^7.15.8",
75
75
  "@babel/plugin-transform-runtime": "^7.15.8",
76
76
  "@babel/preset-env": "^7.15.8",
77
77
  "@babel/preset-react": "^7.14.5",
78
- "@douyinfe/semi-scss-compile": "2.12.0",
78
+ "@douyinfe/semi-scss-compile": "2.12.1-alpha.2",
79
79
  "@storybook/addon-knobs": "^6.3.1",
80
80
  "@types/lodash": "^4.14.176",
81
81
  "babel-loader": "^8.2.2",
@@ -216,7 +216,14 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
216
216
  [`${prefixCls}-item-disabled`]: prevDisabled,
217
217
  });
218
218
  return (
219
- <li role="button" aria-disabled={prevDisabled ? true : false} aria-label="Previous" onClick={e => !prevDisabled && this.foundation.goPrev(e)} className={preClassName}>
219
+ <li
220
+ role="button"
221
+ aria-disabled={prevDisabled ? true : false}
222
+ aria-label="Previous"
223
+ onClick={e => !prevDisabled && this.foundation.goPrev(e)}
224
+ className={preClassName}
225
+ x-semi-prop="prevText"
226
+ >
220
227
  {prevText || <IconChevronLeft size="large" />}
221
228
  </li>
222
229
  );
@@ -231,7 +238,14 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
231
238
  [`${prefixCls}-next`]: true,
232
239
  });
233
240
  return (
234
- <li role="button" aria-disabled={nextDisabled ? true : false} aria-label="Next" onClick={e => !nextDisabled && this.foundation.goNext(e)} className={nextClassName}>
241
+ <li
242
+ role="button"
243
+ aria-disabled={nextDisabled ? true : false}
244
+ aria-label="Next"
245
+ onClick={e => !nextDisabled && this.foundation.goNext(e)}
246
+ className={nextClassName}
247
+ x-semi-prop="prevText"
248
+ >
235
249
  {nextText || <IconChevronRight size="large" />}
236
250
  </li>
237
251
  );
@@ -174,12 +174,20 @@ export default class Popconfirm extends BaseComponent<PopconfirmProps, Popconfir
174
174
  <div className={popCardCls} onClick={this.stopImmediatePropagation} style={style}>
175
175
  <div className={`${prefixCls}-inner`}>
176
176
  <div className={`${prefixCls}-header`}>
177
- <i className={`${prefixCls}-header-icon`}>
177
+ <i className={`${prefixCls}-header-icon`} x-semi-prop="icon">
178
178
  {React.isValidElement(icon) ? icon : null}
179
179
  </i>
180
180
  <div className={`${prefixCls}-header-body`}>
181
- {showTitle ? <div className={`${prefixCls}-header-title`}>{title}</div> : null}
182
- {showContent ? <div className={`${prefixCls}-header-content`}>{content}</div> : null}
181
+ {showTitle ? (
182
+ <div className={`${prefixCls}-header-title`} x-semi-prop="title">
183
+ {title}
184
+ </div>
185
+ ) : null}
186
+ {showContent ? (
187
+ <div className={`${prefixCls}-header-content`} x-semi-prop="content">
188
+ {content}
189
+ </div>
190
+ ) : null}
183
191
  </div>
184
192
  <Button
185
193
  className={`${prefixCls}-btn-close`}
package/radio/radio.tsx CHANGED
@@ -228,8 +228,16 @@ class Radio extends BaseComponent<RadioProps, RadioState> {
228
228
  }, addonClassName);
229
229
  const renderContent = () => (
230
230
  <>
231
- {children ? <span className={addonCls} style={addonStyle} id={addonId}>{children}</span> : null}
232
- {extra && !isButtonRadio ? <div className={`${prefix}-extra`} id={extraId}>{extra}</div> : null}
231
+ {children ? (
232
+ <span className={addonCls} style={addonStyle} id={this.addonId} x-semi-prop="children">
233
+ {children}
234
+ </span>
235
+ ) : null}
236
+ {extra && !isButtonRadio ? (
237
+ <div className={`${prefix}-extra`} id={this.extraId} x-semi-prop="extra">
238
+ {extra}
239
+ </div>
240
+ ) : null}
233
241
  </>
234
242
  );
235
243
  return (
package/rating/item.tsx CHANGED
@@ -110,7 +110,7 @@ export default class Item extends PureComponent<RatingItemProps> {
110
110
  className={`${prefixCls}-wrapper`}
111
111
  >
112
112
  <div className={`${prefixCls}-first`} style={{ width: `${firstWidth * 100}%` }}>{content}</div>
113
- <div className={`${prefixCls}-second`}>{content}</div>
113
+ <div className={`${prefixCls}-second`} x-semi-prop="character">{content}</div>
114
114
  </div>
115
115
  </li>
116
116
  );
@@ -49,14 +49,30 @@ class ScrollList extends BaseComponent<ScrollListProps, {}> {
49
49
  <div className={clsWrapper} style={style}>
50
50
  {header ? (
51
51
  <div className={clsHeader}>
52
- <div className={`${clsHeader}-title`}>{header}</div>
52
+ <div
53
+ className={`${clsHeader}-title`}
54
+ x-semi-prop={this.props['x-semi-header-alias'] || "header"}
55
+ >
56
+ {header}
57
+ </div>
53
58
  <div className={`${clsWrapper}-line`} />
54
59
  </div>
55
60
  ) : null}
56
- <div className={`${clsWrapper}-body`} style={{ height: bodyHeight ? bodyHeight : '' }}>
61
+ <div
62
+ className={`${clsWrapper}-body`}
63
+ style={{ height: bodyHeight ? bodyHeight : '' }}
64
+ x-semi-prop="children"
65
+ >
57
66
  {children}
58
67
  </div>
59
- {footer ? <div className={`${clsWrapper}-footer`}>{footer}</div> : null}
68
+ {footer ? (
69
+ <div
70
+ className={`${clsWrapper}-footer`}
71
+ x-semi-prop={this.props['x-semi-footer-alias'] || "footer"}
72
+ >
73
+ {footer}
74
+ </div>
75
+ ) : null}
60
76
  </div>
61
77
  );
62
78
  }
package/select/index.tsx CHANGED
@@ -878,7 +878,11 @@ class Select extends BaseComponent<SelectProps, SelectState> {
878
878
  return (
879
879
  <>
880
880
  <div className={contentWrapperCls}>
881
- {<span className={spanCls}>{renderText || renderText === 0 ? renderText : placeholder}</span>}
881
+ {
882
+ <span className={spanCls} x-semi-prop="placeholder">
883
+ {renderText || renderText === 0 ? renderText : placeholder}
884
+ </span>
885
+ }
882
886
  {filterable && showInput ? this.renderInput() : null}
883
887
  </div>
884
888
  </>
@@ -1006,7 +1010,7 @@ class Select extends BaseComponent<SelectProps, SelectState> {
1006
1010
  [`${prefixcls}-suffix-text`]: suffix && isString(suffix),
1007
1011
  [`${prefixcls}-suffix-icon`]: isSemiIcon(suffix),
1008
1012
  });
1009
- return <div className={suffixWrapperCls}>{suffix}</div>;
1013
+ return <div className={suffixWrapperCls} x-semi-prop="suffix">{suffix}</div>;
1010
1014
  }
1011
1015
 
1012
1016
  renderPrefix() {
@@ -1020,7 +1024,11 @@ class Select extends BaseComponent<SelectProps, SelectState> {
1020
1024
  [`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode),
1021
1025
  });
1022
1026
 
1023
- return <div className={prefixWrapperCls} id={insetLabelId}>{labelNode}</div>;
1027
+ return (
1028
+ <div className={prefixWrapperCls} id={insetLabelId} x-semi-prop="prefix,insetLabel">
1029
+ {labelNode}
1030
+ </div>
1031
+ );
1024
1032
  }
1025
1033
 
1026
1034
  renderSelection() {
@@ -1067,7 +1075,7 @@ class Select extends BaseComponent<SelectProps, SelectState> {
1067
1075
  (selections.size || inputValue) && !disabled && (isHovering || isOpen);
1068
1076
 
1069
1077
  const arrowContent = showArrow ? (
1070
- <div className={`${prefixcls}-arrow`}>
1078
+ <div className={`${prefixcls}-arrow`} x-semi-prop="arrowIcon">
1071
1079
  {arrowIcon}
1072
1080
  </div>
1073
1081
  ) : (
package/select/option.tsx CHANGED
@@ -105,7 +105,11 @@ class Option extends PureComponent<OptionProps> {
105
105
  }
106
106
  return (
107
107
  <LocaleConsumer<Locale['Select']> componentName="Select">
108
- {(locale: Locale['Select']) => <div className={optionClassName}>{emptyContent || locale.emptyText}</div>}
108
+ {(locale: Locale['Select']) => (
109
+ <div className={optionClassName} x-semi-prop="emptyContent">
110
+ {emptyContent || locale.emptyText}
111
+ </div>
112
+ )}
109
113
  </LocaleConsumer>
110
114
  );
111
115
  }
@@ -88,7 +88,7 @@ export default class SideSheetContent extends React.PureComponent<SideSheetConte
88
88
  let header, closer;
89
89
  if (title) {
90
90
  header = (
91
- <div className={`${prefixCls}-title`}>
91
+ <div className={`${prefixCls}-title`} x-semi-prop="title">
92
92
  {this.props.title}
93
93
  </div>
94
94
  );
@@ -140,11 +140,11 @@ export default class SideSheetContent extends React.PureComponent<SideSheetConte
140
140
  >
141
141
  <div className={`${prefixCls}-content`}>
142
142
  {header}
143
- <div className={`${prefixCls}-body`} style={props.bodyStyle}>
143
+ <div className={`${prefixCls}-body`} style={props.bodyStyle} x-semi-prop="children">
144
144
  {props.children}
145
145
  </div>
146
146
  {props.footer ? (
147
- <div className={`${prefixCls}-footer`}>
147
+ <div className={`${prefixCls}-footer`} x-semi-prop="footer">
148
148
  {props.footer}
149
149
  </div>
150
150
  ) : null}
@@ -48,7 +48,7 @@ class Skeleton extends PureComponent<SkeletonProps> {
48
48
  let content;
49
49
  if (loading) {
50
50
  content = (
51
- <div className={skCls} style={style} {...others}>
51
+ <div className={skCls} style={style} {...others} x-semi-prop="placeholder">
52
52
  {placeholder}
53
53
  </div>
54
54
  );
package/space/index.tsx CHANGED
@@ -85,7 +85,7 @@ class Space extends PureComponent<SpaceProps> {
85
85
  });
86
86
  const childrenNodes = flatten(children);
87
87
  return (
88
- <div className={classNames} style={realStyle}>
88
+ <div className={classNames} style={realStyle} x-semi-prop="children">
89
89
  {childrenNodes}
90
90
  </div>
91
91
  );
package/spin/index.tsx CHANGED
@@ -95,14 +95,18 @@ class Spin extends BaseComponent<SpinProps, SpinState> {
95
95
  [`${prefixCls}-animate`]: loading,
96
96
  });
97
97
 
98
- return (
99
- loading ? (
100
- <div className={`${prefixCls}-wrapper`}>
101
- {indicator ? <div className={spinIconCls}>{indicator}</div> : <SpinIcon />}
102
- {tip ? <div>{tip}</div> : null}
103
- </div>
104
- ) : null
105
- );
98
+ return loading ? (
99
+ <div className={`${prefixCls}-wrapper`}>
100
+ {indicator ? (
101
+ <div className={spinIconCls} x-semi-prop="indicator">
102
+ {indicator}
103
+ </div>
104
+ ) : (
105
+ <SpinIcon />
106
+ )}
107
+ {tip ? <div x-semi-prop="tip">{tip}</div> : null}
108
+ </div>
109
+ ) : null;
106
110
  }
107
111
 
108
112
  render() {
@@ -122,7 +126,9 @@ class Spin extends BaseComponent<SpinProps, SpinState> {
122
126
  return (
123
127
  <div className={spinCls} style={style}>
124
128
  {this.renderSpin()}
125
- <div className={`${prefixCls}-children`} style={childStyle}>{children}</div>
129
+ <div className={`${prefixCls}-children`} style={childStyle} x-semi-prop="children">
130
+ {children}
131
+ </div>
126
132
  </div>
127
133
  );
128
134
  }
package/switch/index.tsx CHANGED
@@ -146,23 +146,18 @@ class Switch extends BaseComponent<SwitchProps, SwitchState> {
146
146
  const showUncheckedText = uncheckedText && !nativeControlChecked && size !== 'small';
147
147
  return (
148
148
  <div className={wrapperCls} style={style} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
149
- {
150
- loading
151
- ? (
152
- <Spin
153
- wrapperClassName={cssClasses.LOADING_SPIN}
154
- size={size === 'default' ? 'middle' : size}
155
- />
156
- )
157
- : <div className={cssClasses.KNOB} aria-hidden={true} />
158
- }
149
+ {loading ? (
150
+ <Spin wrapperClassName={cssClasses.LOADING_SPIN} size={size === 'default' ? 'middle' : size} />
151
+ ) : (
152
+ <div className={cssClasses.KNOB} aria-hidden={true} />
153
+ )}
159
154
  {showCheckedText ? (
160
- <div className={cssClasses.CHECKED_TEXT}>
155
+ <div className={cssClasses.CHECKED_TEXT} x-semi-prop="checkedText">
161
156
  {checkedText}
162
157
  </div>
163
158
  ) : null}
164
159
  {showUncheckedText ? (
165
- <div className={cssClasses.UNCHECKED_TEXT}>
160
+ <div className={cssClasses.UNCHECKED_TEXT} x-semi-prop="uncheckedText">
166
161
  {uncheckedText}
167
162
  </div>
168
163
  ) : null}
@@ -170,13 +165,13 @@ class Switch extends BaseComponent<SwitchProps, SwitchState> {
170
165
  {...switchProps}
171
166
  ref={this.switchRef}
172
167
  id={id}
173
- role='switch'
168
+ role="switch"
174
169
  aria-checked={nativeControlChecked}
175
170
  aria-invalid={this.props['aria-invalid']}
176
171
  aria-errormessage={this.props['aria-errormessage']}
177
172
  aria-label={this.props['aria-label']}
178
173
  aria-labelledby={this.props['aria-labelledby']}
179
- aria-describedby={this.props["aria-describedby"]}
174
+ aria-describedby={this.props['aria-describedby']}
180
175
  aria-disabled={this.props['disabled']}
181
176
  onChange={e => this.foundation.handleChange(e.target.checked, e)}
182
177
  onFocus={e => this.handleFocusVisible(e)}
package/table/Table.tsx CHANGED
@@ -1015,7 +1015,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
1015
1015
  }
1016
1016
 
1017
1017
  return isValidElement(title) || typeof title === 'string' ? (
1018
- <div className={`${prefixCls}-title`}>{title}</div>
1018
+ <div className={`${prefixCls}-title`} x-semi-prop="title">{title}</div>
1019
1019
  ) : null;
1020
1020
  };
1021
1021
 
@@ -1032,7 +1032,9 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
1032
1032
  <LocaleConsumer componentName="Table" key={'emptyText'}>
1033
1033
  {(locale: TableLocale, localeCode: string) => (
1034
1034
  <div className={wrapCls}>
1035
- <div className={`${prefixCls}-empty`}>{empty || locale.emptyText}</div>
1035
+ <div className={`${prefixCls}-empty`} x-semi-prop="empty">
1036
+ {empty || locale.emptyText}
1037
+ </div>
1036
1038
  </div>
1037
1039
  )}
1038
1040
  </LocaleConsumer>
@@ -1048,7 +1050,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
1048
1050
  }
1049
1051
 
1050
1052
  return isValidElement(footer) || typeof footer === 'string' ? (
1051
- <div className={`${prefixCls}-footer`} key="footer">
1053
+ <div className={`${prefixCls}-footer`} key="footer" x-semi-prop="footer">
1052
1054
  {footer}
1053
1055
  </div>
1054
1056
  ) : null;
package/tabs/TabBar.tsx CHANGED
@@ -70,7 +70,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
70
70
  if (tabBarExtraContent) {
71
71
  const tabBarStyle = { ...tabBarExtraContentDefaultStyle, ...tabBarExtraContentStyle };
72
72
  return (
73
- <div className={extraCls} style={tabBarStyle}>
73
+ <div className={extraCls} style={tabBarStyle} x-semi-prop="tabBarExtraContent">
74
74
  {tabBarExtraContent}
75
75
  </div>
76
76
  );
package/tabs/TabPane.tsx CHANGED
@@ -98,6 +98,7 @@ class TabPane extends PureComponent<TabPaneProps> {
98
98
  aria-hidden={active ? 'false' : 'true'}
99
99
  tabIndex={0}
100
100
  {...getDataAttr(restProps)}
101
+ x-semi-prop="children"
101
102
  >
102
103
  {motion ? (
103
104
  <TabPaneTransition
@@ -107,14 +108,18 @@ class TabPane extends PureComponent<TabPaneProps> {
107
108
  state={active ? 'enter' : 'leave'}
108
109
  >
109
110
  {(transitionStyle): ReactNode => (
110
- <div className={`${cssClasses.TABS_PANE_MOTION_OVERLAY}`} style={{ ...transitionStyle }}>
111
+ <div
112
+ className={`${cssClasses.TABS_PANE_MOTION_OVERLAY}`}
113
+ style={{ ...transitionStyle }}
114
+ x-semi-prop="children"
115
+ >
111
116
  {shouldRender ? children : null}
112
117
  </div>
113
118
  )}
114
119
  </TabPaneTransition>
115
- ) : (
116
- shouldRender ? children : null
117
- )}
120
+ ) : shouldRender ? (
121
+ children
122
+ ) : null}
118
123
  </div>
119
124
  );
120
125
  }
@@ -273,7 +273,7 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
273
273
  // eslint-disable-next-line max-len
274
274
  [`${prefixCls}-prefix-icon`]: React.isValidElement(prefix) && !(prefix && isString(prefix)),
275
275
  });
276
- return <div className={prefixWrapperCls}>{prefix}</div>;
276
+ return <div className={prefixWrapperCls} x-semi-prop="prefix">{prefix}</div>;
277
277
  }
278
278
 
279
279
  renderSuffix() {
@@ -286,7 +286,7 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
286
286
  // eslint-disable-next-line max-len
287
287
  [`${prefixCls}-suffix-icon`]: React.isValidElement(suffix) && !(suffix && isString(suffix)),
288
288
  });
289
- return <div className={suffixWrapperCls}>{suffix}</div>;
289
+ return <div className={suffixWrapperCls} x-semi-prop="suffix">{suffix}</div>;
290
290
  }
291
291
 
292
292
  renderTags() {
@@ -317,7 +317,12 @@ class Combobox extends BaseComponent<ComboboxProps, ComboboxState> {
317
317
  return (
318
318
  <LocaleConsumer componentName="TimePicker">
319
319
  {(locale: Locale['TimePicker'], localeCode: Locale['code']) => (
320
- <ScrollList header={panelHeader} footer={panelFooter}>
320
+ <ScrollList
321
+ header={panelHeader}
322
+ footer={panelFooter}
323
+ x-semi-header-alias="panelHeader"
324
+ x-semi-footer-alias="panelFooter"
325
+ >
321
326
  {this.renderAMPMSelect(locale, localeCode)}
322
327
  {this.renderHourSelect(value.getHours(), locale)}
323
328
  {this.renderMinuteSelect(value.getMinutes(), locale)}
package/toast/toast.tsx CHANGED
@@ -120,7 +120,7 @@ class Toast extends BaseComponent<ToastReactProps, ToastState> {
120
120
  const btnSize = 'small';
121
121
  return (
122
122
  <div
123
- role='alert'
123
+ role="alert"
124
124
  aria-label={`${type ? type : 'default'} type`}
125
125
  className={toastCls}
126
126
  style={style}
@@ -129,7 +129,7 @@ class Toast extends BaseComponent<ToastReactProps, ToastState> {
129
129
  >
130
130
  <div className={`${prefixCls}-content`}>
131
131
  {this.renderIcon()}
132
- <span className={`${prefixCls}-content-text`} style={textStyle}>
132
+ <span className={`${prefixCls}-content-text`} style={textStyle} x-semi-prop="content">
133
133
  {content}
134
134
  </span>
135
135
  {showClose && (
@@ -137,7 +137,7 @@ class Toast extends BaseComponent<ToastReactProps, ToastState> {
137
137
  <Button
138
138
  onClick={e => this.close(e)}
139
139
  type="tertiary"
140
- icon={<IconClose />}
140
+ icon={<IconClose x-semi-prop="icon" />}
141
141
  theme={btnTheme}
142
142
  size={btnSize}
143
143
  />
@@ -353,6 +353,7 @@ class Transfer extends BaseComponent<TransferProps, TransferState> {
353
353
  checked={checked}
354
354
  role="listitem"
355
355
  onChange={() => this.onSelectOrRemove(item)}
356
+ x-semi-children-alias={`dataSource[${index}].label`}
356
357
  >
357
358
  {item.label}
358
359
  </Checkbox>
package/tree/treeNode.tsx CHANGED
@@ -269,7 +269,7 @@ export default class TreeNode extends PureComponent<TreeNodeProps, TreeNodeState
269
269
  });
270
270
  return (
271
271
  <ul className={wrapperCls}>
272
- <li className={`${prefixcls}-label ${prefixcls}-label-empty`}>
272
+ <li className={`${prefixcls}-label ${prefixcls}-label-empty`} x-semi-prop="emptyContent">
273
273
  {emptyContent}
274
274
  </li>
275
275
  </ul>