@fangxinyan/lumina 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
  2. package/dist/Accordion.cjs +2 -2
  3. package/dist/Accordion.js +1 -1
  4. package/dist/Alert.cjs +2 -2
  5. package/dist/Alert.js +1 -1
  6. package/dist/AppShell.cjs +5 -5
  7. package/dist/AppShell.js +1 -1
  8. package/dist/Avatar.cjs +2 -2
  9. package/dist/Avatar.js +1 -1
  10. package/dist/Button.cjs +3 -3
  11. package/dist/Button.js +1 -1
  12. package/dist/Calendar.cjs +2 -2
  13. package/dist/Calendar.js +1 -1
  14. package/dist/Card.cjs +3 -3
  15. package/dist/Card.js +1 -1
  16. package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
  17. package/dist/Cascader.cjs +2 -2
  18. package/dist/Cascader.js +1 -1
  19. package/dist/Checkbox.cjs +3 -3
  20. package/dist/Checkbox.js +1 -1
  21. package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
  22. package/dist/ColorPicker.cjs +2 -2
  23. package/dist/ColorPicker.js +1 -1
  24. package/dist/CommandPalette-T45DBMPY.css +139 -0
  25. package/dist/CommandPalette.cjs +14 -0
  26. package/dist/CommandPalette.cjs.map +1 -0
  27. package/dist/CommandPalette.d.cts +65 -0
  28. package/dist/CommandPalette.d.ts +65 -0
  29. package/dist/CommandPalette.js +5 -0
  30. package/dist/CommandPalette.js.map +1 -0
  31. package/dist/ContextMenu-FKW6CQW4.css +76 -0
  32. package/dist/ContextMenu.cjs +12 -0
  33. package/dist/ContextMenu.cjs.map +1 -0
  34. package/dist/ContextMenu.d.cts +50 -0
  35. package/dist/ContextMenu.d.ts +50 -0
  36. package/dist/ContextMenu.js +3 -0
  37. package/dist/ContextMenu.js.map +1 -0
  38. package/dist/Divider.cjs +2 -2
  39. package/dist/Divider.js +1 -1
  40. package/dist/Drawer.cjs +2 -2
  41. package/dist/Drawer.js +1 -1
  42. package/dist/Empty.cjs +4 -4
  43. package/dist/Empty.js +1 -1
  44. package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
  45. package/dist/Image.cjs +3 -3
  46. package/dist/Image.js +1 -1
  47. package/dist/Input.cjs +3 -3
  48. package/dist/Input.js +1 -1
  49. package/dist/List.cjs +2 -2
  50. package/dist/List.js +1 -1
  51. package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
  52. package/dist/Modal.cjs +3 -3
  53. package/dist/Modal.js +2 -2
  54. package/dist/Pagination.cjs +4 -4
  55. package/dist/Pagination.js +3 -3
  56. package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
  57. package/dist/Popover.cjs +2 -2
  58. package/dist/Popover.js +1 -1
  59. package/dist/Progress.cjs +3 -3
  60. package/dist/Progress.js +1 -1
  61. package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
  62. package/dist/Select.cjs +3 -3
  63. package/dist/Select.js +2 -2
  64. package/dist/Slider.cjs +2 -2
  65. package/dist/Slider.js +1 -1
  66. package/dist/Splitter-DHNOY4NC.css +66 -0
  67. package/dist/Splitter.cjs +12 -0
  68. package/dist/Splitter.cjs.map +1 -0
  69. package/dist/Splitter.d.cts +44 -0
  70. package/dist/Splitter.d.ts +44 -0
  71. package/dist/Splitter.js +3 -0
  72. package/dist/Splitter.js.map +1 -0
  73. package/dist/StatusBar-CDS2GPSI.css +58 -0
  74. package/dist/StatusBar.cjs +16 -0
  75. package/dist/StatusBar.cjs.map +1 -0
  76. package/dist/StatusBar.d.cts +39 -0
  77. package/dist/StatusBar.d.ts +39 -0
  78. package/dist/StatusBar.js +3 -0
  79. package/dist/StatusBar.js.map +1 -0
  80. package/dist/Switch.cjs +2 -2
  81. package/dist/Switch.js +1 -1
  82. package/dist/{Table-YKVM42SW.css → Table-2LPTOUIR.css} +1 -1
  83. package/dist/Table.cjs +7 -7
  84. package/dist/Table.js +5 -5
  85. package/dist/Tabs.cjs +3 -3
  86. package/dist/Tabs.js +1 -1
  87. package/dist/Tag.cjs +3 -3
  88. package/dist/Tag.js +1 -1
  89. package/dist/Theme.cjs +10 -10
  90. package/dist/Theme.js +1 -1
  91. package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
  92. package/dist/Toast.cjs +3 -3
  93. package/dist/Toast.js +1 -1
  94. package/dist/Tooltip.cjs +2 -2
  95. package/dist/Tooltip.js +1 -1
  96. package/dist/Typography.cjs +6 -6
  97. package/dist/Typography.js +1 -1
  98. package/dist/{chunk-5WF6M47X.cjs → chunk-24FAK7QU.cjs} +3 -3
  99. package/dist/{chunk-5WF6M47X.cjs.map → chunk-24FAK7QU.cjs.map} +1 -1
  100. package/dist/{chunk-AJZKESHB.js → chunk-276NALYW.js} +3 -3
  101. package/dist/{chunk-AJZKESHB.js.map → chunk-276NALYW.js.map} +1 -1
  102. package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
  103. package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
  104. package/dist/{chunk-RDLPX7RK.cjs → chunk-3HNRKO3M.cjs} +31 -5
  105. package/dist/chunk-3HNRKO3M.cjs.map +1 -0
  106. package/dist/{chunk-GZGZR4FT.js → chunk-3LI6QH2Q.js} +3 -3
  107. package/dist/{chunk-GZGZR4FT.js.map → chunk-3LI6QH2Q.js.map} +1 -1
  108. package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
  109. package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
  110. package/dist/chunk-47Z4NIU4.js +118 -0
  111. package/dist/chunk-47Z4NIU4.js.map +1 -0
  112. package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
  113. package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
  114. package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
  115. package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
  116. package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
  117. package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
  118. package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
  119. package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
  120. package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
  121. package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
  122. package/dist/{chunk-77BVQNAQ.js → chunk-5UOBYRYJ.js} +3 -3
  123. package/dist/{chunk-77BVQNAQ.js.map → chunk-5UOBYRYJ.js.map} +1 -1
  124. package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
  125. package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
  126. package/dist/{chunk-TZSWDH5T.cjs → chunk-7JYI5THC.cjs} +3 -3
  127. package/dist/{chunk-TZSWDH5T.cjs.map → chunk-7JYI5THC.cjs.map} +1 -1
  128. package/dist/chunk-7T2SLRNL.cjs +140 -0
  129. package/dist/chunk-7T2SLRNL.cjs.map +1 -0
  130. package/dist/chunk-7YQWG7HR.cjs +45 -0
  131. package/dist/chunk-7YQWG7HR.cjs.map +1 -0
  132. package/dist/chunk-AGN3JSUH.cjs +209 -0
  133. package/dist/chunk-AGN3JSUH.cjs.map +1 -0
  134. package/dist/{chunk-CCBHZYE6.cjs → chunk-AR4M7QGF.cjs} +7 -7
  135. package/dist/{chunk-CCBHZYE6.cjs.map → chunk-AR4M7QGF.cjs.map} +1 -1
  136. package/dist/{chunk-K7PVJLW4.cjs → chunk-AWLBLRQX.cjs} +5 -5
  137. package/dist/{chunk-K7PVJLW4.cjs.map → chunk-AWLBLRQX.cjs.map} +1 -1
  138. package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
  139. package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
  140. package/dist/{chunk-Z5X5AMLA.cjs → chunk-CALRTZZ7.cjs} +3 -3
  141. package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-CALRTZZ7.cjs.map} +1 -1
  142. package/dist/{chunk-H6FCIJOP.js → chunk-DBJIK4JE.js} +3 -3
  143. package/dist/{chunk-H6FCIJOP.js.map → chunk-DBJIK4JE.js.map} +1 -1
  144. package/dist/{chunk-QESLHLTG.cjs → chunk-EHO2JH2L.cjs} +4 -4
  145. package/dist/{chunk-QESLHLTG.cjs.map → chunk-EHO2JH2L.cjs.map} +1 -1
  146. package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
  147. package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
  148. package/dist/{chunk-AEJJGUEN.cjs → chunk-GOIQR4OH.cjs} +3 -3
  149. package/dist/{chunk-AEJJGUEN.cjs.map → chunk-GOIQR4OH.cjs.map} +1 -1
  150. package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
  151. package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
  152. package/dist/{chunk-URF6RBW6.cjs → chunk-HNVRMOL3.cjs} +3 -3
  153. package/dist/{chunk-URF6RBW6.cjs.map → chunk-HNVRMOL3.cjs.map} +1 -1
  154. package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
  155. package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
  156. package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
  157. package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
  158. package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
  159. package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
  160. package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
  161. package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
  162. package/dist/{chunk-C5TGQ7CV.cjs → chunk-MFWOBALK.cjs} +3 -3
  163. package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-MFWOBALK.cjs.map} +1 -1
  164. package/dist/{chunk-LDENBYRC.cjs → chunk-MKR4X57L.cjs} +3 -3
  165. package/dist/{chunk-LDENBYRC.cjs.map → chunk-MKR4X57L.cjs.map} +1 -1
  166. package/dist/{chunk-LSLYY5FN.js → chunk-MTCLJHXU.js} +5 -5
  167. package/dist/{chunk-LSLYY5FN.js.map → chunk-MTCLJHXU.js.map} +1 -1
  168. package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
  169. package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
  170. package/dist/{chunk-OEHCA5IV.js → chunk-NGQDVJH3.js} +4 -4
  171. package/dist/{chunk-OEHCA5IV.js.map → chunk-NGQDVJH3.js.map} +1 -1
  172. package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
  173. package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
  174. package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
  175. package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
  176. package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
  177. package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
  178. package/dist/chunk-OWNVDXRQ.js +42 -0
  179. package/dist/chunk-OWNVDXRQ.js.map +1 -0
  180. package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
  181. package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
  182. package/dist/{chunk-M6CGYGEO.js → chunk-Q2EXOT4B.js} +3 -3
  183. package/dist/{chunk-M6CGYGEO.js.map → chunk-Q2EXOT4B.js.map} +1 -1
  184. package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
  185. package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
  186. package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
  187. package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
  188. package/dist/chunk-RFU5HN4E.js +149 -0
  189. package/dist/chunk-RFU5HN4E.js.map +1 -0
  190. package/dist/{chunk-IKI5CS4L.cjs → chunk-RIDCBNCM.cjs} +4 -4
  191. package/dist/{chunk-IKI5CS4L.cjs.map → chunk-RIDCBNCM.cjs.map} +1 -1
  192. package/dist/{chunk-OPTTHURA.cjs → chunk-RSZNFKCQ.cjs} +3 -3
  193. package/dist/{chunk-OPTTHURA.cjs.map → chunk-RSZNFKCQ.cjs.map} +1 -1
  194. package/dist/{chunk-EPFYIR63.cjs → chunk-RVSWH4RH.cjs} +7 -7
  195. package/dist/{chunk-EPFYIR63.cjs.map → chunk-RVSWH4RH.cjs.map} +1 -1
  196. package/dist/{chunk-TWBJCFEJ.cjs → chunk-SVVB6POY.cjs} +4 -4
  197. package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-SVVB6POY.cjs.map} +1 -1
  198. package/dist/{chunk-QPZZNSRB.js → chunk-TMZVX6NO.js} +4 -4
  199. package/dist/{chunk-QPZZNSRB.js.map → chunk-TMZVX6NO.js.map} +1 -1
  200. package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
  201. package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
  202. package/dist/{chunk-GIVMKGZN.js → chunk-TY5EAKEI.js} +3 -3
  203. package/dist/{chunk-GIVMKGZN.js.map → chunk-TY5EAKEI.js.map} +1 -1
  204. package/dist/{chunk-4MR4GVTD.js → chunk-U4K7HOMW.js} +31 -5
  205. package/dist/chunk-U4K7HOMW.js.map +1 -0
  206. package/dist/{chunk-IWVKITPN.js → chunk-U5BZ7E3F.js} +3 -3
  207. package/dist/{chunk-IWVKITPN.js.map → chunk-U5BZ7E3F.js.map} +1 -1
  208. package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
  209. package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
  210. package/dist/{chunk-ZVCMXDTP.js → chunk-URLSZPS5.js} +5 -5
  211. package/dist/{chunk-ZVCMXDTP.js.map → chunk-URLSZPS5.js.map} +1 -1
  212. package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
  213. package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
  214. package/dist/{chunk-NSUD5B22.js → chunk-WBMF7WM3.js} +3 -3
  215. package/dist/{chunk-NSUD5B22.js.map → chunk-WBMF7WM3.js.map} +1 -1
  216. package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
  217. package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
  218. package/dist/{chunk-TYQ5CN2C.js → chunk-WQFC5EMC.js} +4 -4
  219. package/dist/{chunk-TYQ5CN2C.js.map → chunk-WQFC5EMC.js.map} +1 -1
  220. package/dist/{chunk-SBMOIE5C.cjs → chunk-WREHBIJ5.cjs} +10 -10
  221. package/dist/{chunk-SBMOIE5C.cjs.map → chunk-WREHBIJ5.cjs.map} +1 -1
  222. package/dist/chunk-WZ73TWB2.cjs +174 -0
  223. package/dist/chunk-WZ73TWB2.cjs.map +1 -0
  224. package/dist/chunk-XDFZRV3V.js +184 -0
  225. package/dist/chunk-XDFZRV3V.js.map +1 -0
  226. package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
  227. package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
  228. package/dist/{chunk-E6R63QOL.js → chunk-XZ22B3NW.js} +6 -6
  229. package/dist/{chunk-E6R63QOL.js.map → chunk-XZ22B3NW.js.map} +1 -1
  230. package/dist/{chunk-K5MHL732.js → chunk-YXKJOPYT.js} +4 -4
  231. package/dist/{chunk-K5MHL732.js.map → chunk-YXKJOPYT.js.map} +1 -1
  232. package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
  233. package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
  234. package/dist/index.cjs +142 -118
  235. package/dist/index.cjs.map +1 -1
  236. package/dist/index.d.cts +5 -1
  237. package/dist/index.d.ts +5 -1
  238. package/dist/index.js +35 -31
  239. package/dist/index.js.map +1 -1
  240. package/dist/styles.css +25 -18
  241. package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
  242. package/dist/tokens.css +17 -9
  243. package/docs/llms/commandpalette.md +58 -0
  244. package/docs/llms/contextmenu.md +55 -0
  245. package/docs/llms/splitter.md +63 -0
  246. package/docs/llms/statusbar.md +53 -0
  247. package/docs/llms.md +5 -1
  248. package/package.json +1 -1
  249. package/dist/chunk-4MR4GVTD.js.map +0 -1
  250. package/dist/chunk-RDLPX7RK.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Divider/Divider.tsx"],"names":["jsx"],"mappings":";;;;;;;;AAoBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,SAAA,GAAY,YAAA;AAAA,EACZ,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,SAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA,IAAU,QAAA;AAAA,IACV,MAAA,IAAU,QAAA;AAAA,IACV,KAAA,IAAS,SAAA,KAAc,YAAA,IAAgB,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,IAC5D;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,EAAA,uBACEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAK,MAAK,WAAA,EAAa,GAAG,IAAA,EACvC,QAAA,EAAA,KAAA,oBAASA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,iBAAM,CAAA,EACnD,CAAA;AAEJ","file":"chunk-AXMEZGEG.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Divider.css\";\nimport * as React from \"react\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"horizontal\" | \"vertical\";\n label?: React.ReactNode;\n /** Use recessed groove styling. */\n sunken?: boolean;\n /** Render as dashed lines instead of solid. */\n dashed?: boolean;\n /**\n * Label position for horizontal dividers. Defaults to `\"center\"`.\n * Ignored when there is no `label`.\n */\n orientation?: \"left\" | \"center\" | \"right\";\n}\n\n/** `Divider` — visual separator, horizontal or vertical. */\nexport const Divider: React.FC<DividerProps> = ({\n direction = \"horizontal\",\n label,\n sunken,\n dashed,\n orientation = \"center\",\n className = \"\",\n ...rest\n}) => {\n const cls = [\n \"divider\",\n direction,\n sunken && \"sunken\",\n dashed && \"dashed\",\n label && direction === \"horizontal\" && `orient-${orientation}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div className={cls} role=\"separator\" {...rest}>\n {label && <span className=\"divider-label\">{label}</span>}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Divider/Divider.tsx"],"names":["jsx"],"mappings":";;;;;;;;AAoBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,SAAA,GAAY,YAAA;AAAA,EACZ,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,SAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA,IAAU,QAAA;AAAA,IACV,MAAA,IAAU,QAAA;AAAA,IACV,KAAA,IAAS,SAAA,KAAc,YAAA,IAAgB,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,IAC5D;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,EAAA,uBACEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAK,MAAK,WAAA,EAAa,GAAG,IAAA,EACvC,QAAA,EAAA,KAAA,oBAASA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,iBAAM,CAAA,EACnD,CAAA;AAEJ","file":"chunk-IZDJCEMF.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Divider.css\";\nimport * as React from \"react\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"horizontal\" | \"vertical\";\n label?: React.ReactNode;\n /** Use recessed groove styling. */\n sunken?: boolean;\n /** Render as dashed lines instead of solid. */\n dashed?: boolean;\n /**\n * Label position for horizontal dividers. Defaults to `\"center\"`.\n * Ignored when there is no `label`.\n */\n orientation?: \"left\" | \"center\" | \"right\";\n}\n\n/** `Divider` — visual separator, horizontal or vertical. */\nexport const Divider: React.FC<DividerProps> = ({\n direction = \"horizontal\",\n label,\n sunken,\n dashed,\n orientation = \"center\",\n className = \"\",\n ...rest\n}) => {\n const cls = [\n \"divider\",\n direction,\n sunken && \"sunken\",\n dashed && \"dashed\",\n label && direction === \"horizontal\" && `orient-${orientation}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div className={cls} role=\"separator\" {...rest}>\n {label && <span className=\"divider-label\">{label}</span>}\n </div>\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import './tokens-HWQ7KWPG.css';
