wssf-kage-ui 0.1.2 → 0.1.3

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 (83) hide show
  1. package/dist/cjs/Alert/index.d.ts +37 -0
  2. package/dist/cjs/Alert/index.js +124 -0
  3. package/dist/cjs/Alert/style.less +248 -0
  4. package/dist/cjs/Drawer/index.d.ts +57 -0
  5. package/dist/cjs/Drawer/index.js +203 -0
  6. package/dist/cjs/Drawer/style.less +215 -0
  7. package/dist/cjs/FloatButton/index.d.ts +54 -0
  8. package/dist/cjs/FloatButton/index.js +119 -0
  9. package/dist/cjs/FloatButton/style.less +266 -0
  10. package/dist/cjs/Message/index.d.ts +38 -0
  11. package/dist/cjs/Message/index.js +292 -0
  12. package/dist/cjs/Message/style.less +183 -0
  13. package/dist/cjs/Modal/index.d.ts +63 -0
  14. package/dist/cjs/Modal/index.js +254 -0
  15. package/dist/cjs/Modal/style.less +298 -0
  16. package/dist/cjs/Notification/index.d.ts +48 -0
  17. package/dist/cjs/Notification/index.js +340 -0
  18. package/dist/cjs/Notification/style.less +260 -0
  19. package/dist/cjs/Popconfirm/index.d.ts +58 -0
  20. package/dist/cjs/Popconfirm/index.js +393 -0
  21. package/dist/cjs/Popconfirm/style.less +417 -0
  22. package/dist/cjs/Progress/index.d.ts +43 -0
  23. package/dist/cjs/Progress/index.js +213 -0
  24. package/dist/cjs/Progress/style.less +206 -0
  25. package/dist/cjs/Result/index.d.ts +25 -0
  26. package/dist/cjs/Result/index.js +63 -0
  27. package/dist/cjs/Result/style.less +111 -0
  28. package/dist/cjs/Skeleton/index.d.ts +88 -0
  29. package/dist/cjs/Skeleton/index.js +207 -0
  30. package/dist/cjs/Skeleton/style.less +487 -0
  31. package/dist/cjs/Spin/index.d.ts +25 -0
  32. package/dist/cjs/Spin/index.js +98 -0
  33. package/dist/cjs/Spin/style.less +169 -0
  34. package/dist/cjs/Tree/index.d.ts +82 -0
  35. package/dist/cjs/Tree/index.js +226 -0
  36. package/dist/cjs/Tree/style.less +313 -0
  37. package/dist/cjs/Watermark/index.d.ts +41 -0
  38. package/dist/cjs/Watermark/index.js +353 -0
  39. package/dist/cjs/Watermark/style.less +31 -0
  40. package/dist/cjs/index.d.ts +27 -1
  41. package/dist/cjs/index.js +91 -0
  42. package/dist/esm/Alert/index.d.ts +37 -0
  43. package/dist/esm/Alert/index.js +121 -0
  44. package/dist/esm/Alert/style.less +248 -0
  45. package/dist/esm/Drawer/index.d.ts +57 -0
  46. package/dist/esm/Drawer/index.js +202 -0
  47. package/dist/esm/Drawer/style.less +215 -0
  48. package/dist/esm/FloatButton/index.d.ts +54 -0
  49. package/dist/esm/FloatButton/index.js +123 -0
  50. package/dist/esm/FloatButton/style.less +266 -0
  51. package/dist/esm/Message/index.d.ts +38 -0
  52. package/dist/esm/Message/index.js +294 -0
  53. package/dist/esm/Message/style.less +183 -0
  54. package/dist/esm/Modal/index.d.ts +63 -0
  55. package/dist/esm/Modal/index.js +251 -0
  56. package/dist/esm/Modal/style.less +298 -0
  57. package/dist/esm/Notification/index.d.ts +48 -0
  58. package/dist/esm/Notification/index.js +345 -0
  59. package/dist/esm/Notification/style.less +260 -0
  60. package/dist/esm/Popconfirm/index.d.ts +58 -0
  61. package/dist/esm/Popconfirm/index.js +389 -0
  62. package/dist/esm/Popconfirm/style.less +417 -0
  63. package/dist/esm/Progress/index.d.ts +43 -0
  64. package/dist/esm/Progress/index.js +208 -0
  65. package/dist/esm/Progress/style.less +206 -0
  66. package/dist/esm/Result/index.d.ts +25 -0
  67. package/dist/esm/Result/index.js +57 -0
  68. package/dist/esm/Result/style.less +111 -0
  69. package/dist/esm/Skeleton/index.d.ts +88 -0
  70. package/dist/esm/Skeleton/index.js +213 -0
  71. package/dist/esm/Skeleton/style.less +487 -0
  72. package/dist/esm/Spin/index.d.ts +25 -0
  73. package/dist/esm/Spin/index.js +95 -0
  74. package/dist/esm/Spin/style.less +169 -0
  75. package/dist/esm/Tree/index.d.ts +82 -0
  76. package/dist/esm/Tree/index.js +225 -0
  77. package/dist/esm/Tree/style.less +313 -0
  78. package/dist/esm/Watermark/index.d.ts +41 -0
  79. package/dist/esm/Watermark/index.js +349 -0
  80. package/dist/esm/Watermark/style.less +31 -0
  81. package/dist/esm/index.d.ts +27 -1
  82. package/dist/esm/index.js +14 -1
  83. package/package.json +1 -1
