@fangxinyan/lumina 0.4.0 → 0.5.1

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 (199) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.js +2 -2
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.js +2 -2
  5. package/dist/AutoComplete.cjs +5 -5
  6. package/dist/AutoComplete.js +4 -4
  7. package/dist/Button.cjs +4 -4
  8. package/dist/Button.js +2 -2
  9. package/dist/Calendar.cjs +3 -3
  10. package/dist/Calendar.js +2 -2
  11. package/dist/Cascader.cjs +4 -4
  12. package/dist/Cascader.js +3 -3
  13. package/dist/Checkbox.cjs +4 -4
  14. package/dist/Checkbox.js +2 -2
  15. package/dist/ColorPicker.cjs +3 -3
  16. package/dist/ColorPicker.js +2 -2
  17. package/dist/CommandPalette.cjs +4 -4
  18. package/dist/CommandPalette.js +3 -3
  19. package/dist/Drawer.cjs +3 -3
  20. package/dist/Drawer.js +2 -2
  21. package/dist/Icon.cjs +3 -3
  22. package/dist/Icon.d.cts +1 -1
  23. package/dist/Icon.d.ts +1 -1
  24. package/dist/Icon.js +1 -1
  25. package/dist/Image.cjs +4 -4
  26. package/dist/Image.js +2 -2
  27. package/dist/Input.cjs +4 -4
  28. package/dist/Input.js +2 -2
  29. package/dist/InputNumber.cjs +4 -4
  30. package/dist/InputNumber.js +3 -3
  31. package/dist/Modal.cjs +4 -4
  32. package/dist/Modal.js +3 -3
  33. package/dist/Pagination.cjs +6 -6
  34. package/dist/Pagination.js +5 -5
  35. package/dist/Popover-DVGQGWX6.css +103 -0
  36. package/dist/Popover.cjs +3 -3
  37. package/dist/Popover.d.cts +23 -1
  38. package/dist/Popover.d.ts +23 -1
  39. package/dist/Popover.js +2 -2
  40. package/dist/Select.cjs +5 -5
  41. package/dist/Select.js +4 -4
  42. package/dist/{Slider-X4PVA65R.css → Slider-3JKA5EW6.css} +44 -25
  43. package/dist/Slider.cjs +2 -2
  44. package/dist/Slider.d.cts +8 -5
  45. package/dist/Slider.d.ts +8 -5
  46. package/dist/Slider.js +1 -1
  47. package/dist/Table.cjs +9 -9
  48. package/dist/Table.js +7 -7
  49. package/dist/Tag.cjs +4 -4
  50. package/dist/Tag.js +2 -2
  51. package/dist/Timeline-RHZAZKZ7.css +136 -0
  52. package/dist/Timeline.cjs +13 -0
  53. package/dist/Timeline.cjs.map +1 -0
  54. package/dist/Timeline.d.cts +38 -0
  55. package/dist/Timeline.d.ts +38 -0
  56. package/dist/Timeline.js +4 -0
  57. package/dist/Timeline.js.map +1 -0
  58. package/dist/{Toast-6PVSAXQ5.css → Toast-YSACW3EM.css} +2 -2
  59. package/dist/Toast.cjs +4 -4
  60. package/dist/Toast.js +2 -2
  61. package/dist/{Tooltip-ST24GY4S.css → Tooltip-DMKUPC24.css} +1 -0
  62. package/dist/Tooltip.cjs +3 -3
  63. package/dist/Tooltip.js +2 -2
  64. package/dist/Typography.cjs +7 -7
  65. package/dist/Typography.js +2 -2
  66. package/dist/{chunk-BCPAY65C.cjs → chunk-2D5VCIJZ.cjs} +7 -7
  67. package/dist/{chunk-BCPAY65C.cjs.map → chunk-2D5VCIJZ.cjs.map} +1 -1
  68. package/dist/{chunk-LLNEDEST.cjs → chunk-2OBQOEFD.cjs} +4 -4
  69. package/dist/{chunk-LLNEDEST.cjs.map → chunk-2OBQOEFD.cjs.map} +1 -1
  70. package/dist/chunk-2TZ2R7L2.js +235 -0
  71. package/dist/chunk-2TZ2R7L2.js.map +1 -0
  72. package/dist/{chunk-N73JGXYZ.cjs → chunk-3ES5QPAF.cjs} +4 -4
  73. package/dist/{chunk-N73JGXYZ.cjs.map → chunk-3ES5QPAF.cjs.map} +1 -1
  74. package/dist/{chunk-YCHUHMNP.cjs → chunk-3KQKEE5O.cjs} +5 -4
  75. package/dist/chunk-3KQKEE5O.cjs.map +1 -0
  76. package/dist/{chunk-RZ2E3XEU.cjs → chunk-3XIDJEYR.cjs} +21 -6
  77. package/dist/chunk-3XIDJEYR.cjs.map +1 -0
  78. package/dist/{chunk-IOWREUEP.js → chunk-3YYOYDKI.js} +4 -4
  79. package/dist/{chunk-IOWREUEP.js.map → chunk-3YYOYDKI.js.map} +1 -1
  80. package/dist/{chunk-PKXXR76Q.js → chunk-4ADDAZK3.js} +3 -3
  81. package/dist/{chunk-PKXXR76Q.js.map → chunk-4ADDAZK3.js.map} +1 -1
  82. package/dist/{chunk-TZLM5GF4.js → chunk-5SJJI3HL.js} +4 -4
  83. package/dist/{chunk-TZLM5GF4.js.map → chunk-5SJJI3HL.js.map} +1 -1
  84. package/dist/{chunk-2ENTRT7R.cjs → chunk-AJEF2ZB7.cjs} +16 -6
  85. package/dist/chunk-AJEF2ZB7.cjs.map +1 -0
  86. package/dist/{chunk-V2DIQ3RH.js → chunk-ANAQER3T.js} +21 -6
  87. package/dist/chunk-ANAQER3T.js.map +1 -0
  88. package/dist/{chunk-FXQGPHK2.js → chunk-AZRJZM7W.js} +3 -3
  89. package/dist/{chunk-FXQGPHK2.js.map → chunk-AZRJZM7W.js.map} +1 -1
  90. package/dist/{chunk-3BZ47QNV.cjs → chunk-BIXW4ZYW.cjs} +7 -7
  91. package/dist/{chunk-3BZ47QNV.cjs.map → chunk-BIXW4ZYW.cjs.map} +1 -1
  92. package/dist/{chunk-IJA26LRY.cjs → chunk-BPDWBY6Y.cjs} +4 -4
  93. package/dist/{chunk-IJA26LRY.cjs.map → chunk-BPDWBY6Y.cjs.map} +1 -1
  94. package/dist/{chunk-77TZHI76.cjs → chunk-D26YHP2Y.cjs} +7 -7
  95. package/dist/{chunk-77TZHI76.cjs.map → chunk-D26YHP2Y.cjs.map} +1 -1
  96. package/dist/{chunk-T4PI2ZX7.cjs → chunk-D3GZSL2B.cjs} +16 -17
  97. package/dist/chunk-D3GZSL2B.cjs.map +1 -0
  98. package/dist/{chunk-VQBZKRIB.cjs → chunk-DF5K2BZ2.cjs} +6 -6
  99. package/dist/{chunk-VQBZKRIB.cjs.map → chunk-DF5K2BZ2.cjs.map} +1 -1
  100. package/dist/{chunk-7M7NAMR5.js → chunk-DLGFIRVW.js} +14 -4
  101. package/dist/chunk-DLGFIRVW.js.map +1 -0
  102. package/dist/{chunk-6Z24VO3K.js → chunk-E7UQSFKF.js} +3 -3
  103. package/dist/{chunk-6Z24VO3K.js.map → chunk-E7UQSFKF.js.map} +1 -1
  104. package/dist/{chunk-KW7Z4IQC.js → chunk-FLPHVK45.js} +3 -3
  105. package/dist/{chunk-KW7Z4IQC.js.map → chunk-FLPHVK45.js.map} +1 -1
  106. package/dist/{chunk-WUOFJPZ4.js → chunk-GB5NAXBP.js} +3 -3
  107. package/dist/{chunk-WUOFJPZ4.js.map → chunk-GB5NAXBP.js.map} +1 -1
  108. package/dist/{chunk-SMHXSEBD.cjs → chunk-GT45MQAK.cjs} +7 -7
  109. package/dist/{chunk-SMHXSEBD.cjs.map → chunk-GT45MQAK.cjs.map} +1 -1
  110. package/dist/{chunk-TZXEZFCI.cjs → chunk-H2QTLV5T.cjs} +5 -5
  111. package/dist/{chunk-TZXEZFCI.cjs.map → chunk-H2QTLV5T.cjs.map} +1 -1
  112. package/dist/{chunk-FFZLSY2N.js → chunk-HHPYY4LH.js} +4 -4
  113. package/dist/{chunk-FFZLSY2N.js.map → chunk-HHPYY4LH.js.map} +1 -1
  114. package/dist/{chunk-XYVJ3FBQ.cjs → chunk-I7UJA6RM.cjs} +5 -5
  115. package/dist/{chunk-XYVJ3FBQ.cjs.map → chunk-I7UJA6RM.cjs.map} +1 -1
  116. package/dist/{chunk-YFBHVTKN.cjs → chunk-IJIQ4H6C.cjs} +7 -7
  117. package/dist/{chunk-YFBHVTKN.cjs.map → chunk-IJIQ4H6C.cjs.map} +1 -1
  118. package/dist/{chunk-LXNR6TQK.js → chunk-ILVNMES2.js} +3 -3
  119. package/dist/{chunk-LXNR6TQK.js.map → chunk-ILVNMES2.js.map} +1 -1
  120. package/dist/{chunk-JXHMJUVI.js → chunk-JELHUUM5.js} +3 -3
  121. package/dist/{chunk-JXHMJUVI.js.map → chunk-JELHUUM5.js.map} +1 -1
  122. package/dist/{chunk-CTYW42GG.js → chunk-JQZFOIX6.js} +6 -6
  123. package/dist/{chunk-CTYW42GG.js.map → chunk-JQZFOIX6.js.map} +1 -1
  124. package/dist/{chunk-I7WLFADD.js → chunk-LWN2PXW7.js} +3 -3
  125. package/dist/{chunk-I7WLFADD.js.map → chunk-LWN2PXW7.js.map} +1 -1
  126. package/dist/{chunk-I2HHC6QW.js → chunk-N5W6XJI2.js} +3 -3
  127. package/dist/{chunk-I2HHC6QW.js.map → chunk-N5W6XJI2.js.map} +1 -1
  128. package/dist/chunk-N6ZLZUBF.cjs +257 -0
  129. package/dist/chunk-N6ZLZUBF.cjs.map +1 -0
  130. package/dist/chunk-P2AV5BD7.cjs +137 -0
  131. package/dist/chunk-P2AV5BD7.cjs.map +1 -0
  132. package/dist/{chunk-ZFJHUOFU.js → chunk-P4XPESR2.js} +4 -4
  133. package/dist/{chunk-ZFJHUOFU.js.map → chunk-P4XPESR2.js.map} +1 -1
  134. package/dist/{chunk-AESLEYST.js → chunk-RJNGXR5Y.js} +4 -4
  135. package/dist/{chunk-AESLEYST.js.map → chunk-RJNGXR5Y.js.map} +1 -1
  136. package/dist/chunk-S3NIRNWM.js +86 -0
  137. package/dist/chunk-S3NIRNWM.js.map +1 -0
  138. package/dist/{chunk-HJIKU6MF.cjs → chunk-S7RFIMA3.cjs} +4 -4
  139. package/dist/{chunk-HJIKU6MF.cjs.map → chunk-S7RFIMA3.cjs.map} +1 -1
  140. package/dist/chunk-TAYFI4RG.cjs +108 -0
  141. package/dist/chunk-TAYFI4RG.cjs.map +1 -0
  142. package/dist/{chunk-OZVPJWXO.cjs → chunk-TCPTBLDV.cjs} +5 -5
  143. package/dist/{chunk-OZVPJWXO.cjs.map → chunk-TCPTBLDV.cjs.map} +1 -1
  144. package/dist/{chunk-E62JFAHW.js → chunk-TGUDT3GK.js} +4 -4
  145. package/dist/{chunk-E62JFAHW.js.map → chunk-TGUDT3GK.js.map} +1 -1
  146. package/dist/{chunk-XCYE4OQV.js → chunk-TMRSI543.js} +3 -3
  147. package/dist/{chunk-XCYE4OQV.js.map → chunk-TMRSI543.js.map} +1 -1
  148. package/dist/{chunk-RWHWEQQX.cjs → chunk-U7TAQLPN.cjs} +6 -6
  149. package/dist/{chunk-RWHWEQQX.cjs.map → chunk-U7TAQLPN.cjs.map} +1 -1
  150. package/dist/chunk-UEHONGPZ.js +115 -0
  151. package/dist/chunk-UEHONGPZ.js.map +1 -0
  152. package/dist/{chunk-NN7WMXY4.cjs → chunk-UUY7EDVJ.cjs} +4 -4
  153. package/dist/{chunk-NN7WMXY4.cjs.map → chunk-UUY7EDVJ.cjs.map} +1 -1
  154. package/dist/{chunk-OM76QWUN.js → chunk-UXABXEWT.js} +3 -3
  155. package/dist/{chunk-OM76QWUN.js.map → chunk-UXABXEWT.js.map} +1 -1
  156. package/dist/{chunk-MDQNUKCP.cjs → chunk-V6466VMN.cjs} +14 -14
  157. package/dist/{chunk-MDQNUKCP.cjs.map → chunk-V6466VMN.cjs.map} +1 -1
  158. package/dist/{chunk-O7C6S644.js → chunk-WBL7LOIH.js} +3 -3
  159. package/dist/{chunk-O7C6S644.js.map → chunk-WBL7LOIH.js.map} +1 -1
  160. package/dist/{chunk-RQV7SMIZ.cjs → chunk-WKNVNN2K.cjs} +5 -5
  161. package/dist/{chunk-RQV7SMIZ.cjs.map → chunk-WKNVNN2K.cjs.map} +1 -1
  162. package/dist/{chunk-HXSAH4Y6.cjs → chunk-WR3FML2W.cjs} +7 -7
  163. package/dist/{chunk-HXSAH4Y6.cjs.map → chunk-WR3FML2W.cjs.map} +1 -1
  164. package/dist/{chunk-QOGROEVD.js → chunk-X3JG3IR6.js} +6 -5
  165. package/dist/chunk-X3JG3IR6.js.map +1 -0
  166. package/dist/{chunk-6XZ362VL.js → chunk-XT7RXXOE.js} +6 -7
  167. package/dist/chunk-XT7RXXOE.js.map +1 -0
  168. package/dist/{chunk-WVBFQB26.cjs → chunk-ZSR5JSYZ.cjs} +8 -8
  169. package/dist/{chunk-WVBFQB26.cjs.map → chunk-ZSR5JSYZ.cjs.map} +1 -1
  170. package/dist/index.cjs +67 -62
  171. package/dist/index.cjs.map +1 -1
  172. package/dist/index.d.cts +3 -2
  173. package/dist/index.d.ts +3 -2
  174. package/dist/index.js +27 -26
  175. package/dist/index.js.map +1 -1
  176. package/dist/styles.css +124 -29
  177. package/docs/llms/form.md +26 -0
  178. package/docs/llms/popover.md +138 -6
  179. package/docs/llms/slider.md +13 -2
  180. package/docs/llms/timeline.md +140 -0
  181. package/docs/llms.md +5 -4
  182. package/package.json +5 -1
  183. package/dist/Popover-NYEKT5CQ.css +0 -10
  184. package/dist/chunk-2ENTRT7R.cjs.map +0 -1
  185. package/dist/chunk-3UU2PUK4.js +0 -66
  186. package/dist/chunk-3UU2PUK4.js.map +0 -1
  187. package/dist/chunk-6XZ362VL.js.map +0 -1
  188. package/dist/chunk-7M7NAMR5.js.map +0 -1
  189. package/dist/chunk-B5JH7NRZ.cjs +0 -133
  190. package/dist/chunk-B5JH7NRZ.cjs.map +0 -1
  191. package/dist/chunk-O2HMH5BI.cjs +0 -88
  192. package/dist/chunk-O2HMH5BI.cjs.map +0 -1
  193. package/dist/chunk-QJGKI2BD.js +0 -111
  194. package/dist/chunk-QJGKI2BD.js.map +0 -1
  195. package/dist/chunk-QOGROEVD.js.map +0 -1
  196. package/dist/chunk-RZ2E3XEU.cjs.map +0 -1
  197. package/dist/chunk-T4PI2ZX7.cjs.map +0 -1
  198. package/dist/chunk-V2DIQ3RH.js.map +0 -1
  199. package/dist/chunk-YCHUHMNP.cjs.map +0 -1
