@fangxinyan/lumina 0.1.6 → 0.2.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 (242) hide show
  1. package/README.md +18 -7
  2. package/dist/{Accordion-GSBY5T5U.css → Accordion-3TQPKNN3.css} +8 -1
  3. package/dist/Accordion.cjs +2 -2
  4. package/dist/Accordion.d.cts +12 -0
  5. package/dist/Accordion.d.ts +12 -0
  6. package/dist/Accordion.js +1 -1
  7. package/dist/{Alert-LSKBYDRI.css → Alert-JJ7GB3UU.css} +11 -0
  8. package/dist/Alert.cjs +2 -2
  9. package/dist/Alert.d.cts +4 -0
  10. package/dist/Alert.d.ts +4 -0
  11. package/dist/Alert.js +1 -1
  12. package/dist/{Avatar-OXDSG5Q6.css → Avatar-R5A4AFKZ.css} +4 -0
  13. package/dist/Avatar.cjs +2 -2
  14. package/dist/Avatar.d.cts +2 -0
  15. package/dist/Avatar.d.ts +2 -0
  16. package/dist/Avatar.js +1 -1
  17. package/dist/{Button-5UI7QXGU.css → Button-SDQD25AG.css} +2 -0
  18. package/dist/Button.cjs +3 -3
  19. package/dist/Button.d.cts +2 -0
  20. package/dist/Button.d.ts +2 -0
  21. package/dist/Button.js +1 -1
  22. package/dist/Calendar.cjs +2 -2
  23. package/dist/Calendar.d.cts +8 -0
  24. package/dist/Calendar.d.ts +8 -0
  25. package/dist/Calendar.js +1 -1
  26. package/dist/{Card-2CHHFD4Y.css → Card-RG7ECXL2.css} +11 -0
  27. package/dist/Card.cjs +3 -3
  28. package/dist/Card.d.cts +2 -0
  29. package/dist/Card.d.ts +2 -0
  30. package/dist/Card.js +1 -1
  31. package/dist/{Divider-Z37INS5E.css → Divider-OEE4Q2KS.css} +31 -0
  32. package/dist/Divider.cjs +2 -2
  33. package/dist/Divider.d.cts +7 -0
  34. package/dist/Divider.d.ts +7 -0
  35. package/dist/Divider.js +1 -1
  36. package/dist/{Empty-VM23UNLQ.css → Empty-NQ72W3D7.css} +22 -0
  37. package/dist/Empty.cjs +4 -4
  38. package/dist/Empty.d.cts +42 -2
  39. package/dist/Empty.d.ts +42 -2
  40. package/dist/Empty.js +1 -1
  41. package/dist/Input-33CAH4O6.css +134 -0
  42. package/dist/Input.cjs +3 -3
  43. package/dist/Input.d.cts +17 -1
  44. package/dist/Input.d.ts +17 -1
  45. package/dist/Input.js +1 -1
  46. package/dist/Modal.cjs +3 -3
  47. package/dist/Modal.js +2 -2
  48. package/dist/{Pagination-6FFOI4NM.css → Pagination-YIRYJUXP.css} +33 -0
  49. package/dist/Pagination.cjs +5 -2
  50. package/dist/Pagination.d.cts +14 -0
  51. package/dist/Pagination.d.ts +14 -0
  52. package/dist/Pagination.js +4 -1
  53. package/dist/Select.cjs +3 -3
  54. package/dist/Select.js +2 -2
  55. package/dist/{Slider-RE4HZQKF.css → Slider-X4PVA65R.css} +51 -2
  56. package/dist/Slider.cjs +2 -2
  57. package/dist/Slider.d.cts +20 -5
  58. package/dist/Slider.d.ts +20 -5
  59. package/dist/Slider.js +1 -1
  60. package/dist/Switch-36KJNDXM.css +92 -0
  61. package/dist/Switch.cjs +2 -2
  62. package/dist/Switch.d.cts +4 -0
  63. package/dist/Switch.d.ts +4 -0
  64. package/dist/Switch.js +1 -1
  65. package/dist/Table-YKVM42SW.css +295 -0
  66. package/dist/Table.cjs +7 -3
  67. package/dist/Table.d.cts +103 -7
  68. package/dist/Table.d.ts +103 -7
  69. package/dist/Table.js +5 -1
  70. package/dist/{Tabs-A27TSZOP.css → Tabs-RHK6XAFF.css} +7 -0
  71. package/dist/Tabs.cjs +3 -3
  72. package/dist/Tabs.d.cts +2 -0
  73. package/dist/Tabs.d.ts +2 -0
  74. package/dist/Tabs.js +1 -1
  75. package/dist/{Tag-EYOY3UWG.css → Tag-FGDY3W7E.css} +2 -0
  76. package/dist/Tag.cjs +3 -3
  77. package/dist/Tag.d.cts +5 -0
  78. package/dist/Tag.d.ts +5 -0
  79. package/dist/Tag.js +1 -1
  80. package/dist/chunk-437LB2V4.js +111 -0
  81. package/dist/chunk-437LB2V4.js.map +1 -0
  82. package/dist/chunk-4MR4GVTD.js +73 -0
  83. package/dist/chunk-4MR4GVTD.js.map +1 -0
  84. package/dist/{chunk-OXYFB2ZI.js → chunk-4U4OY5RA.js} +11 -5
  85. package/dist/chunk-4U4OY5RA.js.map +1 -0
  86. package/dist/{chunk-5EYI27B6.js → chunk-77BVQNAQ.js} +5 -3
  87. package/dist/chunk-77BVQNAQ.js.map +1 -0
  88. package/dist/{chunk-3QWHDCHJ.js → chunk-AJZKESHB.js} +13 -4
  89. package/dist/chunk-AJZKESHB.js.map +1 -0
  90. package/dist/{chunk-NZPJ7BUB.cjs → chunk-AXMEZGEG.cjs} +13 -4
  91. package/dist/chunk-AXMEZGEG.cjs.map +1 -0
  92. package/dist/{chunk-HTP6UEVR.js → chunk-BBPNQ44M.js} +22 -6
  93. package/dist/chunk-BBPNQ44M.js.map +1 -0
  94. package/dist/{chunk-QQXIWOI3.cjs → chunk-CCBHZYE6.cjs} +5 -5
  95. package/dist/{chunk-QQXIWOI3.cjs.map → chunk-CCBHZYE6.cjs.map} +1 -1
  96. package/dist/chunk-E6R63QOL.js +476 -0
  97. package/dist/chunk-E6R63QOL.js.map +1 -0
  98. package/dist/{chunk-KGYLUZOU.cjs → chunk-EPFYIR63.cjs} +5 -5
  99. package/dist/{chunk-KGYLUZOU.cjs.map → chunk-EPFYIR63.cjs.map} +1 -1
  100. package/dist/chunk-F7HW2PYR.cjs +119 -0
  101. package/dist/chunk-F7HW2PYR.cjs.map +1 -0
  102. package/dist/chunk-GIVMKGZN.js +39 -0
  103. package/dist/chunk-GIVMKGZN.js.map +1 -0
  104. package/dist/{chunk-FMG3ZPGK.js → chunk-H6FCIJOP.js} +5 -3
  105. package/dist/chunk-H6FCIJOP.js.map +1 -0
  106. package/dist/{chunk-ALFDP5WX.cjs → chunk-IDM6JJLP.cjs} +22 -6
  107. package/dist/chunk-IDM6JJLP.cjs.map +1 -0
  108. package/dist/{chunk-I2ERCHFV.cjs → chunk-JKLQOB2F.cjs} +11 -5
  109. package/dist/chunk-JKLQOB2F.cjs.map +1 -0
  110. package/dist/{chunk-IGHLSNXT.cjs → chunk-K7PVJLW4.cjs} +51 -4
  111. package/dist/chunk-K7PVJLW4.cjs.map +1 -0
  112. package/dist/chunk-LDENBYRC.cjs +210 -0
  113. package/dist/chunk-LDENBYRC.cjs.map +1 -0
  114. package/dist/{chunk-OOBSH7EL.js → chunk-LSLYY5FN.js} +3 -3
  115. package/dist/{chunk-OOBSH7EL.js.map → chunk-LSLYY5FN.js.map} +1 -1
  116. package/dist/chunk-NSUD5B22.js +187 -0
  117. package/dist/chunk-NSUD5B22.js.map +1 -0
  118. package/dist/{chunk-AAMYURWQ.cjs → chunk-OPTTHURA.cjs} +5 -3
  119. package/dist/chunk-OPTTHURA.cjs.map +1 -0
  120. package/dist/{chunk-F3NHM4GX.js → chunk-OYGFMXAA.js} +13 -4
  121. package/dist/chunk-OYGFMXAA.js.map +1 -0
  122. package/dist/chunk-PBBHUUXU.cjs +133 -0
  123. package/dist/chunk-PBBHUUXU.cjs.map +1 -0
  124. package/dist/chunk-RDLPX7RK.cjs +95 -0
  125. package/dist/chunk-RDLPX7RK.cjs.map +1 -0
  126. package/dist/chunk-SBMOIE5C.cjs +499 -0
  127. package/dist/chunk-SBMOIE5C.cjs.map +1 -0
  128. package/dist/{chunk-XFRP2MBR.js → chunk-TYQ5CN2C.js} +51 -4
  129. package/dist/chunk-TYQ5CN2C.js.map +1 -0
  130. package/dist/{chunk-7CKHWCEA.cjs → chunk-TZSWDH5T.cjs} +5 -3
  131. package/dist/chunk-TZSWDH5T.cjs.map +1 -0
  132. package/dist/{chunk-VMHNKD3N.cjs → chunk-URF6RBW6.cjs} +13 -4
  133. package/dist/chunk-URF6RBW6.cjs.map +1 -0
  134. package/dist/{chunk-G3UWXSNQ.js → chunk-V34OPWKZ.js} +5 -4
  135. package/dist/chunk-V34OPWKZ.js.map +1 -0
  136. package/dist/{chunk-ITGCHU3Y.cjs → chunk-VICGQC6G.cjs} +5 -4
  137. package/dist/chunk-VICGQC6G.cjs.map +1 -0
  138. package/dist/chunk-YEOARJKR.cjs +40 -0
  139. package/dist/chunk-YEOARJKR.cjs.map +1 -0
  140. package/dist/chunk-Z5X5AMLA.cjs +41 -0
  141. package/dist/chunk-Z5X5AMLA.cjs.map +1 -0
  142. package/dist/chunk-Z7P6QGMT.js +115 -0
  143. package/dist/chunk-Z7P6QGMT.js.map +1 -0
  144. package/dist/{chunk-OYH6A7IQ.js → chunk-ZVCMXDTP.js} +3 -3
  145. package/dist/{chunk-OYH6A7IQ.js.map → chunk-ZVCMXDTP.js.map} +1 -1
  146. package/dist/chunk-ZWP4LSS3.js +38 -0
  147. package/dist/chunk-ZWP4LSS3.js.map +1 -0
  148. package/dist/index.cjs +43 -43
  149. package/dist/index.cjs.map +1 -1
  150. package/dist/index.d.cts +4 -4
  151. package/dist/index.d.ts +4 -4
  152. package/dist/index.js +18 -18
  153. package/dist/index.js.map +1 -1
  154. package/dist/styles.css +455 -30
  155. package/docs/llms/accordion.md +66 -0
  156. package/docs/llms/alert.md +64 -0
  157. package/docs/llms/avatar.md +55 -0
  158. package/docs/llms/badge.md +41 -0
  159. package/docs/llms/button.md +122 -0
  160. package/docs/llms/calendar.md +44 -0
  161. package/docs/llms/card.md +68 -0
  162. package/docs/llms/cascader.md +33 -0
  163. package/docs/llms/checkbox.md +41 -0
  164. package/docs/llms/colorpicker.md +82 -0
  165. package/docs/llms/divider.md +69 -0
  166. package/docs/llms/drawer.md +70 -0
  167. package/docs/llms/empty.md +52 -0
  168. package/docs/llms/icon.md +34 -0
  169. package/docs/llms/image.md +39 -0
  170. package/docs/llms/input.md +127 -0
  171. package/docs/llms/intro.md +6 -0
  172. package/docs/llms/list.md +41 -0
  173. package/docs/llms/modal.md +89 -0
  174. package/docs/llms/pagination.md +82 -0
  175. package/docs/llms/popover.md +34 -0
  176. package/docs/llms/progress.md +58 -0
  177. package/docs/llms/radio.md +43 -0
  178. package/docs/llms/select.md +99 -0
  179. package/docs/llms/sidebar.md +43 -0
  180. package/docs/llms/skeleton.md +88 -0
  181. package/docs/llms/slider.md +72 -0
  182. package/docs/llms/spinner.md +58 -0
  183. package/docs/llms/switch.md +60 -0
  184. package/docs/llms/table.md +188 -0
  185. package/docs/llms/tablepro.md +56 -0
  186. package/docs/llms/tabs.md +50 -0
  187. package/docs/llms/tag.md +77 -0
  188. package/docs/llms/theme.md +165 -0
  189. package/docs/llms/titlebar.md +40 -0
  190. package/docs/llms/toast.md +51 -0
  191. package/docs/llms/tooltip.md +38 -0
  192. package/docs/llms/typography.md +103 -0
  193. package/docs/llms/windowcontrols.md +31 -0
  194. package/docs/llms.md +97 -0
  195. package/package.json +8 -2
  196. package/dist/Input-Z526ARZP.css +0 -66
  197. package/dist/Switch-NP7KKJOX.css +0 -44
  198. package/dist/Table-ZDPGWLH3.css +0 -139
  199. package/dist/chunk-2VA2HSL4.cjs +0 -121
  200. package/dist/chunk-2VA2HSL4.cjs.map +0 -1
  201. package/dist/chunk-2W2AJUZW.js +0 -118
  202. package/dist/chunk-2W2AJUZW.js.map +0 -1
  203. package/dist/chunk-3QWHDCHJ.js.map +0 -1
  204. package/dist/chunk-4AA22BOG.js +0 -63
  205. package/dist/chunk-4AA22BOG.js.map +0 -1
  206. package/dist/chunk-5EYI27B6.js.map +0 -1
  207. package/dist/chunk-77NP67ML.cjs +0 -70
  208. package/dist/chunk-77NP67ML.cjs.map +0 -1
  209. package/dist/chunk-7CKHWCEA.cjs.map +0 -1
  210. package/dist/chunk-7NM5BRUX.js +0 -91
  211. package/dist/chunk-7NM5BRUX.js.map +0 -1
  212. package/dist/chunk-7UJI437T.js +0 -49
  213. package/dist/chunk-7UJI437T.js.map +0 -1
  214. package/dist/chunk-AAMYURWQ.cjs.map +0 -1
  215. package/dist/chunk-ALFDP5WX.cjs.map +0 -1
  216. package/dist/chunk-F3NHM4GX.js.map +0 -1
  217. package/dist/chunk-FMG3ZPGK.js.map +0 -1
  218. package/dist/chunk-G3UWXSNQ.js.map +0 -1
  219. package/dist/chunk-HTP6UEVR.js.map +0 -1
  220. package/dist/chunk-I2ERCHFV.cjs.map +0 -1
  221. package/dist/chunk-IBZAGURN.cjs +0 -71
  222. package/dist/chunk-IBZAGURN.cjs.map +0 -1
  223. package/dist/chunk-IGHLSNXT.cjs.map +0 -1
  224. package/dist/chunk-ITGCHU3Y.cjs.map +0 -1
  225. package/dist/chunk-JNFCTYJT.cjs +0 -31
  226. package/dist/chunk-JNFCTYJT.cjs.map +0 -1
  227. package/dist/chunk-JWFVSBVX.cjs +0 -30
  228. package/dist/chunk-JWFVSBVX.cjs.map +0 -1
  229. package/dist/chunk-K67KIKX4.cjs +0 -67
  230. package/dist/chunk-K67KIKX4.cjs.map +0 -1
  231. package/dist/chunk-M6OTFXZA.js +0 -48
  232. package/dist/chunk-M6OTFXZA.js.map +0 -1
  233. package/dist/chunk-NWJW5KLN.js +0 -29
  234. package/dist/chunk-NWJW5KLN.js.map +0 -1
  235. package/dist/chunk-NZPJ7BUB.cjs.map +0 -1
  236. package/dist/chunk-OXYFB2ZI.js.map +0 -1
  237. package/dist/chunk-QT7SJITQ.cjs +0 -114
  238. package/dist/chunk-QT7SJITQ.cjs.map +0 -1
  239. package/dist/chunk-VMHNKD3N.cjs.map +0 -1
  240. package/dist/chunk-VXITDXLW.js +0 -28
  241. package/dist/chunk-VXITDXLW.js.map +0 -1
  242. package/dist/chunk-XFRP2MBR.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ # Select 下拉选择
