@fangxinyan/lumina 0.6.1 → 0.6.3

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 (270) hide show
  1. package/README.md +2 -1
  2. package/dist/{Alert-JJ7GB3UU.css → Alert-QBKIDY5H.css} +7 -0
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.d.cts +3 -2
  5. package/dist/Alert.d.ts +3 -2
  6. package/dist/Alert.js +2 -2
  7. package/dist/AutoComplete.cjs +5 -4
  8. package/dist/AutoComplete.d.cts +1 -1
  9. package/dist/AutoComplete.d.ts +1 -1
  10. package/dist/AutoComplete.js +4 -3
  11. package/dist/Badge-DPGLV3D3.css +22 -0
  12. package/dist/Badge.cjs +10 -0
  13. package/dist/Badge.d.cts +19 -0
  14. package/dist/Badge.d.ts +19 -0
  15. package/dist/Badge.js +1 -0
  16. package/dist/{Button-SDQD25AG.css → Button-4Z3Q6KII.css} +56 -36
  17. package/dist/Button.cjs +3 -7
  18. package/dist/Button.d.cts +11 -15
  19. package/dist/Button.d.ts +11 -15
  20. package/dist/Button.js +2 -2
  21. package/dist/Calendar.cjs +3 -3
  22. package/dist/Calendar.js +2 -2
  23. package/dist/{Card-RG7ECXL2.css → Card-6RMVIHWX.css} +7 -13
  24. package/dist/Card.cjs +2 -6
  25. package/dist/Card.d.cts +7 -11
  26. package/dist/Card.d.ts +7 -11
  27. package/dist/Card.js +1 -1
  28. package/dist/{Cascader-VSYEKQCG.css → Cascader-3BLLA7EN.css} +77 -0
  29. package/dist/Cascader.cjs +5 -3
  30. package/dist/Cascader.d.cts +22 -4
  31. package/dist/Cascader.d.ts +22 -4
  32. package/dist/Cascader.js +4 -2
  33. package/dist/{Checkbox-SKJATVSN.css → Checkbox-U5EUDSYS.css} +5 -35
  34. package/dist/Checkbox.cjs +3 -7
  35. package/dist/Checkbox.d.cts +1 -18
  36. package/dist/Checkbox.d.ts +1 -18
  37. package/dist/Checkbox.js +2 -2
  38. package/dist/Collapse-66U5YJFY.css +53 -0
  39. package/dist/Collapse.cjs +11 -0
  40. package/dist/Collapse.d.cts +32 -0
  41. package/dist/Collapse.d.ts +32 -0
  42. package/dist/Collapse.js +2 -0
  43. package/dist/CommandPalette.cjs +5 -4
  44. package/dist/CommandPalette.js +4 -3
  45. package/dist/Drawer.cjs +3 -3
  46. package/dist/Drawer.js +2 -2
  47. package/dist/Empty-DC2LPORC.css +28 -0
  48. package/dist/Empty.cjs +2 -10
  49. package/dist/Empty.d.cts +1 -62
  50. package/dist/Empty.d.ts +1 -62
  51. package/dist/Empty.js +1 -1
  52. package/dist/Form.d.cts +1 -1
  53. package/dist/Form.d.ts +1 -1
  54. package/dist/Icon.cjs +187 -3
  55. package/dist/Icon.d.cts +104 -3
  56. package/dist/Icon.d.ts +104 -3
  57. package/dist/Icon.js +1 -1
  58. package/dist/{Image-4MN34O6P.css → Image-MRYQCRQ5.css} +78 -0
  59. package/dist/Image.cjs +12 -4
  60. package/dist/Image.d.cts +79 -6
  61. package/dist/Image.d.ts +79 -6
  62. package/dist/Image.js +2 -2
  63. package/dist/{Input-33CAH4O6.css → Input-HUBJ55OH.css} +25 -42
  64. package/dist/Input.cjs +6 -5
  65. package/dist/Input.d.cts +23 -26
  66. package/dist/Input.d.ts +23 -26
  67. package/dist/Input.js +3 -2
  68. package/dist/InputNumber.cjs +5 -4
  69. package/dist/InputNumber.d.cts +1 -1
  70. package/dist/InputNumber.d.ts +1 -1
  71. package/dist/InputNumber.js +4 -3
  72. package/dist/Message-2MZ3LFPU.css +45 -0
  73. package/dist/Message.cjs +23 -0
  74. package/dist/Message.d.cts +54 -0
  75. package/dist/Message.d.ts +54 -0
  76. package/dist/Message.js +2 -0
  77. package/dist/{Modal-XSDMU4XJ.css → Modal-2QNDW4SO.css} +27 -0
  78. package/dist/Modal.cjs +4 -4
  79. package/dist/Modal.d.cts +29 -4
  80. package/dist/Modal.d.ts +29 -4
  81. package/dist/Modal.js +3 -3
  82. package/dist/Pagination.cjs +7 -5
  83. package/dist/Pagination.js +6 -4
  84. package/dist/Popover.cjs +2 -2
  85. package/dist/Popover.d.cts +11 -3
  86. package/dist/Popover.d.ts +11 -3
  87. package/dist/Popover.js +1 -1
  88. package/dist/Radio-GVFDPAZM.css +97 -0
  89. package/dist/Radio.cjs +14 -0
  90. package/dist/Radio.d.cts +36 -0
  91. package/dist/Radio.d.ts +36 -0
  92. package/dist/Radio.js +1 -0
  93. package/dist/{Select-J3CCVFJ7.css → Select-Z5VYPEEY.css} +33 -24
  94. package/dist/Select.cjs +6 -4
  95. package/dist/Select.d.cts +29 -7
  96. package/dist/Select.d.ts +29 -7
  97. package/dist/Select.js +5 -3
  98. package/dist/Skeleton-CVWH2VWN.css +40 -0
  99. package/dist/Skeleton.cjs +10 -0
  100. package/dist/Skeleton.d.cts +30 -0
  101. package/dist/Skeleton.d.ts +30 -0
  102. package/dist/Skeleton.js +1 -0
  103. package/dist/Spin-3GJNMSIH.css +94 -0
  104. package/dist/Spin.cjs +10 -0
  105. package/dist/Spin.d.cts +20 -0
  106. package/dist/Spin.d.ts +20 -0
  107. package/dist/Spin.js +1 -0
  108. package/dist/{Table-2LPTOUIR.css → Table-ATJJQLKU.css} +0 -53
  109. package/dist/Table.cjs +9 -11
  110. package/dist/Table.d.cts +2 -21
  111. package/dist/Table.d.ts +2 -21
  112. package/dist/Table.js +8 -6
  113. package/dist/TablePro-3XVHYLSL.css +45 -0
  114. package/dist/TablePro.cjs +19 -0
  115. package/dist/TablePro.d.cts +21 -0
  116. package/dist/TablePro.d.ts +21 -0
  117. package/dist/TablePro.js +10 -0
  118. package/dist/{Tabs-RHK6XAFF.css → Tabs-BLSNI2T5.css} +0 -34
  119. package/dist/Tabs.cjs +2 -6
  120. package/dist/Tabs.d.cts +1 -16
  121. package/dist/Tabs.d.ts +1 -16
  122. package/dist/Tabs.js +1 -1
  123. package/dist/Tag-HDYCDPFS.css +42 -0
  124. package/dist/Tag.cjs +3 -7
  125. package/dist/Tag.d.cts +5 -14
  126. package/dist/Tag.d.ts +5 -14
  127. package/dist/Tag.js +2 -2
  128. package/dist/Textarea-YNET7IBH.css +54 -0
  129. package/dist/Textarea.cjs +15 -0
  130. package/dist/Textarea.d.cts +25 -0
  131. package/dist/Textarea.d.ts +25 -0
  132. package/dist/Textarea.js +2 -0
  133. package/dist/Theme.cjs +14 -10
  134. package/dist/Theme.d.cts +29 -6
  135. package/dist/Theme.d.ts +29 -6
  136. package/dist/Theme.js +1 -1
  137. package/dist/{Timeline-RHZAZKZ7.css → Timeline-3ZHOHPXT.css} +2 -2
  138. package/dist/Timeline.cjs +3 -3
  139. package/dist/Timeline.d.cts +1 -1
  140. package/dist/Timeline.d.ts +1 -1
  141. package/dist/Timeline.js +2 -2
  142. package/dist/Tooltip.cjs +2 -2
  143. package/dist/Tooltip.d.cts +17 -4
  144. package/dist/Tooltip.d.ts +17 -4
  145. package/dist/Tooltip.js +1 -1
  146. package/dist/Typography.cjs +7 -7
  147. package/dist/Typography.d.cts +1 -0
  148. package/dist/Typography.d.ts +1 -0
  149. package/dist/Typography.js +2 -2
  150. package/dist/{chunk-OVZTG5CP.cjs → chunk-2HQCUBA7.cjs} +2 -2
  151. package/dist/{chunk-X2U7EKCS.cjs → chunk-3YJU3D5S.cjs} +28 -5
  152. package/dist/chunk-45VJGBGN.js +25 -0
  153. package/dist/{chunk-3D77MQHO.js → chunk-46VXFTEC.js} +3 -3
  154. package/dist/chunk-47VG2P34.js +393 -0
  155. package/dist/{chunk-LZU33BX6.cjs → chunk-5DKRY67M.cjs} +4 -20
  156. package/dist/{chunk-TWGQZX2R.js → chunk-5H5YP2TB.js} +4 -19
  157. package/dist/chunk-5MN3PMF4.cjs +240 -0
  158. package/dist/{chunk-5A3RT4KD.js → chunk-5TKC6IEN.js} +4 -55
  159. package/dist/{chunk-N57NXCNC.cjs → chunk-6HMTV6P4.cjs} +3 -44
  160. package/dist/{chunk-RF2EY5JS.cjs → chunk-6ZXQJRAT.cjs} +153 -34
  161. package/dist/{chunk-OFGDUCT7.cjs → chunk-7AG524YZ.cjs} +3 -3
  162. package/dist/chunk-7IYKKLV3.js +283 -0
  163. package/dist/{chunk-73RQBWWW.js → chunk-AAGF7K3L.js} +2 -2
  164. package/dist/chunk-AXZ7ELMA.js +41 -0
  165. package/dist/{chunk-R6BIF3FF.js → chunk-BPOOVO5T.js} +5 -23
  166. package/dist/{chunk-OI3CWXT3.js → chunk-BVQ77VRY.js} +3 -3
  167. package/dist/{chunk-UXH5PH3S.js → chunk-CETNCRZ4.js} +2 -2
  168. package/dist/chunk-DG5VQ6BO.cjs +28 -0
  169. package/dist/chunk-DWAN57G4.js +243 -0
  170. package/dist/chunk-ELNT3CFO.js +64 -0
  171. package/dist/{chunk-ULOJ5UEY.js → chunk-ET6DYQVZ.js} +1 -1
  172. package/dist/chunk-F6RYCBQG.js +25 -0
  173. package/dist/{chunk-RPFMQZA5.js → chunk-FBYUZOZP.js} +42 -31
  174. package/dist/chunk-FGW5GJ22.cjs +132 -0
  175. package/dist/{chunk-6Y5WRCPW.js → chunk-FWPBORRB.js} +1 -1
  176. package/dist/chunk-GENABQYA.cjs +47 -0
  177. package/dist/{chunk-TGHBKKSS.js → chunk-GIZU3H6H.js} +3 -43
  178. package/dist/chunk-GMN74OEY.cjs +63 -0
  179. package/dist/{chunk-Y47YTYQ3.cjs → chunk-H4LGWZMH.cjs} +159 -8
  180. package/dist/chunk-HKF2V5MM.cjs +214 -0
  181. package/dist/chunk-HLFH5HWR.js +81 -0
  182. package/dist/{chunk-4WRE4HQP.js → chunk-HWFM4MAT.js} +18 -6
  183. package/dist/{chunk-GY3BSHHS.cjs → chunk-HZSIUOCN.cjs} +2 -55
  184. package/dist/{chunk-D46EM4EN.js → chunk-I5WTQ5Y3.js} +4 -4
  185. package/dist/chunk-J2HZTJO6.js +26 -0
  186. package/dist/{chunk-NN25YMOL.js → chunk-J5ZGYQZK.js} +153 -35
  187. package/dist/{chunk-WRDKOSSM.js → chunk-JCEHZ336.js} +1 -1
  188. package/dist/chunk-JVUVOR6S.js +110 -0
  189. package/dist/chunk-K5IGFBDR.js +113 -0
  190. package/dist/{chunk-Q2KG6SQK.cjs → chunk-K7FV7W6U.cjs} +5 -5
  191. package/dist/{chunk-PWW64ZWO.cjs → chunk-KD4YYIIO.cjs} +1 -32
  192. package/dist/chunk-KGSADAOD.cjs +170 -0
  193. package/dist/{chunk-54YLXXS2.js → chunk-ME5BZ2WA.js} +2 -2
  194. package/dist/chunk-MPVCYU2K.cjs +104 -0
  195. package/dist/{chunk-EEMWQX3C.cjs → chunk-NTS5L4NQ.cjs} +3 -3
  196. package/dist/{chunk-WBK6XIDJ.js → chunk-OBEKX4VR.js} +2 -32
  197. package/dist/{chunk-EBNRZRWY.cjs → chunk-P6EZG2R7.cjs} +5 -5
  198. package/dist/{chunk-KYEY2LIB.cjs → chunk-P6P4DGLF.cjs} +3 -3
  199. package/dist/{chunk-GOBWKQCX.cjs → chunk-PULGVK2I.cjs} +3 -3
  200. package/dist/chunk-Q5SZIU7Z.cjs +47 -0
  201. package/dist/chunk-QKQHZIF3.cjs +86 -0
  202. package/dist/{chunk-3TWNBJFI.cjs → chunk-QP3VCSRY.cjs} +6 -6
  203. package/dist/{chunk-6ODY6MGL.cjs → chunk-R2TEDH2F.cjs} +5 -5
  204. package/dist/{chunk-YRZGXXWA.js → chunk-SQGPSMSK.js} +14 -20
  205. package/dist/{chunk-IW5LW6XS.js → chunk-TEEFR2FD.js} +28 -5
  206. package/dist/chunk-TGL5BGMR.js +218 -0
  207. package/dist/{chunk-62GU4OHH.cjs → chunk-TP567B3L.cjs} +13 -20
  208. package/dist/chunk-UKS23N3L.js +191 -0
  209. package/dist/chunk-USQ43DJ5.js +147 -0
  210. package/dist/{chunk-G2K6ETP4.cjs → chunk-UUHFKIWP.cjs} +18 -6
  211. package/dist/{chunk-2MNAZRWE.cjs → chunk-V272XR3F.cjs} +271 -2
  212. package/dist/chunk-VFFIE2VO.cjs +271 -0
  213. package/dist/{chunk-FIO65XYG.cjs → chunk-X5GCOMC3.cjs} +49 -38
  214. package/dist/{chunk-Y3ZSG3SJ.cjs → chunk-XSN4TLN5.cjs} +11 -30
  215. package/dist/chunk-ZKE73UQF.cjs +138 -0
  216. package/dist/index.cjs +342 -132
  217. package/dist/index.d.cts +26 -20
  218. package/dist/index.d.ts +26 -20
  219. package/dist/index.js +35 -29
  220. package/dist/styles.css +515 -230
  221. package/docs/llms/alert.md +4 -3
  222. package/docs/llms/badge.md +3 -3
  223. package/docs/llms/button.md +11 -41
  224. package/docs/llms/card.md +6 -12
  225. package/docs/llms/cascader.md +22 -0
  226. package/docs/llms/{accordion.md → collapse.md} +13 -11
  227. package/docs/llms/drawer.md +1 -1
  228. package/docs/llms/form.md +1 -1
  229. package/docs/llms/image.md +72 -1
  230. package/docs/llms/input.md +28 -18
  231. package/docs/llms/message.md +63 -0
  232. package/docs/llms/modal.md +30 -0
  233. package/docs/llms/popover.md +18 -1
  234. package/docs/llms/radio.md +37 -1
  235. package/docs/llms/select.md +22 -2
  236. package/docs/llms/spin.md +59 -0
  237. package/docs/llms/table.md +3 -3
  238. package/docs/llms/tag.md +3 -2
  239. package/docs/llms/theme.md +41 -4
  240. package/docs/llms/tooltip.md +16 -3
  241. package/docs/llms.md +8 -8
  242. package/package.json +32 -52
  243. package/dist/Accordion-REMDCQUD.css +0 -44
  244. package/dist/Accordion.cjs +0 -11
  245. package/dist/Accordion.d.cts +0 -33
  246. package/dist/Accordion.d.ts +0 -33
  247. package/dist/Accordion.js +0 -2
  248. package/dist/Empty-NQ72W3D7.css +0 -160
  249. package/dist/Tag-FGDY3W7E.css +0 -51
  250. package/dist/Toast-YSACW3EM.css +0 -45
  251. package/dist/Toast.cjs +0 -15
  252. package/dist/Toast.d.cts +0 -26
  253. package/dist/Toast.d.ts +0 -26
  254. package/dist/Toast.js +0 -2
  255. package/dist/chunk-32HBMXXV.cjs +0 -208
  256. package/dist/chunk-3XTHKAEY.js +0 -39
  257. package/dist/chunk-5M26OVVY.js +0 -90
  258. package/dist/chunk-DOMYUGJY.js +0 -132
  259. package/dist/chunk-DPNDHNKK.js +0 -185
  260. package/dist/chunk-G2XK57I7.cjs +0 -116
  261. package/dist/chunk-HBWO3QKW.js +0 -74
  262. package/dist/chunk-JVS5ZALZ.js +0 -123
  263. package/dist/chunk-LIGHV4RC.cjs +0 -121
  264. package/dist/chunk-MCTIA6RZ.js +0 -99
  265. package/dist/chunk-NC4YUEXM.cjs +0 -145
  266. package/dist/chunk-NJ6B22YJ.js +0 -170
  267. package/dist/chunk-W64ARHLJ.cjs +0 -62
  268. package/dist/chunk-ZFW6OYAO.cjs +0 -100
  269. package/docs/llms/spinner.md +0 -58
  270. package/docs/llms/toast.md +0 -51
