@fangxinyan/lumina 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/README.md +2 -1
  2. package/dist/{Alert-JJ7GB3UU.css → Alert-QBKIDY5H.css} +7 -0
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.d.cts +3 -2
  5. package/dist/Alert.d.ts +3 -2
  6. package/dist/Alert.js +2 -2
  7. package/dist/AutoComplete.cjs +5 -4
  8. package/dist/AutoComplete.d.cts +1 -1
  9. package/dist/AutoComplete.d.ts +1 -1
  10. package/dist/AutoComplete.js +4 -3
  11. package/dist/Badge-DPGLV3D3.css +22 -0
  12. package/dist/Badge.cjs +10 -0
  13. package/dist/Badge.d.cts +19 -0
  14. package/dist/Badge.d.ts +19 -0
  15. package/dist/Badge.js +1 -0
  16. package/dist/{Button-SDQD25AG.css → Button-4Z3Q6KII.css} +56 -36
  17. package/dist/Button.cjs +3 -7
  18. package/dist/Button.d.cts +11 -15
  19. package/dist/Button.d.ts +11 -15
  20. package/dist/Button.js +2 -2
  21. package/dist/Calendar.cjs +3 -3
  22. package/dist/Calendar.js +2 -2
  23. package/dist/{Card-RG7ECXL2.css → Card-6RMVIHWX.css} +7 -13
  24. package/dist/Card.cjs +2 -6
  25. package/dist/Card.d.cts +7 -11
  26. package/dist/Card.d.ts +7 -11
  27. package/dist/Card.js +1 -1
  28. package/dist/{Cascader-VSYEKQCG.css → Cascader-3BLLA7EN.css} +77 -0
  29. package/dist/Cascader.cjs +5 -3
  30. package/dist/Cascader.d.cts +22 -4
  31. package/dist/Cascader.d.ts +22 -4
  32. package/dist/Cascader.js +4 -2
  33. package/dist/{Checkbox-SKJATVSN.css → Checkbox-U5EUDSYS.css} +5 -35
  34. package/dist/Checkbox.cjs +3 -7
  35. package/dist/Checkbox.d.cts +1 -18
  36. package/dist/Checkbox.d.ts +1 -18
  37. package/dist/Checkbox.js +2 -2
  38. package/dist/Collapse-66U5YJFY.css +53 -0
  39. package/dist/Collapse.cjs +11 -0
  40. package/dist/Collapse.d.cts +32 -0
  41. package/dist/Collapse.d.ts +32 -0
  42. package/dist/Collapse.js +2 -0
  43. package/dist/CommandPalette.cjs +5 -4
  44. package/dist/CommandPalette.js +4 -3
  45. package/dist/Drawer.cjs +3 -3
  46. package/dist/Drawer.js +2 -2
  47. package/dist/Empty-DC2LPORC.css +28 -0
  48. package/dist/Empty.cjs +2 -10
  49. package/dist/Empty.d.cts +1 -62
  50. package/dist/Empty.d.ts +1 -62
  51. package/dist/Empty.js +1 -1
  52. package/dist/Form.d.cts +1 -1
  53. package/dist/Form.d.ts +1 -1
  54. package/dist/Icon.cjs +187 -3
  55. package/dist/Icon.d.cts +104 -3
  56. package/dist/Icon.d.ts +104 -3
  57. package/dist/Icon.js +1 -1
  58. package/dist/{Image-4MN34O6P.css → Image-MRYQCRQ5.css} +78 -0
  59. package/dist/Image.cjs +12 -4
  60. package/dist/Image.d.cts +79 -6
  61. package/dist/Image.d.ts +79 -6
  62. package/dist/Image.js +2 -2
  63. package/dist/{Input-33CAH4O6.css → Input-HUBJ55OH.css} +25 -42
  64. package/dist/Input.cjs +6 -5
  65. package/dist/Input.d.cts +23 -26
  66. package/dist/Input.d.ts +23 -26
  67. package/dist/Input.js +3 -2
  68. package/dist/InputNumber.cjs +5 -4
  69. package/dist/InputNumber.d.cts +1 -1
  70. package/dist/InputNumber.d.ts +1 -1
  71. package/dist/InputNumber.js +4 -3
  72. package/dist/Message-2MZ3LFPU.css +45 -0
  73. package/dist/Message.cjs +23 -0
  74. package/dist/Message.d.cts +54 -0
  75. package/dist/Message.d.ts +54 -0
  76. package/dist/Message.js +2 -0
  77. package/dist/{Modal-XSDMU4XJ.css → Modal-2QNDW4SO.css} +27 -0
  78. package/dist/Modal.cjs +4 -4
  79. package/dist/Modal.d.cts +29 -4
  80. package/dist/Modal.d.ts +29 -4
  81. package/dist/Modal.js +3 -3
  82. package/dist/Pagination.cjs +7 -5
  83. package/dist/Pagination.js +6 -4
  84. package/dist/Popover.cjs +2 -2
  85. package/dist/Popover.d.cts +11 -3
  86. package/dist/Popover.d.ts +11 -3
  87. package/dist/Popover.js +1 -1
  88. package/dist/Radio-GVFDPAZM.css +97 -0
  89. package/dist/Radio.cjs +14 -0
  90. package/dist/Radio.d.cts +36 -0
  91. package/dist/Radio.d.ts +36 -0
  92. package/dist/Radio.js +1 -0
  93. package/dist/{Select-J3CCVFJ7.css → Select-Z5VYPEEY.css} +33 -24
  94. package/dist/Select.cjs +6 -4
  95. package/dist/Select.d.cts +29 -7
  96. package/dist/Select.d.ts +29 -7
  97. package/dist/Select.js +5 -3
  98. package/dist/Skeleton-CVWH2VWN.css +40 -0
  99. package/dist/Skeleton.cjs +10 -0
  100. package/dist/Skeleton.d.cts +30 -0
  101. package/dist/Skeleton.d.ts +30 -0
  102. package/dist/Skeleton.js +1 -0
  103. package/dist/Spin-3GJNMSIH.css +94 -0
  104. package/dist/Spin.cjs +10 -0
  105. package/dist/Spin.d.cts +20 -0
  106. package/dist/Spin.d.ts +20 -0
  107. package/dist/Spin.js +1 -0
  108. package/dist/{Table-2LPTOUIR.css → Table-ATJJQLKU.css} +0 -53
  109. package/dist/Table.cjs +9 -11
  110. package/dist/Table.d.cts +2 -21
  111. package/dist/Table.d.ts +2 -21
  112. package/dist/Table.js +8 -6
  113. package/dist/TablePro-3XVHYLSL.css +45 -0
  114. package/dist/TablePro.cjs +19 -0
  115. package/dist/TablePro.d.cts +21 -0
  116. package/dist/TablePro.d.ts +21 -0
  117. package/dist/TablePro.js +10 -0
  118. package/dist/{Tabs-RHK6XAFF.css → Tabs-BLSNI2T5.css} +0 -34
  119. package/dist/Tabs.cjs +2 -6
  120. package/dist/Tabs.d.cts +1 -16
  121. package/dist/Tabs.d.ts +1 -16
  122. package/dist/Tabs.js +1 -1
  123. package/dist/Tag-HDYCDPFS.css +42 -0
  124. package/dist/Tag.cjs +3 -7
  125. package/dist/Tag.d.cts +5 -14
  126. package/dist/Tag.d.ts +5 -14
  127. package/dist/Tag.js +2 -2
  128. package/dist/Textarea-YNET7IBH.css +54 -0
  129. package/dist/Textarea.cjs +15 -0
  130. package/dist/Textarea.d.cts +25 -0
  131. package/dist/Textarea.d.ts +25 -0
  132. package/dist/Textarea.js +2 -0
  133. package/dist/Theme.cjs +14 -10
  134. package/dist/Theme.d.cts +29 -6
  135. package/dist/Theme.d.ts +29 -6
  136. package/dist/Theme.js +1 -1
  137. package/dist/{Timeline-RHZAZKZ7.css → Timeline-3ZHOHPXT.css} +2 -2
  138. package/dist/Timeline.cjs +3 -3
  139. package/dist/Timeline.d.cts +1 -1
  140. package/dist/Timeline.d.ts +1 -1
  141. package/dist/Timeline.js +2 -2
  142. package/dist/Tooltip.cjs +2 -2
  143. package/dist/Tooltip.d.cts +17 -4
  144. package/dist/Tooltip.d.ts +17 -4
  145. package/dist/Tooltip.js +1 -1
  146. package/dist/Typography.cjs +7 -7
  147. package/dist/Typography.d.cts +1 -0
  148. package/dist/Typography.d.ts +1 -0
  149. package/dist/Typography.js +2 -2
  150. package/dist/{chunk-OVZTG5CP.cjs → chunk-2HQCUBA7.cjs} +2 -2
  151. package/dist/{chunk-X2U7EKCS.cjs → chunk-3YJU3D5S.cjs} +28 -5
  152. package/dist/chunk-45VJGBGN.js +25 -0
  153. package/dist/{chunk-3D77MQHO.js → chunk-46VXFTEC.js} +3 -3
  154. package/dist/chunk-47VG2P34.js +393 -0
  155. package/dist/{chunk-LZU33BX6.cjs → chunk-5DKRY67M.cjs} +4 -20
  156. package/dist/{chunk-TWGQZX2R.js → chunk-5H5YP2TB.js} +4 -19
  157. package/dist/chunk-5MN3PMF4.cjs +240 -0
  158. package/dist/{chunk-5A3RT4KD.js → chunk-5TKC6IEN.js} +4 -55
  159. package/dist/{chunk-N57NXCNC.cjs → chunk-6HMTV6P4.cjs} +3 -44
  160. package/dist/{chunk-RF2EY5JS.cjs → chunk-6ZXQJRAT.cjs} +153 -34
  161. package/dist/{chunk-OFGDUCT7.cjs → chunk-7AG524YZ.cjs} +3 -3
  162. package/dist/chunk-7IYKKLV3.js +283 -0
  163. package/dist/{chunk-73RQBWWW.js → chunk-AAGF7K3L.js} +2 -2
  164. package/dist/chunk-AXZ7ELMA.js +41 -0
  165. package/dist/{chunk-R6BIF3FF.js → chunk-BPOOVO5T.js} +5 -23
  166. package/dist/{chunk-OI3CWXT3.js → chunk-BVQ77VRY.js} +3 -3
  167. package/dist/{chunk-UXH5PH3S.js → chunk-CETNCRZ4.js} +2 -2
  168. package/dist/chunk-DG5VQ6BO.cjs +28 -0
  169. package/dist/chunk-DWAN57G4.js +243 -0
  170. package/dist/chunk-ELNT3CFO.js +64 -0
  171. package/dist/{chunk-ULOJ5UEY.js → chunk-ET6DYQVZ.js} +1 -1
  172. package/dist/chunk-F6RYCBQG.js +25 -0
  173. package/dist/{chunk-RPFMQZA5.js → chunk-FBYUZOZP.js} +42 -31
  174. package/dist/chunk-FGW5GJ22.cjs +132 -0
  175. package/dist/{chunk-6Y5WRCPW.js → chunk-FWPBORRB.js} +1 -1
  176. package/dist/chunk-GENABQYA.cjs +47 -0
  177. package/dist/{chunk-TGHBKKSS.js → chunk-GIZU3H6H.js} +3 -43
  178. package/dist/chunk-GMN74OEY.cjs +63 -0
  179. package/dist/{chunk-Y47YTYQ3.cjs → chunk-H4LGWZMH.cjs} +159 -8
  180. package/dist/chunk-HKF2V5MM.cjs +214 -0
  181. package/dist/chunk-HLFH5HWR.js +81 -0
  182. package/dist/{chunk-4WRE4HQP.js → chunk-HWFM4MAT.js} +18 -6
  183. package/dist/{chunk-GY3BSHHS.cjs → chunk-HZSIUOCN.cjs} +2 -55
  184. package/dist/{chunk-D46EM4EN.js → chunk-I5WTQ5Y3.js} +4 -4
  185. package/dist/chunk-J2HZTJO6.js +26 -0
  186. package/dist/{chunk-NN25YMOL.js → chunk-J5ZGYQZK.js} +153 -35
  187. package/dist/{chunk-WRDKOSSM.js → chunk-JCEHZ336.js} +1 -1
  188. package/dist/chunk-JVUVOR6S.js +110 -0
  189. package/dist/chunk-K5IGFBDR.js +113 -0
  190. package/dist/{chunk-Q2KG6SQK.cjs → chunk-K7FV7W6U.cjs} +5 -5
  191. package/dist/{chunk-PWW64ZWO.cjs → chunk-KD4YYIIO.cjs} +1 -32
  192. package/dist/chunk-KGSADAOD.cjs +170 -0
  193. package/dist/{chunk-54YLXXS2.js → chunk-ME5BZ2WA.js} +2 -2
  194. package/dist/chunk-MPVCYU2K.cjs +104 -0
  195. package/dist/{chunk-EEMWQX3C.cjs → chunk-NTS5L4NQ.cjs} +3 -3
  196. package/dist/{chunk-WBK6XIDJ.js → chunk-OBEKX4VR.js} +2 -32
  197. package/dist/{chunk-EBNRZRWY.cjs → chunk-P6EZG2R7.cjs} +5 -5
  198. package/dist/{chunk-KYEY2LIB.cjs → chunk-P6P4DGLF.cjs} +3 -3
  199. package/dist/{chunk-GOBWKQCX.cjs → chunk-PULGVK2I.cjs} +3 -3
  200. package/dist/chunk-Q5SZIU7Z.cjs +47 -0
  201. package/dist/chunk-QKQHZIF3.cjs +86 -0
  202. package/dist/{chunk-3TWNBJFI.cjs → chunk-QP3VCSRY.cjs} +6 -6
  203. package/dist/{chunk-6ODY6MGL.cjs → chunk-R2TEDH2F.cjs} +5 -5
  204. package/dist/{chunk-YRZGXXWA.js → chunk-SQGPSMSK.js} +14 -20
  205. package/dist/{chunk-IW5LW6XS.js → chunk-TEEFR2FD.js} +28 -5
  206. package/dist/chunk-TGL5BGMR.js +218 -0
  207. package/dist/{chunk-62GU4OHH.cjs → chunk-TP567B3L.cjs} +13 -20
  208. package/dist/chunk-UKS23N3L.js +191 -0
  209. package/dist/chunk-USQ43DJ5.js +147 -0
  210. package/dist/{chunk-G2K6ETP4.cjs → chunk-UUHFKIWP.cjs} +18 -6
  211. package/dist/{chunk-2MNAZRWE.cjs → chunk-V272XR3F.cjs} +271 -2
  212. package/dist/chunk-VFFIE2VO.cjs +271 -0
  213. package/dist/{chunk-FIO65XYG.cjs → chunk-X5GCOMC3.cjs} +49 -38
  214. package/dist/{chunk-Y3ZSG3SJ.cjs → chunk-XSN4TLN5.cjs} +11 -30
  215. package/dist/chunk-ZKE73UQF.cjs +138 -0
  216. package/dist/index.cjs +342 -132
  217. package/dist/index.d.cts +26 -20
  218. package/dist/index.d.ts +26 -20
  219. package/dist/index.js +35 -29
  220. package/dist/styles.css +515 -230
  221. package/docs/llms/alert.md +4 -3
  222. package/docs/llms/badge.md +3 -3
  223. package/docs/llms/button.md +11 -41
  224. package/docs/llms/card.md +6 -12
  225. package/docs/llms/cascader.md +22 -0
  226. package/docs/llms/{accordion.md → collapse.md} +13 -11
  227. package/docs/llms/drawer.md +1 -1
  228. package/docs/llms/form.md +1 -1
  229. package/docs/llms/image.md +72 -1
  230. package/docs/llms/input.md +28 -18
  231. package/docs/llms/message.md +63 -0
  232. package/docs/llms/modal.md +30 -0
  233. package/docs/llms/popover.md +18 -1
  234. package/docs/llms/radio.md +37 -1
  235. package/docs/llms/select.md +22 -2
  236. package/docs/llms/spin.md +59 -0
  237. package/docs/llms/table.md +3 -3
  238. package/docs/llms/tag.md +3 -2
  239. package/docs/llms/theme.md +41 -4
  240. package/docs/llms/tooltip.md +16 -3
  241. package/docs/llms.md +8 -8
  242. package/package.json +32 -52
  243. package/dist/Accordion-REMDCQUD.css +0 -44
  244. package/dist/Accordion.cjs +0 -11
  245. package/dist/Accordion.d.cts +0 -33
  246. package/dist/Accordion.d.ts +0 -33
  247. package/dist/Accordion.js +0 -2
  248. package/dist/Empty-NQ72W3D7.css +0 -160
  249. package/dist/Tag-FGDY3W7E.css +0 -51
  250. package/dist/Toast-YSACW3EM.css +0 -45
  251. package/dist/Toast.cjs +0 -15
  252. package/dist/Toast.d.cts +0 -26
  253. package/dist/Toast.d.ts +0 -26
  254. package/dist/Toast.js +0 -2
  255. package/dist/chunk-32HBMXXV.cjs +0 -208
  256. package/dist/chunk-3XTHKAEY.js +0 -39
  257. package/dist/chunk-5M26OVVY.js +0 -90
  258. package/dist/chunk-DOMYUGJY.js +0 -132
  259. package/dist/chunk-DPNDHNKK.js +0 -185
  260. package/dist/chunk-G2XK57I7.cjs +0 -116
  261. package/dist/chunk-HBWO3QKW.js +0 -74
  262. package/dist/chunk-JVS5ZALZ.js +0 -123
  263. package/dist/chunk-LIGHV4RC.cjs +0 -121
  264. package/dist/chunk-MCTIA6RZ.js +0 -99
  265. package/dist/chunk-NC4YUEXM.cjs +0 -145
  266. package/dist/chunk-NJ6B22YJ.js +0 -170
  267. package/dist/chunk-W64ARHLJ.cjs +0 -62
  268. package/dist/chunk-ZFW6OYAO.cjs +0 -100
  269. package/docs/llms/spinner.md +0 -58
  270. package/docs/llms/toast.md +0 -51