2
+
3
+ > 下拉选择,支持单/多选、搜索、分组、加载态。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Select } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 单选
14
+
15
+ ```tsx
16
+ <Select value={lang} onChange={setLang} options={[
17
+ { value: "zh", label: "简体中文" },
18
+ { value: "en", label: "English" },
19
+ ]} />
20
+ ```
21
+
22
+ ### 多选
23
+
24
+ multiple + Tag 形式呈现已选项。
25
+
26
+ ```tsx
27
+ <Select multiple clearable value={tags} onChange={setTags} options={...} />
28
+ ```
29
+
30
+ ### 搜索过滤
31
+
32
+ searchable + clearable + 选项 icon/description。
33
+
34
+ ```tsx
35
+ <Select searchable clearable
36
+ options={[{ value, label, icon, description }]}
37
+ />
38
+ ```
39
+
40
+ ### 分组
41
+
42
+ options 接受 { label, options } 表示分组。
43
+
44
+ ```tsx
45
+ options={[
46
+ { label: "前端", options: [...] },
47
+ { label: "后端", options: [...] },
48
+ ]}
49
+ ```
50
+
51
+ ### 加载态
52
+
53
+ loading 时显示 spinner,emptyContent 自定义空态。
54
+
55
+ ```tsx
56
+ <Select searchable loading={loading} options={asyncOpts} />
57
+ ```
58
+
59
+ ### 尺寸 / 状态
60
+
61
+ ```tsx
62
+ <Select size="sm" /> <Select /> <Select size="lg" />
63
+ <Select invalid /> <Select disabled />
64
+ ```
65
+
66
+ ## API
67
+
68
+ **Select**
69
+
70
+ | Prop | 类型 | 默认 | 说明 |
71
+ | --- | --- | --- | --- |
72
+ | options \* | `SelectItem<T>[]` | — | 选项,可含 { label, options } 分组 |
73
+ | value / defaultValue | `T | T[]` | — | 受控/初始 |
74
+ | onChange | `(value) => void` | — | 变更 |
75
+ | multiple | `boolean` | `false` | 多选 |
76
+ | maxTagCount | `number` | — | 多选时显示的标签数(超出折叠 +N) |
77
+ | searchable | `boolean` | `false` | 可搜索 |
78
+ | filterOption | `(input, option) => boolean` | — | 自定义过滤 |
79
+ | clearable | `boolean` | `false` | 可清除 |
80
+ | loading | `boolean` | `false` | 加载态 |
81
+ | emptyContent | `ReactNode` | — | 空态文案 |
82
+ | size | `"sm" | "md" | "lg"` | `"md"` | 尺寸 |
83
+ | invalid | `boolean` | `false` | 错误态 |
84
+ | disabled | `boolean` | `false` | 禁用 |
85
+
86
+
87
+ **SelectOption**
88
+
89
+ | Prop | 类型 | 默认 | 说明 |
90
+ | --- | --- | --- | --- |
91
+ | value \* | `T` | — | 值 |
92
+ | label | `ReactNode` | — | 显示 |
93
+ | icon | `IconName` | — | 前置图标 |
94
+ | description | `ReactNode` | — | 次要描述 |
95
+ | disabled | `boolean` | `false` | 禁用项 |
96
+
97
+
98
+ ---
99
+ [← 回到索引](../llms.md)
@@ -0,0 +1,43 @@
1
+ # Sidebar 侧边栏
2
+
3
+ > 应用主导航,沿屏幕左侧垂直排列。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Sidebar } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础
14
+
15
+ ```tsx
16
+ <Sidebar items={[{ key, label, icon, badge }]} activeKey={active} onSelect={setActive} />
17
+ ```
18
+
19
+ ## API
20
+
21
+ **Sidebar**
22
+
23
+ | Prop | 类型 | 默认 | 说明 |
24
+ | --- | --- | --- | --- |
25
+ | items \* | `SidebarItem[]` | — | 导航项 |
26
+ | activeKey | `string` | — | 当前激活项 |
27
+ | onSelect | `(key: string) => void` | — | 选择回调 |
28
+ | collapsed | `boolean` | `false` | 折叠为图标 |
29
+ | header / footer | `ReactNode` | — | 头/尾内容 |
30
+
31
+
32
+ **SidebarItem**
33
+
34
+ | Prop | 类型 | 默认 | 说明 |
35
+ | --- | --- | --- | --- |
36
+ | key \* | `string` | — | 唯一键 |
37
+ | label | `ReactNode` | — | 文案 |
38
+ | icon | `ReactNode` | — | 前置图标 |
39
+ | badge | `ReactNode` | — | 尾部徽标 |
40
+
41
+
42
+ ---
43
+ [← 回到索引](../llms.md)
@@ -0,0 +1,88 @@
1
+ # Skeleton 骨架屏
2
+
3
+ > 数据加载前展示页面结构轮廓。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Skeleton } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础
14
+
15
+ ```tsx
16
+ <Skeleton height={16} width="40%" />
17
+ <Skeleton height={12} />
18
+ <Skeleton height={12} width="80%" />
19
+ ```
20
+
21
+ ### 手动组合:头像 + 文本
22
+
23
+ 使用原语 Skeleton 手动拼装 — 更灵活但需要自己写布局。
24
+
25
+ ```tsx
26
+ <Skeleton circle height={48} width={48} />
27
+ <Skeleton height={12} width="50%" />
28
+ ```
29
+
30
+ ### 组合模式 (avatar + title + paragraph)
31
+
32
+ 设置 avatar / title / paragraph 任一即切换到组合模式,自动拼装布局。
33
+
34
+ ```tsx
35
+ <Skeleton avatar title paragraph />
36
+ ```
37
+
38
+ ### 组合:自定义头像形状、段落行数
39
+
40
+ ```tsx
41
+ <Skeleton
42
+ avatar={{ shape: "square", size: "lg" }}
43
+ title={{ width: "30%" }}
44
+ paragraph={{ rows: 4, width: ["100%", "90%", "70%", "40%"] }}
45
+ />
46
+ ```
47
+
48
+ ### 组合:仅 title + paragraph
49
+
50
+ 关闭 avatar 只渲染标题与段落,其余布局自动调整。
51
+
52
+ ```tsx
53
+ <Skeleton title paragraph={{ rows: 2 }} />
54
+ ```
55
+
56
+ ### 动画
57
+
58
+ wave 是闪光流动,pulse 是透明度脉动,none 是静态占位。
59
+
60
+ ```tsx
61
+ <Skeleton animation="wave" />
62
+ <Skeleton animation="pulse" />
63
+ <Skeleton animation="none" />
64
+ ```
65
+
66
+ ## API
67
+
68
+ **Skeleton (原语模式)**
69
+
70
+ | Prop | 类型 | 默认 | 说明 |
71
+ | --- | --- | --- | --- |
72
+ | width | `number | string` | `"100%"` | 宽度 |
73
+ | height | `number | string` | `16` | 高度 |
74
+ | circle | `boolean` | `false` | 圆形 |
75
+ | animation | `"wave" | "pulse" | "none"` | `"wave"` | 动画 |
76
+
77
+
78
+ **Skeleton (组合模式)**
79
+
80
+ | Prop | 类型 | 默认 | 说明 |
81
+ | --- | --- | --- | --- |
82
+ | avatar | `boolean | { shape?: "circle" | "square"; size?: "sm" | "md" | "lg" }` | `false` | 左侧头像骨架。为对象时可定制 shape / size |
83
+ | title | `boolean | { width?: number | string }` | `true (composite)` | 标题行骨架。组合模式下默认 true |
84
+ | paragraph | `boolean | { rows?: number; width?: (number | string)[] }` | `{ rows: 3 }` | 段落行骨架。可指定 rows 与每行宽度(最后一行默认 60%) |
85
+
86
+
87
+ ---
88
+ [← 回到索引](../llms.md)
@@ -0,0 +1,72 @@
1
+ # Slider 滑块
2
+
3
+ > 在连续数值区间内取值。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Slider } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础用法
14
+
15
+ ```tsx
16
+ <Slider value={v} onChange={setV} showValue />
17
+ ```
18
+
19
+ ### 步进 / 范围
20
+
21
+ min/max/step 控制取值范围与步进。
22
+
23
+ ```tsx
24
+ <Slider min={0} max={10} step={1} defaultValue={5} showValue />
25
+ ```
26
+
27
+ ### 色调
28
+
29
+ ```tsx
30
+ <Slider tone="success" defaultValue={70} />
31
+ <Slider tone="warning" defaultValue={50} />
32
+ <Slider tone="danger" defaultValue={88} />
33
+ ```
34
+
35
+ ### 双滑块区间
36
+
37
+ range 模式下 value / onChange 采用 [min, max] 元组。
38
+
39
+ ```tsx
40
+ const [v, setV] = useState<[number, number]>([20, 70]);
41
+ <Slider range value={v} onChange={setV} showValue />
42
+ ```
43
+
44
+ ### 刻度标记
45
+
46
+ marks 提供可点击刻度,点击即可跳到该值。
47
+
48
+ ```tsx
49
+ <Slider
50
+ defaultValue={37}
51
+ marks={{ 0: "0°C", 26: "冷", 37: "正常", 100: "100°C" }}
52
+ />
53
+ ```
54
+
55
+ ## API
56
+
57
+ **Slider**
58
+
59
+ | Prop | 类型 | 默认 | 说明 |
60
+ | --- | --- | --- | --- |
61
+ | value / defaultValue | `number | [number, number]` | — | 受控/初始;range 模式下为 [number, number] |
62
+ | onChange | `(value) => void` | — | 变更回调,range 模式返回元组 |
63
+ | min / max / step | `number` | — | 区间与步进 |
64
+ | range | `boolean` | `false` | 是否为双滑块区间模式 |
65
+ | marks | `Record<number, ReactNode>` | — | 刻度,点击可跳到对应值 |
66
+ | tone | `"accent" | "success" | "warning" | "danger"` | `"accent"` | 色调 |
67
+ | showValue | `boolean` | `false` | 显示数值 |
68
+ | disabled | `boolean` | `false` | 禁用 |
69
+
70
+
71
+ ---
72
+ [← 回到索引](../llms.md)
@@ -0,0 +1,58 @@
1
+ # Spinner 加载
2
+
3
+ > 表示任务正在进行,提示用户等待。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Spinner } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础
14
+
15
+ ```tsx
16
+ <Spinner />
17
+ <Spinner size={28} />
18
+ <Spinner size={40} />
19
+ ```
20
+
21
+ ### 色调
22
+
23
+ ```tsx
24
+ <Spinner tone="accent" />
25
+ <Spinner tone="success" />
26
+ <Spinner tone="warning" />
27
+ <Spinner tone="danger" />
28
+ ```
29
+
30
+ ### Dots 变体
31
+
32
+ ```tsx
33
+ <Spinner variant="dots" />
34
+ <Spinner variant="dots" size={24} />
35
+ <Spinner variant="dots" size={32} />
36
+ ```
37
+
38
+ ### 带文案
39
+
40
+ ```tsx
41
+ <Spinner label="加载中…" />
42
+ <Spinner variant="dots" tone="accent" label="正在同步" />
43
+ ```
44
+
45
+ ## API
46
+
47
+ **Spinner**
48
+
49
+ | Prop | 类型 | 默认 | 说明 |
50
+ | --- | --- | --- | --- |
51
+ | size | `number` | `20` | 尺寸 (px) |
52
+ | tone | `"accent" | "success" | "warning" | "danger" | "current"` | `"accent"` | 色调 |
53
+ | variant | `"ring" | "dots"` | `"ring"` | 样式 |
54
+ | label | `ReactNode` | — | 文案 |
55
+
56
+
57
+ ---
58
+ [← 回到索引](../llms.md)
@@ -0,0 +1,60 @@
1
+ # Switch 开关
2
+
3
+ > 二元状态切换器。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Switch } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础用法
14
+
15
+ ```tsx
16
+ <Switch checked={v} onChange={setV} label="开启通知" />
17
+ ```
18
+
19
+ ### 尺寸
20
+
21
+ 提供 sm / md 两档。
22
+
23
+ ```tsx
24
+ <Switch size="sm" defaultChecked />
25
+ <Switch defaultChecked />
26
+ ```
27
+
28
+ ### 禁用
29
+
30
+ ```tsx
31
+ <Switch disabled label="不可用" />
32
+ <Switch disabled defaultChecked label="禁用且开启" />
33
+ ```
34
+
35
+ ### 轨道内文本
36
+
37
+ checkedChildren / unCheckedChildren 在轨道内显示简短文字(如 ON/OFF)。
38
+
39
+ ```tsx
40
+ <Switch defaultChecked checkedChildren="ON" unCheckedChildren="OFF" />
41
+ <Switch defaultChecked checkedChildren="1" unCheckedChildren="0" />
42
+ ```
43
+
44
+ ## API
45
+
46
+ **Switch**
47
+
48
+ | Prop | 类型 | 默认 | 说明 |
49
+ | --- | --- | --- | --- |
50
+ | checked / defaultChecked | `boolean` | — | 受控/初始 |
51
+ | onChange | `(checked: boolean) => void` | — | 状态变更 |
52
+ | label | `ReactNode` | — | 右侧文案 |
53
+ | checkedChildren | `ReactNode` | — | 轨道内选中状态文本/图标 |
54
+ | unCheckedChildren | `ReactNode` | — | 轨道内未选中状态文本/图标 |
55
+ | size | `"sm" | "md"` | `"md"` | 尺寸 |
56
+ | disabled | `boolean` | `false` | 禁用 |
57
+
58
+
59
+ ---
60
+ [← 回到索引](../llms.md)
@@ -0,0 +1,188 @@
1
+ # Table 表格
2
+
3
+ > 结构化数据展示。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Table } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础表格
14
+
15
+ ```tsx
16
+ <Table rowKey="id" columns={[...]} data={data} />
17
+ ```
18
+
19
+ ### 样式变体
20
+
21
+ 三种视觉变体:striped (条纹)、embossed (凸起)、cards (卡片行)。
22
+
23
+ ```tsx
24
+ <Table variant="striped" ... />
25
+ <Table variant="embossed" ... />
26
+ <Table variant="cards" ... />
27
+ ```
28
+
29
+ ### 内置分页
30
+
31
+ 传入 pagination 即可自动分页;data 会按当前页切片。传 false 关闭。
32
+
33
+ ```tsx
34
+ <Table
35
+ rowKey="id"
36
+ columns={[...]}
37
+ data={data} // 24 rows
38
+ pagination={{ pageSize: 6 }}
39
+ />
40
+ ```
41
+
42
+ ### 固定表头 / 横向滚动
43
+
44
+ scroll.y 固定表头并限制表体最大高度;scroll.x 设置内容最小宽度。
45
+
46
+ ```tsx
47
+ <Table
48
+ scroll={{ y: 220, x: 900 }}
49
+ columns={[...]}
50
+ data={data}
51
+ />
52
+ ```
53
+
54
+ ### 行选择 (rowSelection)
55
+
56
+ antd 风格的 rowSelection。表头多选框支持 indeterminate;可通过 getCheckboxProps 禁用指定行。
57
+
58
+ ```tsx
59
+ <Table
60
+ rowSelection={{
61
+ selectedRowKeys,
62
+ onChange: (keys, rows) => setSelectedKeys(keys),
63
+ getCheckboxProps: (row) => ({ disabled: row.status === "离线" }),
64
+ }}
65
+ columns={[...]}
66
+ data={data}
67
+ />
68
+ ```
69
+
70
+ ### 行选择 · 单选
71
+
72
+ 设置 rowSelection.type = 'radio' 变成单选模式。
73
+
74
+ ```tsx
75
+ <Table
76
+ rowSelection={{ type: "radio", defaultSelectedRowKeys: [1] }}
77
+ columns={[...]}
78
+ data={data}
79
+ />
80
+ ```
81
+
82
+ ### 可展开行
83
+
84
+ 点击左侧箭头按钮展开/收起,在行下方渲染自定义内容。
85
+
86
+ ```tsx
87
+ <Table
88
+ expandable={{
89
+ expandedRowRender: (row) => <div>…详情…</div>,
90
+ rowExpandable: (row) => row.status !== "离线",
91
+ }}
92
+ columns={[...]}
93
+ data={data}
94
+ />
95
+ ```
96
+
97
+ ### 列筛选
98
+
99
+ 在列上配置 filters 即可在列头显示漏斗图标;点击弹出勾选面板,勾选后过滤数据。
100
+
101
+ ```tsx
102
+ <Table
103
+ columns={[
104
+ {
105
+ key: "role", title: "部门", dataIndex: "role",
106
+ filters: [
107
+ { text: "设计", value: "设计" },
108
+ { text: "研发", value: "研发" },
109
+ ],
110
+ onFilter: (value, row) => row.role === value,
111
+ },
112
+ ]}
113
+ data={data}
114
+ />
115
+ ```
116
+
117
+ ## API
118
+
119
+ **Table**
120
+
121
+ | Prop | 类型 | 默认 | 说明 |
122
+ | --- | --- | --- | --- |
123
+ | columns \* | `TableColumn[]` | — | 列定义 |
124
+ | data \* | `Row[]` | — | 数据数组 |
125
+ | rowKey | `string | (row) => key` | — | 行键 |
126
+ | variant | `"default" | "striped" | "embossed" | "cards"` | `"default"` | 视觉变体 |
127
+ | pagination | `false | PaginationConfig` | — | 分页配置;false 关闭 |
128
+ | scroll | `TableScrollConfig` | — | 滚动配置:{ x?, y? } |
129
+ | rowSelection | `RowSelectionConfig` | — | 行选择配置 (antd 风格) |
130
+ | expandable | `ExpandableConfig` | — | 可展开行配置 |
131
+ | sortKey / sortDir / onSort | `—` | — | 受控排序 |
132
+ | onRowClick | `(row, i) => void` | — | 点击行 |
133
+ | selectable / selected / onSelect | `—` | — | 旧版多选 API (保留兼容,优先使用 rowSelection) |
134
+
135
+
136
+ **TableColumn**
137
+
138
+ | Prop | 类型 | 默认 | 说明 |
139
+ | --- | --- | --- | --- |
140
+ | key \* | `string` | — | 列唯一键 |
141
+ | title \* | `ReactNode` | — | 表头 |
142
+ | dataIndex | `keyof Row` | — | 取值字段 |
143
+ | render | `(value, row, index) => ReactNode` | — | 单元格渲染 |
144
+ | width | `number | string` | — | 列宽 |
145
+ | align | `"left" | "center" | "right"` | — | 对齐 |
146
+ | sortable | `boolean` | — | 是否可排序 |
147
+ | filters | `{ text, value }[]` | — | 筛选项 |
148
+ | onFilter | `(value, row) => boolean` | — | 筛选判定函数 |
149
+ | defaultFilteredValue | `(string | number)[]` | — | 非受控初始筛选 |
150
+ | filteredValue | `(string | number)[]` | — | 受控筛选值 |
151
+
152
+
153
+ **PaginationConfig**
154
+
155
+ | Prop | 类型 | 默认 | 说明 |
156
+ | --- | --- | --- | --- |
157
+ | current | `number` | — | 当前页 (1-indexed),受控 |
158
+ | defaultCurrent | `number` | `1` | 非受控初始页 |
159
+ | pageSize | `number` | `10` | 每页条数 |
160
+ | defaultPageSize | `number` | — | 非受控初始每页条数 |
161
+ | total | `number` | — | 数据总量;默认为 data.length |
162
+ | onChange | `(page, pageSize) => void` | — | 切页回调 |
163
+
164
+
165
+ **RowSelectionConfig**
166
+
167
+ | Prop | 类型 | 默认 | 说明 |
168
+ | --- | --- | --- | --- |
169
+ | type | `"checkbox" | "radio"` | `"checkbox"` | 多选或单选 |
170
+ | selectedRowKeys | `(string | number)[]` | — | 受控选中 key |
171
+ | defaultSelectedRowKeys | `(string | number)[]` | — | 非受控初始选中 |
172
+ | onChange | `(keys, rows) => void` | — | 选中变化 |
173
+ | getCheckboxProps | `(row) => { disabled? }` | — | 每行勾选框属性 |
174
+
175
+
176
+ **ExpandableConfig**
177
+
178
+ | Prop | 类型 | 默认 | 说明 |
179
+ | --- | --- | --- | --- |
180
+ | expandedRowKeys | `(string | number)[]` | — | 受控已展开 key |
181
+ | defaultExpandedRowKeys | `(string | number)[]` | — | 非受控初始展开 |
182
+ | onExpand | `(expanded, row) => void` | — | 展开/收起回调 |
183
+ | expandedRowRender | `(row, i) => ReactNode` | — | 展开面板渲染 |
184
+ | rowExpandable | `(row) => boolean` | — | 该行是否可展开 |
185
+
186
+
187
+ ---
188
+ [← 回到索引](../llms.md)
@@ -0,0 +1,56 @@
1
+ # Table Pro
2
+
3
+ > 带工具栏 / 搜索 / 筛选 / 排序 / 多选 / 分页的全功能表格。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { TablePro } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 全功能
14
+
15
+ 工具栏 + 排序 + 新版 rowSelection + 内置分页。相比旧版,Table 自己切片 data,不必外部 slice。
16
+
17
+ ```tsx
18
+ <TablePro
19
+ rowKey="id" data={filtered} columns={...}
20
+ rowSelection={{ selectedRowKeys, onChange }}
21
+ sortKey={sortKey} sortDir={sortDir} onSort={...}
22
+ pagination={{ pageSize: 4 }}
23
+ toolbar={<Input ... /> <Select ... />}
24
+ actions={<Button>新增</Button>}
25
+ />
26
+ ```
27
+
28
+ ### 带可展开行
29
+
30
+ TablePro 直接透传 expandable 到 Table。
31
+
32
+ ```tsx
33
+ <TablePro
34
+ title="成员详情"
35
+ expandable={{
36
+ expandedRowRender: (row) => <div>...展开内容...</div>,
37
+ }}
38
+ ...
39
+ />
40
+ ```
41
+
42
+ ## API
43
+
44
+ **TablePro**
45
+
46
+ | Prop | 类型 | 默认 | 说明 |
47
+ | --- | --- | --- | --- |
48
+ | ... | `TableProps` | — | 继承自 Table 全部 props (包括新的 pagination / scroll / rowSelection / expandable / filters) |
49
+ | toolbar | `ReactNode` | — | 工具栏内容 |
50
+ | actions | `ReactNode` | — | 工具栏右侧操作 |
51
+ | footer | `ReactNode` | — | 底部 (可选,传了会渲染在分页下方) |
52
+ | title | `ReactNode` | — | 工具栏标题 |
53
+
54
+
55
+ ---
56
+ [← 回到索引](../llms.md)