@@ -22,12 +22,13 @@ import { Alert } from "@fangxinyan/lumina";
22
22
  <Alert tone="info" closable>仅一行的简短提示</Alert>
23
23
  ```
24
24
 
25
- ### 隐藏图标
25
+ ### 图标控制
26
26
 
27
- showIcon={false} 可隐藏左侧语义图标,文本更紧凑。
27
+ showIcon={false} 可隐藏左侧语义图标;icon 可传 IconName 或 ReactNode。
28
28
 
29
29
  ```tsx
30
30
  <Alert tone="info" showIcon={false}>纯文本提示</Alert>
31
+ <Alert icon={<img src={iconUrl} alt="" />}>自定义图标</Alert>
31
32
  ```
32
33
 
33
34
  ### 自定义操作区
@@ -53,7 +54,7 @@ action 插槽可以放置按钮等操作元素,位于内容与关闭按钮之间
53
54
  | --- | --- | --- | --- |
54
55
  | tone | `"info" | "success" | "warning" | "danger"` | `"info"` | 语气 |
55
56
  | title | `ReactNode` | — | 标题 |
56
- | icon | `IconName` | — | 自定义图标 |
57
+ | icon | `IconName | ReactNode` | — | 自定义图标,可传内置图标名或自定义节点 |
57
58
  | showIcon | `boolean` | `true` | 是否显示语义图标 |
58
59
  | action | `ReactNode` | — | 右侧操作区(如按钮) |
59
60
  | closable | `boolean` | `false` | 可关闭 |
@@ -13,8 +13,8 @@ import { Badge } from "@fangxinyan/lumina";
13
13
  ### 数字徽标
14
14
 
15
15
  ```tsx
