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,184 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useEffect, useRef } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import './index.scss';
5
+ // ---- 内部状态 ----
6
+ let globalConfig = {
7
+ top: 20,
8
+ duration: 3000,
9
+ maxCount: Infinity,
10
+ getContainer: undefined,
11
+ };
12
+ let messageInstance = null;
13
+ // ---- 创建 Store ----
14
+ function createMessageStore() {
15
+ let addFn = null;
16
+ let removeFn = null;
17
+ let clearFn = null;
18
+ return {
19
+ setAdd(fn) {
20
+ addFn = fn;
21
+ },
22
+ setRemove(fn) {
23
+ removeFn = fn;
24
+ },
25
+ setClear(fn) {
26
+ clearFn = fn;
27
+ },
28
+ add(item) {
29
+ var _a;
30
+ return (_a = addFn === null || addFn === void 0 ? void 0 : addFn(item)) !== null && _a !== void 0 ? _a : -1;
31
+ },
32
+ remove(id) {
33
+ removeFn === null || removeFn === void 0 ? void 0 : removeFn(id);
34
+ },
35
+ clear() {
36
+ clearFn === null || clearFn === void 0 ? void 0 : clearFn();
37
+ },
38
+ };
39
+ }
40
+ function ensureStore() {
41
+ if (!messageInstance) {
42
+ messageInstance = createMessageStore();
43
+ }
44
+ return messageInstance;
45
+ }
46
+ // ---- Message Instance(支持 then 语法) ----
47
+ function createMessageInstance(type, content, duration, onClose, extra) {
48
+ const store = ensureStore();
49
+ const dur = duration !== null && duration !== void 0 ? duration : globalConfig.duration;
50
+ // 清理超出数量的旧消息
51
+ if (globalConfig.maxCount !== Infinity) {
52
+ // 这个在组件内部处理
53
+ }
54
+ let closed = false;
55
+ let resolve;
56
+ const promise = new Promise((res) => {
57
+ resolve = res;
58
+ });
59
+ const close = () => {
60
+ if (closed)
61
+ return;
62
+ closed = true;
63
+ onClose === null || onClose === void 0 ? void 0 : onClose();
64
+ resolve === null || resolve === void 0 ? void 0 : resolve();
65
+ };
66
+ const id = store.add({
67
+ type,
68
+ content,
69
+ duration: dur,
70
+ className: extra === null || extra === void 0 ? void 0 : extra.className,
71
+ style: extra === null || extra === void 0 ? void 0 : extra.style,
72
+ onClose: close,
73
+ });
74
+ const ins = Object.assign(close, {
75
+ then: promise.then.bind(promise),
76
+ });
77
+ return ins;
78
+ }
79
+ // ---- Message API ----
80
+ const message = {
81
+ info(content, duration, onClose) {
82
+ return createMessageInstance('info', content, duration, onClose);
83
+ },
84
+ success(content, duration, onClose) {
85
+ return createMessageInstance('success', content, duration, onClose);
86
+ },
87
+ error(content, duration, onClose) {
88
+ return createMessageInstance('error', content, duration, onClose);
89
+ },
90
+ warning(content, duration, onClose) {
91
+ return createMessageInstance('warning', content, duration, onClose);
92
+ },
93
+ loading(content, duration, onClose) {
94
+ return createMessageInstance('loading', content, duration, onClose);
95
+ },
96
+ open(config) {
97
+ const { type = 'info', content, duration, className, style, onClose } = config;
98
+ return createMessageInstance(type, content, duration, onClose, { className, style });
99
+ },
100
+ config(config) {
101
+ if (config.top !== undefined)
102
+ globalConfig.top = config.top;
103
+ if (config.duration !== undefined)
104
+ globalConfig.duration = config.duration;
105
+ if (config.maxCount !== undefined)
106
+ globalConfig.maxCount = config.maxCount;
107
+ if (config.getContainer !== undefined)
108
+ globalConfig.getContainer = config.getContainer;
109
+ },
110
+ destroy() {
111
+ messageInstance === null || messageInstance === void 0 ? void 0 : messageInstance.clear();
112
+ },
113
+ };
114
+ // ---- Message 组件 ----
115
+ const Message = () => {
116
+ const [messages, setMessages] = useState([]);
117
+ const idRef = useRef(0);
118
+ const timerMap = useRef(new Map());
119
+ const store = useRef(ensureStore());
120
+ const remove = useCallback((id) => {
121
+ const timer = timerMap.current.get(id);
122
+ if (timer) {
123
+ clearTimeout(timer);
124
+ timerMap.current.delete(id);
125
+ }
126
+ setMessages((prev) => {
127
+ const msg = prev.find((m) => m.id === id);
128
+ if (msg) {
129
+ // 延迟触发 onClose,保证状态更新后再回调
130
+ setTimeout(() => { var _a; return (_a = msg.onClose) === null || _a === void 0 ? void 0 : _a.call(msg); }, 0);
131
+ }
132
+ return prev.filter((m) => m.id !== id);
133
+ });
134
+ }, []);
135
+ const add = useCallback((item) => {
136
+ const id = ++idRef.current;
137
+ // maxCount 限制:超过时移除最早的消息
138
+ setMessages((prev) => {
139
+ let next = [...prev, Object.assign(Object.assign({}, item), { id })];
140
+ if (globalConfig.maxCount !== Infinity && next.length > globalConfig.maxCount) {
141
+ const removed = next.slice(0, next.length - globalConfig.maxCount);
142
+ removed.forEach((rm) => {
143
+ const timer = timerMap.current.get(rm.id);
144
+ if (timer) {
145
+ clearTimeout(timer);
146
+ timerMap.current.delete(rm.id);
147
+ }
148
+ });
149
+ next = next.slice(next.length - globalConfig.maxCount);
150
+ }
151
+ return next;
152
+ });
153
+ // 自动消失
154
+ if (item.duration > 0) {
155
+ const timer = setTimeout(() => remove(id), item.duration);
156
+ timerMap.current.set(id, timer);
157
+ }
158
+ return id;
159
+ }, [remove]);
160
+ const clear = useCallback(() => {
161
+ timerMap.current.forEach((timer) => clearTimeout(timer));
162
+ timerMap.current.clear();
163
+ setMessages([]);
164
+ }, []);
165
+ useEffect(() => {
166
+ store.current.setAdd(add);
167
+ store.current.setRemove(remove);
168
+ store.current.setClear(clear);
169
+ }, [add, remove, clear]);
170
+ const container = (() => {
171
+ if (globalConfig.getContainer)
172
+ return globalConfig.getContainer();
173
+ return document.body;
174
+ })();
175
+ if (messages.length === 0)
176
+ return null;
177
+ return createPortal(_jsx("div", Object.assign({ className: "message-container", style: { top: globalConfig.top } }, { children: messages.map((msg) => {
178
+ var _a;
179
+ return (_jsxs("div", Object.assign({ className: `message-item message-${msg.type} ${(_a = msg.className) !== null && _a !== void 0 ? _a : ''}`, style: msg.style }, { children: [_jsxs("span", Object.assign({ className: "message-icon" }, { children: [msg.type === 'success' && _jsx("span", Object.assign({ className: "msg-icon-check" }, { children: "\u2713" })), msg.type === 'error' && _jsx("span", Object.assign({ className: "msg-icon-cross" }, { children: "\u2717" })), msg.type === 'warning' && _jsx("span", Object.assign({ className: "msg-icon-warn" }, { children: "!" })), msg.type === 'info' && _jsx("span", Object.assign({ className: "msg-icon-info" }, { children: "i" })), msg.type === 'loading' && _jsx("span", { className: "msg-icon-spinner" })] })), _jsx("span", Object.assign({ className: "message-content" }, { children: msg.content })), _jsx("button", Object.assign({ className: "message-close", onClick: () => remove(msg.id) }, { children: "\u2715" }))] }), msg.id));
180
+ }) })), container);
181
+ };
182
+ export { message };
183
+ export default Message;
184
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Message/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ .message-container {
2
+ position: fixed;
3
+ top: 20px;
4
+ right: 20px;
5
+ z-index: 10000;
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: 10px;
9
+ pointer-events: none;
10
+ }
11
+
12
+ .message-item {
13
+ display: flex;
14
+ align-items: center;
15
+ gap: 10px;
16
+ padding: 12px 16px;
17
+ border-radius: 12px;
18
+ backdrop-filter: blur(20px);
19
+ border: 1px solid;
20
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
21
+ min-width: 280px;
22
+ max-width: 420px;
23
+ pointer-events: auto;
24
+ animation: messageSlideIn 0.3s ease;
25
+ transition: all 0.3s ease;
26
+ word-break: break-word;
27
+
28
+ &:hover {
29
+ transform: translateX(-4px);
30
+ }
31
+ }
32
+
33
+ .message-icon {
34
+ flex-shrink: 0;
35
+ width: 24px;
36
+ height: 24px;
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ border-radius: 50%;
41
+ font-size: 13px;
42
+ font-weight: 700;
43
+ line-height: 1;
44
+ }
45
+
46
+ .msg-icon-check { color: #10b981; }
47
+ .msg-icon-cross { color: #ef4444; font-size: 15px; }
48
+ .msg-icon-warn { color: #f59e0b; font-weight: 800; }
49
+ .msg-icon-info { color: #3b82f6; font-style: italic; font-family: serif; font-weight: 700; }
50
+ .msg-icon-spinner {
51
+ width: 14px;
52
+ height: 14px;
53
+ border: 2px solid #3b82f6;
54
+ border-top-color: transparent;
55
+ border-radius: 50%;
56
+ animation: msgSpin 0.8s linear infinite;
57
+ }
58
+
59
+ .message-content {
60
+ flex: 1;
61
+ font-size: 0.9rem;
62
+ color: #fff;
63
+ line-height: 1.4;
64
+ }
65
+
66
+ .message-close {
67
+ flex-shrink: 0;
68
+ background: none;
69
+ border: none;
70
+ color: rgba(255, 255, 255, 0.4);
71
+ cursor: pointer;
72
+ font-size: 0.8rem;
73
+ padding: 2px 6px;
74
+ border-radius: 4px;
75
+ transition: all 0.2s ease;
76
+
77
+ &:hover {
78
+ color: #fff;
79
+ background: rgba(255, 255, 255, 0.1);
80
+ }
81
+ }
82
+
83
+ // ---- 类型样式 ----
84
+ .message-info {
85
+ background: rgba(59, 130, 246, 0.15);
86
+ border-color: rgba(59, 130, 246, 0.3);
87
+
88
+ .message-icon {
89
+ background: rgba(59, 130, 246, 0.2);
90
+ color: #3b82f6;
91
+ }
92
+ }
93
+
94
+ .message-success {
95
+ background: rgba(16, 185, 129, 0.15);
96
+ border-color: rgba(16, 185, 129, 0.3);
97
+
98
+ .message-icon {
99
+ background: rgba(16, 185, 129, 0.2);
100
+ color: #10b981;
101
+ }
102
+ }
103
+
104
+ .message-error {
105
+ background: rgba(239, 68, 68, 0.15);
106
+ border-color: rgba(239, 68, 68, 0.3);
107
+
108
+ .message-icon {
109
+ background: rgba(239, 68, 68, 0.2);
110
+ color: #ef4444;
111
+ }
112
+ }
113
+
114
+ .message-warning {
115
+ background: rgba(245, 158, 11, 0.15);
116
+ border-color: rgba(245, 158, 11, 0.3);
117
+
118
+ .message-icon {
119
+ background: rgba(245, 158, 11, 0.2);
120
+ color: #f59e0b;
121
+ }
122
+ }
123
+
124
+ .message-loading {
125
+ background: rgba(59, 130, 246, 0.15);
126
+ border-color: rgba(59, 130, 246, 0.3);
127
+
128
+ .message-icon {
129
+ background: rgba(59, 130, 246, 0.2);
130
+ }
131
+ }
132
+
133
+ @keyframes messageSlideIn {
134
+ from {
135
+ opacity: 0;
136
+ transform: translateX(100%) scale(0.95);
137
+ }
138
+ to {
139
+ opacity: 1;
140
+ transform: translateX(0) scale(1);
141
+ }
142
+ }
143
+
144
+ @keyframes msgSpin {
145
+ from { transform: rotate(0deg); }
146
+ to { transform: rotate(360deg); }
147
+ }
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ export interface ModalProps {
4
+ /** 是否显示 */
5
+ open?: boolean;
6
+ /** 关闭回调 */
7
+ onClose?: () => void;
8
+ /** 确认回调 */
9
+ onOk?: () => void | Promise<void>;
10
+ /** 取消回调 */
11
+ onCancel?: () => void;
12
+ /** 关闭后回调 */
13
+ afterClose?: () => void;
14
+ /** 标题 */
15
+ title?: React.ReactNode;
16
+ /** 内容 */
17
+ children?: React.ReactNode;
18
+ /** 底部内容,设为 null 则隐藏 */
19
+ footer?: React.ReactNode | null;
20
+ /** 自定义关闭按钮 */
21
+ closeButton?: React.ReactNode;
22
+ /** 自定义类名 */
23
+ className?: string;
24
+ /** 自定义样式 */
25
+ style?: React.CSSProperties;
26
+ /** 内容区样式 */
27
+ bodyStyle?: React.CSSProperties;
28
+ /** 宽度,支持数字(px)或字符串 */
29
+ width?: number | string;
30
+ /** 高度,支持数字(px)或字符串 */
31
+ height?: number | string;
32
+ /** 是否居中 */
33
+ centered?: boolean;
34
+ /** 是否显示遮罩 */
35
+ mask?: boolean;
36
+ /** 点击遮罩是否关闭 */
37
+ maskClosable?: boolean;
38
+ /** 是否显示关闭按钮 */
39
+ closable?: boolean;
40
+ /** 是否支持键盘 ESC 关闭 */
41
+ keyboard?: boolean;
42
+ /** 确认按钮 loading 态 */
43
+ confirmLoading?: boolean;
44
+ /** 卸载时销毁子节点 */
45
+ destroyOnClose?: boolean;
46
+ /** 自定义 z-index */
47
+ zIndex?: number;
48
+ /** 确定按钮文案 */
49
+ okText?: string;
50
+ /** 取消按钮文案 */
51
+ cancelText?: string;
52
+ /** 获取弹窗容器 */
53
+ getContainer?: () => HTMLElement;
54
+ }
55
+ declare const Modal: React.FC<ModalProps>;
56
+ export default Modal;
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Modal/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY;IACZ,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS;IACT,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS;IACT,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,uBAAuB;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IAChC,cAAc;IACd,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,YAAY;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,YAAY,CAAC,EAAE,MAAM,WAAW,CAAC;CAClC;AAED,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA8L/B,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,99 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { useEffect, useCallback, useState, useRef } from 'react';
12
+ import './index.scss';
13
+ const Modal = ({ open = false, onClose, onOk, onCancel, afterClose, title, children, footer, closeButton, className = '', style, bodyStyle, width = 520, height, centered = false, mask = true, maskClosable = true, closable = true, keyboard = true, confirmLoading = false, destroyOnClose = false, zIndex = 1000, okText = '确定', cancelText = '取消', getContainer, }) => {
14
+ const [animating, setAnimating] = useState(false);
15
+ const [visible, setVisible] = useState(false);
16
+ const [rendered, setRendered] = useState(false);
17
+ const [okLoading, setOkLoading] = useState(false);
18
+ const bodyRef = useRef(null);
19
+ // ---- 动画控制 ----
20
+ useEffect(() => {
21
+ if (open) {
22
+ setVisible(true);
23
+ setRendered(true);
24
+ // 触发下一帧动画
25
+ requestAnimationFrame(() => {
26
+ requestAnimationFrame(() => setAnimating(true));
27
+ });
28
+ }
29
+ else {
30
+ setAnimating(false);
31
+ const timer = setTimeout(() => {
32
+ setVisible(false);
33
+ if (destroyOnClose)
34
+ setRendered(false);
35
+ afterClose === null || afterClose === void 0 ? void 0 : afterClose();
36
+ }, 200); // 与 CSS 动画时长一致
37
+ return () => clearTimeout(timer);
38
+ }
39
+ }, [open, destroyOnClose, afterClose]);
40
+ // ---- 遮罩层点击 ----
41
+ const handleMaskClick = useCallback((e) => {
42
+ if (e.target === e.currentTarget && maskClosable) {
43
+ handleCancel();
44
+ }
45
+ }, [maskClosable]);
46
+ // ---- 键盘 ESC ----
47
+ const handleKeyDown = useCallback((e) => {
48
+ if (e.key === 'Escape' && keyboard) {
49
+ handleCancel();
50
+ }
51
+ }, [keyboard]);
52
+ useEffect(() => {
53
+ if (open) {
54
+ document.addEventListener('keydown', handleKeyDown);
55
+ return () => document.removeEventListener('keydown', handleKeyDown);
56
+ }
57
+ }, [open, handleKeyDown]);
58
+ // ---- 锁定页面滚动 ----
59
+ useEffect(() => {
60
+ if (open) {
61
+ const prev = document.body.style.overflow;
62
+ document.body.style.overflow = 'hidden';
63
+ return () => {
64
+ document.body.style.overflow = prev;
65
+ };
66
+ }
67
+ }, [open]);
68
+ // ---- 确定/取消 ----
69
+ const handleOk = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
70
+ if (confirmLoading) {
71
+ setOkLoading(true);
72
+ }
73
+ try {
74
+ yield (onOk === null || onOk === void 0 ? void 0 : onOk());
75
+ }
76
+ finally {
77
+ setOkLoading(false);
78
+ }
79
+ }), [onOk, confirmLoading]);
80
+ const handleCancel = useCallback(() => {
81
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
82
+ onClose === null || onClose === void 0 ? void 0 : onClose();
83
+ }, [onCancel, onClose]);
84
+ // ---- 宽度处理 ----
85
+ const widthStyle = typeof width === 'number' ? `${width}px` : width;
86
+ // ---- 渲染底部 ----
87
+ const renderFooter = () => {
88
+ if (footer === null)
89
+ return null;
90
+ if (footer !== undefined)
91
+ return footer;
92
+ return (_jsxs("div", Object.assign({ className: "modal-footer" }, { children: [_jsx("button", Object.assign({ className: "modal-btn modal-btn-cancel", onClick: handleCancel }, { children: cancelText })), _jsxs("button", Object.assign({ className: `modal-btn modal-btn-ok ${okLoading ? 'modal-btn-loading' : ''}`, onClick: handleOk, disabled: okLoading }, { children: [okLoading && _jsx("span", { className: "modal-btn-spinner" }), okText] }))] })));
93
+ };
94
+ if (!visible && !rendered)
95
+ return null;
96
+ return (_jsxs("div", Object.assign({ className: `modal-root ${animating ? 'modal-root-enter' : ''} ${!visible ? 'modal-root-leave' : ''} ${centered ? 'modal-centered' : ''}`, style: { zIndex } }, { children: [mask && (_jsx("div", { className: `modal-mask ${animating ? 'modal-mask-enter' : ''}`, onClick: maskClosable ? handleMaskClick : undefined })), _jsx("div", Object.assign({ className: `modal-wrap ${animating ? 'modal-wrap-enter' : ''} ${centered ? 'modal-wrap-centered' : ''}`, onClick: handleMaskClick }, { children: _jsxs("div", Object.assign({ className: `modal-content ${className}`, style: Object.assign(Object.assign({}, style), { width: widthStyle, height }), role: "dialog", "aria-modal": "true" }, { children: [title && (_jsx("div", Object.assign({ className: "modal-header" }, { children: _jsx("div", Object.assign({ className: "modal-title" }, { children: title })) }))), closable && (closeButton ? (_jsx("span", Object.assign({ className: "modal-close-custom", onClick: handleCancel }, { children: closeButton }))) : (_jsx("button", Object.assign({ className: "modal-close", onClick: handleCancel, "aria-label": "Close" }, { children: "\u2715" })))), _jsx("div", Object.assign({ className: "modal-body", ref: bodyRef, style: bodyStyle }, { children: children })), renderFooter()] })) }))] })));
97
+ };
98
+ export default Modal;
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Modal/index.tsx"],"names":[],"mappings":"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"}