starry-sky-ui 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.
Files changed (59) hide show
  1. package/README.md +644 -0
  2. package/dist/ChatInput/index.d.ts +23 -0
  3. package/dist/ChatInput/index.d.ts.map +1 -0
  4. package/dist/ChatInput/index.js +50 -0
  5. package/dist/ChatInput/index.js.map +1 -0
  6. package/dist/ChatInput/index.scss +170 -0
  7. package/dist/ContentRenderer/index.d.ts +15 -0
  8. package/dist/ContentRenderer/index.d.ts.map +1 -0
  9. package/dist/ContentRenderer/index.js +73 -0
  10. package/dist/ContentRenderer/index.js.map +1 -0
  11. package/dist/ContentRenderer/index.scss +203 -0
  12. package/dist/Input/Textarea.d.ts +46 -0
  13. package/dist/Input/Textarea.d.ts.map +1 -0
  14. package/dist/Input/Textarea.js +42 -0
  15. package/dist/Input/Textarea.js.map +1 -0
  16. package/dist/Input/index.d.ts +57 -0
  17. package/dist/Input/index.d.ts.map +1 -0
  18. package/dist/Input/index.js +87 -0
  19. package/dist/Input/index.js.map +1 -0
  20. package/dist/Input/index.scss +498 -0
  21. package/dist/Message/index.d.ts +36 -0
  22. package/dist/Message/index.d.ts.map +1 -0
  23. package/dist/Message/index.js +184 -0
  24. package/dist/Message/index.js.map +1 -0
  25. package/dist/Message/index.scss +147 -0
  26. package/dist/Modal/index.d.ts +57 -0
  27. package/dist/Modal/index.d.ts.map +1 -0
  28. package/dist/Modal/index.js +99 -0
  29. package/dist/Modal/index.js.map +1 -0
  30. package/dist/Modal/index.scss +250 -0
  31. package/dist/Pagination/index.d.ts +37 -0
  32. package/dist/Pagination/index.d.ts.map +1 -0
  33. package/dist/Pagination/index.js +98 -0
  34. package/dist/Pagination/index.js.map +1 -0
  35. package/dist/Pagination/index.scss +393 -0
  36. package/dist/Select/index.d.ts +56 -0
  37. package/dist/Select/index.d.ts.map +1 -0
  38. package/dist/Select/index.js +153 -0
  39. package/dist/Select/index.js.map +1 -0
  40. package/dist/Select/index.scss +251 -0
  41. package/dist/Starfield/index.d.ts +20 -0
  42. package/dist/Starfield/index.d.ts.map +1 -0
  43. package/dist/Starfield/index.js +39 -0
  44. package/dist/Starfield/index.js.map +1 -0
  45. package/dist/Starfield/index.scss +61 -0
  46. package/dist/Table/index.d.ts +72 -0
  47. package/dist/Table/index.d.ts.map +1 -0
  48. package/dist/Table/index.js +192 -0
  49. package/dist/Table/index.js.map +1 -0
  50. package/dist/Table/index.scss +377 -0
  51. package/dist/index.d.ts +22 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +11 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/types.d.ts +12 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +3 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +57 -0
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ type InputSize = 'small' | 'middle' | 'large';
4
+ type InputStatus = 'error' | 'warning' | '';
5
+ export interface InputProps {
6
+ /** 值 */
7
+ value?: string;
8
+ /** 默认值(非受控) */
9
+ defaultValue?: string;
10
+ /** 值变化回调 */
11
+ onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement>) => void;
12
+ /** 占位文本 */
13
+ placeholder?: string;
14
+ /** 是否禁用 */
15
+ disabled?: boolean;
16
+ /** 是否只读 */
17
+ readOnly?: boolean;
18
+ /** 尺寸 */
19
+ size?: InputSize;
20
+ /** 前缀图标 */
21
+ prefix?: React.ReactNode;
22
+ /** 后缀图标 */
23
+ suffix?: React.ReactNode;
24
+ /** 是否显示清除按钮 */
25
+ allowClear?: boolean;
26
+ /** 最大长度 */
27
+ maxLength?: number;
28
+ /** 显示字符计数(需配合 maxLength) */
29
+ showCount?: boolean;
30
+ /** 自定义类名 */
31
+ className?: string;
32
+ /** 输入框类型 */
33
+ type?: string;
34
+ /** 键盘事件 */
35
+ onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
36
+ /** 聚焦回调 */
37
+ onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;
38
+ /** 失焦回调 */
39
+ onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
40
+ /** 回车回调 */
41
+ onPressEnter?: (value: string, e: React.KeyboardEvent<HTMLInputElement>) => void;
42
+ /** 自动聚焦 */
43
+ autoFocus?: boolean;
44
+ /** id */
45
+ id?: string;
46
+ /** 名称 */
47
+ name?: string;
48
+ /** 状态 */
49
+ status?: InputStatus;
50
+ /** 自定义样式 */
51
+ style?: React.CSSProperties;
52
+ /** 自动完成 */
53
+ autoComplete?: string;
54
+ }
55
+ declare const Input: React.FC<InputProps>;
56
+ export default Input;
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Input/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,cAAc,CAAC;AAEtB,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC9C,KAAK,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,EAAE,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,QAAQ;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC3E,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS;IACT,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,WAAW;IACX,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,eAAe;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,WAAW;IACX,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,WAAW;IACX,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACjF,WAAW;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS;IACT,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS;IACT,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,WAAW;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA2BD,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA0L/B,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useRef, useEffect } from 'react';
3
+ import './index.scss';
4
+ /** 眼睛图标(密码可见) */
5
+ const EyeOpenIcon = () => (_jsxs("svg", Object.assign({ viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, { children: [_jsx("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }), _jsx("circle", { cx: "12", cy: "12", r: "3" })] })));
6
+ /** 眼睛关闭图标(密码隐藏) */
7
+ const EyeClosedIcon = () => (_jsxs("svg", Object.assign({ viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, { children: [_jsx("path", { d: "M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94" }), _jsx("path", { d: "M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19" }), _jsx("line", { x1: "1", y1: "1", x2: "23", y2: "23" })] })));
8
+ /** 清除图标 */
9
+ const ClearIcon = () => (_jsxs("svg", Object.assign({ viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" }, { children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] })));
10
+ const Input = ({ value: valueProp, defaultValue = '', onChange, placeholder = '', disabled = false, readOnly = false, size = 'middle', prefix, suffix, allowClear = false, maxLength, showCount = false, className = '', type = 'text', onKeyDown, onFocus, onBlur, onPressEnter, autoFocus, id, name, status = '', style, autoComplete, }) => {
11
+ const [innerValue, setInnerValue] = useState(defaultValue);
12
+ const [focused, setFocused] = useState(false);
13
+ const [passwordVisible, setPasswordVisible] = useState(false);
14
+ const inputRef = useRef(null);
15
+ const value = valueProp !== undefined ? valueProp : innerValue;
16
+ const isPassword = type === 'password';
17
+ useEffect(() => {
18
+ if (autoFocus && inputRef.current) {
19
+ inputRef.current.focus();
20
+ }
21
+ }, [autoFocus]);
22
+ const handleChange = useCallback((e) => {
23
+ const newVal = e.target.value;
24
+ if (valueProp === undefined)
25
+ setInnerValue(newVal);
26
+ onChange === null || onChange === void 0 ? void 0 : onChange(newVal, e);
27
+ }, [onChange, valueProp]);
28
+ const handleClear = useCallback((e) => {
29
+ var _a;
30
+ e.stopPropagation();
31
+ if (valueProp === undefined)
32
+ setInnerValue('');
33
+ onChange === null || onChange === void 0 ? void 0 : onChange('', null);
34
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
35
+ }, [onChange, valueProp]);
36
+ const handleKeyDown = useCallback((e) => {
37
+ if (e.key === 'Enter') {
38
+ onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(value, e);
39
+ }
40
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
41
+ }, [onKeyDown, onPressEnter, value]);
42
+ const handleFocus = useCallback((e) => {
43
+ setFocused(true);
44
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
45
+ }, [onFocus]);
46
+ const handleBlur = useCallback((e) => {
47
+ setFocused(false);
48
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
49
+ }, [onBlur]);
50
+ const togglePassword = useCallback(() => {
51
+ setPasswordVisible((v) => !v);
52
+ }, []);
53
+ const statusClass = status ? `adui-input-status-${status}` : '';
54
+ const focusedClass = focused ? 'adui-input-focused' : '';
55
+ const wrapperClass = [
56
+ 'adui-input-wrapper',
57
+ `adui-input-${size}`,
58
+ disabled ? 'adui-input-disabled' : '',
59
+ readOnly ? 'adui-input-readonly' : '',
60
+ prefix ? 'adui-input-has-prefix' : '',
61
+ suffix || allowClear || isPassword ? 'adui-input-has-suffix' : '',
62
+ statusClass,
63
+ focusedClass,
64
+ className,
65
+ ]
66
+ .filter(Boolean)
67
+ .join(' ');
68
+ const inputType = isPassword && passwordVisible ? 'text' : type;
69
+ // 渲染后缀区域(清除、密码切换、自定义后缀)
70
+ const renderSuffix = () => {
71
+ const items = [];
72
+ if (isPassword) {
73
+ items.push(_jsx("button", Object.assign({ type: "button", className: "adui-input-password-toggle", onClick: togglePassword, title: passwordVisible ? '隐藏密码' : '显示密码', "aria-label": passwordVisible ? '隐藏密码' : '显示密码' }, { children: passwordVisible ? _jsx(EyeClosedIcon, {}) : _jsx(EyeOpenIcon, {}) }), "password-toggle"));
74
+ }
75
+ if (allowClear && value) {
76
+ items.push(_jsx("span", Object.assign({ className: "adui-input-clear", onClick: handleClear, role: "button", tabIndex: 0, "aria-label": "\u6E05\u9664\u5185\u5BB9", title: "\u6E05\u9664", onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ')
77
+ handleClear(e); } }, { children: _jsx(ClearIcon, {}) }), "clear"));
78
+ }
79
+ if (suffix) {
80
+ items.push(_jsx("span", Object.assign({ className: "adui-input-suffix" }, { children: suffix }), "suffix"));
81
+ }
82
+ return items.length > 0 ? items : null;
83
+ };
84
+ return (_jsxs("span", Object.assign({ className: wrapperClass, style: style }, { children: [prefix && _jsx("span", Object.assign({ className: "adui-input-prefix" }, { children: prefix })), _jsx("input", { ref: inputRef, id: id, name: name, className: "adui-input", type: inputType, value: value, placeholder: placeholder, disabled: disabled, readOnly: readOnly, maxLength: maxLength, onChange: handleChange, onKeyDown: handleKeyDown, onFocus: handleFocus, onBlur: handleBlur, autoComplete: autoComplete }), renderSuffix(), showCount && maxLength && (_jsx("span", Object.assign({ className: "adui-input-count", "aria-label": `已输入 ${value.length} 字符,最大 ${maxLength} 字符` }, { children: `${value.length}/${maxLength}` })))] })));
85
+ };
86
+ export default Input;
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Input/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,498 @@
1
+ // ---- AdUI Input ----
2
+ // Dark theme, consistent with blog style
3
+
4
+ $primary: #8b5cf6;
5
+ $text: #e0e0e0;
6
+ $text-secondary: #aaa;
7
+ $text-muted: #555;
8
+ $border: rgba(255, 255, 255, 0.12);
9
+ $bg-input: rgba(255, 255, 255, 0.06);
10
+ $transition: all 0.2s ease;
11
+ $input-radius: 8px;
12
+ $error-color: #ef4444;
13
+ $error-color-dark: #dc2626; // darken($error-color, 5%)
14
+ $warning-color: #f59e0b;
15
+ $warning-color-dark: #d97706; // darken($warning-color, 5%)
16
+
17
+ /* ============================================
18
+ Input
19
+ ============================================ */
20
+
21
+ .adui-input-wrapper {
22
+ display: inline-flex;
23
+ align-items: center;
24
+ gap: 6px;
25
+ padding: 0 11px;
26
+ border: 1px solid $border;
27
+ border-radius: $input-radius;
28
+ background: $bg-input;
29
+ transition: $transition;
30
+ box-sizing: border-box;
31
+ width: 100%;
32
+ // 防止 flex 容器中溢出
33
+ min-width: 0;
34
+
35
+ &:hover {
36
+ border-color: $primary;
37
+ }
38
+
39
+ &:focus-within,
40
+ &.adui-input-focused {
41
+ border-color: $primary;
42
+ box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.15);
43
+ }
44
+
45
+ // ---- 状态: error ----
46
+ &.adui-input-status-error {
47
+ border-color: $error-color;
48
+
49
+ &:hover {
50
+ border-color: $error-color-dark;
51
+ }
52
+
53
+ &:focus-within,
54
+ &.adui-input-focused {
55
+ border-color: $error-color;
56
+ box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.15);
57
+ }
58
+ }
59
+
60
+ // ---- 状态: warning ----
61
+ &.adui-input-status-warning {
62
+ border-color: $warning-color;
63
+
64
+ &:hover {
65
+ border-color: $warning-color-dark;
66
+ }
67
+
68
+ &:focus-within,
69
+ &.adui-input-focused {
70
+ border-color: $warning-color;
71
+ box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.15);
72
+ }
73
+ }
74
+
75
+ // ---- 尺寸 ----
76
+ &.adui-input-small {
77
+ height: 28px;
78
+ padding: 0 7px;
79
+ gap: 4px;
80
+ .adui-input { font-size: 13px; }
81
+ .adui-input-prefix,
82
+ .adui-input-suffix,
83
+ .adui-input-password-toggle { font-size: 12px; }
84
+ .adui-input-clear { width: 14px; height: 14px; }
85
+ .adui-input-clear svg { width: 8px; height: 8px; }
86
+ .adui-input-count { font-size: 11px; }
87
+ }
88
+
89
+ &.adui-input-middle {
90
+ height: 36px;
91
+ padding: 0 11px;
92
+ gap: 6px;
93
+ .adui-input { font-size: 14px; }
94
+ .adui-input-prefix,
95
+ .adui-input-suffix,
96
+ .adui-input-password-toggle { font-size: 14px; }
97
+ .adui-input-clear { width: 16px; height: 16px; }
98
+ .adui-input-clear svg { width: 10px; height: 10px; }
99
+ .adui-input-count { font-size: 12px; }
100
+ }
101
+
102
+ &.adui-input-large {
103
+ height: 44px;
104
+ padding: 0 14px;
105
+ gap: 8px;
106
+ .adui-input { font-size: 16px; }
107
+ .adui-input-prefix,
108
+ .adui-input-suffix,
109
+ .adui-input-password-toggle { font-size: 16px; }
110
+ .adui-input-clear { width: 18px; height: 18px; }
111
+ .adui-input-clear svg { width: 11px; height: 11px; }
112
+ .adui-input-count { font-size: 13px; }
113
+ }
114
+
115
+ // ---- 禁用 ----
116
+ &.adui-input-disabled {
117
+ opacity: 0.5;
118
+ cursor: not-allowed;
119
+ pointer-events: none;
120
+
121
+ .adui-input {
122
+ cursor: not-allowed;
123
+ color: $text-muted;
124
+ // 修复禁用态下 autofill 背景色
125
+ &:-webkit-autofill,
126
+ &:-webkit-autofill:hover,
127
+ &:-webkit-autofill:focus {
128
+ -webkit-text-fill-color: $text-muted;
129
+ }
130
+ }
131
+
132
+ &:hover {
133
+ border-color: $border;
134
+ }
135
+ }
136
+
137
+ // ---- 只读 ----
138
+ &.adui-input-readonly {
139
+ .adui-input {
140
+ cursor: default;
141
+ }
142
+ }
143
+
144
+ // ---- 前缀/后缀间距调整 ----
145
+ &.adui-input-has-prefix {
146
+ padding-left: 7px;
147
+ }
148
+ &.adui-input-has-suffix {
149
+ padding-right: 7px;
150
+ }
151
+ }
152
+
153
+ // ---- 输入框本体 ----
154
+ .adui-input {
155
+ flex: 1;
156
+ border: none;
157
+ outline: none;
158
+ background: transparent;
159
+ color: $text;
160
+ font-family: inherit;
161
+ padding: 0;
162
+ min-width: 0;
163
+ line-height: 1.5;
164
+ // 光标颜色与主题色统一
165
+ caret-color: $primary;
166
+
167
+ &::placeholder {
168
+ color: $text-muted;
169
+ }
170
+
171
+ // Firefox 占位符
172
+ &::-moz-placeholder {
173
+ color: $text-muted;
174
+ opacity: 1;
175
+ }
176
+
177
+ // 文本选中色
178
+ &::selection {
179
+ background: rgba(139, 92, 246, 0.3);
180
+ color: #fff;
181
+ }
182
+
183
+ // 隐藏数字输入框的 spinner
184
+ &::-webkit-inner-spin-button,
185
+ &::-webkit-outer-spin-button {
186
+ -webkit-appearance: none;
187
+ margin: 0;
188
+ }
189
+ &[type='number'] {
190
+ -moz-appearance: textfield;
191
+ appearance: textfield;
192
+ }
193
+
194
+ // 移除 search 类型的默认样式
195
+ &::-webkit-search-decoration,
196
+ &::-webkit-search-cancel-button,
197
+ &::-webkit-search-results-button,
198
+ &::-webkit-search-results-decoration {
199
+ -webkit-appearance: none;
200
+ appearance: none;
201
+ }
202
+
203
+ // ---- 暗色主题 autofill ----
204
+ &:-webkit-autofill,
205
+ &:-webkit-autofill:hover,
206
+ &:-webkit-autofill:focus {
207
+ -webkit-box-shadow: 0 0 0 1000px rgba(30, 30, 40, 0.95) inset !important;
208
+ -webkit-text-fill-color: $text !important;
209
+ caret-color: $primary;
210
+ transition: background-color 5000s ease-in-out 0s;
211
+ }
212
+
213
+ // Firefox autofill
214
+ &:autofill {
215
+ background: rgba(30, 30, 40, 0.95);
216
+ color: $text;
217
+ }
218
+ }
219
+
220
+ // ---- 前缀 ----
221
+ .adui-input-prefix {
222
+ display: inline-flex;
223
+ align-items: center;
224
+ flex-shrink: 0;
225
+ color: $text-secondary;
226
+ line-height: 1;
227
+ transition: color 0.2s ease;
228
+
229
+ .adui-input-wrapper:hover & {
230
+ color: $text;
231
+ }
232
+ }
233
+
234
+ // ---- 后缀 ----
235
+ .adui-input-suffix {
236
+ display: inline-flex;
237
+ align-items: center;
238
+ flex-shrink: 0;
239
+ color: $text-secondary;
240
+ line-height: 1;
241
+ transition: color 0.2s ease;
242
+
243
+ .adui-input-wrapper:hover & {
244
+ color: $text;
245
+ }
246
+ }
247
+
248
+ // ---- 清除按钮 ----
249
+ .adui-input-clear {
250
+ display: inline-flex;
251
+ align-items: center;
252
+ justify-content: center;
253
+ border-radius: 50%;
254
+ color: #fff;
255
+ background: rgba(255, 255, 255, 0.25);
256
+ cursor: pointer;
257
+ flex-shrink: 0;
258
+ transition: all 0.2s;
259
+ line-height: 1;
260
+ // 保证图标居中
261
+ padding: 0;
262
+ border: none;
263
+
264
+ &:hover {
265
+ background: rgba(255, 255, 255, 0.4);
266
+ }
267
+
268
+ svg {
269
+ display: block;
270
+ }
271
+ }
272
+
273
+ // ---- 密码切换 ----
274
+ .adui-input-password-toggle {
275
+ display: inline-flex;
276
+ align-items: center;
277
+ justify-content: center;
278
+ cursor: pointer;
279
+ flex-shrink: 0;
280
+ line-height: 1;
281
+ color: $text-secondary;
282
+ transition: color 0.2s;
283
+ user-select: none;
284
+ padding: 0 2px;
285
+ border: none;
286
+ background: none;
287
+ font-size: inherit;
288
+
289
+ &:hover {
290
+ color: $text;
291
+ }
292
+
293
+ svg {
294
+ display: block;
295
+ width: 1em;
296
+ height: 1em;
297
+ }
298
+ }
299
+
300
+ // ---- 字符计数 ----
301
+ .adui-input-count {
302
+ flex-shrink: 0;
303
+ color: $text-muted;
304
+ line-height: 1;
305
+ padding-left: 6px;
306
+ border-left: 1px solid $border;
307
+ white-space: nowrap;
308
+ // 与右侧保持间距
309
+ margin-left: auto;
310
+ }
311
+
312
+ /* ============================================
313
+ Textarea
314
+ ============================================ */
315
+
316
+ .adui-textarea-wrapper {
317
+ display: flex;
318
+ flex-direction: column;
319
+ width: 100%;
320
+ border: 1px solid $border;
321
+ border-radius: $input-radius;
322
+ background: $bg-input;
323
+ transition: $transition;
324
+ box-sizing: border-box;
325
+ // 防止 flex 容器中溢出
326
+ min-width: 0;
327
+
328
+ &:hover {
329
+ border-color: $primary;
330
+ }
331
+
332
+ &:focus-within {
333
+ border-color: $primary;
334
+ box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.15);
335
+ }
336
+
337
+ // ---- 状态 ----
338
+ &.adui-textarea-status-error {
339
+ border-color: $error-color;
340
+
341
+ &:hover { border-color: $error-color-dark; }
342
+ &:focus-within {
343
+ border-color: $error-color;
344
+ box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.15);
345
+ }
346
+ }
347
+
348
+ &.adui-textarea-status-warning {
349
+ border-color: $warning-color;
350
+
351
+ &:hover { border-color: $warning-color-dark; }
352
+ &:focus-within {
353
+ border-color: $warning-color;
354
+ box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.15);
355
+ }
356
+ }
357
+
358
+ &.adui-textarea-disabled {
359
+ opacity: 0.5;
360
+ cursor: not-allowed;
361
+ pointer-events: none;
362
+
363
+ .adui-textarea {
364
+ cursor: not-allowed;
365
+ }
366
+ }
367
+
368
+ // ---- 尺寸 ----
369
+ &.adui-textarea-small {
370
+ .adui-textarea {
371
+ font-size: 13px;
372
+ padding: 6px 8px;
373
+ min-height: 50px;
374
+ }
375
+ .adui-textarea-count { font-size: 11px; }
376
+ .adui-textarea-footer { padding: 3px 8px 4px; }
377
+ }
378
+
379
+ &.adui-textarea-middle {
380
+ .adui-textarea {
381
+ font-size: 14px;
382
+ padding: 8px 11px;
383
+ min-height: 60px;
384
+ }
385
+ .adui-textarea-count { font-size: 12px; }
386
+ .adui-textarea-footer { padding: 4px 11px 6px; }
387
+ }
388
+
389
+ &.adui-textarea-large {
390
+ .adui-textarea {
391
+ font-size: 16px;
392
+ padding: 10px 14px;
393
+ min-height: 80px;
394
+ }
395
+ .adui-textarea-count { font-size: 13px; }
396
+ .adui-textarea-footer { padding: 6px 14px 8px; }
397
+ }
398
+ }
399
+
400
+ .adui-textarea {
401
+ width: 100%;
402
+ border: none;
403
+ outline: none;
404
+ background: transparent;
405
+ color: $text;
406
+ font-family: inherit;
407
+ resize: vertical;
408
+ line-height: 1.6;
409
+ box-sizing: border-box;
410
+ // 光标颜色与主题色统一
411
+ caret-color: $primary;
412
+
413
+ &::placeholder {
414
+ color: $text-muted;
415
+ }
416
+
417
+ &::-moz-placeholder {
418
+ color: $text-muted;
419
+ opacity: 1;
420
+ }
421
+
422
+ &::selection {
423
+ background: rgba(139, 92, 246, 0.3);
424
+ color: #fff;
425
+ }
426
+
427
+ // 暗色主题 autofill
428
+ &:-webkit-autofill,
429
+ &:-webkit-autofill:hover,
430
+ &:-webkit-autofill:focus {
431
+ -webkit-box-shadow: 0 0 0 1000px rgba(30, 30, 40, 0.95) inset !important;
432
+ -webkit-text-fill-color: $text !important;
433
+ transition: background-color 5000s ease-in-out 0s;
434
+ }
435
+
436
+ &:autofill {
437
+ background: rgba(30, 30, 40, 0.95);
438
+ color: $text;
439
+ }
440
+
441
+ &:disabled {
442
+ cursor: not-allowed;
443
+ }
444
+
445
+ // Firefox 滚动条暗色适配
446
+ scrollbar-width: thin;
447
+ scrollbar-color: rgba(255,255,255,0.12) transparent;
448
+ }
449
+
450
+ .adui-textarea-footer {
451
+ display: flex;
452
+ justify-content: flex-end;
453
+ border-top: 1px solid $border;
454
+ }
455
+
456
+ .adui-textarea-count {
457
+ color: $text-muted;
458
+ }
459
+
460
+ /* ============================================
461
+ 响应式适配
462
+ ============================================ */
463
+
464
+ @media (max-width: 576px) {
465
+ .adui-input-wrapper {
466
+ // 移动端保持完整功能但缩小触摸区域
467
+ &.adui-input-middle {
468
+ height: 38px; // 稍微增大便于触摸
469
+ }
470
+ &.adui-input-small {
471
+ height: 32px;
472
+ }
473
+ &.adui-input-large {
474
+ height: 46px;
475
+ }
476
+ }
477
+
478
+ .adui-textarea-wrapper {
479
+ &.adui-textarea-middle {
480
+ .adui-textarea {
481
+ padding: 10px 11px;
482
+ min-height: 70px;
483
+ }
484
+ }
485
+ }
486
+ }
487
+
488
+ /* ============================================
489
+ RTL 支持预留
490
+ ============================================ */
491
+ [dir='rtl'] {
492
+ .adui-input-count {
493
+ padding-left: 0;
494
+ padding-right: 6px;
495
+ border-left: none;
496
+ border-right: 1px solid $border;
497
+ }
498
+ }
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ type MessageType = 'info' | 'success' | 'error' | 'warning' | 'loading';
4
+ export interface MessageInstance {
5
+ (): void;
6
+ then: Promise<void>['then'];
7
+ }
8
+ export interface MessageOpenConfig {
9
+ type?: MessageType;
10
+ content: React.ReactNode;
11
+ duration?: number;
12
+ className?: string;
13
+ style?: React.CSSProperties;
14
+ onClose?: () => void;
15
+ }
16
+ export interface MessageGlobalConfig {
17
+ top?: number;
18
+ duration?: number;
19
+ maxCount?: number;
20
+ getContainer?: () => HTMLElement;
21
+ }
22
+ interface MessageAPI {
23
+ info(content: React.ReactNode, duration?: number, onClose?: () => void): MessageInstance;
24
+ success(content: React.ReactNode, duration?: number, onClose?: () => void): MessageInstance;
25
+ error(content: React.ReactNode, duration?: number, onClose?: () => void): MessageInstance;
26
+ warning(content: React.ReactNode, duration?: number, onClose?: () => void): MessageInstance;
27
+ loading(content: React.ReactNode, duration?: number, onClose?: () => void): MessageInstance;
28
+ open(config: MessageOpenConfig): MessageInstance;
29
+ config(config: MessageGlobalConfig): void;
30
+ destroy(): void;
31
+ }
32
+ declare const message: MessageAPI;
33
+ declare const Message: React.FC;
34
+ export { message };
35
+ export default Message;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Message/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,OAAO,cAAc,CAAC;AAEtB,KAAK,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAYxE,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,CAAC;IACT,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,WAAW,CAAC;CAClC;AAED,UAAU,UAAU;IAClB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,eAAe,CAAC;IACzF,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,eAAe,CAAC;IAC5F,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,eAAe,CAAC;IAC1F,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,eAAe,CAAC;IAC5F,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,eAAe,CAAC;IAC5F,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAC;IACjD,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AA8FD,QAAA,MAAM,OAAO,EAAE,UA6Bd,CAAC;AAGF,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAoGpB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,eAAe,OAAO,CAAC"}