16
- <Badge count={3}><IconButton icon="bell" /></Badge>
17
- <Badge count={128} max={99}><IconButton icon="mail" /></Badge>
16
+ <Badge count={3}><Button icon="bell" /></Badge>
17
+ <Badge count={128} max={99}><Button icon="mail" /></Badge>
18
18
  ```
19
19
 
20
20
  ### 圆点
@@ -22,7 +22,7 @@ import { Badge } from "@fangxinyan/lumina";
22
22
  dot 模式不显示数字,只是状态指示。
23
23
 
24
24
  ```tsx
25
- <Badge dot><IconButton icon="user" /></Badge>
25
+ <Badge dot><Button icon="user" /></Badge>
26
26
  ```
27
27
 
28
28
  ## API
@@ -5,7 +5,7 @@
5
5
  ## 导入
6
6
 
7
7
  ```tsx
8
- import { Button, IconButton, Segmented } from "@fangxinyan/lumina";
8
+ import { Button } from "@fangxinyan/lumina";
9
9
  ```
10
10
 
11
11
  ## 示例
@@ -23,12 +23,13 @@ import { Button, IconButton, Segmented } from "@fangxinyan/lumina";
23
23
 
24
24
  ### 图标按钮
25
25
 
26
- icon 在前,trailingIcon 在后。
26
+ icon 在前,trailingIcon 在后,既支持内置 IconName,也支持外部 ReactNode。
27
27
 
28
28
  ```tsx
