@fangxinyan/lumina 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.d.cts +2 -2
  3. package/dist/Accordion.d.ts +2 -2
  4. package/dist/Accordion.js +2 -2
  5. package/dist/Alert.cjs +3 -3
  6. package/dist/Alert.d.cts +2 -2
  7. package/dist/Alert.d.ts +2 -2
  8. package/dist/Alert.js +2 -2
  9. package/dist/AppShell.cjs +5 -5
  10. package/dist/AppShell.d.cts +8 -8
  11. package/dist/AppShell.d.ts +8 -8
  12. package/dist/AppShell.js +1 -1
  13. package/dist/AutoComplete.cjs +4 -4
  14. package/dist/AutoComplete.d.cts +1 -4
  15. package/dist/AutoComplete.d.ts +1 -4
  16. package/dist/AutoComplete.js +3 -3
  17. package/dist/Avatar.cjs +2 -2
  18. package/dist/Avatar.d.cts +1 -1
  19. package/dist/Avatar.d.ts +1 -1
  20. package/dist/Avatar.js +1 -1
  21. package/dist/Button.cjs +4 -4
  22. package/dist/Button.js +2 -2
  23. package/dist/Calendar.cjs +3 -3
  24. package/dist/Calendar.d.cts +2 -2
  25. package/dist/Calendar.d.ts +2 -2
  26. package/dist/Calendar.js +2 -2
  27. package/dist/Cascader.cjs +3 -3
  28. package/dist/Cascader.d.cts +2 -2
  29. package/dist/Cascader.d.ts +2 -2
  30. package/dist/Cascader.js +2 -2
  31. package/dist/Checkbox.cjs +4 -4
  32. package/dist/Checkbox.d.cts +5 -5
  33. package/dist/Checkbox.d.ts +5 -5
  34. package/dist/Checkbox.js +2 -2
  35. package/dist/ColorPicker.cjs +2 -2
  36. package/dist/ColorPicker.d.cts +1 -3
  37. package/dist/ColorPicker.d.ts +1 -3
  38. package/dist/ColorPicker.js +1 -1
  39. package/dist/CommandPalette.cjs +4 -4
  40. package/dist/CommandPalette.d.cts +2 -2
  41. package/dist/CommandPalette.d.ts +2 -2
  42. package/dist/CommandPalette.js +3 -3
  43. package/dist/ContextMenu.cjs +2 -2
  44. package/dist/ContextMenu.d.cts +2 -2
  45. package/dist/ContextMenu.d.ts +2 -2
  46. package/dist/ContextMenu.js +1 -1
  47. package/dist/Divider.cjs +2 -2
  48. package/dist/Divider.d.cts +1 -1
  49. package/dist/Divider.d.ts +1 -1
  50. package/dist/Divider.js +1 -1
  51. package/dist/Drawer.cjs +3 -3
  52. package/dist/Drawer.d.cts +2 -2
  53. package/dist/Drawer.d.ts +2 -2
  54. package/dist/Drawer.js +2 -2
  55. package/dist/Empty.cjs +4 -4
  56. package/dist/Empty.d.cts +6 -6
  57. package/dist/Empty.d.ts +6 -6
  58. package/dist/Empty.js +1 -1
  59. package/dist/Form.cjs +4 -4
  60. package/dist/Form.d.cts +2 -2
  61. package/dist/Form.d.ts +2 -2
  62. package/dist/Form.js +1 -1
  63. package/dist/Icon.cjs +3 -3
  64. package/dist/Icon.d.cts +1 -1
  65. package/dist/Icon.d.ts +1 -1
  66. package/dist/Icon.js +1 -1
  67. package/dist/Image.cjs +4 -4
  68. package/dist/Image.d.cts +4 -4
  69. package/dist/Image.d.ts +4 -4
  70. package/dist/Image.js +2 -2
  71. package/dist/Input.cjs +4 -4
  72. package/dist/Input.js +2 -2
  73. package/dist/InputNumber.cjs +4 -4
  74. package/dist/InputNumber.d.cts +1 -5
  75. package/dist/InputNumber.d.ts +1 -5
  76. package/dist/InputNumber.js +3 -3
  77. package/dist/List.cjs +2 -2
  78. package/dist/List.d.cts +2 -2
  79. package/dist/List.d.ts +2 -2
  80. package/dist/List.js +1 -1
  81. package/dist/Modal.cjs +4 -4
  82. package/dist/Modal.d.cts +2 -2
  83. package/dist/Modal.d.ts +2 -2
  84. package/dist/Modal.js +3 -3
  85. package/dist/Pagination.cjs +5 -5
  86. package/dist/Pagination.d.cts +2 -2
  87. package/dist/Pagination.d.ts +2 -2
  88. package/dist/Pagination.js +4 -4
  89. package/dist/Popover.cjs +2 -2
  90. package/dist/Popover.d.cts +2 -2
  91. package/dist/Popover.d.ts +2 -2
  92. package/dist/Popover.js +1 -1
  93. package/dist/Progress-CHV7DN6Y.css +80 -0
  94. package/dist/Progress.cjs +2 -6
  95. package/dist/Progress.d.cts +5 -13
  96. package/dist/Progress.d.ts +5 -13
  97. package/dist/Progress.js +1 -1
  98. package/dist/Select.cjs +4 -4
  99. package/dist/Select.d.cts +6 -3
  100. package/dist/Select.d.ts +6 -3
  101. package/dist/Select.js +3 -3
  102. package/dist/Splitter.cjs +2 -2
  103. package/dist/Splitter.d.cts +2 -2
  104. package/dist/Splitter.d.ts +2 -2
  105. package/dist/Splitter.js +1 -1
  106. package/dist/StatusBar.cjs +3 -3
  107. package/dist/StatusBar.d.cts +3 -2
  108. package/dist/StatusBar.d.ts +3 -2
  109. package/dist/StatusBar.js +1 -1
  110. package/dist/Switch.cjs +2 -2
  111. package/dist/Switch.d.cts +2 -2
  112. package/dist/Switch.d.ts +2 -2
  113. package/dist/Switch.js +1 -1
  114. package/dist/Table.cjs +8 -8
  115. package/dist/Table.d.cts +4 -3
  116. package/dist/Table.d.ts +4 -3
  117. package/dist/Table.js +6 -6
  118. package/dist/Tabs.cjs +3 -3
  119. package/dist/Tabs.d.cts +5 -5
  120. package/dist/Tabs.d.ts +5 -5
  121. package/dist/Tabs.js +1 -1
  122. package/dist/Tag.cjs +4 -4
  123. package/dist/Tag.d.cts +2 -2
  124. package/dist/Tag.d.ts +2 -2
  125. package/dist/Tag.js +2 -2
  126. package/dist/Timeline.cjs +3 -3
  127. package/dist/Timeline.js +2 -2
  128. package/dist/Toast.cjs +4 -4
  129. package/dist/Toast.d.cts +2 -2
  130. package/dist/Toast.d.ts +2 -2
  131. package/dist/Toast.js +2 -2
  132. package/dist/Tooltip.cjs +2 -2
  133. package/dist/Tooltip.d.cts +2 -2
  134. package/dist/Tooltip.d.ts +2 -2
  135. package/dist/Tooltip.js +1 -1
  136. package/dist/Typography.cjs +7 -7
  137. package/dist/Typography.js +2 -2
  138. package/dist/{chunk-QVFEKGKI.cjs → chunk-2K5HZLXW.cjs} +6 -3
  139. package/dist/chunk-2K5HZLXW.cjs.map +1 -0
  140. package/dist/chunk-2LIX7ZHX.js +29 -0
  141. package/dist/chunk-2LIX7ZHX.js.map +1 -0
  142. package/dist/{chunk-3ES5QPAF.cjs → chunk-2TNJ7TC4.cjs} +22 -12
  143. package/dist/chunk-2TNJ7TC4.cjs.map +1 -0
  144. package/dist/chunk-3EGZ6TBF.cjs +65 -0
  145. package/dist/chunk-3EGZ6TBF.cjs.map +1 -0
  146. package/dist/{chunk-RFU5HN4E.js → chunk-3LJO33HI.js} +25 -7
  147. package/dist/chunk-3LJO33HI.js.map +1 -0
  148. package/dist/{chunk-UQB5OHMO.js → chunk-44AVDO3T.js} +27 -19
  149. package/dist/chunk-44AVDO3T.js.map +1 -0
  150. package/dist/{chunk-TAYFI4RG.cjs → chunk-474MXYO5.cjs} +4 -4
  151. package/dist/{chunk-TAYFI4RG.cjs.map → chunk-474MXYO5.cjs.map} +1 -1
  152. package/dist/{chunk-TMRSI543.js → chunk-4DNHASZU.js} +10 -8
  153. package/dist/chunk-4DNHASZU.js.map +1 -0
  154. package/dist/{chunk-UXABXEWT.js → chunk-4JHFGSNH.js} +24 -13
  155. package/dist/chunk-4JHFGSNH.js.map +1 -0
  156. package/dist/{chunk-E7UQSFKF.js → chunk-4XSP4HHZ.js} +18 -8
  157. package/dist/chunk-4XSP4HHZ.js.map +1 -0
  158. package/dist/{chunk-JQZFOIX6.js → chunk-5VIOJW6M.js} +141 -128
  159. package/dist/chunk-5VIOJW6M.js.map +1 -0
  160. package/dist/{chunk-WBL7LOIH.js → chunk-6CAEGNCK.js} +10 -8
  161. package/dist/chunk-6CAEGNCK.js.map +1 -0
  162. package/dist/{chunk-JELHUUM5.js → chunk-6FSOJLY6.js} +3 -3
  163. package/dist/{chunk-JELHUUM5.js.map → chunk-6FSOJLY6.js.map} +1 -1
  164. package/dist/{chunk-2OBQOEFD.cjs → chunk-6TRVGFFX.cjs} +16 -5
  165. package/dist/chunk-6TRVGFFX.cjs.map +1 -0
  166. package/dist/{chunk-7T2SLRNL.cjs → chunk-74VZZAUT.cjs} +14 -7
  167. package/dist/chunk-74VZZAUT.cjs.map +1 -0
  168. package/dist/{chunk-GR5STMOA.js → chunk-A3IJM7IX.js} +76 -50
  169. package/dist/chunk-A3IJM7IX.js.map +1 -0
  170. package/dist/{chunk-WZ73TWB2.cjs → chunk-AXRABZLY.cjs} +25 -7
  171. package/dist/chunk-AXRABZLY.cjs.map +1 -0
  172. package/dist/{chunk-X3JG3IR6.js → chunk-BSHHQOFY.js} +23 -18
  173. package/dist/chunk-BSHHQOFY.js.map +1 -0
  174. package/dist/{chunk-JSDQVVQB.js → chunk-CVEGVB2C.js} +17 -12
  175. package/dist/chunk-CVEGVB2C.js.map +1 -0
  176. package/dist/{chunk-ILVNMES2.js → chunk-D242UJZO.js} +14 -11
  177. package/dist/chunk-D242UJZO.js.map +1 -0
  178. package/dist/{chunk-RJNGXR5Y.js → chunk-DB5JMXOI.js} +11 -9
  179. package/dist/chunk-DB5JMXOI.js.map +1 -0
  180. package/dist/{chunk-OWNVDXRQ.js → chunk-DCX36FYD.js} +23 -10
  181. package/dist/chunk-DCX36FYD.js.map +1 -0
  182. package/dist/{chunk-3KQKEE5O.cjs → chunk-DH4NYYJP.cjs} +43 -18
  183. package/dist/chunk-DH4NYYJP.cjs.map +1 -0
  184. package/dist/{chunk-P4XPESR2.js → chunk-DUNQNSVK.js} +20 -10
  185. package/dist/chunk-DUNQNSVK.js.map +1 -0
  186. package/dist/{chunk-5PREWYTB.js → chunk-E6K6GYUC.js} +21 -27
  187. package/dist/chunk-E6K6GYUC.js.map +1 -0
  188. package/dist/{chunk-IHACXMOI.js → chunk-EARCKSI7.js} +6 -3
  189. package/dist/chunk-EARCKSI7.js.map +1 -0
  190. package/dist/chunk-EHZXEZI2.cjs +78 -0
  191. package/dist/chunk-EHZXEZI2.cjs.map +1 -0
  192. package/dist/{chunk-S7RFIMA3.cjs → chunk-FBQLNAUI.cjs} +11 -9
  193. package/dist/chunk-FBQLNAUI.cjs.map +1 -0
  194. package/dist/chunk-FCIPCZAK.cjs +53 -0
  195. package/dist/chunk-FCIPCZAK.cjs.map +1 -0
  196. package/dist/{chunk-DLGFIRVW.js → chunk-FSOJHDXH.js} +7 -6
  197. package/dist/chunk-FSOJHDXH.js.map +1 -0
  198. package/dist/{chunk-2D5VCIJZ.cjs → chunk-HHSVGNJA.cjs} +7 -7
  199. package/dist/chunk-HHSVGNJA.cjs.map +1 -0
  200. package/dist/{chunk-ZSR5JSYZ.cjs → chunk-HQO7EZNQ.cjs} +23 -13
  201. package/dist/chunk-HQO7EZNQ.cjs.map +1 -0
  202. package/dist/{chunk-V6466VMN.cjs → chunk-IL523MTN.cjs} +144 -131
  203. package/dist/chunk-IL523MTN.cjs.map +1 -0
  204. package/dist/{chunk-GT45MQAK.cjs → chunk-JAGJQDAV.cjs} +22 -13
  205. package/dist/chunk-JAGJQDAV.cjs.map +1 -0
  206. package/dist/{chunk-U7TAQLPN.cjs → chunk-JF2WNLPF.cjs} +6 -6
  207. package/dist/{chunk-U7TAQLPN.cjs.map → chunk-JF2WNLPF.cjs.map} +1 -1
  208. package/dist/{chunk-S3NIRNWM.js → chunk-JS6U7UQS.js} +3 -3
  209. package/dist/{chunk-S3NIRNWM.js.map → chunk-JS6U7UQS.js.map} +1 -1
  210. package/dist/{chunk-H2QTLV5T.cjs → chunk-KA3XLPQJ.cjs} +34 -9
  211. package/dist/chunk-KA3XLPQJ.cjs.map +1 -0
  212. package/dist/{chunk-NS3C2ZSE.js → chunk-KWE2PXJQ.js} +8 -5
  213. package/dist/chunk-KWE2PXJQ.js.map +1 -0
  214. package/dist/{chunk-TGUDT3GK.js → chunk-LSQD2GFA.js} +4 -4
  215. package/dist/chunk-LSQD2GFA.js.map +1 -0
  216. package/dist/{chunk-D26YHP2Y.cjs → chunk-MU4GGX6C.cjs} +14 -12
  217. package/dist/chunk-MU4GGX6C.cjs.map +1 -0
  218. package/dist/{chunk-3YYOYDKI.js → chunk-MXIWTYNC.js} +16 -6
  219. package/dist/chunk-MXIWTYNC.js.map +1 -0
  220. package/dist/{chunk-5EAVXFFD.cjs → chunk-NRP3X3PE.cjs} +17 -12
  221. package/dist/chunk-NRP3X3PE.cjs.map +1 -0
  222. package/dist/{chunk-DF5K2BZ2.cjs → chunk-P4CGE5C7.cjs} +17 -7
  223. package/dist/chunk-P4CGE5C7.cjs.map +1 -0
  224. package/dist/{chunk-5SJJI3HL.js → chunk-PX5ABNKV.js} +19 -10
  225. package/dist/chunk-PX5ABNKV.js.map +1 -0
  226. package/dist/{chunk-WKNVNN2K.cjs → chunk-QCNHDDSD.cjs} +36 -13
  227. package/dist/chunk-QCNHDDSD.cjs.map +1 -0
  228. package/dist/{chunk-5N7347MI.js → chunk-QRSPBK3X.js} +8 -6
  229. package/dist/chunk-QRSPBK3X.js.map +1 -0
  230. package/dist/{chunk-XT7RXXOE.js → chunk-RHZOBQON.js} +35 -13
  231. package/dist/chunk-RHZOBQON.js.map +1 -0
  232. package/dist/{chunk-P2AV5BD7.cjs → chunk-RNVE2LMJ.cjs} +33 -8
  233. package/dist/chunk-RNVE2LMJ.cjs.map +1 -0
  234. package/dist/{chunk-TQLCIXCK.cjs → chunk-RXL26GSI.cjs} +28 -5
  235. package/dist/chunk-RXL26GSI.cjs.map +1 -0
  236. package/dist/{chunk-UUY7EDVJ.cjs → chunk-S3OSBW7R.cjs} +19 -14
  237. package/dist/chunk-S3OSBW7R.cjs.map +1 -0
  238. package/dist/{chunk-33TIL25B.cjs → chunk-SREMTSVI.cjs} +47 -19
  239. package/dist/chunk-SREMTSVI.cjs.map +1 -0
  240. package/dist/{chunk-6GNFRP2H.js → chunk-SWB57EA2.js} +9 -7
  241. package/dist/chunk-SWB57EA2.js.map +1 -0
  242. package/dist/{chunk-FLPHVK45.js → chunk-T7ZBJJC4.js} +12 -7
  243. package/dist/chunk-T7ZBJJC4.js.map +1 -0
  244. package/dist/chunk-TC5ZL2OS.cjs +165 -0
  245. package/dist/chunk-TC5ZL2OS.cjs.map +1 -0
  246. package/dist/{chunk-I7UJA6RM.cjs → chunk-V24B7KWT.cjs} +12 -10
  247. package/dist/chunk-V24B7KWT.cjs.map +1 -0
  248. package/dist/{chunk-BIXW4ZYW.cjs → chunk-V5KSJITO.cjs} +7 -7
  249. package/dist/{chunk-BIXW4ZYW.cjs.map → chunk-V5KSJITO.cjs.map} +1 -1
  250. package/dist/{chunk-IJIQ4H6C.cjs → chunk-WFFWVQK4.cjs} +7 -7
  251. package/dist/{chunk-IJIQ4H6C.cjs.map → chunk-WFFWVQK4.cjs.map} +1 -1
  252. package/dist/{chunk-LWN2PXW7.js → chunk-WLFMOWUY.js} +3 -3
  253. package/dist/{chunk-LWN2PXW7.js.map → chunk-WLFMOWUY.js.map} +1 -1
  254. package/dist/{chunk-N5W6XJI2.js → chunk-X3QINITU.js} +16 -5
  255. package/dist/chunk-X3QINITU.js.map +1 -0
  256. package/dist/{chunk-AJEF2ZB7.cjs → chunk-XMFVAYBP.cjs} +9 -8
  257. package/dist/chunk-XMFVAYBP.cjs.map +1 -0
  258. package/dist/{chunk-WR3FML2W.cjs → chunk-XMINE4TN.cjs} +28 -17
  259. package/dist/chunk-XMINE4TN.cjs.map +1 -0
  260. package/dist/{chunk-YZ2I7CDF.cjs → chunk-XXE5TQ7I.cjs} +9 -7
  261. package/dist/chunk-XXE5TQ7I.cjs.map +1 -0
  262. package/dist/{chunk-UEHONGPZ.js → chunk-XYGRVPUA.js} +33 -8
  263. package/dist/chunk-XYGRVPUA.js.map +1 -0
  264. package/dist/chunk-Y7BZMMAV.cjs +51 -0
  265. package/dist/chunk-Y7BZMMAV.cjs.map +1 -0
  266. package/dist/{chunk-HHPYY4LH.js → chunk-YRAQRENN.js} +38 -11
  267. package/dist/chunk-YRAQRENN.js.map +1 -0
  268. package/dist/{chunk-BPDWBY6Y.cjs → chunk-YVSZLQTQ.cjs} +19 -9
  269. package/dist/chunk-YVSZLQTQ.cjs.map +1 -0
  270. package/dist/{chunk-TCPTBLDV.cjs → chunk-ZA36BJIY.cjs} +38 -11
  271. package/dist/chunk-ZA36BJIY.cjs.map +1 -0
  272. package/dist/{chunk-47Z4NIU4.js → chunk-ZHCQEJ2Z.js} +14 -7
  273. package/dist/chunk-ZHCQEJ2Z.js.map +1 -0
  274. package/dist/{chunk-D3GZSL2B.cjs → chunk-ZM4P6ELG.cjs} +45 -23
  275. package/dist/chunk-ZM4P6ELG.cjs.map +1 -0
  276. package/dist/{chunk-4ADDAZK3.js → chunk-ZN6VS6SO.js} +18 -13
  277. package/dist/chunk-ZN6VS6SO.js.map +1 -0
  278. package/dist/{chunk-AZRJZM7W.js → chunk-ZPDMAMWC.js} +21 -11
  279. package/dist/chunk-ZPDMAMWC.js.map +1 -0
  280. package/dist/{chunk-GB5NAXBP.js → chunk-ZZXNHPF3.js} +3 -3
  281. package/dist/{chunk-GB5NAXBP.js.map → chunk-ZZXNHPF3.js.map} +1 -1
  282. package/dist/index.cjs +94 -98
  283. package/dist/index.cjs.map +1 -1
  284. package/dist/index.d.cts +2 -2
  285. package/dist/index.d.ts +2 -2
  286. package/dist/index.js +37 -37
  287. package/dist/index.js.map +1 -1
  288. package/dist/styles.css +50 -32
  289. package/docs/llms/appshell.md +36 -0
  290. package/docs/llms/progress.md +10 -18
  291. package/docs/llms.md +7 -5
  292. package/package.json +76 -1
  293. package/dist/Progress-IXRSO5TW.css +0 -63
  294. package/dist/chunk-2D5VCIJZ.cjs.map +0 -1
  295. package/dist/chunk-2OBQOEFD.cjs.map +0 -1
  296. package/dist/chunk-33TIL25B.cjs.map +0 -1
  297. package/dist/chunk-3ES5QPAF.cjs.map +0 -1
  298. package/dist/chunk-3KQKEE5O.cjs.map +0 -1
  299. package/dist/chunk-3YYOYDKI.js.map +0 -1
  300. package/dist/chunk-47Z4NIU4.js.map +0 -1
  301. package/dist/chunk-4ADDAZK3.js.map +0 -1
  302. package/dist/chunk-5BFETKVP.cjs +0 -52
  303. package/dist/chunk-5BFETKVP.cjs.map +0 -1
  304. package/dist/chunk-5EAVXFFD.cjs.map +0 -1
  305. package/dist/chunk-5N7347MI.js.map +0 -1
  306. package/dist/chunk-5PREWYTB.js.map +0 -1
  307. package/dist/chunk-5SJJI3HL.js.map +0 -1
  308. package/dist/chunk-6GNFRP2H.js.map +0 -1
  309. package/dist/chunk-7T2SLRNL.cjs.map +0 -1
  310. package/dist/chunk-7YQWG7HR.cjs +0 -45
  311. package/dist/chunk-7YQWG7HR.cjs.map +0 -1
  312. package/dist/chunk-AJEF2ZB7.cjs.map +0 -1
  313. package/dist/chunk-AZRJZM7W.js.map +0 -1
  314. package/dist/chunk-BPDWBY6Y.cjs.map +0 -1
  315. package/dist/chunk-D26YHP2Y.cjs.map +0 -1
  316. package/dist/chunk-D3GZSL2B.cjs.map +0 -1
  317. package/dist/chunk-DF5K2BZ2.cjs.map +0 -1
  318. package/dist/chunk-DLGFIRVW.js.map +0 -1
  319. package/dist/chunk-E7UQSFKF.js.map +0 -1
  320. package/dist/chunk-FLPHVK45.js.map +0 -1
  321. package/dist/chunk-GR5STMOA.js.map +0 -1
  322. package/dist/chunk-GT45MQAK.cjs.map +0 -1
  323. package/dist/chunk-H2QTLV5T.cjs.map +0 -1
  324. package/dist/chunk-HHPYY4LH.js.map +0 -1
  325. package/dist/chunk-I7UJA6RM.cjs.map +0 -1
  326. package/dist/chunk-IHACXMOI.js.map +0 -1
  327. package/dist/chunk-ILVNMES2.js.map +0 -1
  328. package/dist/chunk-IZDJCEMF.cjs +0 -31
  329. package/dist/chunk-IZDJCEMF.cjs.map +0 -1
  330. package/dist/chunk-JQZFOIX6.js.map +0 -1
  331. package/dist/chunk-JSDQVVQB.js.map +0 -1
  332. package/dist/chunk-N5W6XJI2.js.map +0 -1
  333. package/dist/chunk-NQQWCIE6.cjs +0 -20
  334. package/dist/chunk-NQQWCIE6.cjs.map +0 -1
  335. package/dist/chunk-NS3C2ZSE.js.map +0 -1
  336. package/dist/chunk-OWNVDXRQ.js.map +0 -1
  337. package/dist/chunk-P2AV5BD7.cjs.map +0 -1
  338. package/dist/chunk-P4XPESR2.js.map +0 -1
  339. package/dist/chunk-QVFEKGKI.cjs.map +0 -1
  340. package/dist/chunk-RFU5HN4E.js.map +0 -1
  341. package/dist/chunk-RJNGXR5Y.js.map +0 -1
  342. package/dist/chunk-S7RFIMA3.cjs.map +0 -1
  343. package/dist/chunk-TCPTBLDV.cjs.map +0 -1
  344. package/dist/chunk-TGUDT3GK.js.map +0 -1
  345. package/dist/chunk-TMRSI543.js.map +0 -1
  346. package/dist/chunk-TQLCIXCK.cjs.map +0 -1
  347. package/dist/chunk-UEHONGPZ.js.map +0 -1
  348. package/dist/chunk-UQB5OHMO.js.map +0 -1
  349. package/dist/chunk-UUY7EDVJ.cjs.map +0 -1
  350. package/dist/chunk-UXABXEWT.js.map +0 -1
  351. package/dist/chunk-V6466VMN.cjs.map +0 -1
  352. package/dist/chunk-WBL7LOIH.js.map +0 -1
  353. package/dist/chunk-WDBJVKSR.js +0 -18
  354. package/dist/chunk-WDBJVKSR.js.map +0 -1
  355. package/dist/chunk-WKNVNN2K.cjs.map +0 -1
  356. package/dist/chunk-WR3FML2W.cjs.map +0 -1
  357. package/dist/chunk-WZ73TWB2.cjs.map +0 -1
  358. package/dist/chunk-X3JG3IR6.js.map +0 -1
  359. package/dist/chunk-XT7RXXOE.js.map +0 -1
  360. package/dist/chunk-XUT2Z2L6.cjs +0 -119
  361. package/dist/chunk-XUT2Z2L6.cjs.map +0 -1
  362. package/dist/chunk-YZ2I7CDF.cjs.map +0 -1
  363. package/dist/chunk-ZSR5JSYZ.cjs.map +0 -1