@@ -0,0 +1,243 @@
1
+ import { Icon } from './chunk-47VG2P34.js';
2
+ import './tokens-BIIUTPKN.css';
3
+ import './shared-NJHRNLRH.css';
4
+ import './Image-MRYQCRQ5.css';
5
+ import * as React from 'react';
6
+ import ReactDOM from 'react-dom';
7
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
8
+
9
+ var Image = React.forwardRef(({
10
+ src,
11
+ alt,
12
+ width = 200,
13
+ height,
14
+ variant = "framed",
15
+ frame,
16
+ padding,
17
+ objectFit,
18
+ objectPosition,
19
+ preview,
20
+ hover = true,
21
+ placeholder,
22
+ imgProps,
23
+ className = "",
24
+ style,
25
+ ...rest
26
+ }, ref) => {
27
+ const [loaded, setLoaded] = React.useState(false);
28
+ const [err, setErr] = React.useState(false);
29
+ const [open, setOpen] = React.useState(false);
30
+ const visualFrame = frame ?? variant === "framed";
31
+ const resolvedHeight = height ?? (variant === "icon" ? width : 140);
32
+ const resolvedPadding = padding ?? (visualFrame ? void 0 : 0);
33
+ const resolvedObjectFit = objectFit ?? (variant === "icon" ? "contain" : "cover");
34
+ const canPreview = (preview ?? variant === "framed") && loaded && !err;
35
+ const {
36
+ className: imgClassName = "",
37
+ style: imgStyle,
38
+ onLoad,
39
+ onError,
40
+ ...imageRest
41
+ } = imgProps ?? {};
42
+ React.useEffect(() => {
43
+ setLoaded(false);
44
+ setErr(false);
45
+ setOpen(false);
46
+ }, [src]);
47
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
48
+ /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ ref,
52
+ className: `n-image ${variant} ${visualFrame ? "framed" : "unframed"} ${hover ? "hover" : ""} ${canPreview ? "clickable" : ""} ${className}`,
53
+ style: { width, ...resolvedPadding !== void 0 ? { padding: resolvedPadding } : {}, ...style },
54
+ onClick: () => canPreview && setOpen(true),
55
+ ...rest,
56
+ children: /* @__PURE__ */ jsxs("div", { className: "n-image-frame", style: { width: "100%", height: resolvedHeight }, children: [
57
+ !err && src && /* @__PURE__ */ jsx(
58
+ "img",
59
+ {
60
+ ...imageRest,
61
+ src,
62
+ alt,
63
+ className: imgClassName,
64
+ style: { objectFit: resolvedObjectFit, objectPosition, ...imgStyle },
65
+ onLoad: (event) => {
66
+ setLoaded(true);
67
+ onLoad?.(event);
68
+ },
69
+ onError: (event) => {
70
+ setErr(true);
71
+ onError?.(event);
72
+ }
73
+ }
74
+ ),
75
+ /* @__PURE__ */ jsx("div", { className: `n-image-placeholder ${loaded && !err ? "loaded" : ""}`, children: placeholder ?? /* @__PURE__ */ jsx(Icon, { name: "image", size: 28 }) }),
76
+ canPreview && /* @__PURE__ */ jsxs(Fragment, { children: [
77
+ /* @__PURE__ */ jsxs("div", { className: "image-hint", children: [
78
+ /* @__PURE__ */ jsx(Icon, { name: "eye", size: 14 }),
79
+ /* @__PURE__ */ jsx("span", { children: "\u70B9\u51FB\u67E5\u770B" })
80
+ ] }),
81
+ /* @__PURE__ */ jsxs("div", { className: "image-actions", onClick: (e) => e.stopPropagation(), children: [
82
+ /* @__PURE__ */ jsx(
83
+ "button",
84
+ {
85
+ type: "button",
86
+ className: "ia-btn",
87
+ onClick: () => setOpen(true),
88
+ "aria-label": "\u9884\u89C8",
89
+ children: /* @__PURE__ */ jsx(Icon, { name: "eye", size: 13 })
90
+ }
91
+ ),
92
+ src && /* @__PURE__ */ jsx("a", { className: "ia-btn", href: src, download: true, "aria-label": "\u4E0B\u8F7D", children: /* @__PURE__ */ jsx(Icon, { name: "download", size: 13 }) })
93
+ ] })
94
+ ] })
95
+ ] })
96
+ }
97
+ ),
98
+ open && typeof document !== "undefined" && ReactDOM.createPortal(
99
+ /* @__PURE__ */ jsx("div", { className: "image-preview-overlay", onClick: () => setOpen(false), children: /* @__PURE__ */ jsx("img", { src, alt, onClick: (e) => e.stopPropagation() }) }),
100
+ document.body
101
+ )
102
+ ] });
103
+ });
104
+ Image.displayName = "Image";
105
+ var ImageGrid = React.forwardRef(({
106
+ images,
107
+ columns,
108
+ itemHeight = 130,
109
+ minItemWidth = 160,
110
+ gap = 14,
111
+ imageProps,
112
+ className = "",
113
+ style,
114
+ ...rest
115
+ }, ref) => /* @__PURE__ */ jsx(
116
+ "div",
117
+ {
118
+ ref,
119
+ className,
120
+ style: {
121
+ display: "grid",
122
+ gap,
123
+ gridTemplateColumns: columns ? `repeat(${columns}, 1fr)` : `repeat(auto-fill, minmax(${typeof minItemWidth === "number" ? `${minItemWidth}px` : minItemWidth}, 1fr))`,
124
+ ...style
125
+ },
126
+ ...rest,
127
+ children: images.map((img, i) => /* @__PURE__ */ jsx(
128
+ Image,
129
+ {
130
+ ...imageProps,
131
+ ...img,
132
+ src: img.src,
133
+ alt: img.alt,
134
+ width: img.width ?? "100%",
135
+ height: img.height ?? itemHeight
136
+ },
137
+ i
138
+ ))
139
+ }
140
+ ));
141
+ ImageGrid.displayName = "ImageGrid";
142
+ var SpriteImage = React.forwardRef(({
143
+ src,
144
+ sprite,
145
+ alt,
146
+ width,
147
+ height,
148
+ scale = 1,
149
+ backgroundSize,
150
+ variant = "icon",
151
+ frame,
152
+ padding,
153
+ className = "",
154
+ style,
155
+ ...rest
156
+ }, ref) => {
157
+ const visualFrame = frame ?? variant === "framed";
158
+ const resolvedWidth = width ?? sprite.width * scale;
159
+ const resolvedHeight = height ?? sprite.height * scale;
160
+ const resolvedPadding = padding ?? (visualFrame ? void 0 : 0);
161
+ return /* @__PURE__ */ jsx(
162
+ "div",
163
+ {
164
+ ref,
165
+ className: `n-sprite-image ${variant} ${visualFrame ? "framed" : "unframed"} ${className}`,
166
+ role: alt ? "img" : void 0,
167
+ "aria-label": alt || void 0,
168
+ "aria-hidden": alt === "" ? true : void 0,
169
+ style: { width: resolvedWidth, ...resolvedPadding !== void 0 ? { padding: resolvedPadding } : {}, ...style },
170
+ ...rest,
171
+ children: /* @__PURE__ */ jsx("div", { className: "n-sprite-image-frame", style: { height: resolvedHeight }, children: /* @__PURE__ */ jsx(
172
+ "span",
173
+ {
174
+ className: "n-sprite-image-sprite",
175
+ style: {
176
+ width: sprite.width,
177
+ height: sprite.height,
178
+ backgroundImage: `url(${JSON.stringify(src)})`,
179
+ backgroundPosition: `${-sprite.x}px ${-sprite.y}px`,
180
+ backgroundSize,
181
+ transform: scale !== 1 ? `scale(${scale})` : void 0
182
+ }
183
+ }
184
+ ) })
185
+ }
186
+ );
187
+ });
188
+ SpriteImage.displayName = "SpriteImage";
189
+ var insetStyle = (inset) => {
190
+ if (inset == null) return { inset: 0 };
191
+ if (typeof inset === "number" || typeof inset === "string") return { inset };
192
+ return inset;
193
+ };
194
+ var LayeredImage = React.forwardRef(({
195
+ layers,
196
+ width = 64,
197
+ height = 64,
198
+ variant = "icon",
199
+ frame,
200
+ padding,
201
+ className = "",
202
+ style,
203
+ ...rest
204
+ }, ref) => {
205
+ const visualFrame = frame ?? variant === "framed";
206
+ const resolvedPadding = padding ?? (visualFrame ? void 0 : 0);
207
+ return /* @__PURE__ */ jsx(
208
+ "div",
209
+ {
210
+ ref,
211
+ className: `n-layered-image ${variant} ${visualFrame ? "framed" : "unframed"} ${className}`,
212
+ style: { width, ...resolvedPadding !== void 0 ? { padding: resolvedPadding } : {}, ...style },
213
+ ...rest,
214
+ children: /* @__PURE__ */ jsx("div", { className: "n-layered-image-frame", style: { height }, children: layers.map(({ src: layerSrc, alt: layerAlt = "", fit = "contain", inset, zIndex, className: layerClassName = "", style: layerStyle, ...layerRest }, index) => /* @__PURE__ */ jsx(
215
+ "span",
216
+ {
217
+ className: "n-layered-image-layer",
218
+ style: {
219
+ zIndex,
220
+ ...insetStyle(inset)
221
+ },
222
+ children: /* @__PURE__ */ jsx(
223
+ "img",
224
+ {
225
+ ...layerRest,
226
+ src: layerSrc,
227
+ alt: layerAlt,
228
+ className: layerClassName,
229
+ style: {
230
+ objectFit: fit,
231
+ ...layerStyle
232
+ }
233
+ }
234
+ )
235
+ },
236
+ `${layerSrc}-${index}`
237
+ )) })
238
+ }
239
+ );
240
+ });
241
+ LayeredImage.displayName = "LayeredImage";
242
+
243
+ export { Image, ImageGrid, LayeredImage, SpriteImage };
@@ -0,0 +1,64 @@
1
+ import './tokens-BIIUTPKN.css';
2
+ import './shared-NJHRNLRH.css';
3
+ import './Spin-3GJNMSIH.css';
4
+ import * as React from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ // src/components/Spin/Spin.tsx
8
+ var SIZE_PX = {
9
+ small: 14,
10
+ default: 20,
11
+ large: 32
12
+ };
13
+ var resolveSize = (size) => typeof size === "number" ? size : SIZE_PX[size];
14
+ var Spin = React.forwardRef(({
15
+ size = "default",
16
+ tone = "accent",
17
+ tip,
18
+ label,
19
+ variant = "ring",
20
+ spinning = true,
21
+ className = "",
22
+ style,
23
+ ...rest
24
+ }, ref) => {
25
+ const text = label ?? tip;
26
+ const px = resolveSize(size);
27
+ const indicatorClass = `spin ${variant} ${tone}`;
28
+ const rootClass = text ? `spin-wrap ${className}`.trim() : `${indicatorClass} ${className}`.trim();
29
+ const indicatorStyle = variant === "dots" ? { fontSize: px } : { width: px, height: px };
30
+ if (!spinning && !text) return null;
31
+ const renderIndicator = (extraProps = {}) => {
32
+ if (!spinning) return null;
33
+ const {
34
+ className: extraClassName,
35
+ style: extraStyle,
36
+ ...indicatorRest
37
+ } = extraProps;
38
+ const finalClassName = extraClassName ?? indicatorClass;
39
+ const finalStyle = { ...indicatorStyle, ...extraStyle };
40
+ if (variant === "dots") {
41
+ return /* @__PURE__ */ jsxs("span", { className: finalClassName, style: finalStyle, "aria-label": "Loading", ...indicatorRest, children: [
42
+ /* @__PURE__ */ jsx("i", {}),
43
+ /* @__PURE__ */ jsx("i", {}),
44
+ /* @__PURE__ */ jsx("i", {})
45
+ ] });
46
+ }
47
+ return /* @__PURE__ */ jsx("span", { className: finalClassName, style: finalStyle, "aria-label": "Loading", ...indicatorRest });
48
+ };
49
+ if (!text) {
50
+ return renderIndicator({
51
+ ref,
52
+ className: rootClass,
53
+ style: { ...indicatorStyle, ...style },
54
+ ...rest
55
+ });
56
+ }
57
+ return /* @__PURE__ */ jsxs("span", { ref, className: rootClass, style, ...rest, children: [
58
+ renderIndicator(),
59
+ /* @__PURE__ */ jsx("span", { className: "spin-label", children: text })
60
+ ] });
61
+ });
62
+ Spin.displayName = "Spin";
63
+
64
+ export { Spin };
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-NJ6B22YJ.js';
1
+ import { Icon } from './chunk-47VG2P34.js';
2
2
  import './tokens-BIIUTPKN.css';