29
29
  <Button variant="primary" icon="sparkle">新建</Button>
30
30
  <Button icon="download">下载</Button>
31
31
  <Button trailingIcon="arrowRight">下一步</Button>
32
+ <Button icon={<img src={iconUrl} alt="" />}>外部图标</Button>
32
33
  ```
33
34
 
34
35
  ### 加载与禁用
@@ -61,27 +62,12 @@ block 让按钮撑满容器宽度,常用于底部主操作或表单提交。
61
62
 
62
63
  ### 纯图标按钮
63
64
 
64
- IconButton 是只含图标的方形按钮,常配合 tip 使用。
65
+ Button 在只有 icon 时自动呈现为方形按钮,常配合 tip 使用。
65
66
 
66
67
  ```tsx
67
- <IconButton icon="heart" tip="收藏" />
68
- <IconButton icon="bell" tip="通知" />
69
- <IconButton icon="settings" tip="设置" />
70
- ```
71
-
72
- ### 分段控制器
73
-
74
- 互斥多选项切换。
75
-
76
- ```tsx
77
- <Segmented
78
- options={[
79
- { value: "grid", label: "网格" },
80
- { value: "list", label: "列表" },
81
- { value: "card", label: "卡片" },
82
- ]}
83
- defaultValue="grid"
84
- />
68
+ <Button icon="heart" tip="收藏" />
69
+ <Button icon="bell" tip="通知" />
70
+ <Button icon="settings" tip="设置" />
85
71
  ```
86
72
 
87
73
  ## API
@@ -92,31 +78,15 @@ IconButton 是只含图标的方形按钮,常配合 tip 使用。
92
78
  | --- | --- | --- | --- |
93
79
  | variant | `"default" | "primary" | "ghost" | "danger"` | `"default"` | 按钮风格 |
94
80
  | size | `"sm" | "md" | "lg"` | `"md"` | 按钮尺寸 |
95
- | icon | `IconName` | — | 前置图标 |
96
- | trailingIcon | `IconName` | — | 后置图标 |
81
+ | icon | `IconName | ReactNode` | — | 前置图标,可传内置图标名或自定义节点 |
82
+ | trailingIcon | `IconName | ReactNode` | — | 后置图标,可传内置图标名或自定义节点 |
83
+ | iconOnly | `boolean` | `自动` | 渲染为纯图标方形按钮 |
84
+ | tip | `string` | — | 原生悬浮提示,常用于纯图标按钮 |
97
85
  | loading | `boolean` | `false` | 加载态 |
98
86
  | block | `boolean` | `false` | 撑满父容器宽度 |
99
87
  | disabled | `boolean` | `false` | 禁用 |
100
88
  | onClick | `(e: MouseEvent) => void` | — | 点击回调 |
101
89
 
102
90
 
103
- **IconButton**
104
-
105
- | Prop | 类型 | 默认 | 说明 |
106
- | --- | --- | --- | --- |
107
- | icon \* | `IconName` | — | 图标名 |
108
- | tip | `string` | — | 悬浮提示 |
109
- | size / variant | `—` | — | 继承自 Button |
110
-
111
-
112
- **Segmented**
113
-
114
- | Prop | 类型 | 默认 | 说明 |
115
- | --- | --- | --- | --- |
116
- | options \* | `{ value, label, disabled? }[]` | — | 选项数组 |
117
- | value / defaultValue | `T` | — | 受控/初始选中值 |
118
- | onChange | `(value: T) => void` | — | 切换回调 |
119
-
120
-
121
91
  ---
122
92
  [← 回到索引](../llms.md)
package/docs/llms/card.md CHANGED
@@ -5,7 +5,7 @@
5
5
  ## 导入
6
6
 
7
7
  ```tsx
