@fangxinyan/lumina 0.1.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/LICENSE +15 -0
- package/README.md +110 -0
- package/dist/Accordion-GSBY5T5U.css +38 -0
- package/dist/Accordion.cjs +13 -0
- package/dist/Accordion.cjs.map +1 -0
- package/dist/Accordion.d.cts +21 -0
- package/dist/Accordion.d.ts +21 -0
- package/dist/Accordion.js +4 -0
- package/dist/Accordion.js.map +1 -0
- package/dist/Alert-LSKBYDRI.css +35 -0
- package/dist/Alert.cjs +13 -0
- package/dist/Alert.cjs.map +1 -0
- package/dist/Alert.d.cts +17 -0
- package/dist/Alert.d.ts +17 -0
- package/dist/Alert.js +4 -0
- package/dist/Alert.js.map +1 -0
- package/dist/AppShell-RCALXUCZ.css +162 -0
- package/dist/AppShell.cjs +24 -0
- package/dist/AppShell.cjs.map +1 -0
- package/dist/AppShell.d.cts +68 -0
- package/dist/AppShell.d.ts +68 -0
- package/dist/AppShell.js +3 -0
- package/dist/AppShell.js.map +1 -0
- package/dist/Avatar-OXDSG5Q6.css +36 -0
- package/dist/Avatar.cjs +12 -0
- package/dist/Avatar.cjs.map +1 -0
- package/dist/Avatar.d.cts +15 -0
- package/dist/Avatar.d.ts +15 -0
- package/dist/Avatar.js +3 -0
- package/dist/Avatar.js.map +1 -0
- package/dist/Button-5UI7QXGU.css +96 -0
- package/dist/Button.cjs +17 -0
- package/dist/Button.cjs.map +1 -0
- package/dist/Button.d.cts +41 -0
- package/dist/Button.d.ts +41 -0
- package/dist/Button.js +4 -0
- package/dist/Button.js.map +1 -0
- package/dist/Calendar-LHZELUDL.css +65 -0
- package/dist/Calendar.cjs +13 -0
- package/dist/Calendar.cjs.map +1 -0
- package/dist/Calendar.d.cts +16 -0
- package/dist/Calendar.d.ts +16 -0
- package/dist/Calendar.js +4 -0
- package/dist/Calendar.js.map +1 -0
- package/dist/Card-2CHHFD4Y.css +28 -0
- package/dist/Card.cjs +16 -0
- package/dist/Card.cjs.map +1 -0
- package/dist/Card.d.cts +25 -0
- package/dist/Card.d.ts +25 -0
- package/dist/Card.js +3 -0
- package/dist/Card.js.map +1 -0
- package/dist/Cascader-TO2QMSLJ.css +76 -0
- package/dist/Cascader.cjs +13 -0
- package/dist/Cascader.cjs.map +1 -0
- package/dist/Cascader.d.cts +23 -0
- package/dist/Cascader.d.ts +23 -0
- package/dist/Cascader.js +4 -0
- package/dist/Cascader.js.map +1 -0
- package/dist/Checkbox-SKJATVSN.css +72 -0
- package/dist/Checkbox.cjs +17 -0
- package/dist/Checkbox.cjs.map +1 -0
- package/dist/Checkbox.d.cts +33 -0
- package/dist/Checkbox.d.ts +33 -0
- package/dist/Checkbox.js +4 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Divider-Z37INS5E.css +49 -0
- package/dist/Divider.cjs +12 -0
- package/dist/Divider.cjs.map +1 -0
- package/dist/Divider.d.cts +12 -0
- package/dist/Divider.d.ts +12 -0
- package/dist/Divider.js +3 -0
- package/dist/Divider.js.map +1 -0
- package/dist/Empty-VM23UNLQ.css +138 -0
- package/dist/Empty.cjs +20 -0
- package/dist/Empty.cjs.map +1 -0
- package/dist/Empty.d.cts +37 -0
- package/dist/Empty.d.ts +37 -0
- package/dist/Empty.js +3 -0
- package/dist/Empty.js.map +1 -0
- package/dist/Icon.cjs +16 -0
- package/dist/Icon.cjs.map +1 -0
- package/dist/Icon.d.cts +21 -0
- package/dist/Icon.d.ts +21 -0
- package/dist/Icon.js +3 -0
- package/dist/Icon.js.map +1 -0
- package/dist/Image-WYWORJT4.css +106 -0
- package/dist/Image.cjs +17 -0
- package/dist/Image.cjs.map +1 -0
- package/dist/Image.d.cts +30 -0
- package/dist/Image.d.ts +30 -0
- package/dist/Image.js +4 -0
- package/dist/Image.js.map +1 -0
- package/dist/Input-Z526ARZP.css +66 -0
- package/dist/Input.cjs +17 -0
- package/dist/Input.cjs.map +1 -0
- package/dist/Input.d.cts +36 -0
- package/dist/Input.d.ts +36 -0
- package/dist/Input.js +4 -0
- package/dist/Input.js.map +1 -0
- package/dist/List-W5BW4D2P.css +26 -0
- package/dist/List.cjs +12 -0
- package/dist/List.cjs.map +1 -0
- package/dist/List.d.cts +20 -0
- package/dist/List.d.ts +20 -0
- package/dist/List.js +3 -0
- package/dist/List.js.map +1 -0
- package/dist/Modal-AYKNIWWQ.css +79 -0
- package/dist/Modal.cjs +18 -0
- package/dist/Modal.cjs.map +1 -0
- package/dist/Modal.d.cts +27 -0
- package/dist/Modal.d.ts +27 -0
- package/dist/Modal.js +5 -0
- package/dist/Modal.js.map +1 -0
- package/dist/Pagination-6FFOI4NM.css +35 -0
- package/dist/Pagination.cjs +13 -0
- package/dist/Pagination.cjs.map +1 -0
- package/dist/Pagination.d.cts +19 -0
- package/dist/Pagination.d.ts +19 -0
- package/dist/Pagination.js +4 -0
- package/dist/Pagination.js.map +1 -0
- package/dist/Popover-WXEVUYBG.css +15 -0
- package/dist/Popover.cjs +12 -0
- package/dist/Popover.cjs.map +1 -0
- package/dist/Popover.d.cts +16 -0
- package/dist/Popover.d.ts +16 -0
- package/dist/Popover.js +3 -0
- package/dist/Popover.js.map +1 -0
- package/dist/Progress-IXRSO5TW.css +63 -0
- package/dist/Progress.cjs +16 -0
- package/dist/Progress.cjs.map +1 -0
- package/dist/Progress.d.cts +26 -0
- package/dist/Progress.d.ts +26 -0
- package/dist/Progress.js +3 -0
- package/dist/Progress.js.map +1 -0
- package/dist/Select-DDJJBQEL.css +263 -0
- package/dist/Select.cjs +14 -0
- package/dist/Select.cjs.map +1 -0
- package/dist/Select.d.cts +68 -0
- package/dist/Select.d.ts +68 -0
- package/dist/Select.js +5 -0
- package/dist/Select.js.map +1 -0
- package/dist/Slider-RE4HZQKF.css +59 -0
- package/dist/Slider.cjs +12 -0
- package/dist/Slider.cjs.map +1 -0
- package/dist/Slider.d.cts +18 -0
- package/dist/Slider.d.ts +18 -0
- package/dist/Slider.js +3 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Switch-NP7KKJOX.css +44 -0
- package/dist/Switch.cjs +12 -0
- package/dist/Switch.cjs.map +1 -0
- package/dist/Switch.d.cts +18 -0
- package/dist/Switch.d.ts +18 -0
- package/dist/Switch.js +3 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Table-ZDPGWLH3.css +139 -0
- package/dist/Table.cjs +18 -0
- package/dist/Table.cjs.map +1 -0
- package/dist/Table.d.cts +57 -0
- package/dist/Table.d.ts +57 -0
- package/dist/Table.js +5 -0
- package/dist/Table.js.map +1 -0
- package/dist/Tabs-A27TSZOP.css +95 -0
- package/dist/Tabs.cjs +16 -0
- package/dist/Tabs.cjs.map +1 -0
- package/dist/Tabs.d.cts +35 -0
- package/dist/Tabs.d.ts +35 -0
- package/dist/Tabs.js +3 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tag-EYOY3UWG.css +49 -0
- package/dist/Tag.cjs +17 -0
- package/dist/Tag.cjs.map +1 -0
- package/dist/Tag.d.cts +27 -0
- package/dist/Tag.d.ts +27 -0
- package/dist/Tag.js +4 -0
- package/dist/Tag.js.map +1 -0
- package/dist/Theme.cjs +44 -0
- package/dist/Theme.cjs.map +1 -0
- package/dist/Theme.d.cts +127 -0
- package/dist/Theme.d.ts +127 -0
- package/dist/Theme.js +3 -0
- package/dist/Theme.js.map +1 -0
- package/dist/Toast-ERHDN3WG.css +45 -0
- package/dist/Toast.cjs +17 -0
- package/dist/Toast.cjs.map +1 -0
- package/dist/Toast.d.cts +26 -0
- package/dist/Toast.d.ts +26 -0
- package/dist/Toast.js +4 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Tooltip-RT4BOVTD.css +23 -0
- package/dist/Tooltip.cjs +12 -0
- package/dist/Tooltip.cjs.map +1 -0
- package/dist/Tooltip.d.cts +13 -0
- package/dist/Tooltip.d.ts +13 -0
- package/dist/Tooltip.js +3 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/chunk-2VA2HSL4.cjs +121 -0
- package/dist/chunk-2VA2HSL4.cjs.map +1 -0
- package/dist/chunk-2W2AJUZW.js +118 -0
- package/dist/chunk-2W2AJUZW.js.map +1 -0
- package/dist/chunk-3QWHDCHJ.js +53 -0
- package/dist/chunk-3QWHDCHJ.js.map +1 -0
- package/dist/chunk-3WAFIUDQ.js +85 -0
- package/dist/chunk-3WAFIUDQ.js.map +1 -0
- package/dist/chunk-4AA22BOG.js +63 -0
- package/dist/chunk-4AA22BOG.js.map +1 -0
- package/dist/chunk-4GT5TOHP.js +18 -0
- package/dist/chunk-4GT5TOHP.js.map +1 -0
- package/dist/chunk-5EYI27B6.js +64 -0
- package/dist/chunk-5EYI27B6.js.map +1 -0
- package/dist/chunk-6YVW3VYL.js +51 -0
- package/dist/chunk-6YVW3VYL.js.map +1 -0
- package/dist/chunk-77NP67ML.cjs +70 -0
- package/dist/chunk-77NP67ML.cjs.map +1 -0
- package/dist/chunk-7CKHWCEA.cjs +110 -0
- package/dist/chunk-7CKHWCEA.cjs.map +1 -0
- package/dist/chunk-7H453VPW.cjs +20 -0
- package/dist/chunk-7H453VPW.cjs.map +1 -0
- package/dist/chunk-7NM5BRUX.js +91 -0
- package/dist/chunk-7NM5BRUX.js.map +1 -0
- package/dist/chunk-7U6I44RV.cjs +283 -0
- package/dist/chunk-7U6I44RV.cjs.map +1 -0
- package/dist/chunk-AAMYURWQ.cjs +87 -0
- package/dist/chunk-AAMYURWQ.cjs.map +1 -0
- package/dist/chunk-ALFDP5WX.cjs +70 -0
- package/dist/chunk-ALFDP5WX.cjs.map +1 -0
- package/dist/chunk-C5TGQ7CV.cjs +114 -0
- package/dist/chunk-C5TGQ7CV.cjs.map +1 -0
- package/dist/chunk-F3NHM4GX.js +20 -0
- package/dist/chunk-F3NHM4GX.js.map +1 -0
- package/dist/chunk-FI7QO3I5.cjs +90 -0
- package/dist/chunk-FI7QO3I5.cjs.map +1 -0
- package/dist/chunk-FMG3ZPGK.js +88 -0
- package/dist/chunk-FMG3ZPGK.js.map +1 -0
- package/dist/chunk-G3UWXSNQ.js +71 -0
- package/dist/chunk-G3UWXSNQ.js.map +1 -0
- package/dist/chunk-GEYMWUW6.js +146 -0
- package/dist/chunk-GEYMWUW6.js.map +1 -0
- package/dist/chunk-HTP6UEVR.js +48 -0
- package/dist/chunk-HTP6UEVR.js.map +1 -0
- package/dist/chunk-I2ERCHFV.cjs +58 -0
- package/dist/chunk-I2ERCHFV.cjs.map +1 -0
- package/dist/chunk-I7SSCSFH.js +253 -0
- package/dist/chunk-I7SSCSFH.js.map +1 -0
- package/dist/chunk-IGHLSNXT.cjs +109 -0
- package/dist/chunk-IGHLSNXT.cjs.map +1 -0
- package/dist/chunk-IKI5CS4L.cjs +91 -0
- package/dist/chunk-IKI5CS4L.cjs.map +1 -0
- package/dist/chunk-ITGCHU3Y.cjs +94 -0
- package/dist/chunk-ITGCHU3Y.cjs.map +1 -0
- package/dist/chunk-JNFCTYJT.cjs +31 -0
- package/dist/chunk-JNFCTYJT.cjs.map +1 -0
- package/dist/chunk-JWFVSBVX.cjs +30 -0
- package/dist/chunk-JWFVSBVX.cjs.map +1 -0
- package/dist/chunk-K5MHL732.js +81 -0
- package/dist/chunk-K5MHL732.js.map +1 -0
- package/dist/chunk-K67KIKX4.cjs +67 -0
- package/dist/chunk-K67KIKX4.cjs.map +1 -0
- package/dist/chunk-KF4MCHZL.cjs +105 -0
- package/dist/chunk-KF4MCHZL.cjs.map +1 -0
- package/dist/chunk-M6CGYGEO.js +91 -0
- package/dist/chunk-M6CGYGEO.js.map +1 -0
- package/dist/chunk-M6OTFXZA.js +48 -0
- package/dist/chunk-M6OTFXZA.js.map +1 -0
- package/dist/chunk-NWJW5KLN.js +29 -0
- package/dist/chunk-NWJW5KLN.js.map +1 -0
- package/dist/chunk-NXOAYNG2.cjs +52 -0
- package/dist/chunk-NXOAYNG2.cjs.map +1 -0
- package/dist/chunk-NZPJ7BUB.cjs +22 -0
- package/dist/chunk-NZPJ7BUB.cjs.map +1 -0
- package/dist/chunk-OUJBCNWD.js +52 -0
- package/dist/chunk-OUJBCNWD.js.map +1 -0
- package/dist/chunk-OXYFB2ZI.js +35 -0
- package/dist/chunk-OXYFB2ZI.js.map +1 -0
- package/dist/chunk-Q33V7MSK.js +79 -0
- package/dist/chunk-Q33V7MSK.js.map +1 -0
- package/dist/chunk-QESLHLTG.cjs +107 -0
- package/dist/chunk-QESLHLTG.cjs.map +1 -0
- package/dist/chunk-QPZZNSRB.js +65 -0
- package/dist/chunk-QPZZNSRB.js.map +1 -0
- package/dist/chunk-QT7SJITQ.cjs +114 -0
- package/dist/chunk-QT7SJITQ.cjs.map +1 -0
- package/dist/chunk-RMD6KQ4H.cjs +56 -0
- package/dist/chunk-RMD6KQ4H.cjs.map +1 -0
- package/dist/chunk-T5AH4FCV.js +280 -0
- package/dist/chunk-T5AH4FCV.js.map +1 -0
- package/dist/chunk-U6ODMPTI.cjs +74 -0
- package/dist/chunk-U6ODMPTI.cjs.map +1 -0
- package/dist/chunk-V2ZUOEXM.cjs +73 -0
- package/dist/chunk-V2ZUOEXM.cjs.map +1 -0
- package/dist/chunk-VJN637MT.js +49 -0
- package/dist/chunk-VJN637MT.js.map +1 -0
- package/dist/chunk-VMHNKD3N.cjs +56 -0
- package/dist/chunk-VMHNKD3N.cjs.map +1 -0
- package/dist/chunk-VXITDXLW.js +28 -0
- package/dist/chunk-VXITDXLW.js.map +1 -0
- package/dist/chunk-XFRP2MBR.js +87 -0
- package/dist/chunk-XFRP2MBR.js.map +1 -0
- package/dist/chunk-XRZ5OKZH.js +101 -0
- package/dist/chunk-XRZ5OKZH.js.map +1 -0
- package/dist/chunk-Y6FVCCUE.js +34 -0
- package/dist/chunk-Y6FVCCUE.js.map +1 -0
- package/dist/chunk-YVO7XO4W.cjs +149 -0
- package/dist/chunk-YVO7XO4W.cjs.map +1 -0
- package/dist/chunk-ZMDVK2U3.cjs +302 -0
- package/dist/chunk-ZMDVK2U3.cjs.map +1 -0
- package/dist/chunk-ZXM247EM.cjs +123 -0
- package/dist/chunk-ZXM247EM.cjs.map +1 -0
- package/dist/index.cjs +249 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/shared-NJHRNLRH.css +4 -0
- package/dist/styles.css +2068 -0
- package/dist/tokens-HWQ7KWPG.css +153 -0
- package/dist/tokens.css +153 -0
- package/package.json +77 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
4
|
+
require('./tokens-HWQ7KWPG.css');
|
|
5
|
+
require('./shared-NJHRNLRH.css');
|
|
6
|
+
require('./Checkbox-SKJATVSN.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 Checkbox = ({
|
|
31
|
+
checked,
|
|
32
|
+
defaultChecked,
|
|
33
|
+
indeterminate,
|
|
34
|
+
onChange,
|
|
35
|
+
disabled,
|
|
36
|
+
label,
|
|
37
|
+
className = "",
|
|
38
|
+
id
|
|
39
|
+
}) => {
|
|
40
|
+
const [inner, setInner] = React__namespace.useState(defaultChecked ?? false);
|
|
41
|
+
const isControlled = checked !== void 0;
|
|
42
|
+
const value = isControlled ? checked : inner;
|
|
43
|
+
const toggle = () => {
|
|
44
|
+
if (disabled) return;
|
|
45
|
+
const next = !value;
|
|
46
|
+
if (!isControlled) setInner(next);
|
|
47
|
+
onChange?.(next);
|
|
48
|
+
};
|
|
49
|
+
const cls = [
|
|
50
|
+
"checkbox",
|
|
51
|
+
value && "checked",
|
|
52
|
+
indeterminate && "indeterminate",
|
|
53
|
+
disabled && "disabled",
|
|
54
|
+
className
|
|
55
|
+
].filter(Boolean).join(" ");
|
|
56
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cls, children: [
|
|
57
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
+
"button",
|
|
59
|
+
{
|
|
60
|
+
type: "button",
|
|
61
|
+
role: "checkbox",
|
|
62
|
+
"aria-checked": indeterminate ? "mixed" : value,
|
|
63
|
+
disabled,
|
|
64
|
+
onClick: toggle,
|
|
65
|
+
id,
|
|
66
|
+
className: "checkbox-box",
|
|
67
|
+
children: indeterminate ? /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "minus", size: 11 }) : value ? /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: "check", size: 11 }) : null
|
|
68
|
+
}
|
|
69
|
+
),
|
|
70
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "checkbox-label", children: label })
|
|
71
|
+
] });
|
|
72
|
+
};
|
|
73
|
+
function RadioGroup({
|
|
74
|
+
options,
|
|
75
|
+
value,
|
|
76
|
+
defaultValue,
|
|
77
|
+
onChange,
|
|
78
|
+
direction = "vertical",
|
|
79
|
+
className = ""
|
|
80
|
+
}) {
|
|
81
|
+
const [inner, setInner] = React__namespace.useState(defaultValue);
|
|
82
|
+
const isControlled = value !== void 0;
|
|
83
|
+
const current = isControlled ? value : inner;
|
|
84
|
+
const pick = (v) => {
|
|
85
|
+
if (!isControlled) setInner(v);
|
|
86
|
+
onChange?.(v);
|
|
87
|
+
};
|
|
88
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `radio-group ${direction} ${className}`, children: options.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
89
|
+
"label",
|
|
90
|
+
{
|
|
91
|
+
className: `radio ${current === opt.value ? "checked" : ""} ${opt.disabled ? "disabled" : ""}`,
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
94
|
+
"button",
|
|
95
|
+
{
|
|
96
|
+
type: "button",
|
|
97
|
+
role: "radio",
|
|
98
|
+
"aria-checked": current === opt.value,
|
|
99
|
+
disabled: opt.disabled,
|
|
100
|
+
onClick: () => pick(opt.value),
|
|
101
|
+
className: "radio-dot"
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "radio-label", children: opt.label })
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
String(opt.value)
|
|
108
|
+
)) });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
exports.Checkbox = Checkbox;
|
|
112
|
+
exports.RadioGroup = RadioGroup;
|
|
113
|
+
//# sourceMappingURL=chunk-C5TGQ7CV.cjs.map
|
|
114
|
+
//# sourceMappingURL=chunk-C5TGQ7CV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-C5TGQ7CV.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Checkbox.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\n/** `Checkbox` — binary choice, supports indeterminate state. */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked,\n defaultChecked,\n indeterminate,\n onChange,\n disabled,\n label,\n className = \"\",\n id,\n}) => {\n const [inner, setInner] = React.useState(defaultChecked ?? false);\n const isControlled = checked !== undefined;\n const value = isControlled ? checked : inner;\n\n const toggle = () => {\n if (disabled) return;\n const next = !value;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const cls = [\n \"checkbox\",\n value && \"checked\",\n indeterminate && \"indeterminate\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? \"mixed\" : value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"checkbox-box\"\n >\n {indeterminate ? <Icon name=\"minus\" size={11} /> : value ? <Icon name=\"check\" size={11} /> : null}\n </button>\n {label && <span className=\"checkbox-label\">{label}</span>}\n </label>\n );\n};\n\nexport interface RadioOption<T extends string | number = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps<T extends string | number = string> {\n options: RadioOption<T>[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n name?: string;\n direction?: \"vertical\" | \"horizontal\";\n className?: string;\n}\n\n/** `RadioGroup` — mutually exclusive options. */\nexport function RadioGroup<T extends string | number = string>({\n options,\n value,\n defaultValue,\n onChange,\n direction = \"vertical\",\n className = \"\",\n}: RadioGroupProps<T>) {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : inner;\n\n const pick = (v: T) => {\n if (!isControlled) setInner(v);\n onChange?.(v);\n };\n\n return (\n <div className={`radio-group ${direction} ${className}`}>\n {options.map((opt) => (\n <label\n key={String(opt.value)}\n className={`radio ${current === opt.value ? \"checked\" : \"\"} ${opt.disabled ? \"disabled\" : \"\"}`}\n >\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={current === opt.value}\n disabled={opt.disabled}\n onClick={() => pick(opt.value)}\n className=\"radio-dot\"\n />\n <span className=\"radio-label\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import './tokens-HWQ7KWPG.css';
|
|
2
|
+
import './shared-NJHRNLRH.css';
|
|
3
|
+
import './Divider-Z37INS5E.css';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/components/Divider/Divider.tsx
|
|
7
|
+
var Divider = ({
|
|
8
|
+
direction = "horizontal",
|
|
9
|
+
label,
|
|
10
|
+
sunken,
|
|
11
|
+
className = "",
|
|
12
|
+
...rest
|
|
13
|
+
}) => {
|
|
14
|
+
const cls = ["divider", direction, sunken && "sunken", className].filter(Boolean).join(" ");
|
|
15
|
+
return /* @__PURE__ */ jsx("div", { className: cls, role: "separator", ...rest, children: label && /* @__PURE__ */ jsx("span", { className: "divider-label", children: label }) });
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { Divider };
|
|
19
|
+
//# sourceMappingURL=chunk-F3NHM4GX.js.map
|
|
20
|
+
//# sourceMappingURL=chunk-F3NHM4GX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Divider/Divider.tsx"],"names":[],"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,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAK,MAAK,WAAA,EAAa,GAAG,IAAA,EACvC,QAAA,EAAA,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,iBAAM,CAAA,EACnD,CAAA;AAEJ","file":"chunk-F3NHM4GX.js","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"]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./tokens-HWQ7KWPG.css');
|
|
4
|
+
require('./shared-NJHRNLRH.css');
|
|
5
|
+
require('./AppShell-RCALXUCZ.css');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
// src/components/AppShell/AppShell.tsx
|
|
9
|
+
var WindowControls = ({
|
|
10
|
+
platform = "mac",
|
|
11
|
+
onMinimize,
|
|
12
|
+
onMaximize,
|
|
13
|
+
onClose,
|
|
14
|
+
className = ""
|
|
15
|
+
}) => {
|
|
16
|
+
const noDragStyle = { WebkitAppRegion: "no-drag" };
|
|
17
|
+
if (platform === "windows") {
|
|
18
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `win-controls windows ${className}`, style: noDragStyle, children: [
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "win-btn minimize", onClick: onMinimize, "aria-label": "Minimize", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1 5h8", stroke: "currentColor", strokeWidth: "1" }) }) }),
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "win-btn maximize", onClick: onMaximize, "aria-label": "Maximize", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "1", y: "1", width: "8", height: "8", stroke: "currentColor", strokeWidth: "1" }) }) }),
|
|
21
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "win-btn close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1 1l8 8M9 1l-8 8", stroke: "currentColor", strokeWidth: "1" }) }) })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `win-controls mac ${className}`, style: noDragStyle, children: [
|
|
25
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "win-btn close", onClick: onClose, "aria-label": "Close" }),
|
|
26
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "win-btn minimize", onClick: onMinimize, "aria-label": "Minimize" }),
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "win-btn maximize", onClick: onMaximize, "aria-label": "Maximize" })
|
|
28
|
+
] });
|
|
29
|
+
};
|
|
30
|
+
var TitleBar = ({
|
|
31
|
+
title,
|
|
32
|
+
platform = "mac",
|
|
33
|
+
onMinimize,
|
|
34
|
+
onMaximize,
|
|
35
|
+
onClose,
|
|
36
|
+
center,
|
|
37
|
+
actions,
|
|
38
|
+
draggable = true,
|
|
39
|
+
className = ""
|
|
40
|
+
}) => {
|
|
41
|
+
const dragStyle = draggable ? { WebkitAppRegion: "drag" } : void 0;
|
|
42
|
+
const noDragStyle = { WebkitAppRegion: "no-drag" };
|
|
43
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `titlebar ${platform} ${className}`, style: dragStyle, children: [
|
|
44
|
+
platform === "mac" && /* @__PURE__ */ jsxRuntime.jsx(WindowControls, { platform: "mac", onMinimize, onMaximize, onClose }),
|
|
45
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "titlebar-title", children: title }),
|
|
46
|
+
center && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "titlebar-center", style: noDragStyle, children: center }),
|
|
47
|
+
actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "titlebar-actions", style: noDragStyle, children: actions }),
|
|
48
|
+
platform === "windows" && /* @__PURE__ */ jsxRuntime.jsx(WindowControls, { platform: "windows", onMinimize, onMaximize, onClose })
|
|
49
|
+
] });
|
|
50
|
+
};
|
|
51
|
+
var Sidebar = ({
|
|
52
|
+
items,
|
|
53
|
+
activeKey,
|
|
54
|
+
onSelect,
|
|
55
|
+
collapsed,
|
|
56
|
+
header,
|
|
57
|
+
footer,
|
|
58
|
+
className = ""
|
|
59
|
+
}) => /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: `sidebar ${collapsed ? "collapsed" : ""} ${className}`, children: [
|
|
60
|
+
header && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sidebar-header", children: header }),
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "sidebar-nav", children: items.map((it) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
62
|
+
"button",
|
|
63
|
+
{
|
|
64
|
+
type: "button",
|
|
65
|
+
className: `sidebar-item ${activeKey === it.key ? "active" : ""}`,
|
|
66
|
+
onClick: () => onSelect?.(it.key),
|
|
67
|
+
children: [
|
|
68
|
+
it.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sidebar-icon", children: it.icon }),
|
|
69
|
+
!collapsed && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sidebar-label", children: it.label }),
|
|
70
|
+
!collapsed && it.badge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sidebar-badge", children: it.badge })
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
it.key
|
|
74
|
+
)) }),
|
|
75
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sidebar-footer", children: footer })
|
|
76
|
+
] });
|
|
77
|
+
var AppShell = ({ sidebar, titleBar, children, className = "" }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `app-shell ${className}`, children: [
|
|
78
|
+
titleBar,
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "app-shell-body", children: [
|
|
80
|
+
sidebar,
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx("main", { className: "app-shell-main", children })
|
|
82
|
+
] })
|
|
83
|
+
] });
|
|
84
|
+
|
|
85
|
+
exports.AppShell = AppShell;
|
|
86
|
+
exports.Sidebar = Sidebar;
|
|
87
|
+
exports.TitleBar = TitleBar;
|
|
88
|
+
exports.WindowControls = WindowControls;
|
|
89
|
+
//# sourceMappingURL=chunk-FI7QO3I5.cjs.map
|
|
90
|
+
//# sourceMappingURL=chunk-FI7QO3I5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-FI7QO3I5.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./AppShell.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface WindowControlsProps {\n /** macOS traffic lights or Windows-style buttons. */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n className?: string;\n}\n\n/**\n * `WindowControls` — standalone window control buttons.\n * Mac: traffic lights (close/min/max). Windows: rectangular controls.\n */\nexport const WindowControls: React.FC<WindowControlsProps> = ({\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n className = \"\",\n}) => {\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n if (platform === \"windows\") {\n return (\n <div className={`win-controls windows ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 5h8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <rect x=\"1\" y=\"1\" width=\"8\" height=\"8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 1l8 8M9 1l-8 8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n </div>\n );\n }\n return (\n <div className={`win-controls mac ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\" />\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\" />\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\" />\n </div>\n );\n};\n\nexport interface TitleBarProps {\n title?: React.ReactNode;\n /** Platform appearance — affects button placement. Default \"mac\". */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n /** Extra content in the center. */\n center?: React.ReactNode;\n /** Extra content on the trailing side. */\n actions?: React.ReactNode;\n /** Make the whole bar draggable (Electron `-webkit-app-region: drag`). */\n draggable?: boolean;\n className?: string;\n}\n\n/**\n * `TitleBar` — Electron-style window chrome. Attach at the top of your app.\n * Buttons are non-draggable regions so clicks register correctly.\n */\nexport const TitleBar: React.FC<TitleBarProps> = ({\n title,\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n center,\n actions,\n draggable = true,\n className = \"\",\n}) => {\n const dragStyle = draggable ? ({ WebkitAppRegion: \"drag\" } as React.CSSProperties) : undefined;\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n\n return (\n <div className={`titlebar ${platform} ${className}`} style={dragStyle}>\n {platform === \"mac\" && (\n <WindowControls platform=\"mac\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n <div className=\"titlebar-title\">{title}</div>\n {center && (\n <div className=\"titlebar-center\" style={noDragStyle}>\n {center}\n </div>\n )}\n {actions && (\n <div className=\"titlebar-actions\" style={noDragStyle}>\n {actions}\n </div>\n )}\n {platform === \"windows\" && (\n <WindowControls platform=\"windows\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n </div>\n );\n};\n\nexport interface SidebarItem {\n key: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items: SidebarItem[];\n activeKey?: string;\n onSelect?: (key: string) => void;\n /** Collapsed: icons only. */\n collapsed?: boolean;\n /** Header slot (e.g. workspace switcher). */\n header?: React.ReactNode;\n /** Footer slot (e.g. user card). */\n footer?: React.ReactNode;\n className?: string;\n}\n\n/** `Sidebar` — navigation rail. Pair with `AppShell`. */\nexport const Sidebar: React.FC<SidebarProps> = ({\n items,\n activeKey,\n onSelect,\n collapsed,\n header,\n footer,\n className = \"\",\n}) => (\n <aside className={`sidebar ${collapsed ? \"collapsed\" : \"\"} ${className}`}>\n {header && <div className=\"sidebar-header\">{header}</div>}\n <nav className=\"sidebar-nav\">\n {items.map((it) => (\n <button\n type=\"button\"\n key={it.key}\n className={`sidebar-item ${activeKey === it.key ? \"active\" : \"\"}`}\n onClick={() => onSelect?.(it.key)}\n >\n {it.icon && <span className=\"sidebar-icon\">{it.icon}</span>}\n {!collapsed && <span className=\"sidebar-label\">{it.label}</span>}\n {!collapsed && it.badge && <span className=\"sidebar-badge\">{it.badge}</span>}\n </button>\n ))}\n </nav>\n {footer && <div className=\"sidebar-footer\">{footer}</div>}\n </aside>\n);\n\nexport interface AppShellProps {\n sidebar?: React.ReactNode;\n titleBar?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `AppShell` — 3-zone Electron layout: title bar across top, sidebar on left, content fills rest.\n */\nexport const AppShell: React.FC<AppShellProps> = ({ sidebar, titleBar, children, className = \"\" }) => (\n <div className={`app-shell ${className}`}>\n {titleBar}\n <div className=\"app-shell-body\">\n {sidebar}\n <main className=\"app-shell-main\">{children}</main>\n </div>\n </div>\n);\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Icon } from './chunk-GEYMWUW6.js';
|
|
2
|
+
import './tokens-HWQ7KWPG.css';
|
|
3
|
+
import './shared-NJHRNLRH.css';
|
|
4
|
+
import './Calendar-LHZELUDL.css';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var WEEKDAYS = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
|
|
9
|
+
var Calendar = ({
|
|
10
|
+
value,
|
|
11
|
+
defaultValue,
|
|
12
|
+
onChange,
|
|
13
|
+
min,
|
|
14
|
+
max,
|
|
15
|
+
className = ""
|
|
16
|
+
}) => {
|
|
17
|
+
const [inner, setInner] = React.useState(defaultValue ?? /* @__PURE__ */ new Date());
|
|
18
|
+
const isControlled = value !== void 0;
|
|
19
|
+
const sel = isControlled ? value : inner;
|
|
20
|
+
const [view, setView] = React.useState(new Date(sel.getFullYear(), sel.getMonth(), 1));
|
|
21
|
+
const first = new Date(view.getFullYear(), view.getMonth(), 1);
|
|
22
|
+
const startDay = first.getDay();
|
|
23
|
+
const daysInMonth = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();
|
|
24
|
+
const cells = [];
|
|
25
|
+
for (let i = 0; i < startDay; i++) cells.push(null);
|
|
26
|
+
for (let d = 1; d <= daysInMonth; d++) cells.push(d);
|
|
27
|
+
const isSame = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
28
|
+
const pick = (d) => {
|
|
29
|
+
const next = new Date(view.getFullYear(), view.getMonth(), d);
|
|
30
|
+
if (min && next < min) return;
|
|
31
|
+
if (max && next > max) return;
|
|
32
|
+
if (!isControlled) setInner(next);
|
|
33
|
+
onChange?.(next);
|
|
34
|
+
};
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", { className: `calendar ${className}`, children: [
|
|
36
|
+
/* @__PURE__ */ jsxs("div", { className: "calendar-head", children: [
|
|
37
|
+
/* @__PURE__ */ jsx(
|
|
38
|
+
"button",
|
|
39
|
+
{
|
|
40
|
+
type: "button",
|
|
41
|
+
className: "btn icon sm ghost",
|
|
42
|
+
onClick: () => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1)),
|
|
43
|
+
"aria-label": "Previous month",
|
|
44
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "chevLeft", size: 14 })
|
|
45
|
+
}
|
|
46
|
+
),
|
|
47
|
+
/* @__PURE__ */ jsxs("button", { type: "button", className: "calendar-title", children: [
|
|
48
|
+
view.getFullYear(),
|
|
49
|
+
" \u5E74 ",
|
|
50
|
+
view.getMonth() + 1,
|
|
51
|
+
" \u6708"
|
|
52
|
+
] }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
"button",
|
|
55
|
+
{
|
|
56
|
+
type: "button",
|
|
57
|
+
className: "btn icon sm ghost",
|
|
58
|
+
onClick: () => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1)),
|
|
59
|
+
"aria-label": "Next month",
|
|
60
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "chevRight", size: 14 })
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
] }),
|
|
64
|
+
/* @__PURE__ */ jsxs("div", { className: "calendar-grid", children: [
|
|
65
|
+
WEEKDAYS.map((w) => /* @__PURE__ */ jsx("div", { className: "calendar-dow", children: w }, w)),
|
|
66
|
+
cells.map((d, i) => {
|
|
67
|
+
if (d === null) return /* @__PURE__ */ jsx("div", { className: "calendar-cell out" }, i);
|
|
68
|
+
const date = new Date(view.getFullYear(), view.getMonth(), d);
|
|
69
|
+
const disabled = min && date < min || max && date > max;
|
|
70
|
+
return /* @__PURE__ */ jsx(
|
|
71
|
+
"button",
|
|
72
|
+
{
|
|
73
|
+
type: "button",
|
|
74
|
+
disabled: !!disabled,
|
|
75
|
+
className: `calendar-cell ${isSame(date, sel) ? "selected" : ""} ${isSame(date, /* @__PURE__ */ new Date()) ? "today" : ""} ${disabled ? "disabled" : ""}`,
|
|
76
|
+
onClick: () => pick(d),
|
|
77
|
+
children: d
|
|
78
|
+
},
|
|
79
|
+
i
|
|
80
|
+
);
|
|
81
|
+
})
|
|
82
|
+
] })
|
|
83
|
+
] });
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export { Calendar };
|
|
87
|
+
//# sourceMappingURL=chunk-FMG3ZPGK.js.map
|
|
88
|
+
//# sourceMappingURL=chunk-FMG3ZPGK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"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","file":"chunk-FMG3ZPGK.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Calendar.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface CalendarProps {\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n /** Min selectable date. */\n min?: Date;\n /** Max selectable date. */\n max?: Date;\n className?: string;\n}\n\nconst WEEKDAYS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\n\n/** `Calendar` — month-view date picker. */\nexport const Calendar: React.FC<CalendarProps> = ({\n value,\n defaultValue,\n onChange,\n min,\n max,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultValue ?? new Date());\n const isControlled = value !== undefined;\n const sel = isControlled ? value! : inner;\n const [view, setView] = React.useState(new Date(sel.getFullYear(), sel.getMonth(), 1));\n\n const first = new Date(view.getFullYear(), view.getMonth(), 1);\n const startDay = first.getDay();\n const daysInMonth = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();\n const cells: (number | null)[] = [];\n for (let i = 0; i < startDay; i++) cells.push(null);\n for (let d = 1; d <= daysInMonth; d++) cells.push(d);\n\n const isSame = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n\n const pick = (d: number) => {\n const next = new Date(view.getFullYear(), view.getMonth(), d);\n if (min && next < min) return;\n if (max && next > max) return;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n return (\n <div className={`calendar ${className}`}>\n <div className=\"calendar-head\">\n <button\n type=\"button\"\n className=\"btn icon sm ghost\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1))}\n aria-label=\"Previous month\"\n >\n <Icon name=\"chevLeft\" size={14} />\n </button>\n <button type=\"button\" className=\"calendar-title\">\n {view.getFullYear()} 年 {view.getMonth() + 1} 月\n </button>\n <button\n type=\"button\"\n className=\"btn icon sm ghost\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1))}\n aria-label=\"Next month\"\n >\n <Icon name=\"chevRight\" size={14} />\n </button>\n </div>\n <div className=\"calendar-grid\">\n {WEEKDAYS.map((w) => (\n <div key={w} className=\"calendar-dow\">{w}</div>\n ))}\n {cells.map((d, i) => {\n if (d === null) return <div key={i} className=\"calendar-cell out\" />;\n const date = new Date(view.getFullYear(), view.getMonth(), d);\n const disabled = (min && date < min) || (max && date > max);\n return (\n <button\n key={i}\n type=\"button\"\n disabled={!!disabled}\n className={`calendar-cell ${isSame(date, sel) ? \"selected\" : \"\"} ${isSame(date, new Date()) ? \"today\" : \"\"} ${disabled ? \"disabled\" : \"\"}`}\n onClick={() => pick(d)}\n >\n {d}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import './tokens-HWQ7KWPG.css';
|
|
2
|
+
import './shared-NJHRNLRH.css';
|
|
3
|
+
import './Tabs-A27TSZOP.css';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
// src/components/Tabs/Tabs.tsx
|
|
8
|
+
var Tabs = ({
|
|
9
|
+
items,
|
|
10
|
+
activeKey,
|
|
11
|
+
defaultActiveKey,
|
|
12
|
+
onChange,
|
|
13
|
+
variant = "line",
|
|
14
|
+
className = ""
|
|
15
|
+
}) => {
|
|
16
|
+
const [inner, setInner] = React.useState(defaultActiveKey ?? items[0]?.key);
|
|
17
|
+
const isControlled = activeKey !== void 0;
|
|
18
|
+
const current = isControlled ? activeKey : inner;
|
|
19
|
+
const select = (k) => {
|
|
20
|
+
if (!isControlled) setInner(k);
|
|
21
|
+
onChange?.(k);
|
|
22
|
+
};
|
|
23
|
+
const active = items.find((i) => i.key === current);
|
|
24
|
+
return /* @__PURE__ */ jsxs("div", { className: `tabs ${variant} ${className}`, children: [
|
|
25
|
+
/* @__PURE__ */ jsx("div", { className: "tabs-nav", role: "tablist", children: items.map((it) => /* @__PURE__ */ jsx(
|
|
26
|
+
"button",
|
|
27
|
+
{
|
|
28
|
+
type: "button",
|
|
29
|
+
role: "tab",
|
|
30
|
+
"aria-selected": current === it.key,
|
|
31
|
+
disabled: it.disabled,
|
|
32
|
+
className: `tab ${current === it.key ? "active" : ""}`,
|
|
33
|
+
onClick: () => select(it.key),
|
|
34
|
+
children: it.label
|
|
35
|
+
},
|
|
36
|
+
it.key
|
|
37
|
+
)) }),
|
|
38
|
+
active?.content !== void 0 && /* @__PURE__ */ jsx("div", { className: "tabs-content", children: active.content })
|
|
39
|
+
] });
|
|
40
|
+
};
|
|
41
|
+
function Segmented({
|
|
42
|
+
options,
|
|
43
|
+
value,
|
|
44
|
+
defaultValue,
|
|
45
|
+
onChange,
|
|
46
|
+
size = "md",
|
|
47
|
+
className = ""
|
|
48
|
+
}) {
|
|
49
|
+
const [inner, setInner] = React.useState(defaultValue ?? options[0]?.value);
|
|
50
|
+
const isControlled = value !== void 0;
|
|
51
|
+
const v = isControlled ? value : inner;
|
|
52
|
+
const pick = (next) => {
|
|
53
|
+
if (!isControlled) setInner(next);
|
|
54
|
+
onChange?.(next);
|
|
55
|
+
};
|
|
56
|
+
return /* @__PURE__ */ jsx("div", { className: `segmented ${size} ${className}`, children: options.map((o) => /* @__PURE__ */ jsx(
|
|
57
|
+
"button",
|
|
58
|
+
{
|
|
59
|
+
type: "button",
|
|
60
|
+
disabled: o.disabled,
|
|
61
|
+
className: `seg ${v === o.value ? "active" : ""}`,
|
|
62
|
+
onClick: () => pick(o.value),
|
|
63
|
+
children: o.label
|
|
64
|
+
},
|
|
65
|
+
String(o.value)
|
|
66
|
+
)) });
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { Segmented, Tabs };
|
|
70
|
+
//# sourceMappingURL=chunk-G3UWXSNQ.js.map
|
|
71
|
+
//# sourceMappingURL=chunk-G3UWXSNQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"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","file":"chunk-G3UWXSNQ.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tabs.css\";\nimport * as React from \"react\";\n\nexport interface TabItem {\n key: string;\n label: React.ReactNode;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (key: string) => void;\n variant?: \"line\" | \"pill\" | \"segmented\";\n className?: string;\n}\n\n/** `Tabs` — switchable sections. */\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n variant = \"line\",\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultActiveKey ?? items[0]?.key);\n const isControlled = activeKey !== undefined;\n const current = isControlled ? activeKey! : inner;\n\n const select = (k: string) => {\n if (!isControlled) setInner(k);\n onChange?.(k);\n };\n\n const active = items.find((i) => i.key === current);\n\n return (\n <div className={`tabs ${variant} ${className}`}>\n <div className=\"tabs-nav\" role=\"tablist\">\n {items.map((it) => (\n <button\n key={it.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={current === it.key}\n disabled={it.disabled}\n className={`tab ${current === it.key ? \"active\" : \"\"}`}\n onClick={() => select(it.key)}\n >\n {it.label}\n </button>\n ))}\n </div>\n {active?.content !== undefined && <div className=\"tabs-content\">{active.content}</div>}\n </div>\n );\n};\n\nexport interface SegmentedProps<T extends string = string> {\n options: { value: T; label: React.ReactNode; disabled?: boolean }[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\n/** `Segmented` — exclusive choice chip row. */\nexport function Segmented<T extends string = string>({\n options,\n value,\n defaultValue,\n onChange,\n size = \"md\",\n className = \"\",\n}: SegmentedProps<T>) {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue ?? options[0]?.value);\n const isControlled = value !== undefined;\n const v = isControlled ? value : inner;\n const pick = (next: T) => {\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n return (\n <div className={`segmented ${size} ${className}`}>\n {options.map((o) => (\n <button\n key={String(o.value)}\n type=\"button\"\n disabled={o.disabled}\n className={`seg ${v === o.value ? \"active\" : \"\"}`}\n onClick={() => pick(o.value)}\n >\n {o.label}\n </button>\n ))}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
// src/components/Icon/Icon.tsx
|
|
4
|
+
var paths = {
|
|
5
|
+
search: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6
|
+
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "7" }),
|
|
7
|
+
/* @__PURE__ */ jsx("path", { d: "m20 20-3.5-3.5" })
|
|
8
|
+
] }),
|
|
9
|
+
plus: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M12 5v14M5 12h14" }) }),
|
|
10
|
+
minus: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M5 12h14" }) }),
|
|
11
|
+
check: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m4 12 5 5L20 6" }) }),
|
|
12
|
+
x: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M6 6l12 12M18 6 6 18" }) }),
|
|
13
|
+
chevDown: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" }) }),
|
|
14
|
+
chevRight: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m9 6 6 6-6 6" }) }),
|
|
15
|
+
chevLeft: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m15 6-6 6 6 6" }) }),
|
|
16
|
+
chevUp: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m6 15 6-6 6 6" }) }),
|
|
17
|
+
arrowRight: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M5 12h14M13 6l6 6-6 6" }) }),
|
|
18
|
+
settings: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19
|
+
/* @__PURE__ */ jsx("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
|
|
20
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3" })
|
|
21
|
+
] }),
|
|
22
|
+
user: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
23
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "8", r: "4" }),
|
|
24
|
+
/* @__PURE__ */ jsx("path", { d: "M4 21a8 8 0 0 1 16 0" })
|
|
25
|
+
] }),
|
|
26
|
+
bell: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
|
|
28
|
+
/* @__PURE__ */ jsx("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
|
|
29
|
+
] }),
|
|
30
|
+
mail: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
31
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
32
|
+
/* @__PURE__ */ jsx("path", { d: "m3 7 9 6 9-6" })
|
|
33
|
+
] }),
|
|
34
|
+
heart: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z" }) }),
|
|
35
|
+
star: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m12 2 3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" }) }),
|
|
36
|
+
home: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m3 10 9-7 9 7v10a2 2 0 0 1-2 2h-4v-7h-6v7H5a2 2 0 0 1-2-2z" }) }),
|
|
37
|
+
folder: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M3 7a2 2 0 0 1 2-2h4l2 3h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }) }),
|
|
38
|
+
file: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx("path", { d: "M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z" }),
|
|
40
|
+
/* @__PURE__ */ jsx("path", { d: "M14 3v6h6" })
|
|
41
|
+
] }),
|
|
42
|
+
image: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
43
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
44
|
+
/* @__PURE__ */ jsx("circle", { cx: "9", cy: "9", r: "2" }),
|
|
45
|
+
/* @__PURE__ */ jsx("path", { d: "m21 15-5-5L5 21" })
|
|
46
|
+
] }),
|
|
47
|
+
play: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M7 5v14l11-7z", fill: "currentColor", stroke: "none" }) }),
|
|
48
|
+
pause: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M6 4h4v16H6zM14 4h4v16h-4z", fill: "currentColor", stroke: "none" }) }),
|
|
49
|
+
volume: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
50
|
+
/* @__PURE__ */ jsx("path", { d: "M11 5 6 9H3v6h3l5 4z" }),
|
|
51
|
+
/* @__PURE__ */ jsx("path", { d: "M17 8a5 5 0 0 1 0 8M20 5a9 9 0 0 1 0 14" })
|
|
52
|
+
] }),
|
|
53
|
+
trash: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M5 6l1 14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-14" }) }),
|
|
54
|
+
edit: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
55
|
+
/* @__PURE__ */ jsx("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
|
|
56
|
+
/* @__PURE__ */ jsx("path", { d: "M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4z" })
|
|
57
|
+
] }),
|
|
58
|
+
copy: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
59
|
+
/* @__PURE__ */ jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }),
|
|
60
|
+
/* @__PURE__ */ jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
|
|
61
|
+
] }),
|
|
62
|
+
download: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3" }) }),
|
|
63
|
+
upload: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" }) }),
|
|
64
|
+
info: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
65
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
66
|
+
/* @__PURE__ */ jsx("path", { d: "M12 16v-4M12 8h.01" })
|
|
67
|
+
] }),
|
|
68
|
+
alert: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM12 9v4M12 17h.01" }) }),
|
|
69
|
+
check2: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
70
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
71
|
+
/* @__PURE__ */ jsx("path", { d: "m9 12 2 2 4-4" })
|
|
72
|
+
] }),
|
|
73
|
+
eye: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
74
|
+
/* @__PURE__ */ jsx("path", { d: "M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z" }),
|
|
75
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3" })
|
|
76
|
+
] }),
|
|
77
|
+
eyeOff: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-10-8-10-8a19 19 0 0 1 5.17-6M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 10 8 10 8a19 19 0 0 1-2.16 3.19M14.12 14.12a3 3 0 1 1-4.24-4.24M1 1l22 22" }) }),
|
|
78
|
+
sparkle: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M5.6 18.4l2.8-2.8M15.6 8.4l2.8-2.8" }) }),
|
|
79
|
+
moon: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z" }) }),
|
|
80
|
+
sun: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
81
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4" }),
|
|
82
|
+
/* @__PURE__ */ jsx("path", { d: "M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41" })
|
|
83
|
+
] }),
|
|
84
|
+
palette: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
85
|
+
/* @__PURE__ */ jsx("circle", { cx: "13.5", cy: "6.5", r: "1" }),
|
|
86
|
+
/* @__PURE__ */ jsx("circle", { cx: "17.5", cy: "10.5", r: "1" }),
|
|
87
|
+
/* @__PURE__ */ jsx("circle", { cx: "8.5", cy: "7.5", r: "1" }),
|
|
88
|
+
/* @__PURE__ */ jsx("circle", { cx: "6.5", cy: "12.5", r: "1" }),
|
|
89
|
+
/* @__PURE__ */ jsx("path", { d: "M12 2a10 10 0 1 0 0 20 3 3 0 0 0 0-6h-1a2 2 0 0 1 0-4h4a5 5 0 0 0 5-5 10 10 0 0 0-8-5z" })
|
|
90
|
+
] }),
|
|
91
|
+
layers: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
92
|
+
/* @__PURE__ */ jsx("path", { d: "m12 2 10 6-10 6L2 8z" }),
|
|
93
|
+
/* @__PURE__ */ jsx("path", { d: "m2 17 10 6 10-6M2 12l10 6 10-6" })
|
|
94
|
+
] }),
|
|
95
|
+
grid: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
96
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "7", height: "7" }),
|
|
97
|
+
/* @__PURE__ */ jsx("rect", { x: "14", y: "3", width: "7", height: "7" }),
|
|
98
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "14", width: "7", height: "7" }),
|
|
99
|
+
/* @__PURE__ */ jsx("rect", { x: "14", y: "14", width: "7", height: "7" })
|
|
100
|
+
] }),
|
|
101
|
+
list: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01" }) }),
|
|
102
|
+
zap: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M13 2 3 14h9l-1 8 10-12h-9z" }) }),
|
|
103
|
+
filter: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M22 3H2l8 9.46V19l4 2v-8.54z" }) }),
|
|
104
|
+
mic: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
105
|
+
/* @__PURE__ */ jsx("rect", { x: "9", y: "2", width: "6", height: "12", rx: "3" }),
|
|
106
|
+
/* @__PURE__ */ jsx("path", { d: "M19 10v1a7 7 0 0 1-14 0v-1M12 18v4M8 22h8" })
|
|
107
|
+
] }),
|
|
108
|
+
send: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "m22 2-7 20-4-9-9-4zM22 2 11 13" }) }),
|
|
109
|
+
calendar: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
110
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
111
|
+
/* @__PURE__ */ jsx("path", { d: "M16 2v4M8 2v4M3 10h18" })
|
|
112
|
+
] }),
|
|
113
|
+
clock: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
114
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
115
|
+
/* @__PURE__ */ jsx("path", { d: "M12 6v6l4 2" })
|
|
116
|
+
] }),
|
|
117
|
+
menu: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M3 6h18M3 12h18M3 18h18" }) }),
|
|
118
|
+
more: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
119
|
+
/* @__PURE__ */ jsx("circle", { cx: "5", cy: "12", r: "1" }),
|
|
120
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1" }),
|
|
121
|
+
/* @__PURE__ */ jsx("circle", { cx: "19", cy: "12", r: "1" })
|
|
122
|
+
] }),
|
|
123
|
+
sliders: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6" }) })
|
|
124
|
+
};
|
|
125
|
+
var Icon = ({ name, size = 16, stroke = 2, style, ...rest }) => /* @__PURE__ */ jsx(
|
|
126
|
+
"svg",
|
|
127
|
+
{
|
|
128
|
+
width: size,
|
|
129
|
+
height: size,
|
|
130
|
+
viewBox: "0 0 24 24",
|
|
131
|
+
fill: "none",
|
|
132
|
+
stroke: "currentColor",
|
|
133
|
+
strokeWidth: stroke,
|
|
134
|
+
strokeLinecap: "round",
|
|
135
|
+
strokeLinejoin: "round",
|
|
136
|
+
overflow: "visible",
|
|
137
|
+
style,
|
|
138
|
+
...rest,
|
|
139
|
+
children: paths[name]
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
var ICON_NAMES = ["search", "plus", "minus", "check", "x", "chevDown", "chevRight", "chevLeft", "chevUp", "arrowRight", "settings", "user", "bell", "mail", "heart", "star", "home", "folder", "file", "image", "play", "pause", "volume", "trash", "edit", "copy", "download", "upload", "info", "alert", "check2", "eye", "eyeOff", "sparkle", "moon", "sun", "palette", "layers", "grid", "list", "zap", "filter", "mic", "send", "calendar", "clock", "menu", "more", "sliders"];
|
|
143
|
+
|
|
144
|
+
export { ICON_NAMES, Icon };
|
|
145
|
+
//# sourceMappingURL=chunk-GEYMWUW6.js.map
|
|
146
|
+
//# sourceMappingURL=chunk-GEYMWUW6.js.map
|