@@ -183,7 +183,9 @@ var ColorPicker = React.forwardRef(
183
183
  defaultOpen = false,
184
184
  onOpenChange,
185
185
  className = "",
186
- style
186
+ style,
187
+ onClick,
188
+ ...rest
187
189
  } = props;
188
190
  const isControlled = value != null;
189
191
  const [internal, setInternal] = React.useState(
@@ -264,7 +266,11 @@ var ColorPicker = React.forwardRef(
264
266
  ref: triggerRef,
265
267
  className: "cp-custom-trigger",
266
268
  disabled,
267
- onClick: () => !disabled && setOpen(!open),
269
+ onClick: (e) => {
270
+ onClick?.(e);
271
+ if (!disabled) setOpen(!open);
272
+ },
273
+ ...rest,
268
274
  children
269
275
  }
270
276
  ) : /* @__PURE__ */ jsxs(
@@ -274,8 +280,13 @@ var ColorPicker = React.forwardRef(
274
280
  ref: triggerRef,
275
281
  className: `cp-trigger ${size}`,
276
282
  disabled,
277
- onClick: () => !disabled && setOpen(!open),
283
+ onClick: (e) => {
284
+ onClick?.(e);
285
+ if (!disabled) setOpen(!open);
286
+ },
278
287
  "aria-label": `\u9009\u62E9\u989C\u8272 (\u5F53\u524D ${current})`,
288
+ style,
289
+ ...rest,
279
290
  children: [
280
291
  /* @__PURE__ */ jsx("span", { className: "cp-swatch", style: { background: current } }),
281
292
  showText && /* @__PURE__ */ jsx("span", { className: "cp-text", children: current })
@@ -331,5 +342,5 @@ var ColorPicker = React.forwardRef(
331
342
  ColorPicker.displayName = "ColorPicker";
332
343
 
333
344
  export { ColorPicker };
334
- //# sourceMappingURL=chunk-N5W6XJI2.js.map
335
- //# sourceMappingURL=chunk-N5W6XJI2.js.map
345
+ //# sourceMappingURL=chunk-X3QINITU.js.map
346
+ //# sourceMappingURL=chunk-X3QINITU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ColorPicker/ColorPicker.tsx"],"names":[],"mappings":"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","file":"chunk-X3QINITU.js","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 extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"children\" | \"color\"\n > {\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}\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 onClick,\n ...rest\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={(e) => {\n onClick?.(e);\n if (!disabled) setOpen(!open);\n }}\n {...rest}\n >\n {children}\n </button>\n ) : (\n <button\n type=\"button\"\n ref={triggerRef}\n className={`cp-trigger ${size}`}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (!disabled) setOpen(!open);\n }}\n aria-label={`选择颜色 (当前 ${current})`}\n style={style}\n {...rest}\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,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk3KQKEE5O_cjs = require('./chunk-3KQKEE5O.cjs');
3
+ var chunkDH4NYYJP_cjs = require('./chunk-DH4NYYJP.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Toast-YSACW3EM.css');
@@ -70,7 +70,7 @@ var toast = {
70
70
  emit();
71
71
  }
72
72
  };
73
- var ToastContainer = ({ placement = "top-right" }) => {
73
+ var ToastContainer = React__namespace.forwardRef(({ placement = "top-right", className = "", ...rest }, ref) => {
74
74
  const [list, setList] = React__namespace.useState(items);
75
75
  React__namespace.useEffect(() => {
76
76
  listeners.add(setList);
@@ -80,22 +80,23 @@ var ToastContainer = ({ placement = "top-right" }) => {
80
80
  }, []);
81
81
  if (typeof document === "undefined") return null;
82
82
  return ReactDOM__default.default.createPortal(
83
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `toast-container ${placement}`, children: list.map((t) => {
83
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: `toast-container ${placement} ${className}`, ...rest, children: list.map((t) => {
84
84
  const iconName = t.type === "success" ? "check2" : t.type === "warning" ? "alert" : t.type === "danger" ? "alert" : "info";
85
85
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `toast ${t.type}`, role: "status", children: [
86
- /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: iconName, size: 18, className: "toast-icon" }),
86
+ /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: iconName, size: 18, className: "toast-icon" }),
87
87
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "toast-body", children: [
88
88
  t.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast-title", children: t.title }),
89
89
  t.message && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast-msg", children: t.message })
90
90
  ] }),
91
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast-close", onClick: () => toast.dismiss(t.id), "aria-label": "Dismiss", children: /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "x", size: 14 }) })
91
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast-close", onClick: () => toast.dismiss(t.id), "aria-label": "Dismiss", children: /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: "x", size: 14 }) })
92
92
  ] }, t.id);
93
93
  }) }),
