@tendaui/components 1.2.4 → 1.3.1

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 (309) hide show
  1. package/_util/scroll.ts +9 -0
  2. package/alert/_example/base.tsx +13 -0
  3. package/alert/_example/collapse.tsx +15 -0
  4. package/badge/_example/base.tsx +10 -0
  5. package/badge/_example/count.tsx +29 -0
  6. package/badge/_example/custom-color.tsx +32 -0
  7. package/badge/_example/dot.tsx +26 -0
  8. package/badge/_example/max-count.tsx +26 -0
  9. package/badge/_example/offset.tsx +29 -0
  10. package/badge/_example/shape.tsx +32 -0
  11. package/badge/_example/show-zero.tsx +23 -0
  12. package/badge/_example/size.tsx +35 -0
  13. package/badge/_example/standalone.tsx +14 -0
  14. package/badge/_example/text-count.tsx +26 -0
  15. package/badge/_example/with-button.tsx +23 -0
  16. package/button/_example/block.tsx +18 -0
  17. package/button/_example/disabled.tsx +22 -0
  18. package/button/_example/ghost.tsx +21 -0
  19. package/button/_example/link.tsx +15 -0
  20. package/button/_example/loading.tsx +19 -0
  21. package/button/_example/shape.tsx +18 -0
  22. package/button/_example/size.tsx +18 -0
  23. package/button/_example/suffix.tsx +16 -0
  24. package/button/_example/theme.tsx +14 -0
  25. package/button/_example/variant-base.tsx +24 -0
  26. package/button/_example/variant-dashed.tsx +24 -0
  27. package/button/_example/variant-outline.tsx +24 -0
  28. package/button/_example/variant-text.tsx +24 -0
  29. package/checkbox/_example/base.tsx +8 -0
  30. package/checkbox/_example/controlled.tsx +11 -0
  31. package/checkbox/_example/group-disabled.tsx +13 -0
  32. package/checkbox/_example/group-with-check-all.tsx +22 -0
  33. package/checkbox/_example/group-with-max.tsx +17 -0
  34. package/checkbox/_example/group-with-options.tsx +18 -0
  35. package/checkbox/_example/group.tsx +17 -0
  36. package/checkbox/_example/states.tsx +19 -0
  37. package/color-picker/ColorPicker.tsx +16 -2
  38. package/color-picker/_example/base.tsx +12 -0
  39. package/color-picker/_example/borderless.tsx +17 -0
  40. package/color-picker/_example/clearable.tsx +12 -0
  41. package/color-picker/_example/disabled.tsx +17 -0
  42. package/color-picker/_example/formats.tsx +30 -0
  43. package/color-picker/_example/manual-input.tsx +39 -0
  44. package/color-picker/_example/recent-colors.tsx +19 -0
  45. package/color-picker/_example/swatch-colors.tsx +28 -0
  46. package/color-picker/_example/with-alpha.tsx +21 -0
  47. package/color-picker/components/panel/format/inputs.tsx +1 -1
  48. package/color-picker/components/panel/index.tsx +13 -0
  49. package/color-picker/components/trigger.tsx +64 -13
  50. package/color-picker/defaultProps.ts +4 -1
  51. package/color-picker/utils/color-picker/cmyk.ts +5 -5
  52. package/color-picker/utils/color-picker/draggable.ts +14 -15
  53. package/color-picker/utils/color-picker/format.ts +21 -26
  54. package/color-picker/utils/color-picker/gradient.ts +35 -41
  55. package/color-picker/utils/color-picker/types.ts +4 -4
  56. package/config-provider/ConfigContext.tsx +1 -0
  57. package/config-provider/ConfigProvider.tsx +18 -1
  58. package/config-provider/type.ts +5 -0
  59. package/dialog/_example/base.tsx +27 -0
  60. package/dialog/_example/confirm-loading.tsx +32 -0
  61. package/dialog/_example/custom-buttons.tsx +24 -0
  62. package/dialog/_example/full-screen.tsx +26 -0
  63. package/dialog/_example/hide-buttons.tsx +39 -0
  64. package/dialog/_example/modeless.tsx +25 -0
  65. package/dialog/_example/placement.tsx +40 -0
  66. package/dialog/_example/plugin-example.tsx +69 -0
  67. package/dialog/_example/themes.tsx +41 -0
  68. package/drawer/Drawer.tsx +17 -9
  69. package/drawer/_example/custom-header-footer.tsx +29 -0
  70. package/drawer/_example/default.tsx +20 -0
  71. package/drawer/_example/events.tsx +53 -0
  72. package/drawer/_example/no-footer.tsx +20 -0
  73. package/drawer/_example/no-overlay.tsx +20 -0
  74. package/drawer/_example/placement.tsx +43 -0
  75. package/drawer/_example/size-draggable.tsx +26 -0
  76. package/drawer/_example/size.tsx +40 -0
  77. package/drawer/defaultProps.ts +1 -1
  78. package/fireworks/Fireworks.tsx +1 -10
  79. package/fireworks/index.ts +0 -1
  80. package/fireworks/type.ts +0 -1
  81. package/form/_example/complex.tsx +76 -0
  82. package/form/_example/default.tsx +58 -0
  83. package/form/_example/disabled.tsx +26 -0
  84. package/form/_example/form-list.tsx +74 -0
  85. package/form/_example/inline-layout.tsx +20 -0
  86. package/form/_example/label-align.tsx +46 -0
  87. package/form/_example/methods.tsx +66 -0
  88. package/form/_example/validation.tsx +71 -0
  89. package/form/hooks/useFormItemStyle.tsx +19 -7
  90. package/form/index.ts +20 -2
  91. package/global-config/default-config.ts +28 -28
  92. package/global-config/locale/ar_KW.ts +176 -187
  93. package/global-config/locale/en_US.ts +180 -195
  94. package/global-config/locale/it_IT.ts +174 -197
  95. package/global-config/locale/ja_JP.ts +178 -193
  96. package/global-config/locale/ko_KR.ts +178 -193
  97. package/global-config/locale/ru_RU.ts +189 -200
  98. package/global-config/locale/zh_CN.ts +179 -193
  99. package/global-config/locale/zh_TW.ts +178 -192
  100. package/global-config/mobile/default-config.ts +3 -3
  101. package/global-config/mobile/locale/ar_KW.ts +76 -77
  102. package/global-config/mobile/locale/en_US.ts +76 -77
  103. package/global-config/mobile/locale/it_IT.ts +76 -77
  104. package/global-config/mobile/locale/ja_JP.ts +64 -65
  105. package/global-config/mobile/locale/ko_KR.ts +64 -65
  106. package/global-config/mobile/locale/ru_RU.ts +76 -77
  107. package/global-config/mobile/locale/zh_CN.ts +64 -65
  108. package/global-config/mobile/locale/zh_TW.ts +64 -65
  109. package/global-config/t.ts +12 -12
  110. package/hooks/useDebounce.ts +27 -0
  111. package/hooks/useLastest.ts +6 -2
  112. package/hooks/useResizeObserve.ts +0 -1
  113. package/index.ts +1 -1
  114. package/input/Input.tsx +53 -10
  115. package/input/_example/auto-width.tsx +14 -0
  116. package/input/_example/borderless.tsx +17 -0
  117. package/input/_example/clearable.tsx +14 -0
  118. package/input/_example/default.tsx +10 -0
  119. package/input/_example/disabled-readonly.tsx +12 -0
  120. package/input/_example/events.tsx +42 -0
  121. package/input/_example/group.tsx +14 -0
  122. package/input/_example/label-suffix.tsx +12 -0
  123. package/input/_example/max-length.tsx +11 -0
  124. package/input/_example/password.tsx +14 -0
  125. package/input/_example/sizes.tsx +12 -0
  126. package/input/_example/status.tsx +13 -0
  127. package/input/_example/text-align.tsx +12 -0
  128. package/input/_example/with-icon.tsx +13 -0
  129. package/input/type.ts +3 -0
  130. package/input/useLengthLimit.ts +122 -0
  131. package/input-number/_example/align.tsx +23 -0
  132. package/input-number/_example/auto-width.tsx +8 -0
  133. package/input-number/_example/default.tsx +8 -0
  134. package/input-number/_example/events.tsx +45 -0
  135. package/input-number/_example/format.tsx +27 -0
  136. package/input-number/_example/large-number.tsx +17 -0
  137. package/input-number/_example/min-max.tsx +14 -0
  138. package/input-number/_example/sizes.tsx +35 -0
  139. package/input-number/_example/status.tsx +65 -0
  140. package/input-number/_example/step-and-decimal.tsx +14 -0
  141. package/input-number/_example/themes.tsx +21 -0
  142. package/input-number/_example/with-suffix.tsx +12 -0
  143. package/ip-input/_example/controlled.tsx +26 -0
  144. package/ip-input/_example/default.tsx +12 -0
  145. package/ip-input/_example/full-featured.tsx +32 -0
  146. package/ip-input/_example/ipv6.tsx +23 -0
  147. package/ip-input/_example/keyboard-navigation.tsx +19 -0
  148. package/ip-input/_example/paste-demo.tsx +23 -0
  149. package/ip-input/_example/states.tsx +21 -0
  150. package/ip-input/_example/with-cidr.tsx +23 -0
  151. package/layout/_example/combine-left.tsx +54 -0
  152. package/layout/_example/combine-right.tsx +54 -0
  153. package/layout/_example/custom-aside-width.tsx +56 -0
  154. package/layout/_example/custom-height.tsx +45 -0
  155. package/layout/_example/double-sidebar.tsx +57 -0
  156. package/layout/_example/side-navigation-right.tsx +51 -0
  157. package/layout/_example/side-navigation.tsx +51 -0
  158. package/layout/_example/top-navigation.tsx +41 -0
  159. package/list/_example/async-loading.tsx +46 -0
  160. package/list/_example/default.tsx +23 -0
  161. package/list/_example/header-footer.tsx +40 -0
  162. package/list/_example/multiline.tsx +24 -0
  163. package/list/_example/scroll-loading.tsx +69 -0
  164. package/list/_example/sizes.tsx +45 -0
  165. package/list/_example/split.tsx +36 -0
  166. package/list/_example/stripe.tsx +24 -0
  167. package/list/_example/virtual-scroll.tsx +51 -0
  168. package/list/_example/with-image.tsx +26 -0
  169. package/loading/_example/default.tsx +6 -0
  170. package/loading/_example/delay.tsx +53 -0
  171. package/loading/_example/fullscreen.tsx +29 -0
  172. package/loading/_example/inherit-color.tsx +24 -0
  173. package/loading/_example/no-overlay.tsx +15 -0
  174. package/loading/_example/sizes.tsx +25 -0
  175. package/loading/_example/with-text.tsx +12 -0
  176. package/loading/_example/wrapper.tsx +30 -0
  177. package/notification/_example/default.tsx +31 -0
  178. package/notification/_example/long-content.tsx +37 -0
  179. package/notification/_example/stacking.tsx +40 -0
  180. package/notification/_example/types.tsx +78 -0
  181. package/notification/_example/usage-example.tsx +62 -0
  182. package/package.json +4 -3
  183. package/popup/Popup.tsx +17 -5
  184. package/popup/_example/controlled.tsx +32 -0
  185. package/popup/_example/custom-content.tsx +64 -0
  186. package/popup/_example/default.tsx +19 -0
  187. package/popup/_example/delay.tsx +35 -0
  188. package/popup/_example/disabled.tsx +17 -0
  189. package/popup/_example/no-arrow.tsx +17 -0
  190. package/popup/_example/placements.tsx +61 -0
  191. package/popup/_example/triggers.tsx +26 -0
  192. package/radio/_example/allow-uncheck.tsx +19 -0
  193. package/radio/_example/button-style.tsx +40 -0
  194. package/radio/_example/controlled.tsx +13 -0
  195. package/radio/_example/default.tsx +13 -0
  196. package/radio/_example/group-disabled.tsx +22 -0
  197. package/radio/_example/group-with-options.tsx +20 -0
  198. package/radio/_example/group.tsx +19 -0
  199. package/radio/_example/sizes.tsx +37 -0
  200. package/radio/_example/states.tsx +20 -0
  201. package/select/_example/collapsed.tsx +30 -0
  202. package/select/_example/creatable.tsx +36 -0
  203. package/select/_example/custom-content.tsx +26 -0
  204. package/select/_example/default.tsx +29 -0
  205. package/select/_example/disabled.tsx +20 -0
  206. package/select/_example/filterable.tsx +27 -0
  207. package/select/_example/group-options.tsx +44 -0
  208. package/select/_example/label-suffix.tsx +24 -0
  209. package/select/_example/loading.tsx +19 -0
  210. package/select/_example/multiple.tsx +31 -0
  211. package/select/_example/sizes.tsx +20 -0
  212. package/select/_example/status.tsx +27 -0
  213. package/slider/Slider.tsx +13 -5
  214. package/slider/_example/custom-label.tsx +19 -0
  215. package/slider/_example/default.tsx +14 -0
  216. package/slider/_example/disabled.tsx +17 -0
  217. package/slider/_example/marks.tsx +31 -0
  218. package/slider/_example/range.tsx +16 -0
  219. package/slider/_example/step.tsx +14 -0
  220. package/slider/_example/vertical.tsx +26 -0
  221. package/slider/_example/with-input-number.tsx +21 -0
  222. package/slider/type.ts +1 -1
  223. package/styles/_vars.scss +16 -0
  224. package/styles/components/button/_index.scss +3 -3
  225. package/styles/components/dialog/_index.scss +18 -20
  226. package/styles/components/drawer/_index.scss +4 -3
  227. package/styles/components/drawer/_var.scss +1 -1
  228. package/styles/components/form/_index.scss +7 -6
  229. package/styles/components/input/_mixins.scss +7 -5
  230. package/styles/components/input-number/_index.scss +13 -12
  231. package/styles/components/list/_index.scss +5 -5
  232. package/styles/components/notification/_index.scss +4 -4
  233. package/styles/components/slider/_index.scss +8 -8
  234. package/styles/components/switch/_index.scss +98 -15
  235. package/styles/components/table/_index.scss +37 -29
  236. package/styles/components/tabs/_index.scss +8 -9
  237. package/styles/components/tooltip/_index.scss +104 -0
  238. package/styles/components/tooltip/_vars.scss +23 -0
  239. package/switch/_example/async-change.tsx +25 -0
  240. package/switch/_example/before-change.tsx +22 -0
  241. package/switch/_example/controlled.tsx +14 -0
  242. package/switch/_example/custom-value.tsx +21 -0
  243. package/switch/_example/default.tsx +6 -0
  244. package/switch/_example/disabled.tsx +25 -0
  245. package/switch/_example/loading.tsx +17 -0
  246. package/switch/_example/sizes.tsx +21 -0
  247. package/switch/_example/with-label.tsx +21 -0
  248. package/tab/TabPanel.tsx +9 -6
  249. package/tab/_example/addable.tsx +45 -0
  250. package/tab/_example/card-theme.tsx +22 -0
  251. package/tab/_example/default.tsx +22 -0
  252. package/tab/_example/disabled.tsx +38 -0
  253. package/tab/_example/lazy.tsx +25 -0
  254. package/tab/_example/placement.tsx +36 -0
  255. package/tab/_example/removable.tsx +31 -0
  256. package/tab/_example/sizes.tsx +31 -0
  257. package/tab/_example/with-action.tsx +26 -0
  258. package/table/Cell.tsx +3 -6
  259. package/table/Ellipsis.tsx +73 -0
  260. package/table/_example/alignment.tsx +46 -0
  261. package/table/_example/auto-width.tsx +47 -0
  262. package/table/_example/bordered-stripe-hover.tsx +42 -0
  263. package/table/_example/bordered.tsx +42 -0
  264. package/table/_example/cell-click.tsx +52 -0
  265. package/table/_example/complex.tsx +82 -0
  266. package/table/_example/custom-cell.tsx +68 -0
  267. package/table/_example/custom-empty.tsx +37 -0
  268. package/table/_example/custom-row-class-name.tsx +57 -0
  269. package/table/_example/default.tsx +42 -0
  270. package/table/_example/ellipsis.tsx +56 -0
  271. package/table/_example/empty.tsx +28 -0
  272. package/table/_example/fixed-width.tsx +48 -0
  273. package/table/_example/hover.tsx +42 -0
  274. package/table/_example/row-click.tsx +52 -0
  275. package/table/_example/sizes.tsx +57 -0
  276. package/table/_example/stripe.tsx +42 -0
  277. package/table/_example/vertical-align.tsx +110 -0
  278. package/table/hooks/useTableClassName.ts +3 -3
  279. package/table/index.ts +2 -0
  280. package/table/type.ts +1 -0
  281. package/tag/Tag.tsx +1 -1
  282. package/tag/_example/closable.tsx +44 -0
  283. package/tag/_example/default.tsx +17 -0
  284. package/tag/_example/disabled.tsx +19 -0
  285. package/tag/_example/sizes.tsx +18 -0
  286. package/tag/_example/variants.tsx +37 -0
  287. package/tag-input/_example/collapsed.tsx +27 -0
  288. package/tag-input/_example/controlled-uncontrolled.tsx +26 -0
  289. package/tag-input/_example/default.tsx +15 -0
  290. package/tag-input/_example/disabled-readonly.tsx +21 -0
  291. package/tag-input/_example/events.tsx +64 -0
  292. package/tag-input/_example/excess-display.tsx +27 -0
  293. package/tag-input/_example/max-tags.tsx +22 -0
  294. package/tag-input/_example/sizes.tsx +21 -0
  295. package/tag-input/_example/status.tsx +37 -0
  296. package/tag-input/_example/with-label.tsx +23 -0
  297. package/tag-input/hooks/useTagList.tsx +1 -1
  298. package/tooltip/Tooltip.tsx +76 -0
  299. package/tooltip/_example/base.tsx +26 -0
  300. package/tooltip/_example/custom-content.tsx +47 -0
  301. package/tooltip/_example/placement.tsx +33 -0
  302. package/tooltip/_example/theme.tsx +34 -0
  303. package/tooltip/defaultProps.ts +14 -0
  304. package/tooltip/index.ts +7 -0
  305. package/tooltip/style/index.js +1 -0
  306. package/tooltip/type.ts +99 -0
  307. package/utils/log/index.ts +1 -1
  308. package/utils/log/log.ts +2 -3
  309. package/utils/log/types.ts +1 -4
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const baseData: UserData[] = [
25
+ {
26
+ id: 1,
27
+ name: "张三",
28
+ age: 25,
29
+ email: "zhangsan@example.com",
30
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
31
+ status: "active",
32
+ score: 95
33
+ },
34
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
35
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
36
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
37
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
38
+ ];
39
+
40
+ const CustomRowClassNameExample = () => (
41
+ <Table
42
+ columns={baseColumns}
43
+ data={baseData}
44
+ bordered
45
+ rowClassName={({ row, rowIndex }) => {
46
+ if (row.status === "active") {
47
+ return "table-row-active";
48
+ }
49
+ if (rowIndex % 2 === 0) {
50
+ return "table-row-even";
51
+ }
52
+ return "";
53
+ }}
54
+ />
55
+ );
56
+
57
+ export default CustomRowClassNameExample;
@@ -0,0 +1,42 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const baseData: UserData[] = [
25
+ {
26
+ id: 1,
27
+ name: "张三",
28
+ age: 25,
29
+ email: "zhangsan@example.com",
30
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
31
+ status: "active",
32
+ score: 95
33
+ },
34
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
35
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
36
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
37
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
38
+ ];
39
+
40
+ const DefaultExample = () => <Table columns={baseColumns} data={baseData} />;
41
+
42
+ export default DefaultExample;
@@ -0,0 +1,56 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseData: UserData[] = [
18
+ {
19
+ id: 1,
20
+ name: "张三",
21
+ age: 25,
22
+ email: "zhangsan@example.com",
23
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
24
+ status: "active",
25
+ score: 95
26
+ },
27
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
28
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
29
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
30
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
31
+ ];
32
+
33
+ const EllipsisExample = () => (
34
+ <Table
35
+ columns={[
36
+ { colKey: "name", title: "姓名", width: 120 },
37
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
38
+ {
39
+ colKey: "email",
40
+ title: "邮箱",
41
+ width: 150,
42
+ ellipsis: true
43
+ },
44
+ {
45
+ colKey: "address",
46
+ title: "地址(省略)",
47
+ width: 200,
48
+ ellipsis: true
49
+ }
50
+ ]}
51
+ data={baseData}
52
+ bordered
53
+ />
54
+ );
55
+
56
+ export default EllipsisExample;
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const EmptyExample = () => (
25
+ <Table columns={baseColumns} data={[]} empty={<div style={{ padding: "40px", textAlign: "center" }}>暂无数据</div>} />
26
+ );
27
+
28
+ export default EmptyExample;
@@ -0,0 +1,48 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseData: UserData[] = [
18
+ {
19
+ id: 1,
20
+ name: "张三",
21
+ age: 25,
22
+ email: "zhangsan@example.com",
23
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
24
+ status: "active",
25
+ score: 95
26
+ },
27
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
28
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
29
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
30
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
31
+ ];
32
+
33
+ const FixedWidthExample = () => (
34
+ <Table
35
+ columns={[
36
+ { colKey: "name", title: "姓名", width: 100 },
37
+ { colKey: "age", title: "年龄", width: 80 },
38
+ { colKey: "email", title: "邮箱", width: 240 },
39
+ { colKey: "address", title: "地址", width: 300 },
40
+ { colKey: "status", title: "状态", width: 100 }
41
+ ]}
42
+ data={baseData}
43
+ bordered
44
+ tableLayout="fixed"
45
+ />
46
+ );
47
+
48
+ export default FixedWidthExample;
@@ -0,0 +1,42 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const baseData: UserData[] = [
25
+ {
26
+ id: 1,
27
+ name: "张三",
28
+ age: 25,
29
+ email: "zhangsan@example.com",
30
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
31
+ status: "active",
32
+ score: 95
33
+ },
34
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
35
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
36
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
37
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
38
+ ];
39
+
40
+ const HoverExample = () => <Table columns={baseColumns} data={baseData} hover />;
41
+
42
+ export default HoverExample;
@@ -0,0 +1,52 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const baseData: UserData[] = [
25
+ {
26
+ id: 1,
27
+ name: "张三",
28
+ age: 25,
29
+ email: "zhangsan@example.com",
30
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
31
+ status: "active",
32
+ score: 95
33
+ },
34
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
35
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
36
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
37
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
38
+ ];
39
+
40
+ const RowClickExample = () => (
41
+ <Table
42
+ columns={baseColumns}
43
+ data={baseData}
44
+ bordered
45
+ hover
46
+ onRowClick={({ row, rowIndex }) => {
47
+ window.alert(`点击了第 ${rowIndex + 1} 行,姓名:${row.name}`);
48
+ }}
49
+ />
50
+ );
51
+
52
+ export default RowClickExample;
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const baseData: UserData[] = [
25
+ {
26
+ id: 1,
27
+ name: "张三",
28
+ age: 25,
29
+ email: "zhangsan@example.com",
30
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
31
+ status: "active",
32
+ score: 95
33
+ },
34
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
35
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
36
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
37
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
38
+ ];
39
+
40
+ const SizesExample = () => (
41
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
42
+ <div>
43
+ <h3>Small</h3>
44
+ <Table columns={baseColumns} data={baseData} size="small" bordered />
45
+ </div>
46
+ <div>
47
+ <h3>Medium</h3>
48
+ <Table columns={baseColumns} data={baseData} size="medium" bordered />
49
+ </div>
50
+ <div>
51
+ <h3>Large</h3>
52
+ <Table columns={baseColumns} data={baseData} size="large" bordered />
53
+ </div>
54
+ </div>
55
+ );
56
+
57
+ export default SizesExample;
@@ -0,0 +1,42 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ age: number;
10
+ email: string;
11
+ address: string;
12
+ status: "active" | "inactive";
13
+ score: number;
14
+ }
15
+
16
+ // 基础数据
17
+ const baseColumns: BaseTableCol<UserData>[] = [
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ { colKey: "age", title: "年龄", width: 80, align: "center" },
20
+ { colKey: "email", title: "邮箱", width: 240 },
21
+ { colKey: "address", title: "地址" }
22
+ ];
23
+
24
+ const baseData: UserData[] = [
25
+ {
26
+ id: 1,
27
+ name: "张三",
28
+ age: 25,
29
+ email: "zhangsan@example.com",
30
+ address: "北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区北京市朝阳区",
31
+ status: "active",
32
+ score: 95
33
+ },
34
+ { id: 2, name: "李四", age: 30, email: "lisi@example.com", address: "上海市浦东新区", status: "active", score: 88 },
35
+ { id: 3, name: "王五", age: 28, email: "wangwu@example.com", address: "广州市天河区", status: "inactive", score: 92 },
36
+ { id: 4, name: "赵六", age: 35, email: "zhaoliu@example.com", address: "深圳市南山区", status: "active", score: 87 },
37
+ { id: 5, name: "钱七", age: 22, email: "qianqi@example.com", address: "杭州市西湖区", status: "inactive", score: 90 }
38
+ ];
39
+
40
+ const StripeExample = () => <Table columns={baseColumns} data={baseData} stripe />;
41
+
42
+ export default StripeExample;
@@ -0,0 +1,110 @@
1
+ import React from "react";
2
+ import Table from "../index";
3
+ import type { BaseTableCol, TableRowData } from "../type";
4
+
5
+ // 示例数据类型
6
+ interface UserData extends TableRowData {
7
+ id: number;
8
+ name: string;
9
+ description: string;
10
+ }
11
+
12
+ const VerticalAlignExample = () => (
13
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
14
+ <div>
15
+ <h3>Top</h3>
16
+ <Table
17
+ columns={[
18
+ { colKey: "name", title: "姓名", width: 120 },
19
+ {
20
+ colKey: "description",
21
+ title: "描述",
22
+ cell: ({ row }) => (
23
+ <div>
24
+ {row.id === 1 ? (
25
+ <div>
26
+ <div>第一行内容</div>
27
+ <div>第二行内容</div>
28
+ <div>第三行内容</div>
29
+ </div>
30
+ ) : (
31
+ <div>单行内容</div>
32
+ )}
33
+ </div>
34
+ )
35
+ }
36
+ ]}
37
+ data={[
38
+ { id: 1, name: "张三", description: "" },
39
+ { id: 2, name: "李四", description: "" }
40
+ ]}
41
+ bordered
42
+ verticalAlign="top"
43
+ />
44
+ </div>
45
+ <div>
46
+ <h3>Middle (默认)</h3>
47
+ <Table
48
+ columns={[
49
+ { colKey: "name", title: "姓名", width: 120 },
50
+ {
51
+ colKey: "description",
52
+ title: "描述",
53
+ cell: ({ row }) => (
54
+ <div>
55
+ {row.id === 1 ? (
56
+ <div>
57
+ <div>第一行内容</div>
58
+ <div>第二行内容</div>
59
+ <div>第三行内容</div>
60
+ </div>
61
+ ) : (
62
+ <div>单行内容</div>
63
+ )}
64
+ </div>
65
+ )
66
+ }
67
+ ]}
68
+ data={[
69
+ { id: 1, name: "张三", description: "" },
70
+ { id: 2, name: "李四", description: "" }
71
+ ]}
72
+ bordered
73
+ verticalAlign="middle"
74
+ />
75
+ </div>
76
+ <div>
77
+ <h3>Bottom</h3>
78
+ <Table
79
+ columns={[
80
+ { colKey: "name", title: "姓名", width: 120 },
81
+ {
82
+ colKey: "description",
83
+ title: "描述",
84
+ cell: ({ row }) => (
85
+ <div>
86
+ {row.id === 1 ? (
87
+ <div>
88
+ <div>第一行内容</div>
89
+ <div>第二行内容</div>
90
+ <div>第三行内容</div>
91
+ </div>
92
+ ) : (
93
+ <div>单行内容</div>
94
+ )}
95
+ </div>
96
+ )
97
+ }
98
+ ]}
99
+ data={[
100
+ { id: 1, name: "张三", description: "" },
101
+ { id: 2, name: "李四", description: "" }
102
+ ]}
103
+ bordered
104
+ verticalAlign="bottom"
105
+ />
106
+ </div>
107
+ </div>
108
+ );
109
+
110
+ export default VerticalAlignExample;
@@ -47,9 +47,9 @@ export default function useTableClassName() {
47
47
  sizeLarge: `${classPrefix}-table--size-large`,
48
48
  layoutFixed: `${classPrefix}-table--layout-fixed`,
49
49
  layoutAuto: `${classPrefix}-table--layout-auto`,
50
- verticalAlignTop: `${classPrefix}-vertical-align-top`,
51
- verticalAlignMiddle: `${classPrefix}-vertical-align-middle`,
52
- verticalAlignBottom: `${classPrefix}-vertical-align-bottom`,
50
+ verticalAlignTop: `${classPrefix}-table--vertical-align-top`,
51
+ verticalAlignMiddle: `${classPrefix}-table--vertical-align-middle`,
52
+ verticalAlignBottom: `${classPrefix}-table--vertical-align-bottom`,
53
53
  alignLeft: `${classPrefix}-align-left`,
54
54
  alignCenter: `${classPrefix}-align-center`,
55
55
  alignRight: `${classPrefix}-align-right`,
package/table/index.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import _Table from "./Table";
2
+ import Ellipsis from "./Ellipsis";
2
3
  import "./style/index";
3
4
 
4
5
  export type { TableProps } from "./Table";
5
6
  export type * from "./type";
7
+ export { Ellipsis };
6
8
  export const Table = _Table;
7
9
  export default Table;
package/table/type.ts CHANGED
@@ -26,6 +26,7 @@ export type TableLayout = "auto" | "fixed";
26
26
  * 单元格参数
27
27
  */
28
28
  export interface BaseTableCellParams<T extends TableRowData = TableRowData> {
29
+ id: number;
29
30
  row: T;
30
31
  rowIndex: number;
31
32
  col: BaseTableCol<T>;
package/tag/Tag.tsx CHANGED
@@ -70,7 +70,7 @@ export const TagFunction: ForwardRefRenderFunction<HTMLDivElement, TagProps> = (
70
70
  <CloseIcon
71
71
  onClick={(e) => {
72
72
  if (disabled) return;
73
- onClose({ e: e as any });
73
+ onClose({ e });
74
74
  }}
75
75
  className={`${tagClassPrefix}__icon-close`}
76
76
  />
@@ -0,0 +1,44 @@
1
+ import React, { useState } from "react";
2
+ import { Tag } from "@tendaui/react";
3
+
4
+ const ClosableTagExample = () => {
5
+ const [tagList, setTagList] = useState([
6
+ {
7
+ name: "可删除标签1",
8
+ showClose: true
9
+ },
10
+ {
11
+ name: "可删除标签2",
12
+ showClose: true
13
+ },
14
+ {
15
+ name: "可删除标签3",
16
+ showClose: true
17
+ }
18
+ ]);
19
+
20
+ const deleteTag = (i: number) => {
21
+ const newtagList = [...tagList];
22
+ newtagList.splice(i, 1);
23
+ setTagList(newtagList);
24
+ };
25
+
26
+ return (
27
+ <div style={{ display: "flex", gap: "30px" }}>
28
+ {tagList.map((tag, i) => (
29
+ <Tag
30
+ key={i}
31
+ closable
32
+ onClose={() => {
33
+ deleteTag(i);
34
+ }}
35
+ disabled={tag.disabled}
36
+ >
37
+ {tag.name}
38
+ </Tag>
39
+ ))}
40
+ </div>
41
+ );
42
+ };
43
+
44
+ export default ClosableTagExample;
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { Tag } from "@tendaui/react";
3
+
4
+ const DefaultExample = () => (
5
+ <div style={{ display: "flex", gap: "8px" }}>
6
+ <Tag theme="primary">标签一</Tag>
7
+ <Tag theme="warning">标签二</Tag>
8
+ <Tag theme="danger" variant="dark">
9
+ 标签三
10
+ </Tag>
11
+ <Tag theme="success" variant="dark">
12
+ 标签四
13
+ </Tag>
14
+ </div>
15
+ );
16
+
17
+ export default DefaultExample;
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ import { Tag } from "@tendaui/react";
3
+
4
+ const DisabledExample = () => (
5
+ <div style={{ display: "flex", gap: "8px" }}>
6
+ <Tag theme="primary">正常标签</Tag>
7
+ <Tag theme="primary" disabled>
8
+ 禁用标签
9
+ </Tag>
10
+ <Tag theme="primary" closable>
11
+ 可删除标签
12
+ </Tag>
13
+ <Tag theme="primary" closable disabled>
14
+ 禁用可删除标签
15
+ </Tag>
16
+ </div>
17
+ );
18
+
19
+ export default DisabledExample;