3
3
  import './shared-NJHRNLRH.css';
4
4
  import './Typography-NKPWTJCV.css';
@@ -0,0 +1,25 @@
1
+ import './tokens-BIIUTPKN.css';
2
+ import './shared-NJHRNLRH.css';
3
+ import './Badge-DPGLV3D3.css';
4
+ import * as React from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ // src/components/Badge/Badge.tsx
8
+ var Badge = React.forwardRef(({
9
+ count,
10
+ max = 99,
11
+ dot,
12
+ tone = "danger",
13
+ children,
14
+ className = "",
15
+ ...rest
16
+ }, ref) => {
17
+ const show = dot || typeof count === "number" && count > 0;
18
+ return /* @__PURE__ */ jsxs("span", { ref, className: `badge-wrap ${className}`, ...rest, children: [
19
+ children,
20
+ show && /* @__PURE__ */ jsx("span", { className: `badge ${tone} ${dot ? "dot" : ""}`, children: !dot && (count > max ? `${max}+` : count) })
21
+ ] });
22
+ });
23
+ Badge.displayName = "Badge";
24
+
25
+ export { Badge };
@@ -1,18 +1,20 @@
1
- import { Tag } from './chunk-TWGQZX2R.js';
1
+ import { Tag } from './chunk-5H5YP2TB.js';
2
2
  import { useFloating } from './chunk-DUFRASGO.js';