8
- import { Card, Panel } from "@fangxinyan/lumina";
8
+ import { Card } from "@fangxinyan/lumina";
9
9
  ```
10
10
 
11
11
  ## 示例
@@ -28,20 +28,20 @@ hoverable 在鼠标悬浮时轻微上移并加强阴影,适合可点击的卡片
28
28
  <Card hoverable>可点击卡片</Card>
29
29
  ```
30
30
 
31
- ### Panel
31
+ ### 带标题
32
32
 
33
33
  带标题、描述、操作区。
34
34
 
35
35
  ```tsx
36
- <Panel title="月度营收" description="2026 年 4 月" actions={...}>
36
+ <Card title="月度营收" description="2026 年 4 月" actions={...}>
37
37
  ¥ 12,480
38
- </Panel>
38
+ </Card>
39
39
  ```
40
40
 
41
- ### Panel 带操作
41
+ ### 标题区操作
42
42
 
43
43
  ```tsx
44
- <Panel title="..." actions={<Button size="sm" icon="plus">邀请</Button>}>...</Panel>
44
+ <Card title="..." actions={<Button size="sm" icon="plus">邀请</Button>}>...</Card>
45
45
  ```
46
46
 
47
47
  ## API
@@ -53,12 +53,6 @@ hoverable 在鼠标悬浮时轻微上移并加强阴影,适合可点击的卡片
53
53
  | variant | `"raised" | "flat" | "sunken"` | `"raised"` | 视觉变体 |
54
54
  | padding | `"none" | "sm" | "md" | "lg"` | `"md"` | 内边距 |
55
55
  | hoverable | `boolean` | `false` | 悬浮时抬起 |
56
-
57
-
58
- **Panel**
59
-
60
- | Prop | 类型 | 默认 | 说明 |
61
- | --- | --- | --- | --- |
62
56
  | title | `ReactNode` | — | 标题 |
63
57
  | description | `ReactNode` | — | 副标题 |
64
58
  | actions | `ReactNode` | — | 右上操作区 |
@@ -12,10 +12,27 @@ import { Cascader } from "@fangxinyan/lumina";
12
12
 
13
13
  ### 基础用法
14
14
 
15
+ option.icon 支持 IconName 或 ReactNode。
16
+
15
17
  ```tsx
16
18
  <Cascader options={regions} value={addr} onChange={setAddr} />
17
19
  ```
18
20
 
21
+ ### 搜索与清除
22
+
23
+ showSearch 开启路径搜索,allowClear 提供一键清空,popupClassName 可标记浮层。
24
+
25
+ ```tsx
26
+ <Cascader
27
+ showSearch={{ limit: 8 }}
28
+ allowClear
29
+ popupClassName="my-cascader-popup"
30
+ options={regions}
31
+ value={addr}
32
+ onChange={setAddr}
33
+ />
34
+ ```
35
+
19
36
  ## API
20
37
 
21
38
  **Cascader**
@@ -23,10 +40,15 @@ import { Cascader } from "@fangxinyan/lumina";
23
40
  | Prop | 类型 | 默认 | 说明 |
24
41
  | --- | --- | --- | --- |
25
42
  | options \* | `CascaderOption[]` | — | 层级选项树 |
43
+ | options[].icon | `IconName | ReactNode` | — | 选项前置图标,可传内置图标名或自定义节点 |
26
44
  | value / defaultValue | `string[]` | — | 受控/初始路径 |
27
45
  | onChange | `(path: string[]) => void` | — | 选择叶子时触发 |
28
46
  | placeholder | `string` | — | 占位文案 |
29
47
  | disabled | `boolean` | `false` | 禁用 |
48
+ | allowClear | `boolean` | `false` | 显示清除按钮 |
49
+ | showSearch | `boolean | { filter?, render?, limit? }` | — | 搜索路径,支持 boolean / 对象配置 |
50
+ | popupClassName / dropdownClassName | `string` | — | 浮层面板 className |
51
+ | changeOnSelect | `boolean` | `false` | 允许选中非叶子节点 |
30
52
 
31
53
 
32
54
  ---
@@ -1,11 +1,11 @@
1
- # Accordion 折叠面板
1
+ # Collapse 折叠面板
2
2
 
3
3
  > 纵向折叠面板。
4
4
 
5
5
  ## 导入
6
6
 
7
7
  ```tsx
8
- import { Accordion } from "@fangxinyan/lumina";
8
+ import { Collapse } from "@fangxinyan/lumina";
9
9
  ```
10
10
 
11
11
  ## 示例
@@ -13,7 +13,7 @@ import { Accordion } from "@fangxinyan/lumina";
13
13
  ### 基础
14
14
 
15
15
  ```tsx
16
- <Accordion items={[{ key, title, content }]} />
16
+ <Collapse items={[{ key, label, children }]} />
17
17
  ```
18
18
 
19
19
  ### 多项展开
@@ -21,7 +21,7 @@ import { Accordion } from "@fangxinyan/lumina";
21
21
  multiple 允许同时展开多个面板。
22
22
 
23
23
  ```tsx
24
- <Accordion multiple defaultActiveKeys={["1", "2"]} ... />
24
+ <Collapse defaultActiveKey={["1", "2"]} ... />
25
25
  ```
26
26
 
27
27
  ### 手风琴模式
@@ -29,7 +29,7 @@ multiple 允许同时展开多个面板。
29
29
  accordion={true} 同一时刻最多只展开一项;与 multiple 同时传入时 accordion 优先。
30
30
 
31
31
  ```tsx
32
- <Accordion accordion defaultActiveKeys={["1"]} ... />
32
+ <Collapse accordion defaultActiveKey="1" ... />
33
33
  ```
34
34
 
35
35
  ### 仅图标可点
@@ -37,7 +37,7 @@ accordion={true} 同一时刻最多只展开一项;与 multiple 同时传入时
37
37
  collapsible="icon" 将展开触发限制在右侧箭头图标上,标题区域不再响应。
38
38
 
39
39
  ```tsx
40
- <Accordion collapsible="icon" ... />
40
+ <Collapse collapsible="icon" ... />
41
41
  ```
42
42
 
43
43
  ### 禁用展开
@@ -45,20 +45,22 @@ collapsible="icon" 将展开触发限制在右侧箭头图标上,标题区域不
45
45
  collapsible="disabled" 会禁用所有项的展开交互。
46
46
 
