@fangxinyan/lumina 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.d.cts +2 -2
  3. package/dist/Accordion.d.ts +2 -2
  4. package/dist/Accordion.js +2 -2
  5. package/dist/Alert.cjs +3 -3
  6. package/dist/Alert.d.cts +2 -2
  7. package/dist/Alert.d.ts +2 -2
  8. package/dist/Alert.js +2 -2
  9. package/dist/AppShell.cjs +5 -5
  10. package/dist/AppShell.d.cts +8 -8
  11. package/dist/AppShell.d.ts +8 -8
  12. package/dist/AppShell.js +1 -1
  13. package/dist/AutoComplete.cjs +4 -4
  14. package/dist/AutoComplete.d.cts +1 -4
  15. package/dist/AutoComplete.d.ts +1 -4
  16. package/dist/AutoComplete.js +3 -3
  17. package/dist/Avatar.cjs +2 -2
  18. package/dist/Avatar.d.cts +1 -1
  19. package/dist/Avatar.d.ts +1 -1
  20. package/dist/Avatar.js +1 -1
  21. package/dist/Button.cjs +4 -4
  22. package/dist/Button.js +2 -2
  23. package/dist/Calendar.cjs +3 -3
  24. package/dist/Calendar.d.cts +2 -2
  25. package/dist/Calendar.d.ts +2 -2
  26. package/dist/Calendar.js +2 -2
  27. package/dist/Cascader.cjs +3 -3
  28. package/dist/Cascader.d.cts +2 -2
  29. package/dist/Cascader.d.ts +2 -2
  30. package/dist/Cascader.js +2 -2
  31. package/dist/Checkbox.cjs +4 -4
  32. package/dist/Checkbox.d.cts +5 -5
  33. package/dist/Checkbox.d.ts +5 -5
  34. package/dist/Checkbox.js +2 -2
  35. package/dist/ColorPicker.cjs +2 -2
  36. package/dist/ColorPicker.d.cts +1 -3
  37. package/dist/ColorPicker.d.ts +1 -3
  38. package/dist/ColorPicker.js +1 -1
  39. package/dist/CommandPalette.cjs +4 -4
  40. package/dist/CommandPalette.d.cts +2 -2
  41. package/dist/CommandPalette.d.ts +2 -2
  42. package/dist/CommandPalette.js +3 -3
  43. package/dist/ContextMenu.cjs +2 -2
  44. package/dist/ContextMenu.d.cts +2 -2
  45. package/dist/ContextMenu.d.ts +2 -2
  46. package/dist/ContextMenu.js +1 -1
  47. package/dist/Divider.cjs +2 -2
  48. package/dist/Divider.d.cts +1 -1
  49. package/dist/Divider.d.ts +1 -1
  50. package/dist/Divider.js +1 -1
  51. package/dist/Drawer.cjs +3 -3
  52. package/dist/Drawer.d.cts +2 -2
  53. package/dist/Drawer.d.ts +2 -2
  54. package/dist/Drawer.js +2 -2
  55. package/dist/Empty.cjs +4 -4
  56. package/dist/Empty.d.cts +6 -6
  57. package/dist/Empty.d.ts +6 -6
  58. package/dist/Empty.js +1 -1
  59. package/dist/Form.cjs +4 -4
  60. package/dist/Form.d.cts +2 -2
  61. package/dist/Form.d.ts +2 -2
  62. package/dist/Form.js +1 -1
  63. package/dist/Icon.cjs +3 -3
  64. package/dist/Icon.d.cts +1 -1
  65. package/dist/Icon.d.ts +1 -1
  66. package/dist/Icon.js +1 -1
  67. package/dist/Image.cjs +4 -4
  68. package/dist/Image.d.cts +4 -4
  69. package/dist/Image.d.ts +4 -4
  70. package/dist/Image.js +2 -2
  71. package/dist/Input.cjs +4 -4
  72. package/dist/Input.js +2 -2
  73. package/dist/InputNumber.cjs +4 -4
  74. package/dist/InputNumber.d.cts +1 -5
  75. package/dist/InputNumber.d.ts +1 -5
  76. package/dist/InputNumber.js +3 -3
  77. package/dist/List.cjs +2 -2
  78. package/dist/List.d.cts +2 -2
  79. package/dist/List.d.ts +2 -2
  80. package/dist/List.js +1 -1
  81. package/dist/Modal.cjs +4 -4
  82. package/dist/Modal.d.cts +2 -2
  83. package/dist/Modal.d.ts +2 -2
  84. package/dist/Modal.js +3 -3
  85. package/dist/Pagination.cjs +5 -5
  86. package/dist/Pagination.d.cts +2 -2
  87. package/dist/Pagination.d.ts +2 -2
  88. package/dist/Pagination.js +4 -4
  89. package/dist/Popover.cjs +2 -2
  90. package/dist/Popover.d.cts +2 -2
  91. package/dist/Popover.d.ts +2 -2
  92. package/dist/Popover.js +1 -1
  93. package/dist/Progress-CHV7DN6Y.css +80 -0
  94. package/dist/Progress.cjs +2 -6
  95. package/dist/Progress.d.cts +5 -13
  96. package/dist/Progress.d.ts +5 -13
  97. package/dist/Progress.js +1 -1
  98. package/dist/Select.cjs +4 -4
  99. package/dist/Select.d.cts +6 -3
  100. package/dist/Select.d.ts +6 -3
  101. package/dist/Select.js +3 -3
  102. package/dist/Splitter.cjs +2 -2
  103. package/dist/Splitter.d.cts +2 -2
  104. package/dist/Splitter.d.ts +2 -2
  105. package/dist/Splitter.js +1 -1
  106. package/dist/StatusBar.cjs +3 -3
  107. package/dist/StatusBar.d.cts +3 -2
  108. package/dist/StatusBar.d.ts +3 -2
  109. package/dist/StatusBar.js +1 -1
  110. package/dist/Switch.cjs +2 -2
  111. package/dist/Switch.d.cts +2 -2
  112. package/dist/Switch.d.ts +2 -2
  113. package/dist/Switch.js +1 -1
  114. package/dist/Table.cjs +8 -8
  115. package/dist/Table.d.cts +4 -3
  116. package/dist/Table.d.ts +4 -3
  117. package/dist/Table.js +6 -6
  118. package/dist/Tabs.cjs +3 -3
  119. package/dist/Tabs.d.cts +5 -5
  120. package/dist/Tabs.d.ts +5 -5
  121. package/dist/Tabs.js +1 -1
  122. package/dist/Tag.cjs +4 -4
  123. package/dist/Tag.d.cts +2 -2
  124. package/dist/Tag.d.ts +2 -2
  125. package/dist/Tag.js +2 -2
  126. package/dist/Timeline.cjs +3 -3
  127. package/dist/Timeline.js +2 -2
  128. package/dist/Toast.cjs +4 -4
  129. package/dist/Toast.d.cts +2 -2
  130. package/dist/Toast.d.ts +2 -2
  131. package/dist/Toast.js +2 -2
  132. package/dist/Tooltip.cjs +2 -2
  133. package/dist/Tooltip.d.cts +2 -2
  134. package/dist/Tooltip.d.ts +2 -2
  135. package/dist/Tooltip.js +1 -1
  136. package/dist/Typography.cjs +7 -7
  137. package/dist/Typography.js +2 -2
  138. package/dist/{chunk-QVFEKGKI.cjs → chunk-2K5HZLXW.cjs} +6 -3
  139. package/dist/chunk-2K5HZLXW.cjs.map +1 -0
  140. package/dist/chunk-2LIX7ZHX.js +29 -0
  141. package/dist/chunk-2LIX7ZHX.js.map +1 -0
  142. package/dist/{chunk-3ES5QPAF.cjs → chunk-2TNJ7TC4.cjs} +22 -12
  143. package/dist/chunk-2TNJ7TC4.cjs.map +1 -0
  144. package/dist/chunk-3EGZ6TBF.cjs +65 -0
  145. package/dist/chunk-3EGZ6TBF.cjs.map +1 -0
  146. package/dist/{chunk-RFU5HN4E.js → chunk-3LJO33HI.js} +25 -7
  147. package/dist/chunk-3LJO33HI.js.map +1 -0
  148. package/dist/{chunk-UQB5OHMO.js → chunk-44AVDO3T.js} +27 -19
  149. package/dist/chunk-44AVDO3T.js.map +1 -0
  150. package/dist/{chunk-TAYFI4RG.cjs → chunk-474MXYO5.cjs} +4 -4
  151. package/dist/{chunk-TAYFI4RG.cjs.map → chunk-474MXYO5.cjs.map} +1 -1
  152. package/dist/{chunk-TMRSI543.js → chunk-4DNHASZU.js} +10 -8
  153. package/dist/chunk-4DNHASZU.js.map +1 -0
  154. package/dist/{chunk-UXABXEWT.js → chunk-4JHFGSNH.js} +24 -13
  155. package/dist/chunk-4JHFGSNH.js.map +1 -0
  156. package/dist/{chunk-E7UQSFKF.js → chunk-4XSP4HHZ.js} +18 -8
  157. package/dist/chunk-4XSP4HHZ.js.map +1 -0
  158. package/dist/{chunk-JQZFOIX6.js → chunk-5VIOJW6M.js} +141 -128
  159. package/dist/chunk-5VIOJW6M.js.map +1 -0
  160. package/dist/{chunk-WBL7LOIH.js → chunk-6CAEGNCK.js} +10 -8
  161. package/dist/chunk-6CAEGNCK.js.map +1 -0
  162. package/dist/{chunk-JELHUUM5.js → chunk-6FSOJLY6.js} +3 -3
  163. package/dist/{chunk-JELHUUM5.js.map → chunk-6FSOJLY6.js.map} +1 -1
  164. package/dist/{chunk-2OBQOEFD.cjs → chunk-6TRVGFFX.cjs} +16 -5
  165. package/dist/chunk-6TRVGFFX.cjs.map +1 -0
  166. package/dist/{chunk-7T2SLRNL.cjs → chunk-74VZZAUT.cjs} +14 -7
  167. package/dist/chunk-74VZZAUT.cjs.map +1 -0
  168. package/dist/{chunk-GR5STMOA.js → chunk-A3IJM7IX.js} +76 -50
  169. package/dist/chunk-A3IJM7IX.js.map +1 -0
  170. package/dist/{chunk-WZ73TWB2.cjs → chunk-AXRABZLY.cjs} +25 -7
  171. package/dist/chunk-AXRABZLY.cjs.map +1 -0
  172. package/dist/{chunk-X3JG3IR6.js → chunk-BSHHQOFY.js} +23 -18
  173. package/dist/chunk-BSHHQOFY.js.map +1 -0
  174. package/dist/{chunk-JSDQVVQB.js → chunk-CVEGVB2C.js} +17 -12
  175. package/dist/chunk-CVEGVB2C.js.map +1 -0
  176. package/dist/{chunk-ILVNMES2.js → chunk-D242UJZO.js} +14 -11
  177. package/dist/chunk-D242UJZO.js.map +1 -0
  178. package/dist/{chunk-RJNGXR5Y.js → chunk-DB5JMXOI.js} +11 -9
  179. package/dist/chunk-DB5JMXOI.js.map +1 -0
  180. package/dist/{chunk-OWNVDXRQ.js → chunk-DCX36FYD.js} +23 -10
  181. package/dist/chunk-DCX36FYD.js.map +1 -0
  182. package/dist/{chunk-3KQKEE5O.cjs → chunk-DH4NYYJP.cjs} +43 -18
  183. package/dist/chunk-DH4NYYJP.cjs.map +1 -0
  184. package/dist/{chunk-P4XPESR2.js → chunk-DUNQNSVK.js} +20 -10
  185. package/dist/chunk-DUNQNSVK.js.map +1 -0
  186. package/dist/{chunk-5PREWYTB.js → chunk-E6K6GYUC.js} +21 -27
  187. package/dist/chunk-E6K6GYUC.js.map +1 -0
  188. package/dist/{chunk-IHACXMOI.js → chunk-EARCKSI7.js} +6 -3
  189. package/dist/chunk-EARCKSI7.js.map +1 -0
  190. package/dist/chunk-EHZXEZI2.cjs +78 -0
  191. package/dist/chunk-EHZXEZI2.cjs.map +1 -0
  192. package/dist/{chunk-S7RFIMA3.cjs → chunk-FBQLNAUI.cjs} +11 -9
  193. package/dist/chunk-FBQLNAUI.cjs.map +1 -0
  194. package/dist/chunk-FCIPCZAK.cjs +53 -0
  195. package/dist/chunk-FCIPCZAK.cjs.map +1 -0
  196. package/dist/{chunk-DLGFIRVW.js → chunk-FSOJHDXH.js} +7 -6
  197. package/dist/chunk-FSOJHDXH.js.map +1 -0
  198. package/dist/{chunk-2D5VCIJZ.cjs → chunk-HHSVGNJA.cjs} +7 -7
  199. package/dist/chunk-HHSVGNJA.cjs.map +1 -0
  200. package/dist/{chunk-ZSR5JSYZ.cjs → chunk-HQO7EZNQ.cjs} +23 -13
  201. package/dist/chunk-HQO7EZNQ.cjs.map +1 -0
  202. package/dist/{chunk-V6466VMN.cjs → chunk-IL523MTN.cjs} +144 -131
  203. package/dist/chunk-IL523MTN.cjs.map +1 -0
  204. package/dist/{chunk-GT45MQAK.cjs → chunk-JAGJQDAV.cjs} +22 -13
  205. package/dist/chunk-JAGJQDAV.cjs.map +1 -0
  206. package/dist/{chunk-U7TAQLPN.cjs → chunk-JF2WNLPF.cjs} +6 -6
  207. package/dist/{chunk-U7TAQLPN.cjs.map → chunk-JF2WNLPF.cjs.map} +1 -1
  208. package/dist/{chunk-S3NIRNWM.js → chunk-JS6U7UQS.js} +3 -3
  209. package/dist/{chunk-S3NIRNWM.js.map → chunk-JS6U7UQS.js.map} +1 -1
  210. package/dist/{chunk-H2QTLV5T.cjs → chunk-KA3XLPQJ.cjs} +34 -9
  211. package/dist/chunk-KA3XLPQJ.cjs.map +1 -0
  212. package/dist/{chunk-NS3C2ZSE.js → chunk-KWE2PXJQ.js} +8 -5
  213. package/dist/chunk-KWE2PXJQ.js.map +1 -0
  214. package/dist/{chunk-TGUDT3GK.js → chunk-LSQD2GFA.js} +4 -4
  215. package/dist/chunk-LSQD2GFA.js.map +1 -0
  216. package/dist/{chunk-D26YHP2Y.cjs → chunk-MU4GGX6C.cjs} +14 -12
  217. package/dist/chunk-MU4GGX6C.cjs.map +1 -0
  218. package/dist/{chunk-3YYOYDKI.js → chunk-MXIWTYNC.js} +16 -6
  219. package/dist/chunk-MXIWTYNC.js.map +1 -0
  220. package/dist/{chunk-5EAVXFFD.cjs → chunk-NRP3X3PE.cjs} +17 -12
  221. package/dist/chunk-NRP3X3PE.cjs.map +1 -0
  222. package/dist/{chunk-DF5K2BZ2.cjs → chunk-P4CGE5C7.cjs} +17 -7
  223. package/dist/chunk-P4CGE5C7.cjs.map +1 -0
  224. package/dist/{chunk-5SJJI3HL.js → chunk-PX5ABNKV.js} +19 -10
  225. package/dist/chunk-PX5ABNKV.js.map +1 -0
  226. package/dist/{chunk-WKNVNN2K.cjs → chunk-QCNHDDSD.cjs} +36 -13
  227. package/dist/chunk-QCNHDDSD.cjs.map +1 -0
  228. package/dist/{chunk-5N7347MI.js → chunk-QRSPBK3X.js} +8 -6
  229. package/dist/chunk-QRSPBK3X.js.map +1 -0
  230. package/dist/{chunk-XT7RXXOE.js → chunk-RHZOBQON.js} +35 -13
  231. package/dist/chunk-RHZOBQON.js.map +1 -0
  232. package/dist/{chunk-P2AV5BD7.cjs → chunk-RNVE2LMJ.cjs} +33 -8
  233. package/dist/chunk-RNVE2LMJ.cjs.map +1 -0
  234. package/dist/{chunk-TQLCIXCK.cjs → chunk-RXL26GSI.cjs} +28 -5
  235. package/dist/chunk-RXL26GSI.cjs.map +1 -0
  236. package/dist/{chunk-UUY7EDVJ.cjs → chunk-S3OSBW7R.cjs} +19 -14
  237. package/dist/chunk-S3OSBW7R.cjs.map +1 -0
  238. package/dist/{chunk-33TIL25B.cjs → chunk-SREMTSVI.cjs} +47 -19
  239. package/dist/chunk-SREMTSVI.cjs.map +1 -0
  240. package/dist/{chunk-6GNFRP2H.js → chunk-SWB57EA2.js} +9 -7
  241. package/dist/chunk-SWB57EA2.js.map +1 -0
  242. package/dist/{chunk-FLPHVK45.js → chunk-T7ZBJJC4.js} +12 -7
  243. package/dist/chunk-T7ZBJJC4.js.map +1 -0
  244. package/dist/chunk-TC5ZL2OS.cjs +165 -0
  245. package/dist/chunk-TC5ZL2OS.cjs.map +1 -0
  246. package/dist/{chunk-I7UJA6RM.cjs → chunk-V24B7KWT.cjs} +12 -10
  247. package/dist/chunk-V24B7KWT.cjs.map +1 -0
  248. package/dist/{chunk-BIXW4ZYW.cjs → chunk-V5KSJITO.cjs} +7 -7
  249. package/dist/{chunk-BIXW4ZYW.cjs.map → chunk-V5KSJITO.cjs.map} +1 -1
  250. package/dist/{chunk-IJIQ4H6C.cjs → chunk-WFFWVQK4.cjs} +7 -7
  251. package/dist/{chunk-IJIQ4H6C.cjs.map → chunk-WFFWVQK4.cjs.map} +1 -1
  252. package/dist/{chunk-LWN2PXW7.js → chunk-WLFMOWUY.js} +3 -3
  253. package/dist/{chunk-LWN2PXW7.js.map → chunk-WLFMOWUY.js.map} +1 -1
  254. package/dist/{chunk-N5W6XJI2.js → chunk-X3QINITU.js} +16 -5
  255. package/dist/chunk-X3QINITU.js.map +1 -0
  256. package/dist/{chunk-AJEF2ZB7.cjs → chunk-XMFVAYBP.cjs} +9 -8
  257. package/dist/chunk-XMFVAYBP.cjs.map +1 -0
  258. package/dist/{chunk-WR3FML2W.cjs → chunk-XMINE4TN.cjs} +28 -17
  259. package/dist/chunk-XMINE4TN.cjs.map +1 -0
  260. package/dist/{chunk-YZ2I7CDF.cjs → chunk-XXE5TQ7I.cjs} +9 -7
  261. package/dist/chunk-XXE5TQ7I.cjs.map +1 -0
  262. package/dist/{chunk-UEHONGPZ.js → chunk-XYGRVPUA.js} +33 -8
  263. package/dist/chunk-XYGRVPUA.js.map +1 -0
  264. package/dist/chunk-Y7BZMMAV.cjs +51 -0
  265. package/dist/chunk-Y7BZMMAV.cjs.map +1 -0
  266. package/dist/{chunk-HHPYY4LH.js → chunk-YRAQRENN.js} +38 -11
  267. package/dist/chunk-YRAQRENN.js.map +1 -0
  268. package/dist/{chunk-BPDWBY6Y.cjs → chunk-YVSZLQTQ.cjs} +19 -9
  269. package/dist/chunk-YVSZLQTQ.cjs.map +1 -0
  270. package/dist/{chunk-TCPTBLDV.cjs → chunk-ZA36BJIY.cjs} +38 -11
  271. package/dist/chunk-ZA36BJIY.cjs.map +1 -0
  272. package/dist/{chunk-47Z4NIU4.js → chunk-ZHCQEJ2Z.js} +14 -7
  273. package/dist/chunk-ZHCQEJ2Z.js.map +1 -0
  274. package/dist/{chunk-D3GZSL2B.cjs → chunk-ZM4P6ELG.cjs} +45 -23
  275. package/dist/chunk-ZM4P6ELG.cjs.map +1 -0
  276. package/dist/{chunk-4ADDAZK3.js → chunk-ZN6VS6SO.js} +18 -13
  277. package/dist/chunk-ZN6VS6SO.js.map +1 -0
  278. package/dist/{chunk-AZRJZM7W.js → chunk-ZPDMAMWC.js} +21 -11
  279. package/dist/chunk-ZPDMAMWC.js.map +1 -0
  280. package/dist/{chunk-GB5NAXBP.js → chunk-ZZXNHPF3.js} +3 -3
  281. package/dist/{chunk-GB5NAXBP.js.map → chunk-ZZXNHPF3.js.map} +1 -1
  282. package/dist/index.cjs +94 -98
  283. package/dist/index.cjs.map +1 -1
  284. package/dist/index.d.cts +2 -2
  285. package/dist/index.d.ts +2 -2
  286. package/dist/index.js +37 -37
  287. package/dist/index.js.map +1 -1
  288. package/dist/styles.css +50 -32
  289. package/docs/llms/appshell.md +36 -0
  290. package/docs/llms/progress.md +10 -18
  291. package/docs/llms.md +7 -5
  292. package/package.json +76 -1
  293. package/dist/Progress-IXRSO5TW.css +0 -63
  294. package/dist/chunk-2D5VCIJZ.cjs.map +0 -1
  295. package/dist/chunk-2OBQOEFD.cjs.map +0 -1
  296. package/dist/chunk-33TIL25B.cjs.map +0 -1
  297. package/dist/chunk-3ES5QPAF.cjs.map +0 -1
  298. package/dist/chunk-3KQKEE5O.cjs.map +0 -1
  299. package/dist/chunk-3YYOYDKI.js.map +0 -1
  300. package/dist/chunk-47Z4NIU4.js.map +0 -1
  301. package/dist/chunk-4ADDAZK3.js.map +0 -1
  302. package/dist/chunk-5BFETKVP.cjs +0 -52
  303. package/dist/chunk-5BFETKVP.cjs.map +0 -1
  304. package/dist/chunk-5EAVXFFD.cjs.map +0 -1
  305. package/dist/chunk-5N7347MI.js.map +0 -1
  306. package/dist/chunk-5PREWYTB.js.map +0 -1
  307. package/dist/chunk-5SJJI3HL.js.map +0 -1
  308. package/dist/chunk-6GNFRP2H.js.map +0 -1
  309. package/dist/chunk-7T2SLRNL.cjs.map +0 -1
  310. package/dist/chunk-7YQWG7HR.cjs +0 -45
  311. package/dist/chunk-7YQWG7HR.cjs.map +0 -1
  312. package/dist/chunk-AJEF2ZB7.cjs.map +0 -1
  313. package/dist/chunk-AZRJZM7W.js.map +0 -1
  314. package/dist/chunk-BPDWBY6Y.cjs.map +0 -1
  315. package/dist/chunk-D26YHP2Y.cjs.map +0 -1
  316. package/dist/chunk-D3GZSL2B.cjs.map +0 -1
  317. package/dist/chunk-DF5K2BZ2.cjs.map +0 -1
  318. package/dist/chunk-DLGFIRVW.js.map +0 -1
  319. package/dist/chunk-E7UQSFKF.js.map +0 -1
  320. package/dist/chunk-FLPHVK45.js.map +0 -1
  321. package/dist/chunk-GR5STMOA.js.map +0 -1
  322. package/dist/chunk-GT45MQAK.cjs.map +0 -1
  323. package/dist/chunk-H2QTLV5T.cjs.map +0 -1
  324. package/dist/chunk-HHPYY4LH.js.map +0 -1
  325. package/dist/chunk-I7UJA6RM.cjs.map +0 -1
  326. package/dist/chunk-IHACXMOI.js.map +0 -1
  327. package/dist/chunk-ILVNMES2.js.map +0 -1
  328. package/dist/chunk-IZDJCEMF.cjs +0 -31
  329. package/dist/chunk-IZDJCEMF.cjs.map +0 -1
  330. package/dist/chunk-JQZFOIX6.js.map +0 -1
  331. package/dist/chunk-JSDQVVQB.js.map +0 -1
  332. package/dist/chunk-N5W6XJI2.js.map +0 -1
  333. package/dist/chunk-NQQWCIE6.cjs +0 -20
  334. package/dist/chunk-NQQWCIE6.cjs.map +0 -1
  335. package/dist/chunk-NS3C2ZSE.js.map +0 -1
  336. package/dist/chunk-OWNVDXRQ.js.map +0 -1
  337. package/dist/chunk-P2AV5BD7.cjs.map +0 -1
  338. package/dist/chunk-P4XPESR2.js.map +0 -1
  339. package/dist/chunk-QVFEKGKI.cjs.map +0 -1
  340. package/dist/chunk-RFU5HN4E.js.map +0 -1
  341. package/dist/chunk-RJNGXR5Y.js.map +0 -1
  342. package/dist/chunk-S7RFIMA3.cjs.map +0 -1
  343. package/dist/chunk-TCPTBLDV.cjs.map +0 -1
  344. package/dist/chunk-TGUDT3GK.js.map +0 -1
  345. package/dist/chunk-TMRSI543.js.map +0 -1
  346. package/dist/chunk-TQLCIXCK.cjs.map +0 -1
  347. package/dist/chunk-UEHONGPZ.js.map +0 -1
  348. package/dist/chunk-UQB5OHMO.js.map +0 -1
  349. package/dist/chunk-UUY7EDVJ.cjs.map +0 -1
  350. package/dist/chunk-UXABXEWT.js.map +0 -1
  351. package/dist/chunk-V6466VMN.cjs.map +0 -1
  352. package/dist/chunk-WBL7LOIH.js.map +0 -1
  353. package/dist/chunk-WDBJVKSR.js +0 -18
  354. package/dist/chunk-WDBJVKSR.js.map +0 -1
  355. package/dist/chunk-WKNVNN2K.cjs.map +0 -1
  356. package/dist/chunk-WR3FML2W.cjs.map +0 -1
  357. package/dist/chunk-WZ73TWB2.cjs.map +0 -1
  358. package/dist/chunk-X3JG3IR6.js.map +0 -1
  359. package/dist/chunk-XT7RXXOE.js.map +0 -1
  360. package/dist/chunk-XUT2Z2L6.cjs +0 -119
  361. package/dist/chunk-XUT2Z2L6.cjs.map +0 -1
  362. package/dist/chunk-YZ2I7CDF.cjs.map +0 -1
  363. package/dist/chunk-ZSR5JSYZ.cjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,46 +1,46 @@