1
+ import './tokens-BIIUTPKN.css';
2
2
  import './shared-NJHRNLRH.css';
3
3
  import './Tabs-RHK6XAFF.css';
4
4
  import * as React from 'react';
@@ -68,5 +68,5 @@ function Segmented({
68
68
  }
69
69
 
70
70
  export { Segmented, Tabs };
71
- //# sourceMappingURL=chunk-V34OPWKZ.js.map
72
- //# sourceMappingURL=chunk-V34OPWKZ.js.map
71
+ //# sourceMappingURL=chunk-JSDQVVQB.js.map
72
+ //# sourceMappingURL=chunk-JSDQVVQB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"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","file":"chunk-V34OPWKZ.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tabs.css\";\nimport * as React from \"react\";\n\nexport interface TabItem {\n key: string;\n label: React.ReactNode;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (key: string) => void;\n variant?: \"line\" | \"pill\" | \"segmented\";\n /** Center-align the tab bar horizontally. */\n centered?: boolean;\n className?: string;\n}\n\n/** `Tabs` — switchable sections. */\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant = \"line\",\n centered,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultActiveKey ?? items[0]?.key);\n const isControlled = activeKey !== undefined;\n const current = isControlled ? activeKey! : inner;\n\n const select = (k: string) => {\n if (!isControlled) setInner(k);\n onChange?.(k);\n };\n\n const active = items.find((i) => i.key === current);\n\n return (\n <div className={`tabs ${variant} ${centered ? \"centered\" : \"\"} ${className}`}>\n <div className=\"tabs-nav\" role=\"tablist\">\n {items.map((it) => (\n <button\n key={it.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={current === it.key}\n disabled={it.disabled}\n className={`tab ${current === it.key ? \"active\" : \"\"}`}\n onClick={() => select(it.key)}\n >\n {it.label}\n </button>\n ))}\n </div>\n {active?.content !== undefined && <div className=\"tabs-content\">{active.content}</div>}\n </div>\n );\n};\n\nexport interface SegmentedProps<T extends string = string> {\n options: { value: T; label: React.ReactNode; disabled?: boolean }[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\n/** `Segmented` — exclusive choice chip row. */\nexport function Segmented<T extends string = string>({\n options,\n value,\n defaultValue,\n onChange,\n size = \"md\",\n className = \"\",\n}: SegmentedProps<T>) {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue ?? options[0]?.value);\n const isControlled = value !== undefined;\n const v = isControlled ? value : inner;\n const pick = (next: T) => {\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n return (\n <div className={`segmented ${size} ${className}`}>\n {options.map((o) => (\n <button\n key={String(o.value)}\n type=\"button\"\n disabled={o.disabled}\n className={`seg ${v === o.value ? \"active\" : \"\"}`}\n onClick={() => pick(o.value)}\n >\n {o.label}\n </button>\n ))}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"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","file":"chunk-JSDQVVQB.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tabs.css\";\nimport * as React from \"react\";\n\nexport interface TabItem {\n key: string;\n label: React.ReactNode;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (key: string) => void;\n variant?: \"line\" | \"pill\" | \"segmented\";\n /** Center-align the tab bar horizontally. */\n centered?: boolean;\n className?: string;\n}\n\n/** `Tabs` — switchable sections. */\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant = \"line\",\n centered,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultActiveKey ?? items[0]?.key);\n const isControlled = activeKey !== undefined;\n const current = isControlled ? activeKey! : inner;\n\n const select = (k: string) => {\n if (!isControlled) setInner(k);\n onChange?.(k);\n };\n\n const active = items.find((i) => i.key === current);\n\n return (\n <div className={`tabs ${variant} ${centered ? \"centered\" : \"\"} ${className}`}>\n <div className=\"tabs-nav\" role=\"tablist\">\n {items.map((it) => (\n <button\n key={it.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={current === it.key}\n disabled={it.disabled}\n className={`tab ${current === it.key ? \"active\" : \"\"}`}\n onClick={() => select(it.key)}\n >\n {it.label}\n </button>\n ))}\n </div>\n {active?.content !== undefined && <div className=\"tabs-content\">{active.content}</div>}\n </div>\n );\n};\n\nexport interface SegmentedProps<T extends string = string> {\n options: { value: T; label: React.ReactNode; disabled?: boolean }[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\n/** `Segmented` — exclusive choice chip row. */\nexport function Segmented<T extends string = string>({\n options,\n value,\n defaultValue,\n onChange,\n size = \"md\",\n className = \"\",\n}: SegmentedProps<T>) {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue ?? options[0]?.value);\n const isControlled = value !== undefined;\n const v = isControlled ? value : inner;\n const pick = (next: T) => {\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n return (\n <div className={`segmented ${size} ${className}`}>\n {options.map((o) => (\n <button\n key={String(o.value)}\n type=\"button\"\n disabled={o.disabled}\n className={`seg ${v === o.value ? \"active\" : \"\"}`}\n onClick={() => pick(o.value)}\n >\n {o.label}\n </button>\n ))}\n </div>\n );\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkRZ2E3XEU_cjs = require('./chunk-RZ2E3XEU.cjs');
4
- require('./tokens-HWQ7KWPG.css');
4
+ require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./ColorPicker-GP7AQYUU.css');
6
+ require('./ColorPicker-SDDQGHCM.css');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -353,5 +353,5 @@ var ColorPicker = React__namespace.forwardRef(
353
353
  ColorPicker.displayName = "ColorPicker";
354
354
 
355
355
  exports.ColorPicker = ColorPicker;
356
- //# sourceMappingURL=chunk-QTGDYQOT.cjs.map
357
- //# sourceMappingURL=chunk-QTGDYQOT.cjs.map
356
+ //# sourceMappingURL=chunk-LLNEDEST.cjs.map
357
+ //# sourceMappingURL=chunk-LLNEDEST.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ColorPicker/ColorPicker.tsx"],"names":["React","jsxs","jsx","useFloating","createPortal"],"mappings":"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","file":"chunk-QTGDYQOT.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
+ {"version":3,"sources":["../src/components/ColorPicker/ColorPicker.tsx"],"names":["React","jsxs","jsx","useFloating","createPortal"],"mappings":"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","file":"chunk-LLNEDEST.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,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
4
- require('./tokens-HWQ7KWPG.css');
4
+ require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Checkbox-SKJATVSN.css');
7
7
  var React = require('react');
@@ -110,5 +110,5 @@ function RadioGroup({
110
110
 
111
111
  exports.Checkbox = Checkbox;
112
112
  exports.RadioGroup = RadioGroup;
113
- //# sourceMappingURL=chunk-C5TGQ7CV.cjs.map
114
- //# sourceMappingURL=chunk-C5TGQ7CV.cjs.map
113
+ //# sourceMappingURL=chunk-MFWOBALK.cjs.map
114
+ //# sourceMappingURL=chunk-MFWOBALK.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-C5TGQ7CV.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Checkbox.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\n/** `Checkbox` — binary choice, supports indeterminate state. */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked,\n defaultChecked,\n indeterminate,\n onChange,\n disabled,\n label,\n className = \"\",\n id,\n}) => {\n const [inner, setInner] = React.useState(defaultChecked ?? false);\n const isControlled = checked !== undefined;\n const value = isControlled ? checked : inner;\n\n const toggle = () => {\n if (disabled) return;\n const next = !value;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const cls = [\n \"checkbox\",\n value && \"checked\",\n indeterminate && \"indeterminate\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? \"mixed\" : value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"checkbox-box\"\n >\n {indeterminate ? <Icon name=\"minus\" size={11} /> : value ? <Icon name=\"check\" size={11} /> : null}\n </button>\n {label && <span className=\"checkbox-label\">{label}</span>}\n </label>\n );\n};\n\nexport interface RadioOption<T extends string | number = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps<T extends string | number = string> {\n options: RadioOption<T>[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n name?: string;\n direction?: \"vertical\" | \"horizontal\";\n className?: string;\n}\n\n/** `RadioGroup` — mutually exclusive options. */\nexport function RadioGroup<T extends string | number = string>({\n options,\n value,\n defaultValue,\n onChange,\n direction = \"vertical\",\n className = \"\",\n}: RadioGroupProps<T>) {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : inner;\n\n const pick = (v: T) => {\n if (!isControlled) setInner(v);\n onChange?.(v);\n };\n\n return (\n <div className={`radio-group ${direction} ${className}`}>\n {options.map((opt) => (\n <label\n key={String(opt.value)}\n className={`radio ${current === opt.value ? \"checked\" : \"\"} ${opt.disabled ? \"disabled\" : \"\"}`}\n >\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={current === opt.value}\n disabled={opt.disabled}\n onClick={() => pick(opt.value)}\n className=\"radio-dot\"\n />\n <span className=\"radio-label\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,WAAoC,CAAC;AAAA,EAChD,OAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,gBAAA,CAAA,QAAA,CAAS,kBAAkB,KAAK,CAAA;AAChE,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,eAAe,OAAA,GAAU,KAAA;AAEvC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,OAAO,CAAC,KAAA;AACd,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,IAAI,CAAA;AAChC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,UAAA;AAAA,IACA,KAAA,IAAS,SAAA;AAAA,IACT,aAAA,IAAiB,eAAA;AAAA,IACjB,QAAA,IAAY,UAAA;AAAA,IACZ;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACEC,eAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,GAAA,EAChB,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,UAAA;AAAA,QACL,cAAA,EAAc,gBAAgB,OAAA,GAAU,KAAA;AAAA,QACxC,QAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,EAAA;AAAA,QACA,SAAA,EAAU,cAAA;AAAA,QAET,QAAA,EAAA,aAAA,mBAAgBA,cAAA,CAACC,sBAAA,EAAA,EAAK,IAAA,EAAK,SAAQ,IAAA,EAAM,EAAA,EAAI,CAAA,GAAK,KAAA,kCAASA,sBAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,IAAA,EAAM,IAAI,CAAA,GAAK;AAAA;AAAA,KAC/F;AAAA,IACC,KAAA,oBAASD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAkB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACpD,CAAA;AAEJ;AAmBO,SAAS,UAAA,CAA+C;AAAA,EAC7D,OAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,UAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUF,0BAAwB,YAAY,CAAA;AACpE,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,eAAe,KAAA,GAAQ,KAAA;AAEvC,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAS;AACrB,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,CAAC,CAAA;AAC7B,IAAA,QAAA,GAAW,CAAC,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,uBACEE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAClD,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZD,eAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MAEC,SAAA,EAAW,CAAA,MAAA,EAAS,OAAA,KAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY,EAAE,CAAA,CAAA,EAAI,GAAA,CAAI,QAAA,GAAW,UAAA,GAAa,EAAE,CAAA,CAAA;AAAA,MAE5F,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,cAAA,EAAc,YAAY,GAAA,CAAI,KAAA;AAAA,YAC9B,UAAU,GAAA,CAAI,QAAA;AAAA,YACd,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAAA,YAC7B,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,cAAI,KAAA,EAAM;AAAA;AAAA,KAAA;AAAA,IAXpC,MAAA,CAAO,IAAI,KAAK;AAAA,GAaxB,CAAA,EACH,CAAA;AAEJ","file":"chunk-MFWOBALK.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Checkbox.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\n/** `Checkbox` — binary choice, supports indeterminate state. */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked,\n defaultChecked,\n indeterminate,\n onChange,\n disabled,\n label,\n className = \"\",\n id,\n}) => {\n const [inner, setInner] = React.useState(defaultChecked ?? false);\n const isControlled = checked !== undefined;\n const value = isControlled ? checked : inner;\n\n const toggle = () => {\n if (disabled) return;\n const next = !value;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const cls = [\n \"checkbox\",\n value && \"checked\",\n indeterminate && \"indeterminate\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? \"mixed\" : value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"checkbox-box\"\n >\n {indeterminate ? <Icon name=\"minus\" size={11} /> : value ? <Icon name=\"check\" size={11} /> : null}\n </button>\n {label && <span className=\"checkbox-label\">{label}</span>}\n </label>\n );\n};\n\nexport interface RadioOption<T extends string | number = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps<T extends string | number = string> {\n options: RadioOption<T>[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n name?: string;\n direction?: \"vertical\" | \"horizontal\";\n className?: string;\n}\n\n/** `RadioGroup` — mutually exclusive options. */\nexport function RadioGroup<T extends string | number = string>({\n options,\n value,\n defaultValue,\n onChange,\n direction = \"vertical\",\n className = \"\",\n}: RadioGroupProps<T>) {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : inner;\n\n const pick = (v: T) => {\n if (!isControlled) setInner(v);\n onChange?.(v);\n };\n\n return (\n <div className={`radio-group ${direction} ${className}`}>\n {options.map((opt) => (\n <label\n key={String(opt.value)}\n className={`radio ${current === opt.value ? \"checked\" : \"\"} ${opt.disabled ? \"disabled\" : \"\"}`}\n >\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={current === opt.value}\n disabled={opt.disabled}\n onClick={() => pick(opt.value)}\n className=\"radio-dot\"\n />\n <span className=\"radio-label\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
4
- require('./tokens-HWQ7KWPG.css');
4
+ require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Input-33CAH4O6.css');
7
7
  var React = require('react');
@@ -206,5 +206,5 @@ Textarea.displayName = "Textarea";
206
206
 
207
207
  exports.Input = Input;
208
208
  exports.Textarea = Textarea;
209
- //# sourceMappingURL=chunk-LDENBYRC.cjs.map
210
- //# sourceMappingURL=chunk-LDENBYRC.cjs.map
209
+ //# sourceMappingURL=chunk-MKR4X57L.cjs.map
210
+ //# sourceMappingURL=chunk-MKR4X57L.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Input/Input.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-LDENBYRC.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Input.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\" | \"prefix\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n leadingIcon?: IconName;\n trailingIcon?: IconName;\n /** Click handler for the leading icon (stops propagation so the input isn't focused). */\n onLeadingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n /** Click handler for the trailing icon — e.g. password visibility toggle. */\n onTrailingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n invalid?: boolean;\n disabled?: boolean;\n /** Show a × button inside the input to clear the value when non-empty. */\n allowClear?: boolean;\n /** Max length — forwarded to the native input. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the input (or just \"N\" if no maxLength). */\n showCount?: boolean;\n /** Inline content rendered inside the input on the left (after leadingIcon if both present). */\n prefix?: React.ReactNode;\n /** Inline content rendered inside the input on the right (before trailingIcon if both present). */\n suffix?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `Input` — single-line text field with optional leading/trailing icons.\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n placeholder,\n leadingIcon,\n trailingIcon,\n onLeadingIconClick,\n onTrailingIconClick,\n size = \"md\",\n invalid,\n disabled,\n allowClear,\n maxLength,\n showCount,\n prefix,\n suffix,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n\n const wrapCls = [\n \"input-wrap\",\n size !== \"md\" && size,\n invalid && \"invalid\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleIconClick = (\n handler: ((e: React.MouseEvent<SVGSVGElement>) => void) | undefined\n ) =>\n handler\n ? (e: React.MouseEvent<SVGSVGElement>) => {\n e.stopPropagation();\n if (!disabled) handler(e);\n }\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLInputElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLInputElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange?.(\"\", synthetic);\n };\n\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const inputElement = (\n <div className={wrapCls}>\n {leadingIcon && (\n <Icon\n name={leadingIcon}\n size={14}\n className={`lead${onLeadingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onLeadingIconClick)}\n />\n )}\n {prefix && <span className=\"input-affix prefix\">{prefix}</span>}\n <input\n ref={ref}\n className=\"input\"\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength}\n {...rest}\n />\n {suffix && <span className=\"input-affix suffix\">{suffix}</span>}\n {showClear && (\n <span\n className=\"input-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n {trailingIcon && (\n <Icon\n name={trailingIcon}\n size={14}\n className={`trail${onTrailingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onTrailingIconClick)}\n />\n )}\n </div>\n );\n\n if (!showCount) return inputElement;\n\n return (\n <div className=\"input-shell\">\n {inputElement}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n invalid?: boolean;\n /** Show a × button in the top-right corner to clear the value. */\n allowClear?: boolean;\n /** Max length — forwarded to the native textarea. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the textarea. */\n showCount?: boolean;\n className?: string;\n}\n\n/**\n * `Textarea` — multi-line text input with the same neumorphic groove as `Input`.\n */\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n invalid,\n allowClear,\n maxLength,\n showCount,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n const disabled = rest.disabled;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLTextAreaElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLTextAreaElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLTextAreaElement>;\n onChange?.(\"\", synthetic);\n };\n\n const cls = [\"textarea\", invalid && \"invalid\", className].filter(Boolean).join(\" \");\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const field = (\n <div className=\"textarea-wrap\">\n <textarea\n ref={ref}\n className={cls}\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n maxLength={maxLength}\n {...rest}\n />\n {showClear && (\n <span\n className=\"textarea-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n </div>\n );\n\n if (!showCount) return field;\n\n return (\n <div className=\"input-shell\">\n {field}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n"]}
1
+ {"version":3,"sources":["../src/components/Input/Input.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-MKR4X57L.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Input.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\" | \"prefix\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n leadingIcon?: IconName;\n trailingIcon?: IconName;\n /** Click handler for the leading icon (stops propagation so the input isn't focused). */\n onLeadingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n /** Click handler for the trailing icon — e.g. password visibility toggle. */\n onTrailingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n invalid?: boolean;\n disabled?: boolean;\n /** Show a × button inside the input to clear the value when non-empty. */\n allowClear?: boolean;\n /** Max length — forwarded to the native input. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the input (or just \"N\" if no maxLength). */\n showCount?: boolean;\n /** Inline content rendered inside the input on the left (after leadingIcon if both present). */\n prefix?: React.ReactNode;\n /** Inline content rendered inside the input on the right (before trailingIcon if both present). */\n suffix?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `Input` — single-line text field with optional leading/trailing icons.\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n placeholder,\n leadingIcon,\n trailingIcon,\n onLeadingIconClick,\n onTrailingIconClick,\n size = \"md\",\n invalid,\n disabled,\n allowClear,\n maxLength,\n showCount,\n prefix,\n suffix,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n\n const wrapCls = [\n \"input-wrap\",\n size !== \"md\" && size,\n invalid && \"invalid\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleIconClick = (\n handler: ((e: React.MouseEvent<SVGSVGElement>) => void) | undefined\n ) =>\n handler\n ? (e: React.MouseEvent<SVGSVGElement>) => {\n e.stopPropagation();\n if (!disabled) handler(e);\n }\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLInputElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLInputElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange?.(\"\", synthetic);\n };\n\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const inputElement = (\n <div className={wrapCls}>\n {leadingIcon && (\n <Icon\n name={leadingIcon}\n size={14}\n className={`lead${onLeadingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onLeadingIconClick)}\n />\n )}\n {prefix && <span className=\"input-affix prefix\">{prefix}</span>}\n <input\n ref={ref}\n className=\"input\"\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength}\n {...rest}\n />\n {suffix && <span className=\"input-affix suffix\">{suffix}</span>}\n {showClear && (\n <span\n className=\"input-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n {trailingIcon && (\n <Icon\n name={trailingIcon}\n size={14}\n className={`trail${onTrailingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onTrailingIconClick)}\n />\n )}\n </div>\n );\n\n if (!showCount) return inputElement;\n\n return (\n <div className=\"input-shell\">\n {inputElement}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n invalid?: boolean;\n /** Show a × button in the top-right corner to clear the value. */\n allowClear?: boolean;\n /** Max length — forwarded to the native textarea. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the textarea. */\n showCount?: boolean;\n className?: string;\n}\n\n/**\n * `Textarea` — multi-line text input with the same neumorphic groove as `Input`.\n */\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n invalid,\n allowClear,\n maxLength,\n showCount,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n const disabled = rest.disabled;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLTextAreaElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLTextAreaElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLTextAreaElement>;\n onChange?.(\"\", synthetic);\n };\n\n const cls = [\"textarea\", invalid && \"invalid\", className].filter(Boolean).join(\" \");\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const field = (\n <div className=\"textarea-wrap\">\n <textarea\n ref={ref}\n className={cls}\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n maxLength={maxLength}\n {...rest}\n />\n {showClear && (\n <span\n className=\"textarea-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n </div>\n );\n\n if (!showCount) return field;\n\n return (\n <div className=\"input-shell\">\n {field}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n"]}
@@ -1,8 +1,8 @@
1
- import { Button } from './chunk-77BVQNAQ.js';
1
+ import { Button } from './chunk-5UOBYRYJ.js';
2
2
  import { Icon } from './chunk-GEYMWUW6.js';
3
- import './tokens-HWQ7KWPG.css';
3
+ import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
- import './Modal-N4YVLEWW.css';
5
+ import './Modal-XSDMU4XJ.css';
6
6
  import * as React from 'react';
7
7
  import ReactDOM from 'react-dom';
8
8
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -121,5 +121,5 @@ var Modal = ({
121
121
  };
122
122
 
123
123
  export { Modal };
124
- //# sourceMappingURL=chunk-LSLYY5FN.js.map
125
- //# sourceMappingURL=chunk-LSLYY5FN.js.map
124
+ //# sourceMappingURL=chunk-MTCLJHXU.js.map
125
+ //# sourceMappingURL=chunk-MTCLJHXU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-LSLYY5FN.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-MTCLJHXU.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('./tokens-HWQ7KWPG.css');
3
+ require('./tokens-BIIUTPKN.css');
4
4
  require('./shared-NJHRNLRH.css');
5
5
  require('./Card-RG7ECXL2.css');
6
6
  var React = require('react');
@@ -60,5 +60,5 @@ var Panel = ({
60
60
 
61
61
  exports.Card = Card;
62
62
  exports.Panel = Panel;
63
- //# sourceMappingURL=chunk-JKLQOB2F.cjs.map
64
- //# sourceMappingURL=chunk-JKLQOB2F.cjs.map
63
+ //# sourceMappingURL=chunk-MUFMJPRT.cjs.map
64
+ //# sourceMappingURL=chunk-MUFMJPRT.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,IAAA,GAAaA,gBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,OAAA,GAAU,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,SAAA,EAAW,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC7F,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,KAAY,IAAA,IAAQ,CAAA,IAAA,EAAO,OAAO,CAAA,CAAA;AAAA,MAClC,SAAA,IAAa,WAAA;AAAA,MACb;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,sCACG,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,GAAA,EAAM,GAAG,MAChC,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAYZ,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,qCACG,KAAA,EAAA,EAAI,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACtC,QAAA,EAAA;AAAA,EAAA,CAAA,KAAA,IAAS,OAAA,qBACTC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAASC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC3D,CAAA;AAAA,IACC,OAAA,oBAAWA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACtD,CAAA;AAAA,kBAEFA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS;AAAA,CAAA,EACxC","file":"chunk-JKLQOB2F.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Card.css\";\nimport * as React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual variant. `raised` protrudes; `sunken` recesses; `flat` is subtle. */\n variant?: \"raised\" | \"sunken\" | \"flat\";\n /** Inner padding. */\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n /** When true, the card raises and lifts on hover. */\n hoverable?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * `Card` — neumorphic surface container. Use to group related content.\n */\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ variant = \"raised\", padding = \"md\", hoverable, className = \"\", children, ...rest }, ref) => {\n const cls = [\n \"card\",\n variant,\n padding !== \"md\" && `pad-${padding}`,\n hoverable && \"hoverable\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div ref={ref} className={cls} {...rest}>\n {children}\n </div>\n );\n }\n);\nCard.displayName = \"Card\";\n\nexport interface PanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `Panel` — a titled `Card` with optional actions row.\n */\nexport const Panel: React.FC<PanelProps> = ({\n title,\n description,\n actions,\n children,\n className = \"\",\n ...rest\n}) => (\n <div className={`panel ${className}`} {...rest}>\n {(title || actions) && (\n <div className=\"panel-head\">\n <div className=\"panel-titles\">\n {title && <div className=\"panel-title\">{title}</div>}\n {description && <div className=\"panel-desc\">{description}</div>}\n </div>\n {actions && <div className=\"panel-actions\">{actions}</div>}\n </div>\n )}\n <div className=\"panel-body\">{children}</div>\n </div>\n);\n"]}
1
+ {"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,IAAA,GAAaA,gBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,OAAA,GAAU,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,SAAA,EAAW,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC7F,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,KAAY,IAAA,IAAQ,CAAA,IAAA,EAAO,OAAO,CAAA,CAAA;AAAA,MAClC,SAAA,IAAa,WAAA;AAAA,MACb;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,sCACG,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,GAAA,EAAM,GAAG,MAChC,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAYZ,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,qCACG,KAAA,EAAA,EAAI,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACtC,QAAA,EAAA;AAAA,EAAA,CAAA,KAAA,IAAS,OAAA,qBACTC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAASC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC3D,CAAA;AAAA,IACC,OAAA,oBAAWA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACtD,CAAA;AAAA,kBAEFA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS;AAAA,CAAA,EACxC","file":"chunk-MUFMJPRT.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Card.css\";\nimport * as React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual variant. `raised` protrudes; `sunken` recesses; `flat` is subtle. */\n variant?: \"raised\" | \"sunken\" | \"flat\";\n /** Inner padding. */\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n /** When true, the card raises and lifts on hover. */\n hoverable?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * `Card` — neumorphic surface container. Use to group related content.\n */\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ variant = \"raised\", padding = \"md\", hoverable, className = \"\", children, ...rest }, ref) => {\n const cls = [\n \"card\",\n variant,\n padding !== \"md\" && `pad-${padding}`,\n hoverable && \"hoverable\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div ref={ref} className={cls} {...rest}>\n {children}\n </div>\n );\n }\n);\nCard.displayName = \"Card\";\n\nexport interface PanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `Panel` — a titled `Card` with optional actions row.\n */\nexport const Panel: React.FC<PanelProps> = ({\n title,\n description,\n actions,\n children,\n className = \"\",\n ...rest\n}) => (\n <div className={`panel ${className}`} {...rest}>\n {(title || actions) && (\n <div className=\"panel-head\">\n <div className=\"panel-titles\">\n {title && <div className=\"panel-title\">{title}</div>}\n {description && <div className=\"panel-desc\">{description}</div>}\n </div>\n {actions && <div className=\"panel-actions\">{actions}</div>}\n </div>\n )}\n <div className=\"panel-body\">{children}</div>\n </div>\n);\n"]}
@@ -1,8 +1,8 @@
1
1
  import { useFloating } from './chunk-V2DIQ3RH.js';
2
2
  import { Icon } from './chunk-GEYMWUW6.js';
3
- import './tokens-HWQ7KWPG.css';
3
+ import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
- import './Cascader-DTRTTXC2.css';
5
+ import './Cascader-VSYEKQCG.css';
6
6
  import * as React from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -111,5 +111,5 @@ var Cascader = ({
111
111
  };
112
112
 
113
113
  export { Cascader };
114
- //# sourceMappingURL=chunk-OEHCA5IV.js.map
115
- //# sourceMappingURL=chunk-OEHCA5IV.js.map
114
+ //# sourceMappingURL=chunk-NGQDVJH3.js.map
115
+ //# sourceMappingURL=chunk-NGQDVJH3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Cascader/Cascader.tsx"],"names":[],"mappings":"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","file":"chunk-OEHCA5IV.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Cascader.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface CascaderOption {\n value: string;\n label: React.ReactNode;\n icon?: IconName;\n children?: CascaderOption[];\n disabled?: boolean;\n}\n\nexport interface CascaderProps {\n options: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (path: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** `Cascader` — multi-column hierarchical selector. */\nexport const Cascader: React.FC<CascaderProps> = ({\n options,\n value,\n defaultValue = [],\n onChange,\n placeholder = \"请选择\",\n disabled,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultValue);\n const isControlled = value !== undefined;\n const cur = isControlled ? value! : inner;\n const [open, setOpen] = React.useState(false);\n const [path, setPath] = React.useState<string[]>(cur);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef: ref, floatingStyle } = useFloating<HTMLDivElement>({\n open,\n placement: \"bottom\",\n panelWidth: 520,\n panelHeight: 260,\n });\n\n React.useEffect(() => {\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (ref.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (open) setPath(cur);\n }, [open, cur]);\n\n const columns: CascaderOption[][] = [options];\n let cursor: CascaderOption[] = options;\n for (const v of path) {\n const match: CascaderOption | undefined = cursor.find((o) => o.value === v);\n if (match && match.children) {\n cursor = match.children;\n columns.push(cursor);\n } else break;\n }\n\n const pick = (depth: number, val: string, hasChildren: boolean) => {\n const np = [...path.slice(0, depth), val];\n setPath(np);\n if (!hasChildren) {\n if (!isControlled) setInner(np);\n onChange?.(np);\n setOpen(false);\n }\n };\n\n const labels: React.ReactNode[] = [];\n let list: CascaderOption[] = options;\n for (const v of cur) {\n const m: CascaderOption | undefined = list.find((o) => o.value === v);\n if (!m) break;\n labels.push(m.label);\n if (!m.children) break;\n list = m.children;\n }\n\n return (\n <div ref={ref} className={`cascader ${open ? \"open\" : \"\"} ${className}`}>\n <button\n type=\"button\"\n className={`cascader-trigger ${labels.length === 0 ? \"placeholder\" : \"\"}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n >\n <span style={{ flex: 1 }}>\n {labels.length ? labels.map((l, i) => <span key={i}>{i > 0 && \" / \"}{l}</span>) : placeholder}\n </span>\n <span style={{ position: \"absolute\", right: 12, color: \"var(--fg-subtle)\" }}>\n <Icon name=\"chevDown\" size={14} />\n </span>\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div ref={panelRef} className=\"cascader-panel\" style={floatingStyle}>\n {columns.map((col, depth) => (\n <div key={depth} className=\"cascader-col\">\n {col.map((o) => {\n const isActive = path[depth] === o.value;\n const hasChildren = !!(o.children && o.children.length);\n return (\n <button\n key={o.value}\n type=\"button\"\n className={`cascader-item ${isActive ? \"active\" : \"\"}`}\n disabled={o.disabled}\n onClick={() => pick(depth, o.value, hasChildren)}\n >\n {o.icon && <Icon name={o.icon} size={13} />}\n <span>{o.label}</span>\n {hasChildren && (\n <span className=\"chev\">\n <Icon name=\"chevRight\" size={12} />\n </span>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>,\n document.body\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Cascader/Cascader.tsx"],"names":[],"mappings":"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","file":"chunk-NGQDVJH3.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Cascader.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface CascaderOption {\n value: string;\n label: React.ReactNode;\n icon?: IconName;\n children?: CascaderOption[];\n disabled?: boolean;\n}\n\nexport interface CascaderProps {\n options: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (path: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** `Cascader` — multi-column hierarchical selector. */\nexport const Cascader: React.FC<CascaderProps> = ({\n options,\n value,\n defaultValue = [],\n onChange,\n placeholder = \"请选择\",\n disabled,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultValue);\n const isControlled = value !== undefined;\n const cur = isControlled ? value! : inner;\n const [open, setOpen] = React.useState(false);\n const [path, setPath] = React.useState<string[]>(cur);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef: ref, floatingStyle } = useFloating<HTMLDivElement>({\n open,\n placement: \"bottom\",\n panelWidth: 520,\n panelHeight: 260,\n });\n\n React.useEffect(() => {\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (ref.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (open) setPath(cur);\n }, [open, cur]);\n\n const columns: CascaderOption[][] = [options];\n let cursor: CascaderOption[] = options;\n for (const v of path) {\n const match: CascaderOption | undefined = cursor.find((o) => o.value === v);\n if (match && match.children) {\n cursor = match.children;\n columns.push(cursor);\n } else break;\n }\n\n const pick = (depth: number, val: string, hasChildren: boolean) => {\n const np = [...path.slice(0, depth), val];\n setPath(np);\n if (!hasChildren) {\n if (!isControlled) setInner(np);\n onChange?.(np);\n setOpen(false);\n }\n };\n\n const labels: React.ReactNode[] = [];\n let list: CascaderOption[] = options;\n for (const v of cur) {\n const m: CascaderOption | undefined = list.find((o) => o.value === v);\n if (!m) break;\n labels.push(m.label);\n if (!m.children) break;\n list = m.children;\n }\n\n return (\n <div ref={ref} className={`cascader ${open ? \"open\" : \"\"} ${className}`}>\n <button\n type=\"button\"\n className={`cascader-trigger ${labels.length === 0 ? \"placeholder\" : \"\"}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n >\n <span style={{ flex: 1 }}>\n {labels.length ? labels.map((l, i) => <span key={i}>{i > 0 && \" / \"}{l}</span>) : placeholder}\n </span>\n <span style={{ position: \"absolute\", right: 12, color: \"var(--fg-subtle)\" }}>\n <Icon name=\"chevDown\" size={14} />\n </span>\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div ref={panelRef} className=\"cascader-panel\" style={floatingStyle}>\n {columns.map((col, depth) => (\n <div key={depth} className=\"cascader-col\">\n {col.map((o) => {\n const isActive = path[depth] === o.value;\n const hasChildren = !!(o.children && o.children.length);\n return (\n <button\n key={o.value}\n type=\"button\"\n className={`cascader-item ${isActive ? \"active\" : \"\"}`}\n disabled={o.disabled}\n onClick={() => pick(depth, o.value, hasChildren)}\n >\n {o.icon && <Icon name={o.icon} size={13} />}\n <span>{o.label}</span>\n {hasChildren && (\n <span className=\"chev\">\n <Icon name=\"chevRight\" size={12} />\n </span>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>,\n document.body\n )}\n </div>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('./tokens-HWQ7KWPG.css');
3
+ require('./tokens-BIIUTPKN.css');
4
4
  require('./shared-NJHRNLRH.css');
5
5
  require('./List-W5BW4D2P.css');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -16,5 +16,5 @@ var List = ({ items, dividers = true, className = "" }) => /* @__PURE__ */ jsxRu
16
16
  ] }, it.key)) });
17
17
 
18
18
  exports.List = List;
19
- //# sourceMappingURL=chunk-7H453VPW.cjs.map
20
- //# sourceMappingURL=chunk-7H453VPW.cjs.map
19
+ //# sourceMappingURL=chunk-NQQWCIE6.cjs.map
20
+ //# sourceMappingURL=chunk-NQQWCIE6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/List/List.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;;;;AAsBO,IAAM,OAA4B,CAAC,EAAE,OAAO,QAAA,GAAW,IAAA,EAAM,YAAY,EAAA,EAAG,qBACjFA,cAAA,CAAC,IAAA,EAAA,EAAG,WAAW,CAAA,KAAA,EAAQ,QAAA,GAAW,kBAAkB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,QAAQ,MAAA,EAAQ,CAAA,IACxG,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACVC,eAAA,CAAC,QAAgB,SAAA,EAAW,CAAA,UAAA,EAAa,GAAG,OAAA,GAAU,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,OAAA,EAAS,GAAG,OAAA,EACnF,QAAA,EAAA;AAAA,EAAA,EAAA,CAAG,0BAAUD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,aAAG,MAAA,EAAO,CAAA;AAAA,kBAC3DC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,EAAA,CAAG,yBAASD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,aAAG,KAAA,EAAM,CAAA;AAAA,IACvD,GAAG,WAAA,oBAAeA,cAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EAAkB,aAAG,WAAA,EAAY;AAAA,GAAA,EACrE,CAAA;AAAA,EACC,GAAG,OAAA,oBAAWA,cAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,aAAG,OAAA,EAAQ;AAAA,CAAA,EAAA,EANvD,EAAA,CAAG,GAOZ,CACD,CAAA,EACH","file":"chunk-7H453VPW.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./List.css\";\nimport * as React from \"react\";\n\nexport interface ListItem {\n key: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n avatar?: React.ReactNode;\n actions?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface ListProps {\n items: ListItem[];\n /** Show dividers between items. */\n dividers?: boolean;\n className?: string;\n}\n\n/** `List` — vertical list of rows. */\nexport const List: React.FC<ListProps> = ({ items, dividers = true, className = \"\" }) => (\n <ul className={`list ${dividers ? \"with-dividers\" : \"\"} ${className}`} style={{ listStyle: \"none\", margin: 0 }}>\n {items.map((it) => (\n <li key={it.key} className={`list-item ${it.onClick ? \"clickable\" : \"\"}`} onClick={it.onClick}>\n {it.avatar && <div className=\"list-item-avatar\">{it.avatar}</div>}\n <div className=\"list-item-meta\">\n {it.title && <div className=\"list-item-title\">{it.title}</div>}\n {it.description && <div className=\"list-item-desc\">{it.description}</div>}\n </div>\n {it.actions && <div className=\"list-item-actions\">{it.actions}</div>}\n </li>\n ))}\n </ul>\n);\n"]}
1
+ {"version":3,"sources":["../src/components/List/List.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;;;;AAsBO,IAAM,OAA4B,CAAC,EAAE,OAAO,QAAA,GAAW,IAAA,EAAM,YAAY,EAAA,EAAG,qBACjFA,cAAA,CAAC,IAAA,EAAA,EAAG,WAAW,CAAA,KAAA,EAAQ,QAAA,GAAW,kBAAkB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,QAAQ,MAAA,EAAQ,CAAA,IACxG,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACVC,eAAA,CAAC,QAAgB,SAAA,EAAW,CAAA,UAAA,EAAa,GAAG,OAAA,GAAU,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,OAAA,EAAS,GAAG,OAAA,EACnF,QAAA,EAAA;AAAA,EAAA,EAAA,CAAG,0BAAUD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,aAAG,MAAA,EAAO,CAAA;AAAA,kBAC3DC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,EAAA,CAAG,yBAASD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,aAAG,KAAA,EAAM,CAAA;AAAA,IACvD,GAAG,WAAA,oBAAeA,cAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EAAkB,aAAG,WAAA,EAAY;AAAA,GAAA,EACrE,CAAA;AAAA,EACC,GAAG,OAAA,oBAAWA,cAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,aAAG,OAAA,EAAQ;AAAA,CAAA,EAAA,EANvD,EAAA,CAAG,GAOZ,CACD,CAAA,EACH","file":"chunk-NQQWCIE6.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./List.css\";\nimport * as React from \"react\";\n\nexport interface ListItem {\n key: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n avatar?: React.ReactNode;\n actions?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface ListProps {\n items: ListItem[];\n /** Show dividers between items. */\n dividers?: boolean;\n className?: string;\n}\n\n/** `List` — vertical list of rows. */\nexport const List: React.FC<ListProps> = ({ items, dividers = true, className = \"\" }) => (\n <ul className={`list ${dividers ? \"with-dividers\" : \"\"} ${className}`} style={{ listStyle: \"none\", margin: 0 }}>\n {items.map((it) => (\n <li key={it.key} className={`list-item ${it.onClick ? \"clickable\" : \"\"}`} onClick={it.onClick}>\n {it.avatar && <div className=\"list-item-avatar\">{it.avatar}</div>}\n <div className=\"list-item-meta\">\n {it.title && <div className=\"list-item-title\">{it.title}</div>}\n {it.description && <div className=\"list-item-desc\">{it.description}</div>}\n </div>\n {it.actions && <div className=\"list-item-actions\">{it.actions}</div>}\n </li>\n ))}\n </ul>\n);\n"]}
@@ -1,4 +1,4 @@
1
- import './tokens-HWQ7KWPG.css';
1
+ import './tokens-BIIUTPKN.css';
2
2
  import './shared-NJHRNLRH.css';
3
3
  import './Avatar-R5A4AFKZ.css';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -34,5 +34,5 @@ var Avatar = ({
34
34
  };
35
35
 
36
36
  export { Avatar };
37
- //# sourceMappingURL=chunk-ZWP4LSS3.js.map
38
- //# sourceMappingURL=chunk-ZWP4LSS3.js.map
37
+ //# sourceMappingURL=chunk-NS3C2ZSE.js.map
38
+ //# sourceMappingURL=chunk-NS3C2ZSE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":";;;;;;AAkBO,IAAM,SAAgC,CAAC;AAAA,EAC5C,GAAA;AAAA,EACA,GAAA,GAAM,EAAA;AAAA,EACN,QAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,KAAA,GAAQ,QAAA;AAAA,EACR,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,UAAU,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAO,IAAA,GAAO,EAAA;AACnE,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,QAAA,GAAW,QAAA,GAAW,EAAA;AACjD,EAAA,MAAM,WAAA,GACJ,OAAO,IAAA,KAAS,QAAA,GAAW,EAAE,CAAC,QAAiB,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA,EAAM,GAAG,KAAA,EAAM,GAAI,SAAS,EAAC;AACxF,EAAA,MAAM,QAAQ,QAAA,IAAY,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACtD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAAA,MAClF,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,GAAA,uBAAO,KAAA,EAAA,EAAI,GAAA,EAAU,KAAU,CAAA,mBAAK,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACjD,0BAAU,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA;AAAA;AAAA,GACzD;AAEJ","file":"chunk-ZWP4LSS3.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Avatar.css\";\nimport * as React from \"react\";\n\nexport interface AvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n src?: string;\n alt?: string;\n /** Initials if no image. Auto-derived from `alt` if omitted. */\n initials?: string;\n size?: number | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Shape — circular (default) or rounded-square. */\n shape?: \"circle\" | \"square\";\n /** Status dot. */\n status?: \"online\" | \"busy\" | \"away\" | \"offline\";\n}\n\n/** `Avatar` — user image or initials chip. */\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = \"\",\n initials,\n size = \"md\",\n shape = \"circle\",\n status,\n className = \"\",\n style,\n ...rest\n}) => {\n const sizeCls = typeof size === \"string\" && size !== \"md\" ? size : \"\";\n const shapeCls = shape === \"square\" ? \"square\" : \"\";\n const customStyle: React.CSSProperties =\n typeof size === \"number\" ? { [\"--size\" as never]: `${size}px`, ...style } : style ?? {};\n const shown = initials ?? alt.slice(0, 2).toUpperCase();\n return (\n <div\n className={`avatar ${sizeCls} ${shapeCls} ${className}`.trim().replace(/\\s+/g, \" \")}\n style={customStyle}\n {...rest}\n >\n {src ? <img src={src} alt={alt} /> : <span>{shown}</span>}\n {status && <span className={`avatar-status ${status}`} />}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":";;;;;;AAkBO,IAAM,SAAgC,CAAC;AAAA,EAC5C,GAAA;AAAA,EACA,GAAA,GAAM,EAAA;AAAA,EACN,QAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,KAAA,GAAQ,QAAA;AAAA,EACR,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,UAAU,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAO,IAAA,GAAO,EAAA;AACnE,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,QAAA,GAAW,QAAA,GAAW,EAAA;AACjD,EAAA,MAAM,WAAA,GACJ,OAAO,IAAA,KAAS,QAAA,GAAW,EAAE,CAAC,QAAiB,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA,EAAM,GAAG,KAAA,EAAM,GAAI,SAAS,EAAC;AACxF,EAAA,MAAM,QAAQ,QAAA,IAAY,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACtD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAAA,MAClF,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,GAAA,uBAAO,KAAA,EAAA,EAAI,GAAA,EAAU,KAAU,CAAA,mBAAK,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACjD,0BAAU,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA;AAAA;AAAA,GACzD;AAEJ","file":"chunk-NS3C2ZSE.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Avatar.css\";\nimport * as React from \"react\";\n\nexport interface AvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n src?: string;\n alt?: string;\n /** Initials if no image. Auto-derived from `alt` if omitted. */\n initials?: string;\n size?: number | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Shape — circular (default) or rounded-square. */\n shape?: \"circle\" | \"square\";\n /** Status dot. */\n status?: \"online\" | \"busy\" | \"away\" | \"offline\";\n}\n\n/** `Avatar` — user image or initials chip. */\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = \"\",\n initials,\n size = \"md\",\n shape = \"circle\",\n status,\n className = \"\",\n style,\n ...rest\n}) => {\n const sizeCls = typeof size === \"string\" && size !== \"md\" ? size : \"\";\n const shapeCls = shape === \"square\" ? \"square\" : \"\";\n const customStyle: React.CSSProperties =\n typeof size === \"number\" ? { [\"--size\" as never]: `${size}px`, ...style } : style ?? {};\n const shown = initials ?? alt.slice(0, 2).toUpperCase();\n return (\n <div\n className={`avatar ${sizeCls} ${shapeCls} ${className}`.trim().replace(/\\s+/g, \" \")}\n style={customStyle}\n {...rest}\n >\n {src ? <img src={src} alt={alt} /> : <span>{shown}</span>}\n {status && <span className={`avatar-status ${status}`} />}\n </div>\n );\n};\n"]}