94
94
  document.body
95
95
  );
96
- };
96
+ });
97
+ ToastContainer.displayName = "ToastContainer";
97
98
 
98
99
  exports.ToastContainer = ToastContainer;
99
100
  exports.toast = toast;
100
- //# sourceMappingURL=chunk-AJEF2ZB7.cjs.map
101
- //# sourceMappingURL=chunk-AJEF2ZB7.cjs.map
101
+ //# sourceMappingURL=chunk-XMFVAYBP.cjs.map
102
+ //# sourceMappingURL=chunk-XMFVAYBP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Toast/Toast.tsx"],"names":["ReactDOM","React","jsx","jsxs","Icon"],"mappings":"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","file":"chunk-XMFVAYBP.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Toast.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport type ToastType = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ToastItem {\n id: number;\n type: ToastType;\n title?: React.ReactNode;\n message?: React.ReactNode;\n duration?: number;\n}\n\ntype ListenerState = ToastItem[];\nconst listeners = new Set<(s: ListenerState) => void>();\nlet items: ListenerState = [];\nlet uid = 0;\nlet autoMounted = false;\n\nfunction emit() {\n if (listeners.size === 0 && !autoMounted && typeof document !== \"undefined\") {\n autoMounted = true;\n const div = document.createElement(\"div\");\n document.body.appendChild(div);\n const root = (ReactDOM as any).createRoot\n ? (ReactDOM as any).createRoot(div)\n : null;\n if (root) {\n root.render(React.createElement(ToastContainer));\n }\n }\n listeners.forEach((l) => l(items));\n}\n\nexport const toast = {\n show(t: Omit<ToastItem, \"id\">) {\n const id = ++uid;\n items = [...items, { ...t, id, duration: t.duration ?? 3200 }];\n emit();\n if (items[items.length - 1].duration! > 0) {\n setTimeout(() => toast.dismiss(id), items[items.length - 1].duration);\n }\n return id;\n },\n info: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"info\", message, title }),\n success: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"success\", message, title }),\n warn: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"warning\", message, title }),\n error: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"danger\", message, title }),\n dismiss(id: number) {\n items = items.filter((i) => i.id !== id);\n emit();\n },\n clear() {\n items = [];\n emit();\n },\n};\n\nexport interface ToastContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n placement?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\";\n}\n\n/** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */\nexport const ToastContainer = React.forwardRef<HTMLDivElement, ToastContainerProps>(({ placement = \"top-right\", className = \"\", ...rest }, ref) => {\n const [list, setList] = React.useState<ListenerState>(items);\n React.useEffect(() => {\n listeners.add(setList);\n return () => {\n listeners.delete(setList);\n };\n }, []);\n if (typeof document === \"undefined\") return null;\n return ReactDOM.createPortal(\n <div ref={ref} className={`toast-container ${placement} ${className}`} {...rest}>\n {list.map((t) => {\n const iconName =\n t.type === \"success\" ? \"check2\" : t.type === \"warning\" ? \"alert\" : t.type === \"danger\" ? \"alert\" : \"info\";\n return (\n <div key={t.id} className={`toast ${t.type}`} role=\"status\">\n <Icon name={iconName} size={18} className=\"toast-icon\" />\n <div className=\"toast-body\">\n {t.title && <div className=\"toast-title\">{t.title}</div>}\n {t.message && <div className=\"toast-msg\">{t.message}</div>}\n </div>\n <button type=\"button\" className=\"toast-close\" onClick={() => toast.dismiss(t.id)} aria-label=\"Dismiss\">\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n );\n })}\n </div>,\n document.body\n );\n});\nToastContainer.displayName = \"ToastContainer\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk3KQKEE5O_cjs = require('./chunk-3KQKEE5O.cjs');
3
+ var chunkDH4NYYJP_cjs = require('./chunk-DH4NYYJP.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Image-4MN34O6P.css');
@@ -31,7 +31,7 @@ function _interopNamespace(e) {
31
31
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
32
  var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
33
33
 
34
- var Image = ({
34
+ var Image = React__namespace.forwardRef(({
35
35
  src,
36
36
  alt,
37
37
  width = 200,
@@ -39,8 +39,10 @@ var Image = ({
39
39
  preview = true,
40
40
  hover = true,
41
41
  placeholder,
42
- className = ""
43
- }) => {
42
+ className = "",
43
+ style,
44
+ ...rest
45
+ }, ref) => {
44
46
  const [loaded, setLoaded] = React__namespace.useState(false);
45
47
  const [err, setErr] = React__namespace.useState(false);
46
48
  const [open, setOpen] = React__namespace.useState(false);
@@ -49,15 +51,17 @@ var Image = ({
49
51
  /* @__PURE__ */ jsxRuntime.jsx(
50
52
  "div",
51
53
  {
54
+ ref,
52
55
  className: `n-image ${hover ? "hover" : ""} ${canPreview ? "clickable" : ""} ${className}`,
53
- style: { width },
56
+ style: { width, ...style },
54
57
  onClick: () => canPreview && setOpen(true),
58
+ ...rest,
55
59
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "n-image-frame", style: { width: "100%", height }, children: [
56
60
  !err && src && /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, onLoad: () => setLoaded(true), onError: () => setErr(true) }),
57
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `n-image-placeholder ${loaded && !err ? "loaded" : ""}`, children: placeholder ?? /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "image", size: 28 }) }),
61
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `n-image-placeholder ${loaded && !err ? "loaded" : ""}`, children: placeholder ?? /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: "image", size: 28 }) }),
58
62
  canPreview && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
59
63
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "image-hint", children: [
60
- /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "eye", size: 14 }),
64
+ /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: "eye", size: 14 }),
61
65
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u70B9\u51FB\u67E5\u770B" })
62
66
  ] }),
