@tendaui/components 1.2.3 → 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 -39
  258. package/styles/_vars.scss +374 -358
  259. package/styles/components/alert/_index.scss +175 -175
  260. package/styles/components/alert/_vars.scss +41 -39
  261. package/styles/components/badge/_index.scss +71 -70
  262. package/styles/components/badge/_vars.scss +26 -25
  263. package/styles/components/button/_index.scss +499 -499
  264. package/styles/components/button/_mixins.scss +40 -39
  265. package/styles/components/button/_vars.scss +121 -120
  266. package/styles/components/checkbox/_index.scss +158 -158
  267. package/styles/components/checkbox/_var.scss +59 -60
  268. package/styles/components/color-picker/_index.scss +586 -586
  269. package/styles/components/color-picker/_vars.scss +79 -84
  270. package/styles/components/dialog/_animate.scss +133 -135
  271. package/styles/components/dialog/_index.scss +310 -311
  272. package/styles/components/dialog/_vars.scss +60 -59
  273. package/styles/components/drawer/_index.scss +206 -205
  274. package/styles/components/drawer/_var.scss +55 -53
  275. package/styles/components/fireworks/_index.scss +86 -86
  276. package/styles/components/fireworks/_vars.scss +5 -4
  277. package/styles/components/form/_index.scss +175 -173
  278. package/styles/components/form/_mixins.scss +74 -76
  279. package/styles/components/form/_vars.scss +101 -100
  280. package/styles/components/input/_index.scss +350 -349
  281. package/styles/components/input/_mixins.scss +120 -116
  282. package/styles/components/input/_vars.scss +130 -134
  283. package/styles/components/input-number/_index.scss +342 -343
  284. package/styles/components/input-number/_vars.scss +56 -65
  285. package/styles/components/ip-input/_index.scss +277 -280
  286. package/styles/components/layout/_index.scss +47 -47
  287. package/styles/components/layout/_vars.scss +19 -18
  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 -41
  291. package/styles/components/loading/_index.scss +113 -112
  292. package/styles/components/loading/_vars.scss +40 -39
  293. package/styles/components/notification/_index.scss +144 -143
  294. package/styles/components/notification/_mixins.scss +13 -12
  295. package/styles/components/notification/_vars.scss +60 -59
  296. package/styles/components/popup/_index.scss +78 -82
  297. package/styles/components/popup/_mixin.scss +149 -149
  298. package/styles/components/popup/{_var.scss → _vars.scss} +33 -31
  299. package/styles/components/radio/_index.scss +376 -376
  300. package/styles/components/radio/{_var.scss → _vars.scss} +89 -92
  301. package/styles/components/select/_index.scss +291 -290
  302. package/styles/components/select/_var.scss +64 -65
  303. package/styles/components/select-input/_index.scss +5 -5
  304. package/styles/components/select-input/_var.scss +4 -3
  305. package/styles/components/slider/_index.scss +241 -241
  306. package/styles/components/slider/_vars.scss +51 -50
  307. package/styles/components/switch/_index.scss +248 -164
  308. package/styles/components/switch/_vars.scss +63 -61
  309. package/styles/components/table/_index.scss +194 -193
  310. package/styles/components/table/_var.scss +52 -52
  311. package/styles/components/tabs/_index.scss +165 -165
  312. package/styles/components/tabs/_mixins.scss +11 -11
  313. package/styles/components/tabs/_vars.scss +72 -71
  314. package/styles/components/tag/_index.scss +317 -316
  315. package/styles/components/tag/_var.scss +86 -85
  316. package/styles/components/tag-input/_index.scss +164 -163
  317. package/styles/components/tag-input/_vars.scss +17 -16
  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 -7
  321. package/styles/mixins/_layout.scss +32 -32
  322. package/styles/mixins/_reset.scss +11 -10
  323. package/styles/mixins/_scrollbar.scss +32 -31
  324. package/styles/mixins/_text.scss +50 -48
  325. package/styles/themes/_dark.scss +169 -191
  326. package/styles/themes/_font.scss +69 -69
  327. package/styles/themes/_index.scss +5 -5
  328. package/styles/themes/_light.scss +170 -190
  329. package/styles/themes/_radius.scss +9 -9
  330. package/styles/themes/_size.scss +68 -68
  331. package/styles/utilities/_animation.scss +58 -57
  332. package/styles/utilities/_tips.scss +10 -9
  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
