@fangxinyan/lumina 0.1.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 (319) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +110 -0
  3. package/dist/Accordion-GSBY5T5U.css +38 -0
  4. package/dist/Accordion.cjs +13 -0
  5. package/dist/Accordion.cjs.map +1 -0
  6. package/dist/Accordion.d.cts +21 -0
  7. package/dist/Accordion.d.ts +21 -0
  8. package/dist/Accordion.js +4 -0
  9. package/dist/Accordion.js.map +1 -0
  10. package/dist/Alert-LSKBYDRI.css +35 -0
  11. package/dist/Alert.cjs +13 -0
  12. package/dist/Alert.cjs.map +1 -0
  13. package/dist/Alert.d.cts +17 -0
  14. package/dist/Alert.d.ts +17 -0
  15. package/dist/Alert.js +4 -0
  16. package/dist/Alert.js.map +1 -0
  17. package/dist/AppShell-RCALXUCZ.css +162 -0
  18. package/dist/AppShell.cjs +24 -0
  19. package/dist/AppShell.cjs.map +1 -0
  20. package/dist/AppShell.d.cts +68 -0
  21. package/dist/AppShell.d.ts +68 -0
  22. package/dist/AppShell.js +3 -0
  23. package/dist/AppShell.js.map +1 -0
  24. package/dist/Avatar-OXDSG5Q6.css +36 -0
  25. package/dist/Avatar.cjs +12 -0
  26. package/dist/Avatar.cjs.map +1 -0
  27. package/dist/Avatar.d.cts +15 -0
  28. package/dist/Avatar.d.ts +15 -0
  29. package/dist/Avatar.js +3 -0
  30. package/dist/Avatar.js.map +1 -0
  31. package/dist/Button-5UI7QXGU.css +96 -0
  32. package/dist/Button.cjs +17 -0
  33. package/dist/Button.cjs.map +1 -0
  34. package/dist/Button.d.cts +41 -0
  35. package/dist/Button.d.ts +41 -0
  36. package/dist/Button.js +4 -0
  37. package/dist/Button.js.map +1 -0
  38. package/dist/Calendar-LHZELUDL.css +65 -0
  39. package/dist/Calendar.cjs +13 -0
  40. package/dist/Calendar.cjs.map +1 -0
  41. package/dist/Calendar.d.cts +16 -0
  42. package/dist/Calendar.d.ts +16 -0
  43. package/dist/Calendar.js +4 -0
  44. package/dist/Calendar.js.map +1 -0
  45. package/dist/Card-2CHHFD4Y.css +28 -0
  46. package/dist/Card.cjs +16 -0
  47. package/dist/Card.cjs.map +1 -0
  48. package/dist/Card.d.cts +25 -0
  49. package/dist/Card.d.ts +25 -0
  50. package/dist/Card.js +3 -0
  51. package/dist/Card.js.map +1 -0
  52. package/dist/Cascader-TO2QMSLJ.css +76 -0
  53. package/dist/Cascader.cjs +13 -0
  54. package/dist/Cascader.cjs.map +1 -0
  55. package/dist/Cascader.d.cts +23 -0
  56. package/dist/Cascader.d.ts +23 -0
  57. package/dist/Cascader.js +4 -0
  58. package/dist/Cascader.js.map +1 -0
  59. package/dist/Checkbox-SKJATVSN.css +72 -0
  60. package/dist/Checkbox.cjs +17 -0
  61. package/dist/Checkbox.cjs.map +1 -0
  62. package/dist/Checkbox.d.cts +33 -0
  63. package/dist/Checkbox.d.ts +33 -0
  64. package/dist/Checkbox.js +4 -0
  65. package/dist/Checkbox.js.map +1 -0
  66. package/dist/Divider-Z37INS5E.css +49 -0
  67. package/dist/Divider.cjs +12 -0
  68. package/dist/Divider.cjs.map +1 -0
  69. package/dist/Divider.d.cts +12 -0
  70. package/dist/Divider.d.ts +12 -0
  71. package/dist/Divider.js +3 -0
  72. package/dist/Divider.js.map +1 -0
  73. package/dist/Empty-VM23UNLQ.css +138 -0
  74. package/dist/Empty.cjs +20 -0
  75. package/dist/Empty.cjs.map +1 -0
  76. package/dist/Empty.d.cts +37 -0
  77. package/dist/Empty.d.ts +37 -0
  78. package/dist/Empty.js +3 -0
  79. package/dist/Empty.js.map +1 -0
  80. package/dist/Icon.cjs +16 -0
  81. package/dist/Icon.cjs.map +1 -0
  82. package/dist/Icon.d.cts +21 -0
  83. package/dist/Icon.d.ts +21 -0
  84. package/dist/Icon.js +3 -0
  85. package/dist/Icon.js.map +1 -0
  86. package/dist/Image-WYWORJT4.css +106 -0
  87. package/dist/Image.cjs +17 -0
  88. package/dist/Image.cjs.map +1 -0
  89. package/dist/Image.d.cts +30 -0
  90. package/dist/Image.d.ts +30 -0
  91. package/dist/Image.js +4 -0
  92. package/dist/Image.js.map +1 -0
  93. package/dist/Input-Z526ARZP.css +66 -0
  94. package/dist/Input.cjs +17 -0
  95. package/dist/Input.cjs.map +1 -0
  96. package/dist/Input.d.cts +36 -0
  97. package/dist/Input.d.ts +36 -0
  98. package/dist/Input.js +4 -0
  99. package/dist/Input.js.map +1 -0
  100. package/dist/List-W5BW4D2P.css +26 -0
  101. package/dist/List.cjs +12 -0
  102. package/dist/List.cjs.map +1 -0
  103. package/dist/List.d.cts +20 -0
  104. package/dist/List.d.ts +20 -0
  105. package/dist/List.js +3 -0
  106. package/dist/List.js.map +1 -0
  107. package/dist/Modal-AYKNIWWQ.css +79 -0
  108. package/dist/Modal.cjs +18 -0
  109. package/dist/Modal.cjs.map +1 -0
  110. package/dist/Modal.d.cts +27 -0
  111. package/dist/Modal.d.ts +27 -0
  112. package/dist/Modal.js +5 -0
  113. package/dist/Modal.js.map +1 -0
  114. package/dist/Pagination-6FFOI4NM.css +35 -0
  115. package/dist/Pagination.cjs +13 -0
  116. package/dist/Pagination.cjs.map +1 -0
  117. package/dist/Pagination.d.cts +19 -0
  118. package/dist/Pagination.d.ts +19 -0
  119. package/dist/Pagination.js +4 -0
  120. package/dist/Pagination.js.map +1 -0
  121. package/dist/Popover-WXEVUYBG.css +15 -0
  122. package/dist/Popover.cjs +12 -0
  123. package/dist/Popover.cjs.map +1 -0
  124. package/dist/Popover.d.cts +16 -0
  125. package/dist/Popover.d.ts +16 -0
  126. package/dist/Popover.js +3 -0
  127. package/dist/Popover.js.map +1 -0
  128. package/dist/Progress-IXRSO5TW.css +63 -0
  129. package/dist/Progress.cjs +16 -0
  130. package/dist/Progress.cjs.map +1 -0
  131. package/dist/Progress.d.cts +26 -0
  132. package/dist/Progress.d.ts +26 -0
  133. package/dist/Progress.js +3 -0
  134. package/dist/Progress.js.map +1 -0
  135. package/dist/Select-DDJJBQEL.css +263 -0
  136. package/dist/Select.cjs +14 -0
  137. package/dist/Select.cjs.map +1 -0
  138. package/dist/Select.d.cts +68 -0
  139. package/dist/Select.d.ts +68 -0
  140. package/dist/Select.js +5 -0
  141. package/dist/Select.js.map +1 -0
  142. package/dist/Slider-RE4HZQKF.css +59 -0
  143. package/dist/Slider.cjs +12 -0
  144. package/dist/Slider.cjs.map +1 -0
  145. package/dist/Slider.d.cts +18 -0
  146. package/dist/Slider.d.ts +18 -0
  147. package/dist/Slider.js +3 -0
  148. package/dist/Slider.js.map +1 -0
  149. package/dist/Switch-NP7KKJOX.css +44 -0
  150. package/dist/Switch.cjs +12 -0
  151. package/dist/Switch.cjs.map +1 -0
  152. package/dist/Switch.d.cts +18 -0
  153. package/dist/Switch.d.ts +18 -0
  154. package/dist/Switch.js +3 -0
  155. package/dist/Switch.js.map +1 -0
  156. package/dist/Table-ZDPGWLH3.css +139 -0
  157. package/dist/Table.cjs +18 -0
  158. package/dist/Table.cjs.map +1 -0
  159. package/dist/Table.d.cts +57 -0
  160. package/dist/Table.d.ts +57 -0
  161. package/dist/Table.js +5 -0
  162. package/dist/Table.js.map +1 -0
  163. package/dist/Tabs-A27TSZOP.css +95 -0
  164. package/dist/Tabs.cjs +16 -0
  165. package/dist/Tabs.cjs.map +1 -0
  166. package/dist/Tabs.d.cts +35 -0
  167. package/dist/Tabs.d.ts +35 -0
  168. package/dist/Tabs.js +3 -0
  169. package/dist/Tabs.js.map +1 -0
  170. package/dist/Tag-EYOY3UWG.css +49 -0
  171. package/dist/Tag.cjs +17 -0
  172. package/dist/Tag.cjs.map +1 -0
  173. package/dist/Tag.d.cts +27 -0
  174. package/dist/Tag.d.ts +27 -0
  175. package/dist/Tag.js +4 -0
  176. package/dist/Tag.js.map +1 -0
  177. package/dist/Theme.cjs +44 -0
  178. package/dist/Theme.cjs.map +1 -0
  179. package/dist/Theme.d.cts +127 -0
  180. package/dist/Theme.d.ts +127 -0
  181. package/dist/Theme.js +3 -0
  182. package/dist/Theme.js.map +1 -0
  183. package/dist/Toast-ERHDN3WG.css +45 -0
  184. package/dist/Toast.cjs +17 -0
  185. package/dist/Toast.cjs.map +1 -0
  186. package/dist/Toast.d.cts +26 -0
  187. package/dist/Toast.d.ts +26 -0
  188. package/dist/Toast.js +4 -0
  189. package/dist/Toast.js.map +1 -0
  190. package/dist/Tooltip-RT4BOVTD.css +23 -0
  191. package/dist/Tooltip.cjs +12 -0
  192. package/dist/Tooltip.cjs.map +1 -0
  193. package/dist/Tooltip.d.cts +13 -0
  194. package/dist/Tooltip.d.ts +13 -0
  195. package/dist/Tooltip.js +3 -0
  196. package/dist/Tooltip.js.map +1 -0
  197. package/dist/chunk-2VA2HSL4.cjs +121 -0
  198. package/dist/chunk-2VA2HSL4.cjs.map +1 -0
  199. package/dist/chunk-2W2AJUZW.js +118 -0
  200. package/dist/chunk-2W2AJUZW.js.map +1 -0
  201. package/dist/chunk-3QWHDCHJ.js +53 -0
  202. package/dist/chunk-3QWHDCHJ.js.map +1 -0
  203. package/dist/chunk-3WAFIUDQ.js +85 -0
  204. package/dist/chunk-3WAFIUDQ.js.map +1 -0
  205. package/dist/chunk-4AA22BOG.js +63 -0
  206. package/dist/chunk-4AA22BOG.js.map +1 -0
  207. package/dist/chunk-4GT5TOHP.js +18 -0
  208. package/dist/chunk-4GT5TOHP.js.map +1 -0
  209. package/dist/chunk-5EYI27B6.js +64 -0
  210. package/dist/chunk-5EYI27B6.js.map +1 -0
  211. package/dist/chunk-6YVW3VYL.js +51 -0
  212. package/dist/chunk-6YVW3VYL.js.map +1 -0
  213. package/dist/chunk-77NP67ML.cjs +70 -0
  214. package/dist/chunk-77NP67ML.cjs.map +1 -0
  215. package/dist/chunk-7CKHWCEA.cjs +110 -0
  216. package/dist/chunk-7CKHWCEA.cjs.map +1 -0
  217. package/dist/chunk-7H453VPW.cjs +20 -0
  218. package/dist/chunk-7H453VPW.cjs.map +1 -0
  219. package/dist/chunk-7NM5BRUX.js +91 -0
  220. package/dist/chunk-7NM5BRUX.js.map +1 -0
  221. package/dist/chunk-7U6I44RV.cjs +283 -0
  222. package/dist/chunk-7U6I44RV.cjs.map +1 -0
  223. package/dist/chunk-AAMYURWQ.cjs +87 -0
  224. package/dist/chunk-AAMYURWQ.cjs.map +1 -0
  225. package/dist/chunk-ALFDP5WX.cjs +70 -0
  226. package/dist/chunk-ALFDP5WX.cjs.map +1 -0
  227. package/dist/chunk-C5TGQ7CV.cjs +114 -0
  228. package/dist/chunk-C5TGQ7CV.cjs.map +1 -0
  229. package/dist/chunk-F3NHM4GX.js +20 -0
  230. package/dist/chunk-F3NHM4GX.js.map +1 -0
  231. package/dist/chunk-FI7QO3I5.cjs +90 -0
  232. package/dist/chunk-FI7QO3I5.cjs.map +1 -0
  233. package/dist/chunk-FMG3ZPGK.js +88 -0
  234. package/dist/chunk-FMG3ZPGK.js.map +1 -0
  235. package/dist/chunk-G3UWXSNQ.js +71 -0
  236. package/dist/chunk-G3UWXSNQ.js.map +1 -0
  237. package/dist/chunk-GEYMWUW6.js +146 -0
  238. package/dist/chunk-GEYMWUW6.js.map +1 -0
  239. package/dist/chunk-HTP6UEVR.js +48 -0
  240. package/dist/chunk-HTP6UEVR.js.map +1 -0
  241. package/dist/chunk-I2ERCHFV.cjs +58 -0
  242. package/dist/chunk-I2ERCHFV.cjs.map +1 -0
  243. package/dist/chunk-I7SSCSFH.js +253 -0
  244. package/dist/chunk-I7SSCSFH.js.map +1 -0
  245. package/dist/chunk-IGHLSNXT.cjs +109 -0
  246. package/dist/chunk-IGHLSNXT.cjs.map +1 -0
  247. package/dist/chunk-IKI5CS4L.cjs +91 -0
  248. package/dist/chunk-IKI5CS4L.cjs.map +1 -0
  249. package/dist/chunk-ITGCHU3Y.cjs +94 -0
  250. package/dist/chunk-ITGCHU3Y.cjs.map +1 -0
  251. package/dist/chunk-JNFCTYJT.cjs +31 -0
  252. package/dist/chunk-JNFCTYJT.cjs.map +1 -0
  253. package/dist/chunk-JWFVSBVX.cjs +30 -0
  254. package/dist/chunk-JWFVSBVX.cjs.map +1 -0
  255. package/dist/chunk-K5MHL732.js +81 -0
  256. package/dist/chunk-K5MHL732.js.map +1 -0
  257. package/dist/chunk-K67KIKX4.cjs +67 -0
  258. package/dist/chunk-K67KIKX4.cjs.map +1 -0
  259. package/dist/chunk-KF4MCHZL.cjs +105 -0
  260. package/dist/chunk-KF4MCHZL.cjs.map +1 -0
  261. package/dist/chunk-M6CGYGEO.js +91 -0
  262. package/dist/chunk-M6CGYGEO.js.map +1 -0
  263. package/dist/chunk-M6OTFXZA.js +48 -0
  264. package/dist/chunk-M6OTFXZA.js.map +1 -0
  265. package/dist/chunk-NWJW5KLN.js +29 -0
  266. package/dist/chunk-NWJW5KLN.js.map +1 -0
  267. package/dist/chunk-NXOAYNG2.cjs +52 -0
  268. package/dist/chunk-NXOAYNG2.cjs.map +1 -0
  269. package/dist/chunk-NZPJ7BUB.cjs +22 -0
  270. package/dist/chunk-NZPJ7BUB.cjs.map +1 -0
  271. package/dist/chunk-OUJBCNWD.js +52 -0
  272. package/dist/chunk-OUJBCNWD.js.map +1 -0
  273. package/dist/chunk-OXYFB2ZI.js +35 -0
  274. package/dist/chunk-OXYFB2ZI.js.map +1 -0
  275. package/dist/chunk-Q33V7MSK.js +79 -0
  276. package/dist/chunk-Q33V7MSK.js.map +1 -0
  277. package/dist/chunk-QESLHLTG.cjs +107 -0
  278. package/dist/chunk-QESLHLTG.cjs.map +1 -0
  279. package/dist/chunk-QPZZNSRB.js +65 -0
  280. package/dist/chunk-QPZZNSRB.js.map +1 -0
  281. package/dist/chunk-QT7SJITQ.cjs +114 -0
  282. package/dist/chunk-QT7SJITQ.cjs.map +1 -0
  283. package/dist/chunk-RMD6KQ4H.cjs +56 -0
  284. package/dist/chunk-RMD6KQ4H.cjs.map +1 -0
  285. package/dist/chunk-T5AH4FCV.js +280 -0
  286. package/dist/chunk-T5AH4FCV.js.map +1 -0
  287. package/dist/chunk-U6ODMPTI.cjs +74 -0
  288. package/dist/chunk-U6ODMPTI.cjs.map +1 -0
  289. package/dist/chunk-V2ZUOEXM.cjs +73 -0
  290. package/dist/chunk-V2ZUOEXM.cjs.map +1 -0
  291. package/dist/chunk-VJN637MT.js +49 -0
  292. package/dist/chunk-VJN637MT.js.map +1 -0
  293. package/dist/chunk-VMHNKD3N.cjs +56 -0
  294. package/dist/chunk-VMHNKD3N.cjs.map +1 -0
  295. package/dist/chunk-VXITDXLW.js +28 -0
  296. package/dist/chunk-VXITDXLW.js.map +1 -0
  297. package/dist/chunk-XFRP2MBR.js +87 -0
  298. package/dist/chunk-XFRP2MBR.js.map +1 -0
  299. package/dist/chunk-XRZ5OKZH.js +101 -0
  300. package/dist/chunk-XRZ5OKZH.js.map +1 -0
  301. package/dist/chunk-Y6FVCCUE.js +34 -0
  302. package/dist/chunk-Y6FVCCUE.js.map +1 -0
  303. package/dist/chunk-YVO7XO4W.cjs +149 -0
  304. package/dist/chunk-YVO7XO4W.cjs.map +1 -0
  305. package/dist/chunk-ZMDVK2U3.cjs +302 -0
  306. package/dist/chunk-ZMDVK2U3.cjs.map +1 -0
  307. package/dist/chunk-ZXM247EM.cjs +123 -0
  308. package/dist/chunk-ZXM247EM.cjs.map +1 -0
  309. package/dist/index.cjs +249 -0
  310. package/dist/index.cjs.map +1 -0
  311. package/dist/index.d.cts +35 -0
  312. package/dist/index.d.ts +35 -0
  313. package/dist/index.js +35 -0
  314. package/dist/index.js.map +1 -0
  315. package/dist/shared-NJHRNLRH.css +4 -0
  316. package/dist/styles.css +2068 -0
  317. package/dist/tokens-HWQ7KWPG.css +153 -0
  318. package/dist/tokens.css +153 -0
  319. package/package.json +77 -0
