@fangxinyan/lumina 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
- package/dist/Accordion.cjs +2 -2
- package/dist/Accordion.js +1 -1
- package/dist/Alert.cjs +2 -2
- package/dist/Alert.js +1 -1
- package/dist/AppShell.cjs +5 -5
- package/dist/AppShell.js +1 -1
- package/dist/Avatar.cjs +2 -2
- package/dist/Avatar.js +1 -1
- package/dist/Button.cjs +3 -3
- package/dist/Button.js +1 -1
- package/dist/Calendar.cjs +2 -2
- package/dist/Calendar.js +1 -1
- package/dist/Card.cjs +3 -3
- package/dist/Card.js +1 -1
- package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
- package/dist/Cascader.cjs +2 -2
- package/dist/Cascader.js +1 -1
- package/dist/Checkbox.cjs +3 -3
- package/dist/Checkbox.js +1 -1
- package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
- package/dist/ColorPicker.cjs +2 -2
- package/dist/ColorPicker.js +1 -1
- package/dist/CommandPalette-T45DBMPY.css +139 -0
- package/dist/CommandPalette.cjs +14 -0
- package/dist/CommandPalette.cjs.map +1 -0
- package/dist/CommandPalette.d.cts +65 -0
- package/dist/CommandPalette.d.ts +65 -0
- package/dist/CommandPalette.js +5 -0
- package/dist/CommandPalette.js.map +1 -0
- package/dist/ContextMenu-FKW6CQW4.css +76 -0
- package/dist/ContextMenu.cjs +12 -0
- package/dist/ContextMenu.cjs.map +1 -0
- package/dist/ContextMenu.d.cts +50 -0
- package/dist/ContextMenu.d.ts +50 -0
- package/dist/ContextMenu.js +3 -0
- package/dist/ContextMenu.js.map +1 -0
- package/dist/Divider.cjs +2 -2
- package/dist/Divider.js +1 -1
- package/dist/Drawer.cjs +2 -2
- package/dist/Drawer.js +1 -1
- package/dist/Empty.cjs +4 -4
- package/dist/Empty.js +1 -1
- package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
- package/dist/Image.cjs +3 -3
- package/dist/Image.js +1 -1
- package/dist/Input.cjs +3 -3
- package/dist/Input.js +1 -1
- package/dist/List.cjs +2 -2
- package/dist/List.js +1 -1
- package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
- package/dist/Modal.cjs +3 -3
- package/dist/Modal.js +2 -2
- package/dist/Pagination.cjs +4 -4
- package/dist/Pagination.js +3 -3
- package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
- package/dist/Popover.cjs +2 -2
- package/dist/Popover.js +1 -1
- package/dist/Progress.cjs +3 -3
- package/dist/Progress.js +1 -1
- package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
- package/dist/Select.cjs +3 -3
- package/dist/Select.js +2 -2
- package/dist/Slider.cjs +2 -2
- package/dist/Slider.js +1 -1
- package/dist/Splitter-DHNOY4NC.css +66 -0
- package/dist/Splitter.cjs +12 -0
- package/dist/Splitter.cjs.map +1 -0
- package/dist/Splitter.d.cts +44 -0
- package/dist/Splitter.d.ts +44 -0
- package/dist/Splitter.js +3 -0
- package/dist/Splitter.js.map +1 -0
- package/dist/StatusBar-CDS2GPSI.css +58 -0
- package/dist/StatusBar.cjs +16 -0
- package/dist/StatusBar.cjs.map +1 -0
- package/dist/StatusBar.d.cts +39 -0
- package/dist/StatusBar.d.ts +39 -0
- package/dist/StatusBar.js +3 -0
- package/dist/StatusBar.js.map +1 -0
- package/dist/Switch.cjs +2 -2
- package/dist/Switch.js +1 -1
- package/dist/{Table-YKVM42SW.css → Table-2LPTOUIR.css} +1 -1
- package/dist/Table.cjs +7 -7
- package/dist/Table.js +5 -5
- package/dist/Tabs.cjs +3 -3
- package/dist/Tabs.js +1 -1
- package/dist/Tag.cjs +3 -3
- package/dist/Tag.js +1 -1
- package/dist/Theme.cjs +10 -10
- package/dist/Theme.js +1 -1
- package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
- package/dist/Toast.cjs +3 -3
- package/dist/Toast.js +1 -1
- package/dist/Tooltip.cjs +2 -2
- package/dist/Tooltip.js +1 -1
- package/dist/Typography.cjs +6 -6
- package/dist/Typography.js +1 -1
- package/dist/{chunk-5WF6M47X.cjs → chunk-24FAK7QU.cjs} +3 -3
- package/dist/{chunk-5WF6M47X.cjs.map → chunk-24FAK7QU.cjs.map} +1 -1
- package/dist/{chunk-AJZKESHB.js → chunk-276NALYW.js} +3 -3
- package/dist/{chunk-AJZKESHB.js.map → chunk-276NALYW.js.map} +1 -1
- package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
- package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
- package/dist/{chunk-RDLPX7RK.cjs → chunk-3HNRKO3M.cjs} +31 -5
- package/dist/chunk-3HNRKO3M.cjs.map +1 -0
- package/dist/{chunk-GZGZR4FT.js → chunk-3LI6QH2Q.js} +3 -3
- package/dist/{chunk-GZGZR4FT.js.map → chunk-3LI6QH2Q.js.map} +1 -1
- package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
- package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
- package/dist/chunk-47Z4NIU4.js +118 -0
- package/dist/chunk-47Z4NIU4.js.map +1 -0
- package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
- package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
- package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
- package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
- package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
- package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
- package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
- package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
- package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
- package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
- package/dist/{chunk-77BVQNAQ.js → chunk-5UOBYRYJ.js} +3 -3
- package/dist/{chunk-77BVQNAQ.js.map → chunk-5UOBYRYJ.js.map} +1 -1
- package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
- package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
- package/dist/{chunk-TZSWDH5T.cjs → chunk-7JYI5THC.cjs} +3 -3
- package/dist/{chunk-TZSWDH5T.cjs.map → chunk-7JYI5THC.cjs.map} +1 -1
- package/dist/chunk-7T2SLRNL.cjs +140 -0
- package/dist/chunk-7T2SLRNL.cjs.map +1 -0
- package/dist/chunk-7YQWG7HR.cjs +45 -0
- package/dist/chunk-7YQWG7HR.cjs.map +1 -0
- package/dist/chunk-AGN3JSUH.cjs +209 -0
- package/dist/chunk-AGN3JSUH.cjs.map +1 -0
- package/dist/{chunk-CCBHZYE6.cjs → chunk-AR4M7QGF.cjs} +7 -7
- package/dist/{chunk-CCBHZYE6.cjs.map → chunk-AR4M7QGF.cjs.map} +1 -1
- package/dist/{chunk-K7PVJLW4.cjs → chunk-AWLBLRQX.cjs} +5 -5
- package/dist/{chunk-K7PVJLW4.cjs.map → chunk-AWLBLRQX.cjs.map} +1 -1
- package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
- package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
- package/dist/{chunk-Z5X5AMLA.cjs → chunk-CALRTZZ7.cjs} +3 -3
- package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-CALRTZZ7.cjs.map} +1 -1
- package/dist/{chunk-H6FCIJOP.js → chunk-DBJIK4JE.js} +3 -3
- package/dist/{chunk-H6FCIJOP.js.map → chunk-DBJIK4JE.js.map} +1 -1
- package/dist/{chunk-QESLHLTG.cjs → chunk-EHO2JH2L.cjs} +4 -4
- package/dist/{chunk-QESLHLTG.cjs.map → chunk-EHO2JH2L.cjs.map} +1 -1
- package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
- package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
- package/dist/{chunk-AEJJGUEN.cjs → chunk-GOIQR4OH.cjs} +3 -3
- package/dist/{chunk-AEJJGUEN.cjs.map → chunk-GOIQR4OH.cjs.map} +1 -1
- package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
- package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
- package/dist/{chunk-URF6RBW6.cjs → chunk-HNVRMOL3.cjs} +3 -3
- package/dist/{chunk-URF6RBW6.cjs.map → chunk-HNVRMOL3.cjs.map} +1 -1
- package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
- package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
- package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
- package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
- package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
- package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
- package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
- package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
- package/dist/{chunk-C5TGQ7CV.cjs → chunk-MFWOBALK.cjs} +3 -3
- package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-MFWOBALK.cjs.map} +1 -1
- package/dist/{chunk-LDENBYRC.cjs → chunk-MKR4X57L.cjs} +3 -3
- package/dist/{chunk-LDENBYRC.cjs.map → chunk-MKR4X57L.cjs.map} +1 -1
- package/dist/{chunk-LSLYY5FN.js → chunk-MTCLJHXU.js} +5 -5
- package/dist/{chunk-LSLYY5FN.js.map → chunk-MTCLJHXU.js.map} +1 -1
- package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
- package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
- package/dist/{chunk-OEHCA5IV.js → chunk-NGQDVJH3.js} +4 -4
- package/dist/{chunk-OEHCA5IV.js.map → chunk-NGQDVJH3.js.map} +1 -1
- package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
- package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
- package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
- package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
- package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
- package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
- package/dist/chunk-OWNVDXRQ.js +42 -0
- package/dist/chunk-OWNVDXRQ.js.map +1 -0
- package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
- package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
- package/dist/{chunk-M6CGYGEO.js → chunk-Q2EXOT4B.js} +3 -3
- package/dist/{chunk-M6CGYGEO.js.map → chunk-Q2EXOT4B.js.map} +1 -1
- package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
- package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
- package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
- package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
- package/dist/chunk-RFU5HN4E.js +149 -0
- package/dist/chunk-RFU5HN4E.js.map +1 -0
- package/dist/{chunk-IKI5CS4L.cjs → chunk-RIDCBNCM.cjs} +4 -4
- package/dist/{chunk-IKI5CS4L.cjs.map → chunk-RIDCBNCM.cjs.map} +1 -1
- package/dist/{chunk-OPTTHURA.cjs → chunk-RSZNFKCQ.cjs} +3 -3
- package/dist/{chunk-OPTTHURA.cjs.map → chunk-RSZNFKCQ.cjs.map} +1 -1
- package/dist/{chunk-EPFYIR63.cjs → chunk-RVSWH4RH.cjs} +7 -7
- package/dist/{chunk-EPFYIR63.cjs.map → chunk-RVSWH4RH.cjs.map} +1 -1
- package/dist/{chunk-TWBJCFEJ.cjs → chunk-SVVB6POY.cjs} +4 -4
- package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-SVVB6POY.cjs.map} +1 -1
- package/dist/{chunk-QPZZNSRB.js → chunk-TMZVX6NO.js} +4 -4
- package/dist/{chunk-QPZZNSRB.js.map → chunk-TMZVX6NO.js.map} +1 -1
- package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
- package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
- package/dist/{chunk-GIVMKGZN.js → chunk-TY5EAKEI.js} +3 -3
- package/dist/{chunk-GIVMKGZN.js.map → chunk-TY5EAKEI.js.map} +1 -1
- package/dist/{chunk-4MR4GVTD.js → chunk-U4K7HOMW.js} +31 -5
- package/dist/chunk-U4K7HOMW.js.map +1 -0
- package/dist/{chunk-IWVKITPN.js → chunk-U5BZ7E3F.js} +3 -3
- package/dist/{chunk-IWVKITPN.js.map → chunk-U5BZ7E3F.js.map} +1 -1
- package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
- package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
- package/dist/{chunk-ZVCMXDTP.js → chunk-URLSZPS5.js} +5 -5
- package/dist/{chunk-ZVCMXDTP.js.map → chunk-URLSZPS5.js.map} +1 -1
- package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
- package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
- package/dist/{chunk-NSUD5B22.js → chunk-WBMF7WM3.js} +3 -3
- package/dist/{chunk-NSUD5B22.js.map → chunk-WBMF7WM3.js.map} +1 -1
- package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
- package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
- package/dist/{chunk-TYQ5CN2C.js → chunk-WQFC5EMC.js} +4 -4
- package/dist/{chunk-TYQ5CN2C.js.map → chunk-WQFC5EMC.js.map} +1 -1
- package/dist/{chunk-SBMOIE5C.cjs → chunk-WREHBIJ5.cjs} +10 -10
- package/dist/{chunk-SBMOIE5C.cjs.map → chunk-WREHBIJ5.cjs.map} +1 -1
- package/dist/chunk-WZ73TWB2.cjs +174 -0
- package/dist/chunk-WZ73TWB2.cjs.map +1 -0
- package/dist/chunk-XDFZRV3V.js +184 -0
- package/dist/chunk-XDFZRV3V.js.map +1 -0
- package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
- package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
- package/dist/{chunk-E6R63QOL.js → chunk-XZ22B3NW.js} +6 -6
- package/dist/{chunk-E6R63QOL.js.map → chunk-XZ22B3NW.js.map} +1 -1
- package/dist/{chunk-K5MHL732.js → chunk-YXKJOPYT.js} +4 -4
- package/dist/{chunk-K5MHL732.js.map → chunk-YXKJOPYT.js.map} +1 -1
- package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
- package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
- package/dist/index.cjs +142 -118
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +35 -31
- package/dist/index.js.map +1 -1
- package/dist/styles.css +25 -18
- package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
- package/dist/tokens.css +17 -9
- package/docs/llms/commandpalette.md +58 -0
- package/docs/llms/contextmenu.md +55 -0
- package/docs/llms/splitter.md +63 -0
- package/docs/llms/statusbar.md +53 -0
- package/docs/llms.md +5 -1
- package/package.json +1 -1
- package/dist/chunk-4MR4GVTD.js.map +0 -1
- package/dist/chunk-RDLPX7RK.cjs.map +0 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./tokens-BIIUTPKN.css');
|
|
4
|
+
require('./shared-NJHRNLRH.css');
|
|
5
|
+
require('./Splitter-DHNOY4NC.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/Splitter/Splitter.tsx
|
|
30
|
+
var Splitter = ({
|
|
31
|
+
direction = "horizontal",
|
|
32
|
+
defaultSize = 240,
|
|
33
|
+
size,
|
|
34
|
+
onResize,
|
|
35
|
+
onResizeEnd,
|
|
36
|
+
min = 80,
|
|
37
|
+
max = Infinity,
|
|
38
|
+
step = 16,
|
|
39
|
+
children,
|
|
40
|
+
className = "",
|
|
41
|
+
handleClassName = ""
|
|
42
|
+
}) => {
|
|
43
|
+
const isControlled = size !== void 0;
|
|
44
|
+
const [inner, setInner] = React__namespace.useState(defaultSize);
|
|
45
|
+
const current = isControlled ? size : inner;
|
|
46
|
+
const containerRef = React__namespace.useRef(null);
|
|
47
|
+
const [dragging, setDragging] = React__namespace.useState(false);
|
|
48
|
+
const clamp = React__namespace.useCallback(
|
|
49
|
+
(n) => {
|
|
50
|
+
const el = containerRef.current;
|
|
51
|
+
const bound = el ? direction === "horizontal" ? el.clientWidth : el.clientHeight : Infinity;
|
|
52
|
+
return Math.max(min, Math.min(Math.min(max, Math.max(0, bound - 24)), n));
|
|
53
|
+
},
|
|
54
|
+
[direction, min, max]
|
|
55
|
+
);
|
|
56
|
+
const commit = React__namespace.useCallback(
|
|
57
|
+
(n) => {
|
|
58
|
+
const clamped = clamp(n);
|
|
59
|
+
if (!isControlled) setInner(clamped);
|
|
60
|
+
onResize?.(clamped);
|
|
61
|
+
return clamped;
|
|
62
|
+
},
|
|
63
|
+
[clamp, isControlled, onResize]
|
|
64
|
+
);
|
|
65
|
+
const onPointerDown = (e) => {
|
|
66
|
+
if (e.button !== 0) return;
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
const el = containerRef.current;
|
|
69
|
+
if (!el) return;
|
|
70
|
+
const rect = el.getBoundingClientRect();
|
|
71
|
+
setDragging(true);
|
|
72
|
+
e.target.setPointerCapture?.(e.pointerId);
|
|
73
|
+
let latest = current;
|
|
74
|
+
const move = (ev) => {
|
|
75
|
+
const next = direction === "horizontal" ? ev.clientX - rect.left : ev.clientY - rect.top;
|
|
76
|
+
latest = commit(next);
|
|
77
|
+
};
|
|
78
|
+
const up = () => {
|
|
79
|
+
setDragging(false);
|
|
80
|
+
onResizeEnd?.(latest);
|
|
81
|
+
window.removeEventListener("pointermove", move);
|
|
82
|
+
window.removeEventListener("pointerup", up);
|
|
83
|
+
};
|
|
84
|
+
window.addEventListener("pointermove", move);
|
|
85
|
+
window.addEventListener("pointerup", up);
|
|
86
|
+
};
|
|
87
|
+
const onKeyDown = (e) => {
|
|
88
|
+
const inc = (n) => commit(current + n);
|
|
89
|
+
if (direction === "horizontal") {
|
|
90
|
+
if (e.key === "ArrowLeft") {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
inc(-step);
|
|
93
|
+
}
|
|
94
|
+
if (e.key === "ArrowRight") {
|
|
95
|
+
e.preventDefault();
|
|
96
|
+
inc(step);
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
if (e.key === "ArrowUp") {
|
|
100
|
+
e.preventDefault();
|
|
101
|
+
inc(-step);
|
|
102
|
+
}
|
|
103
|
+
if (e.key === "ArrowDown") {
|
|
104
|
+
e.preventDefault();
|
|
105
|
+
inc(step);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const firstStyle = direction === "horizontal" ? { width: current } : { height: current };
|
|
110
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
111
|
+
"div",
|
|
112
|
+
{
|
|
113
|
+
ref: containerRef,
|
|
114
|
+
className: `splitter ${direction} ${dragging ? "dragging" : ""} ${className}`,
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "splitter-panel first", style: firstStyle, children: children[0] }),
|
|
117
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
"div",
|
|
119
|
+
{
|
|
120
|
+
role: "separator",
|
|
121
|
+
tabIndex: 0,
|
|
122
|
+
"aria-orientation": direction === "horizontal" ? "vertical" : "horizontal",
|
|
123
|
+
"aria-valuenow": current,
|
|
124
|
+
"aria-valuemin": min,
|
|
125
|
+
"aria-valuemax": Number.isFinite(max) ? max : void 0,
|
|
126
|
+
className: `splitter-handle ${handleClassName}`,
|
|
127
|
+
onPointerDown,
|
|
128
|
+
onKeyDown,
|
|
129
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "splitter-handle-grip", "aria-hidden": true })
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "splitter-panel second", children: children[1] })
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
exports.Splitter = Splitter;
|
|
139
|
+
//# sourceMappingURL=chunk-7T2SLRNL.cjs.map
|
|
140
|
+
//# sourceMappingURL=chunk-7T2SLRNL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Splitter/Splitter.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-7T2SLRNL.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Splitter.css\";\nimport * as React from \"react\";\n\nexport type SplitterDirection = \"horizontal\" | \"vertical\";\n\nexport interface SplitterProps {\n /**\n * Layout direction.\n * - `\"horizontal\"` (default) — children placed left/right, handle is a vertical bar.\n * - `\"vertical\"` — children placed top/bottom, handle is a horizontal bar.\n */\n direction?: SplitterDirection;\n /** Uncontrolled initial size (px) of the first panel. */\n defaultSize?: number;\n /** Controlled size (px) of the first panel. */\n size?: number;\n /** Fires while the user drags. */\n onResize?: (size: number) => void;\n /** Fires once when the drag ends. */\n onResizeEnd?: (size: number) => void;\n /** Minimum size (px) of the first panel. Default 80. */\n min?: number;\n /** Maximum size (px) of the first panel. Default Infinity. */\n max?: number;\n /** Keyboard step in px. Default 16. */\n step?: number;\n /** Exactly two children: the two panels. */\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n /** Extra className on the drag handle. */\n handleClassName?: string;\n}\n\n/**\n * `Splitter` — draggable split between two panels. Keyboard-accessible.\n *\n * @example\n * ```tsx\n * <Splitter defaultSize={240} min={160} max={400}>\n * <Sidebar ... />\n * <main>...</main>\n * </Splitter>\n * ```\n */\nexport const Splitter: React.FC<SplitterProps> = ({\n direction = \"horizontal\",\n defaultSize = 240,\n size,\n onResize,\n onResizeEnd,\n min = 80,\n max = Infinity,\n step = 16,\n children,\n className = \"\",\n handleClassName = \"\",\n}) => {\n const isControlled = size !== undefined;\n const [inner, setInner] = React.useState(defaultSize);\n const current = isControlled ? (size as number) : inner;\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [dragging, setDragging] = React.useState(false);\n\n const clamp = React.useCallback(\n (n: number) => {\n const el = containerRef.current;\n const bound = el\n ? direction === \"horizontal\"\n ? el.clientWidth\n : el.clientHeight\n : Infinity;\n return Math.max(min, Math.min(Math.min(max, Math.max(0, bound - 24)), n));\n },\n [direction, min, max]\n );\n\n const commit = React.useCallback(\n (n: number) => {\n const clamped = clamp(n);\n if (!isControlled) setInner(clamped);\n onResize?.(clamped);\n return clamped;\n },\n [clamp, isControlled, onResize]\n );\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setDragging(true);\n (e.target as Element).setPointerCapture?.(e.pointerId);\n\n let latest = current;\n const move = (ev: PointerEvent) => {\n const next =\n direction === \"horizontal\" ? ev.clientX - rect.left : ev.clientY - rect.top;\n latest = commit(next);\n };\n const up = () => {\n setDragging(false);\n onResizeEnd?.(latest);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const inc = (n: number) => commit(current + n);\n if (direction === \"horizontal\") {\n if (e.key === \"ArrowLeft\") { e.preventDefault(); inc(-step); }\n if (e.key === \"ArrowRight\") { e.preventDefault(); inc(step); }\n } else {\n if (e.key === \"ArrowUp\") { e.preventDefault(); inc(-step); }\n if (e.key === \"ArrowDown\") { e.preventDefault(); inc(step); }\n }\n };\n\n const firstStyle: React.CSSProperties =\n direction === \"horizontal\" ? { width: current } : { height: current };\n\n return (\n <div\n ref={containerRef}\n className={`splitter ${direction} ${dragging ? \"dragging\" : \"\"} ${className}`}\n >\n <div className=\"splitter-panel first\" style={firstStyle}>\n {children[0]}\n </div>\n <div\n role=\"separator\"\n tabIndex={0}\n aria-orientation={direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n aria-valuenow={current}\n aria-valuemin={min}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n className={`splitter-handle ${handleClassName}`}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n >\n <span className=\"splitter-handle-grip\" aria-hidden />\n </div>\n <div className=\"splitter-panel second\">{children[1]}</div>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./tokens-BIIUTPKN.css');
|
|
4
|
+
require('./shared-NJHRNLRH.css');
|
|
5
|
+
require('./StatusBar-CDS2GPSI.css');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
// src/components/StatusBar/StatusBar.tsx
|
|
9
|
+
var StatusBarItem = ({
|
|
10
|
+
icon,
|
|
11
|
+
tone = "default",
|
|
12
|
+
onClick,
|
|
13
|
+
className = "",
|
|
14
|
+
children,
|
|
15
|
+
...rest
|
|
16
|
+
}) => {
|
|
17
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
18
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "statusbar-item-icon", children: icon }),
|
|
19
|
+
children != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "statusbar-item-label", children })
|
|
20
|
+
] });
|
|
21
|
+
const cls = `statusbar-item tone-${tone} ${onClick ? "clickable" : ""} ${className}`;
|
|
22
|
+
if (onClick) {
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: cls, onClick, children: content });
|
|
24
|
+
}
|
|
25
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cls, ...rest, children: content });
|
|
26
|
+
};
|
|
27
|
+
var StatusBar = ({
|
|
28
|
+
left,
|
|
29
|
+
center,
|
|
30
|
+
right,
|
|
31
|
+
className = "",
|
|
32
|
+
children,
|
|
33
|
+
...rest
|
|
34
|
+
}) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `statusbar ${className}`, role: "status", ...rest, children: [
|
|
35
|
+
left != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "statusbar-section left", children: left }),
|
|
36
|
+
center != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "statusbar-section center", children: center }),
|
|
37
|
+
children,
|
|
38
|
+
right != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "statusbar-section right", children: right })
|
|
39
|
+
] });
|
|
40
|
+
StatusBar.Item = StatusBarItem;
|
|
41
|
+
|
|
42
|
+
exports.StatusBar = StatusBar;
|
|
43
|
+
exports.StatusBarItem = StatusBarItem;
|
|
44
|
+
//# sourceMappingURL=chunk-7YQWG7HR.cjs.map
|
|
45
|
+
//# sourceMappingURL=chunk-7YQWG7HR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/StatusBar/StatusBar.tsx"],"names":["jsxs","Fragment","jsx"],"mappings":";;;;;;;;AAgBO,IAAM,gBAA8C,CAAC;AAAA,EAC1D,IAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,0BACJA,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,oBAAQC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACpD,YAAY,IAAA,oBAAQA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAwB,QAAA,EAAS;AAAA,GAAA,EACxE,CAAA;AAEF,EAAA,MAAM,GAAA,GAAM,uBAAuB,IAAI,CAAA,CAAA,EAAI,UAAU,WAAA,GAAc,EAAE,IAAI,SAAS,CAAA,CAAA;AAClF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,sCACG,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,GAAA,EAAK,SACnC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,EAEJ;AACA,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAM,GAAG,MACtB,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AAwBO,IAAM,YAAuE,CAAC;AAAA,EACnF,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEF,eAAA,CAAC,SAAI,SAAA,EAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,IAAA,EAAK,QAAA,EAAU,GAAG,IAAA,EACzD,QAAA,EAAA;AAAA,EAAA,IAAA,IAAQ,IAAA,oBAAQE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,EAC9D,UAAU,IAAA,oBAAQA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAA4B,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,EACpE,QAAA;AAAA,EACA,SAAS,IAAA,oBAAQA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA,CAAA,EACpE;AAGF,SAAA,CAAU,IAAA,GAAO,aAAA","file":"chunk-7YQWG7HR.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./StatusBar.css\";\nimport * as React from \"react\";\n\nexport interface StatusBarItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Optional leading node (usually an `<Icon />`). */\n icon?: React.ReactNode;\n /** Visual tone — shifts color only. */\n tone?: \"default\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Makes the item clickable (also renders as `<button>` when `onClick` is set). */\n onClick?: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement>) => void;\n children?: React.ReactNode;\n}\n\n/** `StatusBar.Item` — one inline slot. Put icon + text inside. */\nexport const StatusBarItem: React.FC<StatusBarItemProps> = ({\n icon,\n tone = \"default\",\n onClick,\n className = \"\",\n children,\n ...rest\n}) => {\n const content = (\n <>\n {icon && <span className=\"statusbar-item-icon\">{icon}</span>}\n {children != null && <span className=\"statusbar-item-label\">{children}</span>}\n </>\n );\n const cls = `statusbar-item tone-${tone} ${onClick ? \"clickable\" : \"\"} ${className}`;\n if (onClick) {\n return (\n <button type=\"button\" className={cls} onClick={onClick as React.MouseEventHandler<HTMLButtonElement>}>\n {content}\n </button>\n );\n }\n return (\n <div className={cls} {...rest}>\n {content}\n </div>\n );\n};\n\nexport interface StatusBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Left-aligned slot. */\n left?: React.ReactNode;\n /** Center slot — absolutely positioned, stays centered regardless of side widths. */\n center?: React.ReactNode;\n /** Right-aligned slot. */\n right?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `StatusBar` — thin bottom bar for app state (branch, line/col, sync, etc.).\n * Pair with `TitleBar` to bracket the window chrome.\n *\n * @example\n * ```tsx\n * <StatusBar\n * left={<StatusBar.Item icon={<Icon name=\"check\" size={12} />} tone=\"success\">Ready</StatusBar.Item>}\n * right={<StatusBar.Item tone=\"muted\">UTF-8</StatusBar.Item>}\n * />\n * ```\n */\nexport const StatusBar: React.FC<StatusBarProps> & { Item: typeof StatusBarItem } = ({\n left,\n center,\n right,\n className = \"\",\n children,\n ...rest\n}) => (\n <div className={`statusbar ${className}`} role=\"status\" {...rest}>\n {left != null && <div className=\"statusbar-section left\">{left}</div>}\n {center != null && <div className=\"statusbar-section center\">{center}</div>}\n {children}\n {right != null && <div className=\"statusbar-section right\">{right}</div>}\n </div>\n);\n\nStatusBar.Item = StatusBarItem;\n"]}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkMKR4X57L_cjs = require('./chunk-MKR4X57L.cjs');
|
|
4
|
+
require('./tokens-BIIUTPKN.css');
|
|
5
|
+
require('./shared-NJHRNLRH.css');
|
|
6
|
+
require('./CommandPalette-T45DBMPY.css');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var ReactDOM = require('react-dom');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
15
|
+
var n = Object.create(null);
|
|
16
|
+
if (e) {
|
|
17
|
+
Object.keys(e).forEach(function (k) {
|
|
18
|
+
if (k !== 'default') {
|
|
19
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return e[k]; }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
n.default = e;
|
|
28
|
+
return Object.freeze(n);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
32
|
+
var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
|
|
33
|
+
|
|
34
|
+
var DEFAULT_FILTER = (item, q) => {
|
|
35
|
+
if (!q) return true;
|
|
36
|
+
const hay = [item.label, ...item.keywords ?? []].join(" ").toLowerCase();
|
|
37
|
+
const needle = q.toLowerCase();
|
|
38
|
+
let i = 0;
|
|
39
|
+
for (const ch of hay) {
|
|
40
|
+
if (ch === needle[i]) i++;
|
|
41
|
+
if (i === needle.length) return true;
|
|
42
|
+
}
|
|
43
|
+
return i === needle.length;
|
|
44
|
+
};
|
|
45
|
+
var CommandPalette = ({
|
|
46
|
+
open,
|
|
47
|
+
onOpenChange,
|
|
48
|
+
items,
|
|
49
|
+
placeholder = "\u641C\u7D22\u547D\u4EE4\u2026",
|
|
50
|
+
filter = DEFAULT_FILTER,
|
|
51
|
+
emptyText = "\u6682\u65E0\u5339\u914D\u7ED3\u679C",
|
|
52
|
+
resetOnOpen = true,
|
|
53
|
+
footer,
|
|
54
|
+
className = ""
|
|
55
|
+
}) => {
|
|
56
|
+
const [query, setQuery] = React__namespace.useState("");
|
|
57
|
+
const [active, setActive] = React__namespace.useState(0);
|
|
58
|
+
const inputRef = React__namespace.useRef(null);
|
|
59
|
+
const listRef = React__namespace.useRef(null);
|
|
60
|
+
const filtered = React__namespace.useMemo(() => items.filter((it) => filter(it, query)), [items, query, filter]);
|
|
61
|
+
const grouped = React__namespace.useMemo(() => {
|
|
62
|
+
const order = [];
|
|
63
|
+
const map = /* @__PURE__ */ new Map();
|
|
64
|
+
for (const it of filtered) {
|
|
65
|
+
const g = it.group ?? "";
|
|
66
|
+
if (!map.has(g)) {
|
|
67
|
+
map.set(g, []);
|
|
68
|
+
order.push(g);
|
|
69
|
+
}
|
|
70
|
+
map.get(g).push(it);
|
|
71
|
+
}
|
|
72
|
+
return order.map((g) => ({ group: g, items: map.get(g) }));
|
|
73
|
+
}, [filtered]);
|
|
74
|
+
const close = React__namespace.useCallback(() => onOpenChange?.(false), [onOpenChange]);
|
|
75
|
+
React__namespace.useEffect(() => {
|
|
76
|
+
if (!open) return;
|
|
77
|
+
if (resetOnOpen) setQuery("");
|
|
78
|
+
setActive(0);
|
|
79
|
+
const id = requestAnimationFrame(() => inputRef.current?.focus());
|
|
80
|
+
return () => cancelAnimationFrame(id);
|
|
81
|
+
}, [open, resetOnOpen]);
|
|
82
|
+
React__namespace.useEffect(() => {
|
|
83
|
+
setActive((a) => filtered.length === 0 ? 0 : Math.min(a, filtered.length - 1));
|
|
84
|
+
}, [filtered.length]);
|
|
85
|
+
React__namespace.useEffect(() => {
|
|
86
|
+
const el = listRef.current?.querySelector(`[data-cmd-idx="${active}"]`);
|
|
87
|
+
el?.scrollIntoView({ block: "nearest" });
|
|
88
|
+
}, [active, filtered]);
|
|
89
|
+
const pick = (it) => {
|
|
90
|
+
if (it.disabled) return;
|
|
91
|
+
it.onSelect?.();
|
|
92
|
+
close();
|
|
93
|
+
};
|
|
94
|
+
const onKey = (e) => {
|
|
95
|
+
if (e.key === "Escape") {
|
|
96
|
+
e.preventDefault();
|
|
97
|
+
close();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (e.key === "ArrowDown") {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
setActive((a) => {
|
|
103
|
+
if (filtered.length === 0) return 0;
|
|
104
|
+
for (let n = 1; n <= filtered.length; n++) {
|
|
105
|
+
const i = (a + n) % filtered.length;
|
|
106
|
+
if (!filtered[i].disabled) return i;
|
|
107
|
+
}
|
|
108
|
+
return a;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (e.key === "ArrowUp") {
|
|
112
|
+
e.preventDefault();
|
|
113
|
+
setActive((a) => {
|
|
114
|
+
if (filtered.length === 0) return 0;
|
|
115
|
+
for (let n = 1; n <= filtered.length; n++) {
|
|
116
|
+
const i = (a - n + filtered.length) % filtered.length;
|
|
117
|
+
if (!filtered[i].disabled) return i;
|
|
118
|
+
}
|
|
119
|
+
return a;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (e.key === "Enter") {
|
|
123
|
+
const it = filtered[active];
|
|
124
|
+
if (it) {
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
pick(it);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
if (typeof document === "undefined" || !open) return null;
|
|
131
|
+
let flatIdx = -1;
|
|
132
|
+
return ReactDOM__default.default.createPortal(
|
|
133
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `cmdp-overlay ${className}`, onMouseDown: close, role: "presentation", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
134
|
+
"div",
|
|
135
|
+
{
|
|
136
|
+
className: "cmdp-panel",
|
|
137
|
+
onMouseDown: (e) => e.stopPropagation(),
|
|
138
|
+
role: "dialog",
|
|
139
|
+
"aria-modal": true,
|
|
140
|
+
"aria-label": "\u547D\u4EE4\u9762\u677F",
|
|
141
|
+
children: [
|
|
142
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-search", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
143
|
+
chunkMKR4X57L_cjs.Input,
|
|
144
|
+
{
|
|
145
|
+
ref: inputRef,
|
|
146
|
+
size: "lg",
|
|
147
|
+
leadingIcon: "search",
|
|
148
|
+
placeholder,
|
|
149
|
+
value: query,
|
|
150
|
+
onChange: (v) => setQuery(v),
|
|
151
|
+
onKeyDown: onKey,
|
|
152
|
+
suffix: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "esc" })
|
|
153
|
+
}
|
|
154
|
+
) }),
|
|
155
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: listRef, className: "cmdp-list", role: "listbox", children: grouped.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-empty", children: emptyText }) : grouped.map(({ group, items: gItems }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cmdp-group", children: [
|
|
156
|
+
group && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-group-head", children: group }),
|
|
157
|
+
gItems.map((it) => {
|
|
158
|
+
flatIdx += 1;
|
|
159
|
+
const i = flatIdx;
|
|
160
|
+
const isActive = i === active;
|
|
161
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
162
|
+
"button",
|
|
163
|
+
{
|
|
164
|
+
type: "button",
|
|
165
|
+
role: "option",
|
|
166
|
+
"aria-selected": isActive,
|
|
167
|
+
"data-cmd-idx": i,
|
|
168
|
+
disabled: it.disabled,
|
|
169
|
+
className: `cmdp-item ${isActive ? "active" : ""}`,
|
|
170
|
+
onMouseEnter: () => setActive(i),
|
|
171
|
+
onClick: () => pick(it),
|
|
172
|
+
children: [
|
|
173
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-icon", children: it.icon }),
|
|
174
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cmdp-labels", children: [
|
|
175
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-label", children: it.label }),
|
|
176
|
+
it.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-desc", children: it.description })
|
|
177
|
+
] }),
|
|
178
|
+
it.shortcut && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-shortcut", children: it.shortcut })
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
it.key
|
|
182
|
+
);
|
|
183
|
+
})
|
|
184
|
+
] }, group || "_")) }),
|
|
185
|
+
footer === null ? null : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-footer", children: footer ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
186
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
187
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "\u2191" }),
|
|
188
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "\u2193" }),
|
|
189
|
+
" \u5207\u6362"
|
|
190
|
+
] }),
|
|
191
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
192
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "\u23CE" }),
|
|
193
|
+
" \u6267\u884C"
|
|
194
|
+
] }),
|
|
195
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
196
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "esc" }),
|
|
197
|
+
" \u5173\u95ED"
|
|
198
|
+
] })
|
|
199
|
+
] }) })
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
) }),
|
|
203
|
+
document.body
|
|
204
|
+
);
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
exports.CommandPalette = CommandPalette;
|
|
208
|
+
//# sourceMappingURL=chunk-AGN3JSUH.cjs.map
|
|
209
|
+
//# sourceMappingURL=chunk-AGN3JSUH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/CommandPalette/CommandPalette.tsx"],"names":["React","ReactDOM","jsx","jsxs","Input","Fragment"],"mappings":"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","file":"chunk-AGN3JSUH.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./CommandPalette.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Input } from \"../Input\";\n\nexport interface CommandItem {\n key: string;\n /** Displayed label; also matched against the search query by default. */\n label: string;\n /** Optional secondary line — e.g. \"Open recent\". */\n description?: React.ReactNode;\n /** Leading icon. */\n icon?: React.ReactNode;\n /** Right-aligned shortcut hint, e.g. `\"⌘P\"`. */\n shortcut?: React.ReactNode;\n /** Extra search terms beyond `label`. */\n keywords?: string[];\n /** Group heading. Items sharing a `group` appear under one heading. */\n group?: string;\n /** Ignored by default filter — still shown. */\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange?: (open: boolean) => void;\n items: CommandItem[];\n placeholder?: string;\n /** Custom matcher. Return true to keep the item. */\n filter?: (item: CommandItem, query: string) => boolean;\n /** Shown when no item matches the query. */\n emptyText?: React.ReactNode;\n /** Reset the query to empty whenever the palette opens. Default true. */\n resetOnOpen?: boolean;\n /** Footer node. Pass `null` to hide. */\n footer?: React.ReactNode;\n className?: string;\n}\n\nconst DEFAULT_FILTER = (item: CommandItem, q: string) => {\n if (!q) return true;\n const hay = [item.label, ...(item.keywords ?? [])].join(\" \").toLowerCase();\n const needle = q.toLowerCase();\n // Simple subsequence match — each char of needle appears in order in haystack.\n let i = 0;\n for (const ch of hay) {\n if (ch === needle[i]) i++;\n if (i === needle.length) return true;\n }\n return i === needle.length;\n};\n\n/**\n * `CommandPalette` — ⌘K-style action launcher. Search + grouped items +\n * keyboard nav. Rendered into `document.body`.\n *\n * The parent controls `open` via state — wire `Cmd/Ctrl+K` to toggle.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n * React.useEffect(() => {\n * const h = (e: KeyboardEvent) => {\n * if ((e.metaKey || e.ctrlKey) && e.key === \"k\") { e.preventDefault(); setOpen(o => !o); }\n * };\n * window.addEventListener(\"keydown\", h);\n * return () => window.removeEventListener(\"keydown\", h);\n * }, []);\n *\n * <CommandPalette\n * open={open}\n * onOpenChange={setOpen}\n * items={[\n * { key: \"new\", label: \"新建文件\", icon: <Icon name=\"plus\" size={14} />, group: \"文件\", shortcut: \"⌘N\", onSelect: () => {} },\n * ...\n * ]}\n * />\n * ```\n */\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open,\n onOpenChange,\n items,\n placeholder = \"搜索命令…\",\n filter = DEFAULT_FILTER,\n emptyText = \"暂无匹配结果\",\n resetOnOpen = true,\n footer,\n className = \"\",\n}) => {\n const [query, setQuery] = React.useState(\"\");\n const [active, setActive] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n const filtered = React.useMemo(() => items.filter((it) => filter(it, query)), [items, query, filter]);\n\n // Group items preserving the original order of first occurrence.\n const grouped = React.useMemo(() => {\n const order: string[] = [];\n const map = new Map<string, CommandItem[]>();\n for (const it of filtered) {\n const g = it.group ?? \"\";\n if (!map.has(g)) { map.set(g, []); order.push(g); }\n map.get(g)!.push(it);\n }\n return order.map((g) => ({ group: g, items: map.get(g)! }));\n }, [filtered]);\n\n const close = React.useCallback(() => onOpenChange?.(false), [onOpenChange]);\n\n // Reset & focus on open.\n React.useEffect(() => {\n if (!open) return;\n if (resetOnOpen) setQuery(\"\");\n setActive(0);\n const id = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(id);\n }, [open, resetOnOpen]);\n\n // Clamp active when the filtered list shrinks.\n React.useEffect(() => {\n setActive((a) => (filtered.length === 0 ? 0 : Math.min(a, filtered.length - 1)));\n }, [filtered.length]);\n\n // Scroll active item into view.\n React.useEffect(() => {\n const el = listRef.current?.querySelector<HTMLElement>(`[data-cmd-idx=\"${active}\"]`);\n el?.scrollIntoView({ block: \"nearest\" });\n }, [active, filtered]);\n\n const pick = (it: CommandItem) => {\n if (it.disabled) return;\n it.onSelect?.();\n close();\n };\n\n const onKey = (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") { e.preventDefault(); close(); return; }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActive((a) => {\n if (filtered.length === 0) return 0;\n for (let n = 1; n <= filtered.length; n++) {\n const i = (a + n) % filtered.length;\n if (!filtered[i].disabled) return i;\n }\n return a;\n });\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActive((a) => {\n if (filtered.length === 0) return 0;\n for (let n = 1; n <= filtered.length; n++) {\n const i = (a - n + filtered.length) % filtered.length;\n if (!filtered[i].disabled) return i;\n }\n return a;\n });\n }\n if (e.key === \"Enter\") {\n const it = filtered[active];\n if (it) { e.preventDefault(); pick(it); }\n }\n };\n\n if (typeof document === \"undefined\" || !open) return null;\n\n // Build a flat index map so rendered list items know their position in `filtered`.\n let flatIdx = -1;\n\n return ReactDOM.createPortal(\n <div className={`cmdp-overlay ${className}`} onMouseDown={close} role=\"presentation\">\n <div\n className=\"cmdp-panel\"\n onMouseDown={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-label=\"命令面板\"\n >\n <div className=\"cmdp-search\">\n <Input\n ref={inputRef}\n size=\"lg\"\n leadingIcon=\"search\"\n placeholder={placeholder}\n value={query}\n onChange={(v) => setQuery(v)}\n onKeyDown={onKey}\n suffix={<span className=\"cmdp-kbd\">esc</span>}\n />\n </div>\n\n <div ref={listRef} className=\"cmdp-list\" role=\"listbox\">\n {grouped.length === 0 ? (\n <div className=\"cmdp-empty\">{emptyText}</div>\n ) : (\n grouped.map(({ group, items: gItems }) => (\n <div key={group || \"_\"} className=\"cmdp-group\">\n {group && <div className=\"cmdp-group-head\">{group}</div>}\n {gItems.map((it) => {\n flatIdx += 1;\n const i = flatIdx;\n const isActive = i === active;\n return (\n <button\n key={it.key}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-cmd-idx={i}\n disabled={it.disabled}\n className={`cmdp-item ${isActive ? \"active\" : \"\"}`}\n onMouseEnter={() => setActive(i)}\n onClick={() => pick(it)}\n >\n <span className=\"cmdp-icon\">{it.icon}</span>\n <span className=\"cmdp-labels\">\n <span className=\"cmdp-label\">{it.label}</span>\n {it.description && <span className=\"cmdp-desc\">{it.description}</span>}\n </span>\n {it.shortcut && <span className=\"cmdp-shortcut\">{it.shortcut}</span>}\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {footer === null ? null : (\n <div className=\"cmdp-footer\">\n {footer ?? (\n <>\n <span><span className=\"cmdp-kbd\">↑</span><span className=\"cmdp-kbd\">↓</span> 切换</span>\n <span><span className=\"cmdp-kbd\">⏎</span> 执行</span>\n <span><span className=\"cmdp-kbd\">esc</span> 关闭</span>\n </>\n )}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkRSZNFKCQ_cjs = require('./chunk-RSZNFKCQ.cjs');
|
|
4
4
|
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
5
|
-
require('./tokens-
|
|
5
|
+
require('./tokens-BIIUTPKN.css');
|
|
6
6
|
require('./shared-NJHRNLRH.css');
|
|
7
|
-
require('./Modal-
|
|
7
|
+
require('./Modal-XSDMU4XJ.css');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var ReactDOM = require('react-dom');
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -88,9 +88,9 @@ var Modal = ({
|
|
|
88
88
|
if (!open && destroyOnClose) return null;
|
|
89
89
|
const overlayStyle = zIndex != null ? { zIndex } : void 0;
|
|
90
90
|
const defaultFooter = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
91
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkRSZNFKCQ_cjs.Button, { variant: "ghost", onClick: handleCancel, ...cancelButtonProps, children: cancelText }),
|
|
92
92
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
-
|
|
93
|
+
chunkRSZNFKCQ_cjs.Button,
|
|
94
94
|
{
|
|
95
95
|
variant: "primary",
|
|
96
96
|
loading: confirmLoading,
|
|
@@ -146,5 +146,5 @@ var Modal = ({
|
|
|
146
146
|
};
|
|
147
147
|
|
|
148
148
|
exports.Modal = Modal;
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
150
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-AR4M7QGF.cjs.map
|
|
150
|
+
//# sourceMappingURL=chunk-AR4M7QGF.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":["React","jsxs","Fragment","jsx","Button","ReactDOM","Icon"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":["React","jsxs","Fragment","jsx","Button","ReactDOM","Icon"],"mappings":"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","file":"chunk-AR4M7QGF.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkRVSWH4RH_cjs = require('./chunk-RVSWH4RH.cjs');
|
|
4
4
|
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
5
|
-
require('./tokens-
|
|
5
|
+
require('./tokens-BIIUTPKN.css');
|
|
6
6
|
require('./shared-NJHRNLRH.css');
|
|
7
7
|
require('./Pagination-YIRYJUXP.css');
|
|
8
8
|
var React = require('react');
|
|
@@ -123,7 +123,7 @@ var Pagination = ({
|
|
|
123
123
|
}
|
|
124
124
|
),
|
|
125
125
|
showSizeChanger && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pg-size-changer", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
-
|
|
126
|
+
chunkRVSWH4RH_cjs.Select,
|
|
127
127
|
{
|
|
128
128
|
value: pageSize,
|
|
129
129
|
size: "sm",
|
|
@@ -152,5 +152,5 @@ var Pagination = ({
|
|
|
152
152
|
};
|
|
153
153
|
|
|
154
154
|
exports.Pagination = Pagination;
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
156
|
-
//# sourceMappingURL=chunk-
|
|
155
|
+
//# sourceMappingURL=chunk-AWLBLRQX.cjs.map
|
|
156
|
+
//# sourceMappingURL=chunk-AWLBLRQX.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":["React","jsxs","jsx","Icon","Select"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":["React","jsxs","jsx","Icon","Select"],"mappings":"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","file":"chunk-AWLBLRQX.cjs","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"]}
|