1
- export { Table, TablePro } from './chunk-JQZFOIX6.js';
2
- export { Segmented, Tabs } from './chunk-JSDQVVQB.js';
1
+ export { Table, TablePro } from './chunk-5VIOJW6M.js';
2
+ export { Segmented, Tabs } from './chunk-CVEGVB2C.js';
3
3
  export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, FONT_STACKS, ThemeProvider, applyTheme, normalizeAccentInput, resolveThemeMode, useTheme, useThemeOptional } from './chunk-W6I67HQQ.js';
4
- export { Timeline } from './chunk-S3NIRNWM.js';
5
- export { ToastContainer, toast } from './chunk-DLGFIRVW.js';
6
- export { Tooltip } from './chunk-HHPYY4LH.js';
7
- export { Link, Paragraph, Text, Title, Typography } from './chunk-LWN2PXW7.js';
8
- export { Pagination } from './chunk-RJNGXR5Y.js';
9
- export { Popover } from './chunk-UEHONGPZ.js';
10
- export { Progress, Ring } from './chunk-5PREWYTB.js';
11
- export { Select } from './chunk-XT7RXXOE.js';
12
- export { Badge, Tag } from './chunk-ILVNMES2.js';
4
+ export { Timeline } from './chunk-JS6U7UQS.js';
5
+ export { ToastContainer, toast } from './chunk-FSOJHDXH.js';
6
+ export { Tooltip } from './chunk-YRAQRENN.js';
7
+ export { Link, Paragraph, Text, Title, Typography } from './chunk-WLFMOWUY.js';
8
+ export { Pagination } from './chunk-DB5JMXOI.js';
9
+ export { Popover } from './chunk-XYGRVPUA.js';
10
+ export { Progress } from './chunk-E6K6GYUC.js';
11
+ export { Select } from './chunk-RHZOBQON.js';
12
+ export { Badge, Tag } from './chunk-D242UJZO.js';
13
13
  export { Slider } from './chunk-2TZ2R7L2.js';