@@ -1,68 +1,68 @@
1
- // size/margin/padding相关 token
2
- :root {
3
- --td-size-1: 2px;
4
- --td-size-2: 4px;
5
- --td-size-3: 6px;
6
- --td-size-4: 8px;
7
- --td-size-5: 12px;
8
- --td-size-6: 16px;
9
- --td-size-7: 20px;
10
- --td-size-8: 24px;
11
- --td-size-9: 28px;
12
- --td-size-10: 32px;
13
- --td-size-11: 36px;
14
- --td-size-12: 40px;
15
- --td-size-13: 48px;
16
- --td-size-14: 56px;
17
- --td-size-15: 64px;
18
- --td-size-16: 72px;
19
-
20
- //全局 component 组件尺寸高度相关 token
21
- --td-comp-size-xxxs: var(--td-size-6);
22
- --td-comp-size-xxs: var(--td-size-7);
23
- --td-comp-size-xs: var(--td-size-8);
24
- --td-comp-size-s: var(--td-size-9);
25
- --td-comp-size-m: var(--td-size-10);
26
- --td-comp-size-l: var(--td-size-11);
27
- --td-comp-size-xl: var(--td-size-12);
28
- --td-comp-size-xxl: var(--td-size-13);
29
- --td-comp-size-xxxl: var(--td-size-14);
30
- --td-comp-size-xxxxl: var(--td-size-15);
31
- --td-comp-size-xxxxxl: var(--td-size-16);
32
-
33
- //全局 popup 弹出层整体边距 token
34
- --td-pop-padding-s: var(--td-size-2);
35
- --td-pop-padding-m: var(--td-size-3);
36
- --td-pop-padding-l: var(--td-size-4);
37
- --td-pop-padding-xl: var(--td-size-5);
38
- --td-pop-padding-xxl: var(--td-size-6);
39
-
40
- //全局 component 组件左右边距 token
41
- --td-comp-paddingLR-xxs: var(--td-size-1);
42
- --td-comp-paddingLR-xs: var(--td-size-2);
43
- --td-comp-paddingLR-s: var(--td-size-4);
44
- --td-comp-paddingLR-m: var(--td-size-5);
45
- --td-comp-paddingLR-l: var(--td-size-6);
46
- --td-comp-paddingLR-xl: var(--td-size-8);
47
- --td-comp-paddingLR-xxl: var(--td-size-10);
48
-
49
- //全局 component 组件上下边距 token
50
- --td-comp-paddingTB-xxs: var(--td-size-1);
51
- --td-comp-paddingTB-xs: var(--td-size-2);
52
- --td-comp-paddingTB-s: var(--td-size-4);
53
- --td-comp-paddingTB-m: var(--td-size-5);
54
- --td-comp-paddingTB-l: var(--td-size-6);
55
- --td-comp-paddingTB-xl: var(--td-size-8);
56
- --td-comp-paddingTB-xxl: var(--td-size-10);
57
-
58
- //全局 component 组件间距 token
59
- --td-comp-margin-xxs: var(--td-size-1);
60
- --td-comp-margin-xs: var(--td-size-2);
61
- --td-comp-margin-s: var(--td-size-4);
62
- --td-comp-margin-m: var(--td-size-5);
63
- --td-comp-margin-l: var(--td-size-6);
64
- --td-comp-margin-xl: var(--td-size-7);
65
- --td-comp-margin-xxl: var(--td-size-8);
66
- --td-comp-margin-xxxl: var(--td-size-10);
67
- --td-comp-margin-xxxxl: var(--td-size-12);
68
- }
1
+ // size/margin/padding相关 token
2
+ :root {
3
+ --td-size-1: 2px;
4
+ --td-size-2: 4px;
5
+ --td-size-3: 6px;
6
+ --td-size-4: 8px;
7
+ --td-size-5: 12px;
8
+ --td-size-6: 16px;
9
+ --td-size-7: 20px;
10
+ --td-size-8: 24px;
11
+ --td-size-9: 28px;
12
+ --td-size-10: 32px;
13
+ --td-size-11: 36px;
14
+ --td-size-12: 40px;
15
+ --td-size-13: 48px;
16
+ --td-size-14: 56px;
17
+ --td-size-15: 64px;
18
+ --td-size-16: 72px;
19
+
20
+ //全局 component 组件尺寸高度相关 token
21
+ --td-comp-size-xxxs: var(--td-size-6);
22
+ --td-comp-size-xxs: var(--td-size-7);
23
+ --td-comp-size-xs: var(--td-size-8);
24
+ --td-comp-size-s: var(--td-size-9);
25
+ --td-comp-size-m: var(--td-size-10);
26
+ --td-comp-size-l: var(--td-size-11);
27
+ --td-comp-size-xl: var(--td-size-12);
28
+ --td-comp-size-xxl: var(--td-size-13);
29
+ --td-comp-size-xxxl: var(--td-size-14);
30
+ --td-comp-size-xxxxl: var(--td-size-15);
31
+ --td-comp-size-xxxxxl: var(--td-size-16);
32
+
33
+ //全局 popup 弹出层整体边距token
34
+ --td-pop-padding-s: var(--td-size-2);
35
+ --td-pop-padding-m: var(--td-size-3);
36
+ --td-pop-padding-l: var(--td-size-4);
37
+ --td-pop-padding-xl: var(--td-size-5);
38
+ --td-pop-padding-xxl: var(--td-size-6);
39
+
40
+ //全局 component 组件左右边距 token
41
+ --td-comp-paddingLR-xxs: var(--td-size-1);
42
+ --td-comp-paddingLR-xs: var(--td-size-2);
43
+ --td-comp-paddingLR-s: var(--td-size-4);
44
+ --td-comp-paddingLR-m: var(--td-size-5);
45
+ --td-comp-paddingLR-l: var(--td-size-6);
46
+ --td-comp-paddingLR-xl: var(--td-size-8);
47
+ --td-comp-paddingLR-xxl: var(--td-size-10);
48
+
49
+ //全局 component 组件上下边距 token
50
+ --td-comp-paddingTB-xxs: var(--td-size-1);
51
+ --td-comp-paddingTB-xs: var(--td-size-2);
52
+ --td-comp-paddingTB-s: var(--td-size-4);
53
+ --td-comp-paddingTB-m: var(--td-size-5);
54
+ --td-comp-paddingTB-l: var(--td-size-6);
55
+ --td-comp-paddingTB-xl: var(--td-size-8);
56
+ --td-comp-paddingTB-xxl: var(--td-size-10);
57
+
58
+ //全局 component 组件间距 token
59
+ --td-comp-margin-xxs: var(--td-size-1);
60
+ --td-comp-margin-xs: var(--td-size-2);
61
+ --td-comp-margin-s: var(--td-size-4);
62
+ --td-comp-margin-m: var(--td-size-5);
63
+ --td-comp-margin-l: var(--td-size-6);
64
+ --td-comp-margin-xl: var(--td-size-7);
65
+ --td-comp-margin-xxl: var(--td-size-8);
66
+ --td-comp-margin-xxxl: var(--td-size-10);
67
+ --td-comp-margin-xxxxl: var(--td-size-12);
68
+ }
@@ -1,57 +1,58 @@
1
- @import '../_vars.scss';
2
-
3
- @keyframes t-fade-in {
4
- from {
5
- opacity: 0;
6
- }
7
-
8
- to {
9
- opacity: 1;
10
- }
11
- }
12
-
13
- @keyframes t-fade-out {
14
- from {
15
- opacity: 1;
16
- }
17
-
18
- to {
19
- opacity: 0;
20
- }
21
- }
22
-
23
- @keyframes t-spin {
24
- from {
25
- transform: rotate(0deg);
26
- }
27
-
28
- to {
29
- transform: rotate(360deg);
30
- }
31
- }
32
-
33
- .#{$prefix}-icon-loading {
34
- animation: t-spin 1s linear infinite;
35
- }
36
-
37
- // 动态生成 keyframes 动画
38
- @mixin anim-g-attr-change($name, $attr, $from, $to) {
39
- @keyframes #{$name} {
40
- from {
41
- #{$attr}: #{$from};
42
- }
43
- to {
44
- #{$attr}: #{$to};
45
- }
46
- }
47
- }
48
-
49
- @keyframes t-zoom-out {
50
- from {
51
- transform: scale(0.2);
52
- }
53
-
54
- to {
55
- transform: scale(1);
56
- }
57
- }
1
+ @use "../_vars.scss" as *;
2
+ @use "../_vars.scss" as *;
3
+
4
+ @keyframes t-fade-in {
5
+ from {
6
+ opacity: 0;
7
+ }
8
+
9
+ to {
10
+ opacity: 1;
11
+ }
12
+ }
13
+
14
+ @keyframes t-fade-out {
15
+ from {
16
+ opacity: 1;
17
+ }
18
+
19
+ to {
20
+ opacity: 0;
21
+ }
22
+ }
23
+
24
+ @keyframes t-spin {
25
+ from {
26
+ transform: rotate(0deg);
27
+ }
28
+
29
+ to {
30
+ transform: rotate(360deg);
31
+ }
32
+ }
33
+
34
+ .#{$prefix}-icon-loading {
35
+ animation: t-spin 1s linear infinite;
36
+ }
37
+
38
+ // 动态生成 keyframes 动画
39
+ @mixin anim-g-attr-change($name, $attr, $from, $to) {
40
+ @keyframes #{$name} {
41
+ from {
42
+ #{$attr}: #{$from};
43
+ }
44
+ to {
45
+ #{$attr}: #{$to};
46
+ }
47
+ }
48
+ }
49
+
50
+ @keyframes t-zoom-out {
51
+ from {
52
+ transform: scale(0.2);
53
+ }
54
+
55
+ to {
56
+ transform: scale(1);
57
+ }
58
+ }
@@ -1,9 +1,10 @@
1
- @import '../mixins/_text.scss';
2
- .#{$prefix}-tips {
3
- font-size: $font-size-s;
4
- }
5
-
6
- @include tips-text-status(default);
7
- @include tips-text-status(error);
8
- @include tips-text-status(warning);
9
- @include tips-text-status(success);
1
+ @use "../_vars.scss" as *;
2
+ @use "../mixins/_text.scss" as *;
3
+ .#{$prefix}-tips {
4
+ font-size: $font-size-s;
5
+ }
6
+
7
+ @include tips-text-status(default);
8
+ @include tips-text-status(error);
9
+ @include tips-text-status(warning);
10
+ @include tips-text-status(success);
@@ -0,0 +1,25 @@
1
+ import React, { useState } from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const AsyncExample = () => {
5
+ const [checked, setChecked] = useState(false);
6
+ const [loading, setLoading] = useState(false);
7
+
8
+ const handleChange = (val: boolean) => {
9
+ setLoading(true);
10
+ // 模拟异步请求
11
+ setTimeout(() => {
12
+ setChecked(val);
13
+ setLoading(false);
14
+ }, 1000);
15
+ };
16
+
17
+ return (
18
+ <div>
19
+ <Switch value={checked} loading={loading} onChange={(val) => handleChange(val as boolean)} />
20
+ <div style={{ color: "#666", fontSize: "12px" }}>点击切换,模拟 1 秒异步请求</div>
21
+ </div>
22
+ );
23
+ };
24
+
25
+ export default AsyncExample;
@@ -0,0 +1,22 @@
1
+ import React, { useState } from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const BeforeChangeExample = () => {
5
+ const [checked, setChecked] = useState(false);
6
+
7
+ const beforeChange = () => {
8
+ return new Promise<boolean>((resolve) => {
9
+ const confirmed = window.confirm("确定要切换状态吗?");
10
+ resolve(confirmed);
11
+ });
12
+ };
13
+
14
+ return (
15
+ <div>
16
+ <Switch value={checked} beforeChange={beforeChange} onChange={(val) => setChecked(val as boolean)} />
17
+ <div style={{ color: "#666", fontSize: "12px" }}>切换前会弹出确认框,确认后才会切换</div>
18
+ </div>
19
+ );
20
+ };
21
+
22
+ export default BeforeChangeExample;
@@ -0,0 +1,14 @@
1
+ import React, { useState } from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const ControlledExample = () => {
5
+ const [checked, setChecked] = useState(true);
6
+ return (
7
+ <div>
8
+ <Switch value={checked} onChange={(val) => setChecked(val as boolean)} />
9
+ <div style={{ color: "#666" }}>当前状态:{checked ? "开启" : "关闭"}</div>
10
+ </div>
11
+ );
12
+ };
13
+
14
+ export default ControlledExample;
@@ -0,0 +1,21 @@
1
+ import React, { useState } from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const CustomValueExample = () => {
5
+ const [value1, setValue1] = useState<string | number | boolean>(1);
6
+ const [value2, setValue2] = useState<string | number | boolean>("open");
7
+ return (
8
+ <div>
9
+ <div style={{ display: "flex", alignItems: "center", gap: "16px" }}>
10
+ <Switch customValue={[1, 0]} value={value1} onChange={(val) => setValue1(val)} />
11
+ <span style={{ color: "#666" }}>数字值: {String(value1)}</span>
12
+ </div>
13
+ <div style={{ display: "flex", alignItems: "center", gap: "16px" }}>
14
+ <Switch customValue={["open", "close"]} value={value2} onChange={(val) => setValue2(val)} />
15
+ <span style={{ color: "#666" }}>字符串值: {String(value2)}</span>
16
+ </div>
17
+ </div>
18
+ );
19
+ };
20
+
21
+ export default CustomValueExample;
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const DefaultExample = () => <Switch defaultValue={true} />;
5
+
6
+ export default DefaultExample;
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const DisabledExample = () => (
5
+ <div style={{ display: "flex", gap: "24px" }}>
6
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
7
+ <Switch defaultValue={false} />
8
+ <span style={{ color: "#666", fontSize: "12px" }}>正常关闭</span>
9
+ </div>
10
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
11
+ <Switch defaultValue={true} />
12
+ <span style={{ color: "#666", fontSize: "12px" }}>正常开启</span>
13
+ </div>
14
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
15
+ <Switch disabled defaultValue={false} />
16
+ <span style={{ color: "#666", fontSize: "12px" }}>禁用关闭</span>
17
+ </div>
18
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
19
+ <Switch disabled defaultValue={true} />
20
+ <span style={{ color: "#666", fontSize: "12px" }}>禁用开启</span>
21
+ </div>
22
+ </div>
23
+ );
24
+
25
+ export default DisabledExample;
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const LoadingExample = () => (
5
+ <div style={{ display: "flex", gap: "24px" }}>
6
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
7
+ <Switch loading defaultValue={false} />
8
+ <span style={{ color: "#666", fontSize: "12px" }}>加载中(关)</span>
9
+ </div>
10
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
11
+ <Switch loading defaultValue={true} />
12
+ <span style={{ color: "#666", fontSize: "12px" }}>加载中(开)</span>
13
+ </div>
14
+ </div>
15
+ );
16
+
17
+ export default LoadingExample;
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const SizesExample = () => (
5
+ <div style={{ display: "flex", gap: "24px", alignItems: "center" }}>
6
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
7
+ <Switch size="small" defaultValue={true} />
8
+ <span style={{ color: "#666", fontSize: "12px" }}>小</span>
9
+ </div>
10
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
11
+ <Switch size="medium" defaultValue={true} />
12
+ <span style={{ color: "#666", fontSize: "12px" }}>中(默认)</span>
13
+ </div>
14
+ <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }}>
15
+ <Switch size="large" defaultValue={true} />
16
+ <span style={{ color: "#666", fontSize: "12px" }}>大</span>
17
+ </div>
18
+ </div>
19
+ );
20
+
21
+ export default SizesExample;
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { Switch } from "@tendaui/react";
3
+
4
+ const WithLabelExample = () => (
5
+ <div>
6
+ <div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
7
+ <Switch label={["开", "关"]} defaultValue={true} />
8
+ <span style={{ color: "#666" }}>数组形式</span>
9
+ </div>
10
+ <div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
11
+ <Switch label={["ON", "OFF"]} defaultValue={false} />
12
+ <span style={{ color: "#666" }}>英文标签</span>
13
+ </div>
14
+ <div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
15
+ <Switch label={["1", "0"]} defaultValue={true} />
16
+ <span style={{ color: "#666" }}>数字标签</span>
17
+ </div>
18
+ </div>
19
+ );
20
+
21
+ export default WithLabelExample;
package/tab/TabPanel.tsx CHANGED
@@ -1,4 +1,4 @@
1
- import React, { useRef } from "react";
1
+ import React, { useState, useEffect } from "react";
2
2
  import classNames from "classnames";