47
47
  ```tsx
48
- <Accordion collapsible="disabled" defaultActiveKeys={["1"]} ... />
48
+ <Collapse collapsible="disabled" defaultActiveKey="1" ... />
49
49
  ```
50
50
 
51
51
  ## API
52
52
 
53
- **Accordion**
53
+ **Collapse**
54
54
 
55
55
  | Prop | 类型 | 默认 | 说明 |
56
56
  | --- | --- | --- | --- |
57
- | items \* | `AccordionItem[]` | — | 面板数据 |
58
- | multiple | `boolean` | `false` | 可同时展开多个 |
57
+ | items \* | `CollapseItem[]` | — | 面板数据 |
59
58
  | accordion | `boolean` | `false` | 手风琴模式(同一时刻最多一项) |
59
+ | multiple | `boolean` | `true` | 可同时展开多个 |
60
60
  | collapsible | `"header" | "icon" | "disabled"` | `"header"` | 展开触发区域 |
61
- | activeKeys / defaultActiveKeys | `string[]` | — | 受控/初始展开 |
61
+ | activeKey / defaultActiveKey | `string | string[]` | — | 受控/初始展开 |
62
+ | ghost | `boolean` | `false` | 无外框/阴影的轻量样式 |
63
+ | size | `"small" | "middle" | "large"` | `"middle"` | 尺寸 |
62
64
  | onChange | `(keys: string[]) => void` | — | 展开变更 |
63
65
 
64
66
 
@@ -23,7 +23,7 @@ extra 渲染到标题右边,常用来放刷新 / 更多 / 保存按钮。
23
23
  ```tsx
24
24
  <Drawer
25
25
  title="订单详情"
26
- extra={<><IconButton icon="edit" tip="编辑" /><Button variant="primary">保存</Button></>}
26
+ extra={<><Button icon="edit" tip="编辑" /><Button variant="primary">保存</Button></>}
27
27
  />
28
28
  ```
29
29
 
package/docs/llms/form.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Form 表单
2
2
 
3
- > 受控表单,字段绑定 + 校验,API 对齐 antd。
3
+ > 受控表单,字段绑定 + 校验。
4
4
 
5
5
  ## 示例
6
6
 
@@ -5,7 +5,7 @@
5
5
  ## 导入
6
6
 
7
7
  ```tsx
8
- import { Image, ImageGrid } from "@fangxinyan/lumina";
8
+ import { Image, ImageGrid, SpriteImage, LayeredImage } from "@fangxinyan/lumina";
9
9
  ```
10
10
 
11
11
  ## 示例
@@ -16,10 +16,43 @@ import { Image, ImageGrid } from "@fangxinyan/lumina";
16
16
  <Image src={url} width={240} height={160} />
17
17
  ```
18
18
 
19
+ ### 图标 / 原始资源
20
+
21
+ variant="icon" 会默认去掉外层 padding,适合 1:1 装备、物品、头像缩略图;variant="raw" 保留原始图片比例。
22
+
23
+ ```tsx
24
+ <Image variant="icon" src={iconUrl} width={56} height={56} preview={false} />
25
+ <Image variant="raw" src={bannerUrl} width={220} height={84} objectFit="contain" />
26
+ ```
27
+
28
+ ### Sprite 裁剪
29
+
30
+ SpriteImage 用 background-position 裁剪同一张雪碧图,适合 url + x/y/width/height 形式的图标资源。
31
+
32
+ ```tsx
33
+ <SpriteImage src={sheetUrl} sprite={{ x: 32, y: 0, width: 32, height: 32 }} />
34
+ ```
35
+
36
+ ### 多图层图片
37
+
38
+ LayeredImage 将多张图片叠在同一个盒子里,适合头像 + 头像框、底图 + 标记等资产。
39
+
40
+ ```tsx
41
+ <LayeredImage
42
+ width={72}
43
+ height={72}
44
+ layers={[
45
+ { src: headUrl, fit: "cover" },
46
+ { src: frameUrl },
47
+ ]}
48
+ />
49
+ ```
50
+
19
51
  ### 图片组
20
52
 
21
53
  ```tsx
22
54
  <ImageGrid images={images} />
55
+ <ImageGrid images={icons} imageProps={{ variant: "icon", preview: false }} />
23
56
  ```
24
57
 
25
58
  ## API
@@ -30,9 +63,47 @@ import { Image, ImageGrid } from "@fangxinyan/lumina";
30
63
  | --- | --- | --- | --- |
31
64
  | src | `string` | — | 图片 URL |
32
65
  | width / height | `number | string` | — | 尺寸 |
66
+ | variant | `"framed" | "raw" | "icon"` | `"framed"` | 视觉形态 |
67
+ | frame | `boolean` | `framed 时 true` | 是否保留内层凹陷 frame |
68
+ | padding | `number | string` | — | 外层留白,raw/icon 默认 0 |
69
+ | objectFit / objectPosition | `CSSProperties` | — | 底层 img 的 object-fit / object-position |
33
70
  | preview | `boolean` | `true` | 支持点击全屏预览 |
34
71
  | hover | `boolean` | `true` | 悬浮放大 |
35
72
  | placeholder | `ReactNode` | — | 占位/错误时内容 |
73
+ | imgProps | `ImgHTMLAttributes` | — | 透传到底层 img 的属性 |
74
+
75
+
76
+ **ImageGrid**
77
+
78
+ | Prop | 类型 | 默认 | 说明 |
79
+ | --- | --- | --- | --- |
80
+ | images \* | `ImageGridItem[]` | — | 图片项数组,单项也可覆盖 Image props |
81
+ | columns | `number` | — | 固定列数,不传则自动填充 |
82
+ | itemHeight | `number` | `130` | 默认图片高度 |
83
+ | minItemWidth | `number | string` | `160` | 自动填充时的最小列宽 |
84
+ | gap | `number | string` | `14` | 网格间距 |
85
+ | imageProps | `ImageProps` | — | 批量传给每个 Image 的属性 |
86
+
87
+
88
+ **SpriteImage**
89
+
90
+ | Prop | 类型 | 默认 | 说明 |
91
+ | --- | --- | --- | --- |
92
+ | src \* | `string` | — | sprite sheet 图片 URL |
93
+ | sprite \* | `{ x; y; width; height }` | — | 裁剪区域 |
94
+ | width / height | `number | string` | — | 渲染尺寸,默认使用 sprite 尺寸 |
95
+ | scale | `number` | `1` | 未指定 width/height 时的缩放倍数 |
96
+ | backgroundSize | `string` | — | 自定义 background-size |
97
+ | variant / frame / padding | `ImageVariant / boolean / number` | — | 同 Image 的媒体外观控制 |
98
+
99
+
100
+ **LayeredImage**
101
+
102
+ | Prop | 类型 | 默认 | 说明 |
103
+ | --- | --- | --- | --- |
104
+ | layers \* | `LayeredImageLayer[]` | — | 按顺序叠放的图片层 |
105
+ | width / height | `number | string` | — | 容器尺寸 |
106
+ | variant / frame / padding | `ImageVariant / boolean / number` | — | 同 Image 的媒体外观控制 |
36
107
 
37
108
 
38
109
  ---
@@ -14,26 +14,32 @@ import { Input, Textarea } from "@fangxinyan/lumina";
14
14
 
15
15
  ```tsx