63
67
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "image-actions", onClick: (e) => e.stopPropagation(), children: [
@@ -68,10 +72,10 @@ var Image = ({
68
72
  className: "ia-btn",
69
73
  onClick: () => setOpen(true),
70
74
  "aria-label": "\u9884\u89C8",
71
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "eye", size: 13 })
75
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: "eye", size: 13 })
72
76
  }
73
77
  ),
74
- src && /* @__PURE__ */ jsxRuntime.jsx("a", { className: "ia-btn", href: src, download: true, "aria-label": "\u4E0B\u8F7D", children: /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "download", size: 13 }) })
78
+ src && /* @__PURE__ */ jsxRuntime.jsx("a", { className: "ia-btn", href: src, download: true, "aria-label": "\u4E0B\u8F7D", children: /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: "download", size: 13 }) })
75
79
  ] })
76
80
  ] })
77
81
  ] })
@@ -82,26 +86,33 @@ var Image = ({
82
86
  document.body
83
87
  )
84
88
  ] });
85
- };
86
- var ImageGrid = ({
89
+ });
90
+ Image.displayName = "Image";
91
+ var ImageGrid = React__namespace.forwardRef(({
87
92
  images,
88
93
  columns,
89
94
  itemHeight = 130,
90
- className = ""
91
- }) => /* @__PURE__ */ jsxRuntime.jsx(
95
+ className = "",
96
+ style,
97
+ ...rest
98
+ }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
92
99
  "div",
93
100
  {
101
+ ref,
94
102
  className,
95
103
  style: {
96
104
  display: "grid",
97
105
  gap: 14,
98
- gridTemplateColumns: columns ? `repeat(${columns}, 1fr)` : "repeat(auto-fill, minmax(160px, 1fr))"
106
+ gridTemplateColumns: columns ? `repeat(${columns}, 1fr)` : "repeat(auto-fill, minmax(160px, 1fr))",
107
+ ...style
99
108
  },
109
+ ...rest,
100
110
  children: images.map((img, i) => /* @__PURE__ */ jsxRuntime.jsx(Image, { src: img.src, alt: img.alt, width: "100%", height: itemHeight }, i))
101
111
  }
102
- );
112
+ ));
113
+ ImageGrid.displayName = "ImageGrid";
103
114
 