14
- export { Splitter } from './chunk-47Z4NIU4.js';
15
- export { StatusBar, StatusBarItem } from './chunk-OWNVDXRQ.js';
16
- export { Switch } from './chunk-6GNFRP2H.js';
17
- export { Empty, Skeleton, Spinner } from './chunk-GR5STMOA.js';
18
- export { Form, FormItem, useForm } from './chunk-IHACXMOI.js';
19
- export { Image, ImageGrid } from './chunk-UXABXEWT.js';
20
- export { InputNumber } from './chunk-TGUDT3GK.js';
21
- export { List } from './chunk-WDBJVKSR.js';
22
- export { Modal } from './chunk-5SJJI3HL.js';
14
+ export { Splitter } from './chunk-ZHCQEJ2Z.js';
15
+ export { StatusBar, StatusBarItem } from './chunk-DCX36FYD.js';
16
+ export { Switch } from './chunk-SWB57EA2.js';
17
+ export { Empty, Skeleton, Spinner } from './chunk-A3IJM7IX.js';
18
+ export { Form, FormItem, useForm } from './chunk-EARCKSI7.js';
19
+ export { Image, ImageGrid } from './chunk-4JHFGSNH.js';
20
+ export { InputNumber } from './chunk-LSQD2GFA.js';
21
+ export { List } from './chunk-2LIX7ZHX.js';
22
+ export { Modal } from './chunk-PX5ABNKV.js';
23
23
  export { Card, Panel } from './chunk-4SCDDSXY.js';
