wssf-kage-ui 0.1.1 → 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 (257) 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/Avatar/index.d.ts +47 -0
  5. package/dist/cjs/Avatar/index.js +147 -0
  6. package/dist/cjs/Avatar/style.less +193 -0
  7. package/dist/cjs/Badge/index.d.ts +48 -0
  8. package/dist/cjs/Badge/index.js +141 -0
  9. package/dist/cjs/Badge/style.less +237 -0
  10. package/dist/cjs/Calendar/index.d.ts +33 -0
  11. package/dist/cjs/Calendar/index.js +296 -0
  12. package/dist/cjs/Calendar/style.less +384 -0
  13. package/dist/cjs/Card/index.d.ts +68 -0
  14. package/dist/cjs/Card/index.js +155 -0
  15. package/dist/cjs/Card/style.less +356 -0
  16. package/dist/cjs/Carousel/index.d.ts +33 -0
  17. package/dist/cjs/Carousel/index.js +169 -0
  18. package/dist/cjs/Carousel/style.less +232 -0
  19. package/dist/cjs/Collapse/index.d.ts +55 -0
  20. package/dist/cjs/Collapse/index.js +191 -0
  21. package/dist/cjs/Collapse/style.less +217 -0
  22. package/dist/cjs/Descriptions/index.d.ts +54 -0
  23. package/dist/cjs/Descriptions/index.js +181 -0
  24. package/dist/cjs/Descriptions/style.less +259 -0
  25. package/dist/cjs/Drawer/index.d.ts +57 -0
  26. package/dist/cjs/Drawer/index.js +203 -0
  27. package/dist/cjs/Drawer/style.less +215 -0
  28. package/dist/cjs/Empty/index.d.ts +21 -0
  29. package/dist/cjs/Empty/index.js +115 -0
  30. package/dist/cjs/Empty/style.less +103 -0
  31. package/dist/cjs/FloatButton/index.d.ts +54 -0
  32. package/dist/cjs/FloatButton/index.js +119 -0
  33. package/dist/cjs/FloatButton/style.less +266 -0
  34. package/dist/cjs/Image/index.d.ts +30 -0
  35. package/dist/cjs/Image/index.js +153 -0
  36. package/dist/cjs/Image/style.less +156 -0
  37. package/dist/cjs/Input/index.d.ts +24 -0
  38. package/dist/cjs/Input/index.js +158 -0
  39. package/dist/cjs/Input/style.less +276 -0
  40. package/dist/cjs/InputNumber/index.d.ts +47 -0
  41. package/dist/cjs/InputNumber/index.js +323 -0
  42. package/dist/cjs/InputNumber/style.less +392 -0
  43. package/dist/cjs/Mentions/index.d.ts +57 -0
  44. package/dist/cjs/Mentions/index.js +378 -0
  45. package/dist/cjs/Mentions/style.less +297 -0
  46. package/dist/cjs/Message/index.d.ts +38 -0
  47. package/dist/cjs/Message/index.js +292 -0
  48. package/dist/cjs/Message/style.less +183 -0
  49. package/dist/cjs/Modal/index.d.ts +63 -0
  50. package/dist/cjs/Modal/index.js +254 -0
  51. package/dist/cjs/Modal/style.less +298 -0
  52. package/dist/cjs/Notification/index.d.ts +48 -0
  53. package/dist/cjs/Notification/index.js +340 -0
  54. package/dist/cjs/Notification/style.less +260 -0
  55. package/dist/cjs/Popconfirm/index.d.ts +58 -0
  56. package/dist/cjs/Popconfirm/index.js +393 -0
  57. package/dist/cjs/Popconfirm/style.less +417 -0
  58. package/dist/cjs/Popover/index.d.ts +30 -0
  59. package/dist/cjs/Popover/index.js +131 -0
  60. package/dist/cjs/Popover/style.less +279 -0
  61. package/dist/cjs/Progress/index.d.ts +43 -0
  62. package/dist/cjs/Progress/index.js +213 -0
  63. package/dist/cjs/Progress/style.less +206 -0
  64. package/dist/cjs/QRCode/index.d.ts +30 -0
  65. package/dist/cjs/QRCode/index.js +167 -0
  66. package/dist/cjs/QRCode/style.less +201 -0
  67. package/dist/cjs/Radio/index.d.ts +70 -0
  68. package/dist/cjs/Radio/index.js +199 -0
  69. package/dist/cjs/Radio/style.less +326 -0
  70. package/dist/cjs/Rate/index.d.ts +37 -0
  71. package/dist/cjs/Rate/index.js +151 -0
  72. package/dist/cjs/Rate/style.less +170 -0
  73. package/dist/cjs/Result/index.d.ts +25 -0
  74. package/dist/cjs/Result/index.js +63 -0
  75. package/dist/cjs/Result/style.less +111 -0
  76. package/dist/cjs/Segmented/index.d.ts +31 -0
  77. package/dist/cjs/Segmented/index.js +121 -0
  78. package/dist/cjs/Segmented/style.less +167 -0
  79. package/dist/cjs/Select/index.d.ts +67 -0
  80. package/dist/cjs/Select/index.js +403 -0
  81. package/dist/cjs/Select/style.less +523 -0
  82. package/dist/cjs/Skeleton/index.d.ts +88 -0
  83. package/dist/cjs/Skeleton/index.js +207 -0
  84. package/dist/cjs/Skeleton/style.less +487 -0
  85. package/dist/cjs/Slider/index.d.ts +41 -0
  86. package/dist/cjs/Slider/index.js +325 -0
  87. package/dist/cjs/Slider/style.less +287 -0
  88. package/dist/cjs/Spin/index.d.ts +25 -0
  89. package/dist/cjs/Spin/index.js +98 -0
  90. package/dist/cjs/Spin/style.less +169 -0
  91. package/dist/cjs/Statistic/index.d.ts +26 -0
  92. package/dist/cjs/Statistic/index.js +71 -0
  93. package/dist/cjs/Statistic/style.less +94 -0
  94. package/dist/cjs/Switch/index.d.ts +28 -0
  95. package/dist/cjs/Switch/index.js +71 -0
  96. package/dist/cjs/Switch/style.less +212 -0
  97. package/dist/cjs/Table/index.d.ts +188 -0
  98. package/dist/cjs/Table/index.js +787 -0
  99. package/dist/cjs/Table/style.less +663 -0
  100. package/dist/cjs/Tag/index.d.ts +51 -0
  101. package/dist/cjs/Tag/index.js +142 -0
  102. package/dist/cjs/Tag/style.less +356 -0
  103. package/dist/cjs/TimePicker/index.d.ts +51 -0
  104. package/dist/cjs/TimePicker/index.js +332 -0
  105. package/dist/cjs/TimePicker/style.less +384 -0
  106. package/dist/cjs/Timeline/index.d.ts +47 -0
  107. package/dist/cjs/Timeline/index.js +127 -0
  108. package/dist/cjs/Timeline/style.less +265 -0
  109. package/dist/cjs/Tooltip/index.d.ts +53 -0
  110. package/dist/cjs/Tooltip/index.js +468 -0
  111. package/dist/cjs/Tooltip/style.less +237 -0
  112. package/dist/cjs/Transfer/index.d.ts +52 -0
  113. package/dist/cjs/Transfer/index.js +344 -0
  114. package/dist/cjs/Transfer/style.less +331 -0
  115. package/dist/cjs/Tree/index.d.ts +82 -0
  116. package/dist/cjs/Tree/index.js +226 -0
  117. package/dist/cjs/Tree/style.less +313 -0
  118. package/dist/cjs/TreeSelect/index.d.ts +54 -0
  119. package/dist/cjs/TreeSelect/index.js +373 -0
  120. package/dist/cjs/TreeSelect/style.less +471 -0
  121. package/dist/cjs/Upload/index.d.ts +65 -0
  122. package/dist/cjs/Upload/index.js +517 -0
  123. package/dist/cjs/Upload/style.less +424 -0
  124. package/dist/cjs/Watermark/index.d.ts +41 -0
  125. package/dist/cjs/Watermark/index.js +353 -0
  126. package/dist/cjs/Watermark/style.less +31 -0
  127. package/dist/cjs/index.d.ts +84 -0
  128. package/dist/cjs/index.js +318 -0
  129. package/dist/esm/Alert/index.d.ts +37 -0
  130. package/dist/esm/Alert/index.js +121 -0
  131. package/dist/esm/Alert/style.less +248 -0
  132. package/dist/esm/Avatar/index.d.ts +47 -0
  133. package/dist/esm/Avatar/index.js +142 -0
  134. package/dist/esm/Avatar/style.less +193 -0
  135. package/dist/esm/Badge/index.d.ts +48 -0
  136. package/dist/esm/Badge/index.js +137 -0
  137. package/dist/esm/Badge/style.less +237 -0
  138. package/dist/esm/Calendar/index.d.ts +33 -0
  139. package/dist/esm/Calendar/index.js +291 -0
  140. package/dist/esm/Calendar/style.less +384 -0
  141. package/dist/esm/Card/index.d.ts +68 -0
  142. package/dist/esm/Card/index.js +149 -0
  143. package/dist/esm/Card/style.less +356 -0
  144. package/dist/esm/Carousel/index.d.ts +33 -0
  145. package/dist/esm/Carousel/index.js +163 -0
  146. package/dist/esm/Carousel/style.less +232 -0
  147. package/dist/esm/Collapse/index.d.ts +55 -0
  148. package/dist/esm/Collapse/index.js +187 -0
  149. package/dist/esm/Collapse/style.less +217 -0
  150. package/dist/esm/Descriptions/index.d.ts +54 -0
  151. package/dist/esm/Descriptions/index.js +179 -0
  152. package/dist/esm/Descriptions/style.less +259 -0
  153. package/dist/esm/Drawer/index.d.ts +57 -0
  154. package/dist/esm/Drawer/index.js +202 -0
  155. package/dist/esm/Drawer/style.less +215 -0
  156. package/dist/esm/Empty/index.d.ts +21 -0
  157. package/dist/esm/Empty/index.js +109 -0
  158. package/dist/esm/Empty/style.less +103 -0
  159. package/dist/esm/FloatButton/index.d.ts +54 -0
  160. package/dist/esm/FloatButton/index.js +123 -0
  161. package/dist/esm/FloatButton/style.less +266 -0
  162. package/dist/esm/Image/index.d.ts +30 -0
  163. package/dist/esm/Image/index.js +149 -0
  164. package/dist/esm/Image/style.less +156 -0
  165. package/dist/esm/Input/index.d.ts +24 -0
  166. package/dist/esm/Input/index.js +151 -0
  167. package/dist/esm/Input/style.less +276 -0
  168. package/dist/esm/InputNumber/index.d.ts +47 -0
  169. package/dist/esm/InputNumber/index.js +316 -0
  170. package/dist/esm/InputNumber/style.less +392 -0
  171. package/dist/esm/Mentions/index.d.ts +57 -0
  172. package/dist/esm/Mentions/index.js +374 -0
  173. package/dist/esm/Mentions/style.less +297 -0
  174. package/dist/esm/Message/index.d.ts +38 -0
  175. package/dist/esm/Message/index.js +294 -0
  176. package/dist/esm/Message/style.less +183 -0
  177. package/dist/esm/Modal/index.d.ts +63 -0
  178. package/dist/esm/Modal/index.js +251 -0
  179. package/dist/esm/Modal/style.less +298 -0
  180. package/dist/esm/Notification/index.d.ts +48 -0
  181. package/dist/esm/Notification/index.js +345 -0
  182. package/dist/esm/Notification/style.less +260 -0
  183. package/dist/esm/Popconfirm/index.d.ts +58 -0
  184. package/dist/esm/Popconfirm/index.js +389 -0
  185. package/dist/esm/Popconfirm/style.less +417 -0
  186. package/dist/esm/Popover/index.d.ts +30 -0
  187. package/dist/esm/Popover/index.js +126 -0
  188. package/dist/esm/Popover/style.less +279 -0
  189. package/dist/esm/Progress/index.d.ts +43 -0
  190. package/dist/esm/Progress/index.js +208 -0
  191. package/dist/esm/Progress/style.less +206 -0
  192. package/dist/esm/QRCode/index.d.ts +30 -0
  193. package/dist/esm/QRCode/index.js +158 -0
  194. package/dist/esm/QRCode/style.less +201 -0
  195. package/dist/esm/Radio/index.d.ts +70 -0
  196. package/dist/esm/Radio/index.js +193 -0
  197. package/dist/esm/Radio/style.less +326 -0
  198. package/dist/esm/Rate/index.d.ts +37 -0
  199. package/dist/esm/Rate/index.js +143 -0
  200. package/dist/esm/Rate/style.less +170 -0
  201. package/dist/esm/Result/index.d.ts +25 -0
  202. package/dist/esm/Result/index.js +57 -0
  203. package/dist/esm/Result/style.less +111 -0
  204. package/dist/esm/Segmented/index.d.ts +31 -0
  205. package/dist/esm/Segmented/index.js +113 -0
  206. package/dist/esm/Segmented/style.less +167 -0
  207. package/dist/esm/Select/index.d.ts +67 -0
  208. package/dist/esm/Select/index.js +398 -0
  209. package/dist/esm/Select/style.less +523 -0
  210. package/dist/esm/Skeleton/index.d.ts +88 -0
  211. package/dist/esm/Skeleton/index.js +213 -0
  212. package/dist/esm/Skeleton/style.less +487 -0
  213. package/dist/esm/Slider/index.d.ts +41 -0
  214. package/dist/esm/Slider/index.js +318 -0
  215. package/dist/esm/Slider/style.less +287 -0
  216. package/dist/esm/Spin/index.d.ts +25 -0
  217. package/dist/esm/Spin/index.js +95 -0
  218. package/dist/esm/Spin/style.less +169 -0
  219. package/dist/esm/Statistic/index.d.ts +26 -0
  220. package/dist/esm/Statistic/index.js +65 -0
  221. package/dist/esm/Statistic/style.less +94 -0
  222. package/dist/esm/Switch/index.d.ts +28 -0
  223. package/dist/esm/Switch/index.js +63 -0
  224. package/dist/esm/Switch/style.less +212 -0
  225. package/dist/esm/Table/index.d.ts +188 -0
  226. package/dist/esm/Table/index.js +797 -0
  227. package/dist/esm/Table/style.less +663 -0
  228. package/dist/esm/Tag/index.d.ts +51 -0
  229. package/dist/esm/Tag/index.js +144 -0
  230. package/dist/esm/Tag/style.less +356 -0
  231. package/dist/esm/TimePicker/index.d.ts +51 -0
  232. package/dist/esm/TimePicker/index.js +327 -0
  233. package/dist/esm/TimePicker/style.less +384 -0
  234. package/dist/esm/Timeline/index.d.ts +47 -0
  235. package/dist/esm/Timeline/index.js +130 -0
  236. package/dist/esm/Timeline/style.less +265 -0
  237. package/dist/esm/Tooltip/index.d.ts +53 -0
  238. package/dist/esm/Tooltip/index.js +471 -0
  239. package/dist/esm/Tooltip/style.less +237 -0
  240. package/dist/esm/Transfer/index.d.ts +52 -0
  241. package/dist/esm/Transfer/index.js +340 -0
  242. package/dist/esm/Transfer/style.less +331 -0
  243. package/dist/esm/Tree/index.d.ts +82 -0
  244. package/dist/esm/Tree/index.js +225 -0
  245. package/dist/esm/Tree/style.less +313 -0
  246. package/dist/esm/TreeSelect/index.d.ts +54 -0
  247. package/dist/esm/TreeSelect/index.js +369 -0
  248. package/dist/esm/TreeSelect/style.less +471 -0
  249. package/dist/esm/Upload/index.d.ts +65 -0
  250. package/dist/esm/Upload/index.js +513 -0
  251. package/dist/esm/Upload/style.less +424 -0
  252. package/dist/esm/Watermark/index.d.ts +41 -0
  253. package/dist/esm/Watermark/index.js +349 -0
  254. package/dist/esm/Watermark/style.less +31 -0
  255. package/dist/esm/index.d.ts +84 -0
  256. package/dist/esm/index.js +43 -1
  257. package/package.json +6 -3