3
- import { Icon } from './chunk-NJ6B22YJ.js';
3
+ import { Input } from './chunk-UKS23N3L.js';
4
+ import { Icon, renderIconSlot } from './chunk-47VG2P34.js';
4
5
  import './tokens-BIIUTPKN.css';
5
6
  import './shared-NJHRNLRH.css';
6
- import './Select-J3CCVFJ7.css';
7
+ import './Select-Z5VYPEEY.css';
7
8
  import * as React from 'react';
8
9
  import { createPortal } from 'react-dom';
9
10
  import { jsxs, jsx } from 'react/jsx-runtime';
10
11
 
11
12
  var isGroup = (it) => Array.isArray(it.options);
12
13
  var flatten = (items) => items.flatMap((it) => isGroup(it) ? it.options : [it]);
13
- var defaultFilter = (input, opt) => {
14
+ var defaultFilter = (input, opt, optionFilterProp) => {
14
15
  const q = input.toLowerCase();
15
- const txt = opt.text ?? (typeof opt.label === "string" ? opt.label : String(opt.value));
16
+ const propValue = optionFilterProp ? opt[optionFilterProp] : void 0;
17
+ const txt = propValue != null ? String(propValue) : opt.text ?? (typeof opt.label === "string" ? opt.label : String(opt.value));
16
18
  return txt.toLowerCase().includes(q);
17
19
  };
18
20
  var SelectInner = (props, forwardedRef) => {
@@ -23,8 +25,11 @@ var SelectInner = (props, forwardedRef) => {
23
25
  size = "md",
24
26
  invalid,
25
27
  clearable,
28
+ allowClear,
26
29
  searchable,
30
+ showSearch,
27
31
  filterOption,
32
+ optionFilterProp,
28
33
  loading,
29
34
  emptyContent,
30
35
  open: openProp,
@@ -32,6 +37,8 @@ var SelectInner = (props, forwardedRef) => {
32
37
  onOpenChange,
33
38
  className = "",
34
39
  menuClassName = "",
40
+ popupClassName = "",
41
+ dropdownClassName = "",
35
42
  onKeyDown: onRootKeyDown,
36
43
  multiple,
37
44
  value: _value,
@@ -42,6 +49,9 @@ var SelectInner = (props, forwardedRef) => {
42
49
  ...rest
43
50
  } = props;
44
51
  const isMulti = multiple === true;
52
+ const mergedClearable = clearable ?? !!allowClear;
53
+ const mergedSearchable = searchable ?? !!showSearch;
54
+ const mergedMenuClassName = [menuClassName, popupClassName, dropdownClassName].filter(Boolean).join(" ");
45
55
  const [innerSingle, setInnerSingle] = React.useState(
46
56
  !isMulti ? props.defaultValue : void 0
47
57
  );
@@ -89,17 +99,18 @@ var SelectInner = (props, forwardedRef) => {
89
99
  return () => document.removeEventListener("mousedown", h);
90
100
  }, [open]);
91
101
  React.useEffect(() => {
92
- if (open && searchable) {
102
+ if (open && mergedSearchable) {
93
103
  requestAnimationFrame(() => searchRef.current?.focus());
94
104
  }
95
105
  if (!open) setActiveIdx(-1);
96
- }, [open, searchable]);
106
+ }, [open, mergedSearchable]);
97
107
  const allFlat = React.useMemo(() => flatten(options), [options]);
98
108
  const filteredFlat = React.useMemo(() => {
99
109
  if (!query.trim()) return allFlat;
100
- const f = filterOption ?? defaultFilter;
110
+ if (filterOption === false) return allFlat;
111
+ const f = typeof filterOption === "function" ? filterOption : (input, option) => defaultFilter(input, option, optionFilterProp);
101
112
  return allFlat.filter((o) => f(query, o));
102
- }, [allFlat, query, filterOption]);
113
+ }, [allFlat, query, filterOption, optionFilterProp]);
103
114
  const filteredItems = React.useMemo(() => {
104
115
  if (!query.trim()) return options;
105
116
  return options.map((it) => {
@@ -131,8 +142,10 @@ var SelectInner = (props, forwardedRef) => {
131
142
  if (isMulti) {
132
143
  if (!multiControlled) setInnerMulti([]);
133
144
  props.onChange?.([]);
145
+ props.onClear?.();
134
146
  } else {
135
147
  if (!singleControlled) setInnerSingle(void 0);
148
+ props.onChange?.(void 0);
136
149
  props.onClear?.();
137
150
  }
138
151
  };
@@ -205,12 +218,12 @@ var SelectInner = (props, forwardedRef) => {
205
218
  const current = allFlat.find((o) => o.value === singleValue);
206
219
  if (!current) return /* @__PURE__ */ jsx("span", { className: "placeholder", children: placeholder });
207
220
  return /* @__PURE__ */ jsxs("span", { className: "select-value", children: [
208
- current.icon && /* @__PURE__ */ jsx(Icon, { name: current.icon, size: 14 }),
209
- /* @__PURE__ */ jsx("span", { children: current.label })
221
+ renderIconSlot(current.icon, { size: 14, className: "select-icon" }),
222
+ /* @__PURE__ */ jsx("span", { className: "select-value-label", children: current.label })
210
223
  ] });
211
224
  };
212
225
  const hasSelection = isMulti ? (multiValue?.length ?? 0) > 0 : singleValue !== void 0;
213
- const showClear = clearable && hasSelection && !disabled;
226
+ const showClear = mergedClearable && hasSelection && !disabled;
214
227
  let renderIdx = -1;
215
228
  const renderOption = (o) => {
216
229
  renderIdx += 1;
@@ -229,7 +242,7 @@ var SelectInner = (props, forwardedRef) => {
229
242
  onClick: () => isMulti ? toggleMulti(o) : pickSingle(o),
230
243
  children: [
231
244
  isMulti && /* @__PURE__ */ jsx("span", { className: `menu-check ${sel ? "on" : ""}`, "aria-hidden": true, children: sel && /* @__PURE__ */ jsx(Icon, { name: "check", size: 11, stroke: 3 }) }),
232
- o.icon && /* @__PURE__ */ jsx(Icon, { name: o.icon, size: 14 }),
245
+ renderIconSlot(o.icon, { size: 14, className: "menu-item-icon" }),
233
246
  /* @__PURE__ */ jsxs("span", { className: "menu-item-body", children: [
234
247
  /* @__PURE__ */ jsx("span", { className: "menu-item-label", children: o.label }),
235
248
  o.description && /* @__PURE__ */ jsx("span", { className: "menu-item-desc", children: o.description })
@@ -271,30 +284,28 @@ var SelectInner = (props, forwardedRef) => {
271
284
  "div",
272
285
  {
273
286
  ref: menuRef,
274
- className: `menu ${menuClassName}`,
287
+ className: `menu ${mergedMenuClassName}`,
275
288
  role: "listbox",
276
289
  "aria-multiselectable": isMulti || void 0,
277
290
  style: floatingStyle,
278
291
  children: [
279
- searchable && /* @__PURE__ */ jsxs("div", { className: "menu-search", children: [
280
- /* @__PURE__ */ jsx(Icon, { name: "search", size: 13 }),
281
- /* @__PURE__ */ jsx(
282
- "input",
283
- {
284
- ref: searchRef,
285
- type: "text",
286
- value: query,
287
- placeholder: "\u641C\u7D22...",
288
- onChange: (e) => setQuery(e.target.value),
289
- onKeyDown: (e) => {
290
- if (e.key === "Escape" || e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Enter") {
291
- e.preventDefault();
292
- onKeyDown(e);
293
- }
292
+ mergedSearchable && /* @__PURE__ */ jsx("div", { className: "menu-search", children: /* @__PURE__ */ jsx(
293
+ Input,
294
+ {
295
+ ref: searchRef,
296
+ size: "sm",
297
+ leadingIcon: "search",
298
+ value: query,
299
+ placeholder: "\u641C\u7D22...",
300
+ onValueChange: setQuery,
301
+ onKeyDown: (e) => {
302
+ if (e.key === "Escape" || e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Enter") {
303
+ e.preventDefault();
304
+ onKeyDown(e);
294
305
  }
295
306
  }
296
- )
297
- ] }),
307
+ }
308
+ ) }),
298
309
  loading ? /* @__PURE__ */ jsxs("div", { className: "menu-state", children: [
299
310
  /* @__PURE__ */ jsx("span", { className: "menu-state-ico", children: /* @__PURE__ */ jsx("span", { className: "spinner" }) }),
300
311
  /* @__PURE__ */ jsx("span", { children: "\u52A0\u8F7D\u4E2D..." })
@@ -0,0 +1,132 @@
1
+ 'use strict';
2
+
3
+ var chunkV272XR3F_cjs = require('./chunk-V272XR3F.cjs');
4
+ require('./tokens-BIIUTPKN.css');
5
+ require('./shared-NJHRNLRH.css');
6
+ require('./Collapse-66U5YJFY.css');
7
+ var React = require('react');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
30
+ var CollapsePanel = ({ open, children }) => {
31
+ const innerRef = React__namespace.useRef(null);
32
+ const [h, setH] = React__namespace.useState(0);
33
+ const [animated, setAnimated] = React__namespace.useState(false);
34
+ React__namespace.useLayoutEffect(() => {
35
+ const el = innerRef.current;
36
+ if (!el) return;
37
+ setH(el.scrollHeight);
38
+ const ro = new ResizeObserver(() => setH(el.scrollHeight));
39
+ ro.observe(el);
40
+ return () => ro.disconnect();
41
+ }, []);
42
+ React__namespace.useEffect(() => {
43
+ const id = requestAnimationFrame(() => setAnimated(true));
44
+ return () => cancelAnimationFrame(id);
45
+ }, []);
46
+ return /* @__PURE__ */ jsxRuntime.jsx(
47
+ "div",
48
+ {
49
+ className: "collapse-body",
50
+ style: { maxHeight: open ? h : 0, transition: animated ? void 0 : "none" },
51
+ "aria-hidden": !open,
52
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: innerRef, className: "collapse-body-inner", children })
53
+ }
54
+ );
55
+ };
56
+ var normalizeKeys = (value) => value == null ? [] : Array.isArray(value) ? value : [value];
57
+ var Collapse = React__namespace.forwardRef(({
58
+ items,
59
+ accordion = false,
60
+ multiple = true,
61
+ collapsible = "header",
62
+ activeKey,
63
+ defaultActiveKey,
64
+ onChange,
65
+ ghost = false,
66
+ size = "middle",
67
+ className = "",
68
+ ...rest
69
+ }, ref) => {
70
+ const [inner, setInner] = React__namespace.useState(() => normalizeKeys(defaultActiveKey));
71
+ const isControlled = activeKey !== void 0;
72
+ const keys = isControlled ? normalizeKeys(activeKey) : inner;
73
+ const singleOpen = accordion || !multiple;
74
+ const toggle = (k, itemDisabled) => {
75
+ if (collapsible === "disabled" || itemDisabled) return;
76
+ const next = keys.includes(k) ? keys.filter((x) => x !== k) : singleOpen ? [k] : [...keys, k];
77
+ if (!isControlled) setInner(next);
78
+ onChange?.(next);
79
+ };
80
+ return /* @__PURE__ */ jsxRuntime.jsx(
81
+ "div",
82
+ {
83
+ ref,
84
+ className: `collapse ${ghost ? "ghost" : ""} ${size} ${className}`,
85
+ ...rest,
86
+ children: items.map((it) => {
87
+ const open = keys.includes(it.key);
88
+ const isDisabled = it.disabled || collapsible === "disabled";
89
+ const headerClickable = collapsible === "header" && !isDisabled;
90
+ return /* @__PURE__ */ jsxRuntime.jsxs(
91
+ "div",
92
+ {
93
+ className: `collapse-item ${open ? "open" : ""} ${isDisabled ? "disabled" : ""} ${collapsible === "icon" ? "icon-only" : ""}`,
94
+ children: [
95
+ /* @__PURE__ */ jsxRuntime.jsxs(
96
+ "button",
97
+ {
98
+ type: "button",
99
+ className: "collapse-head",
100
+ disabled: isDisabled,
101
+ onClick: () => headerClickable && toggle(it.key, it.disabled),
102
+ "aria-expanded": open,
103
+ children: [
104
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: it.label }),
105
+ /* @__PURE__ */ jsxRuntime.jsx(
106
+ "span",
107
+ {
108
+ className: `collapse-chev${collapsible === "icon" ? " clickable" : ""}`,
109
+ onClick: (e) => {
110
+ if (collapsible === "icon" && !isDisabled) {
111
+ e.stopPropagation();
112
+ toggle(it.key, it.disabled);
113
+ }
114
+ },
115
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkV272XR3F_cjs.Icon, { name: "chevDown", size: 16 })
116
+ }
117
+ )
118
+ ]
119
+ }
120
+ ),
121
+ /* @__PURE__ */ jsxRuntime.jsx(CollapsePanel, { open, children: it.children })
122
+ ]
123
+ },
124
+ it.key
125
+ );
126
+ })
127
+ }
128
+ );
129
+ });
130
+ Collapse.displayName = "Collapse";
131
+
132
+ exports.Collapse = Collapse;
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-NJ6B22YJ.js';
1
+ import { Icon } from './chunk-47VG2P34.js';
2
2
  import './tokens-BIIUTPKN.css';
3
3
  import './shared-NJHRNLRH.css';
4
4
  import './Calendar-LHZELUDL.css';