104
115
  exports.Image = Image;
105
116
  exports.ImageGrid = ImageGrid;
106
- //# sourceMappingURL=chunk-WR3FML2W.cjs.map
107
- //# sourceMappingURL=chunk-WR3FML2W.cjs.map
117
+ //# sourceMappingURL=chunk-XMINE4TN.cjs.map
118
+ //# sourceMappingURL=chunk-XMINE4TN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Image/Image.tsx"],"names":["React","jsxs","Fragment","jsx","Icon","ReactDOM"],"mappings":"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","file":"chunk-XMINE4TN.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Image.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface ImageProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n width?: number | string;\n height?: number | string;\n /** Allow click-to-zoom preview overlay. */\n preview?: boolean;\n /** Hover scale-up. */\n hover?: boolean;\n /** Custom placeholder while loading or on error. */\n placeholder?: React.ReactNode;\n className?: string;\n}\n\n/** `Image` — neumorphic framed image with optional preview overlay. */\nexport const Image = React.forwardRef<HTMLDivElement, ImageProps>(({\n src,\n alt,\n width = 200,\n height = 140,\n preview = true,\n hover = true,\n placeholder,\n className = \"\",\n style,\n ...rest\n}, ref) => {\n const [loaded, setLoaded] = React.useState(false);\n const [err, setErr] = React.useState(false);\n const [open, setOpen] = React.useState(false);\n const canPreview = preview && loaded && !err;\n\n return (\n <>\n <div\n ref={ref}\n className={`n-image ${hover ? \"hover\" : \"\"} ${canPreview ? \"clickable\" : \"\"} ${className}`}\n style={{ width, ...style }}\n onClick={() => canPreview && setOpen(true)}\n {...rest}\n >\n <div className=\"n-image-frame\" style={{ width: \"100%\", height }}>\n {!err && src && (\n <img src={src} alt={alt} onLoad={() => setLoaded(true)} onError={() => setErr(true)} />\n )}\n <div className={`n-image-placeholder ${loaded && !err ? \"loaded\" : \"\"}`}>\n {placeholder ?? <Icon name=\"image\" size={28} />}\n </div>\n {canPreview && (\n <>\n <div className=\"image-hint\">\n <Icon name=\"eye\" size={14} />\n <span>点击查看</span>\n </div>\n <div className=\"image-actions\" onClick={(e) => e.stopPropagation()}>\n <button\n type=\"button\"\n className=\"ia-btn\"\n onClick={() => setOpen(true)}\n aria-label=\"预览\"\n >\n <Icon name=\"eye\" size={13} />\n </button>\n {src && (\n <a className=\"ia-btn\" href={src} download aria-label=\"下载\">\n <Icon name=\"download\" size={13} />\n </a>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n {open &&\n typeof document !== \"undefined\" &&\n ReactDOM.createPortal(\n <div className=\"image-preview-overlay\" onClick={() => setOpen(false)}>\n <img src={src} alt={alt} onClick={(e) => e.stopPropagation()} />\n </div>,\n document.body\n )}\n </>\n );\n});\nImage.displayName = \"Image\";\n\nexport interface ImageGridProps extends React.HTMLAttributes<HTMLDivElement> {\n images: { src: string; alt?: string }[];\n columns?: number;\n itemHeight?: number;\n className?: string;\n}\n\n/** `ImageGrid` — auto-fit grid of `Image` items. */\nexport const ImageGrid = React.forwardRef<HTMLDivElement, ImageGridProps>(({\n images,\n columns,\n itemHeight = 130,\n className = \"\",\n style,\n ...rest\n}, ref) => (\n <div\n ref={ref}\n className={className}\n style={{\n display: \"grid\",\n gap: 14,\n gridTemplateColumns: columns\n ? `repeat(${columns}, 1fr)`\n : \"repeat(auto-fill, minmax(160px, 1fr))\",\n ...style,\n }}\n {...rest}\n >\n {images.map((img, i) => (\n <Image key={i} src={img.src} alt={img.alt} width=\"100%\" height={itemHeight} />\n ))}\n </div>\n));\nImageGrid.displayName = \"ImageGrid\";\n"]}
@@ -27,7 +27,7 @@ function _interopNamespace(e) {
27
27
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
28
 
29
29
  // src/components/Switch/Switch.tsx
30
- var Switch = ({
30
+ var Switch = React__namespace.forwardRef(({
31
31
  checked,
32
32
  defaultChecked,
33
33
  onChange,
@@ -37,8 +37,9 @@ var Switch = ({
37
37
  checkedChildren,
38
38
  unCheckedChildren,
39
39
  className = "",
40
- id
41
- }) => {
40
+ id,
41
+ ...rest
42
+ }, ref) => {
42
43
  const [inner, setInner] = React__namespace.useState(defaultChecked ?? false);
43
44
  const isControlled = checked !== void 0;
44
45
  const value = isControlled ? checked : inner;
@@ -57,7 +58,7 @@ var Switch = ({
57
58
  hasChildren && "with-children",
58
59
  className
59
60
  ].filter(Boolean).join(" ");
60
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cls, children: [
61
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { ref, className: cls, ...rest, children: [
61
62
  /* @__PURE__ */ jsxRuntime.jsxs(
62
63
  "button",
63
64
  {
@@ -79,8 +80,9 @@ var Switch = ({
79
80
  ),
80
81
  label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "switch-label", children: label })
81
82
  ] });
82
- };
83
+ });
84
+ Switch.displayName = "Switch";
83
85
 
84
86
  exports.Switch = Switch;
85
- //# sourceMappingURL=chunk-YZ2I7CDF.cjs.map
86
- //# sourceMappingURL=chunk-YZ2I7CDF.cjs.map
87
+ //# sourceMappingURL=chunk-XXE5TQ7I.cjs.map
88
+ //# sourceMappingURL=chunk-XXE5TQ7I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Switch/Switch.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,IAAM,MAAA,GAAeA,4BAA0C,CAAC;AAAA,EACrE,OAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,EAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,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,WAAA,GAAc,eAAA,IAAmB,IAAA,IAAQ,iBAAA,IAAqB,IAAA;AACpE,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,QAAA;AAAA,IACA,KAAA,IAAS,IAAA;AAAA,IACT,SAAS,IAAA,IAAQ,IAAA;AAAA,IACjB,QAAA,IAAY,UAAA;AAAA,IACZ,WAAA,IAAe,eAAA;AAAA,IACf;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uCACG,OAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EACnC,QAAA,EAAA;AAAA,oBAAAC,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,cAAA,EAAc,KAAA;AAAA,QACd,QAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,EAAA;AAAA,QACA,SAAA,EAAU,cAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,WAAA,oBACCA,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EACd,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,eAAA,EAAgB,CAAA;AAAA,4BACnDA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,iBAAA,EAAkB;AAAA,WAAA,EACxD,CAAA;AAAA,0BAEFA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA;AAAA,KACjC;AAAA,IACC,KAAA,oBAASA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAgB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAClD,CAAA;AAEJ,CAAC;AACD,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-XXE5TQ7I.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Switch.css\";\nimport * as React from \"react\";\n\nexport interface SwitchProps\n extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"onChange\" | \"children\" | \"id\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n size?: \"sm\" | \"md\";\n /** Content rendered inside the track when checked (short text or icon). */\n checkedChildren?: React.ReactNode;\n /** Content rendered inside the track when unchecked. */\n unCheckedChildren?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\n/**\n * `Switch` — on/off toggle. Controlled or uncontrolled.\n */\nexport const Switch = React.forwardRef<HTMLLabelElement, SwitchProps>(({\n checked,\n defaultChecked,\n onChange,\n disabled,\n label,\n size = \"md\",\n checkedChildren,\n unCheckedChildren,\n className = \"\",\n id,\n ...rest\n}, ref) => {\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 hasChildren = checkedChildren != null || unCheckedChildren != null;\n const cls = [\n \"switch\",\n value && \"on\",\n size !== \"md\" && size,\n disabled && \"disabled\",\n hasChildren && \"with-children\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label ref={ref} className={cls} {...rest}>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"switch-track\"\n >\n {hasChildren && (\n <span className=\"switch-inner\">\n <span className=\"switch-inner-on\">{checkedChildren}</span>\n <span className=\"switch-inner-off\">{unCheckedChildren}</span>\n </span>\n )}\n <span className=\"switch-thumb\" />\n </button>\n {label && <span className=\"switch-label\">{label}</span>}\n </label>\n );\n});\nSwitch.displayName = \"Switch\";\n"]}
@@ -6,7 +6,7 @@ import * as React from 'react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
8
8
 
9
- var Popover = ({
9
+ var Popover = React.forwardRef(({
10
10
  content,
11
11
  title,
12
12
  placement = "bottom",
@@ -18,8 +18,12 @@ var Popover = ({
18
18
  open,
19
19
  onOpenChange,
20
20
  children,
21
- className = ""
22
- }) => {
21
+ className = "",
22
+ onClick,
23
+ onMouseEnter,
24
+ onMouseLeave,
25
+ ...rest
26
+ }, ref) => {
23
27
  const [inner, setInner] = React.useState(defaultOpen);
24
28
  const isControlled = open !== void 0;
25
29
  const show = isControlled ? open : inner;
@@ -40,6 +44,14 @@ var Popover = ({
40
44
  if (!isControlled) setInner(v);
41
45
  onOpenChange?.(v);
42
46
  }, [isControlled, onOpenChange]);
47
+ const setTriggerRef = React.useCallback(
48
+ (node) => {
49
+ triggerRef.current = node;
50
+ if (typeof ref === "function") ref(node);
51
+ else if (ref) ref.current = node;
52
+ },
53
+ [ref, triggerRef]
54
+ );
43
55
  React.useEffect(() => {
44
56
  if (trigger !== "click" || !show) return;
45
57
  const h = (e) => {
@@ -72,10 +84,22 @@ var Popover = ({
72
84
  /* @__PURE__ */ jsx(
73
85
  "span",
74
86
  {
75
- ref: triggerRef,
87
+ ref: setTriggerRef,
76
88
  className: `popover-anchor ${className}`,
77
89
  style: { display: "inline-flex", alignSelf: "flex-start" },
78
- ...interact,
90
+ onClick: (e) => {
91
+ onClick?.(e);
92
+ if ("onClick" in interact) interact.onClick?.();
93
+ },
94
+ onMouseEnter: (e) => {
95
+ onMouseEnter?.(e);
96
+ if ("onMouseEnter" in interact) interact.onMouseEnter?.();
97
+ },
98
+ onMouseLeave: (e) => {
99
+ onMouseLeave?.(e);
100
+ if ("onMouseLeave" in interact) interact.onMouseLeave?.();
101
+ },
102
+ ...rest,
79
103
  children
80
104
  }
81
105
  ),
@@ -108,8 +132,9 @@ var Popover = ({
108
132
  document.body
109
133
  )
110
134
  ] });
111
- };
135
+ });
136
+ Popover.displayName = "Popover";
112
137
 
113
138
  export { Popover };
114
- //# sourceMappingURL=chunk-UEHONGPZ.js.map
115
- //# sourceMappingURL=chunk-UEHONGPZ.js.map
139
+ //# sourceMappingURL=chunk-XYGRVPUA.js.map
140
+ //# sourceMappingURL=chunk-XYGRVPUA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Popover/Popover.tsx"],"names":[],"mappings":";;;;;;;;AA0CO,IAAM,OAAA,GAAgB,iBAA0C,CAAC;AAAA,EACtE,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,OAAA,GAAU,OAAA;AAAA,EACV,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,KAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAS,WAAW,CAAA;AACpD,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,IAAA,GAAQ,KAAA;AAEpC,EAAA,MAAM,UAAA,GAAa,KAAA,KAAU,MAAA,GAAS,GAAA,GAAO,KAAA,IAAS,GAAA;AAEtD,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,WAAA,CAA6C;AAAA,IAC/C,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA,EAAa,GAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,GAAA,GAAY,KAAA,CAAA,WAAA,CAAY,CAAC,CAAA,KAAe;AAC5C,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,CAAC,CAAA;AAC7B,IAAA,YAAA,GAAe,CAAC,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,IAAA,KAAiC;AAChC,MAAC,WAA8D,OAAA,GAAU,IAAA;AACzE,MAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,WAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,KAAK,UAAU;AAAA,GAClB;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,OAAA,KAAY,OAAA,IAAW,CAAC,IAAA,EAAM;AAClC,IAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAkB;AAC3B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACrC,MAAA,IAAI,WAAA,CAAY,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACtC,MAAA,GAAA,CAAI,KAAK,CAAA;AAAA,IACX,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,CAAC,CAAA;AAAA,EAC1D,GAAG,CAAC,IAAA,EAAM,SAAS,GAAA,EAAK,UAAA,EAAY,WAAW,CAAC,CAAA;AAEhD,EAAA,MAAM,eAAqB,KAAA,CAAA,MAAA,EAA2B;AAEtD,EAAA,MAAM,QAAA,GACJ,YAAY,OAAA,GACR;AAAA,IACE,cAAc,MAAM;AAClB,MAAA,MAAA,CAAO,YAAA,CAAa,aAAa,OAAO,CAAA;AACxC,MAAA,GAAA,CAAI,IAAI,CAAA;AAAA,IACV,CAAA;AAAA,IACA,cAAc,MAAM;AAClB,MAAA,YAAA,CAAa,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,GAAA,CAAI,KAAK,GAAG,GAAG,CAAA;AAAA,IAChE;AAAA,MAEF,EAAE,OAAA,EAAS,MAAM,GAAA,CAAI,CAAC,IAAI,CAAA,EAAE;AAElC,EAAA,MAAM,UAAA,GACJ,YAAY,OAAA,GACR;AAAA,IACE,YAAA,EAAc,MAAM,MAAA,CAAO,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA,IAC5D,cAAc,MAAM;AAClB,MAAA,YAAA,CAAa,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,GAAA,CAAI,KAAK,GAAG,GAAG,CAAA;AAAA,IAChE;AAAA,MAEF,EAAC;AAEP,EAAA,MAAM,UAAA,GAAa,KAAA,KAAU,MAAA,GAAS,EAAC,GAAI,EAAE,KAAA,EAAO,KAAA,IAAS,MAAA,EAAW,QAAA,EAAU,KAAA,GAAQ,MAAA,GAAY,GAAA,EAAI;AAE1G,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,aAAA;AAAA,QACL,SAAA,EAAW,kBAAkB,SAAS,CAAA,CAAA;AAAA,QACtC,KAAA,EAAO,EAAE,OAAA,EAAS,aAAA,EAAe,WAAW,YAAA,EAAa;AAAA,QACzD,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,OAAA,GAAU,CAAC,CAAA;AACX,UAAA,IAAI,SAAA,IAAa,QAAA,EAAU,QAAA,CAAS,OAAA,IAAU;AAAA,QAChD,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,UAAA,YAAA,GAAe,CAAC,CAAA;AAChB,UAAA,IAAI,cAAA,IAAkB,QAAA,EAAU,QAAA,CAAS,YAAA,IAAe;AAAA,QAC1D,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,UAAA,YAAA,GAAe,CAAC,CAAA;AAChB,UAAA,IAAI,cAAA,IAAkB,QAAA,EAAU,QAAA,CAAS,YAAA,IAAe;AAAA,QAC1D,CAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,sBACE,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,WAAA;AAAA,UACL,SAAA,EAAW,mBAAmB,QAAQ,CAAA,CAAA;AAAA,UACtC,KAAA,EAAO,EAAE,GAAG,aAAA,EAAe,GAAG,UAAA,EAAW;AAAA,UACxC,GAAG,UAAA;AAAA,UAEF,QAAA,EAAA;AAAA,YAAA,CAAA,KAAA,IAAS,QAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,cAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,cAC/C,QAAA,oBACC,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,eAAA;AAAA,kBACV,OAAA,EAAS,MAAM,GAAA,CAAI,KAAK,CAAA;AAAA,kBACxB,YAAA,EAAW,OAAA;AAAA,kBACZ,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EAEJ,CAAA;AAAA,4BAEF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,YACtC,yBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAA,EAAI;AAAA;AAAA;AAAA,OACxE;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ,CAAC;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-XYGRVPUA.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Popover.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface PopoverProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"title\" | \"children\" | \"content\"> {\n /** Popover body content. */\n content: React.ReactNode;\n /** Optional title rendered above content. */\n title?: React.ReactNode;\n /** Preferred placement relative to the trigger. */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** How the popover is triggered. */\n trigger?: \"click\" | \"hover\";\n /** Show a small arrow pointing at the trigger. */\n arrow?: boolean;\n /** Show a close button in the header (click trigger only). */\n closable?: boolean;\n /** Panel width in px, or `\"auto\"` to fit content. */\n width?: number | \"auto\";\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback when visibility changes. */\n onOpenChange?: (open: boolean) => void;\n /** Trigger element. */\n children: React.ReactElement;\n className?: string;\n}\n\n/**\n * `Popover` — rich content bubble with optional title, arrow, and close button.\n *\n * @example\n * <Popover title=\"Confirm\" content={<p>Are you sure?</p>} arrow>\n * <Button>Delete</Button>\n * </Popover>\n */\nexport const Popover = React.forwardRef<HTMLSpanElement, PopoverProps>(({\n content,\n title,\n placement = \"bottom\",\n trigger = \"click\",\n arrow = false,\n closable = false,\n width,\n defaultOpen = false,\n open,\n onOpenChange,\n children,\n className = \"\",\n onClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}, ref) => {\n const [inner, setInner] = React.useState(defaultOpen);\n const isControlled = open !== undefined;\n const show = isControlled ? open! : inner;\n\n const panelWidth = width === \"auto\" ? 160 : (width ?? 240);\n\n const {\n triggerRef,\n floatingRef,\n floatingStyle,\n placement: resolved,\n } = useFloating<HTMLSpanElement, HTMLDivElement>({\n open: show,\n placement,\n panelWidth,\n panelHeight: 160,\n alignCross: \"center\",\n });\n\n const set = React.useCallback((v: boolean) => {\n if (!isControlled) setInner(v);\n onOpenChange?.(v);\n }, [isControlled, onOpenChange]);\n\n const setTriggerRef = React.useCallback(\n (node: HTMLSpanElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLSpanElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref, triggerRef]\n );\n\n React.useEffect(() => {\n if (trigger !== \"click\" || !show) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (floatingRef.current?.contains(t)) return;\n set(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n }, [show, trigger, set, triggerRef, floatingRef]);\n\n const hoverTimeout = React.useRef<number | undefined>();\n\n const interact =\n trigger === \"hover\"\n ? {\n onMouseEnter: () => {\n window.clearTimeout(hoverTimeout.current);\n set(true);\n },\n onMouseLeave: () => {\n hoverTimeout.current = window.setTimeout(() => set(false), 100);\n },\n }\n : { onClick: () => set(!show) };\n\n const panelHover =\n trigger === \"hover\"\n ? {\n onMouseEnter: () => window.clearTimeout(hoverTimeout.current),\n onMouseLeave: () => {\n hoverTimeout.current = window.setTimeout(() => set(false), 100);\n },\n }\n : {};\n\n const widthStyle = width === \"auto\" ? {} : { width: width ?? undefined, minWidth: width ? undefined : 220 };\n\n return (\n <>\n <span\n ref={setTriggerRef}\n className={`popover-anchor ${className}`}\n style={{ display: \"inline-flex\", alignSelf: \"flex-start\" }}\n onClick={(e) => {\n onClick?.(e);\n if (\"onClick\" in interact) interact.onClick?.();\n }}\n onMouseEnter={(e) => {\n onMouseEnter?.(e);\n if (\"onMouseEnter\" in interact) interact.onMouseEnter?.();\n }}\n onMouseLeave={(e) => {\n onMouseLeave?.(e);\n if (\"onMouseLeave\" in interact) interact.onMouseLeave?.();\n }}\n {...rest}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={floatingRef}\n className={`popover popover-${resolved}`}\n style={{ ...floatingStyle, ...widthStyle }}\n {...panelHover}\n >\n {(title || closable) && (\n <div className=\"popover-header\">\n {title && <div className=\"popover-title\">{title}</div>}\n {closable && (\n <button\n className=\"popover-close\"\n onClick={() => set(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n )}\n </div>\n )}\n <div className=\"popover-body\">{content}</div>\n {arrow && <span className={`popover-arrow popover-arrow-${resolved}`} />}\n </div>,\n document.body\n )}\n </>\n );\n});\nPopover.displayName = \"Popover\";\n"]}
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ require('./tokens-BIIUTPKN.css');
4
+ require('./shared-NJHRNLRH.css');
5
+ require('./List-W5BW4D2P.css');
6
+ var React = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ // src/components/List/List.tsx
30
+ var List = React__namespace.forwardRef(({ items, dividers = true, className = "", style, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
31
+ "ul",
32
+ {
33
+ ref,
34
+ className: `list ${dividers ? "with-dividers" : ""} ${className}`,
35
+ style: { listStyle: "none", margin: 0, ...style },
36
+ ...rest,
37
+ children: items.map((it) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `list-item ${it.onClick ? "clickable" : ""}`, onClick: it.onClick, children: [
38
+ it.avatar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "list-item-avatar", children: it.avatar }),
39
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "list-item-meta", children: [
40
+ it.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "list-item-title", children: it.title }),
41
+ it.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "list-item-desc", children: it.description })
42
+ ] }),
43
+ it.actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "list-item-actions", children: it.actions })
44
+ ] }, it.key))
45
+ }
46
+ ));
47
+ List.displayName = "List";
48
+
49
+ exports.List = List;
50
+ //# sourceMappingURL=chunk-Y7BZMMAV.cjs.map
51
+ //# sourceMappingURL=chunk-Y7BZMMAV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/List/List.tsx"],"names":["React","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,IAAM,IAAA,GAAaA,gBAAA,CAAA,UAAA,CAAwC,CAAC,EAAE,KAAA,EAAO,QAAA,GAAW,IAAA,EAAM,SAAA,GAAY,EAAA,EAAI,KAAA,EAAO,GAAG,IAAA,IAAQ,GAAA,qBAC7HC,cAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAW,CAAA,KAAA,EAAQ,QAAA,GAAW,eAAA,GAAkB,EAAE,IAAI,SAAS,CAAA,CAAA;AAAA,IAC/D,OAAO,EAAE,SAAA,EAAW,QAAQ,MAAA,EAAQ,CAAA,EAAG,GAAG,KAAA,EAAM;AAAA,IAC/C,GAAG,IAAA;AAAA,IAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qCACT,IAAA,EAAA,EAAgB,SAAA,EAAW,CAAA,UAAA,EAAa,EAAA,CAAG,UAAU,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,OAAA,EAAS,GAAG,OAAA,EACnF,QAAA,EAAA;AAAA,MAAA,EAAA,CAAG,0BAAUA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,aAAG,MAAA,EAAO,CAAA;AAAA,sBAC3DC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,yBAASD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,aAAG,KAAA,EAAM,CAAA;AAAA,QACvD,GAAG,WAAA,oBAAeA,cAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EAAkB,aAAG,WAAA,EAAY;AAAA,OAAA,EACrE,CAAA;AAAA,MACC,GAAG,OAAA,oBAAWA,cAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,aAAG,OAAA,EAAQ;AAAA,KAAA,EAAA,EANvD,EAAA,CAAG,GAOZ,CACD;AAAA;AACH,CACD;AACD,IAAA,CAAK,WAAA,GAAc,MAAA","file":"chunk-Y7BZMMAV.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 extends Omit<React.HTMLAttributes<HTMLUListElement>, \"children\"> {\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.forwardRef<HTMLUListElement, ListProps>(({ items, dividers = true, className = \"\", style, ...rest }, ref) => (\n <ul\n ref={ref}\n className={`list ${dividers ? \"with-dividers\" : \"\"} ${className}`}\n style={{ listStyle: \"none\", margin: 0, ...style }}\n {...rest}\n >\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));\nList.displayName = \"List\";\n"]}
@@ -6,13 +6,18 @@ import * as React from 'react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
8
8
 
