@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,91 @@
|
|
|
1
|
+
import { Icon } from './chunk-GEYMWUW6.js';
|
|
2
|
+
import './tokens-HWQ7KWPG.css';
|
|
3
|
+
import './shared-NJHRNLRH.css';
|
|
4
|
+
import './Input-Z526ARZP.css';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var Input = React.forwardRef(
|
|
9
|
+
({
|
|
10
|
+
value,
|
|
11
|
+
defaultValue,
|
|
12
|
+
onChange,
|
|
13
|
+
placeholder,
|
|
14
|
+
leadingIcon,
|
|
15
|
+
trailingIcon,
|
|
16
|
+
onLeadingIconClick,
|
|
17
|
+
onTrailingIconClick,
|
|
18
|
+
size = "md",
|
|
19
|
+
invalid,
|
|
20
|
+
disabled,
|
|
21
|
+
className = "",
|
|
22
|
+
...rest
|
|
23
|
+
}, ref) => {
|
|
24
|
+
const wrapCls = [
|
|
25
|
+
"input-wrap",
|
|
26
|
+
size !== "md" && size,
|
|
27
|
+
invalid && "invalid",
|
|
28
|
+
disabled && "disabled",
|
|
29
|
+
className
|
|
30
|
+
].filter(Boolean).join(" ");
|
|
31
|
+
const handleIconClick = (handler) => handler ? (e) => {
|
|
32
|
+
e.stopPropagation();
|
|
33
|
+
if (!disabled) handler(e);
|
|
34
|
+
} : void 0;
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", { className: wrapCls, children: [
|
|
36
|
+
leadingIcon && /* @__PURE__ */ jsx(
|
|
37
|
+
Icon,
|
|
38
|
+
{
|
|
39
|
+
name: leadingIcon,
|
|
40
|
+
size: 14,
|
|
41
|
+
className: `lead${onLeadingIconClick ? " interactive" : ""}`,
|
|
42
|
+
onClick: handleIconClick(onLeadingIconClick)
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
/* @__PURE__ */ jsx(
|
|
46
|
+
"input",
|
|
47
|
+
{
|
|
48
|
+
ref,
|
|
49
|
+
className: "input",
|
|
50
|
+
value,
|
|
51
|
+
defaultValue,
|
|
52
|
+
onChange: (e) => onChange?.(e.target.value, e),
|
|
53
|
+
placeholder,
|
|
54
|
+
disabled,
|
|
55
|
+
...rest
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
trailingIcon && /* @__PURE__ */ jsx(
|
|
59
|
+
Icon,
|
|
60
|
+
{
|
|
61
|
+
name: trailingIcon,
|
|
62
|
+
size: 14,
|
|
63
|
+
className: `trail${onTrailingIconClick ? " interactive" : ""}`,
|
|
64
|
+
onClick: handleIconClick(onTrailingIconClick)
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
Input.displayName = "Input";
|
|
71
|
+
var Textarea = React.forwardRef(
|
|
72
|
+
({ value, defaultValue, onChange, invalid, className = "", ...rest }, ref) => {
|
|
73
|
+
const cls = ["textarea", invalid && "invalid", className].filter(Boolean).join(" ");
|
|
74
|
+
return /* @__PURE__ */ jsx(
|
|
75
|
+
"textarea",
|
|
76
|
+
{
|
|
77
|
+
ref,
|
|
78
|
+
className: cls,
|
|
79
|
+
value,
|
|
80
|
+
defaultValue,
|
|
81
|
+
onChange: (e) => onChange?.(e.target.value, e),
|
|
82
|
+
...rest
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
Textarea.displayName = "Textarea";
|
|
88
|
+
|
|
89
|
+
export { Input, Textarea };
|
|
90
|
+
//# sourceMappingURL=chunk-7NM5BRUX.js.map
|
|
91
|
+
//# sourceMappingURL=chunk-7NM5BRUX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Input/Input.tsx"],"names":[],"mappings":"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","file":"chunk-7NM5BRUX.js","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"]}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./tokens-HWQ7KWPG.css');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
26
|
+
|
|
27
|
+
// src/components/Theme/Theme.tsx
|
|
28
|
+
var ACCENT_PRESETS = {
|
|
29
|
+
sky: { accent: "oklch(68% 0.14 235)", ink: "oklch(42% 0.12 235)", soft: "oklch(92% 0.04 235)", glow: "oklch(68% 0.14 235 / 0.35)" },
|
|
30
|
+
coral: { accent: "oklch(72% 0.16 35)", ink: "oklch(48% 0.14 35)", soft: "oklch(94% 0.04 35)", glow: "oklch(72% 0.16 35 / 0.35)" },
|
|
31
|
+
mint: { accent: "oklch(72% 0.13 165)", ink: "oklch(46% 0.11 165)", soft: "oklch(93% 0.04 165)", glow: "oklch(72% 0.13 165 / 0.35)" },
|
|
32
|
+
violet: { accent: "oklch(66% 0.16 290)", ink: "oklch(44% 0.14 290)", soft: "oklch(93% 0.04 290)", glow: "oklch(66% 0.16 290 / 0.35)" },
|
|
33
|
+
amber: { accent: "oklch(76% 0.14 75)", ink: "oklch(50% 0.12 75)", soft: "oklch(94% 0.05 75)", glow: "oklch(76% 0.14 75 / 0.35)" },
|
|
34
|
+
rose: { accent: "oklch(68% 0.17 10)", ink: "oklch(46% 0.15 10)", soft: "oklch(93% 0.04 10)", glow: "oklch(68% 0.17 10 / 0.35)" }
|
|
35
|
+
};
|
|
36
|
+
var ACCENT_PRESETS_DARK = {
|
|
37
|
+
sky: { soft: "oklch(35% 0.08 235)", ink: "oklch(82% 0.10 235)", glow: "oklch(68% 0.14 235 / 0.18)" },
|
|
38
|
+
coral: { soft: "oklch(38% 0.09 35)", ink: "oklch(84% 0.10 35)", glow: "oklch(72% 0.16 35 / 0.18)" },
|
|
39
|
+
mint: { soft: "oklch(36% 0.08 165)", ink: "oklch(83% 0.10 165)", glow: "oklch(72% 0.13 165 / 0.18)" },
|
|
40
|
+
violet: { soft: "oklch(36% 0.09 290)", ink: "oklch(82% 0.11 290)", glow: "oklch(66% 0.16 290 / 0.18)" },
|
|
41
|
+
amber: { soft: "oklch(38% 0.08 75)", ink: "oklch(85% 0.10 75)", glow: "oklch(76% 0.14 75 / 0.18)" },
|
|
42
|
+
rose: { soft: "oklch(38% 0.09 10)", ink: "oklch(84% 0.11 10)", glow: "oklch(68% 0.17 10 / 0.18)" }
|
|
43
|
+
};
|
|
44
|
+
var FONT_STACKS = {
|
|
45
|
+
system: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif',
|
|
46
|
+
sf: '"SF Pro Display", -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif',
|
|
47
|
+
serif: 'Cambria, Georgia, "Songti SC", "STSong", serif',
|
|
48
|
+
mono: 'ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace'
|
|
49
|
+
};
|
|
50
|
+
var DEFAULT_CONFIG = {
|
|
51
|
+
mode: "light",
|
|
52
|
+
accent: "sky",
|
|
53
|
+
density: "comfortable",
|
|
54
|
+
intensity: 5,
|
|
55
|
+
radius: 20,
|
|
56
|
+
font: "sf",
|
|
57
|
+
tokens: {}
|
|
58
|
+
};
|
|
59
|
+
var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
|
|
60
|
+
function resolveThemeMode(mode) {
|
|
61
|
+
if (mode !== "system") return mode;
|
|
62
|
+
if (!isBrowser) return "light";
|
|
63
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
64
|
+
}
|
|
65
|
+
function normalizeAccentInput(input, resolvedMode) {
|
|
66
|
+
if (typeof input === "string" && input in ACCENT_PRESETS) {
|
|
67
|
+
const key = input;
|
|
68
|
+
const base = ACCENT_PRESETS[key];
|
|
69
|
+
if (resolvedMode === "dark") {
|
|
70
|
+
return { key, palette: { ...base, ...ACCENT_PRESETS_DARK[key] } };
|
|
71
|
+
}
|
|
72
|
+
return { key, palette: base };
|
|
73
|
+
}
|
|
74
|
+
const raw = typeof input === "string" ? { accent: input } : input;
|
|
75
|
+
const { accent } = raw;
|
|
76
|
+
const ink = raw.ink ?? `color-mix(in oklch, ${accent} 65%, black)`;
|
|
77
|
+
const soft = raw.soft ?? (resolvedMode === "dark" ? `color-mix(in oklch, ${accent} 30%, black)` : `color-mix(in oklch, ${accent} 15%, white)`);
|
|
78
|
+
const glow = raw.glow ?? (resolvedMode === "dark" ? `color-mix(in oklch, ${accent} 18%, transparent)` : `color-mix(in oklch, ${accent} 35%, transparent)`);
|
|
79
|
+
return { key: "custom", palette: { accent, ink, soft, glow } };
|
|
80
|
+
}
|
|
81
|
+
function toVar(key) {
|
|
82
|
+
return key.startsWith("--") ? key : `--${key}`;
|
|
83
|
+
}
|
|
84
|
+
function applyTheme(target, config) {
|
|
85
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
86
|
+
const resolvedMode = resolveThemeMode(cfg.mode);
|
|
87
|
+
const { key, palette } = normalizeAccentInput(cfg.accent, resolvedMode);
|
|
88
|
+
target.dataset.theme = resolvedMode;
|
|
89
|
+
target.dataset.density = cfg.density;
|
|
90
|
+
if (key === "custom") {
|
|
91
|
+
delete target.dataset.accent;
|
|
92
|
+
} else {
|
|
93
|
+
target.dataset.accent = key;
|
|
94
|
+
}
|
|
95
|
+
target.style.setProperty("--accent", palette.accent);
|
|
96
|
+
target.style.setProperty("--accent-ink", palette.ink);
|
|
97
|
+
target.style.setProperty("--accent-soft", palette.soft);
|
|
98
|
+
target.style.setProperty("--accent-glow", palette.glow);
|
|
99
|
+
const intensity = cfg.intensity ?? DEFAULT_CONFIG.intensity;
|
|
100
|
+
target.style.setProperty("--d", String(0.4 + intensity * 0.12));
|
|
101
|
+
const r = cfg.radius ?? DEFAULT_CONFIG.radius;
|
|
102
|
+
target.style.setProperty("--r-xs", `${Math.max(4, r - 16)}px`);
|
|
103
|
+
target.style.setProperty("--r-sm", `${Math.max(6, r - 12)}px`);
|
|
104
|
+
target.style.setProperty("--r-md", `${Math.max(8, r - 6)}px`);
|
|
105
|
+
target.style.setProperty("--r-lg", `${r}px`);
|
|
106
|
+
target.style.setProperty("--r-xl", `${r + 10}px`);
|
|
107
|
+
const font = cfg.font ?? DEFAULT_CONFIG.font;
|
|
108
|
+
if (typeof font === "string") {
|
|
109
|
+
const stack = FONT_STACKS[font] ?? font;
|
|
110
|
+
target.style.setProperty("--font-sans", stack);
|
|
111
|
+
if (font === "mono") target.style.setProperty("--font-display", FONT_STACKS.mono);
|
|
112
|
+
} else {
|
|
113
|
+
if (font.sans) target.style.setProperty("--font-sans", font.sans);
|
|
114
|
+
if (font.display) target.style.setProperty("--font-display", font.display);
|
|
115
|
+
if (font.mono) target.style.setProperty("--font-mono", font.mono);
|
|
116
|
+
}
|
|
117
|
+
if (cfg.tokens) {
|
|
118
|
+
for (const [k, v] of Object.entries(cfg.tokens)) {
|
|
119
|
+
target.style.setProperty(toVar(k), v);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
var ThemeCtx = React__namespace.createContext(null);
|
|
124
|
+
function useTheme() {
|
|
125
|
+
const ctx = React__namespace.useContext(ThemeCtx);
|
|
126
|
+
if (!ctx) {
|
|
127
|
+
throw new Error(
|
|
128
|
+
"useTheme() must be used inside <ThemeProvider>. Wrap your app (or a subtree) with <ThemeProvider>."
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
return ctx;
|
|
132
|
+
}
|
|
133
|
+
function useThemeOptional() {
|
|
134
|
+
return React__namespace.useContext(ThemeCtx);
|
|
135
|
+
}
|
|
136
|
+
function loadPersisted(key) {
|
|
137
|
+
if (!key || !isBrowser) return null;
|
|
138
|
+
try {
|
|
139
|
+
const raw = localStorage.getItem(key);
|
|
140
|
+
if (!raw) return null;
|
|
141
|
+
return JSON.parse(raw);
|
|
142
|
+
} catch {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function persist(key, cfg) {
|
|
147
|
+
if (!key || !isBrowser) return;
|
|
148
|
+
try {
|
|
149
|
+
localStorage.setItem(key, JSON.stringify(cfg));
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
var ThemeProvider = (props) => {
|
|
154
|
+
const {
|
|
155
|
+
children,
|
|
156
|
+
target = "root",
|
|
157
|
+
as: Tag = "div",
|
|
158
|
+
className,
|
|
159
|
+
style,
|
|
160
|
+
storageKey,
|
|
161
|
+
onChange,
|
|
162
|
+
...configProps
|
|
163
|
+
} = props;
|
|
164
|
+
const initialConfig = React__namespace.useMemo(() => {
|
|
165
|
+
const fromProps = {
|
|
166
|
+
mode: configProps.mode ?? DEFAULT_CONFIG.mode,
|
|
167
|
+
accent: configProps.accent ?? DEFAULT_CONFIG.accent,
|
|
168
|
+
density: configProps.density ?? DEFAULT_CONFIG.density,
|
|
169
|
+
intensity: configProps.intensity ?? DEFAULT_CONFIG.intensity,
|
|
170
|
+
radius: configProps.radius ?? DEFAULT_CONFIG.radius,
|
|
171
|
+
font: configProps.font ?? DEFAULT_CONFIG.font,
|
|
172
|
+
tokens: configProps.tokens ?? {}
|
|
173
|
+
};
|
|
174
|
+
const persisted = loadPersisted(storageKey);
|
|
175
|
+
return persisted ? { ...fromProps, ...persisted } : fromProps;
|
|
176
|
+
}, []);
|
|
177
|
+
const [config, setConfig] = React__namespace.useState(initialConfig);
|
|
178
|
+
React__namespace.useEffect(() => {
|
|
179
|
+
setConfig((c) => {
|
|
180
|
+
const next = {
|
|
181
|
+
mode: configProps.mode ?? c.mode,
|
|
182
|
+
accent: configProps.accent ?? c.accent,
|
|
183
|
+
density: configProps.density ?? c.density,
|
|
184
|
+
intensity: configProps.intensity ?? c.intensity,
|
|
185
|
+
radius: configProps.radius ?? c.radius,
|
|
186
|
+
font: configProps.font ?? c.font,
|
|
187
|
+
tokens: configProps.tokens ?? c.tokens
|
|
188
|
+
};
|
|
189
|
+
if (next.mode === c.mode && next.accent === c.accent && next.density === c.density && next.intensity === c.intensity && next.radius === c.radius && next.font === c.font && next.tokens === c.tokens) {
|
|
190
|
+
return c;
|
|
191
|
+
}
|
|
192
|
+
return next;
|
|
193
|
+
});
|
|
194
|
+
}, [
|
|
195
|
+
configProps.mode,
|
|
196
|
+
configProps.accent,
|
|
197
|
+
configProps.density,
|
|
198
|
+
configProps.intensity,
|
|
199
|
+
configProps.radius,
|
|
200
|
+
configProps.font,
|
|
201
|
+
configProps.tokens
|
|
202
|
+
]);
|
|
203
|
+
const [systemDark, setSystemDark] = React__namespace.useState(
|
|
204
|
+
() => isBrowser && window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
205
|
+
);
|
|
206
|
+
React__namespace.useEffect(() => {
|
|
207
|
+
if (!isBrowser) return;
|
|
208
|
+
const mql = window.matchMedia("(prefers-color-scheme: dark)");
|
|
209
|
+
const handler = (e) => setSystemDark(e.matches);
|
|
210
|
+
mql.addEventListener?.("change", handler);
|
|
211
|
+
return () => mql.removeEventListener?.("change", handler);
|
|
212
|
+
}, []);
|
|
213
|
+
const resolvedMode = config.mode === "system" ? systemDark ? "dark" : "light" : config.mode;
|
|
214
|
+
const { key: accentKey, palette: accentPalette } = React__namespace.useMemo(
|
|
215
|
+
() => normalizeAccentInput(config.accent, resolvedMode),
|
|
216
|
+
[config.accent, resolvedMode]
|
|
217
|
+
);
|
|
218
|
+
const scopeRef = React__namespace.useRef(null);
|
|
219
|
+
React__namespace.useEffect(() => {
|
|
220
|
+
if (!isBrowser) return;
|
|
221
|
+
const el = target === "root" ? document.documentElement : scopeRef.current;
|
|
222
|
+
if (!el) return;
|
|
223
|
+
applyTheme(el, { ...config, mode: resolvedMode });
|
|
224
|
+
persist(storageKey, config);
|
|
225
|
+
}, [config, resolvedMode, target, storageKey]);
|
|
226
|
+
const value = React__namespace.useMemo(() => {
|
|
227
|
+
const patch = (p) => setConfig((c) => ({ ...c, ...p }));
|
|
228
|
+
return {
|
|
229
|
+
mode: config.mode,
|
|
230
|
+
resolvedMode,
|
|
231
|
+
accent: accentKey,
|
|
232
|
+
accentPalette,
|
|
233
|
+
density: config.density,
|
|
234
|
+
intensity: config.intensity,
|
|
235
|
+
radius: config.radius,
|
|
236
|
+
font: config.font,
|
|
237
|
+
tokens: config.tokens ?? {},
|
|
238
|
+
setMode: (m) => patch({ mode: m }),
|
|
239
|
+
toggleMode: () => setConfig((c) => ({
|
|
240
|
+
...c,
|
|
241
|
+
mode: c.mode === "dark" ? "light" : "dark"
|
|
242
|
+
})),
|
|
243
|
+
setAccent: (a) => patch({ accent: a }),
|
|
244
|
+
setDensity: (d) => patch({ density: d }),
|
|
245
|
+
setIntensity: (n) => patch({ intensity: n }),
|
|
246
|
+
setRadius: (n) => patch({ radius: n }),
|
|
247
|
+
setFont: (f) => patch({ font: f }),
|
|
248
|
+
setTokens: (t) => patch({ tokens: t }),
|
|
249
|
+
update: patch,
|
|
250
|
+
reset: () => setConfig(initialConfig)
|
|
251
|
+
};
|
|
252
|
+
}, [config, resolvedMode, accentKey, accentPalette, initialConfig]);
|
|
253
|
+
const onChangeRef = React__namespace.useRef(onChange);
|
|
254
|
+
onChangeRef.current = onChange;
|
|
255
|
+
React__namespace.useEffect(() => {
|
|
256
|
+
onChangeRef.current?.(value);
|
|
257
|
+
}, [value]);
|
|
258
|
+
if (target === "scope") {
|
|
259
|
+
const Component = Tag;
|
|
260
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ThemeCtx.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
261
|
+
Component,
|
|
262
|
+
{
|
|
263
|
+
ref: scopeRef,
|
|
264
|
+
className,
|
|
265
|
+
style,
|
|
266
|
+
children
|
|
267
|
+
}
|
|
268
|
+
) });
|
|
269
|
+
}
|
|
270
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ThemeCtx.Provider, { value, children });
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
exports.ACCENT_PRESETS = ACCENT_PRESETS;
|
|
274
|
+
exports.ACCENT_PRESETS_DARK = ACCENT_PRESETS_DARK;
|
|
275
|
+
exports.FONT_STACKS = FONT_STACKS;
|
|
276
|
+
exports.ThemeProvider = ThemeProvider;
|
|
277
|
+
exports.applyTheme = applyTheme;
|
|
278
|
+
exports.normalizeAccentInput = normalizeAccentInput;
|
|
279
|
+
exports.resolveThemeMode = resolveThemeMode;
|
|
280
|
+
exports.useTheme = useTheme;
|
|
281
|
+
exports.useThemeOptional = useThemeOptional;
|
|
282
|
+
//# sourceMappingURL=chunk-7U6I44RV.cjs.map
|
|
283
|
+
//# sourceMappingURL=chunk-7U6I44RV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Theme/Theme.tsx"],"names":["React","jsx"],"mappings":"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","file":"chunk-7U6I44RV.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport * as React from \"react\";\n\n/* ============================================================================\n * Theme — full custom theming system for lumina\n *\n * - <ThemeProvider> manages theme state and applies CSS variables / data-attrs\n * to either <html> (global) or a local scope.\n * - useTheme() exposes read/write access for descendants.\n * - Presets: accent palettes, font stacks, densities.\n * - Custom accent: pass a full palette or only a base color — missing slots\n * are auto-derived via `color-mix`.\n * - Persistence: optional localStorage via `storageKey` prop.\n * - \"system\" mode respects `prefers-color-scheme` via matchMedia.\n * - Arbitrary token overrides through the `tokens` prop.\n * ========================================================================== */\n\n/* ------------------------------- Types ---------------------------------- */\n\nexport type ThemeMode = \"light\" | \"dark\" | \"system\";\nexport type ResolvedThemeMode = \"light\" | \"dark\";\nexport type AccentKey = \"sky\" | \"coral\" | \"mint\" | \"violet\" | \"amber\" | \"rose\";\nexport type DensityMode = \"compact\" | \"comfortable\" | \"spacious\";\nexport type FontKey = \"system\" | \"sf\" | \"serif\" | \"mono\";\n\n/** Full accent color slots. All four CSS variables the library reads. */\nexport interface AccentPalette {\n /** Primary accent — `--accent`. */\n accent: string;\n /** Darker text-on-soft variant — `--accent-ink`. */\n ink: string;\n /** Pale tint for backgrounds — `--accent-soft`. */\n soft: string;\n /** Halo / glow color (typically with alpha) — `--accent-glow`. */\n glow: string;\n}\n\n/** Input type for custom accent: either full palette, or just a base color\n * (missing slots derived via color-mix in CSS). */\nexport type CustomAccentInput = string | Partial<AccentPalette> & { accent: string };\n\n/** Font config — either a preset key, a single sans string, or a granular object. */\nexport type FontConfig =\n | FontKey\n | string\n | { sans?: string; display?: string; mono?: string };\n\n/** Arbitrary CSS variable overrides. Keys may be either a short name\n * (e.g. `\"bg\"` → `--bg`) or a full var name (e.g. `\"--bg\"`). */\nexport type ThemeTokens = Record<string, string>;\n\nexport interface ThemeConfig {\n mode?: ThemeMode;\n accent?: AccentKey | CustomAccentInput;\n density?: DensityMode;\n /** Shadow strength, 1..10. Maps to `--d` (0.4..1.6). */\n intensity?: number;\n /** Base radius in px — generates the full `--r-*` scale. */\n radius?: number;\n font?: FontConfig;\n tokens?: ThemeTokens;\n}\n\nexport interface ThemeValue {\n /** Requested mode (\"system\" is preserved here). */\n mode: ThemeMode;\n /** Resolved concrete mode (\"system\" → \"light\" | \"dark\" based on OS). */\n resolvedMode: ResolvedThemeMode;\n /** Accent key or \"custom\" if a palette was supplied. */\n accent: AccentKey | \"custom\";\n /** Resolved palette currently in effect. */\n accentPalette: AccentPalette;\n density: DensityMode;\n intensity: number;\n radius: number;\n font: FontConfig;\n tokens: ThemeTokens;\n\n setMode: (m: ThemeMode) => void;\n toggleMode: () => void;\n setAccent: (a: AccentKey | CustomAccentInput) => void;\n setDensity: (d: DensityMode) => void;\n setIntensity: (n: number) => void;\n setRadius: (n: number) => void;\n setFont: (f: FontConfig) => void;\n setTokens: (t: ThemeTokens) => void;\n /** Shallow-merge a partial config. */\n update: (cfg: Partial<ThemeConfig>) => void;\n /** Reset to the initial props. */\n reset: () => void;\n}\n\n/* --------------------------- Built-in presets --------------------------- */\n\n/** Built-in accent palettes (light-mode values). */\nexport const ACCENT_PRESETS: Record<AccentKey, AccentPalette> = {\n sky: { accent: \"oklch(68% 0.14 235)\", ink: \"oklch(42% 0.12 235)\", soft: \"oklch(92% 0.04 235)\", glow: \"oklch(68% 0.14 235 / 0.35)\" },\n coral: { accent: \"oklch(72% 0.16 35)\", ink: \"oklch(48% 0.14 35)\", soft: \"oklch(94% 0.04 35)\", glow: \"oklch(72% 0.16 35 / 0.35)\" },\n mint: { accent: \"oklch(72% 0.13 165)\", ink: \"oklch(46% 0.11 165)\", soft: \"oklch(93% 0.04 165)\", glow: \"oklch(72% 0.13 165 / 0.35)\" },\n violet: { accent: \"oklch(66% 0.16 290)\", ink: \"oklch(44% 0.14 290)\", soft: \"oklch(93% 0.04 290)\", glow: \"oklch(66% 0.16 290 / 0.35)\" },\n amber: { accent: \"oklch(76% 0.14 75)\", ink: \"oklch(50% 0.12 75)\", soft: \"oklch(94% 0.05 75)\", glow: \"oklch(76% 0.14 75 / 0.35)\" },\n rose: { accent: \"oklch(68% 0.17 10)\", ink: \"oklch(46% 0.15 10)\", soft: \"oklch(93% 0.04 10)\", glow: \"oklch(68% 0.17 10 / 0.35)\" },\n};\n\n/** Dark-mode overrides — ink/soft shift, and glow alpha is halved so the outer\n * button bloom doesn't read as a bright ring on dark surfaces. */\nexport const ACCENT_PRESETS_DARK: Record<AccentKey, Pick<AccentPalette, \"ink\" | \"soft\" | \"glow\">> = {\n sky: { soft: \"oklch(35% 0.08 235)\", ink: \"oklch(82% 0.10 235)\", glow: \"oklch(68% 0.14 235 / 0.18)\" },\n coral: { soft: \"oklch(38% 0.09 35)\", ink: \"oklch(84% 0.10 35)\", glow: \"oklch(72% 0.16 35 / 0.18)\" },\n mint: { soft: \"oklch(36% 0.08 165)\", ink: \"oklch(83% 0.10 165)\", glow: \"oklch(72% 0.13 165 / 0.18)\" },\n violet: { soft: \"oklch(36% 0.09 290)\", ink: \"oklch(82% 0.11 290)\", glow: \"oklch(66% 0.16 290 / 0.18)\" },\n amber: { soft: \"oklch(38% 0.08 75)\", ink: \"oklch(85% 0.10 75)\", glow: \"oklch(76% 0.14 75 / 0.18)\" },\n rose: { soft: \"oklch(38% 0.09 10)\", ink: \"oklch(84% 0.11 10)\", glow: \"oklch(68% 0.17 10 / 0.18)\" },\n};\n\n/** Built-in font family stacks. */\nexport const FONT_STACKS: Record<FontKey, string> = {\n system: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif',\n sf: '\"SF Pro Display\", -apple-system, BlinkMacSystemFont, \"PingFang SC\", sans-serif',\n serif: 'Cambria, Georgia, \"Songti SC\", \"STSong\", serif',\n mono: 'ui-monospace, \"SF Mono\", \"JetBrains Mono\", Consolas, monospace',\n};\n\nconst DEFAULT_CONFIG: Required<Omit<ThemeConfig, \"tokens\">> & { tokens: ThemeTokens } = {\n mode: \"light\",\n accent: \"sky\",\n density: \"comfortable\",\n intensity: 5,\n radius: 20,\n font: \"sf\",\n tokens: {},\n};\n\n/* ------------------------------ Helpers --------------------------------- */\n\nconst isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\n/** Resolve \"system\" mode against `prefers-color-scheme`. */\nexport function resolveThemeMode(mode: ThemeMode): ResolvedThemeMode {\n if (mode !== \"system\") return mode;\n if (!isBrowser) return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\n/** Fill missing slots of a custom accent via color-mix. */\nexport function normalizeAccentInput(\n input: AccentKey | CustomAccentInput,\n resolvedMode: ResolvedThemeMode\n): { key: AccentKey | \"custom\"; palette: AccentPalette } {\n // Preset key?\n if (typeof input === \"string\" && input in ACCENT_PRESETS) {\n const key = input as AccentKey;\n const base = ACCENT_PRESETS[key];\n if (resolvedMode === \"dark\") {\n return { key, palette: { ...base, ...ACCENT_PRESETS_DARK[key] } };\n }\n return { key, palette: base };\n }\n // Custom — either a raw color string or a partial palette object.\n const raw = typeof input === \"string\" ? { accent: input } : input;\n const { accent } = raw;\n const ink = raw.ink ?? `color-mix(in oklch, ${accent} 65%, black)`;\n const soft =\n raw.soft ??\n (resolvedMode === \"dark\"\n ? `color-mix(in oklch, ${accent} 30%, black)`\n : `color-mix(in oklch, ${accent} 15%, white)`);\n // Dark-mode glow is halved so it doesn't wash into a white halo on dark surfaces.\n const glow =\n raw.glow ??\n (resolvedMode === \"dark\"\n ? `color-mix(in oklch, ${accent} 18%, transparent)`\n : `color-mix(in oklch, ${accent} 35%, transparent)`);\n return { key: \"custom\", palette: { accent, ink, soft, glow } };\n}\n\n/** Normalize a token key to a CSS custom property name. */\nfunction toVar(key: string): string {\n return key.startsWith(\"--\") ? key : `--${key}`;\n}\n\n/** Imperative theme application — writes CSS vars / data-attrs on a target. */\nexport function applyTheme(target: HTMLElement, config: ThemeConfig): void {\n const cfg: ThemeConfig = { ...DEFAULT_CONFIG, ...config };\n const resolvedMode = resolveThemeMode(cfg.mode!);\n const { key, palette } = normalizeAccentInput(cfg.accent!, resolvedMode);\n\n // data-* attributes\n target.dataset.theme = resolvedMode;\n target.dataset.density = cfg.density!;\n if (key === \"custom\") {\n delete target.dataset.accent;\n } else {\n target.dataset.accent = key;\n }\n\n // Accent palette — always set inline so custom overrides win and preset\n // stays deterministic across mode switches.\n target.style.setProperty(\"--accent\", palette.accent);\n target.style.setProperty(\"--accent-ink\", palette.ink);\n target.style.setProperty(\"--accent-soft\", palette.soft);\n target.style.setProperty(\"--accent-glow\", palette.glow);\n\n // Shadow intensity (1..10 → 0.4..1.6)\n const intensity = cfg.intensity ?? DEFAULT_CONFIG.intensity;\n target.style.setProperty(\"--d\", String(0.4 + intensity * 0.12));\n\n // Radius scale\n const r = cfg.radius ?? DEFAULT_CONFIG.radius;\n target.style.setProperty(\"--r-xs\", `${Math.max(4, r - 16)}px`);\n target.style.setProperty(\"--r-sm\", `${Math.max(6, r - 12)}px`);\n target.style.setProperty(\"--r-md\", `${Math.max(8, r - 6)}px`);\n target.style.setProperty(\"--r-lg\", `${r}px`);\n target.style.setProperty(\"--r-xl\", `${r + 10}px`);\n\n // Fonts\n const font = cfg.font ?? DEFAULT_CONFIG.font;\n if (typeof font === \"string\") {\n const stack = (FONT_STACKS as Record<string, string>)[font] ?? font;\n target.style.setProperty(\"--font-sans\", stack);\n if (font === \"mono\") target.style.setProperty(\"--font-display\", FONT_STACKS.mono);\n } else {\n if (font.sans) target.style.setProperty(\"--font-sans\", font.sans);\n if (font.display) target.style.setProperty(\"--font-display\", font.display);\n if (font.mono) target.style.setProperty(\"--font-mono\", font.mono);\n }\n\n // Arbitrary token overrides\n if (cfg.tokens) {\n for (const [k, v] of Object.entries(cfg.tokens)) {\n target.style.setProperty(toVar(k), v);\n }\n }\n}\n\n/* ----------------------------- Context ---------------------------------- */\n\nconst ThemeCtx = React.createContext<ThemeValue | null>(null);\n\n/** Read/write access to the nearest `<ThemeProvider>`. */\nexport function useTheme(): ThemeValue {\n const ctx = React.useContext(ThemeCtx);\n if (!ctx) {\n throw new Error(\n \"useTheme() must be used inside <ThemeProvider>. Wrap your app (or a subtree) with <ThemeProvider>.\"\n );\n }\n return ctx;\n}\n\n/** Read theme value without throwing — returns `null` outside of a provider. */\nexport function useThemeOptional(): ThemeValue | null {\n return React.useContext(ThemeCtx);\n}\n\n/* ---------------------------- Persistence ------------------------------- */\n\nfunction loadPersisted(key: string | undefined): Partial<ThemeConfig> | null {\n if (!key || !isBrowser) return null;\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return null;\n return JSON.parse(raw) as Partial<ThemeConfig>;\n } catch {\n return null;\n }\n}\n\nfunction persist(key: string | undefined, cfg: ThemeConfig): void {\n if (!key || !isBrowser) return;\n try {\n localStorage.setItem(key, JSON.stringify(cfg));\n } catch {\n /* quota exceeded / disabled storage — ignore */\n }\n}\n\n/* --------------------------- ThemeProvider ------------------------------ */\n\nexport interface ThemeProviderProps extends ThemeConfig {\n children?: React.ReactNode;\n /**\n * Where to apply the theme.\n * - `\"root\"` (default): on `<html>` — affects the whole document.\n * - `\"scope\"`: on a local wrapper element — scoped to descendants.\n */\n target?: \"root\" | \"scope\";\n /** Tag for scope mode. Default `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n className?: string;\n style?: React.CSSProperties;\n /** If set, theme state is persisted to localStorage under this key. */\n storageKey?: string;\n /** Called whenever the resolved theme value changes. */\n onChange?: (value: ThemeValue) => void;\n}\n\n/**\n * `<ThemeProvider>` — manage theme state and apply CSS variables.\n *\n * @example\n * ```tsx\n * <ThemeProvider mode=\"system\" accent=\"violet\" storageKey=\"app:theme\">\n * <App />\n * </ThemeProvider>\n * ```\n *\n * @example Custom accent\n * ```tsx\n * <ThemeProvider accent={{ accent: \"oklch(70% 0.2 180)\" }} />\n * // or just\n * <ThemeProvider accent=\"oklch(70% 0.2 180)\" />\n * ```\n */\nexport const ThemeProvider: React.FC<ThemeProviderProps> = (props) => {\n const {\n children,\n target = \"root\",\n as: Tag = \"div\",\n className,\n style,\n storageKey,\n onChange,\n ...configProps\n } = props;\n\n // Build the initial config: defaults ← props ← persisted (if any)\n const initialConfig = React.useMemo<ThemeConfig>(() => {\n const fromProps: ThemeConfig = {\n mode: configProps.mode ?? DEFAULT_CONFIG.mode,\n accent: configProps.accent ?? DEFAULT_CONFIG.accent,\n density: configProps.density ?? DEFAULT_CONFIG.density,\n intensity: configProps.intensity ?? DEFAULT_CONFIG.intensity,\n radius: configProps.radius ?? DEFAULT_CONFIG.radius,\n font: configProps.font ?? DEFAULT_CONFIG.font,\n tokens: configProps.tokens ?? {},\n };\n const persisted = loadPersisted(storageKey);\n return persisted ? { ...fromProps, ...persisted } : fromProps;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [config, setConfig] = React.useState<ThemeConfig>(initialConfig);\n\n // Sync external prop changes into state — so callers can drive the provider\n // \"controlled-style\" (e.g. <ThemeProvider accent={reactState} />).\n // `setMode`/`setAccent`/etc. still work; they just get overridden if the\n // parent later changes the prop.\n React.useEffect(() => {\n setConfig((c) => {\n const next: ThemeConfig = {\n mode: configProps.mode ?? c.mode,\n accent: configProps.accent ?? c.accent,\n density: configProps.density ?? c.density,\n intensity: configProps.intensity ?? c.intensity,\n radius: configProps.radius ?? c.radius,\n font: configProps.font ?? c.font,\n tokens: configProps.tokens ?? c.tokens,\n };\n if (\n next.mode === c.mode &&\n next.accent === c.accent &&\n next.density === c.density &&\n next.intensity === c.intensity &&\n next.radius === c.radius &&\n next.font === c.font &&\n next.tokens === c.tokens\n ) {\n return c;\n }\n return next;\n });\n }, [\n configProps.mode,\n configProps.accent,\n configProps.density,\n configProps.intensity,\n configProps.radius,\n configProps.font,\n configProps.tokens,\n ]);\n\n // Listen for system preference changes when mode === \"system\".\n const [systemDark, setSystemDark] = React.useState<boolean>(() =>\n isBrowser && window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n );\n React.useEffect(() => {\n if (!isBrowser) return;\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener?.(\"change\", handler);\n return () => mql.removeEventListener?.(\"change\", handler);\n }, []);\n\n const resolvedMode: ResolvedThemeMode =\n config.mode === \"system\" ? (systemDark ? \"dark\" : \"light\") : (config.mode as ResolvedThemeMode);\n\n const { key: accentKey, palette: accentPalette } = React.useMemo(\n () => normalizeAccentInput(config.accent!, resolvedMode),\n [config.accent, resolvedMode]\n );\n\n const scopeRef = React.useRef<HTMLElement | null>(null);\n\n // Apply theme whenever config/resolvedMode changes.\n React.useEffect(() => {\n if (!isBrowser) return;\n const el = target === \"root\" ? document.documentElement : scopeRef.current;\n if (!el) return;\n applyTheme(el as HTMLElement, { ...config, mode: resolvedMode });\n persist(storageKey, config);\n }, [config, resolvedMode, target, storageKey]);\n\n const value: ThemeValue = React.useMemo(() => {\n const patch = (p: Partial<ThemeConfig>) => setConfig((c) => ({ ...c, ...p }));\n return {\n mode: config.mode!,\n resolvedMode,\n accent: accentKey,\n accentPalette,\n density: config.density!,\n intensity: config.intensity!,\n radius: config.radius!,\n font: config.font!,\n tokens: config.tokens ?? {},\n setMode: (m) => patch({ mode: m }),\n toggleMode: () =>\n setConfig((c) => ({\n ...c,\n mode: (c.mode === \"dark\" ? \"light\" : \"dark\") as ThemeMode,\n })),\n setAccent: (a) => patch({ accent: a }),\n setDensity: (d) => patch({ density: d }),\n setIntensity: (n) => patch({ intensity: n }),\n setRadius: (n) => patch({ radius: n }),\n setFont: (f) => patch({ font: f }),\n setTokens: (t) => patch({ tokens: t }),\n update: patch,\n reset: () => setConfig(initialConfig),\n };\n }, [config, resolvedMode, accentKey, accentPalette, initialConfig]);\n\n // onChange callback.\n const onChangeRef = React.useRef(onChange);\n onChangeRef.current = onChange;\n React.useEffect(() => {\n onChangeRef.current?.(value);\n }, [value]);\n\n if (target === \"scope\") {\n const Component = Tag as React.ElementType;\n return (\n <ThemeCtx.Provider value={value}>\n <Component\n ref={scopeRef as React.Ref<never>}\n className={className}\n style={style}\n >\n {children}\n </Component>\n </ThemeCtx.Provider>\n );\n }\n\n return <ThemeCtx.Provider value={value}>{children}</ThemeCtx.Provider>;\n};\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
|
|
4
|
+
require('./tokens-HWQ7KWPG.css');
|
|
5
|
+
require('./shared-NJHRNLRH.css');
|
|
6
|
+
require('./Button-5UI7QXGU.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 Button = React__namespace.forwardRef(
|
|
31
|
+
({
|
|
32
|
+
children,
|
|
33
|
+
variant = "default",
|
|
34
|
+
size = "md",
|
|
35
|
+
icon,
|
|
36
|
+
trailingIcon,
|
|
37
|
+
loading,
|
|
38
|
+
disabled,
|
|
39
|
+
className = "",
|
|
40
|
+
type = "button",
|
|
41
|
+
...rest
|
|
42
|
+
}, ref) => {
|
|
43
|
+
const cls = [
|
|
44
|
+
"btn",
|
|
45
|
+
variant,
|
|
46
|
+
size !== "md" && size,
|
|
47
|
+
loading && "loading",
|
|
48
|
+
disabled && "disabled",
|
|
49
|
+
className
|
|
50
|
+
].filter(Boolean).join(" ");
|
|
51
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
52
|
+
"button",
|
|
53
|
+
{
|
|
54
|
+
ref,
|
|
55
|
+
type,
|
|
56
|
+
className: cls,
|
|
57
|
+
disabled: disabled || loading,
|
|
58
|
+
...rest,
|
|
59
|
+
children: [
|
|
60
|
+
loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "spinner", "aria-hidden": true }) : icon ? /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: icon, size: 15 }) : null,
|
|
61
|
+
children,
|
|
62
|
+
trailingIcon && /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: trailingIcon, size: 15 })
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
Button.displayName = "Button";
|
|
69
|
+
var IconButton = React__namespace.forwardRef(
|
|
70
|
+
({ icon, tip, className = "", ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
+
Button,
|
|
72
|
+
{
|
|
73
|
+
ref,
|
|
74
|
+
className: `icon ${className}`,
|
|
75
|
+
"aria-label": tip || rest["aria-label"] || icon,
|
|
76
|
+
title: tip,
|
|
77
|
+
...rest,
|
|
78
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkYVO7XO4W_cjs.Icon, { name: icon, size: 16 })
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
IconButton.displayName = "IconButton";
|
|
83
|
+
|
|
84
|
+
exports.Button = Button;
|
|
85
|
+
exports.IconButton = IconButton;
|
|
86
|
+
//# sourceMappingURL=chunk-AAMYURWQ.cjs.map
|
|
87
|
+
//# sourceMappingURL=chunk-AAMYURWQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Button/Button.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,IAAM,MAAA,GAAeA,gBAAA,CAAA,UAAA;AAAA,EAC1B,CACE;AAAA,IACE,QAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,IAAA,GAAO,IAAA;AAAA,IACP,IAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO,QAAA;AAAA,IACP,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAS,IAAA,IAAQ,IAAA;AAAA,MACjB,OAAA,IAAW,SAAA;AAAA,MACX,QAAA,IAAY,UAAA;AAAA,MACZ;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,IAAA,uBACEC,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA,EAAW,GAAA;AAAA,QACX,UAAU,QAAA,IAAY,OAAA;AAAA,QACrB,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,OAAA,mBACCC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,eAAW,IAAA,EAAC,CAAA,GACpC,IAAA,mBACFA,cAAA,CAACC,sBAAA,EAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,GAC1B,IAAA;AAAA,UACH,QAAA;AAAA,UACA,gCAAgBD,cAAA,CAACC,sBAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,MAAM,EAAA,EAAI;AAAA;AAAA;AAAA,KACvD;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AAYd,IAAM,UAAA,GAAmBH,gBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,EAAE,IAAA,EAAM,GAAA,EAAK,YAAY,EAAA,EAAI,GAAG,IAAA,EAAK,EAAG,GAAA,qBACvCE,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,QAAQ,SAAS,CAAA,CAAA;AAAA,MAC5B,YAAA,EAAY,GAAA,IAAO,IAAA,CAAK,YAAY,CAAA,IAAK,IAAA;AAAA,MACzC,KAAA,EAAO,GAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAAA,cAAA,CAACC,sBAAA,EAAA,EAAK,IAAA,EAAM,IAAA,EAAM,MAAM,EAAA,EAAI;AAAA;AAAA;AAGlC;AACA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-AAMYURWQ.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Button.css\";\nimport * as React from \"react\";\nimport type { IconName } from \"../Icon\";\nimport { Icon } from \"../Icon\";\n\nexport type ButtonVariant = \"default\" | \"primary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"type\"> {\n /** Visual variant. `primary` uses the accent color; `ghost` is borderless; `danger` is red. */\n variant?: ButtonVariant;\n /** Control height preset. */\n size?: ButtonSize;\n /** Leading icon. */\n icon?: IconName;\n /** Trailing icon. */\n trailingIcon?: IconName;\n /** Show spinner + disable interaction. */\n loading?: boolean;\n /** Button type attribute. Defaults to \"button\" to avoid accidental form submits. */\n type?: \"button\" | \"submit\" | \"reset\";\n /** Extra class names. */\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * `Button` — the primary action surface.\n *\n * @example\n * <Button variant=\"primary\" icon=\"plus\">新建</Button>\n * <Button variant=\"ghost\" loading>保存</Button>\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n children,\n variant = \"default\",\n size = \"md\",\n icon,\n trailingIcon,\n loading,\n disabled,\n className = \"\",\n type = \"button\",\n ...rest\n },\n ref\n ) => {\n const cls = [\n \"btn\",\n variant,\n size !== \"md\" && size,\n loading && \"loading\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n ref={ref}\n type={type}\n className={cls}\n disabled={disabled || loading}\n {...rest}\n >\n {loading ? (\n <span className=\"spinner\" aria-hidden />\n ) : icon ? (\n <Icon name={icon} size={15} />\n ) : null}\n {children}\n {trailingIcon && <Icon name={trailingIcon} size={15} />}\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport interface IconButtonProps\n extends Omit<ButtonProps, \"icon\" | \"children\"> {\n icon: IconName;\n tip?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * `IconButton` — square button containing just an icon. Pair with a tooltip.\n */\nexport const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ icon, tip, className = \"\", ...rest }, ref) => (\n <Button\n ref={ref}\n className={`icon ${className}`}\n aria-label={tip || rest[\"aria-label\"] || icon}\n title={tip}\n {...rest}\n >\n <Icon name={icon} size={16} />\n </Button>\n )\n);\nIconButton.displayName = \"IconButton\";\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./tokens-HWQ7KWPG.css');
|
|
4
|
+
require('./shared-NJHRNLRH.css');
|
|
5
|
+
require('./Switch-NP7KKJOX.css');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
// src/components/Switch/Switch.tsx
|
|
30
|
+
var Switch = ({
|
|
31
|
+
checked,
|
|
32
|
+
defaultChecked,
|
|
33
|
+
onChange,
|
|
34
|
+
disabled,
|
|
35
|
+
label,
|
|
36
|
+
size = "md",
|
|
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 = ["switch", value && "on", size !== "md" && size, disabled && "disabled", className].filter(Boolean).join(" ");
|
|
50
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cls, children: [
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
52
|
+
"button",
|
|
53
|
+
{
|
|
54
|
+
type: "button",
|
|
55
|
+
role: "switch",
|
|
56
|
+
"aria-checked": value,
|
|
57
|
+
disabled,
|
|
58
|
+
onClick: toggle,
|
|
59
|
+
id,
|
|
60
|
+
className: "switch-track",
|
|
61
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "switch-thumb" })
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "switch-label", children: label })
|
|
65
|
+
] });
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
exports.Switch = Switch;
|
|
69
|
+
//# sourceMappingURL=chunk-ALFDP5WX.cjs.map
|
|
70
|
+
//# sourceMappingURL=chunk-ALFDP5WX.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Switch/Switch.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,IAAM,SAAgC,CAAC;AAAA,EAC5C,OAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,gBAAA,CAAA,QAAA,CAAS,kBAAkB,KAAK,CAAA;AAChE,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,eAAe,OAAA,GAAU,KAAA;AAEvC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,OAAO,CAAC,KAAA;AACd,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,IAAI,CAAA;AAChC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,MAAM,CAAC,QAAA,EAAU,KAAA,IAAS,IAAA,EAAM,SAAS,IAAA,IAAQ,IAAA,EAAM,QAAA,IAAY,UAAA,EAAY,SAAS,CAAA,CAC3F,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACEC,eAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,GAAA,EAChB,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,cAAA,EAAc,KAAA;AAAA,QACd,QAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,EAAA;AAAA,QACA,SAAA,EAAU,cAAA;AAAA,QAEV,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA,KACjC;AAAA,IACC,KAAA,oBAASA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAgB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAClD,CAAA;AAEJ","file":"chunk-ALFDP5WX.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Switch.css\";\nimport * as React from \"react\";\n\nexport interface SwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n size?: \"sm\" | \"md\";\n className?: string;\n id?: string;\n}\n\n/**\n * `Switch` — on/off toggle. Controlled or uncontrolled.\n */\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n defaultChecked,\n onChange,\n disabled,\n label,\n size = \"md\",\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 = [\"switch\", value && \"on\", size !== \"md\" && size, disabled && \"disabled\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label className={cls}>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"switch-track\"\n >\n <span className=\"switch-thumb\" />\n </button>\n {label && <span className=\"switch-label\">{label}</span>}\n </label>\n );\n};\n"]}
|