24
- export { Cascader } from './chunk-P4XPESR2.js';
25
- export { Checkbox, RadioGroup } from './chunk-4ADDAZK3.js';
26
- export { ColorPicker } from './chunk-N5W6XJI2.js';
27
- export { CommandPalette } from './chunk-E7UQSFKF.js';
28
- export { ContextMenu } from './chunk-RFU5HN4E.js';
29
- export { Divider } from './chunk-5N7347MI.js';
30
- export { Drawer } from './chunk-AZRJZM7W.js';
31
- export { Accordion } from './chunk-WBL7LOIH.js';
32
- export { Alert } from './chunk-FLPHVK45.js';
33
- export { AppShell, Sidebar, TitleBar, WindowControls } from './chunk-UQB5OHMO.js';
34
- export { AutoComplete } from './chunk-3YYOYDKI.js';
24
+ export { Cascader } from './chunk-DUNQNSVK.js';
25
+ export { Checkbox, RadioGroup } from './chunk-ZN6VS6SO.js';
26
+ export { ColorPicker } from './chunk-X3QINITU.js';
27
+ export { CommandPalette } from './chunk-4XSP4HHZ.js';
28
+ export { ContextMenu } from './chunk-3LJO33HI.js';
29
+ export { Divider } from './chunk-QRSPBK3X.js';
30
+ export { Drawer } from './chunk-ZPDMAMWC.js';
31
+ export { Accordion } from './chunk-6CAEGNCK.js';
32
+ export { Alert } from './chunk-T7ZBJJC4.js';
33
+ export { AppShell, Sidebar, TitleBar, WindowControls } from './chunk-44AVDO3T.js';
34
+ export { AutoComplete } from './chunk-MXIWTYNC.js';
35
35
  import './chunk-ANAQER3T.js';
36
- export { Input, Textarea } from './chunk-GB5NAXBP.js';
37
- export { Avatar } from './chunk-NS3C2ZSE.js';
38
- export { Button, IconButton } from './chunk-JELHUUM5.js';
39
- export { Calendar } from './chunk-TMRSI543.js';
40
- export { ICON_NAMES, Icon } from './chunk-X3JG3IR6.js';
36
+ export { Input, Textarea } from './chunk-ZZXNHPF3.js';
37
+ export { Avatar } from './chunk-KWE2PXJQ.js';
38
+ export { Button, IconButton } from './chunk-6FSOJLY6.js';
39
+ export { Calendar } from './chunk-4DNHASZU.js';
40
+ export { ICON_NAMES, Icon } from './chunk-BSHHQOFY.js';
41
41
 
42
42
  // src/index.ts
43
- var VERSION = "0.5.1";
43
+ var VERSION = "0.6.0";
44
44
 
45
45
  export { VERSION };
46
46
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["/* lumina — public exports */\n\nexport * from \"./components/Icon\";\nexport * from \"./components/Button\";\nexport * from \"./components/Input\";\nexport * from \"./components/Switch\";\nexport * from \"./components/Checkbox\";\nexport * from \"./components/Slider\";\nexport * from \"./components/Select\";\nexport * from \"./components/Tabs\";\nexport * from \"./components/Accordion\";\nexport * from \"./components/Card\";\nexport * from \"./components/Tag\";\nexport * from \"./components/Avatar\";\nexport * from \"./components/Divider\";\nexport * from \"./components/Progress\";\nexport * from \"./components/Modal\";\nexport * from \"./components/Toast\";\nexport * from \"./components/Tooltip\";\nexport * from \"./components/Popover\";\nexport * from \"./components/Alert\";\nexport * from \"./components/Table\";\nexport * from \"./components/Pagination\";\nexport * from \"./components/Calendar\";\nexport * from \"./components/List\";\nexport * from \"./components/AppShell\";\nexport * from \"./components/StatusBar\";\nexport * from \"./components/Splitter\";\nexport * from \"./components/ContextMenu\";\nexport * from \"./components/CommandPalette\";\nexport * from \"./components/InputNumber\";\nexport * from \"./components/AutoComplete\";\nexport * from \"./components/Form\";\nexport * from \"./components/Empty\";\nexport * from \"./components/Image\";\nexport * from \"./components/Cascader\";\nexport * from \"./components/Typography\";\nexport * from \"./components/ColorPicker\";\nexport * from \"./components/Drawer\";\nexport * from \"./components/Theme\";\nexport * from \"./components/Timeline\";\n\n/** Package version — bumped by release scripts. */\nexport const VERSION = \"0.5.1\";\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["/* lumina — public exports */\n\nexport * from \"./components/Icon\";\nexport * from \"./components/Button\";\nexport * from \"./components/Input\";\nexport * from \"./components/Switch\";\nexport * from \"./components/Checkbox\";\nexport * from \"./components/Slider\";\nexport * from \"./components/Select\";\nexport * from \"./components/Tabs\";\nexport * from \"./components/Accordion\";\nexport * from \"./components/Card\";\nexport * from \"./components/Tag\";\nexport * from \"./components/Avatar\";\nexport * from \"./components/Divider\";\nexport * from \"./components/Progress\";\nexport * from \"./components/Modal\";\nexport * from \"./components/Toast\";\nexport * from \"./components/Tooltip\";\nexport * from \"./components/Popover\";\nexport * from \"./components/Alert\";\nexport * from \"./components/Table\";\nexport * from \"./components/Pagination\";\nexport * from \"./components/Calendar\";\nexport * from \"./components/List\";\nexport * from \"./components/AppShell\";\nexport * from \"./components/StatusBar\";\nexport * from \"./components/Splitter\";\nexport * from \"./components/ContextMenu\";\nexport * from \"./components/CommandPalette\";\nexport * from \"./components/InputNumber\";\nexport * from \"./components/AutoComplete\";\nexport * from \"./components/Form\";\nexport * from \"./components/Empty\";\nexport * from \"./components/Image\";\nexport * from \"./components/Cascader\";\nexport * from \"./components/Typography\";\nexport * from \"./components/ColorPicker\";\nexport * from \"./components/Drawer\";\nexport * from \"./components/Theme\";\nexport * from \"./components/Timeline\";\n\n/** Package version — bumped by release scripts. */\nexport const VERSION = \"0.6.0\";\n"]}
package/dist/styles.css CHANGED
@@ -711,11 +711,28 @@ input, textarea, select { font-family: inherit; color: inherit; }
711
711
  .slider.disabled .slider-mark { pointer-events: none; }
712
712
  /* ============ Progress ============ */
713
713
  .progress {
714
+ --progress-fill: var(--accent);
715
+ --progress-fill-glow: var(--accent-glow);
716
+ --progress-inset: 2px;
714
717
  width: 100%;
715
718
  display: flex;
716
719
  flex-direction: column;
717
720
  gap: 6px;
718
721
  }