@@ -0,0 +1,257 @@
1
+ 'use strict';
2
+
3
+ require('./tokens-BIIUTPKN.css');
4
+ require('./shared-NJHRNLRH.css');
5
+ require('./Slider-3JKA5EW6.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/Slider/Slider.tsx
30
+ function clamp(v, lo, hi) {
31
+ return Math.max(lo, Math.min(hi, v));
32
+ }
33
+ function snap(raw, step, min) {
34
+ return Math.round((raw - min) / step) * step + min;
35
+ }
36
+ function lerpColor(colors, t) {
37
+ const pos = Math.max(0, Math.min(1, t)) * (colors.length - 1);
38
+ const i = Math.min(Math.floor(pos), colors.length - 2);
39
+ const frac = pos - i;
40
+ if (frac === 0) return colors[i];
41
+ return `color-mix(in oklch, ${colors[i + 1]} ${Math.round(frac * 100)}%, ${colors[i]})`;
42
+ }
43
+ var Slider = React__namespace.forwardRef(
44
+ (props, ref) => {
45
+ const {
46
+ min = 0,
47
+ max = 100,
48
+ step = 1,
49
+ disabled,
50
+ showValue,
51
+ tone = "accent",
52
+ colors,
53
+ marks,
54
+ className = ""
55
+ } = props;
56
+ const range = props.range === true;
57
+ const controlled = props.value;
58
+ const defaultVal = props.defaultValue;
59
+ const onChange = props.onChange;
60
+ const initRef = React__namespace.useRef(
61
+ defaultVal !== void 0 ? Array.isArray(defaultVal) ? [...defaultVal] : [defaultVal] : range ? [min, max] : [min]
62
+ );
63
+ const [inner, setInner] = React__namespace.useState(initRef.current);
64
+ const isControlled = controlled !== void 0;
65
+ const vals = isControlled ? Array.isArray(controlled) ? controlled : [controlled] : inner;
66
+ const valsRef = React__namespace.useRef(vals);
67
+ valsRef.current = vals;
68
+ const trackRef = React__namespace.useRef(null);
69
+ const thumbEls = React__namespace.useRef([]);
70
+ const dragging = React__namespace.useRef(null);
71
+ const pct = (n) => (n - min) / (max - min) * 100;
72
+ const commit = React__namespace.useCallback(
73
+ (next) => {
74
+ if (!isControlled) setInner(next);
75
+ if (range) {
76
+ onChange?.([next[0], next[1]]);
77
+ } else {
78
+ onChange?.(next[0]);
79
+ }
80
+ },
81
+ [isControlled, range, onChange]
82
+ );
83
+ const setAt = React__namespace.useCallback(
84
+ (index, raw) => {
85
+ const snapped = snap(clamp(raw, min, max), step, min);
86
+ const clamped = clamp(snapped, min, max);
87
+ const out = [...valsRef.current];
88
+ out[index] = clamped;
89
+ if (range && out.length === 2 && out[0] > out[1]) out.sort((a, b) => a - b);
90
+ commit(out);
91
+ },
92
+ [min, max, step, range, commit]
93
+ );
94
+ const valFromX = React__namespace.useCallback(
95
+ (clientX) => {
96
+ const rect = trackRef.current?.getBoundingClientRect();
97
+ if (!rect) return min;
98
+ const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);
99
+ return min + ratio * (max - min);
100
+ },
101
+ [min, max]
102
+ );
103
+ const closerIndex = React__namespace.useCallback(
104
+ (target) => {
105
+ const v = valsRef.current;
106
+ if (!range || v.length < 2) return 0;
107
+ const d0 = Math.abs(v[0] - target);
108
+ const d1 = Math.abs(v[1] - target);
109
+ if (d0 === d1) return target < v[0] ? 0 : 1;
110
+ return d0 < d1 ? 0 : 1;
111
+ },
112
+ [range]
113
+ );
114
+ const onPointerDown = React__namespace.useCallback(
115
+ (e) => {
116
+ if (disabled) return;
117
+ e.preventDefault();
118
+ const val = valFromX(e.clientX);
119
+ const idx = closerIndex(val);
120
+ dragging.current = idx;
121
+ setAt(idx, val);
122
+ trackRef.current?.setPointerCapture(e.pointerId);
123
+ thumbEls.current[idx]?.focus();
124
+ },
125
+ [disabled, valFromX, closerIndex, setAt]
126
+ );
127
+ const onPointerMove = React__namespace.useCallback(
128
+ (e) => {
129
+ if (dragging.current === null) return;
130
+ setAt(dragging.current, valFromX(e.clientX));
131
+ },
132
+ [valFromX, setAt]
133
+ );
134
+ const onPointerUp = React__namespace.useCallback(() => {
135
+ dragging.current = null;
136
+ }, []);
137
+ const handleKey = React__namespace.useCallback(
138
+ (index, e) => {
139
+ if (disabled) return;
140
+ let delta = 0;
141
+ if (e.key === "ArrowRight" || e.key === "ArrowUp") delta = step;
142
+ else if (e.key === "ArrowLeft" || e.key === "ArrowDown") delta = -step;
143
+ else if (e.key === "Home") {
144
+ setAt(index, min);
145
+ return;
146
+ } else if (e.key === "End") {
147
+ setAt(index, max);
148
+ return;
149
+ } else return;
150
+ e.preventDefault();
151
+ setAt(index, valsRef.current[index] + delta);
152
+ },
153
+ [disabled, step, min, max, setAt]
154
+ );
155
+ const handleMarkClick = React__namespace.useCallback(
156
+ (mark) => {
157
+ if (disabled) return;
158
+ setAt(closerIndex(mark), mark);
159
+ },
160
+ [disabled, closerIndex, setAt]
161
+ );
162
+ const fillLeft = range ? pct(Math.min(vals[0], vals[1])) : 0;
163
+ const fillRight = range ? 100 - pct(Math.max(vals[0], vals[1])) : 100 - pct(vals[0]);
164
+ const hasGradient = colors && colors.length >= 2;
165
+ const fillStyle = {
166
+ left: `${fillLeft}%`,
167
+ right: `${fillRight}%`
168
+ };
169
+ if (hasGradient) {
170
+ const w = 100 - fillLeft - fillRight;
171
+ if (w > 0) {
172
+ const stops = colors.map((c, i) => {
173
+ const orig = i / (colors.length - 1) * 100;
174
+ return `${c} ${((orig - fillLeft) / w * 100).toFixed(2)}%`;
175
+ }).join(", ");
176
+ fillStyle.background = `linear-gradient(to right, ${stops})`;
177
+ fillStyle.boxShadow = "none";
178
+ }
179
+ }
180
+ return /* @__PURE__ */ jsxRuntime.jsxs(
181
+ "div",
182
+ {
183
+ ref,
184
+ className: `slider ${range ? "range" : ""} ${hasGradient ? "gradient" : tone} ${disabled ? "disabled" : ""} ${marks ? "has-marks" : ""} ${className}`,
185
+ children: [
186
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "slider-rail", children: [
187
+ /* @__PURE__ */ jsxRuntime.jsx(
188
+ "div",
189
+ {
190
+ className: "slider-track",
191
+ ref: trackRef,
192
+ onPointerDown,
193
+ onPointerMove,
194
+ onPointerUp,
195
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "slider-fill", style: fillStyle })
196
+ }
197
+ ),
198
+ vals.map((n, i) => {
199
+ const thumbStyle = { left: `${pct(n)}%` };
200
+ if (hasGradient) {
201
+ thumbStyle["--slider-thumb-color"] = lerpColor(colors, (n - min) / (max - min));
202
+ }
203
+ return /* @__PURE__ */ jsxRuntime.jsx(
204
+ "div",
205
+ {
206
+ ref: (el) => {
207
+ thumbEls.current[i] = el;
208
+ },
209
+ className: "slider-thumb",
210
+ style: thumbStyle,
211
+ role: "slider",
212
+ tabIndex: disabled ? -1 : 0,
213
+ "aria-valuemin": min,
214
+ "aria-valuemax": max,
215
+ "aria-valuenow": n,
216
+ "aria-disabled": disabled || void 0,
217
+ onKeyDown: (e) => handleKey(i, e),
218
+ onPointerDown: (e) => {
219
+ if (disabled) return;
220
+ e.preventDefault();
221
+ e.stopPropagation();
222
+ dragging.current = i;
223
+ trackRef.current?.setPointerCapture(e.pointerId);
224
+ e.currentTarget.focus();
225
+ }
226
+ },
227
+ i
228
+ );
229
+ }),
230
+ marks && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "slider-marks", children: Object.entries(marks).map(([k, label]) => {
231
+ const n = Number(k);
232
+ const active = range ? n >= Math.min(vals[0], vals[1]) && n <= Math.max(vals[0], vals[1]) : n <= vals[0];
233
+ return /* @__PURE__ */ jsxRuntime.jsxs(
234
+ "span",
235
+ {
236
+ className: `slider-mark ${active ? "active" : ""}`,
237
+ style: { left: `${pct(n)}%` },
238
+ onClick: () => handleMarkClick(n),
239
+ children: [
240
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "slider-mark-dot" }),
241
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "slider-mark-label", children: label })
242
+ ]
243
+ },
244
+ k
245
+ );
246
+ }) })
247
+ ] }),
248
+ showValue && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "slider-value", children: range ? `${vals[0]} \u2013 ${vals[1]}` : vals[0] })
249
+ ]
250
+ }
251
+ );
252
+ }
253
+ );
254
+
255
+ exports.Slider = Slider;
256
+ //# sourceMappingURL=chunk-N6ZLZUBF.cjs.map
257
+ //# sourceMappingURL=chunk-N6ZLZUBF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Slider/Slider.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-N6ZLZUBF.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Slider.css\";\nimport * as React from \"react\";\n\nexport type SliderRangeValue = [number, number];\nexport type SliderValue = number | SliderRangeValue;\n\ninterface SliderBaseProps {\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n showValue?: boolean;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Custom gradient colors mapped from min→max. Overrides `tone` for fill & thumb. */\n colors?: string[];\n /** Tick marks with labels. Clicking a mark snaps to it. */\n marks?: Record<number, React.ReactNode>;\n className?: string;\n}\n\nexport interface SliderSingleProps extends SliderBaseProps {\n range?: false;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n}\n\nexport interface SliderRangeProps extends SliderBaseProps {\n range: true;\n value?: SliderRangeValue;\n defaultValue?: SliderRangeValue;\n onChange?: (value: SliderRangeValue) => void;\n}\n\nexport type SliderProps = SliderSingleProps | SliderRangeProps;\n\nfunction clamp(v: number, lo: number, hi: number) {\n return Math.max(lo, Math.min(hi, v));\n}\n\nfunction snap(raw: number, step: number, min: number) {\n return Math.round((raw - min) / step) * step + min;\n}\n\nfunction lerpColor(colors: string[], t: number): string {\n const pos = Math.max(0, Math.min(1, t)) * (colors.length - 1);\n const i = Math.min(Math.floor(pos), colors.length - 2);\n const frac = pos - i;\n if (frac === 0) return colors[i];\n return `color-mix(in oklch, ${colors[i + 1]} ${Math.round(frac * 100)}%, ${colors[i]})`;\n}\n\n/** `Slider` — neumorphic range input with grooved track.\n * @example <Slider defaultValue={40} showValue />\n */\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (props, ref) => {\n const {\n min = 0,\n max = 100,\n step = 1,\n disabled,\n showValue,\n tone = \"accent\",\n colors,\n marks,\n className = \"\",\n } = props;\n\n const range = (props as SliderRangeProps).range === true;\n const controlled = (props as { value?: SliderValue }).value;\n const defaultVal = (props as { defaultValue?: SliderValue }).defaultValue;\n const onChange = (props as { onChange?: (v: any) => void }).onChange;\n\n const initRef = React.useRef<number[]>(\n defaultVal !== undefined\n ? Array.isArray(defaultVal)\n ? [...defaultVal]\n : [defaultVal]\n : range\n ? [min, max]\n : [min]\n );\n const [inner, setInner] = React.useState<number[]>(initRef.current);\n\n const isControlled = controlled !== undefined;\n const vals = isControlled\n ? Array.isArray(controlled)\n ? controlled\n : [controlled]\n : inner;\n\n const valsRef = React.useRef(vals);\n valsRef.current = vals;\n\n const trackRef = React.useRef<HTMLDivElement>(null);\n const thumbEls = React.useRef<(HTMLDivElement | null)[]>([]);\n const dragging = React.useRef<number | null>(null);\n\n const pct = (n: number) => ((n - min) / (max - min)) * 100;\n\n const commit = React.useCallback(\n (next: number[]) => {\n if (!isControlled) setInner(next);\n if (range) {\n onChange?.([next[0], next[1]] as SliderRangeValue);\n } else {\n onChange?.(next[0]);\n }\n },\n [isControlled, range, onChange]\n );\n\n const setAt = React.useCallback(\n (index: number, raw: number) => {\n const snapped = snap(clamp(raw, min, max), step, min);\n const clamped = clamp(snapped, min, max);\n const out = [...valsRef.current];\n out[index] = clamped;\n if (range && out.length === 2 && out[0] > out[1]) out.sort((a, b) => a - b);\n commit(out);\n },\n [min, max, step, range, commit]\n );\n\n const valFromX = React.useCallback(\n (clientX: number) => {\n const rect = trackRef.current?.getBoundingClientRect();\n if (!rect) return min;\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\n return min + ratio * (max - min);\n },\n [min, max]\n );\n\n const closerIndex = React.useCallback(\n (target: number) => {\n const v = valsRef.current;\n if (!range || v.length < 2) return 0;\n const d0 = Math.abs(v[0] - target);\n const d1 = Math.abs(v[1] - target);\n if (d0 === d1) return target < v[0] ? 0 : 1;\n return d0 < d1 ? 0 : 1;\n },\n [range]\n );\n\n const onPointerDown = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n const val = valFromX(e.clientX);\n const idx = closerIndex(val);\n dragging.current = idx;\n setAt(idx, val);\n trackRef.current?.setPointerCapture(e.pointerId);\n thumbEls.current[idx]?.focus();\n },\n [disabled, valFromX, closerIndex, setAt]\n );\n\n const onPointerMove = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (dragging.current === null) return;\n setAt(dragging.current, valFromX(e.clientX));\n },\n [valFromX, setAt]\n );\n\n const onPointerUp = React.useCallback(() => {\n dragging.current = null;\n }, []);\n\n const handleKey = React.useCallback(\n (index: number, e: React.KeyboardEvent) => {\n if (disabled) return;\n let delta = 0;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") delta = step;\n else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") delta = -step;\n else if (e.key === \"Home\") { setAt(index, min); return; }\n else if (e.key === \"End\") { setAt(index, max); return; }\n else return;\n e.preventDefault();\n setAt(index, valsRef.current[index] + delta);\n },\n [disabled, step, min, max, setAt]\n );\n\n const handleMarkClick = React.useCallback(\n (mark: number) => {\n if (disabled) return;\n setAt(closerIndex(mark), mark);\n },\n [disabled, closerIndex, setAt]\n );\n\n const fillLeft = range ? pct(Math.min(vals[0], vals[1])) : 0;\n const fillRight = range\n ? 100 - pct(Math.max(vals[0], vals[1]))\n : 100 - pct(vals[0]);\n\n const hasGradient = colors && colors.length >= 2;\n\n const fillStyle: React.CSSProperties = {\n left: `${fillLeft}%`,\n right: `${fillRight}%`,\n };\n if (hasGradient) {\n const w = 100 - fillLeft - fillRight;\n if (w > 0) {\n const stops = colors.map((c, i) => {\n const orig = (i / (colors.length - 1)) * 100;\n return `${c} ${((orig - fillLeft) / w * 100).toFixed(2)}%`;\n }).join(\", \");\n fillStyle.background = `linear-gradient(to right, ${stops})`;\n fillStyle.boxShadow = \"none\";\n }\n }\n\n return (\n <div\n ref={ref}\n className={`slider ${range ? \"range\" : \"\"} ${hasGradient ? \"gradient\" : tone} ${disabled ? \"disabled\" : \"\"} ${marks ? \"has-marks\" : \"\"} ${className}`}\n >\n <div className=\"slider-rail\">\n <div\n className=\"slider-track\"\n ref={trackRef}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n >\n <div className=\"slider-fill\" style={fillStyle} />\n </div>\n\n {vals.map((n, i) => {\n const thumbStyle: React.CSSProperties = { left: `${pct(n)}%` };\n if (hasGradient) {\n (thumbStyle as any)[\"--slider-thumb-color\"] = lerpColor(colors, (n - min) / (max - min));\n }\n return (\n <div\n key={i}\n ref={(el) => { thumbEls.current[i] = el; }}\n className=\"slider-thumb\"\n style={thumbStyle}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={n}\n aria-disabled={disabled || undefined}\n onKeyDown={(e) => handleKey(i, e)}\n onPointerDown={(e) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n dragging.current = i;\n trackRef.current?.setPointerCapture(e.pointerId);\n e.currentTarget.focus();\n }}\n />\n );\n })}\n\n {marks && (\n <div className=\"slider-marks\">\n {Object.entries(marks).map(([k, label]) => {\n const n = Number(k);\n const active = range\n ? n >= Math.min(vals[0], vals[1]) && n <= Math.max(vals[0], vals[1])\n : n <= vals[0];\n return (\n <span\n key={k}\n className={`slider-mark ${active ? \"active\" : \"\"}`}\n style={{ left: `${pct(n)}%` }}\n onClick={() => handleMarkClick(n)}\n >\n <span className=\"slider-mark-dot\" />\n <span className=\"slider-mark-label\">{label}</span>\n </span>\n );\n })}\n </div>\n )}\n </div>\n\n {showValue && (\n <span className=\"slider-value\">\n {range ? `${vals[0]} – ${vals[1]}` : vals[0]}\n </span>\n )}\n </div>\n );\n }\n);\n"]}
@@ -0,0 +1,137 @@
1
+ 'use strict';
2
+
3
+ var chunk3XIDJEYR_cjs = require('./chunk-3XIDJEYR.cjs');
4
+ require('./tokens-BIIUTPKN.css');
5
+ require('./shared-NJHRNLRH.css');
6
+ require('./Popover-DVGQGWX6.css');
7
+ var React = require('react');
8
+ var reactDom = require('react-dom');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ var Popover = ({
32
+ content,
33
+ title,
34
+ placement = "bottom",
35
+ trigger = "click",
36
+ arrow = false,
37
+ closable = false,
38
+ width,
39
+ defaultOpen = false,
40
+ open,
41
+ onOpenChange,
42
+ children,
43
+ className = ""
44
+ }) => {
45
+ const [inner, setInner] = React__namespace.useState(defaultOpen);
46
+ const isControlled = open !== void 0;
47
+ const show = isControlled ? open : inner;
48
+ const panelWidth = width === "auto" ? 160 : width ?? 240;
49
+ const {
50
+ triggerRef,
51
+ floatingRef,
52
+ floatingStyle,
53
+ placement: resolved
54
+ } = chunk3XIDJEYR_cjs.useFloating({
55
+ open: show,
56
+ placement,
57
+ panelWidth,
58
+ panelHeight: 160,
59
+ alignCross: "center"
60
+ });
61
+ const set = React__namespace.useCallback((v) => {
62
+ if (!isControlled) setInner(v);
63
+ onOpenChange?.(v);
64
+ }, [isControlled, onOpenChange]);
65
+ React__namespace.useEffect(() => {
66
+ if (trigger !== "click" || !show) return;
67
+ const h = (e) => {
68
+ const t = e.target;
69
+ if (triggerRef.current?.contains(t)) return;
70
+ if (floatingRef.current?.contains(t)) return;
71
+ set(false);
72
+ };
73
+ document.addEventListener("mousedown", h);
74
+ return () => document.removeEventListener("mousedown", h);
75
+ }, [show, trigger, set, triggerRef, floatingRef]);
76
+ const hoverTimeout = React__namespace.useRef();
77
+ const interact = trigger === "hover" ? {
78
+ onMouseEnter: () => {
79
+ window.clearTimeout(hoverTimeout.current);
80
+ set(true);
81
+ },
82
+ onMouseLeave: () => {
83
+ hoverTimeout.current = window.setTimeout(() => set(false), 100);
84
+ }
85
+ } : { onClick: () => set(!show) };
86
+ const panelHover = trigger === "hover" ? {
87
+ onMouseEnter: () => window.clearTimeout(hoverTimeout.current),
88
+ onMouseLeave: () => {
89
+ hoverTimeout.current = window.setTimeout(() => set(false), 100);
90
+ }
91
+ } : {};
92
+ const widthStyle = width === "auto" ? {} : { width: width ?? void 0, minWidth: width ? void 0 : 220 };
93
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
94
+ /* @__PURE__ */ jsxRuntime.jsx(
95
+ "span",
96
+ {
97
+ ref: triggerRef,
98
+ className: `popover-anchor ${className}`,
99
+ style: { display: "inline-flex", alignSelf: "flex-start" },
100
+ ...interact,
101
+ children
102
+ }
103
+ ),
104
+ show && typeof document !== "undefined" && reactDom.createPortal(
105
+ /* @__PURE__ */ jsxRuntime.jsxs(
106
+ "div",
107
+ {
108
+ ref: floatingRef,
109
+ className: `popover popover-${resolved}`,
110
+ style: { ...floatingStyle, ...widthStyle },
111
+ ...panelHover,
112
+ children: [
113
+ (title || closable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "popover-header", children: [
114
+ title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "popover-title", children: title }),
115
+ closable && /* @__PURE__ */ jsxRuntime.jsx(
116
+ "button",
117
+ {
118
+ className: "popover-close",
119
+ onClick: () => set(false),
120
+ "aria-label": "Close",
121
+ children: "\xD7"
122
+ }
123
+ )
124
+ ] }),
125
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "popover-body", children: content }),
126
+ arrow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `popover-arrow popover-arrow-${resolved}` })
127
+ ]
128
+ }
129
+ ),
130
+ document.body
131
+ )
132
+ ] });
133
+ };
134
+
135
+ exports.Popover = Popover;
136
+ //# sourceMappingURL=chunk-P2AV5BD7.cjs.map
137
+ //# sourceMappingURL=chunk-P2AV5BD7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Popover/Popover.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":"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","file":"chunk-P2AV5BD7.cjs","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 /** 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.FC<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}) => {\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 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={triggerRef}\n className={`popover-anchor ${className}`}\n style={{ display: \"inline-flex\", alignSelf: \"flex-start\" }}\n {...interact}\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};\n"]}
@@ -1,5 +1,5 @@
1
- import { useFloating } from './chunk-V2DIQ3RH.js';
2
- import { Icon } from './chunk-QOGROEVD.js';
1
+ import { useFloating } from './chunk-ANAQER3T.js';
2
+ import { Icon } from './chunk-X3JG3IR6.js';
3
3
  import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
