@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
package/dist/chunk-JWFVSBVX.cjs
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
require('./tokens-HWQ7KWPG.css');
|
|
4
|
-
require('./shared-NJHRNLRH.css');
|
|
5
|
-
require('./Avatar-OXDSG5Q6.css');
|
|
6
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
-
|
|
8
|
-
// src/components/Avatar/Avatar.tsx
|
|
9
|
-
var Avatar = ({
|
|
10
|
-
src,
|
|
11
|
-
alt = "",
|
|
12
|
-
initials,
|
|
13
|
-
size = "md",
|
|
14
|
-
status,
|
|
15
|
-
className = "",
|
|
16
|
-
style,
|
|
17
|
-
...rest
|
|
18
|
-
}) => {
|
|
19
|
-
const sizeCls = typeof size === "string" && size !== "md" ? size : "";
|
|
20
|
-
const customStyle = typeof size === "number" ? { ["--size"]: `${size}px`, ...style } : style ?? {};
|
|
21
|
-
const shown = initials ?? alt.slice(0, 2).toUpperCase();
|
|
22
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `avatar ${sizeCls} ${className}`, style: customStyle, ...rest, children: [
|
|
23
|
-
src ? /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt }) : /* @__PURE__ */ jsxRuntime.jsx("span", { children: shown }),
|
|
24
|
-
status && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `avatar-status ${status}` })
|
|
25
|
-
] });
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
exports.Avatar = Avatar;
|
|
29
|
-
//# sourceMappingURL=chunk-JWFVSBVX.cjs.map
|
|
30
|
-
//# sourceMappingURL=chunk-JWFVSBVX.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"names":["jsxs","jsx"],"mappings":";;;;;;;;AAgBO,IAAM,SAAgC,CAAC;AAAA,EAC5C,GAAA;AAAA,EACA,GAAA,GAAM,EAAA;AAAA,EACN,QAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,UAAU,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAO,IAAA,GAAO,EAAA;AACnE,EAAA,MAAM,WAAA,GACJ,OAAO,IAAA,KAAS,QAAA,GAAW,EAAE,CAAC,QAAiB,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA,EAAM,GAAG,KAAA,EAAM,GAAI,SAAS,EAAC;AACxF,EAAA,MAAM,QAAQ,QAAA,IAAY,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACtD,EAAA,uBACEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,WAAA,EAAc,GAAG,IAAA,EACvE,QAAA,EAAA;AAAA,IAAA,GAAA,kCAAO,KAAA,EAAA,EAAI,GAAA,EAAU,KAAU,CAAA,mBAAKC,cAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACjD,0BAAUA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA,GAAA,EACzD,CAAA;AAEJ","file":"chunk-JWFVSBVX.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Avatar.css\";\nimport * as React from \"react\";\n\nexport interface AvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n src?: string;\n alt?: string;\n /** Initials if no image. Auto-derived from `alt` if omitted. */\n initials?: string;\n size?: number | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Status dot. */\n status?: \"online\" | \"busy\" | \"away\" | \"offline\";\n}\n\n/** `Avatar` — user image or initials chip. */\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = \"\",\n initials,\n size = \"md\",\n status,\n className = \"\",\n style,\n ...rest\n}) => {\n const sizeCls = typeof size === \"string\" && size !== \"md\" ? size : \"\";\n const customStyle: React.CSSProperties =\n typeof size === \"number\" ? { [\"--size\" as never]: `${size}px`, ...style } : style ?? {};\n const shown = initials ?? alt.slice(0, 2).toUpperCase();\n return (\n <div className={`avatar ${sizeCls} ${className}`} style={customStyle} {...rest}>\n {src ? <img src={src} alt={alt} /> : <span>{shown}</span>}\n {status && <span className={`avatar-status ${status}`} />}\n </div>\n );\n};\n"]}
|
package/dist/chunk-K67KIKX4.cjs
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
require('./tokens-HWQ7KWPG.css');
|
|
4
|
-
require('./shared-NJHRNLRH.css');
|
|
5
|
-
require('./Empty-VM23UNLQ.css');
|
|
6
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
-
|
|
8
|
-
// src/components/Empty/Empty.tsx
|
|
9
|
-
var Empty = ({
|
|
10
|
-
title = "\u6682\u65E0\u5185\u5BB9",
|
|
11
|
-
description,
|
|
12
|
-
icon,
|
|
13
|
-
action,
|
|
14
|
-
size = "md",
|
|
15
|
-
variant = "default",
|
|
16
|
-
className = ""
|
|
17
|
-
}) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `empty ${size} ${variant} ${className}`, children: [
|
|
18
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "empty-ico", children: icon }),
|
|
19
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "empty-title", children: title }),
|
|
20
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "empty-desc", children: description }),
|
|
21
|
-
action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "empty-action", children: action })
|
|
22
|
-
] });
|
|
23
|
-
var Spinner = ({
|
|
24
|
-
size = 20,
|
|
25
|
-
tone = "accent",
|
|
26
|
-
label,
|
|
27
|
-
variant = "ring",
|
|
28
|
-
className = ""
|
|
29
|
-
}) => {
|
|
30
|
-
const cls = `spinner ${variant} ${tone} ${className}`.trim();
|
|
31
|
-
const spinner = variant === "dots" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cls, style: { fontSize: size }, "aria-label": "Loading", children: [
|
|
32
|
-
/* @__PURE__ */ jsxRuntime.jsx("i", {}),
|
|
33
|
-
/* @__PURE__ */ jsxRuntime.jsx("i", {}),
|
|
34
|
-
/* @__PURE__ */ jsxRuntime.jsx("i", {})
|
|
35
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
36
|
-
"span",
|
|
37
|
-
{
|
|
38
|
-
className: cls,
|
|
39
|
-
style: { width: size, height: size },
|
|
40
|
-
"aria-label": "Loading"
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
if (!label) return spinner;
|
|
44
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "spinner-wrap", children: [
|
|
45
|
-
spinner,
|
|
46
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "spinner-label", children: label })
|
|
47
|
-
] });
|
|
48
|
-
};
|
|
49
|
-
var Skeleton = ({
|
|
50
|
-
width = "100%",
|
|
51
|
-
height = 16,
|
|
52
|
-
circle,
|
|
53
|
-
animation = "wave",
|
|
54
|
-
className = ""
|
|
55
|
-
}) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
56
|
-
"span",
|
|
57
|
-
{
|
|
58
|
-
className: `skeleton ${animation} ${circle ? "circle" : ""} ${className}`.trim(),
|
|
59
|
-
style: { width, height, borderRadius: circle ? "50%" : void 0 }
|
|
60
|
-
}
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
exports.Empty = Empty;
|
|
64
|
-
exports.Skeleton = Skeleton;
|
|
65
|
-
exports.Spinner = Spinner;
|
|
66
|
-
//# sourceMappingURL=chunk-K67KIKX4.cjs.map
|
|
67
|
-
//# sourceMappingURL=chunk-K67KIKX4.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Empty/Empty.tsx"],"names":["jsxs","jsx"],"mappings":";;;;;;;;AAiBO,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA,GAAQ,0BAAA;AAAA,EACR,WAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,SAAA,GAAY;AACd,CAAA,qBACEA,eAAA,CAAC,SAAI,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAClD,QAAA,EAAA;AAAA,EAAA,IAAA,oBAAQC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,kBAC1CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,EACnC,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,EACxD,MAAA,oBAAUA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAgB,QAAA,EAAA,MAAA,EAAO;AAAA,CAAA,EACnD;AAcK,IAAM,UAAkC,CAAC;AAAA,EAC9C,IAAA,GAAO,EAAA;AAAA,EACP,IAAA,GAAO,QAAA;AAAA,EACP,KAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAM,WAAW,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,SAAS,GAAG,IAAA,EAAK;AAC3D,EAAA,MAAM,OAAA,GACJ,OAAA,KAAY,MAAA,mBACVD,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAK,EAAG,cAAW,SAAA,EAC1D,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,GAAA,EAAA,EAAE,CAAA;AAAA,mCAAG,GAAA,EAAA,EAAE,CAAA;AAAA,mCAAG,GAAA,EAAA,EAAE;AAAA,GAAA,EACf,CAAA,mBAEAA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAA;AAAA,MACX,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,MACnC,YAAA,EAAW;AAAA;AAAA,GACb;AAEJ,EAAA,IAAI,CAAC,OAAO,OAAO,OAAA;AACnB,EAAA,uBACED,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EACb,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBACDC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACzC,CAAA;AAEJ;AAYO,IAAM,WAAoC,CAAC;AAAA,EAChD,KAAA,GAAQ,MAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,MAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,qBACEA,cAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,EAAI,MAAA,GAAS,WAAW,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,IAC/E,OAAO,EAAE,KAAA,EAAO,QAAQ,YAAA,EAAc,MAAA,GAAS,QAAQ,MAAA;AAAU;AACnE","file":"chunk-K67KIKX4.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Empty.css\";\nimport * as React from \"react\";\n\nexport interface EmptyProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n /** `subtle` drops the recessed icon well — good for inline / embedded use. */\n variant?: \"default\" | \"subtle\";\n className?: string;\n}\n\n/** `Empty` — empty state placeholder. */\nexport const Empty: React.FC<EmptyProps> = ({\n title = \"暂无内容\",\n description,\n icon,\n action,\n size = \"md\",\n variant = \"default\",\n className = \"\",\n}) => (\n <div className={`empty ${size} ${variant} ${className}`}>\n {icon && <div className=\"empty-ico\">{icon}</div>}\n <div className=\"empty-title\">{title}</div>\n {description && <div className=\"empty-desc\">{description}</div>}\n {action && <div className=\"empty-action\">{action}</div>}\n </div>\n);\n\nexport interface SpinnerProps {\n size?: number;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"current\";\n /** Text rendered next to the spinner. */\n label?: React.ReactNode;\n /** `ring` is the default border spinner; `dots` is a three-dot bounce. */\n variant?: \"ring\" | \"dots\";\n className?: string;\n}\n\n/** `Spinner` — loading indicator. */\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 20,\n tone = \"accent\",\n label,\n variant = \"ring\",\n className = \"\",\n}) => {\n const cls = `spinner ${variant} ${tone} ${className}`.trim();\n const spinner =\n variant === \"dots\" ? (\n <span className={cls} style={{ fontSize: size }} aria-label=\"Loading\">\n <i /><i /><i />\n </span>\n ) : (\n <span\n className={cls}\n style={{ width: size, height: size }}\n aria-label=\"Loading\"\n />\n );\n if (!label) return spinner;\n return (\n <span className=\"spinner-wrap\">\n {spinner}\n <span className=\"spinner-label\">{label}</span>\n </span>\n );\n};\n\nexport interface SkeletonProps {\n width?: number | string;\n height?: number | string;\n circle?: boolean;\n /** `wave` is a shimmer sweep; `pulse` fades opacity; `none` disables animation. */\n animation?: \"wave\" | \"pulse\" | \"none\";\n className?: string;\n}\n\n/** `Skeleton` — content placeholder during loading. */\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width = \"100%\",\n height = 16,\n circle,\n animation = \"wave\",\n className = \"\",\n}) => (\n <span\n className={`skeleton ${animation} ${circle ? \"circle\" : \"\"} ${className}`.trim()}\n style={{ width, height, borderRadius: circle ? \"50%\" : undefined }}\n />\n);\n"]}
|
package/dist/chunk-KF4MCHZL.cjs
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkAAMYURWQ_cjs = require('./chunk-AAMYURWQ.cjs');
|
|
4
|
-
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
5
|
-
require('./tokens-HWQ7KWPG.css');
|
|
6
|
-
require('./shared-NJHRNLRH.css');
|
|
7
|
-
require('./Modal-AYKNIWWQ.css');
|
|
8
|
-
var React = require('react');
|
|
9
|
-
var ReactDOM = require('react-dom');
|
|
10
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
-
|
|
12
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
|
|
14
|
-
function _interopNamespace(e) {
|
|
15
|
-
if (e && e.__esModule) return e;
|
|
16
|
-
var n = Object.create(null);
|
|
17
|
-
if (e) {
|
|
18
|
-
Object.keys(e).forEach(function (k) {
|
|
19
|
-
if (k !== 'default') {
|
|
20
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
21
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () { return e[k]; }
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
n.default = e;
|
|
29
|
-
return Object.freeze(n);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
33
|
-
var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
|
|
34
|
-
|
|
35
|
-
var Modal = ({
|
|
36
|
-
open,
|
|
37
|
-
onClose,
|
|
38
|
-
title,
|
|
39
|
-
description,
|
|
40
|
-
footer,
|
|
41
|
-
children,
|
|
42
|
-
width = 440,
|
|
43
|
-
maskClosable = true,
|
|
44
|
-
escClosable = true,
|
|
45
|
-
className = ""
|
|
46
|
-
}) => {
|
|
47
|
-
React__namespace.useEffect(() => {
|
|
48
|
-
if (!open || !escClosable) return;
|
|
49
|
-
const h = (e) => e.key === "Escape" && onClose?.();
|
|
50
|
-
window.addEventListener("keydown", h);
|
|
51
|
-
return () => window.removeEventListener("keydown", h);
|
|
52
|
-
}, [open, escClosable, onClose]);
|
|
53
|
-
if (!open || typeof document === "undefined") return null;
|
|
54
|
-
return ReactDOM__default.default.createPortal(
|
|
55
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `modal-overlay ${className}`, onClick: () => maskClosable && onClose?.(), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "modal", style: { width }, onClick: (e) => e.stopPropagation(), children: [
|
|
56
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "modal-head", children: [
|
|
57
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "modal-titles", children: [
|
|
58
|
-
title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-title", children: title }),
|
|
59
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-desc", children: description })
|
|
60
|
-
] }),
|
|
61
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "modal-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "x", size: 16 }) })
|
|
62
|
-
] }),
|
|
63
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-body", children }),
|
|
64
|
-
footer !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-foot", children: footer }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "modal-foot", children: [
|
|
65
|
-
/* @__PURE__ */ jsxRuntime.jsx(chunkAAMYURWQ_cjs.Button, { variant: "ghost", onClick: onClose, children: "\u53D6\u6D88" }),
|
|
66
|
-
/* @__PURE__ */ jsxRuntime.jsx(chunkAAMYURWQ_cjs.Button, { variant: "primary", onClick: onClose, children: "\u786E\u5B9A" })
|
|
67
|
-
] })
|
|
68
|
-
] }) }),
|
|
69
|
-
document.body
|
|
70
|
-
);
|
|
71
|
-
};
|
|
72
|
-
var Drawer = ({
|
|
73
|
-
open,
|
|
74
|
-
onClose,
|
|
75
|
-
placement = "right",
|
|
76
|
-
size = 380,
|
|
77
|
-
title,
|
|
78
|
-
footer,
|
|
79
|
-
children,
|
|
80
|
-
maskClosable = true,
|
|
81
|
-
className = ""
|
|
82
|
-
}) => {
|
|
83
|
-
if (!open || typeof document === "undefined") return null;
|
|
84
|
-
const isV = placement === "left" || placement === "right";
|
|
85
|
-
const style = isV ? { width: size } : { height: size };
|
|
86
|
-
return ReactDOM__default.default.createPortal(
|
|
87
|
-
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
88
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "drawer-overlay", onClick: () => maskClosable && onClose?.() }),
|
|
89
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `drawer ${placement} ${className}`, style, onClick: (e) => e.stopPropagation(), children: [
|
|
90
|
-
title && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "drawer-head", children: [
|
|
91
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "drawer-title", children: title }),
|
|
92
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "modal-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "x", size: 16 }) })
|
|
93
|
-
] }),
|
|
94
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "drawer-body", children }),
|
|
95
|
-
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-foot", children: footer })
|
|
96
|
-
] })
|
|
97
|
-
] }),
|
|
98
|
-
document.body
|
|
99
|
-
);
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
exports.Drawer = Drawer;
|
|
103
|
-
exports.Modal = Modal;
|
|
104
|
-
//# sourceMappingURL=chunk-KF4MCHZL.cjs.map
|
|
105
|
-
//# sourceMappingURL=chunk-KF4MCHZL.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":["React","ReactDOM","jsx","jsxs","Icon","Button","Fragment"],"mappings":"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","file":"chunk-KF4MCHZL.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 } from \"../Button\";\n\nexport interface ModalProps {\n open: boolean;\n onClose?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n className?: string;\n}\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n title,\n description,\n footer,\n children,\n width = 440,\n maskClosable = true,\n escClosable = true,\n className = \"\",\n}) => {\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose?.();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n return ReactDOM.createPortal(\n <div className={`modal-overlay ${className}`} onClick={() => maskClosable && onClose?.()}>\n <div className=\"modal\" style={{ width }} onClick={(e) => e.stopPropagation()}>\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 <button type=\"button\" className=\"modal-close\" onClick={onClose} aria-label=\"Close\">\n <Icon name=\"x\" size={16} />\n </button>\n </div>\n <div className=\"modal-body\">{children}</div>\n {footer !== undefined ? (\n <div className=\"modal-foot\">{footer}</div>\n ) : (\n <div className=\"modal-foot\">\n <Button variant=\"ghost\" onClick={onClose}>取消</Button>\n <Button variant=\"primary\" onClick={onClose}>确定</Button>\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport interface DrawerProps extends Omit<ModalProps, \"width\"> {\n /** Edge the drawer slides from. */\n placement?: \"left\" | \"right\" | \"top\" | \"bottom\";\n size?: number | string;\n}\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 footer,\n children,\n maskClosable = true,\n className = \"\",\n}) => {\n if (!open || typeof document === \"undefined\") return null;\n const isV = placement === \"left\" || placement === \"right\";\n const style: React.CSSProperties = isV ? { width: size } : { height: size };\n return ReactDOM.createPortal(\n <>\n <div className=\"drawer-overlay\" onClick={() => maskClosable && onClose?.()} />\n <div className={`drawer ${placement} ${className}`} style={style} onClick={(e) => e.stopPropagation()}>\n {title && (\n <div className=\"drawer-head\">\n <div className=\"drawer-title\">{title}</div>\n <button type=\"button\" className=\"modal-close\" onClick={onClose} aria-label=\"Close\">\n <Icon name=\"x\" size={16} />\n </button>\n </div>\n )}\n <div className=\"drawer-body\">{children}</div>\n {footer && <div className=\"modal-foot\">{footer}</div>}\n </div>\n </>,\n document.body\n );\n};\n"]}
|
package/dist/chunk-M6OTFXZA.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Icon } from './chunk-GEYMWUW6.js';
|
|
2
|
-
import './tokens-HWQ7KWPG.css';
|
|
3
|
-
import './shared-NJHRNLRH.css';
|
|
4
|
-
import './Accordion-GSBY5T5U.css';
|
|
5
|
-
import * as React from 'react';
|
|
6
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var Accordion = ({
|
|
9
|
-
items,
|
|
10
|
-
multiple = false,
|
|
11
|
-
activeKeys,
|
|
12
|
-
defaultActiveKeys = [],
|
|
13
|
-
onChange,
|
|
14
|
-
className = ""
|
|
15
|
-
}) => {
|
|
16
|
-
const [inner, setInner] = React.useState(defaultActiveKeys);
|
|
17
|
-
const isControlled = activeKeys !== void 0;
|
|
18
|
-
const keys = isControlled ? activeKeys : inner;
|
|
19
|
-
const toggle = (k) => {
|
|
20
|
-
const next = keys.includes(k) ? keys.filter((x) => x !== k) : multiple ? [...keys, k] : [k];
|
|
21
|
-
if (!isControlled) setInner(next);
|
|
22
|
-
onChange?.(next);
|
|
23
|
-
};
|
|
24
|
-
return /* @__PURE__ */ jsx("div", { className: `accordion ${className}`, children: items.map((it) => {
|
|
25
|
-
const open = keys.includes(it.key);
|
|
26
|
-
return /* @__PURE__ */ jsxs("div", { className: `accordion-item ${open ? "open" : ""}`, children: [
|
|
27
|
-
/* @__PURE__ */ jsxs(
|
|
28
|
-
"button",
|
|
29
|
-
{
|
|
30
|
-
type: "button",
|
|
31
|
-
className: "accordion-head",
|
|
32
|
-
disabled: it.disabled,
|
|
33
|
-
onClick: () => toggle(it.key),
|
|
34
|
-
"aria-expanded": open,
|
|
35
|
-
children: [
|
|
36
|
-
/* @__PURE__ */ jsx("span", { children: it.title }),
|
|
37
|
-
/* @__PURE__ */ jsx("span", { className: "accordion-chev", children: /* @__PURE__ */ jsx(Icon, { name: "chevDown", size: 16 }) })
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
),
|
|
41
|
-
/* @__PURE__ */ jsx("div", { className: "accordion-body", children: /* @__PURE__ */ jsx("div", { className: "accordion-body-inner", children: it.content }) })
|
|
42
|
-
] }, it.key);
|
|
43
|
-
}) });
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export { Accordion };
|
|
47
|
-
//# sourceMappingURL=chunk-M6OTFXZA.js.map
|
|
48
|
-
//# sourceMappingURL=chunk-M6OTFXZA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":";;;;;;;AAwBO,IAAM,YAAsC,CAAC;AAAA,EAClD,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,oBAAoB,EAAC;AAAA,EACrB,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAmB,iBAAiB,CAAA;AACpE,EAAA,MAAM,eAAe,UAAA,KAAe,MAAA;AACpC,EAAA,MAAM,IAAA,GAAO,eAAe,UAAA,GAAc,KAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAc;AAC5B,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,GACxB,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA,GAC1B,WACA,CAAC,GAAG,MAAM,CAAC,CAAA,GACX,CAAC,CAAC,CAAA;AACN,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,IAAI,CAAA;AAChC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EACnC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,KAAO;AACjB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,GAAG,CAAA;AACjC,IAAA,4BACG,KAAA,EAAA,EAAiB,SAAA,EAAW,kBAAkB,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,CAAA,EAC/D,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,gBAAA;AAAA,UACV,UAAU,EAAA,CAAG,QAAA;AAAA,UACb,OAAA,EAAS,MAAM,MAAA,CAAO,EAAA,CAAG,GAAG,CAAA;AAAA,UAC5B,eAAA,EAAe,IAAA;AAAA,UAEf,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAM,aAAG,KAAA,EAAM,CAAA;AAAA,4BAChB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,UAAA,EAAW,IAAA,EAAM,EAAA,EAAI,CAAA,EAClC;AAAA;AAAA;AAAA,OACF;AAAA,sBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,kBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAA,EAAA,CAAG,OAAA,EAAQ,CAAA,EACpD;AAAA,KAAA,EAAA,EAfQ,GAAG,GAgBb,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ","file":"chunk-M6OTFXZA.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Accordion.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface AccordionItem {\n key: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n /** If true, multiple sections can be open at once. */\n multiple?: boolean;\n activeKeys?: string[];\n defaultActiveKeys?: string[];\n onChange?: (keys: string[]) => void;\n className?: string;\n}\n\n/** `Accordion` — collapsible sections. */\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n multiple = false,\n activeKeys,\n defaultActiveKeys = [],\n onChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultActiveKeys);\n const isControlled = activeKeys !== undefined;\n const keys = isControlled ? activeKeys! : inner;\n\n const toggle = (k: string) => {\n const next = keys.includes(k)\n ? keys.filter((x) => x !== k)\n : multiple\n ? [...keys, k]\n : [k];\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n return (\n <div className={`accordion ${className}`}>\n {items.map((it) => {\n const open = keys.includes(it.key);\n return (\n <div key={it.key} className={`accordion-item ${open ? \"open\" : \"\"}`}>\n <button\n type=\"button\"\n className=\"accordion-head\"\n disabled={it.disabled}\n onClick={() => toggle(it.key)}\n aria-expanded={open}\n >\n <span>{it.title}</span>\n <span className=\"accordion-chev\">\n <Icon name=\"chevDown\" size={16} />\n </span>\n </button>\n <div className=\"accordion-body\">\n <div className=\"accordion-body-inner\">{it.content}</div>\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n"]}
|
package/dist/chunk-NWJW5KLN.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Icon } from './chunk-GEYMWUW6.js';
|
|
2
|
-
import './tokens-HWQ7KWPG.css';
|
|
3
|
-
import './shared-NJHRNLRH.css';
|
|
4
|
-
import './Alert-LSKBYDRI.css';
|
|
5
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var Alert = ({
|
|
8
|
-
tone = "info",
|
|
9
|
-
title,
|
|
10
|
-
children,
|
|
11
|
-
icon,
|
|
12
|
-
closable,
|
|
13
|
-
onClose,
|
|
14
|
-
className = ""
|
|
15
|
-
}) => {
|
|
16
|
-
const iconName = icon ?? (tone === "success" ? "check2" : tone === "warning" || tone === "danger" ? "alert" : "info");
|
|
17
|
-
return /* @__PURE__ */ jsxs("div", { className: `alert ${tone} ${title ? "" : "no-title"} ${className}`, role: "alert", children: [
|
|
18
|
-
/* @__PURE__ */ jsx("span", { className: "alert-ico", children: /* @__PURE__ */ jsx(Icon, { name: iconName, size: 14 }) }),
|
|
19
|
-
/* @__PURE__ */ jsxs("div", { className: "alert-body", children: [
|
|
20
|
-
title && /* @__PURE__ */ jsx("div", { className: "alert-title", children: title }),
|
|
21
|
-
children && /* @__PURE__ */ jsx("div", { className: "alert-desc", children })
|
|
22
|
-
] }),
|
|
23
|
-
closable && /* @__PURE__ */ jsx("button", { type: "button", className: "alert-close", onClick: onClose, "aria-label": "Dismiss", children: /* @__PURE__ */ jsx(Icon, { name: "x", size: 12 }) })
|
|
24
|
-
] });
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export { Alert };
|
|
28
|
-
//# sourceMappingURL=chunk-NWJW5KLN.js.map
|
|
29
|
-
//# sourceMappingURL=chunk-NWJW5KLN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Alert/Alert.tsx"],"names":[],"mappings":";;;;;;AAmBO,IAAM,QAA8B,CAAC;AAAA,EAC1C,IAAA,GAAO,MAAA;AAAA,EACP,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,QAAA,GACJ,SAAS,IAAA,KAAS,SAAA,GAAY,WAAW,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,QAAA,GAAW,OAAA,GAAU,MAAA,CAAA;AAC/F,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,KAAA,GAAQ,EAAA,GAAK,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,MAAK,OAAA,EAC5E,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,WAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,EAAA,EAAI,CAAA,EAClC,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAS;AAAA,KAAA,EACrD,CAAA;AAAA,IACC,4BACC,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,aAAA,EAAc,OAAA,EAAS,OAAA,EAAS,YAAA,EAAW,WACzE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,GAAA,EAAI,IAAA,EAAM,IAAI,CAAA,EAC3B;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-NWJW5KLN.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Alert.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport type AlertTone = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface AlertProps {\n tone?: AlertTone;\n title?: React.ReactNode;\n children?: React.ReactNode;\n icon?: IconName;\n closable?: boolean;\n onClose?: () => void;\n className?: string;\n}\n\n/** `Alert` — inline contextual message. */\nexport const Alert: React.FC<AlertProps> = ({\n tone = \"info\",\n title,\n children,\n icon,\n closable,\n onClose,\n className = \"\",\n}) => {\n const iconName: IconName =\n icon ?? (tone === \"success\" ? \"check2\" : tone === \"warning\" || tone === \"danger\" ? \"alert\" : \"info\");\n return (\n <div className={`alert ${tone} ${title ? \"\" : \"no-title\"} ${className}`} role=\"alert\">\n <span className=\"alert-ico\">\n <Icon name={iconName} size={14} />\n </span>\n <div className=\"alert-body\">\n {title && <div className=\"alert-title\">{title}</div>}\n {children && <div className=\"alert-desc\">{children}</div>}\n </div>\n {closable && (\n <button type=\"button\" className=\"alert-close\" onClick={onClose} aria-label=\"Dismiss\">\n <Icon name=\"x\" size={12} />\n </button>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Divider/Divider.tsx"],"names":["jsx"],"mappings":";;;;;;;;AAaO,IAAM,UAAkC,CAAC;AAAA,EAC9C,SAAA,GAAY,YAAA;AAAA,EACZ,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAM,CAAC,SAAA,EAAW,SAAA,EAAW,MAAA,IAAU,QAAA,EAAU,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC1F,EAAA,uBACEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAK,MAAK,WAAA,EAAa,GAAG,IAAA,EACvC,QAAA,EAAA,KAAA,oBAASA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,iBAAM,CAAA,EACnD,CAAA;AAEJ","file":"chunk-NZPJ7BUB.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Divider.css\";\nimport * as React from \"react\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"horizontal\" | \"vertical\";\n label?: React.ReactNode;\n /** Use recessed groove styling. */\n sunken?: boolean;\n}\n\n/** `Divider` — visual separator, horizontal or vertical. */\nexport const Divider: React.FC<DividerProps> = ({\n direction = \"horizontal\",\n label,\n sunken,\n className = \"\",\n ...rest\n}) => {\n const cls = [\"divider\", direction, sunken && \"sunken\", className].filter(Boolean).join(\" \");\n return (\n <div className={cls} role=\"separator\" {...rest}>\n {label && <span className=\"divider-label\">{label}</span>}\n </div>\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":[],"mappings":";;;;;;;AAgBO,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,OAAA,GAAU,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AAClF,IAAA,MAAM,GAAA,GAAM,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAY,IAAA,IAAQ,CAAA,IAAA,EAAO,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAC1E,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,2BACG,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,0BACG,KAAA,EAAA,EAAI,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACtC,QAAA,EAAA;AAAA,EAAA,CAAA,KAAA,IAAS,OAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,WAAA,oBAAe,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC3D,CAAA;AAAA,IACC,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACtD,CAAA;AAAA,kBAEF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS;AAAA,CAAA,EACxC","file":"chunk-OXYFB2ZI.js","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 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\", className = \"\", children, ...rest }, ref) => {\n const cls = [\"card\", variant, padding !== \"md\" && `pad-${padding}`, className]\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"]}
|
package/dist/chunk-Q33V7MSK.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { Button } from './chunk-5EYI27B6.js';
|
|
2
|
-
import { Icon } from './chunk-GEYMWUW6.js';
|
|
3
|
-
import './tokens-HWQ7KWPG.css';
|
|
4
|
-
import './shared-NJHRNLRH.css';
|
|
5
|
-
import './Modal-AYKNIWWQ.css';
|
|
6
|
-
import * as React from 'react';
|
|
7
|
-
import ReactDOM from 'react-dom';
|
|
8
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
9
|
-
|
|
10
|
-
var Modal = ({
|
|
11
|
-
open,
|
|
12
|
-
onClose,
|
|
13
|
-
title,
|
|
14
|
-
description,
|
|
15
|
-
footer,
|
|
16
|
-
children,
|
|
17
|
-
width = 440,
|
|
18
|
-
maskClosable = true,
|
|
19
|
-
escClosable = true,
|
|
20
|
-
className = ""
|
|
21
|
-
}) => {
|
|
22
|
-
React.useEffect(() => {
|
|
23
|
-
if (!open || !escClosable) return;
|
|
24
|
-
const h = (e) => e.key === "Escape" && onClose?.();
|
|
25
|
-
window.addEventListener("keydown", h);
|
|
26
|
-
return () => window.removeEventListener("keydown", h);
|
|
27
|
-
}, [open, escClosable, onClose]);
|
|
28
|
-
if (!open || typeof document === "undefined") return null;
|
|
29
|
-
return ReactDOM.createPortal(
|
|
30
|
-
/* @__PURE__ */ jsx("div", { className: `modal-overlay ${className}`, onClick: () => maskClosable && onClose?.(), children: /* @__PURE__ */ jsxs("div", { className: "modal", style: { width }, onClick: (e) => e.stopPropagation(), children: [
|
|
31
|
-
/* @__PURE__ */ jsxs("div", { className: "modal-head", children: [
|
|
32
|
-
/* @__PURE__ */ jsxs("div", { className: "modal-titles", children: [
|
|
33
|
-
title && /* @__PURE__ */ jsx("div", { className: "modal-title", children: title }),
|
|
34
|
-
description && /* @__PURE__ */ jsx("div", { className: "modal-desc", children: description })
|
|
35
|
-
] }),
|
|
36
|
-
/* @__PURE__ */ jsx("button", { type: "button", className: "modal-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx(Icon, { name: "x", size: 16 }) })
|
|
37
|
-
] }),
|
|
38
|
-
/* @__PURE__ */ jsx("div", { className: "modal-body", children }),
|
|
39
|
-
footer !== void 0 ? /* @__PURE__ */ jsx("div", { className: "modal-foot", children: footer }) : /* @__PURE__ */ jsxs("div", { className: "modal-foot", children: [
|
|
40
|
-
/* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: onClose, children: "\u53D6\u6D88" }),
|
|
41
|
-
/* @__PURE__ */ jsx(Button, { variant: "primary", onClick: onClose, children: "\u786E\u5B9A" })
|
|
42
|
-
] })
|
|
43
|
-
] }) }),
|
|
44
|
-
document.body
|
|
45
|
-
);
|
|
46
|
-
};
|
|
47
|
-
var Drawer = ({
|
|
48
|
-
open,
|
|
49
|
-
onClose,
|
|
50
|
-
placement = "right",
|
|
51
|
-
size = 380,
|
|
52
|
-
title,
|
|
53
|
-
footer,
|
|
54
|
-
children,
|
|
55
|
-
maskClosable = true,
|
|
56
|
-
className = ""
|
|
57
|
-
}) => {
|
|
58
|
-
if (!open || typeof document === "undefined") return null;
|
|
59
|
-
const isV = placement === "left" || placement === "right";
|
|
60
|
-
const style = isV ? { width: size } : { height: size };
|
|
61
|
-
return ReactDOM.createPortal(
|
|
62
|
-
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
63
|
-
/* @__PURE__ */ jsx("div", { className: "drawer-overlay", onClick: () => maskClosable && onClose?.() }),
|
|
64
|
-
/* @__PURE__ */ jsxs("div", { className: `drawer ${placement} ${className}`, style, onClick: (e) => e.stopPropagation(), children: [
|
|
65
|
-
title && /* @__PURE__ */ jsxs("div", { className: "drawer-head", children: [
|
|
66
|
-
/* @__PURE__ */ jsx("div", { className: "drawer-title", children: title }),
|
|
67
|
-
/* @__PURE__ */ jsx("button", { type: "button", className: "modal-close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx(Icon, { name: "x", size: 16 }) })
|
|
68
|
-
] }),
|
|
69
|
-
/* @__PURE__ */ jsx("div", { className: "drawer-body", children }),
|
|
70
|
-
footer && /* @__PURE__ */ jsx("div", { className: "modal-foot", children: footer })
|
|
71
|
-
] })
|
|
72
|
-
] }),
|
|
73
|
-
document.body
|
|
74
|
-
);
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
export { Drawer, Modal };
|
|
78
|
-
//# sourceMappingURL=chunk-Q33V7MSK.js.map
|
|
79
|
-
//# sourceMappingURL=chunk-Q33V7MSK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-Q33V7MSK.js","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 } from \"../Button\";\n\nexport interface ModalProps {\n open: boolean;\n onClose?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n className?: string;\n}\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n title,\n description,\n footer,\n children,\n width = 440,\n maskClosable = true,\n escClosable = true,\n className = \"\",\n}) => {\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose?.();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n return ReactDOM.createPortal(\n <div className={`modal-overlay ${className}`} onClick={() => maskClosable && onClose?.()}>\n <div className=\"modal\" style={{ width }} onClick={(e) => e.stopPropagation()}>\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 <button type=\"button\" className=\"modal-close\" onClick={onClose} aria-label=\"Close\">\n <Icon name=\"x\" size={16} />\n </button>\n </div>\n <div className=\"modal-body\">{children}</div>\n {footer !== undefined ? (\n <div className=\"modal-foot\">{footer}</div>\n ) : (\n <div className=\"modal-foot\">\n <Button variant=\"ghost\" onClick={onClose}>取消</Button>\n <Button variant=\"primary\" onClick={onClose}>确定</Button>\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport interface DrawerProps extends Omit<ModalProps, \"width\"> {\n /** Edge the drawer slides from. */\n placement?: \"left\" | \"right\" | \"top\" | \"bottom\";\n size?: number | string;\n}\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 footer,\n children,\n maskClosable = true,\n className = \"\",\n}) => {\n if (!open || typeof document === \"undefined\") return null;\n const isV = placement === \"left\" || placement === \"right\";\n const style: React.CSSProperties = isV ? { width: size } : { height: size };\n return ReactDOM.createPortal(\n <>\n <div className=\"drawer-overlay\" onClick={() => maskClosable && onClose?.()} />\n <div className={`drawer ${placement} ${className}`} style={style} onClick={(e) => e.stopPropagation()}>\n {title && (\n <div className=\"drawer-head\">\n <div className=\"drawer-title\">{title}</div>\n <button type=\"button\" className=\"modal-close\" onClick={onClose} aria-label=\"Close\">\n <Icon name=\"x\" size={16} />\n </button>\n </div>\n )}\n <div className=\"drawer-body\">{children}</div>\n {footer && <div className=\"modal-foot\">{footer}</div>}\n </div>\n </>,\n document.body\n );\n};\n"]}
|
package/dist/chunk-QT7SJITQ.cjs
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
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-Z526ARZP.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
|
-
className = "",
|
|
44
|
-
...rest
|
|
45
|
-
}, ref) => {
|
|
46
|
-
const wrapCls = [
|
|
47
|
-
"input-wrap",
|
|
48
|
-
size !== "md" && size,
|
|
49
|
-
invalid && "invalid",
|
|
50
|
-
disabled && "disabled",
|
|
51
|
-
className
|
|
52
|
-
].filter(Boolean).join(" ");
|
|
53
|
-
const handleIconClick = (handler) => handler ? (e) => {
|
|
54
|
-
e.stopPropagation();
|
|
55
|
-
if (!disabled) handler(e);
|
|
56
|
-
} : void 0;
|
|
57
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: wrapCls, children: [
|
|
58
|
-
leadingIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
59
|
-
chunkYVO7XO4W_cjs.Icon,
|
|
60
|
-
{
|
|
61
|
-
name: leadingIcon,
|
|
62
|
-
size: 14,
|
|
63
|
-
className: `lead${onLeadingIconClick ? " interactive" : ""}`,
|
|
64
|
-
onClick: handleIconClick(onLeadingIconClick)
|
|
65
|
-
}
|
|
66
|
-
),
|
|
67
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
68
|
-
"input",
|
|
69
|
-
{
|
|
70
|
-
ref,
|
|
71
|
-
className: "input",
|
|
72
|
-
value,
|
|
73
|
-
defaultValue,
|
|
74
|
-
onChange: (e) => onChange?.(e.target.value, e),
|
|
75
|
-
placeholder,
|
|
76
|
-
disabled,
|
|
77
|
-
...rest
|
|
78
|
-
}
|
|
79
|
-
),
|
|
80
|
-
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
81
|
-
chunkYVO7XO4W_cjs.Icon,
|
|
82
|
-
{
|
|
83
|
-
name: trailingIcon,
|
|
84
|
-
size: 14,
|
|
85
|
-
className: `trail${onTrailingIconClick ? " interactive" : ""}`,
|
|
86
|
-
onClick: handleIconClick(onTrailingIconClick)
|
|
87
|
-
}
|
|
88
|
-
)
|
|
89
|
-
] });
|
|
90
|
-
}
|
|
91
|
-
);
|
|
92
|
-
Input.displayName = "Input";
|
|
93
|
-
var Textarea = React__namespace.forwardRef(
|
|
94
|
-
({ value, defaultValue, onChange, invalid, className = "", ...rest }, ref) => {
|
|
95
|
-
const cls = ["textarea", invalid && "invalid", className].filter(Boolean).join(" ");
|
|
96
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
97
|
-
"textarea",
|
|
98
|
-
{
|
|
99
|
-
ref,
|
|
100
|
-
className: cls,
|
|
101
|
-
value,
|
|
102
|
-
defaultValue,
|
|
103
|
-
onChange: (e) => onChange?.(e.target.value, e),
|
|
104
|
-
...rest
|
|
105
|
-
}
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
);
|
|
109
|
-
Textarea.displayName = "Textarea";
|
|
110
|
-
|
|
111
|
-
exports.Input = Input;
|
|
112
|
-
exports.Textarea = Textarea;
|
|
113
|
-
//# sourceMappingURL=chunk-QT7SJITQ.cjs.map
|
|
114
|
-
//# sourceMappingURL=chunk-QT7SJITQ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Input/Input.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-QT7SJITQ.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\"> {\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 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 className = \"\",\n ...rest\n },\n ref\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 return (\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 <input\n ref={ref}\n className=\"input\"\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(e.target.value, e)}\n placeholder={placeholder}\n disabled={disabled}\n {...rest}\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);\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 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 ({ value, defaultValue, onChange, invalid, className = \"\", ...rest }, ref) => {\n const cls = [\"textarea\", invalid && \"invalid\", className].filter(Boolean).join(\" \");\n return (\n <textarea\n ref={ref}\n className={cls}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(e.target.value, e)}\n {...rest}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Tag/Tag.tsx"],"names":["jsxs","jsx","Icon"],"mappings":";;;;;;;;AAoBO,IAAM,MAA0B,CAAC;AAAA,EACtC,IAAA,GAAO,SAAA;AAAA,EACP,KAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,OAAA,EAAS,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC/E,EAAA,uBACEA,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EACvB,QAAA,EAAA;AAAA,IAAA,GAAA,oBAAOC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,KAAA,EAAM,CAAA;AAAA,IAC7B,QAAA;AAAA,IACA,SAAA,oBACCA,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,GAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,QAAA;AAAA,QACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,QAAA,IAAW;AAAA,QACb,CAAA;AAAA,QAEA,QAAA,kBAAAA,cAAA,CAACC,sBAAA,EAAA,EAAK,IAAA,EAAK,GAAA,EAAI,MAAM,EAAA,EAAI;AAAA;AAAA;AAC3B,GAAA,EAEJ,CAAA;AAEJ;AAYO,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,IAAA,GAAO,GAAA,IAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,GAAQ,CAAA;AAC1D,EAAA,uCACG,MAAA,EAAA,EAAK,SAAA,EAAW,cAAc,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EAC7C,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,wBACCD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,GAAA,GAAM,KAAA,GAAQ,EAAE,IAC/C,QAAA,EAAA,CAAC,GAAA,KAAQ,KAAA,GAAS,EAAA,GAAK,QAAQ,KAAA,CAAA,EAClC;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-VMHNKD3N.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tag.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport type TagTone = \"neutral\" | \"accent\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: TagTone;\n solid?: boolean;\n /** Render a leading colored dot. */\n dot?: boolean;\n /** Show a close button. */\n removable?: boolean;\n onRemove?: () => void;\n children?: React.ReactNode;\n}\n\n/** `Tag` — small label/pill. */\nexport const Tag: React.FC<TagProps> = ({\n tone = \"neutral\",\n solid,\n dot,\n removable,\n onRemove,\n className = \"\",\n children,\n ...rest\n}) => {\n const cls = [\"tag\", tone, solid && \"solid\", className].filter(Boolean).join(\" \");\n return (\n <span className={cls} {...rest}>\n {dot && <span className=\"dot\" />}\n {children}\n {removable && (\n <span\n className=\"x\"\n role=\"button\"\n aria-label=\"Remove\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n >\n <Icon name=\"x\" size={11} />\n </span>\n )}\n </span>\n );\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Numeric count — renders as \"99+\" if > 99. */\n count?: number;\n /** Show a tiny dot instead of a number. */\n dot?: boolean;\n tone?: TagTone;\n children?: React.ReactNode;\n}\n\n/** `Badge` — notification dot / count. Wrap around another element. */\nexport const Badge: React.FC<BadgeProps> = ({\n count,\n dot,\n tone = \"danger\",\n children,\n className = \"\",\n ...rest\n}) => {\n const show = dot || (typeof count === \"number\" && count > 0);\n return (\n <span className={`badge-wrap ${className}`} {...rest}>\n {children}\n {show && (\n <span className={`badge ${tone} ${dot ? \"dot\" : \"\"}`}>\n {!dot && (count! > 99 ? \"99+\" : count)}\n </span>\n )}\n </span>\n );\n};\n"]}
|
package/dist/chunk-VXITDXLW.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import './tokens-HWQ7KWPG.css';
|
|
2
|
-
import './shared-NJHRNLRH.css';
|
|
3
|
-
import './Avatar-OXDSG5Q6.css';
|
|
4
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
// src/components/Avatar/Avatar.tsx
|
|
7
|
-
var Avatar = ({
|
|
8
|
-
src,
|
|
9
|
-
alt = "",
|
|
10
|
-
initials,
|
|
11
|
-
size = "md",
|
|
12
|
-
status,
|
|
13
|
-
className = "",
|
|
14
|
-
style,
|
|
15
|
-
...rest
|
|
16
|
-
}) => {
|
|
17
|
-
const sizeCls = typeof size === "string" && size !== "md" ? size : "";
|
|
18
|
-
const customStyle = typeof size === "number" ? { ["--size"]: `${size}px`, ...style } : style ?? {};
|
|
19
|
-
const shown = initials ?? alt.slice(0, 2).toUpperCase();
|
|
20
|
-
return /* @__PURE__ */ jsxs("div", { className: `avatar ${sizeCls} ${className}`, style: customStyle, ...rest, children: [
|
|
21
|
-
src ? /* @__PURE__ */ jsx("img", { src, alt }) : /* @__PURE__ */ jsx("span", { children: shown }),
|
|
22
|
-
status && /* @__PURE__ */ jsx("span", { className: `avatar-status ${status}` })
|
|
23
|
-
] });
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export { Avatar };
|
|
27
|
-
//# sourceMappingURL=chunk-VXITDXLW.js.map
|
|
28
|
-
//# sourceMappingURL=chunk-VXITDXLW.js.map
|