3
3
  import type { TdTabPanelProps } from "./type";
4
4
  import { StyledProps } from "../common";
@@ -17,13 +17,16 @@ const TabPanel: React.FC<TabPanelProps> = (props) => {
17
17
  tabPanelDefaultProps
18
18
  );
19
19
  const { tdTabPanelClassPrefix } = useTabClass();
20
- const lazyRenderRef = useRef(lazy);
20
+ const [shouldRender, setShouldRender] = useState(!lazy);
21
21
 
22
- if (lazy && isActive && lazyRenderRef.current) {
23
- lazyRenderRef.current = false;
24
- }
22
+ // 当标签激活且是延迟渲染时,设置为应该渲染
23
+ useEffect(() => {
24
+ if (lazy && isActive) {
25
+ setShouldRender(true);
26
+ }
27
+ }, [lazy, isActive]);
25
28
 
26
- if ((!isActive && destroyOnHide) || lazyRenderRef.current) {
29
+ if ((!isActive && destroyOnHide) || !shouldRender) {
27
30
  return null;
28
31
  }
29
32
 
@@ -0,0 +1,45 @@
1
+ import React, { useState } from "react";
2
+ import { Tabs, TabPanel } from "../index";
3
+
4
+ const AddableExample = () => {
5
+ const [activeTab, setActiveTab] = useState("tab1");
6
+ const [tabs, setTabs] = useState([
7
+ { label: "选项卡一", value: "tab1" },
8
+ { label: "选项卡二", value: "tab2" }
9
+ ]);
10
+ const [tabCount, setTabCount] = useState(2);
11
+
12
+ const handleAdd = () => {
13
+ const newTabValue = `tab${tabCount + 1}`;
14
+ const newTab = { label: `选项卡${tabCount + 1}`, value: newTabValue };
15
+ setTabs([...tabs, newTab]);
16
+ setTabCount(tabCount + 1);
17
+ setActiveTab(newTabValue);
18
+ };
19
+
20
+ const handleRemove = (options: { value: string | number; index: number }) => {
21
+ const newTabs = tabs.filter((tab) => tab.value !== options.value);
22
+ setTabs(newTabs);
23
+ if (activeTab === options.value && newTabs.length > 0) {
24
+ setActiveTab(newTabs[0].value);
25
+ }
26
+ };
27
+
28
+ return (
29
+ <Tabs
30
+ value={activeTab}
31
+ onChange={(val) => setActiveTab(val as string)}
32
+ addable
33
+ onAdd={handleAdd}
34
+ onRemove={handleRemove}
35
+ >
36
+ {tabs.map((tab) => (
37
+ <TabPanel key={tab.value} label={tab.label} value={tab.value} removable>
38
+ <div style={{ padding: "16px" }}>{tab.label} 的内容</div>
39
+ </TabPanel>
40
+ ))}
41
+ </Tabs>
42
+ );
43
+ };
44
+
45
+ export default AddableExample;
@@ -0,0 +1,22 @@
1
+ import React, { useState } from "react";
2
+ import { Tabs, TabPanel } from "../index";
3
+
4
+ const CardThemeExample = () => {
5
+ const [activeTab, setActiveTab] = useState("tab1");
6
+
7
+ return (
8
+ <Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)} theme="card">
9
+ <TabPanel label="选项卡一" value="tab1">
10
+ <div style={{ padding: "16px" }}>卡片风格 - 选项卡一的内容</div>
11
+ </TabPanel>
12
+ <TabPanel label="选项卡二" value="tab2">
13
+ <div style={{ padding: "16px" }}>卡片风格 - 选项卡二的内容</div>
14
+ </TabPanel>
15
+ <TabPanel label="选项卡三" value="tab3">
16
+ <div style={{ padding: "16px" }}>卡片风格 - 选项卡三的内容</div>
17
+ </TabPanel>
18
+ </Tabs>
19
+ );
20
+ };
21
+
22
+ export default CardThemeExample;
@@ -0,0 +1,22 @@
1
+ import React, { useState } from "react";
2
+ import { Tabs, TabPanel } from "../index";
3
+
4
+ const DefaultExample = () => {
5
+ const [activeTab, setActiveTab] = useState("tab1");
6
+
7
+ return (
8
+ <Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)}>
9
+ <TabPanel label="选项卡一" value="tab1">
10
+ <div style={{ padding: "16px" }}>选项卡一的内容</div>
11
+ </TabPanel>
12
+ <TabPanel label="选项卡二" value="tab2">
13
+ <div style={{ padding: "16px" }}>选项卡二的内容</div>
14
+ </TabPanel>
15
+ <TabPanel label="选项卡三" value="tab3">
16
+ <div style={{ padding: "16px" }}>选项卡三的内容</div>
17
+ </TabPanel>
18
+ </Tabs>
19
+ );
20
+ };
21
+
22
+ export default DefaultExample;
@@ -0,0 +1,38 @@
1
+ import React, { useState } from "react";
2
+ import { Tabs, TabPanel } from "../index";
3
+
4
+ const DisabledExample = () => {
5
+ const [activeTab, setActiveTab] = useState("tab1");
6
+
7
+ return (
8
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
9
+ <div>
10
+ <div style={{ marginBottom: "8px", color: "#666" }}>部分禁用</div>
11
+ <Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)}>
12
+ <TabPanel label="选项卡一" value="tab1">
13
+ <div style={{ padding: "16px" }}>选项卡一的内容</div>
14
+ </TabPanel>
15
+ <TabPanel label="选项卡二(禁用)" value="tab2" disabled>
16
+ <div style={{ padding: "16px" }}>选项卡二的内容</div>
17
+ </TabPanel>
18
+ <TabPanel label="选项卡三" value="tab3">
19
+ <div style={{ padding: "16px" }}>选项卡三的内容</div>
20
+ </TabPanel>
21
+ </Tabs>
22
+ </div>
23
+ <div>
24
+ <div style={{ marginBottom: "8px", color: "#666" }}>全部禁用</div>
25
+ <Tabs value="tab1" disabled>
26
+ <TabPanel label="选项卡一" value="tab1">
27
+ <div style={{ padding: "16px" }}>选项卡一的内容</div>
28
+ </TabPanel>
29
+ <TabPanel label="选项卡二" value="tab2">
30
+ <div style={{ padding: "16px" }}>选项卡二的内容</div>
31
+ </TabPanel>
32
+ </Tabs>
33
+ </div>
34
+ </div>
35
+ );
36
+ };
37
+
38
+ export default DisabledExample;
@@ -0,0 +1,25 @@
1
+ import React, { useState } from "react";
2
+ import { Tabs, TabPanel } from "../index";
3
+
4
+ const LazyExample = () => {
5
+ const [activeTab, setActiveTab] = useState("tab1");
6
+
7
+ return (
8
+ <div>
9
+ <div style={{ marginBottom: "8px", color: "#666" }}>懒加载模式下,只有在选项卡被激活时才会渲染内容</div>
10
+ <Tabs value={activeTab} onChange={(val) => setActiveTab(val as string)}>
11
+ <TabPanel label="选项卡一" value="tab1" lazy>
12
+ <div style={{ padding: "16px" }}>选项卡一的内容(懒加载)</div>
13
+ </TabPanel>
14
+ <TabPanel label="选项卡二" value="tab2" lazy>
15
+ <div style={{ padding: "16px" }}>选项卡二的内容(懒加载)</div>
16
+ </TabPanel>
17
+ <TabPanel label="选项卡三" value="tab3" lazy>
18
+ <div style={{ padding: "16px" }}>选项卡三的内容(懒加载)</div>
19
+ </TabPanel>
20
+ </Tabs>
21
+ </div>
22
+ );
23
+ };
24
+
25
+ export default LazyExample;