@rainbow-oh/yee-c 0.2.0 → 0.4.0

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 (242) hide show
  1. package/dist/cjs/Button/button.js +2 -2
  2. package/dist/cjs/Button/style/index.less +23 -8
  3. package/dist/cjs/Card/demo/collapsible.js +2 -1
  4. package/dist/cjs/Carousel/demo/arrows.js +1 -1
  5. package/dist/cjs/Carousel/demo/autoplay.js +1 -1
  6. package/dist/cjs/Carousel/demo/effect.js +1 -1
  7. package/dist/cjs/Carousel/demo/position.js +1 -1
  8. package/dist/cjs/Config-Provider/interface.d.ts +4 -0
  9. package/dist/cjs/Form/Field.js +32 -10
  10. package/dist/cjs/Form/demo/basic.js +56 -81
  11. package/dist/cjs/Form/demo/form-table.js +68 -67
  12. package/dist/cjs/Form/interface.d.ts +17 -1
  13. package/dist/cjs/Menu/style/index.less +4 -2
  14. package/dist/cjs/Radio/demo/button.js +1 -0
  15. package/dist/cjs/Radio/interface.d.ts +4 -0
  16. package/dist/cjs/Radio/radio-group.js +28 -14
  17. package/dist/cjs/Radio/radio.js +3 -1
  18. package/dist/cjs/Radio/style/index.less +19 -5
  19. package/dist/cjs/Segmented/demo/basic.d.ts +3 -0
  20. package/dist/cjs/Segmented/demo/basic.js +51 -0
  21. package/dist/cjs/Segmented/demo/block.d.ts +3 -0
  22. package/dist/cjs/Segmented/demo/block.js +49 -0
  23. package/dist/cjs/Segmented/demo/disabled.d.ts +3 -0
  24. package/dist/cjs/Segmented/demo/disabled.js +47 -0
  25. package/dist/cjs/Segmented/demo/size.d.ts +3 -0
  26. package/dist/cjs/Segmented/demo/size.js +37 -0
  27. package/dist/cjs/Segmented/demo/variant.d.ts +3 -0
  28. package/dist/cjs/Segmented/demo/variant.js +50 -0
  29. package/dist/cjs/Segmented/index.d.ts +3 -0
  30. package/dist/cjs/Segmented/index.js +36 -0
  31. package/dist/cjs/Segmented/interface.d.ts +87 -0
  32. package/dist/cjs/Segmented/interface.js +17 -0
  33. package/dist/cjs/Segmented/segmented.d.ts +5 -0
  34. package/dist/cjs/Segmented/segmented.js +180 -0
  35. package/dist/cjs/Segmented/style/index.less +128 -0
  36. package/dist/cjs/Spin/spin.js +2 -1
  37. package/dist/cjs/Steps/step.js +1 -1
  38. package/dist/cjs/Steps/style/index.less +8 -2
  39. package/dist/cjs/Switch/demo/content.js +22 -1
  40. package/dist/cjs/Switch/style/index.less +16 -0
  41. package/dist/cjs/Switch/switch.js +9 -2
  42. package/dist/cjs/Table/interface.d.ts +5 -1
  43. package/dist/cjs/Table/theader/cell.js +4 -5
  44. package/dist/cjs/Tag/demo/size.js +1 -1
  45. package/dist/cjs/Tag/demo/variant.d.ts +3 -0
  46. package/dist/cjs/Tag/demo/variant.js +39 -0
  47. package/dist/cjs/Tag/interface.d.ts +5 -0
  48. package/dist/cjs/Tag/style/index.less +109 -25
  49. package/dist/cjs/Tag/tag.js +3 -0
  50. package/dist/cjs/Tour/demo/basic.d.ts +3 -0
  51. package/dist/cjs/Tour/demo/basic.js +69 -0
  52. package/dist/cjs/Tour/demo/indicators.d.ts +3 -0
  53. package/dist/cjs/Tour/demo/indicators.js +76 -0
  54. package/dist/cjs/Tour/demo/placement.d.ts +3 -0
  55. package/dist/cjs/Tour/demo/placement.js +80 -0
  56. package/dist/cjs/Tour/demo/scroll.d.ts +3 -0
  57. package/dist/cjs/Tour/demo/scroll.js +72 -0
  58. package/dist/cjs/Tour/index.d.ts +3 -0
  59. package/dist/cjs/Tour/index.js +36 -0
  60. package/dist/cjs/Tour/interface.d.ts +118 -0
  61. package/dist/cjs/Tour/interface.js +17 -0
  62. package/dist/cjs/Tour/style/index.less +103 -0
  63. package/dist/cjs/Tour/tour.d.ts +5 -0
  64. package/dist/cjs/Tour/tour.js +403 -0
  65. package/dist/cjs/Tree/demo/checkable.js +6 -6
  66. package/dist/cjs/index.d.ts +4 -0
  67. package/dist/cjs/index.js +6 -0
  68. package/dist/cjs/locale/interface.d.ts +7 -0
  69. package/dist/cjs/locale/lang/en_US.js +6 -0
  70. package/dist/cjs/locale/lang/ja_JP.js +6 -0
  71. package/dist/cjs/locale/lang/zh_CN.js +6 -0
  72. package/dist/cjs/locale/lang/zh_TW.js +6 -0
  73. package/dist/cjs/style/color.blue.css +1 -1
  74. package/dist/cjs/style/color.crimson.css +1 -1
  75. package/dist/cjs/style/color.css +21 -4
  76. package/dist/cjs/style/size.css +38 -0
  77. package/dist/cjs/style/themes.css +3 -3
  78. package/dist/cjs/style/variables.css +60 -5
  79. package/dist/cjs/version.d.ts +1 -1
  80. package/dist/cjs/version.js +1 -1
  81. package/dist/esm/Button/button.js +2 -2
  82. package/dist/esm/Button/style/index.less +23 -8
  83. package/dist/esm/Card/demo/collapsible.js +2 -1
  84. package/dist/esm/Carousel/demo/arrows.js +1 -1
  85. package/dist/esm/Carousel/demo/autoplay.js +1 -1
  86. package/dist/esm/Carousel/demo/effect.js +1 -1
  87. package/dist/esm/Carousel/demo/position.js +1 -1
  88. package/dist/esm/Config-Provider/interface.d.ts +4 -0
  89. package/dist/esm/Form/Field.js +11 -4
  90. package/dist/esm/Form/demo/basic.js +2 -18
  91. package/dist/esm/Form/demo/form-table.js +4 -10
  92. package/dist/esm/Form/interface.d.ts +17 -1
  93. package/dist/esm/Menu/style/index.less +4 -2
  94. package/dist/esm/Radio/demo/button.js +1 -0
  95. package/dist/esm/Radio/interface.d.ts +4 -0
  96. package/dist/esm/Radio/radio-group.js +9 -2
  97. package/dist/esm/Radio/radio.js +3 -1
  98. package/dist/esm/Radio/style/index.less +19 -5
  99. package/dist/esm/Segmented/demo/basic.d.ts +3 -0
  100. package/dist/esm/Segmented/demo/basic.js +33 -0
  101. package/dist/esm/Segmented/demo/block.d.ts +3 -0
  102. package/dist/esm/Segmented/demo/block.js +29 -0
  103. package/dist/esm/Segmented/demo/disabled.d.ts +3 -0
  104. package/dist/esm/Segmented/demo/disabled.js +22 -0
  105. package/dist/esm/Segmented/demo/size.d.ts +3 -0
  106. package/dist/esm/Segmented/demo/size.js +15 -0
  107. package/dist/esm/Segmented/demo/variant.d.ts +3 -0
  108. package/dist/esm/Segmented/demo/variant.js +49 -0
  109. package/dist/esm/Segmented/index.d.ts +3 -0
  110. package/dist/esm/Segmented/index.js +2 -0
  111. package/dist/esm/Segmented/interface.d.ts +87 -0
  112. package/dist/esm/Segmented/interface.js +1 -0
  113. package/dist/esm/Segmented/segmented.d.ts +5 -0
  114. package/dist/esm/Segmented/segmented.js +112 -0
  115. package/dist/esm/Segmented/style/index.less +128 -0
  116. package/dist/esm/Spin/spin.js +2 -1
  117. package/dist/esm/Steps/step.js +4 -1
  118. package/dist/esm/Steps/style/index.less +8 -2
  119. package/dist/esm/Switch/demo/content.js +12 -3
  120. package/dist/esm/Switch/style/index.less +16 -0
  121. package/dist/esm/Switch/switch.js +7 -5
  122. package/dist/esm/Table/interface.d.ts +5 -1
  123. package/dist/esm/Table/theader/cell.js +2 -3
  124. package/dist/esm/Tag/demo/size.js +6 -2
  125. package/dist/esm/Tag/demo/variant.d.ts +3 -0
  126. package/dist/esm/Tag/demo/variant.js +48 -0
  127. package/dist/esm/Tag/interface.d.ts +5 -0
  128. package/dist/esm/Tag/style/index.less +109 -25
  129. package/dist/esm/Tag/tag.js +4 -2
  130. package/dist/esm/Tour/demo/basic.d.ts +3 -0
  131. package/dist/esm/Tour/demo/basic.js +69 -0
  132. package/dist/esm/Tour/demo/indicators.d.ts +3 -0
  133. package/dist/esm/Tour/demo/indicators.js +73 -0
  134. package/dist/esm/Tour/demo/placement.d.ts +3 -0
  135. package/dist/esm/Tour/demo/placement.js +53 -0
  136. package/dist/esm/Tour/demo/scroll.d.ts +3 -0
  137. package/dist/esm/Tour/demo/scroll.js +58 -0
  138. package/dist/esm/Tour/index.d.ts +3 -0
  139. package/dist/esm/Tour/index.js +2 -0
  140. package/dist/esm/Tour/interface.d.ts +118 -0
  141. package/dist/esm/Tour/interface.js +1 -0
  142. package/dist/esm/Tour/style/index.less +103 -0
  143. package/dist/esm/Tour/tour.d.ts +5 -0
  144. package/dist/esm/Tour/tour.js +383 -0
  145. package/dist/esm/Tree/demo/checkable.js +6 -6
  146. package/dist/esm/index.d.ts +4 -0
  147. package/dist/esm/index.js +4 -0
  148. package/dist/esm/locale/interface.d.ts +7 -0
  149. package/dist/esm/locale/lang/en_US.js +6 -0
  150. package/dist/esm/locale/lang/ja_JP.js +6 -0
  151. package/dist/esm/locale/lang/zh_CN.js +6 -0
  152. package/dist/esm/locale/lang/zh_TW.js +6 -0
  153. package/dist/esm/style/color.blue.css +1 -1
  154. package/dist/esm/style/color.crimson.css +1 -1
  155. package/dist/esm/style/color.css +21 -4
  156. package/dist/esm/style/size.css +38 -0
  157. package/dist/esm/style/themes.css +3 -3
  158. package/dist/esm/style/variables.css +60 -5
  159. package/dist/esm/version.d.ts +1 -1
  160. package/dist/esm/version.js +1 -1
  161. package/dist/umd/yee-c.min.css +4 -4
  162. package/dist/umd/yee-c.min.js +1 -1
  163. package/package.json +1 -1
  164. package/src/Button/button.tsx +2 -2
  165. package/src/Button/style/index.less +23 -8
  166. package/src/Card/demo/collapsible.tsx +1 -0
  167. package/src/Carousel/demo/arrows.tsx +1 -1
  168. package/src/Carousel/demo/autoplay.tsx +1 -1
  169. package/src/Carousel/demo/effect.tsx +1 -1
  170. package/src/Carousel/demo/position.tsx +1 -1
  171. package/src/Config-Provider/index.en-US.md +2 -0
  172. package/src/Config-Provider/index.zh-CN.md +2 -0
  173. package/src/Config-Provider/interface.ts +4 -0
  174. package/src/Form/Field.tsx +30 -11
  175. package/src/Form/demo/basic.tsx +2 -24
  176. package/src/Form/demo/form-table.tsx +16 -13
  177. package/src/Form/index.en-US.md +4 -0
  178. package/src/Form/index.zh-CN.md +4 -0
  179. package/src/Form/interface.ts +17 -1
  180. package/src/Menu/style/index.less +4 -2
  181. package/src/Radio/demo/button.tsx +1 -0
  182. package/src/Radio/index.en-US.md +2 -0
  183. package/src/Radio/index.zh-CN.md +2 -0
  184. package/src/Radio/interface.ts +4 -0
  185. package/src/Radio/radio-group.tsx +9 -1
  186. package/src/Radio/radio.tsx +2 -1
  187. package/src/Radio/style/index.less +19 -5
  188. package/src/Segmented/demo/basic.tsx +24 -0
  189. package/src/Segmented/demo/block.tsx +17 -0
  190. package/src/Segmented/demo/disabled.tsx +18 -0
  191. package/src/Segmented/demo/size.tsx +10 -0
  192. package/src/Segmented/demo/variant.tsx +28 -0
  193. package/src/Segmented/index.en-US.md +49 -0
  194. package/src/Segmented/index.ts +12 -0
  195. package/src/Segmented/index.zh-CN.md +49 -0
  196. package/src/Segmented/interface.ts +92 -0
  197. package/src/Segmented/segmented.tsx +136 -0
  198. package/src/Segmented/style/index.less +128 -0
  199. package/src/Spin/spin.tsx +1 -0
  200. package/src/Steps/step.tsx +1 -1
  201. package/src/Steps/style/index.less +8 -2
  202. package/src/Switch/demo/content.tsx +15 -5
  203. package/src/Switch/style/index.less +16 -0
  204. package/src/Switch/switch.tsx +14 -6
  205. package/src/Table/index.en-US.md +1 -0
  206. package/src/Table/index.zh-CN.md +1 -0
  207. package/src/Table/interface.ts +5 -1
  208. package/src/Table/theader/cell.tsx +2 -9
  209. package/src/Tag/demo/size.tsx +2 -2
  210. package/src/Tag/demo/variant.tsx +47 -0
  211. package/src/Tag/index.en-US.md +2 -0
  212. package/src/Tag/index.zh-CN.md +2 -0
  213. package/src/Tag/interface.ts +5 -0
  214. package/src/Tag/style/index.less +109 -25
  215. package/src/Tag/tag.tsx +2 -0
  216. package/src/Tour/demo/basic.tsx +52 -0
  217. package/src/Tour/demo/indicators.tsx +63 -0
  218. package/src/Tour/demo/placement.tsx +55 -0
  219. package/src/Tour/demo/scroll.tsx +49 -0
  220. package/src/Tour/index.en-US.md +61 -0
  221. package/src/Tour/index.ts +10 -0
  222. package/src/Tour/index.zh-CN.md +61 -0
  223. package/src/Tour/interface.ts +126 -0
  224. package/src/Tour/style/index.less +103 -0
  225. package/src/Tour/tour.tsx +399 -0
  226. package/src/Tree/demo/checkable.tsx +6 -6
  227. package/src/index.ts +6 -0
  228. package/src/locale/interface.ts +9 -0
  229. package/src/locale/lang/en_US.ts +7 -0
  230. package/src/locale/lang/ja_JP.ts +7 -0
  231. package/src/locale/lang/zh_CN.ts +7 -0
  232. package/src/locale/lang/zh_TW.ts +7 -0
  233. package/src/style/color.blue.css +1 -1
  234. package/src/style/color.crimson.css +1 -1
  235. package/src/style/color.css +21 -4
  236. package/src/style/size.css +38 -0
  237. package/src/version.ts +1 -1
  238. package/dist/cjs/utils/x.d.ts +0 -11
  239. package/dist/cjs/utils/x.js +0 -51
  240. package/dist/esm/utils/x.d.ts +0 -11
  241. package/dist/esm/utils/x.js +0 -49
  242. package/src/utils/x.ts +0 -33