722
+ .progress.sm { --progress-inset: 1px; }
723
+ .progress.lg { --progress-inset: 2px; }
724
+ .progress.success {
725
+ --progress-fill: var(--success);
726
+ --progress-fill-glow: color-mix(in oklch, var(--success) 35%, transparent);
727
+ }
728
+ .progress.warning {
729
+ --progress-fill: var(--warning);
730
+ --progress-fill-glow: color-mix(in oklch, var(--warning) 35%, transparent);
731
+ }
732
+ .progress.danger {
733
+ --progress-fill: var(--danger);
734
+ --progress-fill-glow: color-mix(in oklch, var(--danger) 35%, transparent);
735
+ }
719
736
  .progress-label {
720
737
  display: flex;
721
738
  justify-content: space-between;
@@ -727,7 +744,13 @@ input, textarea, select { font-family: inherit; color: inherit; }
727
744
  width: 100%;
728
745
  height: 10px;
729
746
  border-radius: 999px;
730
- background: var(--bg);
747
+ padding: var(--progress-inset);
748
+ box-sizing: border-box;
749
+ background: linear-gradient(
750
+ 180deg,
751
+ color-mix(in oklch, var(--bg) 88%, var(--shadow-light)),
752
+ color-mix(in oklch, var(--bg) 92%, var(--shadow-dark))
753
+ );
731
754
  box-shadow: var(--neu-in-sm);
732
755
  overflow: hidden;
733
756
  position: relative;
@@ -735,41 +758,36 @@ input, textarea, select { font-family: inherit; color: inherit; }
735
758
  .progress.sm .progress-track { height: 6px; }
736
759
  .progress.lg .progress-track { height: 14px; }
737
760
  .progress-bar {
738
- height: 100%;
739
- background: linear-gradient(90deg, color-mix(in oklch, var(--accent) 70%, white), var(--accent));
740
- border-radius: 999px;
741
- box-shadow: 0 0 12px var(--accent-glow);
742
- transition: width var(--dur-slow) var(--ease);
743
- }
744
- .progress.success .progress-bar { background: linear-gradient(90deg, color-mix(in oklch, var(--success) 70%, white), var(--success)); box-shadow: 0 0 10px color-mix(in oklch, var(--success) 35%, transparent); }
745
- .progress.warning .progress-bar { background: linear-gradient(90deg, color-mix(in oklch, var(--warning) 70%, white), var(--warning)); box-shadow: 0 0 10px color-mix(in oklch, var(--warning) 35%, transparent); }
746
- .progress.danger .progress-bar { background: linear-gradient(90deg, color-mix(in oklch, var(--danger) 70%, white), var(--danger)); box-shadow: 0 0 10px color-mix(in oklch, var(--danger) 35%, transparent); }
747
- .ring {
748
- --size: 72px;
749
- --val: 50;
750
- width: var(--size); height: var(--size);
751
- border-radius: 999px;
752
- background: conic-gradient(var(--accent) calc(var(--val) * 1%), var(--bg-sunken) 0);
753
- display: grid; place-items: center;
754
761
  position: relative;
755
- box-shadow: var(--neu-out-sm);
762
+ height: 100%;
763
+ border-radius: inherit;
764
+ background: linear-gradient(
765
+ 180deg,
766
+ color-mix(in oklch, var(--progress-fill) 68%, var(--shadow-light)) 0%,
767
+ var(--progress-fill) 55%,
768
+ color-mix(in oklch, var(--progress-fill) 84%, var(--shadow-dark)) 100%
769
+ );
770
+ box-shadow:
771
+ inset 1px 1px 2px color-mix(in oklch, var(--progress-fill) 18%, var(--shadow-dark)),
772
+ inset -1px -1px 2px color-mix(in oklch, var(--progress-fill) 14%, var(--shadow-light)),
773
+ 1px 1px 4px color-mix(in oklch, var(--progress-fill) 16%, var(--shadow-dark)),
774
+ -1px -1px 4px color-mix(in oklch, var(--progress-fill) 10%, var(--shadow-light)),
775
+ 0 0 10px var(--progress-fill-glow);
776
+ transition: width var(--dur-slow) var(--ease), box-shadow var(--dur) var(--ease);
777
+ overflow: hidden;
756
778
  }
757
- .ring.success { background: conic-gradient(var(--success) calc(var(--val) * 1%), var(--bg-sunken) 0); }
758
- .ring.warning { background: conic-gradient(var(--warning) calc(var(--val) * 1%), var(--bg-sunken) 0); }
759
- .ring.danger { background: conic-gradient(var(--danger) calc(var(--val) * 1%), var(--bg-sunken) 0); }
760
- .ring::before {
779
+ .progress-bar::before {
761
780
  content: "";
762
781
  position: absolute;
763
- inset: 8px;
764
- border-radius: 999px;
765
- background: var(--bg);
766
- box-shadow: var(--neu-in-sm);
767
- }
768
- .ring-label {
769
- position: relative;
770
- font-size: 13px;
771
- font-weight: 600;
772
- color: var(--accent-ink);
782
+ inset: 0;
783
+ border-radius: inherit;
784
+ background: linear-gradient(
785
+ 180deg,
786
+ color-mix(in oklch, var(--shadow-light) 72%, transparent) 0%,
787
+ color-mix(in oklch, var(--shadow-light) 28%, transparent) 38%,
788
+ transparent 70%
789
+ );
790
+ pointer-events: none;
773
791
  }
774
792
  /* ============ Tag & Badge ============ */
775
793
  .tag {
@@ -0,0 +1,36 @@
1
+ # AppShell 应用外壳
2
+
3
+ > 组合 TitleBar、Sidebar 与主内容区的 Electron 桌面布局容器。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { AppShell, TitleBar, Sidebar, StatusBar } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 完整工作台外壳
14
+
15
+ ```tsx
16
+ <AppShell
17
+ titleBar={<TitleBar title="Lumina Mail" platform="mac" />}
18
+ sidebar={<Sidebar items={items} activeKey={active} onSelect={setActive} />}
19
+ >
20
+ <main>...</main>
21
+ </AppShell>
22
+ ```
23
+
24
+ ## API
25
+
26
+ **AppShell**
27
+
28
+ | Prop | 类型 | 默认 | 说明 |
29
+ | --- | --- | --- | --- |
30
+ | titleBar | `ReactNode` | — | 顶部标题栏区域 |
31
+ | sidebar | `ReactNode` | — | 左侧导航区域 |
32
+ | children | `ReactNode` | — | 主内容区 |
33
+
34
+
35
+ ---
36
+ [← 回到索引](../llms.md)
@@ -1,11 +1,11 @@
1
1
  # Progress 进度
2
2
 
3
- > 条形进度 Progress 与环形进度 Ring。
3
+ > 条形进度 Progress。
4
4
 
5
5
  ## 导入
6
6
 
7
7
  ```tsx
8
- import { Progress, Ring } from "@fangxinyan/lumina";
8
+ import { Progress } from "@fangxinyan/lumina";
9
9
  ```
10
10
 
11
11
  ## 示例
@@ -16,19 +16,19 @@ import { Progress, Ring } from "@fangxinyan/lumina";
16
16
  <Progress value={v} label="下载中" showValue />
17
17
  ```
18
18
 
19
- ### 尺寸
19
+ ### 自定义颜色
20
20
 
21
21
  ```tsx
22
- <Progress size="sm" value={60} />
23
- <Progress value={60} />
24
- <Progress size="lg" value={60} />
22
+ <Progress value={66} color="oklch(72% 0.18 285)" label="品牌同步" showValue />
23
+ <Progress value={38} color="#22c1c3" label="音频缓冲" showValue />
25
24
  ```
26
25
 
27
- ### 环形进度
26
+ ### 尺寸
28
27
 
29
28
  ```tsx
30
- <Ring value={65} />
31
- <Ring value={90} tone="success" size={80}><strong>90%</strong></Ring>
29
+ <Progress size="sm" value={60} />
30
+ <Progress value={60} />
31
+ <Progress size="lg" value={60} />
32
32
  ```
33
33
 
34
34
  ## API
@@ -40,19 +40,11 @@ import { Progress, Ring } from "@fangxinyan/lumina";
40
40
  | value \* | `number` | — | 0–max 之间 |
41
41
  | max | `number` | `100` | 最大值 |
42
42
  | tone | `"accent" | "success" | "warning" | "danger"` | `"accent"` | 色调 |
43
+ | color | `string` | — | 自定义填充色,覆盖 tone |
43
44
  | size | `"sm" | "md" | "lg"` | `"md"` | 尺寸 |
44
45
  | label | `ReactNode` | — | 顶部文案 |
45
46
  | showValue | `boolean` | `false` | 显示百分比 |
46
47
 
47
48
 
48
- **Ring**
49
-
50
- | Prop | 类型 | 默认 | 说明 |
51
- | --- | --- | --- | --- |
52
- | value \* | `number` | — | 0–100 |
53
- | size | `number` | `72` | 直径 (px) |
54
- | tone | `"accent" | "success" | ...` | `"accent"` | 色调 |
55
-
56
-
57
49
  ---
58
50
  [← 回到索引](../llms.md)
package/docs/llms.md CHANGED
@@ -3,7 +3,7 @@
3
3
  > 拟态风格的 React 18 组件库,目标是 Electron 桌面应用。**写给 AI 编程助手**的按需文档 —— 每个组件单独一个 `.md`,避免一次性读取全部。示例源自 playground 的 demo,可直接复制运行。
4
4
 
5
5
  - **包名**: `@fangxinyan/lumina`
6
- - **版本**: `0.5.1`
6
+ - **版本**: `0.6.0`
7
7
  - **React 最低版本**: 18
8
8
  - **环境**: 带打包器的 React 工程(Vite / Next.js / Webpack / Remix / Electron + Vite 等)
9
9
  - **零运行时依赖**: 只依赖 `react` / `react-dom` (peer deps)
@@ -23,13 +23,14 @@
23
23
  `npm install @fangxinyan/lumina`
24
24
  2. **引入样式**(任一即可):
25
25
  ```tsx
26
- import "@fangxinyan/lumina/styles"; // 一次性引入全部组件样式
26
+ import "@fangxinyan/lumina/styles"; // 设计令牌 + 全局 reset + 全部组件样式
27
27
  ```
28
28
  或按组件单独引入(适合 tree-shake 到极限):
29
29
  ```tsx
30
- import "@fangxinyan/lumina/tokens"; // 设计令牌 + 全局 reset
31
- import { Button } from "@fangxinyan/lumina"; // 会自动带上 Button.css
30
+ import "@fangxinyan/lumina/tokens"; // 仅设计令牌,不含全局 reset
31
+ import { Button } from "@fangxinyan/lumina"; // 会自动带上 Button.css / shared.css
32
32
  ```
33
+ 如果你还需要 reset / scrollbar / focus-visible 基线样式,请改用 `@fangxinyan/lumina/styles`。
33
34
  3. **TypeScript**: 所有 `XxxProps` 接口都是 `export`,可直接 `import { Button, type ButtonProps } from "@fangxinyan/lumina";`
34
35
  4. **主题**: 用 `<ThemeProvider>` 包根;运行时可通过 `useTheme()` 改。六种强调色 (`rose / sky / coral / mint / violet / amber`) × 两种模式 (`light / dark` + `system`) × 三档密度 (`compact / comfortable / spacious`)。详见 [`llms/theme.md`](./llms/theme.md)。
35
36
  5. **图标**: 所有接受 `icon / leadingIcon / trailingIcon` 的 prop 用字符串 `IconName`。完整列表见 [`llms/icon.md`](./llms/icon.md)。
@@ -71,7 +72,7 @@
71
72
  - [Avatar 头像](./llms/avatar.md) — 用图像、首字母代表用户或事物。
72
73
  - [Image 图片](./llms/image.md) — 凹陷外框包裹的图片容器,带预览、错误占位。
73
74
  - [Divider 分隔符](./llms/divider.md) — 对内容进行分割。
74
- - [Progress 进度](./llms/progress.md) — 条形进度 Progress 与环形进度 Ring。
75
+ - [Progress 进度](./llms/progress.md) — 条形进度 Progress。
75
76
  - [Timeline 时间线](./llms/timeline.md) — 垂直时间线,支持等待状态、自定义圆点、交替布局
76
77
  - [List 列表](./llms/list.md) — 承载一组结构化的同质化数据。
77
78
  - [Table 表格](./llms/table.md) — 结构化数据展示。
@@ -99,6 +100,7 @@
99
100
  - [WindowControls 窗口控件](./llms/windowcontrols.md) — 独立的窗口控件按钮组。
100
101
  - [Sidebar 侧边栏](./llms/sidebar.md) — 应用主导航,沿屏幕左侧垂直排列。
101
102
  - [StatusBar 状态栏](./llms/statusbar.md) — 窗口底部状态栏,展示分支、编码、行列等应用元信息。
103
+ - [AppShell 应用外壳](./llms/appshell.md) — 组合 TitleBar、Sidebar 与主内容区的 Electron 桌面布局容器。
102
104
  - [Splitter 可拖拽分栏](./llms/splitter.md) — 两栏之间可拖拽的分隔条,支持横向、纵向与嵌套。
103
105
  - [ContextMenu 右键菜单](./llms/contextmenu.md) — 桌面应用风格的右键上下文菜单。
104
106
  - [CommandPalette ⌘K 命令面板](./llms/commandpalette.md) — 全局命令搜索与执行入口。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fangxinyan/lumina",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "description": "Lumina — Neumorphic component library for Electron & React apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -17,6 +17,81 @@
17
17
  "./llms.md": "./docs/llms.md",
18
18
  "./llms/*": "./docs/llms/*",
19
19
  "./package.json": "./package.json",
20
+ "./IconButton": {
21
+ "types": "./dist/Button.d.ts",
22
+ "import": "./dist/Button.js",
23
+ "require": "./dist/Button.cjs"
24
+ },
25
+ "./Textarea": {
26
+ "types": "./dist/Input.d.ts",
27
+ "import": "./dist/Input.js",
28
+ "require": "./dist/Input.cjs"
29
+ },
30
+ "./RadioGroup": {
31
+ "types": "./dist/Checkbox.d.ts",
32
+ "import": "./dist/Checkbox.js",
33
+ "require": "./dist/Checkbox.cjs"
34
+ },
35
+ "./Segmented": {
36
+ "types": "./dist/Tabs.d.ts",
37
+ "import": "./dist/Tabs.js",
38
+ "require": "./dist/Tabs.cjs"
39
+ },
40
+ "./Badge": {
41
+ "types": "./dist/Tag.d.ts",
42
+ "import": "./dist/Tag.js",
43
+ "require": "./dist/Tag.cjs"
44
+ },
45
+ "./Panel": {
46
+ "types": "./dist/Card.d.ts",
47
+ "import": "./dist/Card.js",
48
+ "require": "./dist/Card.cjs"
49
+ },
50
+ "./Spinner": {
51
+ "types": "./dist/Empty.d.ts",
52
+ "import": "./dist/Empty.js",
53
+ "require": "./dist/Empty.cjs"
54
+ },
55
+ "./Skeleton": {
56
+ "types": "./dist/Empty.d.ts",
57
+ "import": "./dist/Empty.js",
58
+ "require": "./dist/Empty.cjs"
59
+ },
60
+ "./TablePro": {
61
+ "types": "./dist/Table.d.ts",
62
+ "import": "./dist/Table.js",
63
+ "require": "./dist/Table.cjs"
64
+ },
65
+ "./TitleBar": {
66
+ "types": "./dist/AppShell.d.ts",
67
+ "import": "./dist/AppShell.js",
68
+ "require": "./dist/AppShell.cjs"
69
+ },
70
+ "./WindowControls": {
71
+ "types": "./dist/AppShell.d.ts",
72
+ "import": "./dist/AppShell.js",
73
+ "require": "./dist/AppShell.cjs"
74
+ },
75
+ "./Sidebar": {
76
+ "types": "./dist/AppShell.d.ts",
77
+ "import": "./dist/AppShell.js",
78
+ "require": "./dist/AppShell.cjs"
79
+ },
80
+ "./StatusBarItem": {
81
+ "types": "./dist/StatusBar.d.ts",
82
+ "import": "./dist/StatusBar.js",
83
+ "require": "./dist/StatusBar.cjs"
84
+ },
85
+ "./ToastContainer": {
86
+ "types": "./dist/Toast.d.ts",
87
+ "import": "./dist/Toast.js",
88
+ "require": "./dist/Toast.cjs"
89
+ },
90
+ "./toast": {
91
+ "types": "./dist/Toast.d.ts",
92
+ "import": "./dist/Toast.js",
93
+ "require": "./dist/Toast.cjs"
94
+ },
20
95
  "./*": {
21
96
  "types": "./dist/*.d.ts",
22
97
  "import": "./dist/*.js",
@@ -1,63 +0,0 @@
1
- /* ============ Progress ============ */
2
- .progress {
3
- width: 100%;
4
- display: flex;
5
- flex-direction: column;
6
- gap: 6px;
7
- }
8
- .progress-label {
9
- display: flex;
10
- justify-content: space-between;
11
- font-size: 12px;
12
- color: var(--fg-muted);
13
- }
14
- .progress-label .v { font-family: var(--font-mono); }
15
- .progress-track {
16
- width: 100%;
17
- height: 10px;
18
- border-radius: 999px;
19
- background: var(--bg);
20
- box-shadow: var(--neu-in-sm);
21
- overflow: hidden;
22
- position: relative;
23
- }
24
- .progress.sm .progress-track { height: 6px; }
25
- .progress.lg .progress-track { height: 14px; }
26
- .progress-bar {
27
- height: 100%;
28
- background: linear-gradient(90deg, color-mix(in oklch, var(--accent) 70%, white), var(--accent));
29
- border-radius: 999px;
30
- box-shadow: 0 0 12px var(--accent-glow);
31
- transition: width var(--dur-slow) var(--ease);
32
- }
33
- .progress.success .progress-bar { background: linear-gradient(90deg, color-mix(in oklch, var(--success) 70%, white), var(--success)); box-shadow: 0 0 10px color-mix(in oklch, var(--success) 35%, transparent); }
34
- .progress.warning .progress-bar { background: linear-gradient(90deg, color-mix(in oklch, var(--warning) 70%, white), var(--warning)); box-shadow: 0 0 10px color-mix(in oklch, var(--warning) 35%, transparent); }
35
- .progress.danger .progress-bar { background: linear-gradient(90deg, color-mix(in oklch, var(--danger) 70%, white), var(--danger)); box-shadow: 0 0 10px color-mix(in oklch, var(--danger) 35%, transparent); }
36
-
37
- .ring {
38
- --size: 72px;
39
- --val: 50;
40
- width: var(--size); height: var(--size);
41
- border-radius: 999px;
42
- background: conic-gradient(var(--accent) calc(var(--val) * 1%), var(--bg-sunken) 0);
43
- display: grid; place-items: center;
44
- position: relative;
45
- box-shadow: var(--neu-out-sm);
46
- }
47
- .ring.success { background: conic-gradient(var(--success) calc(var(--val) * 1%), var(--bg-sunken) 0); }
48
- .ring.warning { background: conic-gradient(var(--warning) calc(var(--val) * 1%), var(--bg-sunken) 0); }
49
- .ring.danger { background: conic-gradient(var(--danger) calc(var(--val) * 1%), var(--bg-sunken) 0); }
50
- .ring::before {
51
- content: "";
52
- position: absolute;
53
- inset: 8px;
54
- border-radius: 999px;
55
- background: var(--bg);
56
- box-shadow: var(--neu-in-sm);
57
- }
58
- .ring-label {
59
- position: relative;
60
- font-size: 13px;
61
- font-weight: 600;
62
- color: var(--accent-ink);
63
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/InputNumber/InputNumber.tsx"],"names":["React","jsxs","jsx","Icon","Fragment","Input"],"mappings":"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","file":"chunk-2D5VCIJZ.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./InputNumber.css\";\nimport * as React from \"react\";\nimport { Input } from \"../Input\";\nimport { Icon } from \"../Icon\";\n\nexport interface InputNumberProps {\n /** Controlled value. `null` = empty field. */\n value?: number | null;\n /** Uncontrolled initial value. */\n defaultValue?: number;\n /** Fires with the parsed number (or `null` when the input is emptied). */\n onChange?: (value: number | null) => void;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n /** Fires when the Enter key is pressed (matches antd's `onPressEnter`). */\n onPressEnter?: React.KeyboardEventHandler<HTMLInputElement>;\n min?: number;\n max?: number;\n /** Step for up/down buttons + arrow keys. Default 1. */\n step?: number;\n /** Number of decimal places to round to. Omit for no rounding. */\n precision?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n /** Show the up/down stepper buttons. Default true. */\n controls?: boolean;\n invalid?: boolean;\n className?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n autoFocus?: boolean;\n id?: string;\n name?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * `InputNumber` — numeric input with up/down stepper buttons. Arrow-key\n * and mouse-wheel increments; min / max clamping; optional rounding.\n *\n * @example\n * ```tsx\n * <InputNumber min={0} max={100} step={1} defaultValue={10} onChange={...} />\n * ```\n */\nexport const InputNumber = React.forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onBlur,\n onFocus,\n onPressEnter,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n size = \"md\",\n disabled,\n readOnly,\n placeholder,\n controls = true,\n invalid,\n className = \"\",\n prefix,\n suffix,\n autoFocus,\n id,\n name,\n },\n ref\n ) => {\n const [inner, setInner] = React.useState<number | null>(defaultValue ?? null);\n const isControlled = value !== undefined;\n const current = isControlled ? (value as number | null) : inner;\n\n const [text, setText] = React.useState<string>(current == null ? \"\" : String(current));\n\n React.useEffect(() => {\n if (isControlled) setText(value == null ? \"\" : String(value));\n }, [value, isControlled]);\n\n const clamp = React.useCallback(\n (n: number) => Math.max(min, Math.min(max, n)),\n [min, max]\n );\n const round = React.useCallback(\n (n: number) => (precision != null ? Number(n.toFixed(precision)) : n),\n [precision]\n );\n\n const commit = (next: number | null) => {\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleInput = (v: string) => {\n setText(v);\n if (v === \"\" || v === \"-\") {\n commit(null);\n return;\n }\n const parsed = Number(v);\n if (!Number.isNaN(parsed)) commit(clamp(round(parsed)));\n };\n\n const handleBlur: React.FocusEventHandler<HTMLInputElement> = (e) => {\n // Normalize displayed text to the committed numeric value.\n if (current == null) setText(\"\");\n else setText(String(current));\n onBlur?.(e);\n };\n\n const increment = (delta: number) => {\n if (disabled || readOnly) return;\n const base = current ?? 0;\n const next = clamp(round(base + delta));\n if (!isControlled) setInner(next);\n setText(String(next));\n onChange?.(next);\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === \"ArrowUp\") { e.preventDefault(); increment(step); }\n if (e.key === \"ArrowDown\") { e.preventDefault(); increment(-step); }\n if (e.key === \"Enter\") onPressEnter?.(e);\n };\n\n const upDisabled = disabled || readOnly || (current != null && current >= max);\n const downDisabled = disabled || readOnly || (current != null && current <= min);\n\n const stepperSuffix = controls ? (\n <span className=\"ipn-steppers\" aria-hidden>\n <button\n type=\"button\"\n className=\"ipn-step up\"\n tabIndex={-1}\n disabled={upDisabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => increment(step)}\n >\n <Icon name=\"chevUp\" size={10} stroke={2.5} />\n </button>\n <button\n type=\"button\"\n className=\"ipn-step down\"\n tabIndex={-1}\n disabled={downDisabled}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => increment(-step)}\n >\n <Icon name=\"chevDown\" size={10} stroke={2.5} />\n </button>\n </span>\n ) : null;\n\n const finalSuffix =\n stepperSuffix && suffix\n ? (<>{suffix}{stepperSuffix}</>)\n : stepperSuffix ?? suffix;\n\n return (\n <Input\n ref={ref}\n id={id}\n name={name}\n size={size}\n value={text}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n invalid={invalid}\n autoFocus={autoFocus}\n prefix={prefix}\n suffix={finalSuffix}\n className={`input-number ${className}`}\n inputMode=\"decimal\"\n onChange={handleInput}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n onFocus={onFocus}\n />\n );\n }\n);\nInputNumber.displayName = \"InputNumber\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ColorPicker/ColorPicker.tsx"],"names":["React","jsxs","jsx","useFloating","createPortal"],"mappings":"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","file":"chunk-2OBQOEFD.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./ColorPicker.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\n/* ============================================================================\n * Color conversion helpers\n * ========================================================================== */\n\ntype RGB = [number, number, number];\ntype HSV = [number, number, number];\n\nconst clamp = (n: number, lo: number, hi: number) => Math.min(Math.max(n, lo), hi);\n\nfunction normalizeHex(input: string): string | null {\n const s = input.trim().replace(/^#/, \"\");\n if (!/^([\\da-f]{3}|[\\da-f]{6})$/i.test(s)) return null;\n const full = s.length === 3 ? s.split(\"\").map((c) => c + c).join(\"\") : s;\n return \"#\" + full.toLowerCase();\n}\n\nfunction hexToRgb(hex: string): RGB | null {\n const n = normalizeHex(hex);\n if (!n) return null;\n const int = parseInt(n.slice(1), 16);\n return [(int >> 16) & 255, (int >> 8) & 255, int & 255];\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const to = (x: number) => {\n const h = clamp(Math.round(x), 0, 255).toString(16);\n return h.length === 1 ? \"0\" + h : h;\n };\n return \"#\" + to(r) + to(g) + to(b);\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): HSV {\n const R = r / 255;\n const G = g / 255;\n const B = b / 255;\n const max = Math.max(R, G, B);\n const min = Math.min(R, G, B);\n const d = max - min;\n let h = 0;\n if (d !== 0) {\n if (max === R) h = ((G - B) / d) % 6;\n else if (max === G) h = (B - R) / d + 2;\n else h = (R - G) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n const s = max === 0 ? 0 : (d / max) * 100;\n const v = max * 100;\n return [h, s, v];\n}\n\nfunction hsvToRgb(h: number, s: number, v: number): RGB {\n const S = s / 100;\n const V = v / 100;\n const c = V * S;\n const hh = (h % 360) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n const m = V - c;\n let r = 0;\n let g = 0;\n let b = 0;\n if (hh < 1) [r, g, b] = [c, x, 0];\n else if (hh < 2) [r, g, b] = [x, c, 0];\n else if (hh < 3) [r, g, b] = [0, c, x];\n else if (hh < 4) [r, g, b] = [0, x, c];\n else if (hh < 5) [r, g, b] = [x, 0, c];\n else [r, g, b] = [c, 0, x];\n return [(r + m) * 255, (g + m) * 255, (b + m) * 255];\n}\n\nconst hexToHsv = (hex: string): HSV | null => {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsv(...rgb) : null;\n};\n\nconst hsvToHex = (h: number, s: number, v: number): string => rgbToHex(...hsvToRgb(h, s, v));\n\n/* ============================================================================\n * Public API\n * ========================================================================== */\n\nexport interface ColorPickerProps {\n /** Controlled hex color (e.g. \"#ff6b6b\"). */\n value?: string;\n /** Initial hex when uncontrolled. */\n defaultValue?: string;\n /** Fires on every pixel of drag / input edit. */\n onChange?: (hex: string) => void;\n /** Fires once when a drag / input / preset commit finishes. */\n onChangeComplete?: (hex: string) => void;\n /** Disable the trigger. */\n disabled?: boolean;\n /** Size of the swatch trigger. */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Where the panel appears relative to the trigger. */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Hex preset chips below the panel. */\n presets?: string[];\n /** Show the current hex next to the swatch. */\n showText?: boolean;\n /** Custom trigger; defaults to a swatch chip. */\n children?: React.ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. */\n defaultOpen?: boolean;\n /** Called when open state changes. */\n onOpenChange?: (open: boolean) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/* ============================================================================\n * Internals\n * ========================================================================== */\n\nconst DEFAULT_PRESETS = [\n \"#ff6b6b\",\n \"#ffa94d\",\n \"#ffd43b\",\n \"#51cf66\",\n \"#22b8cf\",\n \"#339af0\",\n \"#845ef7\",\n \"#f06595\",\n \"#868e96\",\n \"#212529\",\n];\n\ninterface BoardProps {\n hue: number;\n s: number;\n v: number;\n onChange: (s: number, v: number, done: boolean) => void;\n}\n\nconst SaturationBoard: React.FC<BoardProps> = ({ hue, s, v, onChange }) => {\n const ref = React.useRef<HTMLDivElement>(null);\n\n const compute = (clientX: number, clientY: number) => {\n const el = ref.current;\n if (!el) return { s, v };\n const rect = el.getBoundingClientRect();\n const ns = clamp(((clientX - rect.left) / rect.width) * 100, 0, 100);\n const nv = clamp(100 - ((clientY - rect.top) / rect.height) * 100, 0, 100);\n return { s: ns, v: nv };\n };\n\n const handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n const el = ref.current;\n if (!el) return;\n el.setPointerCapture(e.pointerId);\n const first = compute(e.clientX, e.clientY);\n onChange(first.s, first.v, false);\n\n const move = (ev: PointerEvent) => {\n const c = compute(ev.clientX, ev.clientY);\n onChange(c.s, c.v, false);\n };\n const up = (ev: PointerEvent) => {\n const c = compute(ev.clientX, ev.clientY);\n onChange(c.s, c.v, true);\n el.releasePointerCapture(e.pointerId);\n el.removeEventListener(\"pointermove\", move);\n el.removeEventListener(\"pointerup\", up);\n el.removeEventListener(\"pointercancel\", up);\n };\n el.addEventListener(\"pointermove\", move);\n el.addEventListener(\"pointerup\", up);\n el.addEventListener(\"pointercancel\", up);\n };\n\n return (\n <div\n ref={ref}\n className=\"cp-board\"\n style={{ background: `hsl(${hue}, 100%, 50%)` }}\n onPointerDown={handlePointerDown}\n >\n <div className=\"cp-board-white\" />\n <div className=\"cp-board-black\" />\n <div\n className=\"cp-board-thumb\"\n style={{ left: `${s}%`, top: `${100 - v}%` }}\n />\n </div>\n );\n};\n\ninterface HueProps {\n hue: number;\n onChange: (h: number, done: boolean) => void;\n}\n\nconst HueSlider: React.FC<HueProps> = ({ hue, onChange }) => {\n const ref = React.useRef<HTMLDivElement>(null);\n\n const compute = (clientX: number) => {\n const el = ref.current;\n if (!el) return hue;\n const rect = el.getBoundingClientRect();\n return clamp(((clientX - rect.left) / rect.width) * 360, 0, 360);\n };\n\n const handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n const el = ref.current;\n if (!el) return;\n el.setPointerCapture(e.pointerId);\n onChange(compute(e.clientX), false);\n const move = (ev: PointerEvent) => onChange(compute(ev.clientX), false);\n const up = (ev: PointerEvent) => {\n onChange(compute(ev.clientX), true);\n el.releasePointerCapture(e.pointerId);\n el.removeEventListener(\"pointermove\", move);\n el.removeEventListener(\"pointerup\", up);\n el.removeEventListener(\"pointercancel\", up);\n };\n el.addEventListener(\"pointermove\", move);\n el.addEventListener(\"pointerup\", up);\n el.addEventListener(\"pointercancel\", up);\n };\n\n return (\n <div ref={ref} className=\"cp-hue\" onPointerDown={handlePointerDown}>\n <div\n className=\"cp-hue-thumb\"\n style={{ left: `${(hue / 360) * 100}%` }}\n />\n </div>\n );\n};\n\n/* ============================================================================\n * Main component\n * ========================================================================== */\n\n/**\n * `ColorPicker` — neumorphic color picker with HSV panel, hue slider,\n * hex input and optional preset palette.\n *\n * @example\n * <ColorPicker defaultValue=\"#845ef7\" onChange={setColor} />\n */\nexport const ColorPicker = React.forwardRef<HTMLButtonElement, ColorPickerProps>(\n (props, ref) => {\n const {\n value,\n defaultValue = \"#845ef7\",\n onChange,\n onChangeComplete,\n disabled,\n size = \"md\",\n placement = \"bottom\",\n presets = DEFAULT_PRESETS,\n showText = false,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className = \"\",\n style,\n } = props;\n\n const isControlled = value != null;\n const [internal, setInternal] = React.useState(\n normalizeHex(defaultValue) ?? \"#845ef7\"\n );\n const current = normalizeHex((isControlled ? value : internal) ?? \"\") ?? \"#845ef7\";\n\n const isOpenControlled = openProp != null;\n const [openState, setOpenState] = React.useState(defaultOpen);\n const open = isOpenControlled ? !!openProp : openState;\n const setOpen = (next: boolean) => {\n if (!isOpenControlled) setOpenState(next);\n onOpenChange?.(next);\n };\n\n const [inputText, setInputText] = React.useState(current);\n React.useEffect(() => setInputText(current), [current]);\n\n const { triggerRef, floatingStyle } = useFloating<HTMLButtonElement>({\n open,\n placement,\n panelWidth: 256,\n panelHeight: 300,\n });\n const panelRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref, () => triggerRef.current as HTMLButtonElement);\n\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const commit = (hex: string, done: boolean) => {\n const n = normalizeHex(hex);\n if (!n) return;\n if (!isControlled) setInternal(n);\n onChange?.(n);\n if (done) onChangeComplete?.(n);\n };\n\n const hsv = hexToHsv(current) ?? [0, 100, 100];\n const [h, s, v] = hsv;\n\n const handleBoard = (ns: number, nv: number, done: boolean) => {\n commit(hsvToHex(h, ns, nv), done);\n };\n const handleHue = (nh: number, done: boolean) => {\n commit(hsvToHex(nh, s, v), done);\n };\n\n const handleInputBlur = () => {\n const n = normalizeHex(inputText);\n if (n) commit(n, true);\n else setInputText(current);\n };\n\n const handleInputKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n (e.target as HTMLInputElement).blur();\n }\n };\n\n return (\n <div\n className={`cp ${placement} ${open ? \"open\" : \"\"} ${className}`}\n style={style}\n >\n {children ? (\n <button\n type=\"button\"\n ref={triggerRef}\n className=\"cp-custom-trigger\"\n disabled={disabled}\n onClick={() => !disabled && setOpen(!open)}\n >\n {children}\n </button>\n ) : (\n <button\n type=\"button\"\n ref={triggerRef}\n className={`cp-trigger ${size}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen(!open)}\n aria-label={`选择颜色 (当前 ${current})`}\n >\n <span className=\"cp-swatch\" style={{ background: current }} />\n {showText && <span className=\"cp-text\">{current}</span>}\n </button>\n )}\n\n {open && !disabled && typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"cp-panel\"\n role=\"dialog\"\n style={floatingStyle}\n >\n <SaturationBoard hue={h} s={s} v={v} onChange={handleBoard} />\n <HueSlider hue={h} onChange={handleHue} />\n <div className=\"cp-row\">\n <span className=\"cp-swatch sm\" style={{ background: current }} />\n <input\n className=\"cp-input\"\n value={inputText}\n onChange={(e) => setInputText(e.target.value)}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKey}\n spellCheck={false}\n />\n </div>\n {presets.length > 0 && (\n <div className=\"cp-presets\">\n {presets.map((p) => (\n <button\n key={p}\n type=\"button\"\n className={`cp-preset ${current === normalizeHex(p) ? \"active\" : \"\"}`}\n style={{ background: p }}\n onClick={() => commit(p, true)}\n aria-label={p}\n />\n ))}\n </div>\n )}\n </div>,\n document.body\n )}\n </div>\n );\n }\n);\nColorPicker.displayName = \"ColorPicker\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-33TIL25B.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./AppShell.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface WindowControlsProps {\n /** macOS traffic lights or Windows-style buttons. */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n className?: string;\n}\n\n/**\n * `WindowControls` — standalone window control buttons.\n * Mac: traffic lights (close/min/max). Windows: rectangular controls.\n */\nexport const WindowControls: React.FC<WindowControlsProps> = ({\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n className = \"\",\n}) => {\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n if (platform === \"windows\") {\n return (\n <div className={`win-controls windows ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 5h8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <rect x=\"1\" y=\"1\" width=\"8\" height=\"8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 1l8 8M9 1l-8 8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n </div>\n );\n }\n return (\n <div className={`win-controls mac ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\" />\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\" />\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\" />\n </div>\n );\n};\n\nexport interface TitleBarProps {\n title?: React.ReactNode;\n /** Platform appearance — affects button placement. Default \"mac\". */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n /** Extra content in the center. */\n center?: React.ReactNode;\n /** Extra content on the trailing side. */\n actions?: React.ReactNode;\n /** Make the whole bar draggable (Electron `-webkit-app-region: drag`). */\n draggable?: boolean;\n className?: string;\n}\n\n/**\n * `TitleBar` — Electron-style window chrome. Attach at the top of your app.\n * Buttons are non-draggable regions so clicks register correctly.\n */\nexport const TitleBar: React.FC<TitleBarProps> = ({\n title,\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n center,\n actions,\n draggable = true,\n className = \"\",\n}) => {\n const dragStyle = draggable ? ({ WebkitAppRegion: \"drag\" } as React.CSSProperties) : undefined;\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n\n return (\n <div className={`titlebar ${platform} ${className}`} style={dragStyle}>\n {platform === \"mac\" && (\n <WindowControls platform=\"mac\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n <div className=\"titlebar-title\">{title}</div>\n {center && (\n <div className=\"titlebar-center\" style={noDragStyle}>\n {center}\n </div>\n )}\n {actions && (\n <div className=\"titlebar-actions\" style={noDragStyle}>\n {actions}\n </div>\n )}\n {platform === \"windows\" && (\n <WindowControls platform=\"windows\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n </div>\n );\n};\n\nexport interface SidebarItem {\n key: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items: SidebarItem[];\n activeKey?: string;\n onSelect?: (key: string) => void;\n /** Collapsed: icons only. */\n collapsed?: boolean;\n /** Header slot (e.g. workspace switcher). */\n header?: React.ReactNode;\n /** Footer slot (e.g. user card). */\n footer?: React.ReactNode;\n className?: string;\n}\n\n/** `Sidebar` — navigation rail. Pair with `AppShell`. */\nexport const Sidebar: React.FC<SidebarProps> = ({\n items,\n activeKey,\n onSelect,\n collapsed,\n header,\n footer,\n className = \"\",\n}) => (\n <aside className={`sidebar ${collapsed ? \"collapsed\" : \"\"} ${className}`}>\n {header && <div className=\"sidebar-header\">{header}</div>}\n <nav className=\"sidebar-nav\">\n {items.map((it) => (\n <button\n type=\"button\"\n key={it.key}\n className={`sidebar-item ${activeKey === it.key ? \"active\" : \"\"}`}\n onClick={() => onSelect?.(it.key)}\n >\n {it.icon && <span className=\"sidebar-icon\">{it.icon}</span>}\n {!collapsed && <span className=\"sidebar-label\">{it.label}</span>}\n {!collapsed && it.badge && <span className=\"sidebar-badge\">{it.badge}</span>}\n </button>\n ))}\n </nav>\n {footer && <div className=\"sidebar-footer\">{footer}</div>}\n </aside>\n);\n\nexport interface AppShellProps {\n sidebar?: React.ReactNode;\n titleBar?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `AppShell` — 3-zone Electron layout: title bar across top, sidebar on left, content fills rest.\n */\nexport const AppShell: React.FC<AppShellProps> = ({ sidebar, titleBar, children, className = \"\" }) => (\n <div className={`app-shell ${className}`}>\n {titleBar}\n <div className=\"app-shell-body\">\n {sidebar}\n <main className=\"app-shell-main\">{children}</main>\n </div>\n </div>\n);\n"]}