@@ -0,0 +1,298 @@
1
+ // Modal 对话框组件样式
2
+
3
+ @prefix: kage-modal;
4
+
5
+ // 颜色变量
6
+ @modal-bg: #fff;
7
+ @modal-mask-bg: rgba(0, 0, 0, 0.45);
8
+ @modal-border-color: rgba(0, 0, 0, 0.06);
9
+ @modal-title-color: rgba(0, 0, 0, 0.85);
10
+ @modal-text-color: rgba(0, 0, 0, 0.65);
11
+ @modal-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),
12
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
13
+
14
+ // ============ 遮罩层 ============
15
+ .@{prefix}-mask {
16
+ position: fixed;
17
+ top: 0;
18
+ left: 0;
19
+ right: 0;
20
+ bottom: 0;
21
+ background-color: @modal-mask-bg;
22
+ opacity: 0;
23
+ visibility: hidden;
24
+ transition: opacity 0.3s, visibility 0.3s;
25
+
26
+ &-open {
27
+ opacity: 1;
28
+ visibility: visible;
29
+ }
30
+ }
31
+
32
+ // ============ Modal 主体 ============
33
+ .@{prefix} {
34
+ position: fixed;
35
+ top: 0;
36
+ left: 0;
37
+ right: 0;
38
+ bottom: 0;
39
+ z-index: 1000;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ pointer-events: none;
44
+ opacity: 0;
45
+ transition: opacity 0.3s;
46
+
47
+ &-open {
48
+ opacity: 1;
49
+ pointer-events: auto;
50
+ }
51
+
52
+ &-centered {
53
+ align-items: center;
54
+ }
55
+
56
+ * {
57
+ box-sizing: border-box;
58
+ }
59
+ }
60
+
61
+ // ============ Modal 包装器 ============
62
+ .@{prefix}-wrap {
63
+ position: relative;
64
+ max-width: calc(100vw - 32px);
65
+ max-height: calc(100vh - 32px);
66
+ margin: 0 auto;
67
+ background-color: @modal-bg;
68
+ border-radius: 8px;
69
+ box-shadow: @modal-shadow;
70
+ transform: scale(0.9);
71
+ transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
72
+ pointer-events: auto;
73
+ display: flex;
74
+ flex-direction: column;
75
+ overflow: hidden;
76
+ }
77
+
78
+ .@{prefix}-open .@{prefix}-wrap {
79
+ transform: scale(1);
80
+ }
81
+
82
+ // ============ 头部 ============
83
+ .@{prefix}-header {
84
+ position: relative;
85
+ display: flex;
86
+ align-items: center;
87
+ padding: 16px 24px;
88
+ border-bottom: 1px solid @modal-border-color;
89
+ flex-shrink: 0;
90
+ }
91
+
92
+ .@{prefix}-title {
93
+ flex: 1;
94
+ margin: 0;
95
+ color: @modal-title-color;
96
+ font-size: 16px;
97
+ font-weight: 500;
98
+ line-height: 1.5;
99
+ overflow: hidden;
100
+ text-overflow: ellipsis;
101
+ white-space: nowrap;
102
+ }
103
+
104
+ // ============ 关闭按钮 ============
105
+ .@{prefix}-close {
106
+ position: absolute;
107
+ top: 0;
108
+ right: 0;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ width: 56px;
113
+ height: 56px;
114
+ padding: 0;
115
+ margin: 0;
116
+ color: rgba(0, 0, 0, 0.45);
117
+ font-size: 16px;
118
+ line-height: 1;
119
+ text-align: center;
120
+ background: transparent;
121
+ border: none;
122
+ border-radius: 0;
123
+ cursor: pointer;
124
+ transition: all 0.2s;
125
+
126
+ &:hover {
127
+ color: rgba(0, 0, 0, 0.85);
128
+ background-color: rgba(0, 0, 0, 0.06);
129
+ }
130
+
131
+ &:active {
132
+ background-color: rgba(0, 0, 0, 0.1);
133
+ }
134
+ }
135
+
136
+ // ============ 内容区域 ============
137
+ .@{prefix}-body {
138
+ flex: 1;
139
+ padding: 24px;
140
+ overflow: auto;
141
+ color: @modal-text-color;
142
+ font-size: 14px;
143
+ line-height: 1.5715;
144
+ }
145
+
146
+ // ============ 底部 ============
147
+ .@{prefix}-footer-wrapper {
148
+ padding: 10px 16px;
149
+ border-top: 1px solid @modal-border-color;
150
+ flex-shrink: 0;
151
+ }
152
+
153
+ .@{prefix}-footer {
154
+ display: flex;
155
+ justify-content: flex-end;
156
+ gap: 8px;
157
+ }
158
+
159
+ .@{prefix}-ok-btn,
160
+ .@{prefix}-cancel-btn {
161
+ padding: 4px 15px;
162
+ font-size: 14px;
163
+ line-height: 1.5715;
164
+ border-radius: 6px;
165
+ cursor: pointer;
166
+ transition: all 0.2s;
167
+ border: 1px solid #d9d9d9;
168
+ background: #fff;
169
+ color: rgba(0, 0, 0, 0.85);
170
+
171
+ &:hover {
172
+ color: #1890ff;
173
+ border-color: #1890ff;
174
+ }
175
+
176
+ &:active {
177
+ color: #0958d9;
178
+ border-color: #0958d9;
179
+ }
180
+
181
+ &:disabled {
182
+ color: rgba(0, 0, 0, 0.25);
183
+ background: #f5f5f5;
184
+ border-color: #d9d9d9;
185
+ cursor: not-allowed;
186
+
187
+ &:hover {
188
+ color: rgba(0, 0, 0, 0.25);
189
+ border-color: #d9d9d9;
190
+ }
191
+ }
192
+ }
193
+
194
+ .@{prefix}-ok-btn {
195
+ background: #1890ff;
196
+ border-color: #1890ff;
197
+ color: #fff;
198
+
199
+ &:hover {
200
+ background: #40a9ff;
201
+ border-color: #40a9ff;
202
+ color: #fff;
203
+ }
204
+
205
+ &:active {
206
+ background: #0958d9;
207
+ border-color: #0958d9;
208
+ color: #fff;
209
+ }
210
+
211
+ &:disabled {
212
+ background: #f5f5f5;
213
+ border-color: #d9d9d9;
214
+ color: rgba(0, 0, 0, 0.25);
215
+ }
216
+ }
217
+
218
+ // ============ 暗色模式适配 ============
219
+ [data-theme='dark'],
220
+ [data-prefers-color-scheme='dark'],
221
+ [data-prefers-color='dark'],
222
+ html.dark,
223
+ body.dark,
224
+ .dark {
225
+ .@{prefix}-mask {
226
+ background-color: rgba(0, 0, 0, 0.65);
227
+ }
228
+
229
+ .@{prefix}-wrap {
230
+ background-color: #1f1f1f;
231
+ box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.48), 0 3px 6px -4px rgba(0, 0, 0, 0.32),
232
+ 0 9px 28px 8px rgba(0, 0, 0, 0.2);
233
+ }
234
+
235
+ .@{prefix}-header {
236
+ border-bottom-color: rgba(255, 255, 255, 0.1);
237
+ }
238
+
239
+ .@{prefix}-title {
240
+ color: rgba(255, 255, 255, 0.85);
241
+ }
242
+
243
+ .@{prefix}-close {
244
+ color: rgba(255, 255, 255, 0.45);
245
+
246
+ &:hover {
247
+ color: rgba(255, 255, 255, 0.85);
248
+ background-color: rgba(255, 255, 255, 0.08);
249
+ }
250
+
251
+ &:active {
252
+ background-color: rgba(255, 255, 255, 0.12);
253
+ }
254
+ }
255
+
256
+ .@{prefix}-body {
257
+ color: rgba(255, 255, 255, 0.65);
258
+ }
259
+
260
+ .@{prefix}-footer-wrapper {
261
+ border-top-color: rgba(255, 255, 255, 0.1);
262
+ }
263
+
264
+ .@{prefix}-cancel-btn {
265
+ background: #1f1f1f;
266
+ border-color: rgba(255, 255, 255, 0.3);
267
+ color: rgba(255, 255, 255, 0.85);
268
+
269
+ &:hover {
270
+ color: #1890ff;
271
+ border-color: #1890ff;
272
+ }
273
+
274
+ &:disabled {
275
+ background: rgba(255, 255, 255, 0.08);
276
+ border-color: rgba(255, 255, 255, 0.15);
277
+ color: rgba(255, 255, 255, 0.25);
278
+ }
279
+ }
280
+
281
+ .@{prefix}-ok-btn {
282
+ background: #1890ff;
283
+ border-color: #1890ff;
284
+ color: #fff;
285
+
286
+ &:hover {
287
+ background: #40a9ff;
288
+ border-color: #40a9ff;
289
+ }
290
+
291
+ &:disabled {
292
+ background: rgba(255, 255, 255, 0.08);
293
+ border-color: rgba(255, 255, 255, 0.15);
294
+ color: rgba(255, 255, 255, 0.25);
295
+ }
296
+ }
297
+ }
298
+
@@ -0,0 +1,48 @@
1
+ import React, { ReactNode, CSSProperties } from 'react';
2
+ import './style.less';
3
+ /** Notification 类型 */
4
+ export type NotificationType = 'success' | 'info' | 'warning' | 'error';
5
+ /** Notification 位置 */
6
+ export type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
7
+ /** Notification 配置 */
8
+ export interface NotificationConfig {
9
+ /** 通知标题 */
10
+ message?: ReactNode;
11
+ /** 通知内容 */
12
+ description?: ReactNode;
13
+ /** 通知类型 */
14
+ type?: NotificationType;
15
+ /** 自动关闭的延时,单位秒。设为 0 时不自动关闭 */
16
+ duration?: number;
17
+ /** 自定义图标 */
18
+ icon?: ReactNode;
19
+ /** 自定义关闭图标 */
20
+ closeIcon?: ReactNode;
21
+ /** 是否显示关闭按钮 */
22
+ closable?: boolean;
23
+ /** 自定义类名 */
24
+ className?: string;
25
+ /** 自定义样式 */
26
+ style?: CSSProperties;
27
+ /** 关闭时的回调 */
28
+ onClose?: () => void;
29
+ /** 通知唯一标识 */
30
+ key?: string | number;
31
+ /** 通知位置 */
32
+ placement?: NotificationPlacement;
33
+ }
34
+ /** Notification API */
35
+ export interface NotificationApi {
36
+ success: (config: NotificationConfig | ReactNode, description?: ReactNode) => void;
37
+ error: (config: NotificationConfig | ReactNode, description?: ReactNode) => void;
38
+ info: (config: NotificationConfig | ReactNode, description?: ReactNode) => void;
39
+ warning: (config: NotificationConfig | ReactNode, description?: ReactNode) => void;
40
+ open: (config: NotificationConfig) => void;
41
+ destroy: (key?: string | number) => void;
42
+ close: (key: string | number) => void;
43
+ }
44
+ declare const NotificationContainer: React.FC;
45
+ export declare const Notification: NotificationApi & {
46
+ Container: typeof NotificationContainer;
47
+ };
48
+ export default Notification;
@@ -0,0 +1,345 @@
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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
3
+ 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."); }
4
+ 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); }
5
+ 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; }
6
+ 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; } }
7
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
+ 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; }
9
+ 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; }
10
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
12
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
13
+ 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; }
14
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
15
+ 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); }
16
+ import React, { useState, useEffect } from 'react';
17
+ import "./style.less";
18
+
19
+ // ============ 类型定义 ============
20
+
21
+ /** Notification 类型 */
22
+
23
+ /** Notification 位置 */
24
+
25
+ /** Notification 配置 */
26
+
27
+ /** Notification 实例 */
28
+
29
+ /** Notification API */
30
+ import { jsx as _jsx } from "react/jsx-runtime";
31
+ import { Fragment as _Fragment } from "react/jsx-runtime";
32
+ import { jsxs as _jsxs } from "react/jsx-runtime";
33
+ // ============ 默认图标 ============
34
+ var defaultIcons = {
35
+ success: '✓',
36
+ info: 'ℹ',
37
+ warning: '⚠',
38
+ error: '✕'
39
+ };
40
+
41
+ // ============ Notification 管理器 ============
42
+ var NotificationManager = /*#__PURE__*/function () {
43
+ function NotificationManager() {
44
+ _classCallCheck(this, NotificationManager);
45
+ _defineProperty(this, "instances", []);
46
+ _defineProperty(this, "listeners", new Set());
47
+ _defineProperty(this, "keyCounter", 0);
48
+ _defineProperty(this, "placement", 'topRight');
49
+ }
50
+ _createClass(NotificationManager, [{
51
+ key: "subscribe",
52
+ value: function subscribe(listener) {
53
+ var _this = this;
54
+ this.listeners.add(listener);
55
+ return function () {
56
+ _this.listeners.delete(listener);
57
+ };
58
+ }
59
+ }, {
60
+ key: "notify",
61
+ value: function notify() {
62
+ this.listeners.forEach(function (listener) {
63
+ return listener();
64
+ });
65
+ }
66
+ }, {
67
+ key: "setPlacement",
68
+ value: function setPlacement(placement) {
69
+ this.placement = placement;
70
+ }
71
+ }, {
72
+ key: "add",
73
+ value: function add(config) {
74
+ var _config$key,
75
+ _config$placement,
76
+ _this2 = this;
77
+ var key = (_config$key = config.key) !== null && _config$key !== void 0 ? _config$key : "notification-".concat(++this.keyCounter);
78
+ var instance = _objectSpread(_objectSpread({}, config), {}, {
79
+ key: key,
80
+ visible: true,
81
+ closing: false,
82
+ placement: (_config$placement = config.placement) !== null && _config$placement !== void 0 ? _config$placement : this.placement,
83
+ closable: config.closable !== undefined ? config.closable : true
84
+ });
85
+ this.instances.push(instance);
86
+ this.notify();
87
+
88
+ // 自动关闭
89
+ if (instance.duration !== 0) {
90
+ var _instance$duration;
91
+ var duration = (_instance$duration = instance.duration) !== null && _instance$duration !== void 0 ? _instance$duration : 4.5;
92
+ setTimeout(function () {
93
+ _this2.remove(key);
94
+ }, duration * 1000);
95
+ }
96
+ return key;
97
+ }
98
+ }, {
99
+ key: "remove",
100
+ value: function remove(key) {
101
+ var _this3 = this;
102
+ var instance = this.instances.find(function (item) {
103
+ return item.key === key;
104
+ });
105
+ if (!instance) return;
106
+ instance.closing = true;
107
+ this.notify();
108
+
109
+ // 等待动画完成
110
+ setTimeout(function () {
111
+ var index = _this3.instances.findIndex(function (item) {
112
+ return item.key === key;
113
+ });
114
+ if (index > -1) {
115
+ var _instance$onClose;
116
+ _this3.instances.splice(index, 1);
117
+ _this3.notify();
118
+ (_instance$onClose = instance.onClose) === null || _instance$onClose === void 0 || _instance$onClose.call(instance);
119
+ }
120
+ }, 300);
121
+ }
122
+ }, {
123
+ key: "destroy",
124
+ value: function destroy(key) {
125
+ var _this4 = this;
126
+ if (key) {
127
+ this.remove(key);
128
+ } else {
129
+ this.instances.forEach(function (instance) {
130
+ instance.closing = true;
131
+ });
132
+ this.notify();
133
+ setTimeout(function () {
134
+ _this4.instances.forEach(function (instance) {
135
+ var _instance$onClose2;
136
+ (_instance$onClose2 = instance.onClose) === null || _instance$onClose2 === void 0 || _instance$onClose2.call(instance);
137
+ });
138
+ _this4.instances = [];
139
+ _this4.notify();
140
+ }, 300);
141
+ }
142
+ }
143
+ }, {
144
+ key: "getInstances",
145
+ value: function getInstances() {
146
+ return this.instances;
147
+ }
148
+ }]);
149
+ return NotificationManager;
150
+ }();
151
+ var notificationManager = new NotificationManager();
152
+
153
+ // ============ Notification 容器组件 ============
154
+ var NotificationContainer = function NotificationContainer() {
155
+ var _useState = useState({}),
156
+ _useState2 = _slicedToArray(_useState, 2),
157
+ forceUpdate = _useState2[1];
158
+ useEffect(function () {
159
+ var unsubscribe = notificationManager.subscribe(function () {
160
+ forceUpdate({});
161
+ });
162
+ return unsubscribe;
163
+ }, []);
164
+ var instances = notificationManager.getInstances();
165
+ if (instances.length === 0) {
166
+ return null;
167
+ }
168
+
169
+ // 按位置分组
170
+ var groupedInstances = {
171
+ topLeft: [],
172
+ topRight: [],
173
+ bottomLeft: [],
174
+ bottomRight: []
175
+ };
176
+ instances.forEach(function (instance) {
177
+ var _instance$placement;
178
+ var placement = (_instance$placement = instance.placement) !== null && _instance$placement !== void 0 ? _instance$placement : 'topRight';
179
+ groupedInstances[placement].push(instance);
180
+ });
181
+ return /*#__PURE__*/_jsx(_Fragment, {
182
+ children: Object.entries(groupedInstances).map(function (_ref) {
183
+ var _ref2 = _slicedToArray(_ref, 2),
184
+ placement = _ref2[0],
185
+ placementInstances = _ref2[1];
186
+ if (placementInstances.length === 0) return null;
187
+ return /*#__PURE__*/_jsx("div", {
188
+ className: "kage-notification-container kage-notification-".concat(placement),
189
+ children: placementInstances.map(function (instance) {
190
+ return /*#__PURE__*/_jsx(NotificationItem, {
191
+ instance: instance
192
+ }, instance.key);
193
+ })
194
+ }, placement);
195
+ })
196
+ });
197
+ };
198
+
199
+ // ============ Notification 项组件 ============
200
+ var NotificationItem = function NotificationItem(_ref3) {
201
+ var instance = _ref3.instance;
202
+ var message = instance.message,
203
+ description = instance.description,
204
+ _instance$type = instance.type,
205
+ type = _instance$type === void 0 ? 'info' : _instance$type,
206
+ icon = instance.icon,
207
+ closeIcon = instance.closeIcon,
208
+ _instance$closable = instance.closable,
209
+ closable = _instance$closable === void 0 ? true : _instance$closable,
210
+ _instance$className = instance.className,
211
+ className = _instance$className === void 0 ? '' : _instance$className,
212
+ style = instance.style,
213
+ closing = instance.closing,
214
+ visible = instance.visible,
215
+ key = instance.key;
216
+ if (!visible && !closing) {
217
+ return null;
218
+ }
219
+ var classNames = ['kage-notification', "kage-notification-".concat(type), closing && 'kage-notification-closing', className].filter(Boolean).join(' ');
220
+ var iconNode = icon || defaultIcons[type];
221
+ var handleClose = function handleClose() {
222
+ notificationManager.remove(key);
223
+ };
224
+ return /*#__PURE__*/_jsx("div", {
225
+ className: classNames,
226
+ style: style,
227
+ children: /*#__PURE__*/_jsxs("div", {
228
+ className: "kage-notification-content",
229
+ children: [iconNode && /*#__PURE__*/_jsx("span", {
230
+ className: "kage-notification-icon",
231
+ children: iconNode
232
+ }), /*#__PURE__*/_jsxs("div", {
233
+ className: "kage-notification-body",
234
+ children: [message && /*#__PURE__*/_jsx("div", {
235
+ className: "kage-notification-message",
236
+ children: message
237
+ }), description && /*#__PURE__*/_jsx("div", {
238
+ className: "kage-notification-description",
239
+ children: description
240
+ })]
241
+ }), closable && /*#__PURE__*/_jsx("button", {
242
+ type: "button",
243
+ className: "kage-notification-close-icon",
244
+ onClick: handleClose,
245
+ "aria-label": "\u5173\u95ED",
246
+ children: closeIcon || '×'
247
+ })]
248
+ })
249
+ });
250
+ };
251
+
252
+ // ============ Notification API ============
253
+ var normalizeConfig = function normalizeConfig(config, description) {
254
+ if (_typeof(config) === 'object' && config !== null && 'message' in config) {
255
+ return config;
256
+ }
257
+ return {
258
+ message: config,
259
+ description: description
260
+ };
261
+ };
262
+ var notificationApi = {
263
+ success: function success(config, description) {
264
+ var normalized = normalizeConfig(config, description);
265
+ notificationManager.add(_objectSpread(_objectSpread({}, normalized), {}, {
266
+ type: 'success'
267
+ }));
268
+ },
269
+ error: function error(config, description) {
270
+ var normalized = normalizeConfig(config, description);
271
+ notificationManager.add(_objectSpread(_objectSpread({}, normalized), {}, {
272
+ type: 'error'
273
+ }));
274
+ },
275
+ info: function info(config, description) {
276
+ var normalized = normalizeConfig(config, description);
277
+ notificationManager.add(_objectSpread(_objectSpread({}, normalized), {}, {
278
+ type: 'info'
279
+ }));
280
+ },
281
+ warning: function warning(config, description) {
282
+ var normalized = normalizeConfig(config, description);
283
+ notificationManager.add(_objectSpread(_objectSpread({}, normalized), {}, {
284
+ type: 'warning'
285
+ }));
286
+ },
287
+ open: function open(config) {
288
+ notificationManager.add(config);
289
+ },
290
+ destroy: function destroy(key) {
291
+ notificationManager.destroy(key);
292
+ },
293
+ close: function close(key) {
294
+ notificationManager.remove(key);
295
+ }
296
+ };
297
+
298
+ // ============ Notification 组件 ============
299
+ export var Notification = {};
300
+
301
+ // 将 API 方法挂载到组件上
302
+ Object.assign(Notification, notificationApi);
303
+ Notification.Container = NotificationContainer;
304
+
305
+ // 初始化容器(延迟执行,避免 SSR 问题)
306
+ var containerElement = null;
307
+ var containerMounted = false;
308
+ var getContainer = function getContainer() {
309
+ if (!containerElement && typeof document !== 'undefined') {
310
+ containerElement = document.createElement('div');
311
+ containerElement.className = 'kage-notification-root';
312
+ document.body.appendChild(containerElement);
313
+ }
314
+ return containerElement;
315
+ };
316
+
317
+ // 延迟初始化容器组件
318
+ var initContainer = function initContainer() {
319
+ if (containerMounted || typeof document === 'undefined') return;
320
+ containerMounted = true;
321
+ var container = getContainer();
322
+ try {
323
+ var _React = require('react');
324
+ var ReactDOM = require('react-dom');
325
+ if (ReactDOM.createRoot) {
326
+ // React 18
327
+ ReactDOM.createRoot(container).render(_React.createElement(NotificationContainer));
328
+ } else if (ReactDOM.render) {
329
+ // React 17
330
+ ReactDOM.render(_React.createElement(NotificationContainer), container);
331
+ }
332
+ } catch (e) {
333
+ // 静默失败,避免影响应用启动
334
+ }
335
+ };
336
+
337
+ // 在浏览器环境中初始化
338
+ if (typeof window !== 'undefined') {
339
+ if (document.readyState === 'complete' || document.readyState === 'interactive') {
340
+ setTimeout(initContainer, 0);
341
+ } else {
342
+ document.addEventListener('DOMContentLoaded', initContainer);
343
+ }
344
+ }
345
+ export default Notification;