@@ -43,6 +43,7 @@ toc: 'content'
43
43
  | columns | `ColumnProps[]` | 表格列的配置信息 | - |
44
44
  | children | `Array<React.ReactElement<ColumnProps>> \| React.ReactElement<ColumnProps>` | 子元素 | - |
45
45
  | locale | `Record<string, string>` | 提示信息 | - |
46
+ | noData | `React.ReactNode` | 无数据时展示的内容 | - |
46
47
  | dataSource | `Array<Record<string, any>>` | 数据 | - |
47
48
  | footer | `React.ReactNode \| (() => React.ReactNode)` | 表格底部 | - |
48
49
  | loading | `boolean` | 加载状态 | - |
@@ -267,7 +267,7 @@ export interface ColumnProps {
267
267
  * Custom render cell content
268
268
  */
269
269
  render?: (
270
- record: HeadCellProps | Record<string, unknown>,
270
+ record: Record<string, unknown>,
271
271
  rowIndex: number,
272
272
  ) => React.ReactNode;
273
273
  }
@@ -492,6 +492,10 @@ export interface TableProps
492
492
  * Locale text, including sort and empty data hints
493
493
  */
494
494
  locale?: Record<string, string>;
495
+ /**
496
+ * Content displayed when no data is available
497
+ * */
498
+ noData?: React.ReactNode;
495
499
  /**
496
500
  * Data
497
501
  */
