@tendaui/components 1.2.4 → 1.3.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 (406) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +176 -176
  3. package/_util/scroll.ts +9 -0
  4. package/alert/_example/base.tsx +13 -0
  5. package/alert/_example/collapse.tsx +15 -0
  6. package/badge/_example/base.tsx +10 -0
  7. package/badge/_example/count.tsx +29 -0
  8. package/badge/_example/custom-color.tsx +32 -0
  9. package/badge/_example/dot.tsx +26 -0
  10. package/badge/_example/max-count.tsx +26 -0
  11. package/badge/_example/offset.tsx +29 -0
  12. package/badge/_example/shape.tsx +32 -0
  13. package/badge/_example/show-zero.tsx +23 -0
  14. package/badge/_example/size.tsx +35 -0
  15. package/badge/_example/standalone.tsx +14 -0
  16. package/badge/_example/text-count.tsx +26 -0
  17. package/badge/_example/with-button.tsx +23 -0
  18. package/button/_example/block.tsx +18 -0
  19. package/button/_example/disabled.tsx +22 -0
  20. package/button/_example/ghost.tsx +24 -0
  21. package/button/_example/link.tsx +15 -0
  22. package/button/_example/loading.tsx +19 -0
  23. package/button/_example/shape.tsx +18 -0
  24. package/button/_example/size.tsx +18 -0
  25. package/button/_example/suffix.tsx +16 -0
  26. package/button/_example/theme.tsx +14 -0
  27. package/button/_example/variant-base.tsx +24 -0
  28. package/button/_example/variant-dashed.tsx +24 -0
  29. package/button/_example/variant-outline.tsx +24 -0
  30. package/button/_example/variant-text.tsx +24 -0
  31. package/checkbox/_example/base.tsx +8 -0
  32. package/checkbox/_example/controlled.tsx +11 -0
  33. package/checkbox/_example/group-disabled.tsx +13 -0
  34. package/checkbox/_example/group-with-check-all.tsx +22 -0
  35. package/checkbox/_example/group-with-max.tsx +17 -0
  36. package/checkbox/_example/group-with-options.tsx +18 -0
  37. package/checkbox/_example/group.tsx +17 -0
  38. package/checkbox/_example/states.tsx +19 -0
  39. package/color-picker/ColorPicker.tsx +16 -2
  40. package/color-picker/_example/base.tsx +12 -0
  41. package/color-picker/_example/borderless.tsx +17 -0
  42. package/color-picker/_example/clearable.tsx +12 -0
  43. package/color-picker/_example/disabled.tsx +17 -0
  44. package/color-picker/_example/formats.tsx +30 -0
  45. package/color-picker/_example/manual-input.tsx +39 -0
  46. package/color-picker/_example/recent-colors.tsx +19 -0
  47. package/color-picker/_example/swatch-colors.tsx +28 -0
  48. package/color-picker/_example/with-alpha.tsx +21 -0
  49. package/color-picker/components/panel/format/inputs.tsx +1 -1
  50. package/color-picker/components/panel/index.tsx +13 -0
  51. package/color-picker/components/trigger.tsx +64 -13
  52. package/color-picker/defaultProps.ts +4 -1
  53. package/color-picker/utils/color-picker/cmyk.ts +89 -89
  54. package/color-picker/utils/color-picker/color.ts +467 -467
  55. package/color-picker/utils/color-picker/constants.ts +187 -187
  56. package/color-picker/utils/color-picker/draggable.ts +99 -100
  57. package/color-picker/utils/color-picker/format.ts +90 -95
  58. package/color-picker/utils/color-picker/gradient.ts +237 -243
  59. package/color-picker/utils/color-picker/index.ts +7 -7
  60. package/color-picker/utils/color-picker/types.ts +33 -33
  61. package/config-provider/ConfigContext.tsx +1 -0
  62. package/config-provider/ConfigProvider.tsx +18 -1
  63. package/config-provider/type.ts +5 -0
  64. package/dialog/_example/base.tsx +27 -0
  65. package/dialog/_example/confirm-loading.tsx +32 -0
  66. package/dialog/_example/custom-buttons.tsx +24 -0
  67. package/dialog/_example/full-screen.tsx +26 -0
  68. package/dialog/_example/hide-buttons.tsx +39 -0
  69. package/dialog/_example/modeless.tsx +25 -0
  70. package/dialog/_example/placement.tsx +40 -0
  71. package/dialog/_example/plugin-example.tsx +69 -0
  72. package/dialog/_example/themes.tsx +41 -0
  73. package/dialog/hooks/useDialogPosition.ts +35 -35
  74. package/drawer/Drawer.tsx +17 -9
  75. package/drawer/_example/custom-header-footer.tsx +29 -0
  76. package/drawer/_example/default.tsx +20 -0
  77. package/drawer/_example/events.tsx +53 -0
  78. package/drawer/_example/no-footer.tsx +20 -0
  79. package/drawer/_example/no-overlay.tsx +20 -0
  80. package/drawer/_example/placement.tsx +43 -0
  81. package/drawer/_example/size-draggable.tsx +26 -0
  82. package/drawer/_example/size.tsx +40 -0
  83. package/drawer/defaultProps.ts +1 -1
  84. package/fireworks/Fireworks.tsx +1 -10
  85. package/fireworks/index.ts +0 -1
  86. package/fireworks/type.ts +0 -1
  87. package/form/_example/complex.tsx +76 -0
  88. package/form/_example/default.tsx +58 -0
  89. package/form/_example/disabled.tsx +26 -0
  90. package/form/_example/form-list.tsx +74 -0
  91. package/form/_example/inline-layout.tsx +20 -0
  92. package/form/_example/label-align.tsx +46 -0
  93. package/form/_example/methods.tsx +66 -0
  94. package/form/_example/validation.tsx +71 -0
  95. package/form/hooks/useFormItemStyle.tsx +19 -7
  96. package/form/index.ts +20 -2
  97. package/form/type.ts +519 -519
  98. package/global-config/default-config.ts +95 -95
  99. package/global-config/locale/ar_KW.ts +259 -270
  100. package/global-config/locale/en_US.ts +265 -280
  101. package/global-config/locale/it_IT.ts +264 -287
  102. package/global-config/locale/ja_JP.ts +264 -279
  103. package/global-config/locale/ko_KR.ts +264 -279
  104. package/global-config/locale/ru_RU.ts +277 -288
  105. package/global-config/locale/zh_CN.ts +265 -279
  106. package/global-config/locale/zh_TW.ts +265 -279
  107. package/global-config/mobile/default-config.ts +6 -6
  108. package/global-config/mobile/locale/ar_KW.ts +112 -113
  109. package/global-config/mobile/locale/en_US.ts +113 -114
  110. package/global-config/mobile/locale/it_IT.ts +113 -114
  111. package/global-config/mobile/locale/ja_JP.ts +100 -101
  112. package/global-config/mobile/locale/ko_KR.ts +100 -101
  113. package/global-config/mobile/locale/ru_RU.ts +112 -113
  114. package/global-config/mobile/locale/zh_CN.ts +100 -101
  115. package/global-config/mobile/locale/zh_TW.ts +100 -101
  116. package/global-config/t.ts +111 -111
  117. package/hooks/useDebounce.ts +27 -0
  118. package/hooks/useLastest.ts +6 -2
  119. package/hooks/useResizeObserve.ts +0 -1
  120. package/index.ts +1 -1
  121. package/input/Input.tsx +53 -10
  122. package/input/_example/auto-width.tsx +14 -0
  123. package/input/_example/borderless.tsx +17 -0
  124. package/input/_example/clearable.tsx +14 -0
  125. package/input/_example/default.tsx +10 -0
  126. package/input/_example/disabled-readonly.tsx +12 -0
  127. package/input/_example/events.tsx +42 -0
  128. package/input/_example/group.tsx +14 -0
  129. package/input/_example/label-suffix.tsx +12 -0
  130. package/input/_example/max-length.tsx +11 -0
  131. package/input/_example/password.tsx +14 -0
  132. package/input/_example/sizes.tsx +12 -0
  133. package/input/_example/status.tsx +13 -0
  134. package/input/_example/text-align.tsx +12 -0
  135. package/input/_example/with-icon.tsx +13 -0
  136. package/input/type.ts +3 -0
  137. package/input/useLengthLimit.ts +122 -0
  138. package/input-number/InputNumber.tsx +124 -124
  139. package/input-number/_example/align.tsx +23 -0
  140. package/input-number/_example/auto-width.tsx +8 -0
  141. package/input-number/_example/default.tsx +8 -0
  142. package/input-number/_example/events.tsx +45 -0
  143. package/input-number/_example/format.tsx +27 -0
  144. package/input-number/_example/large-number.tsx +17 -0
  145. package/input-number/_example/min-max.tsx +14 -0
  146. package/input-number/_example/sizes.tsx +35 -0
  147. package/input-number/_example/status.tsx +65 -0
  148. package/input-number/_example/step-and-decimal.tsx +14 -0
  149. package/input-number/_example/themes.tsx +21 -0
  150. package/input-number/_example/with-suffix.tsx +12 -0
  151. package/input-number/defaultProps.ts +17 -17
  152. package/input-number/index.ts +9 -9
  153. package/input-number/style/css.js +1 -1
  154. package/input-number/style/index.js +1 -1
  155. package/input-number/useInputNumber.tsx +270 -270
  156. package/ip-input/_example/controlled.tsx +26 -0
  157. package/ip-input/_example/default.tsx +12 -0
  158. package/ip-input/_example/full-featured.tsx +32 -0
  159. package/ip-input/_example/ipv6.tsx +23 -0
  160. package/ip-input/_example/keyboard-navigation.tsx +19 -0
  161. package/ip-input/_example/paste-demo.tsx +23 -0
  162. package/ip-input/_example/states.tsx +21 -0
  163. package/ip-input/_example/with-cidr.tsx +23 -0
  164. package/layout/_example/combine-left.tsx +54 -0
  165. package/layout/_example/combine-right.tsx +54 -0
  166. package/layout/_example/custom-aside-width.tsx +56 -0
  167. package/layout/_example/custom-height.tsx +45 -0
  168. package/layout/_example/double-sidebar.tsx +57 -0
  169. package/layout/_example/side-navigation-right.tsx +51 -0
  170. package/layout/_example/side-navigation.tsx +51 -0
  171. package/layout/_example/top-navigation.tsx +41 -0
  172. package/list/ListItem.tsx +36 -36
  173. package/list/ListItemMeta.tsx +40 -40
  174. package/list/_example/async-loading.tsx +46 -0
  175. package/list/_example/default.tsx +23 -0
  176. package/list/_example/header-footer.tsx +40 -0
  177. package/list/_example/multiline.tsx +24 -0
  178. package/list/_example/scroll-loading.tsx +69 -0
  179. package/list/_example/sizes.tsx +45 -0
  180. package/list/_example/split.tsx +36 -0
  181. package/list/_example/stripe.tsx +24 -0
  182. package/list/_example/virtual-scroll.tsx +51 -0
  183. package/list/_example/with-image.tsx +26 -0
  184. package/list/defaultProps.ts +11 -11
  185. package/list/hooks/useListVirtualScroll.ts +82 -82
  186. package/list/style/css.js +1 -1
  187. package/list/style/index.js +1 -1
  188. package/loading/_example/default.tsx +6 -0
  189. package/loading/_example/delay.tsx +53 -0
  190. package/loading/_example/fullscreen.tsx +29 -0
  191. package/loading/_example/inherit-color.tsx +24 -0
  192. package/loading/_example/no-overlay.tsx +15 -0
  193. package/loading/_example/sizes.tsx +25 -0
  194. package/loading/_example/with-text.tsx +12 -0
  195. package/loading/_example/wrapper.tsx +30 -0
  196. package/locale/LocalReceiver.ts +55 -55
  197. package/locale/ar_KW.ts +7 -7
  198. package/locale/en_US.ts +7 -7
  199. package/locale/it_IT.ts +6 -6
  200. package/locale/ja_JP.ts +6 -6
  201. package/locale/ko_KR.ts +6 -6
  202. package/locale/ru_RU.ts +6 -6
  203. package/locale/zh_CN.ts +5 -5
  204. package/locale/zh_TW.ts +7 -7
  205. package/notification/_example/default.tsx +31 -0
  206. package/notification/_example/long-content.tsx +37 -0
  207. package/notification/_example/stacking.tsx +40 -0
  208. package/notification/_example/types.tsx +78 -0
  209. package/notification/_example/usage-example.tsx +62 -0
  210. package/package.json +4 -3
  211. package/popup/Popup.tsx +17 -5
  212. package/popup/_example/controlled.tsx +32 -0
  213. package/popup/_example/custom-content.tsx +64 -0
  214. package/popup/_example/default.tsx +19 -0
  215. package/popup/_example/delay.tsx +35 -0
  216. package/popup/_example/disabled.tsx +17 -0
  217. package/popup/_example/no-arrow.tsx +17 -0
  218. package/popup/_example/placements.tsx +61 -0
  219. package/popup/_example/triggers.tsx +26 -0
  220. package/radio/_example/allow-uncheck.tsx +19 -0
  221. package/radio/_example/button-style.tsx +40 -0
  222. package/radio/_example/controlled.tsx +13 -0
  223. package/radio/_example/default.tsx +13 -0
  224. package/radio/_example/group-disabled.tsx +22 -0
  225. package/radio/_example/group-with-options.tsx +20 -0
  226. package/radio/_example/group.tsx +19 -0
  227. package/radio/_example/sizes.tsx +37 -0
  228. package/radio/_example/states.tsx +20 -0
  229. package/select/_example/collapsed.tsx +30 -0
  230. package/select/_example/creatable.tsx +36 -0
  231. package/select/_example/custom-content.tsx +26 -0
  232. package/select/_example/default.tsx +29 -0
  233. package/select/_example/disabled.tsx +20 -0
  234. package/select/_example/filterable.tsx +27 -0
  235. package/select/_example/group-options.tsx +44 -0
  236. package/select/_example/label-suffix.tsx +24 -0
  237. package/select/_example/loading.tsx +19 -0
  238. package/select/_example/multiple.tsx +31 -0
  239. package/select/_example/sizes.tsx +20 -0
  240. package/select/_example/status.tsx +27 -0
  241. package/select/type.ts +382 -382
  242. package/select-input/type.ts +280 -280
  243. package/slider/Slider.tsx +13 -5
  244. package/slider/SliderHandleButton.tsx +50 -50
  245. package/slider/_example/custom-label.tsx +19 -0
  246. package/slider/_example/default.tsx +14 -0
  247. package/slider/_example/disabled.tsx +17 -0
  248. package/slider/_example/marks.tsx +31 -0
  249. package/slider/_example/range.tsx +16 -0
  250. package/slider/_example/step.tsx +14 -0
  251. package/slider/_example/vertical.tsx +26 -0
  252. package/slider/_example/with-input-number.tsx +21 -0
  253. package/slider/defaultProps.ts +15 -15
  254. package/slider/style/css.js +1 -1
  255. package/slider/style/index.js +1 -1
  256. package/slider/type.ts +1 -1
  257. package/styles/_global.scss +40 -40
  258. package/styles/_vars.scss +374 -358
  259. package/styles/components/alert/_index.scss +175 -175
  260. package/styles/components/alert/_vars.scss +41 -41
  261. package/styles/components/badge/_index.scss +71 -71
  262. package/styles/components/badge/_vars.scss +26 -26
  263. package/styles/components/button/_index.scss +499 -499
  264. package/styles/components/button/_mixins.scss +40 -40
  265. package/styles/components/button/_vars.scss +121 -121
  266. package/styles/components/checkbox/_index.scss +158 -158
  267. package/styles/components/checkbox/_var.scss +59 -59
  268. package/styles/components/color-picker/_index.scss +586 -586
  269. package/styles/components/color-picker/_vars.scss +79 -79
  270. package/styles/components/dialog/_animate.scss +133 -133
  271. package/styles/components/dialog/_index.scss +310 -312
  272. package/styles/components/dialog/_vars.scss +60 -60
  273. package/styles/components/drawer/_index.scss +206 -205
  274. package/styles/components/drawer/_var.scss +55 -55
  275. package/styles/components/fireworks/_index.scss +86 -86
  276. package/styles/components/fireworks/_vars.scss +5 -5
  277. package/styles/components/form/_index.scss +175 -174
  278. package/styles/components/form/_mixins.scss +74 -74
  279. package/styles/components/form/_vars.scss +101 -101
  280. package/styles/components/input/_index.scss +350 -350
  281. package/styles/components/input/_mixins.scss +120 -118
  282. package/styles/components/input/_vars.scss +130 -130
  283. package/styles/components/input-number/_index.scss +340 -339
  284. package/styles/components/input-number/_vars.scss +56 -56
  285. package/styles/components/ip-input/_index.scss +277 -277
  286. package/styles/components/layout/_index.scss +47 -47
  287. package/styles/components/layout/_vars.scss +19 -19
  288. package/styles/components/layout/doc.scss +74 -74
  289. package/styles/components/list/_index.scss +172 -172
  290. package/styles/components/list/_vars.scss +42 -42
  291. package/styles/components/loading/_index.scss +113 -113
  292. package/styles/components/loading/_vars.scss +40 -40
  293. package/styles/components/notification/_index.scss +144 -144
  294. package/styles/components/notification/_mixins.scss +13 -13
  295. package/styles/components/notification/_vars.scss +60 -60
  296. package/styles/components/popup/_index.scss +78 -78
  297. package/styles/components/popup/_mixin.scss +149 -149
  298. package/styles/components/popup/_vars.scss +33 -33
  299. package/styles/components/radio/_index.scss +376 -376
  300. package/styles/components/radio/_vars.scss +89 -89
  301. package/styles/components/select/_index.scss +291 -291
  302. package/styles/components/select/_var.scss +64 -64
  303. package/styles/components/select-input/_index.scss +5 -5
  304. package/styles/components/select-input/_var.scss +4 -4
  305. package/styles/components/slider/_index.scss +241 -241
  306. package/styles/components/slider/_vars.scss +51 -51
  307. package/styles/components/switch/_index.scss +248 -165
  308. package/styles/components/switch/_vars.scss +63 -63
  309. package/styles/components/table/_index.scss +194 -186
  310. package/styles/components/table/_var.scss +52 -52
  311. package/styles/components/tabs/_index.scss +165 -166
  312. package/styles/components/tabs/_mixins.scss +11 -11
  313. package/styles/components/tabs/_vars.scss +72 -72
  314. package/styles/components/tag/_index.scss +317 -317
  315. package/styles/components/tag/_var.scss +86 -86
  316. package/styles/components/tag-input/_index.scss +164 -164
  317. package/styles/components/tag-input/_vars.scss +17 -17
  318. package/styles/components/tooltip/_index.scss +104 -0
  319. package/styles/components/tooltip/_vars.scss +23 -0
  320. package/styles/mixins/_focus.scss +8 -8
  321. package/styles/mixins/_layout.scss +32 -32
  322. package/styles/mixins/_reset.scss +11 -11
  323. package/styles/mixins/_scrollbar.scss +32 -32
  324. package/styles/mixins/_text.scss +50 -50
  325. package/styles/themes/_dark.scss +169 -169
  326. package/styles/themes/_font.scss +69 -69
  327. package/styles/themes/_index.scss +5 -5
  328. package/styles/themes/_light.scss +170 -170
  329. package/styles/themes/_radius.scss +9 -9
  330. package/styles/themes/_size.scss +68 -68
  331. package/styles/utilities/_animation.scss +58 -58
  332. package/styles/utilities/_tips.scss +10 -10
  333. package/switch/_example/async-change.tsx +25 -0
  334. package/switch/_example/before-change.tsx +22 -0
  335. package/switch/_example/controlled.tsx +14 -0
  336. package/switch/_example/custom-value.tsx +21 -0
  337. package/switch/_example/default.tsx +6 -0
  338. package/switch/_example/disabled.tsx +25 -0
  339. package/switch/_example/loading.tsx +17 -0
  340. package/switch/_example/sizes.tsx +21 -0
  341. package/switch/_example/with-label.tsx +21 -0
  342. package/tab/TabPanel.tsx +9 -6
  343. package/tab/_example/addable.tsx +45 -0
  344. package/tab/_example/card-theme.tsx +22 -0
  345. package/tab/_example/default.tsx +22 -0
  346. package/tab/_example/disabled.tsx +38 -0
  347. package/tab/_example/lazy.tsx +25 -0
  348. package/tab/_example/placement.tsx +36 -0
  349. package/tab/_example/removable.tsx +31 -0
  350. package/tab/_example/sizes.tsx +31 -0
  351. package/tab/_example/with-action.tsx +26 -0
  352. package/table/Cell.tsx +3 -6
  353. package/table/Ellipsis.tsx +73 -0
  354. package/table/_example/alignment.tsx +46 -0
  355. package/table/_example/auto-width.tsx +47 -0
  356. package/table/_example/bordered-stripe-hover.tsx +42 -0
  357. package/table/_example/bordered.tsx +42 -0
  358. package/table/_example/cell-click.tsx +52 -0
  359. package/table/_example/complex.tsx +82 -0
  360. package/table/_example/custom-cell.tsx +68 -0
  361. package/table/_example/custom-empty.tsx +37 -0
  362. package/table/_example/custom-row-class-name.tsx +57 -0
  363. package/table/_example/default.tsx +42 -0
  364. package/table/_example/ellipsis.tsx +56 -0
  365. package/table/_example/empty.tsx +28 -0
  366. package/table/_example/fixed-width.tsx +48 -0
  367. package/table/_example/hover.tsx +42 -0
  368. package/table/_example/row-click.tsx +52 -0
  369. package/table/_example/sizes.tsx +57 -0
  370. package/table/_example/stripe.tsx +42 -0
  371. package/table/_example/vertical-align.tsx +110 -0
  372. package/table/hooks/useTableClassName.ts +3 -3
  373. package/table/index.ts +2 -0
  374. package/table/type.ts +1 -0
  375. package/tag/Tag.tsx +1 -1
  376. package/tag/_example/closable.tsx +44 -0
  377. package/tag/_example/default.tsx +17 -0
  378. package/tag/_example/disabled.tsx +19 -0
  379. package/tag/_example/sizes.tsx +18 -0
  380. package/tag/_example/variants.tsx +37 -0
  381. package/tag-input/_example/collapsed.tsx +27 -0
  382. package/tag-input/_example/controlled-uncontrolled.tsx +26 -0
  383. package/tag-input/_example/default.tsx +15 -0
  384. package/tag-input/_example/disabled-readonly.tsx +21 -0
  385. package/tag-input/_example/events.tsx +64 -0
  386. package/tag-input/_example/excess-display.tsx +27 -0
  387. package/tag-input/_example/max-tags.tsx +22 -0
  388. package/tag-input/_example/sizes.tsx +21 -0
  389. package/tag-input/_example/status.tsx +37 -0
  390. package/tag-input/_example/with-label.tsx +23 -0
  391. package/tag-input/hooks/useTagList.tsx +1 -1
  392. package/tooltip/Tooltip.tsx +76 -0
  393. package/tooltip/_example/base.tsx +26 -0
  394. package/tooltip/_example/custom-content.tsx +47 -0
  395. package/tooltip/_example/placement.tsx +33 -0
  396. package/tooltip/_example/theme.tsx +34 -0
  397. package/tooltip/defaultProps.ts +14 -0
  398. package/tooltip/index.ts +7 -0
  399. package/tooltip/style/index.js +1 -0
  400. package/tooltip/type.ts +99 -0
  401. package/utils/input-number/large-number.ts +423 -423
  402. package/utils/input-number/number.ts +257 -257
  403. package/utils/log/index.ts +3 -3
  404. package/utils/log/log.ts +29 -30
  405. package/utils/log/types.ts +9 -12
  406. package/utils/style.ts +58 -58