@@ -0,0 +1,183 @@
1
+ // Message 全局提示样式
2
+
3
+ @prefix: kage-message;
4
+
5
+ // 颜色变量
6
+ @message-bg: #fff;
7
+ @message-success-color: #52c41a;
8
+ @message-info-color: #1890ff;
9
+ @message-warning-color: #faad14;
10
+ @message-error-color: #ff4d4f;
11
+ @message-text-color: rgba(0, 0, 0, 0.85);
12
+ @message-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),
13
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
14
+
15
+ // ============ 根容器 ============
16
+ .kage-message-root {
17
+ position: fixed;
18
+ top: 0;
19
+ left: 0;
20
+ right: 0;
21
+ pointer-events: none;
22
+ z-index: 1010;
23
+ }
24
+
25
+ // ============ 消息容器 ============
26
+ .@{prefix}-container {
27
+ position: fixed;
28
+ top: 16px;
29
+ left: 50%;
30
+ transform: translateX(-50%);
31
+ z-index: 1010;
32
+ pointer-events: none;
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: center;
36
+ gap: 8px;
37
+ }
38
+
39
+ // ============ 消息项 ============
40
+ .@{prefix} {
41
+ display: flex;
42
+ align-items: center;
43
+ min-width: 200px;
44
+ max-width: 400px;
45
+ padding: 9px 12px;
46
+ background-color: @message-bg;
47
+ border-radius: 6px;
48
+ box-shadow: @message-shadow;
49
+ font-size: 14px;
50
+ line-height: 1.5715;
51
+ color: @message-text-color;
52
+ pointer-events: auto;
53
+ opacity: 1;
54
+ transform: translateY(0);
55
+ transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
56
+
57
+ * {
58
+ box-sizing: border-box;
59
+ }
60
+ }
61
+
62
+ // ============ 图标 ============
63
+ .@{prefix}-icon {
64
+ display: inline-flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ width: 20px;
68
+ height: 20px;
69
+ margin-right: 8px;
70
+ font-size: 16px;
71
+ line-height: 1;
72
+ flex-shrink: 0;
73
+ }
74
+
75
+ // ============ 内容 ============
76
+ .@{prefix}-content {
77
+ flex: 1;
78
+ word-wrap: break-word;
79
+ word-break: break-word;
80
+ }
81
+
82
+ // ============ 不同类型 ============
83
+ .@{prefix}-success {
84
+ .@{prefix}-icon {
85
+ color: @message-success-color;
86
+ }
87
+ }
88
+
89
+ .@{prefix}-info {
90
+ .@{prefix}-icon {
91
+ color: @message-info-color;
92
+ }
93
+ }
94
+
95
+ .@{prefix}-warning {
96
+ .@{prefix}-icon {
97
+ color: @message-warning-color;
98
+ }
99
+ }
100
+
101
+ .@{prefix}-error {
102
+ .@{prefix}-icon {
103
+ color: @message-error-color;
104
+ }
105
+ }
106
+
107
+ .@{prefix}-loading {
108
+ .@{prefix}-icon {
109
+ color: @message-info-color;
110
+ animation: messageLoading 1s linear infinite;
111
+ }
112
+ }
113
+
114
+ @keyframes messageLoading {
115
+ from {
116
+ transform: rotate(0deg);
117
+ }
118
+ to {
119
+ transform: rotate(360deg);
120
+ }
121
+ }
122
+
123
+ // ============ 关闭动画 ============
124
+ .@{prefix}-closing {
125
+ opacity: 0;
126
+ transform: translateY(-20px);
127
+ margin-top: 0 !important;
128
+ margin-bottom: 0 !important;
129
+ padding-top: 0;
130
+ padding-bottom: 0;
131
+ height: 0;
132
+ overflow: hidden;
133
+ }
134
+
135
+ // ============ 暗色模式适配 ============
136
+ [data-theme='dark'],
137
+ [data-prefers-color-scheme='dark'],
138
+ [data-prefers-color='dark'],
139
+ html.dark,
140
+ body.dark,
141
+ .dark {
142
+ .@{prefix} {
143
+ background-color: #1f1f1f;
144
+ color: rgba(255, 255, 255, 0.85);
145
+ box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.48), 0 3px 6px -4px rgba(0, 0, 0, 0.32),
146
+ 0 9px 28px 8px rgba(0, 0, 0, 0.2);
147
+ }
148
+
149
+ .@{prefix}-content {
150
+ color: rgba(255, 255, 255, 0.85);
151
+ }
152
+
153
+ .@{prefix}-success {
154
+ .@{prefix}-icon {
155
+ color: #52c41a;
156
+ }
157
+ }
158
+
159
+ .@{prefix}-info {
160
+ .@{prefix}-icon {
161
+ color: #1890ff;
162
+ }
163
+ }
164
+
165
+ .@{prefix}-warning {
166
+ .@{prefix}-icon {
167
+ color: #faad14;
168
+ }
169
+ }
170
+
171
+ .@{prefix}-error {
172
+ .@{prefix}-icon {
173
+ color: #ff4d4f;
174
+ }
175
+ }
176
+
177
+ .@{prefix}-loading {
178
+ .@{prefix}-icon {
179
+ color: #1890ff;
180
+ }
181
+ }
182
+ }
183
+
@@ -0,0 +1,63 @@
1
+ import React, { ReactNode, CSSProperties } from 'react';
2
+ import './style.less';
3
+ /** Modal 属性 */
4
+ export interface ModalProps {
5
+ /** 是否显示 */
6
+ open?: boolean;
7
+ /** 默认是否显示 */
8
+ defaultOpen?: boolean;
9
+ /** 显示隐藏的回调 */
10
+ onClose?: (e: React.MouseEvent | React.KeyboardEvent) => void;
11
+ /** 关闭后的回调 */
12
+ afterOpenChange?: (open: boolean) => void;
13
+ /** 标题 */
14
+ title?: ReactNode;
15
+ /** 内容 */
16
+ children?: ReactNode;
17
+ /** 是否显示遮罩 */
18
+ mask?: boolean;
19
+ /** 点击遮罩是否关闭 */
20
+ maskClosable?: boolean;
21
+ /** 是否显示关闭按钮 */
22
+ closable?: boolean;
23
+ /** 自定义关闭图标 */
24
+ closeIcon?: ReactNode;
25
+ /** 自定义遮罩样式 */
26
+ maskStyle?: CSSProperties;
27
+ /** 自定义主体内容样式 */
28
+ bodyStyle?: CSSProperties;
29
+ /** 自定义头部样式 */
30
+ headerStyle?: CSSProperties;
31
+ /** 自定义底部样式 */
32
+ footerStyle?: CSSProperties;
33
+ /** 底部内容 */
34
+ footer?: ReactNode;
35
+ /** 宽度 */
36
+ width?: number | string;
37
+ /** 是否居中显示 */
38
+ centered?: boolean;
39
+ /** 自定义类名 */
40
+ className?: string;
41
+ /** 自定义样式 */
42
+ style?: CSSProperties;
43
+ /** z-index */
44
+ zIndex?: number;
45
+ /** 是否支持键盘 ESC 关闭 */
46
+ keyboard?: boolean;
47
+ /** 是否在关闭时销毁 Modal 里的子元素 */
48
+ destroyOnClose?: boolean;
49
+ /** 是否显示遮罩背景 */
50
+ maskClassName?: string;
51
+ /** 确认按钮文字 */
52
+ okText?: ReactNode;
53
+ /** 取消按钮文字 */
54
+ cancelText?: ReactNode;
55
+ /** 确认按钮 loading */
56
+ confirmLoading?: boolean;
57
+ /** 点击确定回调 */
58
+ onOk?: (e: React.MouseEvent<HTMLButtonElement>) => void;
59
+ /** 点击取消回调 */
60
+ onCancel?: (e: React.MouseEvent<HTMLButtonElement>) => void;
61
+ }
62
+ export declare const Modal: React.FC<ModalProps>;
63
+ export default Modal;
@@ -0,0 +1,251 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ import React, { useState, useEffect, useCallback } from 'react';
14
+ import { createPortal } from 'react-dom';
15
+ import "./style.less";
16
+
17
+ // ============ 类型定义 ============
18
+
19
+ /** Modal 属性 */
20
+ import { jsx as _jsx } from "react/jsx-runtime";
21
+ import { jsxs as _jsxs } from "react/jsx-runtime";
22
+ import { Fragment as _Fragment } from "react/jsx-runtime";
23
+ // ============ Modal 组件 ============
24
+ export var Modal = function Modal(_ref) {
25
+ var controlledOpen = _ref.open,
26
+ _ref$defaultOpen = _ref.defaultOpen,
27
+ defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
28
+ onClose = _ref.onClose,
29
+ afterOpenChange = _ref.afterOpenChange,
30
+ title = _ref.title,
31
+ children = _ref.children,
32
+ _ref$mask = _ref.mask,
33
+ mask = _ref$mask === void 0 ? true : _ref$mask,
34
+ _ref$maskClosable = _ref.maskClosable,
35
+ maskClosable = _ref$maskClosable === void 0 ? true : _ref$maskClosable,
36
+ _ref$closable = _ref.closable,
37
+ closable = _ref$closable === void 0 ? true : _ref$closable,
38
+ closeIcon = _ref.closeIcon,
39
+ maskStyle = _ref.maskStyle,
40
+ bodyStyle = _ref.bodyStyle,
41
+ headerStyle = _ref.headerStyle,
42
+ footerStyle = _ref.footerStyle,
43
+ footer = _ref.footer,
44
+ _ref$width = _ref.width,
45
+ width = _ref$width === void 0 ? 520 : _ref$width,
46
+ _ref$centered = _ref.centered,
47
+ centered = _ref$centered === void 0 ? false : _ref$centered,
48
+ _ref$className = _ref.className,
49
+ className = _ref$className === void 0 ? '' : _ref$className,
50
+ style = _ref.style,
51
+ _ref$zIndex = _ref.zIndex,
52
+ zIndex = _ref$zIndex === void 0 ? 1000 : _ref$zIndex,
53
+ _ref$keyboard = _ref.keyboard,
54
+ keyboard = _ref$keyboard === void 0 ? true : _ref$keyboard,
55
+ _ref$destroyOnClose = _ref.destroyOnClose,
56
+ destroyOnClose = _ref$destroyOnClose === void 0 ? false : _ref$destroyOnClose,
57
+ _ref$maskClassName = _ref.maskClassName,
58
+ maskClassName = _ref$maskClassName === void 0 ? '' : _ref$maskClassName,
59
+ _ref$okText = _ref.okText,
60
+ okText = _ref$okText === void 0 ? '确定' : _ref$okText,
61
+ _ref$cancelText = _ref.cancelText,
62
+ cancelText = _ref$cancelText === void 0 ? '取消' : _ref$cancelText,
63
+ _ref$confirmLoading = _ref.confirmLoading,
64
+ confirmLoading = _ref$confirmLoading === void 0 ? false : _ref$confirmLoading,
65
+ onOk = _ref.onOk,
66
+ onCancel = _ref.onCancel;
67
+ var _useState = useState(defaultOpen),
68
+ _useState2 = _slicedToArray(_useState, 2),
69
+ internalOpen = _useState2[0],
70
+ setInternalOpen = _useState2[1];
71
+ var _useState3 = useState(defaultOpen),
72
+ _useState4 = _slicedToArray(_useState3, 2),
73
+ visible = _useState4[0],
74
+ setVisible = _useState4[1];
75
+ var _useState5 = useState(defaultOpen),
76
+ _useState6 = _slicedToArray(_useState5, 2),
77
+ mounted = _useState6[0],
78
+ setMounted = _useState6[1];
79
+ var isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;
80
+
81
+ // 更新打开状态
82
+ var updateOpen = useCallback(function (newOpen) {
83
+ if (controlledOpen === undefined) {
84
+ setInternalOpen(newOpen);
85
+ }
86
+ setVisible(newOpen);
87
+ if (newOpen) {
88
+ setMounted(true);
89
+ }
90
+ afterOpenChange === null || afterOpenChange === void 0 || afterOpenChange(newOpen);
91
+ }, [controlledOpen, afterOpenChange]);
92
+
93
+ // 处理关闭
94
+ var handleClose = useCallback(function (e) {
95
+ onClose === null || onClose === void 0 || onClose(e);
96
+ if (!e.defaultPrevented) {
97
+ updateOpen(false);
98
+ }
99
+ }, [onClose, updateOpen]);
100
+
101
+ // 处理取消
102
+ var handleCancel = useCallback(function (e) {
103
+ onCancel === null || onCancel === void 0 || onCancel(e);
104
+ if (!e.defaultPrevented) {
105
+ handleClose(e);
106
+ }
107
+ }, [onCancel, handleClose]);
108
+
109
+ // 处理确定
110
+ var handleOk = useCallback(function (e) {
111
+ onOk === null || onOk === void 0 || onOk(e);
112
+ // 如果 onOk 阻止了默认行为,则不关闭
113
+ if (e.defaultPrevented) {
114
+ return;
115
+ }
116
+ // 默认情况下,点击确定后自动关闭
117
+ handleClose(e);
118
+ }, [onOk, handleClose]);
119
+
120
+ // 处理遮罩点击
121
+ var handleMaskClick = useCallback(function (e) {
122
+ if (maskClosable && e.target === e.currentTarget) {
123
+ handleClose(e);
124
+ }
125
+ }, [maskClosable, handleClose]);
126
+
127
+ // 键盘 ESC 关闭
128
+ useEffect(function () {
129
+ if (keyboard && isOpen) {
130
+ var handleKeyDown = function handleKeyDown(e) {
131
+ if (e.key === 'Escape') {
132
+ handleClose(e);
133
+ }
134
+ };
135
+ document.addEventListener('keydown', handleKeyDown);
136
+ return function () {
137
+ document.removeEventListener('keydown', handleKeyDown);
138
+ };
139
+ }
140
+ }, [keyboard, isOpen, handleClose]);
141
+
142
+ // 监听 open 变化
143
+ useEffect(function () {
144
+ if (isOpen) {
145
+ setMounted(true);
146
+ // 使用 requestAnimationFrame 确保 DOM 更新后再显示
147
+ requestAnimationFrame(function () {
148
+ setVisible(true);
149
+ });
150
+ } else {
151
+ setVisible(false);
152
+ // 等待动画完成后再卸载(如果 destroyOnClose)
153
+ if (destroyOnClose) {
154
+ var timer = setTimeout(function () {
155
+ setMounted(false);
156
+ }, 300);
157
+ return function () {
158
+ return clearTimeout(timer);
159
+ };
160
+ }
161
+ }
162
+ }, [isOpen, destroyOnClose]);
163
+
164
+ // 阻止 body 滚动
165
+ useEffect(function () {
166
+ if (isOpen) {
167
+ var originalOverflow = document.body.style.overflow;
168
+ document.body.style.overflow = 'hidden';
169
+ return function () {
170
+ document.body.style.overflow = originalOverflow;
171
+ };
172
+ }
173
+ }, [isOpen]);
174
+ if (!mounted) {
175
+ return null;
176
+ }
177
+ var modalClassNames = ['kage-modal', visible && 'kage-modal-open', centered && 'kage-modal-centered', className].filter(Boolean).join(' ');
178
+ var maskClassNames = ['kage-modal-mask', visible && 'kage-modal-mask-open', maskClassName].filter(Boolean).join(' ');
179
+ var widthStyle = {
180
+ width: typeof width === 'number' ? "".concat(width, "px") : width
181
+ };
182
+
183
+ // 渲染默认底部
184
+ var renderDefaultFooter = function renderDefaultFooter() {
185
+ if (footer !== undefined) {
186
+ return footer;
187
+ }
188
+ return /*#__PURE__*/_jsxs("div", {
189
+ className: "kage-modal-footer",
190
+ children: [/*#__PURE__*/_jsx("button", {
191
+ type: "button",
192
+ className: "kage-modal-cancel-btn",
193
+ onClick: handleCancel,
194
+ children: cancelText
195
+ }), /*#__PURE__*/_jsx("button", {
196
+ type: "button",
197
+ className: "kage-modal-ok-btn",
198
+ onClick: handleOk,
199
+ disabled: confirmLoading,
200
+ children: confirmLoading ? '加载中...' : okText
201
+ })]
202
+ });
203
+ };
204
+ var modalContent = /*#__PURE__*/_jsxs(_Fragment, {
205
+ children: [mask && /*#__PURE__*/_jsx("div", {
206
+ className: maskClassNames,
207
+ style: _objectSpread({
208
+ zIndex: zIndex
209
+ }, maskStyle),
210
+ onClick: handleMaskClick
211
+ }), /*#__PURE__*/_jsx("div", {
212
+ className: modalClassNames,
213
+ style: _objectSpread({
214
+ zIndex: zIndex
215
+ }, style),
216
+ role: "dialog",
217
+ "aria-modal": "true",
218
+ onClick: function onClick(e) {
219
+ return e.stopPropagation();
220
+ },
221
+ children: /*#__PURE__*/_jsxs("div", {
222
+ className: "kage-modal-wrap",
223
+ style: widthStyle,
224
+ children: [title !== undefined || closable ? /*#__PURE__*/_jsxs("div", {
225
+ className: "kage-modal-header",
226
+ style: headerStyle,
227
+ children: [title && /*#__PURE__*/_jsx("div", {
228
+ className: "kage-modal-title",
229
+ children: title
230
+ }), closable && /*#__PURE__*/_jsx("button", {
231
+ type: "button",
232
+ className: "kage-modal-close",
233
+ onClick: handleClose,
234
+ "aria-label": "\u5173\u95ED",
235
+ children: closeIcon || '×'
236
+ })]
237
+ }) : null, /*#__PURE__*/_jsx("div", {
238
+ className: "kage-modal-body",
239
+ style: bodyStyle,
240
+ children: children
241
+ }), footer !== null && /*#__PURE__*/_jsx("div", {
242
+ className: "kage-modal-footer-wrapper",
243
+ style: footerStyle,
244
+ children: renderDefaultFooter()
245
+ })]
246
+ })
247
+ })]
248
+ });
249
+ return /*#__PURE__*/createPortal(modalContent, document.body);
250
+ };
251
+ export default Modal;