@@ -0,0 +1,45 @@
1
+ /* ============ Toast ============ */
2
+ .toast-container {
3
+ position: fixed;
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 10px;
7
+ z-index: 300;
8
+ pointer-events: none;
9
+ }
10
+ .toast-container.top-right { top: 56px; right: 20px; }
11
+ .toast-container.top-left { top: 56px; left: 20px; }
12
+ .toast-container.bottom-right { bottom: 20px; right: 20px; }
13
+ .toast-container.bottom-left { bottom: 20px; left: 20px; }
14
+ .toast-container.top-center { top: 56px; left: 50%; transform: translateX(-50%); align-items: center; }
15
+ .toast {
16
+ background: var(--bg);
17
+ border-radius: var(--r-md);
18
+ box-shadow: var(--neu-out-lg);
19
+ padding: 12px 16px;
20
+ min-width: 240px;
21
+ display: flex; align-items: flex-start; gap: 10px;
22
+ font-size: 13px;
23
+ pointer-events: auto;
24
+ animation: toastIn var(--dur-slow) var(--ease);
25
+ border-left: 3px solid var(--accent);
26
+ }
27
+ .toast.success { border-color: var(--success); }
28
+ .toast.warning { border-color: var(--warning); }
29
+ .toast.danger { border-color: var(--danger); }
30
+ .toast .toast-icon { color: var(--accent); margin-top: 2px; }
31
+ .toast.success .toast-icon { color: var(--success); }
32
+ .toast.warning .toast-icon { color: var(--warning); }
33
+ .toast.danger .toast-icon { color: var(--danger); }
34
+ .toast-body { flex: 1; min-width: 0; }
35
+ .toast-title { font-weight: 600; margin-bottom: 2px; }
36
+ .toast-msg { color: var(--fg-muted); font-size: 12px; }
37
+ .toast-close {
38
+ background: transparent; border: none;
39
+ color: var(--fg-subtle); cursor: pointer;
40
+ padding: 0 2px; font-family: inherit;
41
+ }
42
+ .toast-close:hover { color: var(--fg); }
43
+ .toast.leaving { animation: toastOut var(--dur) var(--ease) forwards; }
44
+ @keyframes toastIn { from { opacity: 0; transform: translateX(20px); } }
45
+ @keyframes toastOut { to { opacity: 0; transform: translateX(20px); } }
package/dist/Toast.cjs ADDED
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var chunkIKI5CS4L_cjs = require('./chunk-IKI5CS4L.cjs');
4
+ require('./chunk-YVO7XO4W.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "ToastContainer", {
9
+ enumerable: true,
10
+ get: function () { return chunkIKI5CS4L_cjs.ToastContainer; }
11
+ });
12
+ Object.defineProperty(exports, "toast", {
13
+ enumerable: true,
14
+ get: function () { return chunkIKI5CS4L_cjs.toast; }
15
+ });
16
+ //# sourceMappingURL=Toast.cjs.map
17
+ //# sourceMappingURL=Toast.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Toast.cjs"}
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+
3
+ type ToastType = "info" | "success" | "warning" | "danger";
4
+ interface ToastItem {
5
+ id: number;
6
+ type: ToastType;
7
+ title?: React.ReactNode;
8
+ message?: React.ReactNode;
9
+ duration?: number;
10
+ }
11
+ declare const toast: {
12
+ show(t: Omit<ToastItem, "id">): number;
13
+ info: (message: React.ReactNode, title?: React.ReactNode) => number;
14
+ success: (message: React.ReactNode, title?: React.ReactNode) => number;
15
+ warn: (message: React.ReactNode, title?: React.ReactNode) => number;
16
+ error: (message: React.ReactNode, title?: React.ReactNode) => number;
17
+ dismiss(id: number): void;
18
+ clear(): void;
19
+ };
20
+ interface ToastContainerProps {
21
+ placement?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-center";
22
+ }
23
+ /** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */
24
+ declare const ToastContainer: React.FC<ToastContainerProps>;
25
+
26
+ export { ToastContainer, type ToastContainerProps, type ToastItem, type ToastType, toast };
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+
3
+ type ToastType = "info" | "success" | "warning" | "danger";
4
+ interface ToastItem {
5
+ id: number;
6
+ type: ToastType;
7
+ title?: React.ReactNode;
8
+ message?: React.ReactNode;
9
+ duration?: number;
10
+ }
11
+ declare const toast: {
12
+ show(t: Omit<ToastItem, "id">): number;
13
+ info: (message: React.ReactNode, title?: React.ReactNode) => number;
14
+ success: (message: React.ReactNode, title?: React.ReactNode) => number;
15
+ warn: (message: React.ReactNode, title?: React.ReactNode) => number;
16
+ error: (message: React.ReactNode, title?: React.ReactNode) => number;
17
+ dismiss(id: number): void;
18
+ clear(): void;
19
+ };
20
+ interface ToastContainerProps {
21
+ placement?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-center";
22
+ }
23
+ /** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */
24
+ declare const ToastContainer: React.FC<ToastContainerProps>;
25
+
26
+ export { ToastContainer, type ToastContainerProps, type ToastItem, type ToastType, toast };
package/dist/Toast.js ADDED
@@ -0,0 +1,4 @@
1
+ export { ToastContainer, toast } from './chunk-QPZZNSRB.js';
2
+ import './chunk-GEYMWUW6.js';
3
+ //# sourceMappingURL=Toast.js.map
4
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Toast.js"}
@@ -0,0 +1,23 @@
1
+ /* ============ Tooltip ============ */
2
+ .tip-anchor {
3
+ position: relative;
4
+ display: inline-flex;
5
+ }
6
+ .tip {
7
+ position: absolute;
8
+ background: var(--bg-sunken);
9
+ color: var(--fg);
10
+ padding: 6px 10px;
11
+ border-radius: var(--r-sm);
12
+ font-size: 11px;
13
+ font-weight: 500;
14
+ white-space: nowrap;
15
+ box-shadow: var(--neu-out-sm);
16
+ pointer-events: none;
17
+ animation: fadeIn var(--dur) var(--ease);
18
+ z-index: 100;
19
+ }
20
+ .tip.top { bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%); }
21
+ .tip.bottom { top: calc(100% + 8px); left: 50%; transform: translateX(-50%); }
22
+ .tip.left { right: calc(100% + 8px); top: 50%; transform: translateY(-50%); }
23
+ .tip.right { left: calc(100% + 8px); top: 50%; transform: translateY(-50%); }
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkRMD6KQ4H_cjs = require('./chunk-RMD6KQ4H.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "Tooltip", {
8
+ enumerable: true,
9
+ get: function () { return chunkRMD6KQ4H_cjs.Tooltip; }
10
+ });
11
+ //# sourceMappingURL=Tooltip.cjs.map
12
+ //# sourceMappingURL=Tooltip.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Tooltip.cjs"}
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+
3
+ interface TooltipProps {
4
+ content: React.ReactNode;
5
+ placement?: "top" | "bottom" | "left" | "right";
6
+ children: React.ReactElement;
7
+ delay?: number;
8
+ disabled?: boolean;
9
+ }
10
+ /** `Tooltip` — hover/focus text bubble. */
11
+ declare const Tooltip: React.FC<TooltipProps>;
12
+
13
+ export { Tooltip, type TooltipProps };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+
3
+ interface TooltipProps {
4
+ content: React.ReactNode;
5
+ placement?: "top" | "bottom" | "left" | "right";
6
+ children: React.ReactElement;
7
+ delay?: number;
8
+ disabled?: boolean;
9
+ }
10
+ /** `Tooltip` — hover/focus text bubble. */
11
+ declare const Tooltip: React.FC<TooltipProps>;
12
+
13
+ export { Tooltip, type TooltipProps };
@@ -0,0 +1,3 @@
1
+ export { Tooltip } from './chunk-Y6FVCCUE.js';
2
+ //# sourceMappingURL=Tooltip.js.map
3
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Tooltip.js"}
@@ -0,0 +1,121 @@
1
+ 'use strict';
2
+
3
+ var chunkC5TGQ7CV_cjs = require('./chunk-C5TGQ7CV.cjs');
4
+ var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
5
+ require('./tokens-HWQ7KWPG.css');
6
+ require('./shared-NJHRNLRH.css');
7
+ require('./Table-ZDPGWLH3.css');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function Table({
11
+ columns,
12
+ data,
13
+ rowKey,
14
+ variant,
15
+ hoverable = true,
16
+ striped,
17
+ sortKey,
18
+ sortDir = "asc",
19
+ onSort,
20
+ selectable,
21
+ selected = [],
22
+ onSelect,
23
+ onRowClick,
24
+ empty = "\u6682\u65E0\u6570\u636E",
25
+ className = ""
26
+ }) {
27
+ const keyOf = (row, i) => {
28
+ if (typeof rowKey === "function") return rowKey(row);
29
+ if (rowKey) return row[rowKey];
30
+ return i;
31
+ };
32
+ const v = variant ?? (striped ? "striped" : "default");
33
+ const allSelected = selectable && data.length > 0 && data.every((r, i) => selected.includes(keyOf(r, i)));
34
+ const toggleRow = (k) => {
35
+ if (!onSelect) return;
36
+ onSelect(selected.includes(k) ? selected.filter((x) => x !== k) : [...selected, k]);
37
+ };
38
+ const toggleAll = () => {
39
+ if (!onSelect) return;
40
+ onSelect(allSelected ? [] : data.map((r, i) => keyOf(r, i)));
41
+ };
42
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `table-wrap ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: `table ${v} ${hoverable ? "hoverable" : ""}`, children: [
43
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
44
+ selectable && /* @__PURE__ */ jsxRuntime.jsx("th", { className: "row-check", style: { width: 36 }, children: /* @__PURE__ */ jsxRuntime.jsx(chunkC5TGQ7CV_cjs.Checkbox, { checked: allSelected, onChange: toggleAll }) }),
45
+ columns.map((c) => {
46
+ const sorted = sortKey === c.key;
47
+ return /* @__PURE__ */ jsxRuntime.jsxs(
48
+ "th",
49
+ {
50
+ className: `${c.sortable ? "sortable" : ""} ${sorted ? "sorted" : ""}`,
51
+ style: { width: c.width, textAlign: c.align ?? "left" },
52
+ onClick: () => c.sortable && onSort?.(c.key),
53
+ children: [
54
+ c.title,
55
+ c.sortable && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sort-ind", children: /* @__PURE__ */ jsxRuntime.jsx(
56
+ chunkYVO7XO4W_cjs.Icon,
57
+ {
58
+ name: sorted ? sortDir === "asc" ? "chevUp" : "chevDown" : "chevDown",
59
+ size: 10
60
+ }
61
+ ) })
62
+ ]
63
+ },
64
+ c.key
65
+ );
66
+ })
67
+ ] }) }),
68
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: data.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: columns.length + (selectable ? 1 : 0), className: "table-empty", children: empty }) }) : data.map((row, i) => {
69
+ const k = keyOf(row, i);
70
+ const isSel = selected.includes(k);
71
+ return /* @__PURE__ */ jsxRuntime.jsxs(
72
+ "tr",
73
+ {
74
+ className: `${onRowClick ? "clickable" : ""} ${isSel ? "selected" : ""}`,
75
+ onClick: onRowClick ? () => onRowClick(row, i) : void 0,
76
+ children: [
77
+ selectable && /* @__PURE__ */ jsxRuntime.jsx(
78
+ "td",
79
+ {
80
+ className: "row-check",
81
+ onClick: (e) => {
82
+ e.stopPropagation();
83
+ toggleRow(k);
84
+ },
85
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkC5TGQ7CV_cjs.Checkbox, { checked: isSel, onChange: () => toggleRow(k) })
86
+ }
87
+ ),
88
+ columns.map((c) => {
89
+ const val = c.dataIndex ? row[c.dataIndex] : void 0;
90
+ return /* @__PURE__ */ jsxRuntime.jsx("td", { style: { textAlign: c.align ?? "left" }, children: c.render ? c.render(val, row, i) : val }, c.key);
91
+ })
92
+ ]
93
+ },
94
+ k
95
+ );
96
+ }) })
97
+ ] }) });
98
+ }
99
+ function TablePro({
100
+ toolbar,
101
+ actions,
102
+ footer,
103
+ title,
104
+ className = "",
105
+ ...tableProps
106
+ }) {
107
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `table-card ${className}`, children: [
108
+ (title || toolbar || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "table-toolbar", children: [
109
+ title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-title", children: title }),
110
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-toolbar-main", children: toolbar }),
111
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-toolbar-actions", children: actions })
112
+ ] }),
113
+ /* @__PURE__ */ jsxRuntime.jsx(Table, { ...tableProps, className: "joined" }),
114
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "table-footer", children: footer })
115
+ ] });
116
+ }
117
+
118
+ exports.Table = Table;
119
+ exports.TablePro = TablePro;
120
+ //# sourceMappingURL=chunk-2VA2HSL4.cjs.map
121
+ //# sourceMappingURL=chunk-2VA2HSL4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Table/Table.tsx"],"names":["jsx","jsxs","Checkbox","Icon"],"mappings":"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","file":"chunk-2VA2HSL4.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Table.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Checkbox } from \"../Checkbox\";\n\nexport interface TableColumn<Row = any> {\n key: string;\n title: React.ReactNode;\n /** Data key to read from row, or custom render. */\n dataIndex?: keyof Row;\n render?: (value: any, row: Row, index: number) => React.ReactNode;\n width?: number | string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n}\n\nexport type TableVariant = \"default\" | \"striped\" | \"embossed\" | \"cards\";\n\nexport interface TableProps<Row = any> {\n columns: TableColumn<Row>[];\n data: Row[];\n rowKey?: keyof Row | ((row: Row) => string | number);\n /** Visual variant. */\n variant?: TableVariant;\n /** Hoverable rows. */\n hoverable?: boolean;\n /** Striped rows (shortcut for variant=\"striped\"). */\n striped?: boolean;\n\n /** Sort state — controlled. */\n sortKey?: string;\n sortDir?: \"asc\" | \"desc\";\n onSort?: (key: string) => void;\n\n /** Row selection — controlled list of selected row keys. */\n selectable?: boolean;\n selected?: (string | number)[];\n onSelect?: (keys: (string | number)[]) => void;\n\n /** Called when user clicks a row. */\n onRowClick?: (row: Row, index: number) => void;\n /** Empty state. */\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** `Table` — neumorphic data table with sorting, selection and visual variants. */\nexport function Table<Row extends Record<string, any> = any>({\n columns,\n data,\n rowKey,\n variant,\n hoverable = true,\n striped,\n sortKey,\n sortDir = \"asc\",\n onSort,\n selectable,\n selected = [],\n onSelect,\n onRowClick,\n empty = \"暂无数据\",\n className = \"\",\n}: TableProps<Row>) {\n const keyOf = (row: Row, i: number): string | number => {\n if (typeof rowKey === \"function\") return rowKey(row);\n if (rowKey) return row[rowKey] as any;\n return i;\n };\n\n const v: TableVariant = variant ?? (striped ? \"striped\" : \"default\");\n const allSelected =\n selectable && data.length > 0 && data.every((r, i) => selected.includes(keyOf(r, i)));\n\n const toggleRow = (k: string | number) => {\n if (!onSelect) return;\n onSelect(selected.includes(k) ? selected.filter((x) => x !== k) : [...selected, k]);\n };\n const toggleAll = () => {\n if (!onSelect) return;\n onSelect(allSelected ? [] : data.map((r, i) => keyOf(r, i)));\n };\n\n return (\n <div className={`table-wrap ${className}`}>\n <table className={`table ${v} ${hoverable ? \"hoverable\" : \"\"}`}>\n <thead>\n <tr>\n {selectable && (\n <th className=\"row-check\" style={{ width: 36 }}>\n <Checkbox checked={allSelected} onChange={toggleAll} />\n </th>\n )}\n {columns.map((c) => {\n const sorted = sortKey === c.key;\n return (\n <th\n key={c.key}\n className={`${c.sortable ? \"sortable\" : \"\"} ${sorted ? \"sorted\" : \"\"}`}\n style={{ width: c.width, textAlign: c.align ?? \"left\" }}\n onClick={() => c.sortable && onSort?.(c.key)}\n >\n {c.title}\n {c.sortable && (\n <span className=\"sort-ind\">\n <Icon\n name={sorted ? (sortDir === \"asc\" ? \"chevUp\" : \"chevDown\") : \"chevDown\"}\n size={10}\n />\n </span>\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (selectable ? 1 : 0)} className=\"table-empty\">\n {empty}\n </td>\n </tr>\n ) : (\n data.map((row, i) => {\n const k = keyOf(row, i);\n const isSel = selected.includes(k);\n return (\n <tr\n key={k}\n className={`${onRowClick ? \"clickable\" : \"\"} ${isSel ? \"selected\" : \"\"}`}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n >\n {selectable && (\n <td\n className=\"row-check\"\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(k);\n }}\n >\n <Checkbox checked={isSel} onChange={() => toggleRow(k)} />\n </td>\n )}\n {columns.map((c) => {\n const val = c.dataIndex ? row[c.dataIndex] : undefined;\n return (\n <td key={c.key} style={{ textAlign: c.align ?? \"left\" }}>\n {c.render ? c.render(val, row, i) : (val as React.ReactNode)}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport interface TableProProps<Row = any> extends TableProps<Row> {\n /** Toolbar slot — search input, filter, etc. */\n toolbar?: React.ReactNode;\n /** Right-aligned actions slot in toolbar. */\n actions?: React.ReactNode;\n /** Footer slot — usually <Pagination />. */\n footer?: React.ReactNode;\n /** Title shown above the toolbar. */\n title?: React.ReactNode;\n}\n\n/**\n * `TablePro` — full-featured table card with toolbar, sortable/selectable rows,\n * variants, and a footer slot for pagination.\n */\nexport function TablePro<Row extends Record<string, any> = any>({\n toolbar,\n actions,\n footer,\n title,\n className = \"\",\n ...tableProps\n}: TableProProps<Row>) {\n return (\n <div className={`table-card ${className}`}>\n {(title || toolbar || actions) && (\n <div className=\"table-toolbar\">\n {title && <div className=\"table-title\">{title}</div>}\n <div className=\"table-toolbar-main\">{toolbar}</div>\n {actions && <div className=\"table-toolbar-actions\">{actions}</div>}\n </div>\n )}\n <Table {...tableProps} className=\"joined\" />\n {footer && <div className=\"table-footer\">{footer}</div>}\n </div>\n );\n}\n"]}
@@ -0,0 +1,118 @@
1
+ import { Checkbox } from './chunk-M6CGYGEO.js';
2
+ import { Icon } from './chunk-GEYMWUW6.js';
3
+ import './tokens-HWQ7KWPG.css';
4
+ import './shared-NJHRNLRH.css';
5
+ import './Table-ZDPGWLH3.css';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ function Table({
9
+ columns,
10
+ data,
11
+ rowKey,
12
+ variant,
13
+ hoverable = true,
14
+ striped,
15
+ sortKey,
16
+ sortDir = "asc",
17
+ onSort,
18
+ selectable,
19
+ selected = [],
20
+ onSelect,
21
+ onRowClick,
22
+ empty = "\u6682\u65E0\u6570\u636E",
23
+ className = ""
24
+ }) {
25
+ const keyOf = (row, i) => {
26
+ if (typeof rowKey === "function") return rowKey(row);
27
+ if (rowKey) return row[rowKey];
28
+ return i;
29
+ };
30
+ const v = variant ?? (striped ? "striped" : "default");
31
+ const allSelected = selectable && data.length > 0 && data.every((r, i) => selected.includes(keyOf(r, i)));
32
+ const toggleRow = (k) => {
33
+ if (!onSelect) return;
34
+ onSelect(selected.includes(k) ? selected.filter((x) => x !== k) : [...selected, k]);
35
+ };
36
+ const toggleAll = () => {
37
+ if (!onSelect) return;
38
+ onSelect(allSelected ? [] : data.map((r, i) => keyOf(r, i)));
39
+ };
40
+ return /* @__PURE__ */ jsx("div", { className: `table-wrap ${className}`, children: /* @__PURE__ */ jsxs("table", { className: `table ${v} ${hoverable ? "hoverable" : ""}`, children: [
41
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
42
+ selectable && /* @__PURE__ */ jsx("th", { className: "row-check", style: { width: 36 }, children: /* @__PURE__ */ jsx(Checkbox, { checked: allSelected, onChange: toggleAll }) }),
43
+ columns.map((c) => {
44
+ const sorted = sortKey === c.key;
45
+ return /* @__PURE__ */ jsxs(
46
+ "th",
47
+ {
48
+ className: `${c.sortable ? "sortable" : ""} ${sorted ? "sorted" : ""}`,
49
+ style: { width: c.width, textAlign: c.align ?? "left" },
50
+ onClick: () => c.sortable && onSort?.(c.key),
51
+ children: [
52
+ c.title,
53
+ c.sortable && /* @__PURE__ */ jsx("span", { className: "sort-ind", children: /* @__PURE__ */ jsx(
54
+ Icon,
55
+ {
56
+ name: sorted ? sortDir === "asc" ? "chevUp" : "chevDown" : "chevDown",
57
+ size: 10
58
+ }
59
+ ) })
60
+ ]
61
+ },
62
+ c.key
63
+ );
64
+ })
65
+ ] }) }),
66
+ /* @__PURE__ */ jsx("tbody", { children: data.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: columns.length + (selectable ? 1 : 0), className: "table-empty", children: empty }) }) : data.map((row, i) => {
67
+ const k = keyOf(row, i);
68
+ const isSel = selected.includes(k);
69
+ return /* @__PURE__ */ jsxs(
70
+ "tr",
71
+ {
72
+ className: `${onRowClick ? "clickable" : ""} ${isSel ? "selected" : ""}`,
73
+ onClick: onRowClick ? () => onRowClick(row, i) : void 0,
74
+ children: [
75
+ selectable && /* @__PURE__ */ jsx(
76
+ "td",
77
+ {
78
+ className: "row-check",
79
+ onClick: (e) => {
80
+ e.stopPropagation();
81
+ toggleRow(k);
82
+ },
83
+ children: /* @__PURE__ */ jsx(Checkbox, { checked: isSel, onChange: () => toggleRow(k) })
84
+ }
85
+ ),
86
+ columns.map((c) => {
87
+ const val = c.dataIndex ? row[c.dataIndex] : void 0;
88
+ return /* @__PURE__ */ jsx("td", { style: { textAlign: c.align ?? "left" }, children: c.render ? c.render(val, row, i) : val }, c.key);
89
+ })
90
+ ]
91
+ },
92
+ k
93
+ );
94
+ }) })
95
+ ] }) });
96
+ }
97
+ function TablePro({
98
+ toolbar,
99
+ actions,
100
+ footer,
101
+ title,
102
+ className = "",
103
+ ...tableProps
104
+ }) {
105
+ return /* @__PURE__ */ jsxs("div", { className: `table-card ${className}`, children: [
106
+ (title || toolbar || actions) && /* @__PURE__ */ jsxs("div", { className: "table-toolbar", children: [
107
+ title && /* @__PURE__ */ jsx("div", { className: "table-title", children: title }),
108
+ /* @__PURE__ */ jsx("div", { className: "table-toolbar-main", children: toolbar }),
109
+ actions && /* @__PURE__ */ jsx("div", { className: "table-toolbar-actions", children: actions })
110
+ ] }),
111
+ /* @__PURE__ */ jsx(Table, { ...tableProps, className: "joined" }),
112
+ footer && /* @__PURE__ */ jsx("div", { className: "table-footer", children: footer })
113
+ ] });
114
+ }
115
+
116
+ export { Table, TablePro };
117
+ //# sourceMappingURL=chunk-2W2AJUZW.js.map
118
+ //# sourceMappingURL=chunk-2W2AJUZW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Table/Table.tsx"],"names":[],"mappings":"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","file":"chunk-2W2AJUZW.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Table.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Checkbox } from \"../Checkbox\";\n\nexport interface TableColumn<Row = any> {\n key: string;\n title: React.ReactNode;\n /** Data key to read from row, or custom render. */\n dataIndex?: keyof Row;\n render?: (value: any, row: Row, index: number) => React.ReactNode;\n width?: number | string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n}\n\nexport type TableVariant = \"default\" | \"striped\" | \"embossed\" | \"cards\";\n\nexport interface TableProps<Row = any> {\n columns: TableColumn<Row>[];\n data: Row[];\n rowKey?: keyof Row | ((row: Row) => string | number);\n /** Visual variant. */\n variant?: TableVariant;\n /** Hoverable rows. */\n hoverable?: boolean;\n /** Striped rows (shortcut for variant=\"striped\"). */\n striped?: boolean;\n\n /** Sort state — controlled. */\n sortKey?: string;\n sortDir?: \"asc\" | \"desc\";\n onSort?: (key: string) => void;\n\n /** Row selection — controlled list of selected row keys. */\n selectable?: boolean;\n selected?: (string | number)[];\n onSelect?: (keys: (string | number)[]) => void;\n\n /** Called when user clicks a row. */\n onRowClick?: (row: Row, index: number) => void;\n /** Empty state. */\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** `Table` — neumorphic data table with sorting, selection and visual variants. */\nexport function Table<Row extends Record<string, any> = any>({\n columns,\n data,\n rowKey,\n variant,\n hoverable = true,\n striped,\n sortKey,\n sortDir = \"asc\",\n onSort,\n selectable,\n selected = [],\n onSelect,\n onRowClick,\n empty = \"暂无数据\",\n className = \"\",\n}: TableProps<Row>) {\n const keyOf = (row: Row, i: number): string | number => {\n if (typeof rowKey === \"function\") return rowKey(row);\n if (rowKey) return row[rowKey] as any;\n return i;\n };\n\n const v: TableVariant = variant ?? (striped ? \"striped\" : \"default\");\n const allSelected =\n selectable && data.length > 0 && data.every((r, i) => selected.includes(keyOf(r, i)));\n\n const toggleRow = (k: string | number) => {\n if (!onSelect) return;\n onSelect(selected.includes(k) ? selected.filter((x) => x !== k) : [...selected, k]);\n };\n const toggleAll = () => {\n if (!onSelect) return;\n onSelect(allSelected ? [] : data.map((r, i) => keyOf(r, i)));\n };\n\n return (\n <div className={`table-wrap ${className}`}>\n <table className={`table ${v} ${hoverable ? \"hoverable\" : \"\"}`}>\n <thead>\n <tr>\n {selectable && (\n <th className=\"row-check\" style={{ width: 36 }}>\n <Checkbox checked={allSelected} onChange={toggleAll} />\n </th>\n )}\n {columns.map((c) => {\n const sorted = sortKey === c.key;\n return (\n <th\n key={c.key}\n className={`${c.sortable ? \"sortable\" : \"\"} ${sorted ? \"sorted\" : \"\"}`}\n style={{ width: c.width, textAlign: c.align ?? \"left\" }}\n onClick={() => c.sortable && onSort?.(c.key)}\n >\n {c.title}\n {c.sortable && (\n <span className=\"sort-ind\">\n <Icon\n name={sorted ? (sortDir === \"asc\" ? \"chevUp\" : \"chevDown\") : \"chevDown\"}\n size={10}\n />\n </span>\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (selectable ? 1 : 0)} className=\"table-empty\">\n {empty}\n </td>\n </tr>\n ) : (\n data.map((row, i) => {\n const k = keyOf(row, i);\n const isSel = selected.includes(k);\n return (\n <tr\n key={k}\n className={`${onRowClick ? \"clickable\" : \"\"} ${isSel ? \"selected\" : \"\"}`}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n >\n {selectable && (\n <td\n className=\"row-check\"\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(k);\n }}\n >\n <Checkbox checked={isSel} onChange={() => toggleRow(k)} />\n </td>\n )}\n {columns.map((c) => {\n const val = c.dataIndex ? row[c.dataIndex] : undefined;\n return (\n <td key={c.key} style={{ textAlign: c.align ?? \"left\" }}>\n {c.render ? c.render(val, row, i) : (val as React.ReactNode)}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport interface TableProProps<Row = any> extends TableProps<Row> {\n /** Toolbar slot — search input, filter, etc. */\n toolbar?: React.ReactNode;\n /** Right-aligned actions slot in toolbar. */\n actions?: React.ReactNode;\n /** Footer slot — usually <Pagination />. */\n footer?: React.ReactNode;\n /** Title shown above the toolbar. */\n title?: React.ReactNode;\n}\n\n/**\n * `TablePro` — full-featured table card with toolbar, sortable/selectable rows,\n * variants, and a footer slot for pagination.\n */\nexport function TablePro<Row extends Record<string, any> = any>({\n toolbar,\n actions,\n footer,\n title,\n className = \"\",\n ...tableProps\n}: TableProProps<Row>) {\n return (\n <div className={`table-card ${className}`}>\n {(title || toolbar || actions) && (\n <div className=\"table-toolbar\">\n {title && <div className=\"table-title\">{title}</div>}\n <div className=\"table-toolbar-main\">{toolbar}</div>\n {actions && <div className=\"table-toolbar-actions\">{actions}</div>}\n </div>\n )}\n <Table {...tableProps} className=\"joined\" />\n {footer && <div className=\"table-footer\">{footer}</div>}\n </div>\n );\n}\n"]}
@@ -0,0 +1,53 @@
1
+ import { Icon } from './chunk-GEYMWUW6.js';
2
+ import './tokens-HWQ7KWPG.css';
3
+ import './shared-NJHRNLRH.css';
4
+ import './Tag-EYOY3UWG.css';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var Tag = ({
8
+ tone = "neutral",
9
+ solid,
10
+ dot,
11
+ removable,
12
+ onRemove,
13
+ className = "",
14
+ children,
15
+ ...rest
16
+ }) => {
17
+ const cls = ["tag", tone, solid && "solid", className].filter(Boolean).join(" ");
18
+ return /* @__PURE__ */ jsxs("span", { className: cls, ...rest, children: [
19
+ dot && /* @__PURE__ */ jsx("span", { className: "dot" }),
20
+ children,
21
+ removable && /* @__PURE__ */ jsx(
22
+ "span",
23
+ {
24
+ className: "x",
25
+ role: "button",
26
+ "aria-label": "Remove",
27
+ onClick: (e) => {
28
+ e.stopPropagation();
29
+ onRemove?.();
30
+ },
31
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: 11 })
32
+ }
33
+ )
34
+ ] });
35
+ };
36
+ var Badge = ({
37
+ count,
38
+ dot,
39
+ tone = "danger",
40
+ children,
41
+ className = "",
42
+ ...rest
43
+ }) => {
44
+ const show = dot || typeof count === "number" && count > 0;
45
+ return /* @__PURE__ */ jsxs("span", { className: `badge-wrap ${className}`, ...rest, children: [
46
+ children,
47
+ show && /* @__PURE__ */ jsx("span", { className: `badge ${tone} ${dot ? "dot" : ""}`, children: !dot && (count > 99 ? "99+" : count) })
48
+ ] });
49
+ };
50
+
51
+ export { Badge, Tag };
52
+ //# sourceMappingURL=chunk-3QWHDCHJ.js.map
53
+ //# sourceMappingURL=chunk-3QWHDCHJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Tag/Tag.tsx"],"names":[],"mappings":";;;;;;AAoBO,IAAM,MAA0B,CAAC;AAAA,EACtC,IAAA,GAAO,SAAA;AAAA,EACP,KAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,OAAA,EAAS,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC/E,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EACvB,QAAA,EAAA;AAAA,IAAA,GAAA,oBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,KAAA,EAAM,CAAA;AAAA,IAC7B,QAAA;AAAA,IACA,SAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,GAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,QAAA;AAAA,QACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,QAAA,IAAW;AAAA,QACb,CAAA;AAAA,QAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,GAAA,EAAI,MAAM,EAAA,EAAI;AAAA;AAAA;AAC3B,GAAA,EAEJ,CAAA;AAEJ;AAYO,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,IAAA,GAAO,GAAA,IAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,GAAQ,CAAA;AAC1D,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,cAAc,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EAC7C,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,wBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,GAAA,GAAM,KAAA,GAAQ,EAAE,IAC/C,QAAA,EAAA,CAAC,GAAA,KAAQ,KAAA,GAAS,EAAA,GAAK,QAAQ,KAAA,CAAA,EAClC;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-3QWHDCHJ.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tag.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport type TagTone = \"neutral\" | \"accent\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: TagTone;\n solid?: boolean;\n /** Render a leading colored dot. */\n dot?: boolean;\n /** Show a close button. */\n removable?: boolean;\n onRemove?: () => void;\n children?: React.ReactNode;\n}\n\n/** `Tag` — small label/pill. */\nexport const Tag: React.FC<TagProps> = ({\n tone = \"neutral\",\n solid,\n dot,\n removable,\n onRemove,\n className = \"\",\n children,\n ...rest\n}) => {\n const cls = [\"tag\", tone, solid && \"solid\", className].filter(Boolean).join(\" \");\n return (\n <span className={cls} {...rest}>\n {dot && <span className=\"dot\" />}\n {children}\n {removable && (\n <span\n className=\"x\"\n role=\"button\"\n aria-label=\"Remove\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n >\n <Icon name=\"x\" size={11} />\n </span>\n )}\n </span>\n );\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Numeric count — renders as \"99+\" if > 99. */\n count?: number;\n /** Show a tiny dot instead of a number. */\n dot?: boolean;\n tone?: TagTone;\n children?: React.ReactNode;\n}\n\n/** `Badge` — notification dot / count. Wrap around another element. */\nexport const Badge: React.FC<BadgeProps> = ({\n count,\n dot,\n tone = \"danger\",\n children,\n className = \"\",\n ...rest\n}) => {\n const show = dot || (typeof count === \"number\" && count > 0);\n return (\n <span className={`badge-wrap ${className}`} {...rest}>\n {children}\n {show && (\n <span className={`badge ${tone} ${dot ? \"dot\" : \"\"}`}>\n {!dot && (count! > 99 ? \"99+\" : count)}\n </span>\n )}\n </span>\n );\n};\n"]}