9
- var Tooltip = ({
9
+ var Tooltip = React.forwardRef(({
10
10
  content,
11
11
  placement = "top",
12
12
  children,
13
13
  delay = 250,
14
- disabled
15
- }) => {
14
+ disabled,
15
+ onMouseEnter,
16
+ onMouseLeave,
17
+ onFocus,
18
+ onBlur,
19
+ ...rest
20
+ }, ref) => {
16
21
  const [show, setShow] = React.useState(false);
17
22
  const t = React.useRef();
18
23
  const open = () => {
@@ -31,16 +36,37 @@ var Tooltip = ({
31
36
  panelHeight: 32,
32
37
  alignCross: "center"
33
38
  });
39
+ const setTriggerRef = React.useCallback(
40
+ (node) => {
41
+ triggerRef.current = node;
42
+ if (typeof ref === "function") ref(node);
43
+ else if (ref) ref.current = node;
44
+ },
45
+ [ref, triggerRef]
46
+ );
34
47
  return /* @__PURE__ */ jsxs(Fragment, { children: [
35
48
  /* @__PURE__ */ jsx(
36
49
  "span",
37
50
  {
38
- ref: triggerRef,
51
+ ref: setTriggerRef,
39
52
  className: "tip-anchor",
40
- onMouseEnter: open,
41
- onMouseLeave: close,
42
- onFocus: open,
43
- onBlur: close,
53
+ onMouseEnter: (e) => {
54
+ onMouseEnter?.(e);
55
+ open();
56
+ },
57
+ onMouseLeave: (e) => {
58
+ onMouseLeave?.(e);
59
+ close();
60
+ },
61
+ onFocus: (e) => {
62
+ onFocus?.(e);
63
+ open();
64
+ },
65
+ onBlur: (e) => {
66
+ onBlur?.(e);
67
+ close();
68
+ },
69
+ ...rest,
44
70
  children
45
71
  }
46
72
  ),
@@ -49,8 +75,9 @@ var Tooltip = ({
49
75
  document.body
50
76
  )
51
77
  ] });
52
- };
78
+ });
79
+ Tooltip.displayName = "Tooltip";
53
80
 
54
81
  export { Tooltip };
55
- //# sourceMappingURL=chunk-HHPYY4LH.js.map
56
- //# sourceMappingURL=chunk-HHPYY4LH.js.map
82
+ //# sourceMappingURL=chunk-YRAQRENN.js.map
83
+ //# sourceMappingURL=chunk-YRAQRENN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":";;;;;;;;AAiBO,IAAM,OAAA,GAAgB,iBAA0C,CAAC;AAAA,EACtE,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,IAAU,KAAA,CAAA,MAAA,EAA2B;AAE3C,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,CAAA,CAAE,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAa,WAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,IAAA,KAAiC;AAChC,MAAC,WAA8D,OAAA,GAAU,IAAA;AACzE,MAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,WAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,KAAK,UAAU;AAAA,GAClB;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,aAAA;AAAA,QACL,SAAA,EAAU,YAAA;AAAA,QACV,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,UAAA,YAAA,GAAe,CAAC,CAAA;AAChB,UAAA,IAAA,EAAK;AAAA,QACP,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,UAAA,YAAA,GAAe,CAAC,CAAA;AAChB,UAAA,KAAA,EAAM;AAAA,QACR,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,OAAA,GAAU,CAAC,CAAA;AACX,UAAA,IAAA,EAAK;AAAA,QACP,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,UAAA,MAAA,GAAS,CAAC,CAAA;AACV,UAAA,KAAA,EAAM;AAAA,QACR,CAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,sBACE,GAAA,CAAC,UAAK,SAAA,EAAW,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,eACxC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ,CAAC;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-YRAQRENN.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tooltip.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface TooltipProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\" | \"content\"> {\n content: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n children: React.ReactElement;\n delay?: number;\n disabled?: boolean;\n}\n\n/** `Tooltip` — hover/focus text bubble. */\nexport const Tooltip = React.forwardRef<HTMLSpanElement, TooltipProps>(({\n content,\n placement = \"top\",\n children,\n delay = 250,\n disabled,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n ...rest\n}, ref) => {\n const [show, setShow] = React.useState(false);\n const t = React.useRef<number | undefined>();\n\n const open = () => {\n if (disabled) return;\n window.clearTimeout(t.current);\n t.current = window.setTimeout(() => setShow(true), delay);\n };\n const close = () => {\n window.clearTimeout(t.current);\n setShow(false);\n };\n\n const { triggerRef, floatingStyle, placement: resolved } = useFloating<HTMLSpanElement>({\n open: show,\n placement,\n panelWidth: 160,\n panelHeight: 32,\n alignCross: \"center\",\n });\n\n const setTriggerRef = React.useCallback(\n (node: HTMLSpanElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLSpanElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref, triggerRef]\n );\n\n return (\n <>\n <span\n ref={setTriggerRef}\n className=\"tip-anchor\"\n onMouseEnter={(e) => {\n onMouseEnter?.(e);\n open();\n }}\n onMouseLeave={(e) => {\n onMouseLeave?.(e);\n close();\n }}\n onFocus={(e) => {\n onFocus?.(e);\n open();\n }}\n onBlur={(e) => {\n onBlur?.(e);\n close();\n }}\n {...rest}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <span className={`tip ${resolved}`} style={floatingStyle}>\n {content}\n </span>,\n document.body\n )}\n </>\n );\n});\nTooltip.displayName = \"Tooltip\";\n"]}