@@ -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;
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { Tag } from "@tendaui/react";
3
+
4
+ const SizeExample = () => (
5
+ <div style={{ display: "flex", gap: "8px", alignItems: "center" }}>
6
+ <Tag size="small" theme="primary">
7
+ 小标签
8
+ </Tag>
9
+ <Tag size="medium" theme="primary">
10
+ 中标签
11
+ </Tag>
12
+ <Tag size="large" theme="primary">
13
+ 大标签
14
+ </Tag>
15
+ </div>
16
+ );
17
+
18
+ export default SizeExample;
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { Tag } from "@tendaui/react";
3
+
4
+ const VariantExample = () => (
5
+ <div style={{ display: "flex", flexDirection: "column", gap: "12px" }}>
6
+ <div style={{ display: "flex", gap: "8px" }}>
7
+ <Tag theme="primary" variant="light">
8
+ 浅色标签
9
+ </Tag>
10
+ <Tag theme="warning" variant="light">
11
+ 浅色标签
12
+ </Tag>
13
+ <Tag theme="danger" variant="light">
14
+ 浅色标签
15
+ </Tag>
16
+ <Tag theme="success" variant="light">
17
+ 浅色标签
18
+ </Tag>
19
+ </div>
20
+ <div style={{ display: "flex", gap: "8px" }}>
21
+ <Tag theme="primary" variant="dark">
22
+ 深色标签
23
+ </Tag>
24
+ <Tag theme="warning" variant="dark">
25
+ 深色标签
26
+ </Tag>
27
+ <Tag theme="danger" variant="dark">
28
+ 深色标签
29
+ </Tag>
30
+ <Tag theme="success" variant="dark">
31
+ 深色标签
32
+ </Tag>
33
+ </div>
34
+ </div>
35
+ );
36
+
37
+ export default VariantExample;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { TagInput } from "@tendaui/react";
3
+
4
+ const CollapsedExample = () => (
5
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
6
+ <div>
7
+ <div style={{ marginBottom: "8px", color: "#666" }}>超过 2 个折叠</div>
8
+ <TagInput
9
+ defaultValue={["标签一", "标签二", "标签三", "标签四", "标签五"]}
10
+ minCollapsedNum={2}
11
+ placeholder="请输入"
12
+ style={{ width: "400px" }}
13
+ />
14
+ </div>
15
+ <div>
16
+ <div style={{ marginBottom: "8px", color: "#666" }}>超过 3 个折叠</div>
17
+ <TagInput
18
+ defaultValue={["标签一", "标签二", "标签三", "标签四", "标签五"]}
19
+ minCollapsedNum={3}
20
+ placeholder="请输入"
21
+ style={{ width: "400px" }}
22
+ />
23
+ </div>
24
+ </div>
25
+ );
26
+
27
+ export default CollapsedExample;
@@ -0,0 +1,26 @@
1
+ import React, { useState } from "react";
2
+ import { TagInput, TagInputValue } from "@tendaui/react";
3
+
4
+ const Example = () => {
5
+ const [controlledTags, setControlledTags] = useState<TagInputValue>(["Vue", "React"]);
6
+ return (
7
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
8
+ <div>
9
+ <div style={{ marginBottom: "8px", color: "#666" }}>受控模式</div>
10
+ <TagInput
11
+ value={controlledTags}
12
+ onChange={(val) => setControlledTags(val)}
13
+ placeholder="请输入"
14
+ clearable
15
+ style={{ width: "400px" }}
16
+ />
17
+ </div>
18
+ <div>
19
+ <div style={{ marginBottom: "8px", color: "#666" }}>非受控模式</div>
20
+ <TagInput defaultValue={["Svelte", "Solid"]} placeholder="请输入" clearable style={{ width: "400px" }} />
21
+ </div>
22
+ </div>
23
+ );
24
+ };
25
+
26
+ export default Example;
@@ -0,0 +1,15 @@
1
+ import React, { useState } from "react";
2
+ import { TagInput, TagInputValue } from "@tendaui/react";
3
+
4
+ const DefaultExample = () => {
5
+ const [tags, setTags] = useState<TagInputValue>(["Vue", "React", "Angular"]);
6
+
7
+ return (
8
+ <div style={{ width: "400px" }}>
9
+ <TagInput value={tags} onChange={(val) => setTags(val)} clearable placeholder="请输入标签,按回车添加" />
10
+ <div style={{ marginTop: "8px", color: "#666", fontSize: "12px" }}>当前标签:{tags.join(", ")}</div>
11
+ </div>
12
+ );
13
+ };
14
+
15
+ export default DefaultExample;
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { TagInput } from "@tendaui/react";
3
+
4
+ const DisabledReadonlyExample = () => (
5
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
6
+ <div>
7
+ <div style={{ marginBottom: "8px", color: "#666" }}>正常</div>
8
+ <TagInput defaultValue={["Vue", "React"]} placeholder="正常" style={{ width: "400px" }} />
9
+ </div>
10
+ <div>
11
+ <div style={{ marginBottom: "8px", color: "#666" }}>禁用</div>
12
+ <TagInput defaultValue={["Vue", "React"]} disabled placeholder="禁用" style={{ width: "400px" }} />
13
+ </div>
14
+ <div>
15
+ <div style={{ marginBottom: "8px", color: "#666" }}>只读</div>
16
+ <TagInput defaultValue={["Vue", "React"]} readonly placeholder="只读" style={{ width: "400px" }} />
17
+ </div>
18
+ </div>
19
+ );
20
+
21
+ export default DisabledReadonlyExample;