@fangxinyan/lumina 0.1.5 → 0.2.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-GSBY5T5U.css → Accordion-3TQPKNN3.css} +8 -1
- package/dist/Accordion.cjs +2 -2
- package/dist/Accordion.d.cts +12 -0
- package/dist/Accordion.d.ts +12 -0
- package/dist/Accordion.js +1 -1
- package/dist/{Alert-LSKBYDRI.css → Alert-JJ7GB3UU.css} +11 -0
- package/dist/Alert.cjs +2 -2
- package/dist/Alert.d.cts +4 -0
- package/dist/Alert.d.ts +4 -0
- package/dist/Alert.js +1 -1
- package/dist/{Avatar-OXDSG5Q6.css → Avatar-R5A4AFKZ.css} +4 -0
- package/dist/Avatar.cjs +2 -2
- package/dist/Avatar.d.cts +2 -0
- package/dist/Avatar.d.ts +2 -0
- package/dist/Avatar.js +1 -1
- package/dist/{Button-5UI7QXGU.css → Button-SDQD25AG.css} +2 -0
- package/dist/Button.cjs +3 -3
- package/dist/Button.d.cts +2 -0
- package/dist/Button.d.ts +2 -0
- package/dist/Button.js +1 -1
- package/dist/Calendar.cjs +2 -2
- package/dist/Calendar.d.cts +8 -0
- package/dist/Calendar.d.ts +8 -0
- package/dist/Calendar.js +1 -1
- package/dist/{Card-2CHHFD4Y.css → Card-RG7ECXL2.css} +11 -0
- package/dist/Card.cjs +3 -3
- package/dist/Card.d.cts +2 -0
- package/dist/Card.d.ts +2 -0
- package/dist/Card.js +1 -1
- package/dist/{Divider-Z37INS5E.css → Divider-OEE4Q2KS.css} +31 -0
- package/dist/Divider.cjs +2 -2
- package/dist/Divider.d.cts +7 -0
- package/dist/Divider.d.ts +7 -0
- package/dist/Divider.js +1 -1
- package/dist/Drawer-IPGB4CXH.css +101 -0
- package/dist/Drawer.cjs +13 -0
- package/dist/Drawer.cjs.map +1 -0
- package/dist/Drawer.d.cts +45 -0
- package/dist/Drawer.d.ts +45 -0
- package/dist/Drawer.js +4 -0
- package/dist/Drawer.js.map +1 -0
- package/dist/{Empty-VM23UNLQ.css → Empty-NQ72W3D7.css} +22 -0
- package/dist/Empty.cjs +4 -4
- package/dist/Empty.d.cts +42 -2
- package/dist/Empty.d.ts +42 -2
- package/dist/Empty.js +1 -1
- package/dist/Input-33CAH4O6.css +134 -0
- package/dist/Input.cjs +3 -3
- package/dist/Input.d.cts +17 -1
- package/dist/Input.d.ts +17 -1
- package/dist/Input.js +1 -1
- package/dist/Modal-N4YVLEWW.css +72 -0
- package/dist/Modal.cjs +3 -7
- package/dist/Modal.d.cts +37 -8
- package/dist/Modal.d.ts +37 -8
- package/dist/Modal.js +2 -2
- package/dist/{Pagination-6FFOI4NM.css → Pagination-YIRYJUXP.css} +33 -0
- package/dist/Pagination.cjs +5 -2
- package/dist/Pagination.d.cts +14 -0
- package/dist/Pagination.d.ts +14 -0
- package/dist/Pagination.js +4 -1
- package/dist/Select.cjs +3 -3
- package/dist/Select.js +2 -2
- package/dist/{Slider-RE4HZQKF.css → Slider-X4PVA65R.css} +51 -2
- package/dist/Slider.cjs +2 -2
- package/dist/Slider.d.cts +20 -5
- package/dist/Slider.d.ts +20 -5
- package/dist/Slider.js +1 -1
- package/dist/Switch-36KJNDXM.css +92 -0
- package/dist/Switch.cjs +2 -2
- package/dist/Switch.d.cts +4 -0
- package/dist/Switch.d.ts +4 -0
- package/dist/Switch.js +1 -1
- package/dist/Table-ADVN6LXP.css +295 -0
- package/dist/Table.cjs +7 -3
- package/dist/Table.d.cts +103 -7
- package/dist/Table.d.ts +103 -7
- package/dist/Table.js +5 -1
- package/dist/{Tabs-A27TSZOP.css → Tabs-RHK6XAFF.css} +7 -0
- package/dist/Tabs.cjs +3 -3
- package/dist/Tabs.d.cts +2 -0
- package/dist/Tabs.d.ts +2 -0
- package/dist/Tabs.js +1 -1
- package/dist/{Tag-EYOY3UWG.css → Tag-FGDY3W7E.css} +2 -0
- package/dist/Tag.cjs +3 -3
- package/dist/Tag.d.cts +5 -0
- package/dist/Tag.d.ts +5 -0
- package/dist/Tag.js +1 -1
- package/dist/chunk-437LB2V4.js +111 -0
- package/dist/chunk-437LB2V4.js.map +1 -0
- package/dist/chunk-4MR4GVTD.js +73 -0
- package/dist/chunk-4MR4GVTD.js.map +1 -0
- package/dist/{chunk-OXYFB2ZI.js → chunk-4U4OY5RA.js} +11 -5
- package/dist/chunk-4U4OY5RA.js.map +1 -0
- package/dist/chunk-55NTFU7Y.js +476 -0
- package/dist/chunk-55NTFU7Y.js.map +1 -0
- package/dist/{chunk-5EYI27B6.js → chunk-77BVQNAQ.js} +5 -3
- package/dist/chunk-77BVQNAQ.js.map +1 -0
- package/dist/chunk-AEJJGUEN.cjs +127 -0
- package/dist/chunk-AEJJGUEN.cjs.map +1 -0
- package/dist/{chunk-3QWHDCHJ.js → chunk-AJZKESHB.js} +13 -4
- package/dist/chunk-AJZKESHB.js.map +1 -0
- package/dist/{chunk-NZPJ7BUB.cjs → chunk-AXMEZGEG.cjs} +13 -4
- package/dist/chunk-AXMEZGEG.cjs.map +1 -0
- package/dist/{chunk-HTP6UEVR.js → chunk-BBPNQ44M.js} +22 -6
- package/dist/chunk-BBPNQ44M.js.map +1 -0
- package/dist/chunk-CCBHZYE6.cjs +150 -0
- package/dist/chunk-CCBHZYE6.cjs.map +1 -0
- package/dist/{chunk-KGYLUZOU.cjs → chunk-EPFYIR63.cjs} +5 -5
- package/dist/{chunk-KGYLUZOU.cjs.map → chunk-EPFYIR63.cjs.map} +1 -1
- package/dist/chunk-F7HW2PYR.cjs +119 -0
- package/dist/chunk-F7HW2PYR.cjs.map +1 -0
- package/dist/chunk-GIVMKGZN.js +39 -0
- package/dist/chunk-GIVMKGZN.js.map +1 -0
- package/dist/{chunk-FMG3ZPGK.js → chunk-H6FCIJOP.js} +5 -3
- package/dist/chunk-H6FCIJOP.js.map +1 -0
- package/dist/{chunk-ALFDP5WX.cjs → chunk-IDM6JJLP.cjs} +22 -6
- package/dist/chunk-IDM6JJLP.cjs.map +1 -0
- package/dist/chunk-IFERLHCL.cjs +499 -0
- package/dist/chunk-IFERLHCL.cjs.map +1 -0
- package/dist/chunk-IWVKITPN.js +102 -0
- package/dist/chunk-IWVKITPN.js.map +1 -0
- package/dist/{chunk-I2ERCHFV.cjs → chunk-JKLQOB2F.cjs} +11 -5
- package/dist/chunk-JKLQOB2F.cjs.map +1 -0
- package/dist/{chunk-IGHLSNXT.cjs → chunk-K7PVJLW4.cjs} +51 -4
- package/dist/chunk-K7PVJLW4.cjs.map +1 -0
- package/dist/chunk-LDENBYRC.cjs +210 -0
- package/dist/chunk-LDENBYRC.cjs.map +1 -0
- package/dist/chunk-LSLYY5FN.js +125 -0
- package/dist/chunk-LSLYY5FN.js.map +1 -0
- package/dist/chunk-NSUD5B22.js +187 -0
- package/dist/chunk-NSUD5B22.js.map +1 -0
- package/dist/{chunk-AAMYURWQ.cjs → chunk-OPTTHURA.cjs} +5 -3
- package/dist/chunk-OPTTHURA.cjs.map +1 -0
- package/dist/{chunk-F3NHM4GX.js → chunk-OYGFMXAA.js} +13 -4
- package/dist/chunk-OYGFMXAA.js.map +1 -0
- package/dist/chunk-PBBHUUXU.cjs +133 -0
- package/dist/chunk-PBBHUUXU.cjs.map +1 -0
- package/dist/chunk-RDLPX7RK.cjs +95 -0
- package/dist/chunk-RDLPX7RK.cjs.map +1 -0
- package/dist/{chunk-XFRP2MBR.js → chunk-TYQ5CN2C.js} +51 -4
- package/dist/chunk-TYQ5CN2C.js.map +1 -0
- package/dist/{chunk-7CKHWCEA.cjs → chunk-TZSWDH5T.cjs} +5 -3
- package/dist/chunk-TZSWDH5T.cjs.map +1 -0
- package/dist/{chunk-VMHNKD3N.cjs → chunk-URF6RBW6.cjs} +13 -4
- package/dist/chunk-URF6RBW6.cjs.map +1 -0
- package/dist/{chunk-G3UWXSNQ.js → chunk-V34OPWKZ.js} +5 -4
- package/dist/chunk-V34OPWKZ.js.map +1 -0
- package/dist/{chunk-ITGCHU3Y.cjs → chunk-VICGQC6G.cjs} +5 -4
- package/dist/chunk-VICGQC6G.cjs.map +1 -0
- package/dist/chunk-YEOARJKR.cjs +40 -0
- package/dist/chunk-YEOARJKR.cjs.map +1 -0
- package/dist/chunk-Z5X5AMLA.cjs +41 -0
- package/dist/chunk-Z5X5AMLA.cjs.map +1 -0
- package/dist/chunk-Z7P6QGMT.js +115 -0
- package/dist/chunk-Z7P6QGMT.js.map +1 -0
- package/dist/{chunk-OYH6A7IQ.js → chunk-ZVCMXDTP.js} +3 -3
- package/dist/{chunk-OYH6A7IQ.js.map → chunk-ZVCMXDTP.js.map} +1 -1
- package/dist/chunk-ZWP4LSS3.js +38 -0
- package/dist/chunk-ZWP4LSS3.js.map +1 -0
- package/dist/index.cjs +57 -56
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +19 -18
- package/dist/index.js.map +1 -1
- package/dist/styles.css +566 -50
- package/package.json +1 -1
- package/dist/Input-Z526ARZP.css +0 -66
- package/dist/Modal-AYKNIWWQ.css +0 -79
- package/dist/Switch-NP7KKJOX.css +0 -44
- package/dist/Table-ZDPGWLH3.css +0 -139
- package/dist/chunk-2VA2HSL4.cjs +0 -121
- package/dist/chunk-2VA2HSL4.cjs.map +0 -1
- package/dist/chunk-2W2AJUZW.js +0 -118
- package/dist/chunk-2W2AJUZW.js.map +0 -1
- package/dist/chunk-3QWHDCHJ.js.map +0 -1
- package/dist/chunk-4AA22BOG.js +0 -63
- package/dist/chunk-4AA22BOG.js.map +0 -1
- package/dist/chunk-5EYI27B6.js.map +0 -1
- package/dist/chunk-77NP67ML.cjs +0 -70
- package/dist/chunk-77NP67ML.cjs.map +0 -1
- package/dist/chunk-7CKHWCEA.cjs.map +0 -1
- package/dist/chunk-7NM5BRUX.js +0 -91
- package/dist/chunk-7NM5BRUX.js.map +0 -1
- package/dist/chunk-7UJI437T.js +0 -49
- package/dist/chunk-7UJI437T.js.map +0 -1
- package/dist/chunk-AAMYURWQ.cjs.map +0 -1
- package/dist/chunk-ALFDP5WX.cjs.map +0 -1
- package/dist/chunk-F3NHM4GX.js.map +0 -1
- package/dist/chunk-FMG3ZPGK.js.map +0 -1
- package/dist/chunk-G3UWXSNQ.js.map +0 -1
- package/dist/chunk-HTP6UEVR.js.map +0 -1
- package/dist/chunk-I2ERCHFV.cjs.map +0 -1
- package/dist/chunk-IBZAGURN.cjs +0 -71
- package/dist/chunk-IBZAGURN.cjs.map +0 -1
- package/dist/chunk-IGHLSNXT.cjs.map +0 -1
- package/dist/chunk-ITGCHU3Y.cjs.map +0 -1
- package/dist/chunk-JNFCTYJT.cjs +0 -31
- package/dist/chunk-JNFCTYJT.cjs.map +0 -1
- package/dist/chunk-JWFVSBVX.cjs +0 -30
- package/dist/chunk-JWFVSBVX.cjs.map +0 -1
- package/dist/chunk-K67KIKX4.cjs +0 -67
- package/dist/chunk-K67KIKX4.cjs.map +0 -1
- package/dist/chunk-KF4MCHZL.cjs +0 -105
- package/dist/chunk-KF4MCHZL.cjs.map +0 -1
- package/dist/chunk-M6OTFXZA.js +0 -48
- package/dist/chunk-M6OTFXZA.js.map +0 -1
- package/dist/chunk-NWJW5KLN.js +0 -29
- package/dist/chunk-NWJW5KLN.js.map +0 -1
- package/dist/chunk-NZPJ7BUB.cjs.map +0 -1
- package/dist/chunk-OXYFB2ZI.js.map +0 -1
- package/dist/chunk-Q33V7MSK.js +0 -79
- package/dist/chunk-Q33V7MSK.js.map +0 -1
- package/dist/chunk-QT7SJITQ.cjs +0 -114
- package/dist/chunk-QT7SJITQ.cjs.map +0 -1
- package/dist/chunk-VMHNKD3N.cjs.map +0 -1
- package/dist/chunk-VXITDXLW.js +0 -28
- package/dist/chunk-VXITDXLW.js.map +0 -1
- package/dist/chunk-XFRP2MBR.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Icon } from './chunk-GEYMWUW6.js';
|
|
2
|
+
import './tokens-HWQ7KWPG.css';
|
|
3
|
+
import './shared-NJHRNLRH.css';
|
|
4
|
+
import './Drawer-IPGB4CXH.css';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import ReactDOM from 'react-dom';
|
|
7
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var ANIM_MS = 280;
|
|
10
|
+
var Drawer = ({
|
|
11
|
+
open,
|
|
12
|
+
onClose,
|
|
13
|
+
placement = "right",
|
|
14
|
+
size = 380,
|
|
15
|
+
title,
|
|
16
|
+
extra,
|
|
17
|
+
footer,
|
|
18
|
+
children,
|
|
19
|
+
mask = true,
|
|
20
|
+
maskClosable = true,
|
|
21
|
+
keyboard = true,
|
|
22
|
+
closable = true,
|
|
23
|
+
closeIcon,
|
|
24
|
+
destroyOnClose = false,
|
|
25
|
+
afterOpenChange,
|
|
26
|
+
zIndex,
|
|
27
|
+
className = ""
|
|
28
|
+
}) => {
|
|
29
|
+
const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
if (open) setHasOpenedOnce(true);
|
|
32
|
+
}, [open]);
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
if (!open || !keyboard) return;
|
|
35
|
+
const h = (e) => e.key === "Escape" && onClose?.();
|
|
36
|
+
window.addEventListener("keydown", h);
|
|
37
|
+
return () => window.removeEventListener("keydown", h);
|
|
38
|
+
}, [open, keyboard, onClose]);
|
|
39
|
+
const prevOpen = React.useRef(open);
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
if (prevOpen.current !== open) {
|
|
42
|
+
prevOpen.current = open;
|
|
43
|
+
if (afterOpenChange) {
|
|
44
|
+
const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);
|
|
45
|
+
return () => window.clearTimeout(id);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, [open, afterOpenChange]);
|
|
49
|
+
if (typeof document === "undefined") return null;
|
|
50
|
+
if (!hasOpenedOnce) return null;
|
|
51
|
+
if (!open && destroyOnClose) return null;
|
|
52
|
+
const isV = placement === "left" || placement === "right";
|
|
53
|
+
const style = isV ? { width: size } : { height: size };
|
|
54
|
+
if (zIndex != null) style.zIndex = zIndex;
|
|
55
|
+
return ReactDOM.createPortal(
|
|
56
|
+
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
57
|
+
mask && /* @__PURE__ */ jsx(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
className: `drawer-overlay ${open ? "" : "hidden"}`,
|
|
61
|
+
style: zIndex != null ? { zIndex: zIndex - 1 } : void 0,
|
|
62
|
+
onClick: () => maskClosable && onClose?.()
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ jsxs(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
className: `drawer ${placement} ${open ? "" : "hidden"} ${className}`,
|
|
69
|
+
style,
|
|
70
|
+
onClick: (e) => e.stopPropagation(),
|
|
71
|
+
role: "dialog",
|
|
72
|
+
"aria-hidden": !open,
|
|
73
|
+
children: [
|
|
74
|
+
(title || extra || closable) && /* @__PURE__ */ jsxs("div", { className: "drawer-head", children: [
|
|
75
|
+
/* @__PURE__ */ jsx("div", { className: "drawer-title", children: title }),
|
|
76
|
+
/* @__PURE__ */ jsxs("div", { className: "drawer-head-right", children: [
|
|
77
|
+
extra,
|
|
78
|
+
closable && /* @__PURE__ */ jsx(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
className: "drawer-close",
|
|
83
|
+
onClick: onClose,
|
|
84
|
+
"aria-label": "Close",
|
|
85
|
+
children: closeIcon ?? /* @__PURE__ */ jsx(Icon, { name: "x", size: 16 })
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
] })
|
|
89
|
+
] }),
|
|
90
|
+
/* @__PURE__ */ jsx("div", { className: "drawer-body", children }),
|
|
91
|
+
footer && /* @__PURE__ */ jsx("div", { className: "drawer-foot", children: footer })
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
] }),
|
|
96
|
+
document.body
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { Drawer };
|
|
101
|
+
//# sourceMappingURL=chunk-IWVKITPN.js.map
|
|
102
|
+
//# sourceMappingURL=chunk-IWVKITPN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Drawer/Drawer.tsx"],"names":[],"mappings":"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","file":"chunk-IWVKITPN.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Drawer.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface DrawerProps {\n /** Whether the drawer is visible. */\n open: boolean;\n /** Close callback (triggered by mask click / close button / Esc). */\n onClose?: () => void;\n /** Which edge the drawer slides from. */\n placement?: \"left\" | \"right\" | \"top\" | \"bottom\";\n /** Width (for left/right) or height (for top/bottom). Number → px. */\n size?: number | string;\n /** Header title. */\n title?: React.ReactNode;\n /** Extra content rendered to the right of the title (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Footer content. */\n footer?: React.ReactNode;\n /** Drawer body. */\n children?: React.ReactNode;\n /** Render the mask overlay. Default true. Set `false` for a non-blocking drawer. */\n mask?: boolean;\n /** Close when clicking the mask. Default true. Ignored when `mask` is false. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n keyboard?: boolean;\n /** Show the close (×) button in the header. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /**\n * When true the drawer's children are unmounted every time it closes.\n * Default `false` — children stay mounted across open/close cycles so\n * internal state (form fields, scroll position) is preserved.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Stack index for nested drawers. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Drawer` — slide-in panel from an edge. */\nexport const Drawer: React.FC<DrawerProps> = ({\n open,\n onClose,\n placement = \"right\",\n size = 380,\n title,\n extra,\n footer,\n children,\n mask = true,\n maskClosable = true,\n keyboard = true,\n closable = true,\n closeIcon,\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 React.useEffect(() => {\n if (!open || !keyboard) return;\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose?.();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, keyboard, onClose]);\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 isV = placement === \"left\" || placement === \"right\";\n const style: React.CSSProperties = isV ? { width: size } : { height: size };\n if (zIndex != null) style.zIndex = zIndex;\n\n return ReactDOM.createPortal(\n <>\n {mask && (\n <div\n className={`drawer-overlay ${open ? \"\" : \"hidden\"}`}\n style={zIndex != null ? { zIndex: zIndex - 1 } : undefined}\n onClick={() => maskClosable && onClose?.()}\n />\n )}\n <div\n className={`drawer ${placement} ${open ? \"\" : \"hidden\"} ${className}`}\n style={style}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-hidden={!open}\n >\n {(title || extra || closable) && (\n <div className=\"drawer-head\">\n <div className=\"drawer-title\">{title}</div>\n <div className=\"drawer-head-right\">\n {extra}\n {closable && (\n <button\n type=\"button\"\n className=\"drawer-close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n </div>\n )}\n <div className=\"drawer-body\">{children}</div>\n {footer && <div className=\"drawer-foot\">{footer}</div>}\n </div>\n </>,\n document.body\n );\n};\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require('./tokens-HWQ7KWPG.css');
|
|
4
4
|
require('./shared-NJHRNLRH.css');
|
|
5
|
-
require('./Card-
|
|
5
|
+
require('./Card-RG7ECXL2.css');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
|
|
@@ -28,8 +28,14 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
28
28
|
|
|
29
29
|
// src/components/Card/Card.tsx
|
|
30
30
|
var Card = React__namespace.forwardRef(
|
|
31
|
-
({ variant = "raised", padding = "md", className = "", children, ...rest }, ref) => {
|
|
32
|
-
const cls = [
|
|
31
|
+
({ variant = "raised", padding = "md", hoverable, className = "", children, ...rest }, ref) => {
|
|
32
|
+
const cls = [
|
|
33
|
+
"card",
|
|
34
|
+
variant,
|
|
35
|
+
padding !== "md" && `pad-${padding}`,
|
|
36
|
+
hoverable && "hoverable",
|
|
37
|
+
className
|
|
38
|
+
].filter(Boolean).join(" ");
|
|
33
39
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cls, ...rest, children });
|
|
34
40
|
}
|
|
35
41
|
);
|
|
@@ -54,5 +60,5 @@ var Panel = ({
|
|
|
54
60
|
|
|
55
61
|
exports.Card = Card;
|
|
56
62
|
exports.Panel = Panel;
|
|
57
|
-
//# sourceMappingURL=chunk-
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
63
|
+
//# sourceMappingURL=chunk-JKLQOB2F.cjs.map
|
|
64
|
+
//# sourceMappingURL=chunk-JKLQOB2F.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,IAAA,GAAaA,gBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,OAAA,GAAU,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,SAAA,EAAW,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC7F,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,KAAY,IAAA,IAAQ,CAAA,IAAA,EAAO,OAAO,CAAA,CAAA;AAAA,MAClC,SAAA,IAAa,WAAA;AAAA,MACb;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,sCACG,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,GAAA,EAAM,GAAG,MAChC,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAYZ,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,qCACG,KAAA,EAAA,EAAI,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACtC,QAAA,EAAA;AAAA,EAAA,CAAA,KAAA,IAAS,OAAA,qBACTC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAASC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC3D,CAAA;AAAA,IACC,OAAA,oBAAWA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACtD,CAAA;AAAA,kBAEFA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS;AAAA,CAAA,EACxC","file":"chunk-JKLQOB2F.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Card.css\";\nimport * as React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual variant. `raised` protrudes; `sunken` recesses; `flat` is subtle. */\n variant?: \"raised\" | \"sunken\" | \"flat\";\n /** Inner padding. */\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n /** When true, the card raises and lifts on hover. */\n hoverable?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * `Card` — neumorphic surface container. Use to group related content.\n */\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ variant = \"raised\", padding = \"md\", hoverable, className = \"\", children, ...rest }, ref) => {\n const cls = [\n \"card\",\n variant,\n padding !== \"md\" && `pad-${padding}`,\n hoverable && \"hoverable\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div ref={ref} className={cls} {...rest}>\n {children}\n </div>\n );\n }\n);\nCard.displayName = \"Card\";\n\nexport interface PanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `Panel` — a titled `Card` with optional actions row.\n */\nexport const Panel: React.FC<PanelProps> = ({\n title,\n description,\n actions,\n children,\n className = \"\",\n ...rest\n}) => (\n <div className={`panel ${className}`} {...rest}>\n {(title || actions) && (\n <div className=\"panel-head\">\n <div className=\"panel-titles\">\n {title && <div className=\"panel-title\">{title}</div>}\n {description && <div className=\"panel-desc\">{description}</div>}\n </div>\n {actions && <div className=\"panel-actions\">{actions}</div>}\n </div>\n )}\n <div className=\"panel-body\">{children}</div>\n </div>\n);\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkEPFYIR63_cjs = require('./chunk-EPFYIR63.cjs');
|
|
3
4
|
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
4
5
|
require('./tokens-HWQ7KWPG.css');
|
|
5
6
|
require('./shared-NJHRNLRH.css');
|
|
6
|
-
require('./Pagination-
|
|
7
|
+
require('./Pagination-YIRYJUXP.css');
|
|
7
8
|
var React = require('react');
|
|
8
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
10
|
|
|
@@ -27,6 +28,7 @@ function _interopNamespace(e) {
|
|
|
27
28
|
|
|
28
29
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
29
30
|
|
|
31
|
+
var DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
30
32
|
var Pagination = ({
|
|
31
33
|
total,
|
|
32
34
|
pageSize = 10,
|
|
@@ -34,17 +36,37 @@ var Pagination = ({
|
|
|
34
36
|
defaultPage = 1,
|
|
35
37
|
onChange,
|
|
36
38
|
siblings = 1,
|
|
39
|
+
showQuickJumper = false,
|
|
40
|
+
showSizeChanger = false,
|
|
41
|
+
pageSizeOptions = DEFAULT_SIZE_OPTIONS,
|
|
42
|
+
onShowSizeChange,
|
|
37
43
|
className = ""
|
|
38
44
|
}) => {
|
|
39
45
|
const [inner, setInner] = React__namespace.useState(defaultPage);
|
|
40
46
|
const isControlled = page !== void 0;
|
|
41
47
|
const cur = isControlled ? page : inner;
|
|
42
48
|
const pages = Math.max(1, Math.ceil(total / pageSize));
|
|
49
|
+
const [jumpDraft, setJumpDraft] = React__namespace.useState("");
|
|
43
50
|
const go = (p) => {
|
|
44
51
|
const next = Math.min(pages, Math.max(1, p));
|
|
45
52
|
if (!isControlled) setInner(next);
|
|
46
53
|
onChange?.(next);
|
|
47
54
|
};
|
|
55
|
+
const handleJump = (e) => {
|
|
56
|
+
if (e.key !== "Enter") return;
|
|
57
|
+
const n = Number(jumpDraft);
|
|
58
|
+
if (!Number.isFinite(n) || n < 1) {
|
|
59
|
+
setJumpDraft("");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
go(Math.trunc(n));
|
|
63
|
+
setJumpDraft("");
|
|
64
|
+
};
|
|
65
|
+
const handleSizeChange = (size) => {
|
|
66
|
+
onShowSizeChange?.(cur, size);
|
|
67
|
+
if (!isControlled) setInner(1);
|
|
68
|
+
onChange?.(1);
|
|
69
|
+
};
|
|
48
70
|
const range = () => {
|
|
49
71
|
const out = [];
|
|
50
72
|
const add = (n) => out.push(n);
|
|
@@ -99,11 +121,36 @@ var Pagination = ({
|
|
|
99
121
|
"aria-label": "Next",
|
|
100
122
|
children: /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "chevRight", size: 12 })
|
|
101
123
|
}
|
|
102
|
-
)
|
|
124
|
+
),
|
|
125
|
+
showSizeChanger && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pg-size-changer", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
+
chunkEPFYIR63_cjs.Select,
|
|
127
|
+
{
|
|
128
|
+
value: pageSize,
|
|
129
|
+
size: "sm",
|
|
130
|
+
options: pageSizeOptions.map((n) => ({ value: n, label: `${n} \u6761/\u9875` })),
|
|
131
|
+
onChange: handleSizeChange
|
|
132
|
+
}
|
|
133
|
+
) }),
|
|
134
|
+
showQuickJumper && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "pg-jumper", children: [
|
|
135
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pg-jumper-label", children: "\u8DF3\u81F3" }),
|
|
136
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
137
|
+
"input",
|
|
138
|
+
{
|
|
139
|
+
type: "text",
|
|
140
|
+
inputMode: "numeric",
|
|
141
|
+
className: "pg-jumper-input",
|
|
142
|
+
value: jumpDraft,
|
|
143
|
+
onChange: (e) => setJumpDraft(e.target.value.replace(/[^\d]/g, "")),
|
|
144
|
+
onKeyDown: handleJump,
|
|
145
|
+
"aria-label": "\u8DF3\u8F6C\u5230\u6307\u5B9A\u9875"
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "pg-jumper-label", children: "\u9875" })
|
|
149
|
+
] })
|
|
103
150
|
] })
|
|
104
151
|
] });
|
|
105
152
|
};
|
|
106
153
|
|
|
107
154
|
exports.Pagination = Pagination;
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
155
|
+
//# sourceMappingURL=chunk-K7PVJLW4.cjs.map
|
|
156
|
+
//# sourceMappingURL=chunk-K7PVJLW4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":["React","jsxs","jsx","Icon","Select"],"mappings":"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","file":"chunk-K7PVJLW4.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"]}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
4
|
+
require('./tokens-HWQ7KWPG.css');
|
|
5
|
+
require('./shared-NJHRNLRH.css');
|
|
6
|
+
require('./Input-33CAH4O6.css');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
function _interopNamespace(e) {
|
|
11
|
+
if (e && e.__esModule) return e;
|
|
12
|
+
var n = Object.create(null);
|
|
13
|
+
if (e) {
|
|
14
|
+
Object.keys(e).forEach(function (k) {
|
|
15
|
+
if (k !== 'default') {
|
|
16
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
17
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return e[k]; }
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
n.default = e;
|
|
25
|
+
return Object.freeze(n);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
29
|
+
|
|
30
|
+
var Input = React__namespace.forwardRef(
|
|
31
|
+
({
|
|
32
|
+
value,
|
|
33
|
+
defaultValue,
|
|
34
|
+
onChange,
|
|
35
|
+
placeholder,
|
|
36
|
+
leadingIcon,
|
|
37
|
+
trailingIcon,
|
|
38
|
+
onLeadingIconClick,
|
|
39
|
+
onTrailingIconClick,
|
|
40
|
+
size = "md",
|
|
41
|
+
invalid,
|
|
42
|
+
disabled,
|
|
43
|
+
allowClear,
|
|
44
|
+
maxLength,
|
|
45
|
+
showCount,
|
|
46
|
+
prefix,
|
|
47
|
+
suffix,
|
|
48
|
+
className = "",
|
|
49
|
+
...rest
|
|
50
|
+
}, ref) => {
|
|
51
|
+
const [inner, setInner] = React__namespace.useState(defaultValue ?? "");
|
|
52
|
+
const isControlled = value !== void 0;
|
|
53
|
+
const currentValue = isControlled ? value : inner;
|
|
54
|
+
const wrapCls = [
|
|
55
|
+
"input-wrap",
|
|
56
|
+
size !== "md" && size,
|
|
57
|
+
invalid && "invalid",
|
|
58
|
+
disabled && "disabled",
|
|
59
|
+
className
|
|
60
|
+
].filter(Boolean).join(" ");
|
|
61
|
+
const handleIconClick = (handler) => handler ? (e) => {
|
|
62
|
+
e.stopPropagation();
|
|
63
|
+
if (!disabled) handler(e);
|
|
64
|
+
} : void 0;
|
|
65
|
+
const handleChange = (e) => {
|
|
66
|
+
if (!isControlled) setInner(e.target.value);
|
|
67
|
+
onChange?.(e.target.value, e);
|
|
68
|
+
};
|
|
69
|
+
const handleClear = (e) => {
|
|
70
|
+
e.stopPropagation();
|
|
71
|
+
if (disabled) return;
|
|
72
|
+
if (!isControlled) setInner("");
|
|
73
|
+
const synthetic = {
|
|
74
|
+
...e,
|
|
75
|
+
target: { ...e.target, value: "" },
|
|
76
|
+
currentTarget: { ...e.currentTarget, value: "" }
|
|
77
|
+
};
|
|
78
|
+
onChange?.("", synthetic);
|
|
79
|
+
};
|
|
80
|
+
const showClear = !!allowClear && !!currentValue && !disabled;
|
|
81
|
+
const count = currentValue ? currentValue.length : 0;
|
|
82
|
+
const inputElement = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: wrapCls, children: [
|
|
83
|
+
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
84
|
+
chunkYVO7XO4W_cjs.Icon,
|
|
85
|
+
{
|
|
86
|
+
name: leadingIcon,
|
|
87
|
+
size: 14,
|
|
88
|
+
className: `lead${onLeadingIconClick ? " interactive" : ""}`,
|
|
89
|
+
onClick: handleIconClick(onLeadingIconClick)
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
prefix && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "input-affix prefix", children: prefix }),
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
94
|
+
"input",
|
|
95
|
+
{
|
|
96
|
+
ref,
|
|
97
|
+
className: "input",
|
|
98
|
+
value: isControlled ? value : void 0,
|
|
99
|
+
defaultValue: isControlled ? void 0 : defaultValue,
|
|
100
|
+
onChange: handleChange,
|
|
101
|
+
placeholder,
|
|
102
|
+
disabled,
|
|
103
|
+
maxLength,
|
|
104
|
+
...rest
|
|
105
|
+
}
|
|
106
|
+
),
|
|
107
|
+
suffix && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "input-affix suffix", children: suffix }),
|
|
108
|
+
showClear && /* @__PURE__ */ jsxRuntime.jsx(
|
|
109
|
+
"span",
|
|
110
|
+
{
|
|
111
|
+
className: "input-clear",
|
|
112
|
+
role: "button",
|
|
113
|
+
"aria-label": "Clear",
|
|
114
|
+
tabIndex: -1,
|
|
115
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
116
|
+
onClick: handleClear,
|
|
117
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "x", size: 12 })
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
121
|
+
chunkYVO7XO4W_cjs.Icon,
|
|
122
|
+
{
|
|
123
|
+
name: trailingIcon,
|
|
124
|
+
size: 14,
|
|
125
|
+
className: `trail${onTrailingIconClick ? " interactive" : ""}`,
|
|
126
|
+
onClick: handleIconClick(onTrailingIconClick)
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
] });
|
|
130
|
+
if (!showCount) return inputElement;
|
|
131
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "input-shell", children: [
|
|
132
|
+
inputElement,
|
|
133
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "input-count", children: maxLength != null ? `${count} / ${maxLength}` : `${count}` })
|
|
134
|
+
] });
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
Input.displayName = "Input";
|
|
138
|
+
var Textarea = React__namespace.forwardRef(
|
|
139
|
+
({
|
|
140
|
+
value,
|
|
141
|
+
defaultValue,
|
|
142
|
+
onChange,
|
|
143
|
+
invalid,
|
|
144
|
+
allowClear,
|
|
145
|
+
maxLength,
|
|
146
|
+
showCount,
|
|
147
|
+
className = "",
|
|
148
|
+
...rest
|
|
149
|
+
}, ref) => {
|
|
150
|
+
const [inner, setInner] = React__namespace.useState(defaultValue ?? "");
|
|
151
|
+
const isControlled = value !== void 0;
|
|
152
|
+
const currentValue = isControlled ? value : inner;
|
|
153
|
+
const disabled = rest.disabled;
|
|
154
|
+
const handleChange = (e) => {
|
|
155
|
+
if (!isControlled) setInner(e.target.value);
|
|
156
|
+
onChange?.(e.target.value, e);
|
|
157
|
+
};
|
|
158
|
+
const handleClear = (e) => {
|
|
159
|
+
e.stopPropagation();
|
|
160
|
+
if (disabled) return;
|
|
161
|
+
if (!isControlled) setInner("");
|
|
162
|
+
const synthetic = {
|
|
163
|
+
...e,
|
|
164
|
+
target: { ...e.target, value: "" },
|
|
165
|
+
currentTarget: { ...e.currentTarget, value: "" }
|
|
166
|
+
};
|
|
167
|
+
onChange?.("", synthetic);
|
|
168
|
+
};
|
|
169
|
+
const cls = ["textarea", invalid && "invalid", className].filter(Boolean).join(" ");
|
|
170
|
+
const showClear = !!allowClear && !!currentValue && !disabled;
|
|
171
|
+
const count = currentValue ? currentValue.length : 0;
|
|
172
|
+
const field = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "textarea-wrap", children: [
|
|
173
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
174
|
+
"textarea",
|
|
175
|
+
{
|
|
176
|
+
ref,
|
|
177
|
+
className: cls,
|
|
178
|
+
value: isControlled ? value : void 0,
|
|
179
|
+
defaultValue: isControlled ? void 0 : defaultValue,
|
|
180
|
+
onChange: handleChange,
|
|
181
|
+
maxLength,
|
|
182
|
+
...rest
|
|
183
|
+
}
|
|
184
|
+
),
|
|
185
|
+
showClear && /* @__PURE__ */ jsxRuntime.jsx(
|
|
186
|
+
"span",
|
|
187
|
+
{
|
|
188
|
+
className: "textarea-clear",
|
|
189
|
+
role: "button",
|
|
190
|
+
"aria-label": "Clear",
|
|
191
|
+
tabIndex: -1,
|
|
192
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
193
|
+
onClick: handleClear,
|
|
194
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "x", size: 12 })
|
|
195
|
+
}
|
|
196
|
+
)
|
|
197
|
+
] });
|
|
198
|
+
if (!showCount) return field;
|
|
199
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "input-shell", children: [
|
|
200
|
+
field,
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "input-count", children: maxLength != null ? `${count} / ${maxLength}` : `${count}` })
|
|
202
|
+
] });
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
Textarea.displayName = "Textarea";
|
|
206
|
+
|
|
207
|
+
exports.Input = Input;
|
|
208
|
+
exports.Textarea = Textarea;
|
|
209
|
+
//# sourceMappingURL=chunk-LDENBYRC.cjs.map
|
|
210
|
+
//# sourceMappingURL=chunk-LDENBYRC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Input/Input.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-LDENBYRC.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Input.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\" | \"prefix\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n leadingIcon?: IconName;\n trailingIcon?: IconName;\n /** Click handler for the leading icon (stops propagation so the input isn't focused). */\n onLeadingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n /** Click handler for the trailing icon — e.g. password visibility toggle. */\n onTrailingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n invalid?: boolean;\n disabled?: boolean;\n /** Show a × button inside the input to clear the value when non-empty. */\n allowClear?: boolean;\n /** Max length — forwarded to the native input. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the input (or just \"N\" if no maxLength). */\n showCount?: boolean;\n /** Inline content rendered inside the input on the left (after leadingIcon if both present). */\n prefix?: React.ReactNode;\n /** Inline content rendered inside the input on the right (before trailingIcon if both present). */\n suffix?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `Input` — single-line text field with optional leading/trailing icons.\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n placeholder,\n leadingIcon,\n trailingIcon,\n onLeadingIconClick,\n onTrailingIconClick,\n size = \"md\",\n invalid,\n disabled,\n allowClear,\n maxLength,\n showCount,\n prefix,\n suffix,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n\n const wrapCls = [\n \"input-wrap\",\n size !== \"md\" && size,\n invalid && \"invalid\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleIconClick = (\n handler: ((e: React.MouseEvent<SVGSVGElement>) => void) | undefined\n ) =>\n handler\n ? (e: React.MouseEvent<SVGSVGElement>) => {\n e.stopPropagation();\n if (!disabled) handler(e);\n }\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLInputElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLInputElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange?.(\"\", synthetic);\n };\n\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const inputElement = (\n <div className={wrapCls}>\n {leadingIcon && (\n <Icon\n name={leadingIcon}\n size={14}\n className={`lead${onLeadingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onLeadingIconClick)}\n />\n )}\n {prefix && <span className=\"input-affix prefix\">{prefix}</span>}\n <input\n ref={ref}\n className=\"input\"\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength}\n {...rest}\n />\n {suffix && <span className=\"input-affix suffix\">{suffix}</span>}\n {showClear && (\n <span\n className=\"input-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n {trailingIcon && (\n <Icon\n name={trailingIcon}\n size={14}\n className={`trail${onTrailingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onTrailingIconClick)}\n />\n )}\n </div>\n );\n\n if (!showCount) return inputElement;\n\n return (\n <div className=\"input-shell\">\n {inputElement}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n invalid?: boolean;\n /** Show a × button in the top-right corner to clear the value. */\n allowClear?: boolean;\n /** Max length — forwarded to the native textarea. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the textarea. */\n showCount?: boolean;\n className?: string;\n}\n\n/**\n * `Textarea` — multi-line text input with the same neumorphic groove as `Input`.\n */\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n invalid,\n allowClear,\n maxLength,\n showCount,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n const disabled = rest.disabled;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLTextAreaElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLTextAreaElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLTextAreaElement>;\n onChange?.(\"\", synthetic);\n };\n\n const cls = [\"textarea\", invalid && \"invalid\", className].filter(Boolean).join(\" \");\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const field = (\n <div className=\"textarea-wrap\">\n <textarea\n ref={ref}\n className={cls}\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n maxLength={maxLength}\n {...rest}\n />\n {showClear && (\n <span\n className=\"textarea-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n </div>\n );\n\n if (!showCount) return field;\n\n return (\n <div className=\"input-shell\">\n {field}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n"]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Button } from './chunk-77BVQNAQ.js';
|
|
2
|
+
import { Icon } from './chunk-GEYMWUW6.js';
|
|
3
|
+
import './tokens-HWQ7KWPG.css';
|
|
4
|
+
import './shared-NJHRNLRH.css';
|
|
5
|
+
import './Modal-N4YVLEWW.css';
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import ReactDOM from 'react-dom';
|
|
8
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
var ANIM_MS = 280;
|
|
11
|
+
var Modal = ({
|
|
12
|
+
open,
|
|
13
|
+
onClose,
|
|
14
|
+
onCancel,
|
|
15
|
+
onOk,
|
|
16
|
+
title,
|
|
17
|
+
description,
|
|
18
|
+
footer,
|
|
19
|
+
children,
|
|
20
|
+
width = 440,
|
|
21
|
+
closable = true,
|
|
22
|
+
closeIcon,
|
|
23
|
+
maskClosable = true,
|
|
24
|
+
escClosable = true,
|
|
25
|
+
okText = "\u786E\u5B9A",
|
|
26
|
+
cancelText = "\u53D6\u6D88",
|
|
27
|
+
okButtonProps,
|
|
28
|
+
cancelButtonProps,
|
|
29
|
+
confirmLoading,
|
|
30
|
+
destroyOnClose = false,
|
|
31
|
+
afterOpenChange,
|
|
32
|
+
zIndex,
|
|
33
|
+
className = ""
|
|
34
|
+
}) => {
|
|
35
|
+
const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
if (open) setHasOpenedOnce(true);
|
|
38
|
+
}, [open]);
|
|
39
|
+
const handleCancel = React.useCallback(() => {
|
|
40
|
+
if (onCancel) onCancel();
|
|
41
|
+
else onClose?.();
|
|
42
|
+
}, [onCancel, onClose]);
|
|
43
|
+
React.useEffect(() => {
|
|
44
|
+
if (!open || !escClosable) return;
|
|
45
|
+
const h = (e) => {
|
|
46
|
+
if (e.key === "Escape") handleCancel();
|
|
47
|
+
};
|
|
48
|
+
window.addEventListener("keydown", h);
|
|
49
|
+
return () => window.removeEventListener("keydown", h);
|
|
50
|
+
}, [open, escClosable, handleCancel]);
|
|
51
|
+
const prevOpen = React.useRef(open);
|
|
52
|
+
React.useEffect(() => {
|
|
53
|
+
if (prevOpen.current !== open) {
|
|
54
|
+
prevOpen.current = open;
|
|
55
|
+
if (afterOpenChange) {
|
|
56
|
+
const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);
|
|
57
|
+
return () => window.clearTimeout(id);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}, [open, afterOpenChange]);
|
|
61
|
+
if (typeof document === "undefined") return null;
|
|
62
|
+
if (!hasOpenedOnce) return null;
|
|
63
|
+
if (!open && destroyOnClose) return null;
|
|
64
|
+
const overlayStyle = zIndex != null ? { zIndex } : void 0;
|
|
65
|
+
const defaultFooter = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
66
|
+
/* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: handleCancel, ...cancelButtonProps, children: cancelText }),
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
Button,
|
|
69
|
+
{
|
|
70
|
+
variant: "primary",
|
|
71
|
+
loading: confirmLoading,
|
|
72
|
+
onClick: () => onOk?.(),
|
|
73
|
+
...okButtonProps,
|
|
74
|
+
children: okText
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] });
|
|
78
|
+
return ReactDOM.createPortal(
|
|
79
|
+
/* @__PURE__ */ jsx(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
className: `modal-overlay ${open ? "" : "hidden"} ${className}`,
|
|
83
|
+
style: overlayStyle,
|
|
84
|
+
onClick: () => maskClosable && handleCancel(),
|
|
85
|
+
role: "presentation",
|
|
86
|
+
children: /* @__PURE__ */ jsxs(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
className: "modal",
|
|
90
|
+
style: { width },
|
|
91
|
+
onClick: (e) => e.stopPropagation(),
|
|
92
|
+
role: "dialog",
|
|
93
|
+
"aria-modal": true,
|
|
94
|
+
"aria-hidden": !open,
|
|
95
|
+
children: [
|
|
96
|
+
(title || description || closable) && /* @__PURE__ */ jsxs("div", { className: "modal-head", children: [
|
|
97
|
+
/* @__PURE__ */ jsxs("div", { className: "modal-titles", children: [
|
|
98
|
+
title && /* @__PURE__ */ jsx("div", { className: "modal-title", children: title }),
|
|
99
|
+
description && /* @__PURE__ */ jsx("div", { className: "modal-desc", children: description })
|
|
100
|
+
] }),
|
|
101
|
+
closable && /* @__PURE__ */ jsx(
|
|
102
|
+
"button",
|
|
103
|
+
{
|
|
104
|
+
type: "button",
|
|
105
|
+
className: "modal-close",
|
|
106
|
+
onClick: handleCancel,
|
|
107
|
+
"aria-label": "Close",
|
|
108
|
+
children: closeIcon ?? /* @__PURE__ */ jsx(Icon, { name: "x", size: 16 })
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
] }),
|
|
112
|
+
/* @__PURE__ */ jsx("div", { className: "modal-body", children }),
|
|
113
|
+
footer === null ? null : /* @__PURE__ */ jsx("div", { className: "modal-foot", children: footer ?? defaultFooter })
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
),
|
|
119
|
+
document.body
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export { Modal };
|
|
124
|
+
//# sourceMappingURL=chunk-LSLYY5FN.js.map
|
|
125
|
+
//# sourceMappingURL=chunk-LSLYY5FN.js.map
|