16
16
  const [v, setV] = useState("");
17
- <Input placeholder="输入用户名" value={v} onChange={setV} leadingIcon="user" />
17
+ <Input
18
+ placeholder="输入用户名"
19
+ value={v}
20
+ onChange={(e) => setV(e.target.value)}
21
+ leadingIcon="user"
22
+ />
18
23
  ```
19
24
 
20
25
  ### 前后置图标
21
26
 
22
- leadingIcon / trailingIcon。
27
+ leadingIcon / trailingIcon 支持内置 IconName 或外部 ReactNode。
23
28
 
24
29
  ```tsx
25
30
  <Input placeholder="搜索..." leadingIcon="search" />
31
+ <Input placeholder="物品名" leadingIcon={<img src={iconUrl} alt="" />} />
26
32
  ```
27
33
 
28
- ### 密码切换
34
+ ### Input.Password
29
35
 
30
- trailingIcon 可点击切换密码可见性。
36
+ 密码输入框,内置显隐切换。
31
37
 
32
38
  ```tsx
33
- <Input
34
- type={showPw ? "text" : "password"}
35
- trailingIcon={showPw ? "eyeOff" : "eye"}
36
- onTrailingIconClick={() => setShowPw(s => !s)}
39
+ <Input.Password
40
+ value={pw}
41
+ onChange={(e) => setPw(e.target.value)}
42
+ allowClear
37
43
  />
38
44
  ```
39
45
 
@@ -50,7 +56,7 @@ invalid 触发红色凹槽。
50
56
  allowClear 在值非空时显示 × 按钮,点击即清空。
51
57
 
52
58
  ```tsx
53
- <Input value={v} onChange={setV} allowClear placeholder="输入后右侧会出现 ×" />
59
+ <Input value={v} onValueChange={setV} allowClear placeholder="输入后右侧会出现 ×" />
54
60
  ```
55
61
 
56
62
  ### 前缀 / 后缀
@@ -69,22 +75,22 @@ showCount 显示当前字数,配合 maxLength 显示 N / max。
69
75
  ```tsx
70
76
  <Input
71
77
  value={v}
72
- onChange={setV}
78
+ onValueChange={setV}
73
79
  maxLength={20}
74
80
  showCount
75
81
  placeholder="最多输入 20 个字"
76
82
  />
77
83
  ```
78
84
 
79
- ### 多行文本
85
+ ### Input.TextArea 多行文本
80
86
 
81
- Textarea 与 Input 共享同款凹槽,也支持 allowClear / maxLength / showCount。
87
+ Input.TextArea 与 Textarea 使用同一套多行输入能力,也支持 allowClear / maxLength / showCount。
82
88
 
83
89
  ```tsx
84
- <Textarea
90
+ <Input.TextArea
85
91
  placeholder="..."
86
92
  value={msg}
87
- onChange={setMsg}
93
+ onChange={(e) => setMsg(e.target.value)}
88
94
  allowClear
89
95
  maxLength={300}
90
96
  showCount
@@ -98,25 +104,29 @@ Textarea 与 Input 共享同款凹槽,也支持 allowClear / maxLength / showCou
98
104
  | Prop | 类型 | 默认 | 说明 |
99
105
  | --- | --- | --- | --- |
100
106
  | value / defaultValue | `string` | — | 受控值 / 初值 |
101
- | onChange | `(value: string, e) => void` | — | 变更回调 |
107
+ | onChange | `(event) => void` | — | 变更回调,传入 React 原生事件 |
108
+ | onValueChange | `(value: string, event) => void` | — | 值回调便捷写法 |
102
109
  | placeholder | `string` | — | 占位文案 |
103
- | leadingIcon / trailingIcon | `IconName` | — | 前/后置图标 |
110
+ | leadingIcon / trailingIcon | `IconName | ReactNode` | — | 前/后置图标,可传内置图标名或自定义节点 |
104
111
  | prefix | `ReactNode` | — | 左侧内嵌内容(在 leadingIcon 之后) |
105
112
  | suffix | `ReactNode` | — | 右侧内嵌内容(在 trailingIcon 之前) |
106
113
  | allowClear | `boolean` | `false` | 显示内置的清除按钮 |
107
114
  | maxLength | `number` | — | 最大字符数,透传至原生 input |
108
115
  | showCount | `boolean` | `false` | 在输入框下方显示字数统计 |
116
+ | Input.Password | `Component` | — | 密码输入框,内置显隐切换 |
117
+ | Input.TextArea | `typeof Textarea` | — | 多行文本别名 |
109
118
  | size | `"sm" | "md" | "lg"` | `"md"` | 尺寸 |
110
119
  | invalid | `boolean` | `false` | 错误态 |
111
120
  | disabled | `boolean` | `false` | 禁用 |
112
121
 
113
122
 
114
- **Textarea**
123
+ **Input.TextArea / Textarea**
115
124
 
116
125
  | Prop | 类型 | 默认 | 说明 |
117
126
  | --- | --- | --- | --- |
118
127
  | value / defaultValue | `string` | — | 受控值 / 初值 |
119
- | onChange | `(value: string, e) => void` | — | 变更回调 |
128
+ | onChange | `(event) => void` | — | 变更回调,传入 React 原生事件 |
129
+ | onValueChange | `(value: string, event) => void` | — | 值回调便捷写法 |
120
130
  | allowClear | `boolean` | `false` | 右上角显示清除按钮 |
121
131
  | maxLength | `number` | — | 最大字符数 |