@@ -29,7 +29,6 @@ const HeadCell: React.FC<HeadCellProps> = (props) => {
29
29
  onHeaderCell,
30
30
  onSort,
31
31
  onInternalFilter,
32
- render,
33
32
  ...rest
34
33
  } = props;
35
34
 
@@ -117,14 +116,8 @@ const HeadCell: React.FC<HeadCellProps> = (props) => {
117
116
  className={`${prefixCls}-thead-cell`}
118
117
  style={{ justifyContent: align }}
119
118
  >
120
- {render ? (
121
- render(props, 0)
122
- ) : (
123
- <>
124
- {renderTitle()}
125
- {renderFilter()}
126
- </>
127
- )}
119
+ {renderTitle()}
120
+ {renderFilter()}
128
121
  </div>
129
122
  );
130
123
  };
@@ -4,13 +4,13 @@ import React from 'react';
4
4
  export default () => {
5
5
  return (
6
6
  <Space direction="vertical">
7
- <Space>
7
+ <Space block>
8
8
  <Tag size="small">Small</Tag>
9
9
  <Tag size="default">Default</Tag>
10
10
  <Tag size="large">Large</Tag>
11
11
  </Space>
12
12
 
13
- <Space>
13
+ <Space block>
14
14
  <Tag size="small" status="success">
15
15
  Small Success
16
16
  </Tag>
@@ -0,0 +1,47 @@
1
+ import { Space, Tag } from '@rainbow-oh/yee-c';
2
+ import React from 'react';
3
+
4
+ export default () => {
5
+ return (
6
+ <Space direction="vertical">
7
+ <Space block>
8
+ <Tag variant="filled">Filled</Tag>
9
+ <Tag variant="solid">Solid</Tag>
10
+ <Tag variant="outlined">Outlined</Tag>
11
+ </Space>
12
+ <Space block>
13
+ <Tag variant="filled" status="success">
14
+ Success
15
+ </Tag>
16
+ <Tag variant="solid" status="success">
17
+ Success
18
+ </Tag>
19
+ <Tag variant="outlined" status="success">
20
+ Success
21
+ </Tag>
22
+ </Space>
23
+ <Space block>
24
+ <Tag variant="filled" status="warning">
25
+ Warning
26
+ </Tag>
27
+ <Tag variant="solid" status="warning">
28
+ Warning
29
+ </Tag>
30
+ <Tag variant="outlined" status="warning">
31
+ Warning
32
+ </Tag>
33
+ </Space>
34
+ <Space block>
35
+ <Tag variant="filled" status="error">
36
+ Error
37
+ </Tag>
38
+ <Tag variant="solid" status="error">
39
+ Error
40
+ </Tag>
41
+ <Tag variant="outlined" status="error">
42
+ Error
43
+ </Tag>
44
+ </Space>
45
+ </Space>
46
+ );
47
+ };
@@ -16,6 +16,7 @@ Tag for categorizing or markup.
16
16
 
17
17
  <code src="./demo/basic.tsx" title="Basic" description="Basic usage of Tag"></code>
18
18
  <code src="./demo/type.tsx" title="Type" description="Different types of Tag"></code>
19
+ <code src="./demo/variant.tsx" title="Variant" description="Three tag styles: filled, solid, outlined"></code>
19
20
  <code src="./demo/closable.tsx" title="Closable" description="Closable Tag"></code>
20
21
  <code src="./demo/size.tsx" title="Size" description="Different sizes of Tag"></code>
21
22
  <code src="./demo/checkable.tsx" title="Checkable" description="Checkable Tag"></code>
@@ -37,6 +38,7 @@ Tag for categorizing or markup.
37
38
  | closable | `boolean \| React.ReactNode` | Whether closable or custom close icon | - |
38
39
  | status | `TagType` | Built-in status | - |
39
40
  | dashed | `boolean` | Whether dashed border | - |
41
+ | variant | `'filled' \| 'solid' \| 'outlined'` | Tag style variant | `filled` |
40
42
  | size | `'small' \| 'default' \| 'large'` | Size | `default` |
41
43
  | icon | `React.ReactNode` | Icon | - |
42
44
  | checkable | `boolean` | Whether checkable | - |
@@ -16,6 +16,7 @@ toc: 'content'
16
16
 
17
17
  <code src="./demo/basic.tsx" title="基础用法" description="Tag的基础用法"></code>
18
18
  <code src="./demo/type.tsx" title="类型" description="不同类型的标签"></code>
19
+ <code src="./demo/variant.tsx" title="变体" description="三种风格的标签:filled、solid、outlined"></code>
19
20
  <code src="./demo/closable.tsx" title="可关闭" description="可关闭的标签"></code>
20
21
  <code src="./demo/size.tsx" title="尺寸" description="不同尺寸的标签"></code>
21
22
  <code src="./demo/checkable.tsx" title="可选择" description="可选择的标签"></code>
@@ -37,6 +38,7 @@ toc: 'content'
37
38
  | closable | `boolean \| React.ReactNode` | 是否可关闭,也可自定义关闭图标 | - |
38
39
  | status | `TagType` | 内置状态 | - |
39
40
  | dashed | `boolean` | 是否为虚线 | - |
41
+ | variant | `'filled' \| 'solid' \| 'outlined'` | 标签风格变体 | `filled` |
40
42
  | size | `'small' \| 'default' \| 'large'` | 尺寸 | `default` |
41
43
  | icon | `React.ReactNode` | 设置图标 | - |
42
44
  | checkable | `boolean` | 是否可选中 | - |
@@ -59,6 +59,11 @@ export interface TagProps extends DataAttributeProps {
59
59
  * Whether checkable
60
60
  */
61
61
  checkable?: boolean;
62
+ /**
63
+ * tag variant
64
+ * @default filled
65
+ * */
66
+ variant?: 'filled' | 'solid' | 'outlined';
62
67
  /**
63
68
  * Set checked state
64
69
  */
@@ -5,47 +5,131 @@
5
5
  align-items: center;
6
6
  box-sizing: content-box;
7
7
  max-width: 100%;
8
+ white-space: nowrap;
8
9
  height: var(--yee-tag-height);
9
10
  padding: var(--yee-tag-padding);
10
- color: var(--yee-tag-color);
11
11
  font-size: var(--yee-tag-font-size);
12
12
  line-height: var(--yee-tag-line-height);
13
- background-color: var(--yee-tag-item-bg-color);
14
13
  background-clip: padding-box;
15
14
  border: var(--yee-tag-border-width) solid var(--yee-tag-border-color);
16
15
  border-radius: var(--yee-tag-border-radius);
17
16
 
18
- &-info {
19
- color: var(--yee-tag-info-color);
20
- background-color: var(--yee-tag-info-bg-color);
21
- border-color: var(--yee-tag-info-border-color);
22
- }
17
+ // ============ 变体 variant ============
18
+ // filled:浅色底 + 彩色字(默认)
19
+ &-filled {
20
+ color: var(--yee-tag-color);
21
+ background-color: var(--yee-tag-item-bg-color);
22
+ border-color: var(--yee-tag-border-color);
23
23
 
24
- &-success {
25
- color: var(--yee-tag-success-color);
26
- background-color: var(--yee-tag-success-bg-color);
27
- border-color: var(--yee-tag-success-border-color);
28
- }
24
+ &@{pls}-info {
25
+ color: var(--yee-tag-info-color);
26
+ background-color: var(--yee-tag-info-bg-color);
27
+ border-color: var(--yee-tag-info-border-color);
28
+ }
29
+
30
+ &@{pls}-success {
31
+ color: var(--yee-tag-success-color);
32
+ background-color: var(--yee-tag-success-bg-color);
33
+ border-color: var(--yee-tag-success-border-color);
34
+ }
35
+
36
+ &@{pls}-warning {
37
+ color: var(--yee-tag-warning-color);
38
+ background-color: var(--yee-tag-warning-bg-color);
39
+ border-color: var(--yee-tag-warning-border-color);
40
+ }
29
41
 
30
- &-warning {
31
- color: var(--yee-tag-warning-color);
32
- background-color: var(--yee-tag-warning-bg-color);
33
- border-color: var(--yee-tag-warning-border-color);
42
+ &@{pls}-error {
43
+ color: var(--yee-tag-error-color);
44
+ background-color: var(--yee-tag-error-bg-color);
45
+ border-color: var(--yee-tag-error-border-color);
46
+ }
47
+
48
+ &@{pls}-disabled {
49
+ color: var(--yee-tag-disabled-color);
50
+ background-color: var(--yee-tag-disabled-bg-color);
51
+ border-color: var(--yee-tag-disabled-border-color);
52
+ cursor: not-allowed;
53
+ }
34
54
  }
35
55
 
36
- &-error {
37
- color: var(--yee-tag-error-color);
38
- background-color: var(--yee-tag-error-bg-color);
39
- border-color: var(--yee-tag-error-border-color);
56
+ // solid:纯色底 + 白字
57
+ &-solid {
58
+ color: var(--yee-tag-solid-color, #fff);
59
+ background-color: var(--yee-tag-color);
60
+ border-color: transparent;
61
+
62
+ &@{pls}-info {
63
+ color: var(--yee-tag-solid-color, #fff);
64
+ background-color: var(--yee-tag-info-color);
65
+ border-color: transparent;
66
+ }
67
+
68
+ &@{pls}-success {
69
+ color: var(--yee-tag-solid-color, #fff);
70
+ background-color: var(--yee-tag-success-color);
71
+ border-color: transparent;
72
+ }
73
+
74
+ &@{pls}-warning {
75
+ color: var(--yee-tag-solid-color, #fff);
76
+ background-color: var(--yee-tag-warning-color);
77
+ border-color: transparent;
78
+ }
79
+
80
+ &@{pls}-error {
81
+ color: var(--yee-tag-solid-color, #fff);
82
+ background-color: var(--yee-tag-error-color);
83
+ border-color: transparent;
84
+ }
85
+
86
+ &@{pls}-disabled {
87
+ color: var(--yee-tag-solid-color, #fff);
88
+ background-color: var(--yee-tag-disabled-color);
89
+ border-color: transparent;
90
+ cursor: not-allowed;
91
+ }
40
92
  }
41
93
 
42
- &-disabled {
43
- color: var(--yee-tag-disabled-color);
44
- background-color: var(--yee-tag-disabled-bg-color);
45
- border-color: var(--yee-tag-disabled-border-color);
46
- cursor: not-allowed;
94
+ // outlined:透明底 + 彩色字 + 彩色描边
95
+ &-outlined {
96
+ color: var(--yee-tag-color);
97
+ background-color: transparent;
98
+ border-color: var(--yee-tag-border-color);
99
+
100
+ &@{pls}-info {
101
+ color: var(--yee-tag-info-color);
102
+ background-color: transparent;
103
+ border-color: var(--yee-tag-info-color);
104
+ }
105
+
106
+ &@{pls}-success {
107
+ color: var(--yee-tag-success-color);
108
+ background-color: transparent;
109
+ border-color: var(--yee-tag-success-color);
110
+ }
111
+
112
+ &@{pls}-warning {
113
+ color: var(--yee-tag-warning-color);
114
+ background-color: transparent;
115
+ border-color: var(--yee-tag-warning-color);
116
+ }
117
+
118
+ &@{pls}-error {
119
+ color: var(--yee-tag-error-color);
120
+ background-color: transparent;
121
+ border-color: var(--yee-tag-error-color);
122
+ }
123
+
124
+ &@{pls}-disabled {
125
+ color: var(--yee-tag-disabled-color);
126
+ background-color: transparent;
127
+ border-color: var(--yee-tag-disabled-color);
128
+ cursor: not-allowed;
129
+ }
47
130
  }
48
131
 
132
+ // ============ 其他修饰 ============
49
133
  &-dashed {
50
134
  background-color: var(--yee-tag-item-dashed-bg-color);
51
135
  border-style: dashed;
package/src/Tag/tag.tsx CHANGED
@@ -24,6 +24,7 @@ const Tag = forwardRef(
24
24
  icon,
25
25
  classNames,
26
26
  styles,
27
+ variant = 'filled',
27
28
  onClose,
28
29
  onChange,
29
30
  ...rest
@@ -37,6 +38,7 @@ const Tag = forwardRef(
37
38
 
38
39
  const cls = clsx(
39
40
  prefixCls,
41
+ [`${prefixCls}-${variant}`],
40
42
  {
41
43
  [`${prefixCls}-${status}`]: status,
42
44
  [`${prefixCls}-dashed`]: dashed,
@@ -0,0 +1,52 @@
1
+ import { Button, Space, Tour } from '@rainbow-oh/yee-c';
2
+ import React, { useRef, useState } from 'react';
3
+
4
+ export default () => {
5
+ const [open, setOpen] = useState(false);
6
+ const startRef = useRef<HTMLDivElement>(null);
7
+ const midRef = useRef<HTMLDivElement>(null);
8
+ const endRef = useRef<HTMLDivElement>(null);
9
+
10
+ return (
11
+ <Space direction="vertical">
12
+ <Space>
13
+ <div ref={startRef} style={{ display: 'inline-block' }}>
14
+ <Button type="primary" onClick={() => setOpen(true)}>
15
+ 开始引导
16
+ </Button>
17
+ </div>
18
+ <div ref={midRef} style={{ display: 'inline-block' }}>
19
+ <Button>导出</Button>
20
+ </div>
21
+ <div ref={endRef} style={{ display: 'inline-block' }}>
22
+ <Button>设置</Button>
23
+ </div>
24
+ </Space>
25
+
26
+ <Tour
27
+ open={open}
28
+ onClose={() => setOpen(false)}
29
+ onFinish={() => setOpen(false)}
30
+ steps={[
31
+ {
32
+ target: () => startRef.current,
33
+ title: '欢迎使用',
34
+ description: '点击此处开始你的操作流程。',
35
+ },
36
+ {
37
+ target: () => midRef.current,
38
+ title: '导出数据',
39
+ description: '在这里可以将数据导出为文件。',
40
+ placement: 'bottom',
41
+ },
42
+ {
43
+ target: () => endRef.current,
44
+ title: '系统设置',
45
+ description: '配置系统参数。点击「完成」结束引导。',
46
+ placement: 'left',
47
+ },
48
+ ]}
49
+ />
50
+ </Space>
51
+ );
52
+ };
@@ -0,0 +1,63 @@
1
+ import { Button, Space, Tour } from '@rainbow-oh/yee-c';
2
+ import React, { useRef, useState } from 'react';
3
+
4
+ export default () => {
5
+ const [open, setOpen] = useState(false);
6
+ const aRef = useRef<HTMLDivElement>(null);
7
+ const bRef = useRef<HTMLDivElement>(null);
8
+
9
+ return (
10
+ <Space direction="vertical">
11
+ <Space>
12
+ <div ref={aRef} style={{ display: 'inline-block' }}>
13
+ <Button>导入</Button>
14
+ </div>
15
+ <div ref={bRef} style={{ display: 'inline-block' }}>
16
+ <Button>筛选</Button>
17
+ </div>
18
+ <Button type="primary" onClick={() => setOpen(true)}>
19
+ 开始
20
+ </Button>
21
+ </Space>
22
+
23
+ <Tour
24
+ open={open}
25
+ onClose={() => setOpen(false)}
26
+ onFinish={() => setOpen(false)}
27
+ indicatorsRender={(current, total) => (
28
+ <>
29
+ {Array.from({ length: total }).map((_, i) => (
30
+ <span
31
+ key={i}
32
+ style={{
33
+ display: 'inline-block',
34
+ width: 8,
35
+ height: 8,
36
+ marginInlineEnd: 4,
37
+ borderRadius: '50%',
38
+ background:
39
+ i === current
40
+ ? 'var(--yee-primary-color)'
41
+ : 'var(--yee-border-color)',
42
+ transition: 'background 0.2s',
43
+ }}
44
+ />
45
+ ))}
46
+ </>
47
+ )}
48
+ steps={[
49
+ {
50
+ target: () => aRef.current,
51
+ title: '导入',
52
+ description: '点击此处导入数据文件。',
53
+ },
54
+ {
55
+ target: () => bRef.current,
56
+ title: '筛选',
57
+ description: '在这里筛选你需要的数据。',
58
+ },
59
+ ]}
60
+ />
61
+ </Space>
62
+ );
63
+ };
@@ -0,0 +1,55 @@
1
+ import { Button, Space, Tour } from '@rainbow-oh/yee-c';
2
+ import React, { useRef, useState } from 'react';
3
+
4
+ const placements = ['top', 'right', 'bottom', 'left'] as const;
5
+ type P = (typeof placements)[number];
6
+
7
+ export default () => {
8
+ const [open, setOpen] = useState(false);
9
+ const [p, setP] = useState<P>('top');
10
+ const targetRef = useRef<HTMLDivElement>(null);
11
+
12
+ return (
13
+ <Space direction="vertical">
14
+ <Space>
15
+ {placements.map((pl) => (
16
+ <Button
17
+ key={pl}
18
+ type={p === pl ? 'primary' : 'default'}
19
+ onClick={() => {
20
+ setP(pl);
21
+ setOpen(true);
22
+ }}
23
+ >
24
+ {pl}
25
+ </Button>
26
+ ))}
27
+ </Space>
28
+
29
+ <div
30
+ ref={targetRef}
31
+ style={{
32
+ display: 'inline-block',
33
+ padding: '16px 24px',
34
+ border: '1px dashed var(--yee-border-color)',
35
+ borderRadius: 6,
36
+ }}
37
+ >
38
+ 目标元素
39
+ </div>
40
+
41
+ <Tour
42
+ open={open}
43
+ placement={p}
44
+ onClose={() => setOpen(false)}
45
+ steps={[
46
+ {
47
+ target: () => targetRef.current,
48
+ title: `placement: ${p}`,
49
+ description: '气泡卡片相对目标元素的位置;靠近视口边缘时会自动翻转。',
50
+ },
51
+ ]}
52
+ />
53
+ </Space>
54
+ );
55
+ };
@@ -0,0 +1,49 @@
1
+ import { Button, Space, Tour } from '@rainbow-oh/yee-c';
2
+ import React, { useRef, useState } from 'react';
3
+
4
+ export default () => {
5
+ const [open, setOpen] = useState(false);
6
+ const farRef = useRef<HTMLDivElement>(null);
7
+
8
+ return (
9
+ <Space direction="vertical" style={{ width: '100%' }}>
10
+ <Button type="primary" onClick={() => setOpen(true)}>
11
+ 开始引导(自动滚动定位)
12
+ </Button>
13
+
14
+ <div
15
+ style={{
16
+ height: 600,
17
+ padding: 24,
18
+ background: 'var(--yee-color-bg-layout)',
19
+ borderRadius: 8,
20
+ color: '#999',
21
+ }}
22
+ >
23
+ ↓ 目标在下方,切换步骤时引导会自动滚动定位
24
+ </div>
25
+
26
+ <div ref={farRef} style={{ display: 'inline-block' }}>
27
+ <Button>远处的目标</Button>
28
+ </div>
29
+
30
+ <Tour
31
+ open={open}
32
+ onClose={() => setOpen(false)}
33
+ onFinish={() => setOpen(false)}
34
+ steps={[
35
+ {
36
+ target: () => farRef.current,
37
+ title: '滚动定位',
38
+ description: '切换到这一步时,目标会自动滚动到视口内。',
39
+ },
40
+ {
41
+ target: '#tour-nonexistent-target',
42
+ title: '目标不存在',
43
+ description: '找不到目标元素时,卡片居中显示(无高亮)。',
44
+ },
45
+ ]}
46
+ />
47
+ </Space>
48
+ );
49
+ };
@@ -0,0 +1,61 @@
1
+ ---
2
+ category: Components
3
+ title: Tour
4
+ subtitle: Tour
5
+ group:
6
+ title: Feedback
7
+ order: 29
8
+ toc: 'content'
9
+ ---
10
+
11
+ # Tour
12
+
13
+ Step-by-step guided tour: full-screen mask + highlighted target element + attached explanation card, with multi-step navigation, progress indicators, and automatic scroll-into-view. Commonly used for feature walkthroughs and new-user onboarding.
14
+
15
+ ## Code Demo
16
+
17
+ <code src="./demo/basic.tsx" title="Basic" description="Multi-step tour, controlled open, with previous/next/finish/skip"></code>
18
+ <code src="./demo/placement.tsx" title="Placement" description="Card placement relative to the target; auto-flips near viewport edges"></code>
19
+ <code src="./demo/indicators.tsx" title="Custom Indicators" description="Customize step indicators via indicatorsRender"></code>
20
+ <code src="./demo/scroll.tsx" title="Scroll & Fallback" description="Auto scroll-into-view on step change; centered card when target is missing"></code>
21
+
22
+ ## API
23
+
24
+ ### TourProps
25
+
26
+ | Property | Type | Description | Default |
27
+ | --- | --- | --- | --- |
28
+ | open | `boolean` | Whether the tour is visible (controlled) | - |
29
+ | steps | `TourStep[]` | Tour steps | - |
30
+ | current | `number` | Controlled current step index | - |
31
+ | defaultCurrent | `number` | Default current step index | `0` |
32
+ | onClose | `() => void` | Callback when closed / skipped | - |
33
+ | onFinish | `() => void` | Callback when all steps are finished | - |
34
+ | onChange | `(current: number) => void` | Callback when current step changes | - |
35
+ | placement | `Placement` | Default card placement | `'bottom'` |
36
+ | arrow | `boolean` | Whether to show the card arrow | - |
37
+ | mask | `boolean` | Whether to show the mask (highlight cutout + click lock) | `true` |
38
+ | closable | `boolean` | Whether the top-right close button is shown | `true` |
39
+ | closeIcon | `React.ReactNode` | Custom close icon | - |
40
+ | maskClosable | `boolean` | Whether clicking the mask closes the tour | `false` |
41
+ | indicatorsRender | `(current: number, total: number) => React.ReactNode` | Custom step indicators | default `current+1 / total` |
42
+ | scrollIntoViewOptions | `boolean \| ScrollIntoViewOptions` | Options for target.scrollIntoView on each step | `true` |
43
+ | className / style | | Custom root class/style | - |
44
+ | classNames / styles | `Partial<Record<'highlight' \| 'content' \| 'header' \| 'body' \| 'footer', …>>` | Semantic structure class/style | - |
45
+
46
+ > `Placement` = `'top' \| 'right' \| 'bottom' \| 'left' \| 'topLeft' \| 'topRight' \| 'bottomLeft' \| 'bottomRight' \| 'leftTop' \| 'leftBottom' \| 'rightTop' \| 'rightBottom'`, same as `Trigger`.
47
+
48
+ ### TourStep
49
+
50
+ | Property | Type | Description | Default |
51
+ | --- | --- | --- | --- |
52
+ | target | `(() => HTMLElement \| null) \| string \| HTMLElement` | Highlight target (finder function / CSS selector / element) | - |
53
+ | title | `React.ReactNode` | Card title | - |
54
+ | description | `React.ReactNode` | Card description | - |
55
+ | placement | `Placement` | Card placement for this step, overrides TourProps.placement | - |
56
+ | arrow | `boolean` | Whether to show the arrow for this step | - |
57
+ | className | `string` | Custom card class name for this step | - |
58
+
59
+ ### Built-in text
60
+
61
+ Button labels (previous/next/finish/skip) come from `locale.tour` (`previous`/`next`/`finish`/`skip`) and follow the `ConfigProvider` locale; override via the language pack or `ConfigProvider.value.tour`.
@@ -0,0 +1,10 @@
1
+ import InternalTour from './tour';
2
+
3
+ export type {
4
+ TourProps,
5
+ TourStep,
6
+ TourTarget,
7
+ TourSemanticDOM,
8
+ } from './interface';
9
+
10
+ export default InternalTour;