5
  import './Cascader-VSYEKQCG.css';
@@ -111,5 +111,5 @@ var Cascader = ({
111
111
  };
112
112
 
113
113
  export { Cascader };
114
- //# sourceMappingURL=chunk-ZFJHUOFU.js.map
115
- //# sourceMappingURL=chunk-ZFJHUOFU.js.map
114
+ //# sourceMappingURL=chunk-P4XPESR2.js.map
115
+ //# sourceMappingURL=chunk-P4XPESR2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Cascader/Cascader.tsx"],"names":[],"mappings":";;;;;;;;;AA2BO,IAAM,WAAoC,CAAC;AAAA,EAChD,OAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAe,EAAC;AAAA,EAChB,QAAA;AAAA,EACA,WAAA,GAAc,oBAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAmB,YAAY,CAAA;AAC/D,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,eAAe,KAAA,GAAS,KAAA;AACpC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAmB,GAAG,CAAA;AACpD,EAAA,MAAM,QAAA,GAAiB,aAAuB,IAAI,CAAA;AAElD,EAAA,MAAM,EAAE,UAAA,EAAY,GAAA,EAAK,aAAA,KAAkB,WAAA,CAA4B;AAAA,IACrE,IAAA;AAAA,IACA,SAAA,EAAW,QAAA;AAAA,IACX,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAkB;AAC3B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9B,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACnC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,CAAC,CAAA;AAAA,EAE1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,IAAA,UAAc,GAAG,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,IAAA,EAAM,GAAG,CAAC,CAAA;AAEd,EAAA,MAAM,OAAA,GAA8B,CAAC,OAAO,CAAA;AAC5C,EAAA,IAAI,MAAA,GAA2B,OAAA;AAC/B,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,QAAoC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AAC1E,IAAA,IAAI,KAAA,IAAS,MAAM,QAAA,EAAU;AAC3B,MAAA,MAAA,GAAS,KAAA,CAAM,QAAA;AACf,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB,CAAA,MAAO;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAe,GAAA,EAAa,WAAA,KAAyB;AACjE,IAAA,MAAM,EAAA,GAAK,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA,EAAG,KAAK,GAAG,GAAG,CAAA;AACxC,IAAA,OAAA,CAAQ,EAAE,CAAA;AACV,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,EAAE,CAAA;AAC9B,MAAA,QAAA,GAAW,EAAE,CAAA;AACb,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,IAAI,IAAA,GAAyB,OAAA;AAC7B,EAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,IAAA,MAAM,IAAgC,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AACpE,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAK,CAAA;AACnB,IAAA,IAAI,CAAC,EAAE,QAAA,EAAU;AACjB,IAAA,IAAA,GAAO,CAAA,CAAE,QAAA;AAAA,EACX;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,CAAA,SAAA,EAAY,OAAO,MAAA,GAAS,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EACnE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,WAAW,CAAA,iBAAA,EAAoB,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,gBAAgB,EAAE,CAAA,CAAA;AAAA,QACvE,QAAA;AAAA,QACA,OAAA,EAAS,MAAM,CAAC,QAAA,IAAY,QAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAE7C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EACpB,QAAA,EAAA,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,0BAAO,MAAA,EAAA,EAAc,QAAA,EAAA;AAAA,YAAA,CAAA,GAAI,CAAA,IAAK,KAAA;AAAA,YAAO;AAAA,WAAA,EAAA,EAApB,CAAsB,CAAO,CAAA,GAAI,WAAA,EACpF,CAAA;AAAA,8BACC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,YAAY,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,kBAAA,IACrD,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,UAAA,EAAW,IAAA,EAAM,IAAI,CAAA,EAClC;AAAA;AAAA;AAAA,KACF;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,sBACE,GAAA,CAAC,SAAI,GAAA,EAAK,QAAA,EAAU,WAAU,gBAAA,EAAiB,KAAA,EAAO,eACnD,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,yBAChB,KAAA,EAAA,EAAgB,SAAA,EAAU,gBACxB,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM;AACd,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAK,CAAA,KAAM,CAAA,CAAE,KAAA;AACnC,QAAA,MAAM,cAAc,CAAC,EAAE,CAAA,CAAE,QAAA,IAAY,EAAE,QAAA,CAAS,MAAA,CAAA;AAChD,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAW,CAAA,cAAA,EAAiB,QAAA,GAAW,QAAA,GAAW,EAAE,CAAA,CAAA;AAAA,YACpD,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,SAAS,MAAM,IAAA,CAAK,KAAA,EAAO,CAAA,CAAE,OAAO,WAAW,CAAA;AAAA,YAE9C,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,wBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,MAAM,CAAA,CAAE,IAAA,EAAM,MAAM,EAAA,EAAI,CAAA;AAAA,8BACzC,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,cACd,WAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,MAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,WAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EACnC;AAAA;AAAA,WAAA;AAAA,UAXG,CAAA,CAAE;AAAA,SAaT;AAAA,MAEJ,CAAC,CAAA,EAAA,EArBO,KAsBV,CACD,CAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-ZFJHUOFU.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Cascader.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface CascaderOption {\n value: string;\n label: React.ReactNode;\n icon?: IconName;\n children?: CascaderOption[];\n disabled?: boolean;\n}\n\nexport interface CascaderProps {\n options: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (path: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** `Cascader` — multi-column hierarchical selector. */\nexport const Cascader: React.FC<CascaderProps> = ({\n options,\n value,\n defaultValue = [],\n onChange,\n placeholder = \"请选择\",\n disabled,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultValue);\n const isControlled = value !== undefined;\n const cur = isControlled ? value! : inner;\n const [open, setOpen] = React.useState(false);\n const [path, setPath] = React.useState<string[]>(cur);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef: ref, floatingStyle } = useFloating<HTMLDivElement>({\n open,\n placement: \"bottom\",\n panelWidth: 520,\n panelHeight: 260,\n });\n\n React.useEffect(() => {\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (ref.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (open) setPath(cur);\n }, [open, cur]);\n\n const columns: CascaderOption[][] = [options];\n let cursor: CascaderOption[] = options;\n for (const v of path) {\n const match: CascaderOption | undefined = cursor.find((o) => o.value === v);\n if (match && match.children) {\n cursor = match.children;\n columns.push(cursor);\n } else break;\n }\n\n const pick = (depth: number, val: string, hasChildren: boolean) => {\n const np = [...path.slice(0, depth), val];\n setPath(np);\n if (!hasChildren) {\n if (!isControlled) setInner(np);\n onChange?.(np);\n setOpen(false);\n }\n };\n\n const labels: React.ReactNode[] = [];\n let list: CascaderOption[] = options;\n for (const v of cur) {\n const m: CascaderOption | undefined = list.find((o) => o.value === v);\n if (!m) break;\n labels.push(m.label);\n if (!m.children) break;\n list = m.children;\n }\n\n return (\n <div ref={ref} className={`cascader ${open ? \"open\" : \"\"} ${className}`}>\n <button\n type=\"button\"\n className={`cascader-trigger ${labels.length === 0 ? \"placeholder\" : \"\"}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n >\n <span style={{ flex: 1 }}>\n {labels.length ? labels.map((l, i) => <span key={i}>{i > 0 && \" / \"}{l}</span>) : placeholder}\n </span>\n <span style={{ position: \"absolute\", right: 12, color: \"var(--fg-subtle)\" }}>\n <Icon name=\"chevDown\" size={14} />\n </span>\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div ref={panelRef} className=\"cascader-panel\" style={floatingStyle}>\n {columns.map((col, depth) => (\n <div key={depth} className=\"cascader-col\">\n {col.map((o) => {\n const isActive = path[depth] === o.value;\n const hasChildren = !!(o.children && o.children.length);\n return (\n <button\n key={o.value}\n type=\"button\"\n className={`cascader-item ${isActive ? \"active\" : \"\"}`}\n disabled={o.disabled}\n onClick={() => pick(depth, o.value, hasChildren)}\n >\n {o.icon && <Icon name={o.icon} size={13} />}\n <span>{o.label}</span>\n {hasChildren && (\n <span className=\"chev\">\n <Icon name=\"chevRight\" size={12} />\n </span>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>,\n document.body\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Cascader/Cascader.tsx"],"names":[],"mappings":"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","file":"chunk-P4XPESR2.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Cascader.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface CascaderOption {\n value: string;\n label: React.ReactNode;\n icon?: IconName;\n children?: CascaderOption[];\n disabled?: boolean;\n}\n\nexport interface CascaderProps {\n options: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (path: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** `Cascader` — multi-column hierarchical selector. */\nexport const Cascader: React.FC<CascaderProps> = ({\n options,\n value,\n defaultValue = [],\n onChange,\n placeholder = \"请选择\",\n disabled,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultValue);\n const isControlled = value !== undefined;\n const cur = isControlled ? value! : inner;\n const [open, setOpen] = React.useState(false);\n const [path, setPath] = React.useState<string[]>(cur);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef: ref, floatingStyle } = useFloating<HTMLDivElement>({\n open,\n placement: \"bottom\",\n panelWidth: 520,\n panelHeight: 260,\n });\n\n React.useEffect(() => {\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (ref.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (open) setPath(cur);\n }, [open, cur]);\n\n const columns: CascaderOption[][] = [options];\n let cursor: CascaderOption[] = options;\n for (const v of path) {\n const match: CascaderOption | undefined = cursor.find((o) => o.value === v);\n if (match && match.children) {\n cursor = match.children;\n columns.push(cursor);\n } else break;\n }\n\n const pick = (depth: number, val: string, hasChildren: boolean) => {\n const np = [...path.slice(0, depth), val];\n setPath(np);\n if (!hasChildren) {\n if (!isControlled) setInner(np);\n onChange?.(np);\n setOpen(false);\n }\n };\n\n const labels: React.ReactNode[] = [];\n let list: CascaderOption[] = options;\n for (const v of cur) {\n const m: CascaderOption | undefined = list.find((o) => o.value === v);\n if (!m) break;\n labels.push(m.label);\n if (!m.children) break;\n list = m.children;\n }\n\n return (\n <div ref={ref} className={`cascader ${open ? \"open\" : \"\"} ${className}`}>\n <button\n type=\"button\"\n className={`cascader-trigger ${labels.length === 0 ? \"placeholder\" : \"\"}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n >\n <span style={{ flex: 1 }}>\n {labels.length ? labels.map((l, i) => <span key={i}>{i > 0 && \" / \"}{l}</span>) : placeholder}\n </span>\n <span style={{ position: \"absolute\", right: 12, color: \"var(--fg-subtle)\" }}>\n <Icon name=\"chevDown\" size={14} />\n </span>\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div ref={panelRef} className=\"cascader-panel\" style={floatingStyle}>\n {columns.map((col, depth) => (\n <div key={depth} className=\"cascader-col\">\n {col.map((o) => {\n const isActive = path[depth] === o.value;\n const hasChildren = !!(o.children && o.children.length);\n return (\n <button\n key={o.value}\n type=\"button\"\n className={`cascader-item ${isActive ? \"active\" : \"\"}`}\n disabled={o.disabled}\n onClick={() => pick(depth, o.value, hasChildren)}\n >\n {o.icon && <Icon name={o.icon} size={13} />}\n <span>{o.label}</span>\n {hasChildren && (\n <span className=\"chev\">\n <Icon name=\"chevRight\" size={12} />\n </span>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>,\n document.body\n )}\n </div>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { Select } from './chunk-6XZ362VL.js';
2
- import { Icon } from './chunk-QOGROEVD.js';
1
+ import { Select } from './chunk-XT7RXXOE.js';
2
+ import { Icon } from './chunk-X3JG3IR6.js';
3
3
  import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
5
  import './Pagination-YIRYJUXP.css';
@@ -130,5 +130,5 @@ var Pagination = ({
130
130
  };
131
131
 
132
132
  export { Pagination };
133
- //# sourceMappingURL=chunk-AESLEYST.js.map
134
- //# sourceMappingURL=chunk-AESLEYST.js.map
133
+ //# sourceMappingURL=chunk-RJNGXR5Y.js.map
134
+ //# sourceMappingURL=chunk-RJNGXR5Y.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-AESLEYST.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Pagination.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Select } from \"../Select\";\n\nexport interface PaginationProps {\n /** Total number of items. */\n total: number;\n /** Items per page. */\n pageSize?: number;\n /** Current page (1-indexed). */\n page?: number;\n defaultPage?: number;\n onChange?: (page: number) => void;\n /** Max visible page buttons (before ellipsis logic). */\n siblings?: number;\n /**\n * Render a \"跳至 N 页\" input to the right of the page buttons. Enter key commits\n * and clamps to `1..totalPages`.\n */\n showQuickJumper?: boolean;\n /**\n * Render a Select to let the user switch the page size. Resetting the size sends the\n * user back to page 1 and calls both `onShowSizeChange` and `onChange(1)`.\n */\n showSizeChanger?: boolean;\n /** Page size choices for `showSizeChanger`. Defaults to `[10, 20, 50, 100]`. */\n pageSizeOptions?: number[];\n /** Fires when the user picks a new page size via the size changer. */\n onShowSizeChange?: (current: number, size: number) => void;\n className?: string;\n}\n\nconst DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** `Pagination` — page number controls. */\nexport const Pagination: React.FC<PaginationProps> = ({\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onChange,\n siblings = 1,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_SIZE_OPTIONS,\n onShowSizeChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultPage);\n const isControlled = page !== undefined;\n const cur = isControlled ? page! : inner;\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const [jumpDraft, setJumpDraft] = React.useState(\"\");\n\n const go = (p: number) => {\n const next = Math.min(pages, Math.max(1, p));\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleJump = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\") return;\n const n = Number(jumpDraft);\n if (!Number.isFinite(n) || n < 1) {\n setJumpDraft(\"\");\n return;\n }\n go(Math.trunc(n));\n setJumpDraft(\"\");\n };\n\n const handleSizeChange = (size: number) => {\n onShowSizeChange?.(cur, size);\n // reset to page 1 — Ant Design parity\n if (!isControlled) setInner(1);\n onChange?.(1);\n };\n\n const range = (): (number | \"...\")[] => {\n const out: (number | \"...\")[] = [];\n const add = (n: number | \"...\") => out.push(n);\n const s = Math.max(2, cur - siblings);\n const e = Math.min(pages - 1, cur + siblings);\n add(1);\n if (s > 2) add(\"...\");\n for (let i = s; i <= e; i++) add(i);\n if (e < pages - 1) add(\"...\");\n if (pages > 1) add(pages);\n return out;\n };\n\n return (\n <div className={`pagination ${className}`}>\n <span className=\"pg-info\">\n 共 {total} 条 · 第 {cur} / {pages} 页\n </span>\n <div className=\"pg-controls\">\n <button\n type=\"button\"\n className={`pg ${cur === 1 ? \"disabled\" : \"\"}`}\n onClick={() => cur > 1 && go(cur - 1)}\n aria-label=\"Previous\"\n >\n <Icon name=\"chevLeft\" size={12} />\n </button>\n {range().map((p, i) =>\n p === \"...\" ? (\n <span key={`e${i}`} className=\"ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={`pg ${p === cur ? \"active\" : \"\"}`}\n onClick={() => go(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n type=\"button\"\n className={`pg ${cur === pages ? \"disabled\" : \"\"}`}\n onClick={() => cur < pages && go(cur + 1)}\n aria-label=\"Next\"\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n {showSizeChanger && (\n <div className=\"pg-size-changer\">\n <Select<number>\n value={pageSize}\n size=\"sm\"\n options={pageSizeOptions.map((n) => ({ value: n, label: `${n} 条/页` }))}\n onChange={handleSizeChange}\n />\n </div>\n )}\n {showQuickJumper && (\n <label className=\"pg-jumper\">\n <span className=\"pg-jumper-label\">跳至</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n className=\"pg-jumper-input\"\n value={jumpDraft}\n onChange={(e) => setJumpDraft(e.target.value.replace(/[^\\d]/g, \"\"))}\n onKeyDown={handleJump}\n aria-label=\"跳转到指定页\"\n />\n <span className=\"pg-jumper-label\">页</span>\n </label>\n )}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-RJNGXR5Y.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Pagination.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Select } from \"../Select\";\n\nexport interface PaginationProps {\n /** Total number of items. */\n total: number;\n /** Items per page. */\n pageSize?: number;\n /** Current page (1-indexed). */\n page?: number;\n defaultPage?: number;\n onChange?: (page: number) => void;\n /** Max visible page buttons (before ellipsis logic). */\n siblings?: number;\n /**\n * Render a \"跳至 N 页\" input to the right of the page buttons. Enter key commits\n * and clamps to `1..totalPages`.\n */\n showQuickJumper?: boolean;\n /**\n * Render a Select to let the user switch the page size. Resetting the size sends the\n * user back to page 1 and calls both `onShowSizeChange` and `onChange(1)`.\n */\n showSizeChanger?: boolean;\n /** Page size choices for `showSizeChanger`. Defaults to `[10, 20, 50, 100]`. */\n pageSizeOptions?: number[];\n /** Fires when the user picks a new page size via the size changer. */\n onShowSizeChange?: (current: number, size: number) => void;\n className?: string;\n}\n\nconst DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** `Pagination` — page number controls. */\nexport const Pagination: React.FC<PaginationProps> = ({\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onChange,\n siblings = 1,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_SIZE_OPTIONS,\n onShowSizeChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultPage);\n const isControlled = page !== undefined;\n const cur = isControlled ? page! : inner;\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const [jumpDraft, setJumpDraft] = React.useState(\"\");\n\n const go = (p: number) => {\n const next = Math.min(pages, Math.max(1, p));\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleJump = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\") return;\n const n = Number(jumpDraft);\n if (!Number.isFinite(n) || n < 1) {\n setJumpDraft(\"\");\n return;\n }\n go(Math.trunc(n));\n setJumpDraft(\"\");\n };\n\n const handleSizeChange = (size: number) => {\n onShowSizeChange?.(cur, size);\n // reset to page 1 — Ant Design parity\n if (!isControlled) setInner(1);\n onChange?.(1);\n };\n\n const range = (): (number | \"...\")[] => {\n const out: (number | \"...\")[] = [];\n const add = (n: number | \"...\") => out.push(n);\n const s = Math.max(2, cur - siblings);\n const e = Math.min(pages - 1, cur + siblings);\n add(1);\n if (s > 2) add(\"...\");\n for (let i = s; i <= e; i++) add(i);\n if (e < pages - 1) add(\"...\");\n if (pages > 1) add(pages);\n return out;\n };\n\n return (\n <div className={`pagination ${className}`}>\n <span className=\"pg-info\">\n 共 {total} 条 · 第 {cur} / {pages} 页\n </span>\n <div className=\"pg-controls\">\n <button\n type=\"button\"\n className={`pg ${cur === 1 ? \"disabled\" : \"\"}`}\n onClick={() => cur > 1 && go(cur - 1)}\n aria-label=\"Previous\"\n >\n <Icon name=\"chevLeft\" size={12} />\n </button>\n {range().map((p, i) =>\n p === \"...\" ? (\n <span key={`e${i}`} className=\"ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={`pg ${p === cur ? \"active\" : \"\"}`}\n onClick={() => go(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n type=\"button\"\n className={`pg ${cur === pages ? \"disabled\" : \"\"}`}\n onClick={() => cur < pages && go(cur + 1)}\n aria-label=\"Next\"\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n {showSizeChanger && (\n <div className=\"pg-size-changer\">\n <Select<number>\n value={pageSize}\n size=\"sm\"\n options={pageSizeOptions.map((n) => ({ value: n, label: `${n} 条/页` }))}\n onChange={handleSizeChange}\n />\n </div>\n )}\n {showQuickJumper && (\n <label className=\"pg-jumper\">\n <span className=\"pg-jumper-label\">跳至</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n className=\"pg-jumper-input\"\n value={jumpDraft}\n onChange={(e) => setJumpDraft(e.target.value.replace(/[^\\d]/g, \"\"))}\n onKeyDown={handleJump}\n aria-label=\"跳转到指定页\"\n />\n <span className=\"pg-jumper-label\">页</span>\n </label>\n )}\n </div>\n </div>\n );\n};\n"]}