122
132
  | showCount | `boolean` | `false` | 显示字数统计 |
@@ -0,0 +1,63 @@
1
+ # Message 全局消息
2
+
3
+ > 全局轻量提示,支持函数调用与对象配置。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { message, MessageContainer } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 四种语义
14
+
15
+ ```tsx
16
+ message.info("已保存到草稿");
17
+ message.success("操作完成");
18
+ message.warning("请注意");
19
+ message.error("发生错误");
20
+ ```
21
+
22
+ ### 带标题
23
+
24
+ ```tsx
25
+ message.success("已上传 5 个文件", "上传完成");
26
+ ```
27
+
28
+ ### 对象调用
29
+
30
+ 支持 content / duration / key / destroy,适合需要更新或手动关闭的提示。
31
+
32
+ ```tsx
33
+ message.open({ key: "sync", type: "info", content: "同步中...", duration: 0 });
34
+ setTimeout(() => {
35
+ message.success({ key: "sync", content: "同步完成", duration: 1800 });
36
+ }, 900);
37
+ message.destroy("sync");
38
+ ```
39
+
40
+ ## API
41
+
42
+ **message.***
43
+
44
+ | Prop | 类型 | 默认 | 说明 |
45
+ | --- | --- | --- | --- |
46
+ | info(message, title?) | `(msg, title?) => id` | — | 信息提示 |
47
+ | success(message, title?) | `(msg, title?) => id` | — | 成功 |
48
+ | warning(message, title?) / warn(message, title?) | `(msg, title?) => id` | — | 警告 |
49
+ | error(message, title?) | `(msg, title?) => id` | — | 错误 |
50
+ | open({ type, content, title?, duration?, key? }) | `(config) => id` | — | 对象配置 API |
51
+ | dismiss(id) | `(id: number) => void` | — | 关闭一条 |
52
+ | destroy(key?) / clear() | `(key?) => void` | — | 关闭指定 key 或清空全部 |
53
+
54
+
55
+ **MessageContainer**
56
+
57
+ | Prop | 类型 | 默认 | 说明 |
58
+ | --- | --- | --- | --- |
59
+ | placement | `"top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-center"` | `"top-right"` | 位置 |
60
+
61
+
62
+ ---
63
+ [← 回到索引](../llms.md)
@@ -16,6 +16,24 @@ import { Modal } from "@fangxinyan/lumina";
16
16
  <Modal open={m} onClose={...} title="标题">...</Modal>
17
17
  ```
18
18
 
19
+ ### 静态确认框
20
+
21
+ 通过 Modal.confirm / warning / error / success / info 直接创建一次性对话框。
22
+
23
+ ```tsx
24
+ Modal.confirm({
25
+ title: "覆盖当前配置?",
26
+ content: "保存后会立即生效。",
27
+ okText: "覆盖",
28
+ onOk: async () => {
29
+ await save();
30
+ message.success("已覆盖");
31
+ },
32
+ });
33
+
34
+ Modal.warning({ title: "容量不足", content: "请先清理缓存。" });
35
+ ```
36
+
19
37
  ### 确认操作 (footer 自定义)
20
38
 
21
39
  用 footer 自定义底部按钮。传 null 可以去掉 footer。
@@ -85,5 +103,17 @@ closable={false} 隐藏右上角 ×,closeIcon 可自定义。
85
103
  | zIndex | `number` | — | 覆盖遮罩 z-index |
86
104
 
87
105
 
106
+ **Modal 静态 API**
107
+
108
+ | Prop | 类型 | 默认 | 说明 |
109
+ | --- | --- | --- | --- |
110
+ | Modal.confirm(config) | `(config) => { destroy, update }` | — | 确认框,默认显示取消/确定 |
111
+ | Modal.info / success / warning / error(config) | `(config) => { destroy, update }` | — | 单按钮提示框 |
112
+ | Modal.destroyAll() | `() => void` | — | 关闭全部静态弹窗 |
113
+ | config.content | `ReactNode` | — | 正文内容 |
114
+ | config.okCancel | `boolean` | — | 是否显示取消按钮 |
115
+ | config.onOk | `() => void | Promise<void>` | — | 确定回调,返回 Promise 时自动显示 loading |
116
+
117
+
88
118
  ---
89
119
  [← 回到索引](../llms.md)
@@ -71,6 +71,21 @@ import { Popover } from "@fangxinyan/lumina";
71
71
  </div>
72
72
  ```
73
73
 
74
+ ### 细分位置与浮层 class
75
+
76
+ placement 支持 bottomLeft 等细分方向,overlayClassName 可标记浮层节点。
77
+
78
+ ```tsx
79
+ <Popover
80
+ placement="bottomLeft"
81
+ overlayClassName="settings-popover"
82
+ title="快捷设置"
83
+ content={<div>显示在触发器左下方。</div>}
84
+ >
85
+ <Button icon="settings">设置</Button>
86
+ </Popover>
87
+ ```
88
+
74
89
  ### 箭头
75
90
 
76
91
  arrow 属性添加指向触发元素的小箭头
@@ -152,7 +167,7 @@ trigger="hover" 鼠标悬停触发
152
167
  | --- | --- | --- | --- |
153
168
  | content \* | `ReactNode` | — | 浮层内容 |
154
169
  | title | `ReactNode` | — | 标题 |
155
- | placement | `"top" | "bottom" | "left" | "right"` | `"bottom"` | 弹出位置 |
170
+ | placement | `"top" | "bottom" | "left" | "right" | ...` | `"bottom"` | 弹出位置,支持 bottomLeft 等细分方向 |
156
171
  | trigger | `"click" | "hover"` | `"click"` | 触发方式 |
157
172
  | arrow | `boolean` | `false` | 显示箭头 |
158
173
  | closable | `boolean` | `false` | 显示关闭按钮 |
@@ -160,6 +175,8 @@ trigger="hover" 鼠标悬停触发
160
175
  | open | `boolean` | — | 受控显示状态 |
161
176
  | defaultOpen | `boolean` | `false` | 非受控初始状态 |
162
177
  | onOpenChange | `(open: boolean) => void` | — | 显示状态变化回调 |
178
+ | visible / onVisibleChange | `boolean / (visible) => void` | — | 受控显示状态别名 |
179
+ | overlayClassName / popupClassName | `string` | — | 浮层 className |
163
180
 
164
181
 
165
182
  ---