@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,32 @@
1
+ import React, { useState } from "react";
2
+ import IPInput from "../IPInput";
3
+
4
+ const FullFeaturedExample = () => {
5
+ const [value, setValue] = useState("");
6
+ return (
7
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
8
+ <IPInput
9
+ value={value}
10
+ onChange={setValue}
11
+ allowIPv6={true}
12
+ allowCIDR={true}
13
+ showClear={true}
14
+ placeholder="输入 IPv4 或 IPv6 地址"
15
+ tips="支持 IPv4、IPv6 和 CIDR 格式"
16
+ />
17
+ <div
18
+ style={{
19
+ padding: "12px",
20
+ background: "#f5f5f5",
21
+ borderRadius: "4px",
22
+ fontSize: "12px"
23
+ }}
24
+ >
25
+ <strong>当前值:</strong>
26
+ {value || "(空)"}
27
+ </div>
28
+ </div>
29
+ );
30
+ };
31
+
32
+ export default FullFeaturedExample;
@@ -0,0 +1,23 @@
1
+ import React, { useState } from "react";
2
+ import IPInput from "../IPInput";
3
+
4
+ const IPv6Example = () => {
5
+ const [value, setValue] = useState("");
6
+ return (
7
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
8
+ <IPInput
9
+ value={value}
10
+ onChange={(val) => {
11
+ setValue(val);
12
+ console.log("值:", val);
13
+ }}
14
+ allowIPv6={true}
15
+ allowCIDR={true}
16
+ placeholder="2001:db8::1"
17
+ />
18
+ <div style={{ color: "#666", fontSize: "12px" }}>当前值: {value || "(空)"}</div>
19
+ </div>
20
+ );
21
+ };
22
+
23
+ export default IPv6Example;
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+ import IPInput from "../IPInput";
3
+
4
+ const KeyboardNavigationExample = () => (
5
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
6
+ <div style={{ color: "#666", fontSize: "12px" }}>
7
+ <p style={{ fontWeight: "bold" }}>键盘操作说明:</p>
8
+ <ul style={{ margin: "8px 0", paddingLeft: "20px" }}>
9
+ <li>输入 3 位数字自动跳转到下一段</li>
10
+ <li>输入 . 或空格跳转到下一段</li>
11
+ <li>左/右箭头键在段之间移动</li>
12
+ <li>在段开头按 Backspace 跳转到上一段</li>
13
+ </ul>
14
+ </div>
15
+ <IPInput placeholder="192.168.0.1" autoFocus />
16
+ </div>
17
+ );
18
+
19
+ export default KeyboardNavigationExample;
@@ -0,0 +1,23 @@
1
+ import React, { useState } from "react";
2
+ import IPInput from "../IPInput";
3
+
4
+ const PasteDemoExample = () => {
5
+ const [value, setValue] = useState("");
6
+ return (
7
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
8
+ <div style={{ color: "#666", fontSize: "12px" }}>
9
+ 尝试粘贴以下内容:
10
+ <ul style={{ margin: "8px 0", paddingLeft: "20px" }}>
11
+ <li>192.168.0.1</li>
12
+ <li>192.168.0.1/24</li>
13
+ <li>abc 10.0.0.1 xyz(会自动提取 IP)</li>
14
+ <li>2001:db8::1(需要开启 IPv6)</li>
15
+ </ul>
16
+ </div>
17
+ <IPInput value={value} onChange={setValue} allowCIDR={true} allowIPv6={true} showClear={true} />
18
+ <div style={{ color: "#666", fontSize: "12px" }}>当前值: {value || "(空)"}</div>
19
+ </div>
20
+ );
21
+ };
22
+
23
+ export default PasteDemoExample;
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import IPInput from "../IPInput";
3
+
4
+ const StatesExample = () => (
5
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
6
+ <div>
7
+ <div style={{ marginBottom: "8px", color: "#666" }}>正常状态</div>
8
+ <IPInput defaultValue="192.168.0.1" />
9
+ </div>
10
+ <div>
11
+ <div style={{ marginBottom: "8px", color: "#666" }}>禁用状态</div>
12
+ <IPInput defaultValue="192.168.0.1" disabled />
13
+ </div>
14
+ <div>
15
+ <div style={{ marginBottom: "8px", color: "#666" }}>只读状态</div>
16
+ <IPInput defaultValue="192.168.0.1" readOnly />
17
+ </div>
18
+ </div>
19
+ );
20
+
21
+ export default StatesExample;
@@ -0,0 +1,23 @@
1
+ import React, { useState } from "react";
2
+ import IPInput from "../IPInput";
3
+
4
+ const WithCIDRExample = () => {
5
+ const [value, setValue] = useState("");
6
+ return (
7
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
8
+ <IPInput
9
+ value={value}
10
+ onChange={(val) => {
11
+ setValue(val);
12
+ console.log("值:", val);
13
+ }}
14
+ allowCIDR={true}
15
+ showClear={true}
16
+ placeholder="192.168.0.1/24"
17
+ />
18
+ <div style={{ color: "#666", fontSize: "12px" }}>当前值: {value || "(空)"}</div>
19
+ </div>
20
+ );
21
+ };
22
+
23
+ export default WithCIDRExample;
@@ -0,0 +1,54 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer, Aside } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ aside: {
16
+ background: "var(--td-brand-color-8)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ display: "flex",
20
+ alignItems: "center",
21
+ justifyContent: "center"
22
+ },
23
+ content: {
24
+ background: "var(--td-brand-color-5)",
25
+ color: "var(--td-text-color-anti)",
26
+ fontSize: "14px",
27
+ height: "120px",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ justifyContent: "center"
31
+ },
32
+ footer: {
33
+ background: "var(--td-brand-color-9)",
34
+ color: "var(--td-text-color-anti)",
35
+ fontSize: "12px",
36
+ textAlign: "center" as const,
37
+ lineHeight: "48px"
38
+ }
39
+ };
40
+
41
+ const CombineLeftLayout = () => (
42
+ <Layout>
43
+ <Header style={demoStyles.header}>Header</Header>
44
+ <Layout>
45
+ <Aside style={demoStyles.aside}>Aside</Aside>
46
+ <Layout>
47
+ <Content style={demoStyles.content}>Content</Content>
48
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
49
+ </Layout>
50
+ </Layout>
51
+ </Layout>
52
+ );
53
+
54
+ export default CombineLeftLayout;
@@ -0,0 +1,54 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer, Aside } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ aside: {
16
+ background: "var(--td-brand-color-8)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ display: "flex",
20
+ alignItems: "center",
21
+ justifyContent: "center"
22
+ },
23
+ content: {
24
+ background: "var(--td-brand-color-5)",
25
+ color: "var(--td-text-color-anti)",
26
+ fontSize: "14px",
27
+ height: "120px",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ justifyContent: "center"
31
+ },
32
+ footer: {
33
+ background: "var(--td-brand-color-9)",
34
+ color: "var(--td-text-color-anti)",
35
+ fontSize: "12px",
36
+ textAlign: "center" as const,
37
+ lineHeight: "48px"
38
+ }
39
+ };
40
+
41
+ const CombineRightLayout = () => (
42
+ <Layout>
43
+ <Header style={demoStyles.header}>Header</Header>
44
+ <Layout>
45
+ <Layout>
46
+ <Content style={demoStyles.content}>Content</Content>
47
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
48
+ </Layout>
49
+ <Aside style={demoStyles.aside}>Aside</Aside>
50
+ </Layout>
51
+ </Layout>
52
+ );
53
+
54
+ export default CombineRightLayout;
@@ -0,0 +1,56 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer, Aside } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ aside: {
16
+ background: "var(--td-brand-color-8)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ display: "flex",
20
+ alignItems: "center",
21
+ justifyContent: "center"
22
+ },
23
+ content: {
24
+ background: "var(--td-brand-color-5)",
25
+ color: "var(--td-text-color-anti)",
26
+ fontSize: "14px",
27
+ height: "120px",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ justifyContent: "center"
31
+ },
32
+ footer: {
33
+ background: "var(--td-brand-color-9)",
34
+ color: "var(--td-text-color-anti)",
35
+ fontSize: "12px",
36
+ textAlign: "center" as const,
37
+ lineHeight: "48px"
38
+ }
39
+ };
40
+
41
+ const CustomAsideWidthLayout = () => (
42
+ <Layout>
43
+ <Header style={demoStyles.header}>Header</Header>
44
+ <Layout>
45
+ <Aside width="80px" style={demoStyles.aside}>
46
+ Aside (80px)
47
+ </Aside>
48
+ <Layout>
49
+ <Content style={demoStyles.content}>Content</Content>
50
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
51
+ </Layout>
52
+ </Layout>
53
+ </Layout>
54
+ );
55
+
56
+ export default CustomAsideWidthLayout;
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ content: {
16
+ background: "var(--td-brand-color-5)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ height: "120px",
20
+ display: "flex",
21
+ alignItems: "center",
22
+ justifyContent: "center"
23
+ },
24
+ footer: {
25
+ background: "var(--td-brand-color-9)",
26
+ color: "var(--td-text-color-anti)",
27
+ fontSize: "12px",
28
+ textAlign: "center" as const,
29
+ lineHeight: "48px"
30
+ }
31
+ };
32
+
33
+ const CustomHeightLayout = () => (
34
+ <Layout>
35
+ <Header height="80px" style={demoStyles.header}>
36
+ Header (80px)
37
+ </Header>
38
+ <Content style={demoStyles.content}>Content</Content>
39
+ <Footer height="60px" style={demoStyles.footer}>
40
+ Footer (60px)
41
+ </Footer>
42
+ </Layout>
43
+ );
44
+
45
+ export default CustomHeightLayout;
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer, Aside } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ aside: {
16
+ background: "var(--td-brand-color-8)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ display: "flex",
20
+ alignItems: "center",
21
+ justifyContent: "center"
22
+ },
23
+ content: {
24
+ background: "var(--td-brand-color-5)",
25
+ color: "var(--td-text-color-anti)",
26
+ fontSize: "14px",
27
+ height: "120px",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ justifyContent: "center"
31
+ },
32
+ footer: {
33
+ background: "var(--td-brand-color-9)",
34
+ color: "var(--td-text-color-anti)",
35
+ fontSize: "12px",
36
+ textAlign: "center" as const,
37
+ lineHeight: "48px"
38
+ }
39
+ };
40
+
41
+ const DoubleSidebarLayout = () => (
42
+ <Layout>
43
+ <Aside width="100px" style={demoStyles.aside}>
44
+ Left Aside
45
+ </Aside>
46
+ <Layout>
47
+ <Header style={demoStyles.header}>Header</Header>
48
+ <Content style={demoStyles.content}>Content</Content>
49
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
50
+ </Layout>
51
+ <Aside width="200px" style={demoStyles.aside}>
52
+ Right Aside
53
+ </Aside>
54
+ </Layout>
55
+ );
56
+
57
+ export default DoubleSidebarLayout;
@@ -0,0 +1,51 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer, Aside } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ aside: {
16
+ background: "var(--td-brand-color-8)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ display: "flex",
20
+ alignItems: "center",
21
+ justifyContent: "center"
22
+ },
23
+ content: {
24
+ background: "var(--td-brand-color-5)",
25
+ color: "var(--td-text-color-anti)",
26
+ fontSize: "14px",
27
+ height: "120px",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ justifyContent: "center"
31
+ },
32
+ footer: {
33
+ background: "var(--td-brand-color-9)",
34
+ color: "var(--td-text-color-anti)",
35
+ fontSize: "12px",
36
+ textAlign: "center" as const,
37
+ lineHeight: "48px"
38
+ }
39
+ };
40
+
41
+ const SideNavigationRightLayout = () => (
42
+ <Layout>
43
+ <Layout>
44
+ <Content style={demoStyles.content}>Content</Content>
45
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
46
+ </Layout>
47
+ <Aside style={demoStyles.aside}>Aside</Aside>
48
+ </Layout>
49
+ );
50
+
51
+ export default SideNavigationRightLayout;
@@ -0,0 +1,51 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer, Aside } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ aside: {
16
+ background: "var(--td-brand-color-8)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ display: "flex",
20
+ alignItems: "center",
21
+ justifyContent: "center"
22
+ },
23
+ content: {
24
+ background: "var(--td-brand-color-5)",
25
+ color: "var(--td-text-color-anti)",
26
+ fontSize: "14px",
27
+ height: "120px",
28
+ display: "flex",
29
+ alignItems: "center",
30
+ justifyContent: "center"
31
+ },
32
+ footer: {
33
+ background: "var(--td-brand-color-9)",
34
+ color: "var(--td-text-color-anti)",
35
+ fontSize: "12px",
36
+ textAlign: "center" as const,
37
+ lineHeight: "48px"
38
+ }
39
+ };
40
+
41
+ const SideNavigationLayout = () => (
42
+ <Layout>
43
+ <Aside style={demoStyles.aside}>Aside</Aside>
44
+ <Layout>
45
+ <Content style={demoStyles.content}>Content</Content>
46
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
47
+ </Layout>
48
+ </Layout>
49
+ );
50
+
51
+ export default SideNavigationLayout;
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import { Layout } from "../index";
3
+
4
+ const { Header, Content, Footer } = Layout;
5
+
6
+ // 定义演示用的样式
7
+ const demoStyles = {
8
+ header: {
9
+ background: "var(--td-brand-color-9)",
10
+ color: "var(--td-text-color-anti)",
11
+ fontSize: "14px",
12
+ lineHeight: "64px",
13
+ textAlign: "center" as const
14
+ },
15
+ content: {
16
+ background: "var(--td-brand-color-5)",
17
+ color: "var(--td-text-color-anti)",
18
+ fontSize: "14px",
19
+ height: "120px",
20
+ display: "flex",
21
+ alignItems: "center",
22
+ justifyContent: "center"
23
+ },
24
+ footer: {
25
+ background: "var(--td-brand-color-9)",
26
+ color: "var(--td-text-color-anti)",
27
+ fontSize: "12px",
28
+ textAlign: "center" as const,
29
+ lineHeight: "48px"
30
+ }
31
+ };
32
+
33
+ const TopNavigationLayout = () => (
34
+ <Layout>
35
+ <Header style={demoStyles.header}>Header</Header>
36
+ <Content style={demoStyles.content}>Content</Content>
37
+ <Footer style={demoStyles.footer}>Copyright @ 2019-2024 All Rights Reserved</Footer>
38
+ </Layout>
39
+ );
40
+
41
+ export default TopNavigationLayout;
@@ -0,0 +1,46 @@
1
+ import React, { useState } from "react";
2
+ import { List } from "../index";
3
+
4
+ const { ListItem } = List;
5
+
6
+ const AsyncLoadingList = () => {
7
+ const [asyncLoading, setAsyncLoading] = useState<React.ReactNode>("");
8
+
9
+ const listData = [
10
+ { id: 1, content: "列表内容列表内容列表内容" },
11
+ { id: 2, content: "列表内容列表内容列表内容" },
12
+ { id: 3, content: "列表内容列表内容列表内容" },
13
+ { id: 4, content: "列表内容列表内容列表内容" }
14
+ ];
15
+
16
+ const handleAsyncLoading = (val: string) => {
17
+ if (val === "loading-custom") {
18
+ setAsyncLoading(<div style={{ textAlign: "center", padding: "12px", color: "#999" }}>没有更多数据了</div>);
19
+ } else {
20
+ setAsyncLoading(val);
21
+ }
22
+ };
23
+
24
+ const onLoadMore = () => {
25
+ console.log("加载更多");
26
+ handleAsyncLoading("loading");
27
+ };
28
+
29
+ return (
30
+ <div style={{ display: "flex", flexDirection: "column", gap: "16px" }}>
31
+ <div style={{ display: "flex", gap: "8px", flexWrap: "wrap" }}>
32
+ <button onClick={() => handleAsyncLoading("load-more")}>显示加载更多</button>
33
+ <button onClick={() => handleAsyncLoading("loading")}>显示加载中</button>
34
+ <button onClick={() => handleAsyncLoading("loading-custom")}>自定义底部</button>
35
+ <button onClick={() => handleAsyncLoading("")}>隐藏加载状态</button>
36
+ </div>
37
+ <List asyncLoading={asyncLoading} onLoadMore={onLoadMore}>
38
+ {listData.map((item) => (
39
+ <ListItem key={item.id}>{item.content}</ListItem>
40
+ ))}
41
+ </List>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ export default AsyncLoadingList;
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { List } from "../index";
3
+
4
+ const { ListItem } = List;
5
+
6
+ const DefaultList = () => {
7
+ const listData = [
8
+ { id: 1, content: "列表内容的描述性文字" },
9
+ { id: 2, content: "列表内容的描述性文字" },
10
+ { id: 3, content: "列表内容的描述性文字" },
11
+ { id: 4, content: "列表内容的描述性文字" }
12
+ ];
13
+
14
+ return (
15
+ <List>
16
+ {listData.map((item) => (
17
+ <ListItem key={item.id}>{item.content}</ListItem>
18
+ ))}
19
+ </List>
20
+ );
21
+ };
22
+
23
+ export default DefaultList;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import { List } from "../index";
3
+
4
+ const { ListItem } = List;
5
+
6
+ const HeaderFooterList = () => {
7
+ const listData = [
8
+ { id: 1, content: "列表内容列表内容列表内容" },
9
+ { id: 2, content: "列表内容列表内容列表内容" },
10
+ { id: 3, content: "列表内容列表内容列表内容" },
11
+ { id: 4, content: "列表内容列表内容列表内容" }
12
+ ];
13
+
14
+ return (
15
+ <div style={{ display: "flex", flexDirection: "column", gap: "24px" }}>
16
+ <div>
17
+ <h4 style={{ marginBottom: "16px", color: "#666" }}>字符串头部/底部</h4>
18
+ <List header="这里是 Header" footer="这里是 Footer">
19
+ {listData.map((item) => (
20
+ <ListItem key={item.id}>{item.content}</ListItem>
21
+ ))}
22
+ </List>
23
+ </div>
24
+
25
+ <div>
26
+ <h4 style={{ marginBottom: "16px", color: "#666" }}>自定义头部/底部</h4>
27
+ <List
28
+ header={<div style={{ fontWeight: "bold", color: "var(--td-brand-color)" }}>自定义 Header</div>}
29
+ footer={<div style={{ textAlign: "center", color: "#999" }}>自定义 Footer</div>}
30
+ >
31
+ {listData.map((item) => (
32
+ <ListItem key={item.id}>{item.content}</ListItem>
33
+ ))}
34
+ </List>
35
+ </div>
36
+ </div>
37
+ );
38
+ };
39
+
40
+ export default HeaderFooterList;