@topthink/components 1.0.57 → 1.0.58

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.
@@ -0,0 +1,356 @@
1
+ import{jsx as e}from"react/jsx-runtime";import"@toast-ui/editor/dist/toastui-editor-only.css";import"@toast-ui/editor/dist/i18n/zh-cn";import{Editor as t}from"@toast-ui/react-editor";import{useRef as i}from"react";import o from"styled-components";function r(o){const{value:r,onChange:a,placeholder:g,autofocus:d,options:l}=o,{editType:s="wysiwyg",outputType:p="markdown",onUpload:c}=l,I=i(null),m={};return c&&(m.addImageBlobHook=async(e,t)=>{t(await c(e))}),e(n,{children:e(t,{ref:I,placeholder:g,usageStatistics:!1,hooks:m,autofocus:d,linkAttributes:{target:"_blank"},onChange:()=>{const e=I.current?.getInstance();e&&a("markdown"===p?e.getMarkdown():e.getHTML())},language:"zh-CN",initialValue:r,previewStyle:"vertical",height:"600px",initialEditType:s})})}const n=o.div`
2
+ .ProseMirror {
3
+ position: relative;
4
+ word-wrap: break-word;
5
+ white-space: break-spaces;
6
+ -webkit-font-variant-ligatures: none;
7
+ font-variant-ligatures: none;
8
+ font-feature-settings: "liga" 0;
9
+ font-size: 15px;
10
+ overflow-y: auto;
11
+ overflow-X: hidden;
12
+ height: 100%;
13
+
14
+ &:focus {
15
+ outline: none;
16
+ }
17
+
18
+ pre {
19
+ white-space: pre-wrap;
20
+ }
21
+
22
+ li {
23
+ position: relative;
24
+ }
25
+
26
+ .placeholder {
27
+ color: #999;
28
+ }
29
+ }
30
+
31
+ .ProseMirror-hideselection *::selection {
32
+ background: transparent;
33
+ }
34
+
35
+ .ProseMirror-hideselection *::-moz-selection {
36
+ background: transparent;
37
+ }
38
+
39
+ .ProseMirror-hideselection {
40
+ caret-color: transparent;
41
+ }
42
+
43
+ .ProseMirror-selectednode {
44
+ outline: 2px solid #8cf;
45
+ }
46
+
47
+ /* Make sure li selections wrap around markers */
48
+
49
+ li.ProseMirror-selectednode {
50
+ outline: none;
51
+ }
52
+
53
+ li.ProseMirror-selectednode:after {
54
+ content: "";
55
+ position: absolute;
56
+ left: -32px;
57
+ right: -2px;
58
+ top: -2px;
59
+ bottom: -2px;
60
+ border: 2px solid #8cf;
61
+ pointer-events: none;
62
+ }
63
+
64
+ /* Protect against generic img rules */
65
+
66
+ img.ProseMirror-separator {
67
+ display: inline !important;
68
+ border: none !important;
69
+ margin: 0 !important;
70
+ }
71
+
72
+
73
+ .ProseMirror-selectednode {
74
+ outline: none;
75
+ }
76
+
77
+ table.ProseMirror-selectednode {
78
+ border-radius: 2px;
79
+ outline: 2px solid #00a9ff;
80
+ }
81
+
82
+ .html-block.ProseMirror-selectednode {
83
+ border-radius: 2px;
84
+ outline: 2px solid #00a9ff;
85
+ }
86
+
87
+ .toastui-editor-pseudo-clipboard {
88
+ position: fixed;
89
+ opacity: 0;
90
+ width: 0;
91
+ height: 0;
92
+ left: -1000px;
93
+ top: -1000px;
94
+ z-index: -1;
95
+ }
96
+
97
+ .toastui-editor-defaultUI {
98
+ font-family: inherit;
99
+
100
+ .ProseMirror {
101
+ height: 100%;
102
+ padding: 14px !important;
103
+ font-size: 1rem;
104
+ }
105
+
106
+ .toastui-editor-defaultUI-toolbar {
107
+ padding: 0 5px;
108
+ }
109
+
110
+ .toastui-editor-md-container {
111
+ .toastui-editor-md-preview {
112
+ padding: 5px 10px;
113
+
114
+ .toastui-editor-contents {
115
+ padding-top: 0;
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ .toastui-editor-contents {
122
+ -ms-text-size-adjust: 100%;
123
+ -webkit-text-size-adjust: 100%;
124
+ line-height: 1.2;
125
+ word-wrap: break-word;
126
+
127
+ & > *:first-child {
128
+ margin-top: 0 !important;
129
+ }
130
+
131
+ & > *:last-child {
132
+ margin-bottom: 0 !important;
133
+ }
134
+
135
+ h1, h2, h3, h4, h5, h6, p, ul, ol, blockquote, pre, table, audio, video {
136
+ margin: 1em 0;
137
+ line-height: 1.2;
138
+ padding: 0;
139
+
140
+ &:last-child {
141
+ margin-bottom: 0 !important;
142
+ }
143
+
144
+ &:first-child {
145
+ margin-top: 0 !important;
146
+ }
147
+ }
148
+
149
+ p {
150
+ margin-bottom: 1em;
151
+ line-height: 2;
152
+ }
153
+
154
+ h1, h2, h3, h4, h5, h6 {
155
+ font-weight: normal;
156
+
157
+ &.align-right {
158
+ text-align: right;
159
+ }
160
+
161
+ &.align-center {
162
+ text-align: center;
163
+ }
164
+ }
165
+
166
+ h1 {
167
+ font-size: 2em;
168
+ line-height: 1.2;
169
+ border-bottom: 1px solid #eeeeee;
170
+ padding-bottom: .5em;
171
+ }
172
+
173
+ h2 {
174
+ padding-bottom: .4em;
175
+ font-size: 1.3em;
176
+ line-height: 1.2;
177
+ border-bottom: 1px solid #eeeeee
178
+ }
179
+
180
+ h3 {
181
+ font-size: 1.2em;
182
+ line-height: 1.2;
183
+ }
184
+
185
+ h4 {
186
+ font-size: 1.1em;
187
+ line-height: 1.2;
188
+ }
189
+
190
+ h5 {
191
+ font-size: 1em;
192
+ line-height: 1.2;
193
+ }
194
+
195
+ hr {
196
+ border: 0;
197
+ border-bottom: 1px solid #eeeeee;
198
+ margin-bottom: 0.5em;
199
+ }
200
+
201
+ ul {
202
+ padding-left: 2em;
203
+
204
+ ul {
205
+ margin: 0;
206
+ }
207
+ }
208
+
209
+ ol {
210
+ padding-left: 2em;
211
+ }
212
+
213
+ li {
214
+ line-height: 2;
215
+
216
+ &.task-list-item {
217
+ list-style: none;
218
+ position: relative;
219
+
220
+ input[type=checkbox] {
221
+ position: absolute;
222
+ left: -1.5em;
223
+ top: 0.5em;
224
+ width: 1em;
225
+ height: 1em;
226
+ }
227
+ }
228
+ }
229
+
230
+ code {
231
+ display: inline-block;
232
+ border-radius: 4px;
233
+ padding: .2em .4em;
234
+ background-color: #f7f7f7;
235
+ word-break: break-all;
236
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
237
+ white-space: pre;
238
+ line-height: 1.3;
239
+ margin: -.2em .4em;
240
+ }
241
+
242
+ pre {
243
+ padding: 1.05em;
244
+ overflow: auto;
245
+ line-height: 1.45;
246
+ background-color: #f7f7f7;
247
+ border: 0;
248
+ border-radius: 3px;
249
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
250
+ }
251
+
252
+
253
+ pre > code {
254
+ display: inline;
255
+ max-width: 100%;
256
+ padding: 0;
257
+ margin: 0;
258
+ overflow: initial;
259
+ line-height: inherit;
260
+ background-color: rgba(0, 0, 0, 0);
261
+ border: 0;
262
+ tab-size: 4;
263
+ }
264
+
265
+ table {
266
+ border-collapse: collapse;
267
+ table-layout: fixed;
268
+ width: 100%;
269
+ line-height: 1.8;
270
+ border-spacing: 0;
271
+
272
+ th {
273
+ text-align: left;
274
+
275
+ &[align='center'] {
276
+ text-align: center;
277
+ }
278
+
279
+ &[align='right'] {
280
+ text-align: right;
281
+ }
282
+ }
283
+
284
+ th, td {
285
+ border: 1px solid #e0e0e0;
286
+ padding: 3px 12px;
287
+ height: 34px;
288
+ }
289
+
290
+ tr:hover td {
291
+ background-color: #f1f1f1;
292
+ }
293
+ }
294
+
295
+ img {
296
+ max-width: 100%;
297
+ display: inline-block;
298
+ padding: 3px;
299
+ vertical-align: middle;
300
+ }
301
+
302
+ a {
303
+ text-decoration: none;
304
+ color: var(--bs-primary);
305
+
306
+ &:hover {
307
+ text-decoration: underline;
308
+ }
309
+ }
310
+
311
+ blockquote {
312
+ padding: 5px 5px 5px 15px;
313
+ color: #777777;
314
+ border-left: 4px solid #dddddd;
315
+ }
316
+
317
+ video {
318
+ display: block;
319
+ width: 100%;
320
+ }
321
+
322
+ audio {
323
+ display: block;
324
+ width: 100%;
325
+ }
326
+
327
+ .task-list-item {
328
+ border: 0;
329
+ list-style: none;
330
+ padding-left: 24px;
331
+ margin-left: -24px;
332
+ }
333
+
334
+ .task-list-item::before {
335
+ background-repeat: no-repeat;
336
+ background-size: 18px 18px;
337
+ background-position: center;
338
+ content: '';
339
+ margin-left: 0;
340
+ margin-top: 0;
341
+ border-radius: 2px;
342
+ height: 18px;
343
+ width: 18px;
344
+ position: absolute;
345
+ left: 0;
346
+ top: 7px;
347
+ cursor: pointer;
348
+ background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgZmlsbD0iI0ZGRiIgc3Ryb2tlPSIjQ0NDIj4KICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAzMCAtMjk2KSB0cmFuc2xhdGUoNzg4IDE5MikgdHJhbnNsYXRlKDI0MiAxMDQpIj4KICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD0iMTciIGhlaWdodD0iMTciIHg9Ii41IiB5PSIuNSIgcng9IjIiLz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==);
349
+ }
350
+
351
+ .task-list-item.checked::before {
352
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgZmlsbD0iIzRCOTZFNiI+CiAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2IDBjMS4xMDUgMCAyIC44OTUgMiAydjE0YzAgMS4xMDUtLjg5NSAyLTIgMkgyYy0xLjEwNSAwLTItLjg5NS0yLTJWMkMwIC44OTUuODk1IDAgMiAwaDE0em0tMS43OTMgNS4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNy41IDEwLjU4NSA1LjIwNyA4LjI5M2wtLjA5NC0uMDgzYy0uMzkyLS4zMDUtLjk2LS4yNzgtMS4zMi4wODMtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgMyAuMDk0LjA4M2MuMzkyLjMwNS45Ni4yNzggMS4zMi0uMDgzbDYtNiAuMDgzLS4wOTRjLjMwNS0uMzkyLjI3OC0uOTYtLjA4My0xLjMyeiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwNTAgLTI5NikgdHJhbnNsYXRlKDc4OCAxOTIpIHRyYW5zbGF0ZSgyNjIgMTA0KSIvPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K);
353
+ }
354
+ }
355
+ `;export{r as default};
356
+ //# sourceMappingURL=editor-widget-ebec8493.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-widget-ebec8493.js","sources":["../src/components/lazy/form/widgets/editor-widget.tsx"],"sourcesContent":["import { WidgetProps } from '@rjsf/core';\r\nimport '@toast-ui/editor/dist/toastui-editor-only.css';\r\nimport '@toast-ui/editor/dist/i18n/zh-cn';\r\nimport { Editor, EditorProps } from '@toast-ui/react-editor';\r\nimport { useRef } from 'react';\r\nimport styled from 'styled-components';\r\n\r\ninterface Options {\r\n editType?: 'wysiwyg' | 'markdown';\r\n outputType?: 'html' | 'markdown';\r\n onUpload?: (file: File | Blob) => Promise<string>;\r\n}\r\n\r\nexport default function EditorWidget(props: WidgetProps) {\r\n const { value, onChange, placeholder, autofocus, options } = props;\r\n\r\n const { editType = 'wysiwyg', outputType = 'markdown', onUpload } = options as Options;\r\n\r\n const ref = useRef<Editor>(null);\r\n\r\n const hooks: EditorProps['hooks'] = {};\r\n\r\n if (onUpload) {\r\n hooks.addImageBlobHook = async (file, callback) => {\r\n const url = await onUpload(file);\r\n callback(url);\r\n };\r\n }\r\n\r\n return <Container>\r\n <Editor\r\n ref={ref}\r\n placeholder={placeholder}\r\n usageStatistics={false}\r\n hooks={hooks}\r\n autofocus={autofocus}\r\n linkAttributes={{\r\n target: '_blank'\r\n }}\r\n onChange={() => {\r\n const instance = ref.current?.getInstance();\r\n if (instance) {\r\n if (outputType === 'markdown') {\r\n onChange(instance.getMarkdown());\r\n } else {\r\n onChange(instance.getHTML());\r\n }\r\n }\r\n }}\r\n language='zh-CN'\r\n initialValue={value}\r\n previewStyle='vertical'\r\n height='600px'\r\n initialEditType={editType}\r\n />\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div`\r\n .ProseMirror {\r\n position: relative;\r\n word-wrap: break-word;\r\n white-space: break-spaces;\r\n -webkit-font-variant-ligatures: none;\r\n font-variant-ligatures: none;\r\n font-feature-settings: \"liga\" 0;\r\n font-size: 15px;\r\n overflow-y: auto;\r\n overflow-X: hidden;\r\n height: 100%;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n pre {\r\n white-space: pre-wrap;\r\n }\r\n\r\n li {\r\n position: relative;\r\n }\r\n\r\n .placeholder {\r\n color: #999;\r\n }\r\n }\r\n\r\n .ProseMirror-hideselection *::selection {\r\n background: transparent;\r\n }\r\n\r\n .ProseMirror-hideselection *::-moz-selection {\r\n background: transparent;\r\n }\r\n\r\n .ProseMirror-hideselection {\r\n caret-color: transparent;\r\n }\r\n\r\n .ProseMirror-selectednode {\r\n outline: 2px solid #8cf;\r\n }\r\n\r\n /* Make sure li selections wrap around markers */\r\n\r\n li.ProseMirror-selectednode {\r\n outline: none;\r\n }\r\n\r\n li.ProseMirror-selectednode:after {\r\n content: \"\";\r\n position: absolute;\r\n left: -32px;\r\n right: -2px;\r\n top: -2px;\r\n bottom: -2px;\r\n border: 2px solid #8cf;\r\n pointer-events: none;\r\n }\r\n\r\n /* Protect against generic img rules */\r\n\r\n img.ProseMirror-separator {\r\n display: inline !important;\r\n border: none !important;\r\n margin: 0 !important;\r\n }\r\n\r\n\r\n .ProseMirror-selectednode {\r\n outline: none;\r\n }\r\n\r\n table.ProseMirror-selectednode {\r\n border-radius: 2px;\r\n outline: 2px solid #00a9ff;\r\n }\r\n\r\n .html-block.ProseMirror-selectednode {\r\n border-radius: 2px;\r\n outline: 2px solid #00a9ff;\r\n }\r\n\r\n .toastui-editor-pseudo-clipboard {\r\n position: fixed;\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n left: -1000px;\r\n top: -1000px;\r\n z-index: -1;\r\n }\r\n\r\n .toastui-editor-defaultUI {\r\n font-family: inherit;\r\n\r\n .ProseMirror {\r\n height: 100%;\r\n padding: 14px !important;\r\n font-size: 1rem;\r\n }\r\n\r\n .toastui-editor-defaultUI-toolbar {\r\n padding: 0 5px;\r\n }\r\n\r\n .toastui-editor-md-container {\r\n .toastui-editor-md-preview {\r\n padding: 5px 10px;\r\n\r\n .toastui-editor-contents {\r\n padding-top: 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .toastui-editor-contents {\r\n -ms-text-size-adjust: 100%;\r\n -webkit-text-size-adjust: 100%;\r\n line-height: 1.2;\r\n word-wrap: break-word;\r\n\r\n & > *:first-child {\r\n margin-top: 0 !important;\r\n }\r\n\r\n & > *:last-child {\r\n margin-bottom: 0 !important;\r\n }\r\n\r\n h1, h2, h3, h4, h5, h6, p, ul, ol, blockquote, pre, table, audio, video {\r\n margin: 1em 0;\r\n line-height: 1.2;\r\n padding: 0;\r\n\r\n &:last-child {\r\n margin-bottom: 0 !important;\r\n }\r\n\r\n &:first-child {\r\n margin-top: 0 !important;\r\n }\r\n }\r\n\r\n p {\r\n margin-bottom: 1em;\r\n line-height: 2;\r\n }\r\n\r\n h1, h2, h3, h4, h5, h6 {\r\n font-weight: normal;\r\n\r\n &.align-right {\r\n text-align: right;\r\n }\r\n\r\n &.align-center {\r\n text-align: center;\r\n }\r\n }\r\n\r\n h1 {\r\n font-size: 2em;\r\n line-height: 1.2;\r\n border-bottom: 1px solid #eeeeee;\r\n padding-bottom: .5em;\r\n }\r\n\r\n h2 {\r\n padding-bottom: .4em;\r\n font-size: 1.3em;\r\n line-height: 1.2;\r\n border-bottom: 1px solid #eeeeee\r\n }\r\n\r\n h3 {\r\n font-size: 1.2em;\r\n line-height: 1.2;\r\n }\r\n\r\n h4 {\r\n font-size: 1.1em;\r\n line-height: 1.2;\r\n }\r\n\r\n h5 {\r\n font-size: 1em;\r\n line-height: 1.2;\r\n }\r\n\r\n hr {\r\n border: 0;\r\n border-bottom: 1px solid #eeeeee;\r\n margin-bottom: 0.5em;\r\n }\r\n\r\n ul {\r\n padding-left: 2em;\r\n\r\n ul {\r\n margin: 0;\r\n }\r\n }\r\n\r\n ol {\r\n padding-left: 2em;\r\n }\r\n\r\n li {\r\n line-height: 2;\r\n\r\n &.task-list-item {\r\n list-style: none;\r\n position: relative;\r\n\r\n input[type=checkbox] {\r\n position: absolute;\r\n left: -1.5em;\r\n top: 0.5em;\r\n width: 1em;\r\n height: 1em;\r\n }\r\n }\r\n }\r\n\r\n code {\r\n display: inline-block;\r\n border-radius: 4px;\r\n padding: .2em .4em;\r\n background-color: #f7f7f7;\r\n word-break: break-all;\r\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\r\n white-space: pre;\r\n line-height: 1.3;\r\n margin: -.2em .4em;\r\n }\r\n\r\n pre {\r\n padding: 1.05em;\r\n overflow: auto;\r\n line-height: 1.45;\r\n background-color: #f7f7f7;\r\n border: 0;\r\n border-radius: 3px;\r\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\r\n }\r\n\r\n\r\n pre > code {\r\n display: inline;\r\n max-width: 100%;\r\n padding: 0;\r\n margin: 0;\r\n overflow: initial;\r\n line-height: inherit;\r\n background-color: rgba(0, 0, 0, 0);\r\n border: 0;\r\n tab-size: 4;\r\n }\r\n\r\n table {\r\n border-collapse: collapse;\r\n table-layout: fixed;\r\n width: 100%;\r\n line-height: 1.8;\r\n border-spacing: 0;\r\n\r\n th {\r\n text-align: left;\r\n\r\n &[align='center'] {\r\n text-align: center;\r\n }\r\n\r\n &[align='right'] {\r\n text-align: right;\r\n }\r\n }\r\n\r\n th, td {\r\n border: 1px solid #e0e0e0;\r\n padding: 3px 12px;\r\n height: 34px;\r\n }\r\n\r\n tr:hover td {\r\n background-color: #f1f1f1;\r\n }\r\n }\r\n\r\n img {\r\n max-width: 100%;\r\n display: inline-block;\r\n padding: 3px;\r\n vertical-align: middle;\r\n }\r\n\r\n a {\r\n text-decoration: none;\r\n color: var(--bs-primary);\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n }\r\n\r\n blockquote {\r\n padding: 5px 5px 5px 15px;\r\n color: #777777;\r\n border-left: 4px solid #dddddd;\r\n }\r\n\r\n video {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n audio {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .task-list-item {\r\n border: 0;\r\n list-style: none;\r\n padding-left: 24px;\r\n margin-left: -24px;\r\n }\r\n\r\n .task-list-item::before {\r\n background-repeat: no-repeat;\r\n background-size: 18px 18px;\r\n background-position: center;\r\n content: '';\r\n margin-left: 0;\r\n margin-top: 0;\r\n border-radius: 2px;\r\n height: 18px;\r\n width: 18px;\r\n position: absolute;\r\n left: 0;\r\n top: 7px;\r\n cursor: pointer;\r\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgZmlsbD0iI0ZGRiIgc3Ryb2tlPSIjQ0NDIj4KICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAzMCAtMjk2KSB0cmFuc2xhdGUoNzg4IDE5MikgdHJhbnNsYXRlKDI0MiAxMDQpIj4KICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD0iMTciIGhlaWdodD0iMTciIHg9Ii41IiB5PSIuNSIgcng9IjIiLz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==);\r\n }\r\n\r\n .task-list-item.checked::before {\r\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgZmlsbD0iIzRCOTZFNiI+CiAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2IDBjMS4xMDUgMCAyIC44OTUgMiAydjE0YzAgMS4xMDUtLjg5NSAyLTIgMkgyYy0xLjEwNSAwLTItLjg5NS0yLTJWMkMwIC44OTUuODk1IDAgMiAwaDE0em0tMS43OTMgNS4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNy41IDEwLjU4NSA1LjIwNyA4LjI5M2wtLjA5NC0uMDgzYy0uMzkyLS4zMDUtLjk2LS4yNzgtMS4zMi4wODMtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgMyAuMDk0LjA4M2MuMzkyLjMwNS45Ni4yNzggMS4zMi0uMDgzbDYtNiAuMDgzLS4wOTRjLjMwNS0uMzkyLjI3OC0uOTYtLjA4My0xLjMyeiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwNTAgLTI5NikgdHJhbnNsYXRlKDc4OCAxOTIpIHRyYW5zbGF0ZSgyNjIgMTA0KSIvPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K);\r\n }\r\n }\r\n`;\r\n"],"names":["EditorWidget","props","value","onChange","placeholder","autofocus","options","editType","outputType","onUpload","ref","useRef","hooks","addImageBlobHook","async","file","callback","_jsx","Container","children","Editor","usageStatistics","linkAttributes","target","instance","current","getInstance","getMarkdown","getHTML","language","initialValue","previewStyle","height","initialEditType","styled","div"],"mappings":"uPAawB,SAAAA,EAAaC,GACjC,MAAMC,MAAEA,EAAKC,SAAEA,EAAQC,YAAEA,EAAWC,UAAEA,EAASC,QAAEA,GAAYL,GAEvDM,SAAEA,EAAW,UAASC,WAAEA,EAAa,WAAUC,SAAEA,GAAaH,EAE9DI,EAAMC,EAAe,MAErBC,EAA8B,CAAA,EASpC,OAPIH,IACAG,EAAMC,iBAAmBC,MAAOC,EAAMC,KAElCA,QADkBP,EAASM,GACd,GAIdE,EAACC,EAAS,CAAAC,SACbF,EAACG,EACG,CAAAV,IAAKA,EACLN,YAAaA,EACbiB,iBAAiB,EACjBT,MAAOA,EACPP,UAAWA,EACXiB,eAAgB,CACZC,OAAQ,UAEZpB,SAAU,KACN,MAAMqB,EAAWd,EAAIe,SAASC,cAC1BF,GAEIrB,EADe,aAAfK,EACSgB,EAASG,cAETH,EAASI,UAEzB,EAELC,SAAS,QACTC,aAAc5B,EACd6B,aAAa,WACbC,OAAO,QACPC,gBAAiB1B,KAG7B,CAEA,MAAMW,EAAYgB,EAAOC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ import{jsx as t}from"react/jsx-runtime";import o,{getRegistry as r}from"@topthink/json-form";import*as e from"react";import{forwardRef as a,useState as n,useCallback as i}from"react";import s from"axios";import{u as l,r as m,B as p}from"./index-563b11c6.js";import{mapValues as c}from"lodash";import"sweetalert2/dist/sweetalert2.js";import"sweetalert2-react-content";import"react-bootstrap";import"query-string";import"retry-axios";import"rc-notification";import"styled-components";import"classnames";import"react-async-hook";const d=require("ajv-i18n/localize/zh"),u=e.lazy((()=>import("./editor-widget-ebec8493.js"))),f=o=>t(e.Suspense,{fallback:null,children:t(u,{...o})}),y={upload:function(o){let{options:e,...a}=o;const{widgets:n}=r();return e.endpoint&&(e.onUpload=async t=>{const o=new FormData;o.set("file",t);const{url:r,value:a}=await m({url:e.endpoint,method:"post",data:o});return{url:r,value:a}}),t(n.upload,{...a,options:e})},editor:function(o){let{options:r,...e}=o;return r.endpoint&&(r.onUpload=async t=>{const o=new FormData;o.set("file",t);const{url:e}=await m({url:r.endpoint,method:"post",data:o});return e}),t(f,{...e,options:r})},typeahead:function(o){let{options:e,...a}=o;const{widgets:n}=r();return e.endpoint&&(e.onSearch=async t=>{let{value:o,query:r}=t;return await m({url:e.endpoint,params:{value:o,query:r}})}),t(n.typeahead,{...a,options:e})}},h=a(((r,e)=>{let{action:a,method:u="post",onSuccess:f,formData:h,onSubmitting:w,onSubmit:g,onChange:b,submitText:x="提交",transformData:v,children:D,...j}=r;const[S,k]=n(),[q,_]=l(!1),[z,E]=n(h),C=i((async(t,o)=>{if(!q)try{if(_(!0),w&&w(!0),a){let{formData:o}=t;v&&(o=v(o));try{const t=await m({url:a,method:u,data:o});return k(void 0),f&&await f(t),t}catch(t){if(!s.isAxiosError(t))throw t;k((t=>{const o=t.errors;return"string"==typeof o?{__errors:[o]}:c(o,(t=>({__errors:[t]})))})(t))}}else if(g)return await g(t,o)}finally{_(!1),w&&w(!1)}}),[a,u,g]),F=i((t=>{const{formData:o}=t;E(o),b&&b(t)}),[E,b]),N=i((t=>(t=t.map((t=>({keyword:t.name,dataPath:t.property,...t}))),d(t),t)),[]),U=t(p,{className:"px-4",loading:q,type:"submit",variant:"primary",children:x});return"function"==typeof D&&(D=D({submit:U,loading:q})),t(o,{ref:e,extraErrors:S,onSubmit:C,transformErrors:N,noHtml5Validate:!0,noValidate:!0,...j,formData:z,onChange:F,widgets:y,children:D||t("div",{className:"col-12",children:U})})}));export{h as default};
2
+ //# sourceMappingURL=index-2b97b70d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-2b97b70d.js","sources":["../src/components/lazy/form/index.tsx"],"sourcesContent":["import JsonForm, { getRegistry, JsonFormProps, JsonFormType } from '@topthink/json-form';\r\nimport * as React from 'react';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useState\r\n} from 'react';\r\nimport axios, { AxiosError, Method } from 'axios';\r\nimport request from '../../../request';\r\nimport { mapValues } from 'lodash';\r\nimport type { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\r\nimport Button from '../../button';\r\nimport useSafeState from '../../../hooks/use-safe-state';\r\n\r\nconst localize = require('ajv-i18n/localize/zh');\r\n\r\nconst LazyEditorWidget = React.lazy(() => import('./widgets/editor-widget'));\r\nconst EditorWidget = (props: WidgetProps) => {\r\n return <React.Suspense fallback={null}>\r\n <LazyEditorWidget {...props} />\r\n </React.Suspense>;\r\n};\r\n\r\nexport interface FormProps<T = any> extends JsonFormProps<T> {\r\n onSuccess?: (data: any) => void;\r\n method?: Method;\r\n children?: ReactNode | ((props: { submit: ReactNode, loading: boolean }) => ReactNode);\r\n submitText?: string;\r\n onSubmitting?: (submitting: boolean) => void;\r\n transformData?: (data: T) => T;\r\n}\r\n\r\ntype Error = {\r\n __errors: string[]\r\n}\r\n\r\ntype Errors = Error | {\r\n [key: string]: Error\r\n}\r\n\r\nconst toExtraErrors = (error: AxiosError): Errors => {\r\n const errors = error.errors;\r\n if (typeof errors === 'string') {\r\n return {\r\n __errors: [errors]\r\n };\r\n }\r\n return mapValues(errors, (e) => {\r\n return {\r\n __errors: [e]\r\n };\r\n });\r\n};\r\n\r\nconst widgets = {\r\n upload: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onUpload = async (file: File) => {\r\n\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url, value } = await request({\r\n url: options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return { url, value };\r\n };\r\n }\r\n\r\n return <widgets.upload {...props} options={options} />;\r\n },\r\n editor: function({ options, ...props }: WidgetProps) {\r\n if (options.endpoint) {\r\n options.onUpload = async (file: File) => {\r\n\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url } = await request({\r\n url: options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return url;\r\n };\r\n }\r\n\r\n return <EditorWidget {...props} options={options} />;\r\n },\r\n typeahead: function({ options, ...props }: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n if (options.endpoint) {\r\n options.onSearch = async ({ value, query }) => {\r\n return await request({\r\n url: options.endpoint as string,\r\n params: { value, query }\r\n });\r\n };\r\n }\r\n\r\n return <widgets.typeahead {...props} options={options} />;\r\n }\r\n};\r\n\r\nexport interface FormType extends JsonFormType {\r\n\r\n}\r\n\r\nexport type CustomFormType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>\r\n\r\nconst Form: CustomFormType = forwardRef(({\r\n action,\r\n method = 'post',\r\n onSuccess,\r\n formData,\r\n onSubmitting,\r\n onSubmit,\r\n onChange,\r\n submitText = '提交',\r\n transformData,\r\n children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useSafeState(false);\r\n const [data, setData] = useState(formData);\r\n\r\n const handleSubmit = useCallback(async (e: ISubmitEvent<any>, nativeEvent: React.FormEvent<HTMLFormElement>) => {\r\n if (!loading) {\r\n try {\r\n setLoading(true);\r\n if (onSubmitting) {\r\n onSubmitting(true);\r\n }\r\n if (action) {\r\n let { formData } = e;\r\n\r\n if (transformData) {\r\n formData = transformData(formData);\r\n }\r\n\r\n //todo 包含File对象需转FormData\r\n try {\r\n const result = await request({\r\n url: action,\r\n method,\r\n data: formData\r\n });\r\n setExtraErrors(undefined);\r\n if (onSuccess) {\r\n await onSuccess(result);\r\n }\r\n return result;\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n setExtraErrors(toExtraErrors(e));\r\n } else {\r\n throw e;\r\n }\r\n }\r\n } else if (onSubmit) {\r\n return await onSubmit(e, nativeEvent);\r\n }\r\n } finally {\r\n setLoading(false);\r\n if (onSubmitting) {\r\n onSubmitting(false);\r\n }\r\n }\r\n }\r\n }, [action, method, onSubmit]);\r\n\r\n const handleChange = useCallback((e: ISubmitEvent<any>) => {\r\n const { formData } = e;\r\n setData(formData);\r\n if (onChange) {\r\n onChange(e);\r\n }\r\n }, [setData, onChange]);\r\n\r\n const transformErrors = useCallback((errors: AjvError[]) => {\r\n errors = errors.map(error => ({\r\n keyword: error.name,\r\n dataPath: error.property,\r\n ...error\r\n }));\r\n\r\n localize(errors);\r\n\r\n return errors;\r\n }, []);\r\n\r\n const submit = <Button className={'px-4'} loading={loading} type='submit' variant='primary'>{submitText}</Button>;\r\n\r\n if (typeof children === 'function') {\r\n children = children({ submit, loading });\r\n }\r\n\r\n return <JsonForm\r\n ref={ref}\r\n extraErrors={extraErrors}\r\n onSubmit={handleSubmit}\r\n transformErrors={transformErrors}\r\n noHtml5Validate\r\n noValidate\r\n {...props}\r\n formData={data}\r\n onChange={handleChange}\r\n widgets={widgets}\r\n >\r\n {children || <div className='col-12'>\r\n {submit}\r\n </div>}\r\n </JsonForm>;\r\n});\r\n\r\nexport default Form;\r\n"],"names":["localize","require","LazyEditorWidget","React","lazy","import","EditorWidget","props","_jsx","Suspense","fallback","children","widgets","upload","_ref","options","getRegistry","endpoint","onUpload","async","data","FormData","set","file","url","value","request","method","editor","_ref2","typeahead","_ref3","onSearch","query","_ref4","params","Form","forwardRef","_ref5","ref","action","onSuccess","formData","onSubmitting","onSubmit","onChange","submitText","transformData","extraErrors","setExtraErrors","useState","loading","setLoading","useSafeState","setData","handleSubmit","useCallback","e","nativeEvent","result","undefined","axios","isAxiosError","error","errors","__errors","mapValues","toExtraErrors","handleChange","transformErrors","map","keyword","name","dataPath","property","submit","Button","className","type","variant","JsonForm","noHtml5Validate","noValidate"],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-content";import{jsx as n,jsxs as r,Fragment as o}from"react/jsx-runtime";import{useRef as i,useState as a,useEffect as s,createContext as c,Fragment as l,useContext as d,useCallback as u,useMemo as f,forwardRef as h,Children as m,lazy as p,Suspense as g,createElement as y,useImperativeHandle as b}from"react";import{OverlayTrigger as x,Tooltip as v,Spinner as w,Button as k,Modal as C,Alert as N,Card as z,Pagination as S}from"react-bootstrap";import{uniqueId as P,values as j,debounce as B}from"lodash";import T from"axios";import $ from"query-string";import*as E from"retry-axios";import L from"rc-notification";import F,{css as H}from"styled-components";import A from"classnames";import{useAsyncCallback as D}from"react-async-hook";const M=t(e),O={confirmButtonText:"确定",cancelButtonText:"取消"},I={confirm:async e=>{const{isConfirmed:t}=await M.fire({...O,icon:"warning",showCancelButton:!0,...e,async preConfirm(t){if(e.preConfirm)try{return await e.preConfirm(t)}catch(e){return e instanceof Error&&M.showValidationMessage(e.message),!1}return!0}});return t},success:e=>{M.fire({...O,toast:!0,position:"top",icon:"success",timer:2e3,showConfirmButton:!1,...e})},error:e=>{M.fire({...O,toast:!0,position:"top",icon:"error",timer:5e3,showConfirmButton:!1,...e})},close:e=>{M.close(e)},defaults:O};const U=c({});function R(e){return t=>{let{resolve:r,destroy:o,message:c}=t;const[l,h]=function(e){const t=i(null),[n,r]=a(e);return s((()=>{t.current&&(t.current(),t.current=null)}),[n]),[n,(e,n)=>{t.current="function"==typeof n?n:null,r(e)}]}(!0),m=d(U),p=u((e=>{h(!1,(()=>{r(e)}))}),[h,r]),g=f((()=>({show:l,onHide:()=>p(),onExited:()=>o(),container:m.container})),[l,p,o]);return n(e,{resolve:p,state:g,message:c})}}function _(e){return t=>new Promise((r=>{const o=n(e,{resolve:r,destroy:()=>{Y(o)},message:t});G(o)}))}let q=()=>{},V=new Set;const G=e=>{V=new Set(V),V.add(e),q(V)},Y=e=>{V=new Set(V),V.delete(e),q(V)};function J(e,t){return _(R(e))(t)}function K(e){let{tooltip:t,children:r,placement:o="bottom"}=e;return n(x,{placement:o,overlay:n(v,{id:P(),children:t}),children:r})}const Q=c(!1),W=h(((e,t)=>{let{loading:i,percent:a,disabled:s,children:c,tooltip:l,variant:u,...f}=e;d(Q)&&!u&&(u="link"),i&&(s=!0,c=r(o,{children:[n(w,{ref:t,as:"span",size:"sm",role:"status","aria-hidden":"true",animation:"border"}),a?r("span",{className:"ms-2",children:[a,"%"]}):null]}));const h=n(k,{ref:t,...f,variant:u,disabled:s,children:c});return l?n(K,{tooltip:l,children:n("span",{className:"d-inline-block",children:h})}):h})),X=function(e){let{state:t,message:{title:o,message:i,okText:a,cancelText:s},resolve:c}=e;return r(C,{centered:!0,...t,children:[n(C.Header,{children:n(C.Title,{as:"h5",children:o||"确认"})}),n(C.Body,{children:i}),r(C.Footer,{children:[n(W,{variant:"secondary",onClick:()=>c(),children:s||"取消"}),n(W,{onClick:()=>c(!0),children:a||"确定"})]})]})};const Z=e=>{let{header:t,children:i,footer:s,closable:c=!0,show:l,cancelText:d="取消",okText:u="确定",onOk:h,onCancel:m,onHide:p,okButtonProps:g,bodyAs:y,headerAs:b="h5",confirmLoading:x=!1,...v}=e;const[w,k]=a(!1),N=f((()=>n(W,{loading:w||x,variant:"primary",onClick:async e=>{k(!0);try{await(h?.(e)),e.defaultPrevented||p?.()}finally{k(!1)}},...g,children:u})),[g,u,h,p,w,x]),z=f((()=>n(W,{variant:"secondary",onClick:e=>{m?.(e),e.defaultPrevented||p?.()},children:d})),[m,p,d]);switch(typeof s){case"undefined":s=r(o,{children:[z,N]});break;case"function":s=s({okButton:N,cancelButton:z})}return r(C,{...v,onHide:p,show:l,children:[t&&n(C.Header,{closeButton:c,children:n(C.Title,{as:b,children:t})}),n(C.Body,{as:y,children:i}),s&&n(C.Footer,{children:s})]})};let ee;Z.Message=function(e){const[t,r]=a(V);return s((()=>{q=r}),[]),n(U.Provider,{value:e,children:Array.from(t).map(((e,t)=>n(l,{children:e},`message-${t}`)))})},Z.confirm=function(e){return _(R(X))(e)},Z.show=J;const te={};const ne=e=>{let{type:t,...r}=e;!function(e){if(ee)return e(ee);L.newInstance({...te,prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(t=>{ee?e(ee):(ee=t,e(t))}))}((e=>{r.duration=3;let o=t;if("error"===t)o="danger",r.duration=r.closable?0:5;r.content=n(N,{variant:o,children:r.content}),e.notice(r)}))},re=["error","success","info"].reduce(((e,t)=>(e[t]=(e,n)=>{ne({...n,type:t,content:e})},e)),{});function oe(e){return e&&"object"==typeof e}re.defaults=te,E.attach(),T.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{let{config:t,response:n}=e;return!(t.raxConfig?.retryDecider&&!t.raxConfig.retryDecider())&&("GET"===t.method?.toUpperCase()&&449===n?.status)}},T.defaults.maxContentLength=1/0,T.defaults.maxBodyLength=1/0,T.defaults.baseURL="/api",T.defaults.authTokenName="authorization",T.interceptors.request.use((e=>{const t=e.authTokenName;if(t){const n=localStorage.getItem(t);n&&(e.headers={Authorization:`Bearer ${n}`,...e.headers})}return e}),(e=>Promise.reject(e))),T.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(T.isAxiosError(e)&&e.response){const{data:t,status:n}=e.response;401===n?(e.errors="Unauthorized",re.error("Unauthorized")):oe(t)?422===n?e.errors=t:"message"in t&&(e.errors=t.message):e.errors=t}return Promise.reject(e)}));const ie=T.isAxiosError,ae=e=>{if(!T.isAxiosError(e))throw e;{let t=e.errors;"string"!=typeof e.errors&&(t=Object.values(e.errors).join("<br />")),re.error(t)}},se=async function(e){e="string"==typeof e?{url:e}:e;const{data:t}=await T.request({paramsSerializer:function(e){return $.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0,arrayFormat:"bracket"})},...e});return t};se.defaults=T.defaults,se.interceptors=T.interceptors;function ce(e){const t=(()=>{const e=i(!1);return s((()=>(e.current=!1,()=>{e.current=!0})),[]),e})(),[n,r]=a(e);return[n,u((e=>{t.current||r(e)}),[])]}const le=function(e){let{state:t,message:r,resolve:o}=e;const a=i(!0),{result:c,checkUrl:l,onComplete:d}=r,[u,f]=ce(!1);return s((()=>{se({url:l,method:"post",data:{order_no:c.order_no},raxConfig:{shouldRetry:e=>a.current&&449===e.response?.status}}).then((()=>{d?.(),o()})).catch((()=>null))}),[]),n(Z,{...t,centered:!0,onHide:()=>{a.current=!1,t.onHide()},backdrop:"static",header:"支付结果",okText:"已完成支付",okButtonProps:{loading:u},onOk:async e=>{e.preventDefault();try{f(!0),await se({url:l,method:"post",data:{order_no:c.order_no},raxConfig:{shouldRetry:()=>!1}}),d?.(),o()}catch{}finally{f(!1)}},cancelText:"取消",children:"请在新打开的页面上进行支付,支付完成后再关闭此窗口"})};function de(e){const{result:t}=e;window.open(t.pay_url),J(le,e)}const ue=F.div`
2
+ padding: 48px 32px;
3
+ `,fe=F.div`
4
+ margin-bottom: 24px;
5
+ text-align: center;
6
+ font-size: 72px;
7
+ `,he=F.div`
8
+ color: rgba(0, 0, 0, .85);
9
+ font-size: 24px;
10
+ line-height: 1.8;
11
+ text-align: center;
12
+ `,me=F.div`
13
+ margin-top: 32px;
14
+ text-align: center;
15
+ `,pe={success:n("i",{className:"bi bi-check-circle-fill text-success"}),error:n("i",{className:"bi bi-exclamation-circle-fill text-danger"}),info:n("i",{className:"bi bi-info-circle-fill text-info"}),warning:n("i",{className:"bi bi-exclamation-triangle-fill text-warning"})};function ge(e){let{status:t,title:o,icon:i,extra:a}=e;return!i&&t&&(i=pe[t]),r(ue,{children:[i&&n(fe,{children:i}),o&&n(he,{children:o}),a&&n(me,{children:a})]})}F.div`
16
+ position: relative;
17
+ `;const ye=F.div`
18
+ display: ${e=>e.active?"flex":"none"};
19
+ position: absolute;
20
+ top: 0 !important;
21
+ left: 0 !important;
22
+ width: 100%;
23
+ height: 100%;
24
+ text-align: center;
25
+ vertical-align: middle;
26
+ padding: 1em;
27
+ background-color: ${e=>e.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"};
28
+ opacity: ${e=>e.active?1:0};
29
+ line-height: 1;
30
+ animation-fill-mode: both;
31
+ animation-duration: .5s;
32
+ transition: background-color .5s linear;
33
+ flex-direction: column;
34
+ align-items: center;
35
+ justify-content: center;
36
+ user-select: none;
37
+ will-change: opacity;
38
+ z-index: 990;
39
+ `;function be(e){let{loading:t=!0,children:o,variant:i="primary",animation:a="border",wrap:s,...c}=e;return t?(o&&(o=n("p",{className:"mt-3 text-secondary",children:o})),o=r(ye,{inverted:!0,active:!0,children:[n(w,{animation:a,variant:i,...c}),o]}),s?n(xe,{$height:"number"==typeof s?s:150,children:o}):o):null}const xe=F.div`
40
+ position: relative;
41
+ height: ${e=>`${e.$height}px`};
42
+ `;function ve(e){let{children:t,title:i,className:a,...s}=e;return n(z,{className:A("border-0 shadow-sm mb-3",a),...s,children:r("div",{className:"card-body",children:[i&&r(o,{children:[n("h5",{children:i}),n("hr",{})]}),t]})})}function we(e){let{errors:t}=e;return t?n(N,{variant:"danger",children:n("ul",{className:"mb-0",children:"string"==typeof t?n("li",{children:t}):Object.entries(t).map((e=>{let[t,r]=e;return n("li",{children:r},t)}))})}):null}function ke(e){let{children:t,className:r,size:o="small",direction:i="horizontal"}=e;"string"==typeof o&&(o={small:8,middle:16,large:24}[o]);const a=m.map(t,(e=>{if(e)return n(Ne,{children:e})}));return n(Ce,{className:r,$direction:i,$size:o,children:a})}const Ce=F.div`
43
+ display: inline-flex;
44
+ align-items: center;
45
+ gap: ${e=>e.$size}px;
46
+
47
+ ${e=>"vertical"===e.$direction&&H`
48
+ display: flex;
49
+ flex-direction: column;
50
+ align-items: inherit;
51
+ `}
52
+ `,Ne=F.div`
53
+
54
+ `,ze=p((()=>import("./steps-afba29a7.js"))),Se=p((()=>import("./steps-afba29a7.js").then((e=>{let{Step:t}=e;return{default:t}}))));function Pe(e){return n(g,{fallback:null,children:n(ze,{...e})})}const je=function(e){return n(g,{fallback:null,children:n(Se,{...e})})};function Be(e){let{title:t,content:o,footer:i}=e;return r(ve,{children:[n(Ee,{children:t}),n($e,{children:o}),i&&n(Te,{children:i})]})}Pe.Step=je;const Te=F.div`
55
+ margin-top: 9px;
56
+ padding-top: 10px;
57
+ border-top: 1px solid #f0f0f0;
58
+ color: rgba(0, 0, 0, .65);
59
+ `,$e=F.div`
60
+ color: rgba(0, 0, 0, .85);
61
+ font-size: 24px;
62
+ `,Ee=F.div`
63
+ margin-bottom: 4px;
64
+ color: rgba(0, 0, 0, .45);
65
+ font-size: 1.1rem;
66
+ `;function Le(){}function Fe(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function He(e){let{total:t=0,onChange:r=Le,defaultCurrent:o=1,defaultPageSize:i=10,className:c,...l}=e;const[d,h]=a(o),[m,p]=a(i);s((()=>{Fe(l.current)&&h(l.current)}),[l.current]),s((()=>{Fe(l.pageSize)&&p(l.pageSize)}),[l.pageSize]);const g=f((()=>Math.floor((t-1)/m)+1),[t,m]),y=u((e=>()=>{e!==d&&(h(e),r(e,m))}),[r,d,m]),b=d-1>0?d-1:0,x=d+1<g?d+1:g,v=[];let w=null,k=null,C=null,N=null;if(g<=7)for(let e=1;e<=g;e+=1){const t=d===e;v.push(n(S.Item,{active:t,onClick:y(e),children:e},e))}else{N=n(S.Last,{onClick:y(g)},"last"),C=n(S.First,{onClick:y(1)},"first"),w=n(S.Prev,{onClick:y(b)},"prev"),k=n(S.Next,{onClick:y(x)},"next");let e=Math.max(1,d-2),t=Math.min(d+2,g);d-1<=2&&(t=5),g-d<=2&&(e=g-4);for(let r=e;r<=t;r+=1){const e=d===r;v.push(n(S.Item,{active:e,onClick:y(r),children:r},r))}d-1>=4&&3!==d&&v.unshift(w),g-d>=4&&d!==g-2&&v.push(k),1!==e&&v.unshift(C),t!==g&&v.push(N)}return n(S,{className:c,children:v})}function Ae(e){let{className:t,value:r,locale:i="zh-CN",currency:a=!0,options:s={}}=e;const c=f((()=>{let e;return e=a?{style:"currency",currency:"CNY"}:{minimumFractionDigits:2},new Intl.NumberFormat(i,{...e,...s})}),[a,i,s]);return t?n("span",{className:t,children:c.format(r)}):n(o,{children:c.format(r)})}function De(e){let{loading:t,disabled:r,children:o,...i}=e;return n(k,{...i,disabled:t||r,children:t?"Loading…":o})}const Me=p((()=>import("./image-zoom-912e2b3b.js")));function Oe(e){return n(g,{fallback:null,children:n(Me,{...e})})}function Ie(e){let{url:t,method:n,confirm:r,onSuccess:o,children:i,disabled:a,as:s=W,...c}=e;const[l,d]=ce(!1),f=u((async e=>{e.preventDefault();try{if(d(!0),r&&!await Z.confirm({message:r}))return;const e="string"==typeof t?{url:t,method:n}:{method:n,...t},i=await se(e);o&&o(i)}catch(e){ae(e)}finally{d(!1)}}),[t,n,d]);return y(s,{...c,disabled:a||l,onClick:f},i)}const Ue=p((()=>import("./index-2b97b70d.js"))),Re=h(((e,t)=>n(g,{fallback:null,children:n(Ue,{...e,ref:t})}))),_e=p((()=>import("./index-a214613e.js"))),qe=h(((e,t)=>n(g,{fallback:null,children:n(_e,{...e,ref:t})})));let Ve=0;function Ge(){let{onHide:e,onShow:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[n,r]=a(!1),[o,i]=a(`visible-${Ve}`),s=u((()=>{r(!1),e&&e()}),[r,e]),c=u((()=>{i("visible-"+ ++Ve)}),[i,Ve]),l=u((()=>{r(!0),t&&t()}),[r,t]),d={show:n,onHide:s,onExited:c,key:o};return{visible:n,show:l,hide:s,state:d}}const Ye=h(((e,t)=>{let{text:i,onOk:a,modalProps:s,children:c,onShow:l,confirmLoading:d,as:u=W,...f}=e;const{state:h,show:m,hide:p}=Ge({onShow:l});b(t,(()=>({close:p})));const g=y(u,{...f,onClick:m},i);return r(o,{children:[g,n(Z,{header:i,...s,...h,confirmLoading:d,onOk:async e=>{if(a){!1===await a()&&e.preventDefault()}},children:c})]})}));function Je(e){let{text:t,onSuccess:o,buttonProps:s,modalProps:c,children:l,...d}=e;const[f,h]=a(!1),m=i(null),p=i(null),g=u((()=>(p.current?.submit(),!1)),[]),y=u((e=>{o&&o(e),m.current?.close()}),[o]);return n(Ye,{ref:m,text:t,...s,modalProps:c,onOk:g,confirmLoading:f,children:r(Re,{...d,onSubmitting:h,ref:p,onSuccess:y,children:[l,n("input",{type:"submit",hidden:!0})]})})}function Ke(e){let{manual:t,refreshDeps:n,...r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:o,currentParams:i,error:a,...c}=D((async t=>(e="string"==typeof e?{url:e}:e,await se({...e,...t}))),r);s((()=>{if(!t&&!n)try{o()}catch{}}),[]),s((()=>{n&&l()}),n);const l=u((async()=>{try{i?await o(...i):await o()}catch{}}),[o,i]);if(a&&ie(a)){const e=a.errors;a=new Error("string"==typeof e?e:j(e).join(""))}return{refresh:l,execute:o,error:a,...c}}function Qe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=i(e);return s((()=>{n.current=e})),u((function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.current?.(...t)}),t)}function We(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=((e,t)=>e!==t)}=e,i=Qe(r),s=Qe(o),[c,l]=a(n),d=void 0!==t,u=d?t:c,f=Qe((e=>{const t="function"==typeof e?e(u):e;s(u,t)&&(d||l(t),i(t))}),[d,i,u,s]);return[u,f]}function Xe(e,t,n){const r=i(e),o=i(B(e,t,n));return s((()=>{r.current=e})),s((()=>{o.current=B((function(){r.current(...arguments)}),t,n)}),[t,n]),o.current}export{W as B,ve as C,we as E,Re as F,Oe as I,be as L,I as M,Ae as N,He as P,ge as R,ke as S,Q as T,Xe as a,We as b,re as c,Pe as d,je as e,Be as f,De as g,Ie as h,oe as i,qe as j,Je as k,Ye as l,Z as m,K as n,Ke as o,Ge as p,ie as q,se as r,ae as s,ce as u,de as w};
67
+ //# sourceMappingURL=index-563b11c6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-563b11c6.js","sources":["../src/utils/message.ts","../src/components/modal/message.tsx","../src/hooks/use-state-with-callback.ts","../src/components/modal/show.tsx","../src/components/tooltip.tsx","../src/components/lazy/table/context.ts","../src/components/button.tsx","../src/components/modal/confirm.tsx","../src/components/modal/index.tsx","../src/utils/toast.tsx","../src/utils/is-record.ts","../src/request.ts","../src/hooks/use-safe-state.ts","../src/hooks/use-unmounted-ref.ts","../src/utils/wait-pay-complete.tsx","../src/components/result.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/space.tsx","../src/components/steps.tsx","../src/components/statistic.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/image-zoom.tsx","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/table.tsx","../src/hooks/use-overlay-state.ts","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts","../src/hooks/use-callback-ref.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-debounce.ts"],"sourcesContent":["import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions<T = any> extends SweetAlertOptions<T> {\r\n\r\n}\r\n\r\nconst defaultOptions: MessageOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n};\r\n\r\nconst Message = {\r\n confirm: async <T = any>(options: MessageOptions<T>) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options,\r\n async preConfirm(data) {\r\n if (options.preConfirm) {\r\n try {\r\n return await options.preConfirm(data);\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n CustomSwal.showValidationMessage(e.message);\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n success: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'success',\r\n timer: 2000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 5000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n close: (result?: SweetAlertResult) => {\r\n CustomSwal.close(result);\r\n },\r\n defaults: defaultOptions\r\n};\r\n\r\nexport default Message;\r\n","import {\r\n ComponentType,\r\n createContext,\r\n Fragment,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport useStateWithCallback from '../../hooks/use-state-with-callback';\r\nimport { ModalProps } from 'react-bootstrap';\r\n\r\ninterface MessageContextType {\r\n container?: ModalProps['container'];\r\n}\r\n\r\nconst MessageContext = createContext<MessageContextType>({});\r\n\r\ntype MessageWrapProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n destroy: () => void\r\n message: T\r\n}\r\n\r\nexport type MessageProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n message: T\r\n state: {\r\n show: boolean\r\n onHide: () => void\r\n onExited: () => void\r\n container?: ModalProps['container']\r\n }\r\n}\r\n\r\nexport function wrapMessage<T = {}, P = any>(Component: ComponentType<MessageProps<T, P>>): ComponentType<MessageWrapProps<T, P>> {\r\n\r\n return ({ resolve, destroy, message }) => {\r\n\r\n const [show, setShow] = useStateWithCallback(true);\r\n const context = useContext(MessageContext);\r\n\r\n const handleResolve = useCallback((value: P | void) => {\r\n setShow(false, () => {\r\n resolve(value);\r\n });\r\n }, [setShow, resolve]);\r\n\r\n const state = useMemo(() => {\r\n return {\r\n show,\r\n onHide: () => handleResolve(),\r\n onExited: () => destroy(),\r\n container: context.container\r\n };\r\n }, [show, handleResolve, destroy]);\r\n\r\n return <Component\r\n resolve={handleResolve}\r\n state={state}\r\n message={message}\r\n />;\r\n };\r\n}\r\n\r\nexport function createMessage<T = {}, P = any>(Component: ComponentType<MessageWrapProps<T, P>>): (message: T) => Promise<P | void> {\r\n return (message) => {\r\n return new Promise<P | void>((resolve) => {\r\n const component = <Component\r\n resolve={resolve}\r\n destroy={() => {\r\n hide(component);\r\n }}\r\n message={message}\r\n />;\r\n\r\n show(component);\r\n });\r\n };\r\n}\r\n\r\ntype State = Set<ReactNode>\r\n\r\nlet listener: (state: State) => void = () => void 0;\r\n\r\nlet memoryState: State = new Set();\r\n\r\nexport const show = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.add(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport const hide = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.delete(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport default function Message(props: MessageContextType) {\r\n const [state, setState] = useState<State>(memoryState);\r\n useEffect(() => {\r\n listener = setState;\r\n }, []);\r\n\r\n return <MessageContext.Provider value={props}>\r\n {Array.from(state).map((message, index) => <Fragment key={`message-${index}`}>{message}</Fragment>)}\r\n </MessageContext.Provider>;\r\n}\r\n","import { SetStateAction, useEffect, useRef, useState } from 'react';\n\nexport default function useStateWithCallback<S>(initState: S): [S, (value: SetStateAction<S>, callback: () => void) => void] {\n const callbackRef = useRef<Function | null>(null);\n\n const [state, setState] = useState(initState);\n\n useEffect(() => {\n if (callbackRef.current) {\n callbackRef.current();\n callbackRef.current = null;\n }\n }, [state]);\n\n const setCallbackState = (value: SetStateAction<S>, callback: () => void) => {\n callbackRef.current = typeof callback === 'function' ? callback : null;\n setState(value);\n };\n\n return [state, setCallbackState];\n}\n","import { createMessage, MessageProps, wrapMessage } from './message';\r\nimport { ComponentType } from 'react';\r\n\r\nexport default function show<T, P = any>(Component: ComponentType<MessageProps<any, T>>, options?: P) {\r\n return createMessage(wrapMessage(Component))(options);\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n","import { createContext } from 'react';\r\n\r\nexport const TableContext = createContext(false);\r\n","import { Button as BsButton, ButtonProps as BsButtonProps, Spinner } from 'react-bootstrap';\r\nimport { forwardRef, useContext } from 'react';\r\nimport Tooltip from './tooltip';\r\nimport { TableContext } from './lazy/table/context';\r\n\r\nexport interface ButtonProps extends BsButtonProps {\r\n loading?: boolean;\r\n percent?: number;\r\n tooltip?: string;\r\n}\r\n\r\nconst Button = forwardRef<any, ButtonProps>((\r\n {\r\n loading,\r\n percent,\r\n disabled,\r\n children,\r\n tooltip,\r\n variant,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n\r\n const inTable = useContext(TableContext);\r\n\r\n if (inTable && !variant) {\r\n variant = 'link';\r\n }\r\n\r\n if (loading) {\r\n disabled = true;\r\n children = <>\r\n <Spinner ref={ref} as='span' size='sm' role='status' aria-hidden='true' animation='border' />\r\n {percent ? <span className='ms-2'>{percent}%</span> : null}\r\n </>;\r\n }\r\n\r\n const button = <BsButton ref={ref} {...props} variant={variant} disabled={disabled}>{children}</BsButton>;\r\n\r\n if (tooltip) {\r\n return <Tooltip tooltip={tooltip}>\r\n <span className={'d-inline-block'}>{button}</span>\r\n </Tooltip>;\r\n }\r\n\r\n return button;\r\n});\r\n\r\nexport default Button;\r\n","import { FC } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { createMessage, MessageProps, wrapMessage } from './message';\r\nimport Button from '../button';\r\n\r\ninterface ConfirmOptions {\r\n title?: string;\r\n message: string;\r\n okText?: string;\r\n cancelText?: string;\r\n}\r\n\r\nconst Confirm: FC<MessageProps<ConfirmOptions, true>> = function({\r\n state,\r\n message: {\r\n title,\r\n message,\r\n okText,\r\n cancelText\r\n },\r\n resolve,\r\n}) {\r\n return <Modal centered {...state} >\r\n <Modal.Header>\r\n <Modal.Title as='h5'>{title || '确认'}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>{message}</Modal.Body>\r\n <Modal.Footer>\r\n <Button variant='secondary' onClick={() => resolve()}>{cancelText || '取消'}</Button>\r\n <Button onClick={() => resolve(true)}>{okText || '确定'}</Button>\r\n </Modal.Footer>\r\n </Modal>;\r\n};\r\n\r\nexport default function confirm(options: ConfirmOptions) {\r\n return createMessage(wrapMessage(Confirm))(options);\r\n}\r\n","import { Modal as ReactModal, ModalProps as ReactModalProps } from 'react-bootstrap';\r\nimport { ElementType, MouseEvent, ReactNode, useMemo, useState } from 'react';\r\nimport Button, { ButtonProps } from '../button';\r\nimport show from './show';\r\nimport confirm from './confirm';\r\nimport Message, { MessageProps } from './message';\r\n\r\nexport interface ModalProps extends Pick<\r\n ReactModalProps,\r\n 'style' | 'container' | 'backdrop' | 'centered' | 'size' | 'scrollable' | 'fullscreen' | 'onHide' | 'onShow' | 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited'\r\n> {\r\n children: ReactNode;\r\n header?: ReactNode;\r\n footer?: ReactNode | ((args: { okButton: ReactNode, cancelButton: ReactNode }) => ReactNode);\r\n okText?: string;\r\n cancelText?: string;\r\n closable?: boolean;\r\n show?: boolean;\r\n onOk?: (e: MouseEvent) => void;\r\n onCancel?: (e: MouseEvent) => void;\r\n okButtonProps?: ButtonProps;\r\n bodyAs?: ElementType;\r\n headerAs?: ElementType;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nconst Modal = ({\r\n header,\r\n children,\r\n footer,\r\n closable = true,\r\n show,\r\n cancelText = '取消',\r\n okText = '确定',\r\n onOk,\r\n onCancel,\r\n onHide,\r\n okButtonProps,\r\n bodyAs,\r\n headerAs = 'h5',\r\n confirmLoading = false,\r\n ...rest\r\n}: ModalProps) => {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const okButton = useMemo(() => {\r\n return <Button loading={loading || confirmLoading} variant={'primary'} onClick={async (e) => {\r\n setLoading(true);\r\n try {\r\n await onOk?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }} {...okButtonProps}>{okText}</Button>;\r\n }, [okButtonProps, okText, onOk, onHide, loading, confirmLoading]);\r\n\r\n const cancelButton = useMemo(() => {\r\n return <Button variant='secondary' onClick={(e) => {\r\n onCancel?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n }}>{cancelText}</Button>;\r\n }, [onCancel, onHide, cancelText]);\r\n\r\n switch (typeof footer) {\r\n case 'undefined':\r\n footer = <>\r\n {cancelButton}\r\n {okButton}\r\n </>;\r\n break;\r\n case 'function':\r\n footer = footer({ okButton, cancelButton });\r\n break;\r\n }\r\n\r\n return <ReactModal {...rest} onHide={onHide} show={show}>\r\n {header && <ReactModal.Header closeButton={closable}>\r\n <ReactModal.Title as={headerAs}>{header}</ReactModal.Title>\r\n </ReactModal.Header>}\r\n <ReactModal.Body as={bodyAs}>{children}</ReactModal.Body>\r\n {footer && <ReactModal.Footer>{footer}</ReactModal.Footer>}\r\n </ReactModal>;\r\n};\r\n\r\nModal.Message = Message;\r\nModal.confirm = confirm;\r\nModal.show = show;\r\nexport default Modal;\r\nexport { MessageProps };\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\nimport { NotificationProps } from 'rc-notification/es/Notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nconst defaultOptions: NotificationProps & {\r\n getContainer?: () => HTMLElement;\r\n} = {};\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n ...defaultOptions,\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\nconst types = ['error', 'success', 'info'] as const;\r\n\r\ntype ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {\r\n defaults: typeof defaultOptions;\r\n};\r\n\r\nconst Toast = types.reduce((toast, type) => {\r\n toast[type] = (content: string, options?: NoticeContent) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n return toast;\r\n}, {} as any);\r\n\r\nToast.defaults = defaultOptions;\r\n\r\nexport default Toast as ToastType;\r\n","export default function isRecord(data: any): data is Record<string, string> {\r\n return data && (typeof data === 'object');\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Toast from './utils/toast';\r\nimport isRecord from './utils/is-record';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'retry-axios' {\r\n interface RetryConfig {\r\n retryDecider?: () => boolean;\r\n }\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n authTokenName?: string;\r\n }\r\n}\r\n\r\nrax.attach();\r\n\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: ({ config, response }) => {\r\n if (config.raxConfig?.retryDecider && !config.raxConfig.retryDecider()) {\r\n return false;\r\n }\r\n return config.method?.toUpperCase() === 'GET' && response?.status === 449;\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.defaults.authTokenName = 'authorization';\r\naxios.interceptors.request.use(\r\n config => {\r\n const key = config.authTokenName;\r\n if (key) {\r\n const token = localStorage.getItem(key);\r\n\r\n if (token) {\r\n config.headers = {\r\n Authorization: `Bearer ${token}`,\r\n ...config.headers,\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nexport const showRequestError = (e: any) => {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Toast.error(errors as string);\r\n } else {\r\n throw e;\r\n }\r\n};\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true,\r\n arrayFormat: 'bracket',\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import { useCallback, useState } from 'react';\r\nimport type { Dispatch, SetStateAction } from 'react';\r\nimport useUnmountedRef from './use-unmounted-ref';\r\n\r\nfunction useSafeState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];\r\n\r\nfunction useSafeState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];\r\n\r\nfunction useSafeState<S>(initialState?: S | (() => S)) {\r\n const unmountedRef = useUnmountedRef();\r\n const [state, setState] = useState(initialState);\r\n const setCurrentState = useCallback((currentState) => {\r\n /** if component is unmounted, stop update */\r\n if (unmountedRef.current) return;\r\n setState(currentState);\r\n }, []);\r\n\r\n return [state, setCurrentState] as const;\r\n}\r\n\r\nexport default useSafeState;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useUnmountedRef = () => {\r\n const unmountedRef = useRef(false);\r\n useEffect(() => {\r\n unmountedRef.current = false;\r\n return () => {\r\n unmountedRef.current = true;\r\n };\r\n }, []);\r\n return unmountedRef;\r\n};\r\n\r\nexport default useUnmountedRef;\r\n","import show from '../components/modal/show';\r\nimport Modal, { MessageProps } from '../components/modal';\r\nimport { useEffect, useRef } from 'react';\r\nimport request from '../request';\r\nimport useSafeState from '../hooks/use-safe-state';\r\n\r\ninterface PayResult {\r\n pay_url: string;\r\n order_no: string;\r\n}\r\n\r\ninterface Options {\r\n result: PayResult;\r\n checkUrl: string;\r\n onComplete?: () => void;\r\n}\r\n\r\nconst WaitModal = function({ state, message, resolve }: MessageProps<Options>) {\r\n\r\n const open = useRef(true);\r\n const { result, checkUrl, onComplete } = message;\r\n const [checking, setChecking] = useSafeState(false);\r\n\r\n useEffect(() => {\r\n request({\r\n url: checkUrl,\r\n method: 'post',\r\n data: { order_no: result.order_no },\r\n raxConfig: {\r\n shouldRetry(err) {\r\n return open.current && err.response?.status === 449;\r\n }\r\n }\r\n }).then(() => {\r\n onComplete?.();\r\n resolve();\r\n }).catch(() => null);\r\n }, []);\r\n\r\n return <Modal\r\n {...state}\r\n centered\r\n onHide={() => {\r\n open.current = false;\r\n state.onHide();\r\n }}\r\n backdrop='static'\r\n header='支付结果'\r\n okText='已完成支付'\r\n okButtonProps={{ loading: checking }}\r\n onOk={async (e) => {\r\n e.preventDefault();\r\n try {\r\n setChecking(true);\r\n await request({\r\n url: checkUrl,\r\n method: 'post',\r\n data: { order_no: result.order_no },\r\n raxConfig: {\r\n shouldRetry() {\r\n return false;\r\n }\r\n }\r\n });\r\n onComplete?.();\r\n resolve();\r\n } catch {\r\n // ignore\r\n } finally {\r\n setChecking(false);\r\n }\r\n }}\r\n cancelText='取消'\r\n >\r\n 请在新打开的页面上进行支付,支付完成后再关闭此窗口\r\n </Modal>;\r\n};\r\n\r\nexport default function waitPayComplete(options: Options) {\r\n const { result } = options;\r\n window.open(result.pay_url);\r\n show(WaitModal, options);\r\n}\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean | number;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'primary',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap $height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ $height: number }>`\r\n position: relative;\r\n height: ${props => `${props.$height}px`};\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n direction?: 'vertical' | 'horizontal';\r\n className?: string;\r\n}\r\n\r\n\r\nexport default function Space({ children, className, size = 'small', direction = 'horizontal' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container className={className} $direction={direction} $size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ $size: number, $direction: string }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.$size}px;\r\n\r\n ${props => props.$direction === 'vertical' && css`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: inherit;\r\n `}\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","import { ComponentProps, lazy, Suspense } from 'react';\r\n\r\nconst LazySteps = lazy(() => import('./lazy/steps'));\r\nconst LazyStep = lazy(() => import('./lazy/steps').then(({ Step }) => ({ default: Step })));\r\n\r\nexport default function Steps(props: ComponentProps<typeof LazySteps>) {\r\n return <Suspense fallback={null}>\r\n <LazySteps {...props} />\r\n </Suspense>;\r\n}\r\n\r\nconst Step = function(props: ComponentProps<typeof LazyStep>) {\r\n return <Suspense fallback={null}>\r\n <LazyStep {...props} />\r\n </Suspense>;\r\n};\r\n\r\nSteps.Step = Step;\r\n\r\nexport { Step };\r\n","import { ReactNode } from 'react';\r\nimport Card from './card';\r\nimport styled from 'styled-components';\r\n\r\nexport interface StatisticProps {\r\n title: ReactNode;\r\n content: ReactNode;\r\n footer?: ReactNode;\r\n}\r\n\r\nexport default function Statistic({ title, content, footer }: StatisticProps) {\r\n\r\n return <Card>\r\n <Title>{title}</Title>\r\n <Content>{content}</Content>\r\n {footer && <Footer>{footer}</Footer>}\r\n </Card>;\r\n}\r\n\r\nconst Footer = styled.div`\r\n margin-top: 9px;\r\n padding-top: 10px;\r\n border-top: 1px solid #f0f0f0;\r\n color: rgba(0, 0, 0, .65);\r\n`;\r\n\r\nconst Content = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n margin-bottom: 4px;\r\n color: rgba(0, 0, 0, .45);\r\n font-size: 1.1rem;\r\n`;\r\n\r\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList: ReactNode[] = [];\r\n let jumpPrev: ReactNode = null;\r\n let jumpNext: ReactNode = null;\r\n let firstPager: ReactNode = null;\r\n let lastPager: ReactNode = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n options?: Intl.NumberFormatOptions;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true, options = {} }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let opt;\r\n\r\n if (currency) {\r\n opt = {\r\n style: 'currency',\r\n currency: 'CNY'\r\n };\r\n } else {\r\n opt = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, { ...opt, ...options });\r\n }, [currency, locale, options]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean;\r\n}\r\n\r\nexport default function LoadingButton({ loading, disabled, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading || disabled}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { ComponentProps, lazy, Suspense } from 'react';\r\n\r\nconst LazyImageZoom = lazy(() => import('./lazy/image-zoom'));\r\n\r\nexport default function ImageZoom(props: ComponentProps<typeof LazyImageZoom>) {\r\n return <Suspense fallback={null}>\r\n <LazyImageZoom {...props} />\r\n </Suspense>;\r\n}\r\n","import request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport Button, { ButtonProps } from './button';\r\nimport useSafeState from '../hooks/use-safe-state';\r\nimport Modal from './modal';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useSafeState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Modal.confirm({ message: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n showRequestError(e);\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { forwardRef, lazy, Suspense } from 'react';\r\nimport type { CustomFormType } from './lazy/form';\r\n\r\nconst LazyForm = lazy(() => import('./lazy/form'));\r\n\r\nconst Form: CustomFormType = forwardRef((props, ref) => {\r\n return <Suspense fallback={null}>\r\n <LazyForm {...props} ref={ref} />\r\n </Suspense>;\r\n});\r\n\r\nexport default Form;\r\n\r\nexport type { FormProps, FormType } from './lazy/form';\r\n","import { ComponentProps, forwardRef, lazy, Suspense } from 'react';\r\nimport type { CustomTableType } from './lazy/table';\r\n\r\nconst LazyTable = lazy(() => import('./lazy/table'));\r\n\r\nconst Table: CustomTableType = forwardRef((props: ComponentProps<typeof LazyTable>, ref) => {\r\n return <Suspense fallback={null}>\r\n <LazyTable {...props} ref={ref} />\r\n </Suspense>;\r\n});\r\n\r\nexport default Table;\r\n\r\nexport type { TableProps, Columns, TableType } from './lazy/table';\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n MouseEvent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle\r\n} from 'react';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\nimport Modal, { ModalProps } from './modal';\r\nimport { ButtonProps } from 'react-bootstrap';\r\nimport Button from './button';\r\n\r\nexport interface ModalButtonProps extends Omit<ButtonProps, 'as'> {\r\n text: ReactNode;\r\n modalProps?: Omit<ModalProps, 'children' | 'confirmLoading' | 'onOk'>;\r\n onOk?: () => any;\r\n onShow?: () => void;\r\n confirmLoading?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n onOk,\r\n modalProps,\r\n children,\r\n onShow,\r\n confirmLoading,\r\n as = Button,\r\n ...props\r\n}, ref) => {\r\n\r\n const { state, show, hide } = useOverlayState({ onShow });\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: hide\r\n }));\r\n\r\n const handleOk = async (e: MouseEvent) => {\r\n if (onOk) {\r\n const result = await onOk();\r\n if (result === false) {\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n const button = createElement(as, {\r\n ...props,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal\r\n header={text}\r\n {...modalProps}\r\n {...state}\r\n confirmLoading={confirmLoading}\r\n onOk={handleOk}\r\n >\r\n {children}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps, ModalType } from './modal-button';\r\nimport { ReactNode, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport interface ModalFormProps<T = any> extends FormProps<T> {\r\n text: ReactNode;\r\n buttonProps?: Omit<ModalButtonProps, 'text' | 'modalProps' | 'confirmLoading' | 'onOk'>;\r\n modalProps?: ModalButtonProps['modalProps'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n onSuccess,\r\n buttonProps,\r\n modalProps,\r\n children,\r\n ...props\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const ref = useRef<ModalType>(null);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n return false;\r\n }, []);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n ref.current?.close();\r\n }, [onSuccess]);\r\n\r\n return <ModalButton\r\n ref={ref}\r\n text={text}\r\n {...buttonProps}\r\n modalProps={modalProps}\r\n onOk={handleOk}\r\n confirmLoading={loading}\r\n >\r\n <Form\r\n {...props}\r\n onSubmitting={setLoading}\r\n ref={form}\r\n onSuccess={handleSuccess}\r\n >\r\n {children}\r\n <input type='submit' hidden />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n try {\r\n execute();\r\n } catch {\r\n\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(async () => {\r\n try {\r\n if (currentParams) {\r\n await execute(...currentParams);\r\n } else {\r\n await execute();\r\n }\r\n } catch {\r\n\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n","import { DependencyList, useCallback, useEffect, useRef } from 'react';\r\n\r\nexport default function useCallbackRef<T extends (...args: any[]) => any>(\r\n callback: T | undefined,\r\n deps: DependencyList = [],\r\n) {\r\n const callbackRef = useRef(callback);\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return useCallback(((...args) => callbackRef.current?.(...args)) as T, deps);\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport useCallbackRef from './use-callback-ref';\r\n\r\nexport interface UseControllableStateProps<T> {\r\n value?: T;\r\n defaultValue?: T | (() => T);\r\n onChange?: (value: T) => void;\r\n shouldUpdate?: (prev: T, next: T) => boolean;\r\n}\r\n\r\nexport default function useControllableState<T>(props: UseControllableStateProps<T>) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n shouldUpdate = (prev, next) => prev !== next,\r\n } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\r\n\r\n const [uncontrolledState, setUncontrolledState] = useState(defaultValue as T);\r\n const controlled = valueProp !== undefined;\r\n const value = controlled ? valueProp : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) {\r\n return;\r\n }\r\n\r\n if (!controlled) {\r\n setUncontrolledState(nextValue);\r\n }\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue] as [T, Dispatch<SetStateAction<T>>];\r\n}\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n"],"names":["CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","data","preConfirm","e","Error","showValidationMessage","message","success","toast","position","timer","showConfirmButton","error","close","result","defaults","MessageContext","createContext","wrapMessage","Component","_ref","resolve","destroy","show","setShow","initState","callbackRef","useRef","state","setState","useState","useEffect","current","value","callback","useStateWithCallback","context","useContext","handleResolve","useCallback","useMemo","onHide","onExited","container","_jsx","createMessage","Promise","component","hide","listener","memoryState","Set","modal","add","delete","Tooltip","tooltip","children","placement","OverlayTrigger","overlay","BsTooltip","id","uniqueId","TableContext","Button","forwardRef","ref","loading","percent","disabled","variant","props","_jsxs","Spinner","as","size","role","animation","className","button","BsButton","Confirm","title","okText","cancelText","Modal","centered","Header","Title","Body","Footer","onClick","header","footer","closable","onOk","onCancel","okButtonProps","bodyAs","headerAs","confirmLoading","rest","setLoading","okButton","defaultPrevented","cancelButton","_Fragment","ReactModal","closeButton","noticeInstance","Provider","Array","from","map","index","Fragment","notice","type","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","content","Alert","Toast","reduce","isRecord","rax","attach","axios","raxConfig","retryDelay","backoffType","shouldRetry","config","response","retryDecider","method","toUpperCase","status","maxContentLength","Infinity","maxBodyLength","baseURL","authTokenName","interceptors","request","use","key","token","localStorage","getItem","headers","Authorization","reject","location","window","href","undefined","isAxiosError","errors","isRequestError","showRequestError","Object","values","join","url","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","arrayFormat","useSafeState","initialState","unmountedRef","useUnmountedRef","currentState","WaitModal","open","checkUrl","onComplete","checking","setChecking","order_no","err","then","catch","backdrop","preventDefault","waitPayComplete","pay_url","Container","styled","div","Icon","Extra","IconMap","info","warning","Result","extra","Dimmer","active","inverted","Loader","wrap","Wrap","$height","Card","BsCard","classNames","entries","_ref2","name","Space","direction","small","middle","large","items","Children","child","Item","$direction","$size","css","LazySteps","lazy","import","LazyStep","Step","default","Steps","Suspense","fallback","Statistic","Content","noop","isInteger","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","setCurrent","pageSize","setPageSize","allPages","handleChange","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","i","push","BsPagination","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","opt","minimumFractionDigits","Intl","format","LoadingButton","LazyImageZoom","ImageZoom","RequestButton","onSuccess","fetching","setFetching","handleClick","createElement","LazyForm","Form","LazyTable","Table","useOverlayState","onShow","arguments","length","visible","setVisible","setKey","exit","ModalButton","text","modalProps","useImperativeHandle","ModalForm","buttonProps","form","handleOk","submit","handleSuccess","onSubmitting","hidden","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh","useCallbackRef","deps","_len","args","_key","useControllableState","valueProp","defaultValue","shouldUpdate","prev","next","onChangeProp","shouldUpdateProp","uncontrolledState","setUncontrolledState","controlled","setValue","nextValue","useDebounce","wait","debouncedCallbackRef","debounce"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import n from"rc-table";import{unstable_batchedUpdates as a}from"react-dom";import{FormControl as o,Table as c}from"react-bootstrap";import{useUrlSearchParams as i}from"use-url-search-params";import*as l from"react";import{useState as s,useCallback as d,useRef as u,useEffect as p,memo as m,forwardRef as h,useImperativeHandle as f,useMemo as g}from"react";import{B as v,a as y,P as b,b as x,r as w,N as j,L as C,T as k,C as S,S as z}from"./index-563b11c6.js";import E from"styled-components";import O from"./index-2b97b70d.js";import"sweetalert2/dist/sweetalert2.js";import"sweetalert2-react-content";import"lodash";import"axios";import"query-string";import"retry-axios";import"rc-notification";import"classnames";import"react-async-hook";import"@topthink/json-form";const V=function(t){let{indeterminate:r=!1,...n}=t;const a=u(null);return p((()=>{a.current&&(a.current.indeterminate=r)}),[r]),e("input",{ref:a,...n,className:"form-check-input",type:"checkbox"})};var N;function H(){return H=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},H.apply(this,arguments)}const K=e=>l.createElement("svg",H({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),N||(N=l.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zM511.78 714.496c22.71 0 36.425-15.854 36.425-40.704V547.365H682.35c24.009 0 40.722-12.874 40.722-35.584 0-23.132-15.854-36.426-40.722-36.426H548.206V340.773c0-24.85-13.715-40.704-36.425-40.704s-35.566 16.713-35.566 40.722v134.583H342.49c-24.85 0-41.142 13.275-41.142 36.407 0 22.71 17.152 35.584 41.142 35.584h133.724v126.427c0 23.99 12.855 40.704 35.566 40.704z"})));var M;function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},q.apply(this,arguments)}const B=e=>l.createElement("svg",q({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),M||(M=l.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zm86.582-289.719h344.576c23.991 0 40.704-12.855 40.704-35.566 0-23.15-15.433-36.425-40.704-36.425H339.931c-24.868 0-40.722 13.276-40.722 36.425 0 22.711 16.713 35.566 40.722 35.566z"})));function P(r){let{data:n,options:a,columns:o,onSearch:c}=r;const[i,l]=s(0),u={"ui:col":10,"ui:order":a.order},p={};a.fields.forEach((e=>{const t=o.find((t=>t.dataIndex===e));if(t){const r=t.title;if("string"==typeof r){if(u[e]={"ui:col":4,"ui:labelCol":3,"ui:placeholder":"请输入",...a.ui?.[e]},t.valueEnum){const n=t.valueEnum;return u[e]["ui:placeholder"]="请选择",p[e]={title:r,type:"string",enum:Object.keys(n).flatMap((e=>"string"==typeof n[e].text?[e]:[])),enumNames:Object.keys(n).flatMap((e=>{const t=n[e].text;return"string"==typeof t?[t]:[]}))}}return p[e]={title:r,type:"string"}}}})),a.extraFields&&Object.entries(a.extraFields).forEach((e=>{let[t,r]=e;u[t]={"ui:col":4,"ui:labelCol":3,"ui:placeholder":"请输入",...a.ui?.[t]},p[t]={title:r,type:"string"}}));const m={type:"object",properties:p},h=d((e=>{let{formData:t}=e;c(t)}),[c]),f=d((()=>{l((e=>e+1)),c({})}),[]);return e(T,{children:e(O,{formContext:{layout:"horizontal"},schema:m,uiSchema:u,onSubmit:h,formData:n,children:e("div",{className:"col-2 ms-auto mt-auto",children:t("div",{className:"justify-content-end d-flex gap-2 ",children:[e(v,{className:"px-4",onClick:f,variant:"secondary",children:"重置"}),e(v,{className:"px-4",type:"submit",variant:"primary",children:"查询"})]})})})},i)}const T=E.div`
2
+ margin-bottom: 1rem;
3
+ `;function _(t){let{keyword:r,onKeywordChange:n}=t;const[a,c]=s(r),i=y(n,500);p((()=>{c(r)}),[r]);const l=d((e=>{c(e.target.value),i(e.target.value)}),[i,c]);return e(o,{value:a,onChange:l,type:"search",placeholder:"Search..."})}const D=E.thead`
4
+ th {
5
+ padding: 0.5rem 0.5rem;
6
+ border-bottom-width: 1px;
7
+ border-color: var(--bs-border-color);
8
+ }
9
+ `,F={table:t=>e(c,{...t,className:"mb-0 align-middle table-hover"}),header:{wrapper:t=>e(D,{...t})}},I=E.a`
10
+ cursor: pointer;
11
+ width: 28px;
12
+ height: 28px;
13
+ display: inline-flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ vertical-align: middle;
17
+ `,R=function(t){let{record:r,expanded:n,expandable:a,onExpand:o}=t;return e(I,a?{onClick:e=>o(r,e),children:e(n?B:K,{})}:{})},A=E(b)`
18
+ margin-bottom: 0;
19
+ justify-content: flex-end;
20
+ margin-top: 1rem;
21
+ `;const L=h(((o,c)=>{let{source:l,rowKey:m="id",paginate:h=!0,toolBarRender:v,columns:y=[],search:b,rowSelection:z,card:E=!0,expandable:O={},sync:N=!1,...H}=o;const[K,M]=s([]),[q,B]=s(h?{total:0,current:1,pageSize:10}:null),[T,D]=s(!0),[I,L]=i({}),[$,W]=function(t,r,n){const[a,o]=s((()=>new Set(t?.selectedRowKeys||[]))),c=e=>"string"==typeof r?e[r]:r(e),i=e=>n.find((t=>c(t)===e)),l=d((e=>{e instanceof Set||(e=new Set(e)),o(e);const r=Array.from(e),n=r.map((function(e){return i(e)}));t?.onChange&&t?.onChange(r,n)}),[i]);return[d((r=>{if(!t)return r;const o=n.map(c),i=o.every((function(e){return a.has(e)})),s=o.some((function(e){return a.has(e)}));return[{key:"selection",title:e(V,{checked:i&&n.length>0,indeterminate:!i&&s,onChange:()=>{i?o.forEach((function(e){a.delete(e)})):o.forEach((function(e){a.add(e)})),l(new Set(a))}}),width:30,align:"center",render(t){let{record:r}=t;const n=c(r),o=a.has(n);return e(V,{checked:o,onChange:()=>{o?a.delete(n):a.add(n),l(new Set(a))}})}},...r]}),[n,t,a]),l]}(z,m,K),[X,Y]=x({value:N?I||{}:void 0,defaultValue:{},onChange:e=>{N&&L(e)}}),[Z,ee]=x({value:N?I.q||"":void 0,defaultValue:"",onChange:e=>{N&&L({q:e||void 0})}}),[te,re]=x({value:N?I.page||1:void 0,defaultValue:1,onChange:e=>{N&&L({page:e||void 0})}}),ne=d((async()=>{D(!0),W([]);try{let e;const t={...X,q:Z,page:te>1?te:void 0};e="string"==typeof l?await w({url:l,params:t}):await l(t),h&&function(e){return"current_page"in e}(e)&&(B({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),M(e)}catch(e){}finally{D(!1)}}),[l,M,Z,te,X]);p((()=>{ne()}),[Z,te,X]);const ae=u({reload:ne});p((()=>{ae.current={reload:ne}}),[ne]),f(c,(()=>ae.current));const oe=g((()=>$(y).map((t=>{let{render:r,valueType:n,valueEnum:a,...o}=t;const c={...o};return r?c.render=(e,t,n)=>r({value:e,record:t,index:n,action:ae.current}):"currency"===n?c.render=t=>e(j,{value:t}):a&&(c.render=t=>a[t]?a[t].status?e("span",{className:`text-${a[t].status}`,children:a[t].text}):a[t].text:t),c}))),[y,$,ae]),ce=t(r,{children:[e(C,{loading:T}),"object"==typeof b&&e(P,{data:X,columns:y,options:b,onSearch:e=>{a((()=>{re(1),Y(e)}))}}),!1!==v&&t(G,{children:[e(Q,{size:12,children:v&&v(ae.current)}),t(J,{size:12,children:[!0===b&&e(_,{keyword:Z,onKeywordChange:e=>{a((()=>{re(1),ee(e)}))}}),e(U,{onClick:ae.current.reload,children:e("i",{className:"bi bi-arrow-repeat"})})]})]}),e(k.Provider,{value:!0,children:e(n,{...H,expandable:{expandIcon:R,...O},rowKey:m,columns:oe,components:F,data:K})}),q&&e(A,{...q,onChange:re})]});return E?e(S,{children:ce}):ce}));var $=m(L);const G=E.div`
22
+ display: flex;
23
+ justify-content: space-between;
24
+ padding-bottom: 1rem;
25
+ height: 48px;
26
+ border-bottom: 2px solid #212529;
27
+ `,J=E(z)`
28
+
29
+ `,Q=E(z)`
30
+
31
+ `,U=E.span`
32
+ cursor: pointer;
33
+ font-size: 20px;
34
+ line-height: 1;
35
+
36
+ &:hover {
37
+ color: var(--bs-primary);
38
+ }
39
+ `;export{$ as default};
40
+ //# sourceMappingURL=index-a214613e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-a214613e.js","sources":["../src/components/lazy/table/use-selection.tsx","../src/images/plus_square.svg","../src/images/minus_square.svg","../src/components/lazy/table/search.tsx","../src/components/lazy/table/index.tsx"],"sourcesContent":["import { Columns, TableProps, TableRowSelection } from './index';\r\nimport { InputHTMLAttributes, Key, useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nconst Checkbox = function({\r\n indeterminate = false,\r\n ...props\r\n}: InputHTMLAttributes<HTMLInputElement> & { indeterminate?: boolean }) {\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n ref.current.indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return <input\r\n ref={ref}\r\n {...props}\r\n className='form-check-input'\r\n type='checkbox'\r\n />;\r\n};\r\n\r\nexport default function useSelection<T = any>(\r\n rowSelection: TableRowSelection<T> | undefined,\r\n rowKey: Required<TableProps<T>>['rowKey'],\r\n data: T[]\r\n): [(columns: Columns<T>) => Columns<T>, (keys: Key[]) => void] {\r\n const [keys, setKeys] = useState(() => new Set(rowSelection?.selectedRowKeys || []));\r\n\r\n const getRowKey = (record: T) => {\r\n if (typeof rowKey === 'string') {\r\n // @ts-ignore\r\n return record[rowKey];\r\n } else {\r\n return rowKey(record);\r\n }\r\n };\r\n\r\n const getRecordByKey = (key: Key) => {\r\n return data.find((record) => {\r\n return getRowKey(record) === key;\r\n })!;\r\n };\r\n\r\n const setSelectedKeys = useCallback((keys: Set<Key> | Key[]) => {\r\n if (!(keys instanceof Set)) {\r\n keys = new Set(keys);\r\n }\r\n\r\n setKeys(keys);\r\n const changedKeys = Array.from(keys);\r\n\r\n const records = changedKeys.map(function(key) {\r\n return getRecordByKey(key);\r\n });\r\n\r\n if (rowSelection?.onChange) {\r\n rowSelection?.onChange(changedKeys, records);\r\n }\r\n }, [getRecordByKey]);\r\n\r\n const transformColumns = useCallback((columns: Columns): Columns => {\r\n if (!rowSelection) {\r\n return columns;\r\n }\r\n\r\n const recordKeys = data.map(getRowKey);\r\n\r\n const checkedCurrentAll = recordKeys.every(function(key) {\r\n return keys.has(key);\r\n });\r\n\r\n const checkedCurrentSome = recordKeys.some(function(key) {\r\n return keys.has(key);\r\n });\r\n\r\n return [{\r\n key: 'selection',\r\n title: <Checkbox\r\n checked={checkedCurrentAll && data.length > 0}\r\n indeterminate={!checkedCurrentAll && checkedCurrentSome}\r\n onChange={() => {\r\n if (checkedCurrentAll) {\r\n recordKeys.forEach(function(key) {\r\n keys.delete(key);\r\n });\r\n } else {\r\n recordKeys.forEach(function(key) {\r\n keys.add(key);\r\n });\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />,\r\n width: 30,\r\n align: 'center',\r\n render({ record }) {\r\n const key = getRowKey(record);\r\n const checked = keys.has(key);\r\n return <Checkbox\r\n checked={checked}\r\n onChange={() => {\r\n if (checked) {\r\n keys.delete(key);\r\n } else {\r\n keys.add(key);\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />;\r\n }\r\n }, ...columns];\r\n }, [data, rowSelection, keys]);\r\n\r\n return [transformColumns, setSelectedKeys];\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg t='1681378941268' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='11434' width='16' height='16' fill='currentColor'%3e %3cpath d='M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 132.845714 134.582857 132.845715z m1.28-68.992c-42.843429 0-66.852571-22.710857-66.852571-67.291429V253.805714c0-44.580571 24.009143-67.291429 66.852571-67.291428h517.723429c42.422857 0 66.432 22.710857 66.432 67.291428V770.194286c0 44.580571-24.009143 67.291429-66.432 67.291428z m258.432-123.008c22.710857 0 36.425143-15.853714 36.425143-40.704v-126.427429h134.144c24.009143 0 40.722286-12.873143 40.722286-35.584 0-23.131429-15.853714-36.425143-40.722286-36.425142H548.205714v-134.582858c0-24.850286-13.714286-40.704-36.425143-40.704s-35.565714 16.713143-35.565714 40.722286v134.582857H342.491429c-24.850286 0-41.142857 13.275429-41.142858 36.406857 0 22.710857 17.152 35.584 41.142858 35.584h133.723428v126.427429c0 23.990857 12.854857 40.704 35.565714 40.704z' p-id='11435'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg t='1681378996359' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='12821' width='16' height='16' fill='currentColor'%3e %3cpath d='M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 132.845714 134.582857 132.845715z m1.28-68.992c-42.843429 0-66.852571-22.710857-66.852571-67.291429V253.805714c0-44.580571 24.009143-67.291429 66.852571-67.291428h517.723429c42.422857 0 66.432 22.710857 66.432 67.291428V770.194286c0 44.580571-24.009143 67.291429-66.432 67.291428z m86.582858-289.718857h344.576c23.990857 0 40.704-12.854857 40.704-35.565714 0-23.149714-15.433143-36.425143-40.704-36.425143H339.931429c-24.868571 0-40.722286 13.275429-40.722286 36.425143 0 22.710857 16.713143 35.565714 40.722286 35.565714z' p-id='12822'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import { ChangeEvent, useCallback, useEffect, useState } from 'react';\r\nimport useDebounce from '../../../hooks/use-debounce';\r\nimport styled from 'styled-components';\r\nimport Button from '../../button';\r\nimport Form from '../form';\r\nimport { FormControl } from 'react-bootstrap';\r\nimport type { Columns } from './index';\r\nimport { Schema, UiSchema } from '@topthink/json-form';\r\n\r\nexport type SearchOptions = {\r\n fields: string[];\r\n extraFields?: Record<string, string>;\r\n ui?: Record<string, UiSchema>;\r\n order?: string[];\r\n};\r\n\r\ninterface SearchProps {\r\n data: Record<string, string>;\r\n options: SearchOptions;\r\n columns: Columns;\r\n onSearch: (params: Record<string, any>) => void;\r\n}\r\n\r\nexport default function Search({ data, options, columns, onSearch }: SearchProps) {\r\n\r\n const [key, setKey] = useState(0);\r\n\r\n const uiSchema: UiSchema = {\r\n 'ui:col': 10,\r\n 'ui:order': options.order\r\n };\r\n\r\n const properties: Schema['properties'] = {};\r\n\r\n options.fields.forEach(field => {\r\n const column = columns.find(column => column.dataIndex === field);\r\n\r\n if (column) {\r\n const title = column.title;\r\n if (typeof title === 'string') {\r\n uiSchema[field] = {\r\n 'ui:col': 4,\r\n 'ui:labelCol': 3,\r\n 'ui:placeholder': '请输入',\r\n ...options.ui?.[field]\r\n };\r\n\r\n if (column.valueEnum) {\r\n const valueEnum = column.valueEnum;\r\n\r\n uiSchema[field]['ui:placeholder'] = '请选择';\r\n\r\n return properties[field] = {\r\n title,\r\n type: 'string',\r\n enum: Object.keys(valueEnum).flatMap(key => {\r\n const text = valueEnum[key].text;\r\n if (typeof text === 'string') {\r\n return [key];\r\n }\r\n return [];\r\n }),\r\n enumNames: Object.keys(valueEnum).flatMap(key => {\r\n const text = valueEnum[key].text;\r\n if (typeof text === 'string') {\r\n return [text];\r\n }\r\n return [];\r\n }),\r\n };\r\n }\r\n\r\n return properties[field] = {\r\n title,\r\n type: 'string',\r\n };\r\n }\r\n }\r\n });\r\n\r\n if (options.extraFields) {\r\n Object.entries(options.extraFields).forEach(([field, title]) => {\r\n uiSchema[field] = {\r\n 'ui:col': 4,\r\n 'ui:labelCol': 3,\r\n 'ui:placeholder': '请输入',\r\n ...options.ui?.[field]\r\n };\r\n properties[field] = {\r\n title,\r\n type: 'string',\r\n };\r\n });\r\n }\r\n\r\n const schema: Schema = {\r\n type: 'object',\r\n properties\r\n };\r\n\r\n const onSubmit = useCallback(({ formData }) => {\r\n onSearch(formData);\r\n }, [onSearch]);\r\n\r\n const onReset = useCallback(() => {\r\n setKey(key => key + 1);\r\n onSearch({});\r\n }, []);\r\n\r\n return <Container key={key}>\r\n <Form\r\n formContext={{ layout: 'horizontal' }}\r\n schema={schema}\r\n uiSchema={uiSchema}\r\n onSubmit={onSubmit}\r\n formData={data}\r\n >\r\n <div className='col-2 ms-auto mt-auto'>\r\n <div className='justify-content-end d-flex gap-2 '>\r\n <Button className={'px-4'} onClick={onReset} variant='secondary'>重置</Button>\r\n <Button className={'px-4'} type='submit' variant='primary'>查询</Button>\r\n </div>\r\n </div>\r\n </Form>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div`\r\n margin-bottom: 1rem;\r\n`;\r\n\r\ninterface Props {\r\n keyword: string;\r\n onKeywordChange: (value: string) => void;\r\n}\r\n\r\nexport function LightSearch({ keyword, onKeywordChange }: Props) {\r\n\r\n const [value, setValue] = useState(keyword);\r\n\r\n const debouncedOnKeywordChange = useDebounce(onKeywordChange, 500);\r\n\r\n useEffect(() => {\r\n setValue(keyword);\r\n }, [keyword]);\r\n\r\n const onChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\r\n setValue(e.target.value);\r\n debouncedOnKeywordChange(e.target.value);\r\n }, [debouncedOnKeywordChange, setValue]);\r\n\r\n return <FormControl value={value} onChange={onChange} type={'search'} placeholder={'Search...'} />;\r\n}\r\n","import RcTable, { TableProps as RcTableProps } from 'rc-table';\r\nimport { unstable_batchedUpdates } from 'react-dom';\r\nimport { ColumnType as BsColumnType, RenderedCell, RenderExpandIconProps } from 'rc-table/es/interface';\r\nimport { Table as BsTable } from 'react-bootstrap';\r\nimport { useUrlSearchParams } from 'use-url-search-params';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n Key,\r\n memo,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport Pagination from '../../pagination';\r\nimport styled from 'styled-components';\r\nimport request from '../../../request';\r\nimport Card from '../../card';\r\nimport Loader from '../../loader';\r\nimport Space from '../../space';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../../utils/types';\r\nimport { ReactComponent as PlusIcon } from '../../../images/plus_square.svg';\r\nimport { ReactComponent as MinusIcon } from '../../../images/minus_square.svg';\r\nimport useControllableState from '../../../hooks/use-controllable-state';\r\nimport Search, { LightSearch, SearchOptions } from './search';\r\nimport NumberFormat from '../../number-format';\r\nimport { TableContext } from './context';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends BsColumnType<RecordType> {\r\n render?: (data: {\r\n value: any,\r\n record: RecordType,\r\n index: number,\r\n action: TableType\r\n }) => ReactNode | RenderedCell<RecordType>;\r\n valueType?: 'currency';\r\n valueEnum?: Record<number | string, {\r\n text: ReactNode;\r\n status?: string;\r\n }>;\r\n}\r\n\r\nexport type Columns<RecordType = any> = ColumnType<RecordType>[]\r\n\r\nconst CustomTHead = styled.thead`\r\n th {\r\n padding: 0.5rem 0.5rem;\r\n border-bottom-width: 1px;\r\n border-color: var(--bs-border-color);\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props) => {\r\n return <BsTable {...props} className='mb-0 align-middle table-hover' />;\r\n },\r\n header: {\r\n wrapper(props) {\r\n return <CustomTHead {...props} />;\r\n }\r\n }\r\n};\r\n\r\nconst ExpandIconContainer = styled.a`\r\n cursor: pointer;\r\n width: 28px;\r\n height: 28px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n vertical-align: middle;\r\n`;\r\n\r\nconst ExpandIcon = function <RecordType>({\r\n record,\r\n expanded,\r\n expandable,\r\n onExpand\r\n}: RenderExpandIconProps<RecordType>) {\r\n if (!expandable) return <ExpandIconContainer />;\r\n return <ExpandIconContainer onClick={e => onExpand(record, e)}>\r\n {expanded ? <MinusIcon /> : <PlusIcon />}\r\n </ExpandIconContainer>;\r\n};\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\r\n margin-top: 1rem;\r\n`;\r\n\r\nfunction isPagination<T>(data: any): data is PaginationType<T> {\r\n return 'current_page' in data;\r\n}\r\n\r\nexport interface TableRowSelection<RecordType = any> {\r\n selectedRowKeys?: Key[];\r\n onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;\r\n}\r\n\r\nexport interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordType>, 'children' | 'columns'> {\r\n source: string | ((params: Params) => Promise<RecordType>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean | SearchOptions;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: boolean;\r\n sync?: boolean;\r\n}\r\n\r\ntype Params = {\r\n page?: number;\r\n sortField?: string;\r\n sortOrder?: number;\r\n q?: string;\r\n [key: string]: any;\r\n};\r\n\r\nexport type CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>>\r\n & RefAttributes<TableType>>\r\n\r\nconst Table: CustomTableType = forwardRef((\r\n {\r\n source,\r\n rowKey = 'id',\r\n paginate = true,\r\n toolBarRender,\r\n columns = [],\r\n search,\r\n rowSelection,\r\n card = true,\r\n expandable = {},\r\n sync = false,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n const [data, setData] = useState<any[]>([]);\r\n const [pagination, setPagination] = useState(paginate ? { total: 0, current: 1, pageSize: 10 } : null);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [params, setParams] = useUrlSearchParams({});\r\n\r\n //多选\r\n const [transformColumns, setSelectionRowKeys] = useSelection(rowSelection, rowKey, data);\r\n\r\n const [filters, setFilters] = useControllableState<Record<string, string>>({\r\n value: sync ? (params as Record<string, string> || {}) : undefined,\r\n defaultValue: {},\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams(value);\r\n }\r\n }\r\n });\r\n\r\n const [keyword, setKeyword] = useControllableState<string>({\r\n value: sync ? (params.q as string || '') : undefined,\r\n defaultValue: '',\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams({ q: value || undefined });\r\n }\r\n }\r\n });\r\n\r\n const [page, setPage] = useControllableState<number>({\r\n value: sync ? (params.page as number || 1) : undefined,\r\n defaultValue: 1,\r\n onChange: (value) => {\r\n if (sync) {\r\n setParams({ page: value || undefined });\r\n }\r\n }\r\n });\r\n\r\n const fetchData = useCallback(async () => {\r\n setLoading(true);\r\n setSelectionRowKeys([]);\r\n try {\r\n let result;\r\n const params: Params = {\r\n ...filters,\r\n q: keyword,\r\n page: page > 1 ? page : undefined,\r\n };\r\n\r\n if (typeof source === 'string') {\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source(params);\r\n }\r\n\r\n if (paginate && isPagination<any>(result)) {\r\n setPagination({\r\n total: result.total,\r\n current: result.current_page,\r\n pageSize: result.per_page\r\n });\r\n result = result.data;\r\n }\r\n setData(result);\r\n } catch (e) {\r\n\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [source, setData, keyword, page, filters]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword, page, filters]);\r\n\r\n const action = useRef<TableType>({\r\n reload: fetchData\r\n });\r\n\r\n useEffect(() => {\r\n action.current = {\r\n reload: fetchData\r\n };\r\n }, [fetchData]);\r\n\r\n useImperativeHandle(ref, () => action.current);\r\n\r\n const customColumns = useMemo(() => {\r\n return transformColumns(columns).map(({ render, valueType, valueEnum, ...column }) => {\r\n const customColumn: BsColumnType<any> = { ...column };\r\n\r\n if (render) {\r\n customColumn.render = (value, record, index) => {\r\n return render({ value, record, index, action: action.current });\r\n };\r\n } else if (valueType === 'currency') {\r\n customColumn.render = (value) => {\r\n return <NumberFormat value={value} />;\r\n };\r\n } else if (valueEnum) {\r\n customColumn.render = (value) => {\r\n if (valueEnum[value]) {\r\n if (valueEnum[value].status) {\r\n return <span className={`text-${valueEnum[value].status}`}>{valueEnum[value].text}</span>;\r\n }\r\n return valueEnum[value].text;\r\n }\r\n return value;\r\n };\r\n }\r\n return customColumn;\r\n });\r\n }, [columns, transformColumns, action]);\r\n\r\n const children = <>\r\n <Loader loading={loading} />\r\n {typeof search === 'object' && <Search\r\n data={filters}\r\n columns={columns}\r\n options={search}\r\n onSearch={(data) => {\r\n unstable_batchedUpdates(() => {\r\n setPage(1);\r\n setFilters(data);\r\n });\r\n }}\r\n />}\r\n {toolBarRender !== false && <Header>\r\n <LeftTools size={12}>\r\n {toolBarRender && toolBarRender(action.current)}\r\n </LeftTools>\r\n <RightTools size={12}>\r\n {search === true && <LightSearch keyword={keyword} onKeywordChange={(value) => {\r\n unstable_batchedUpdates(() => {\r\n setPage(1);\r\n setKeyword(value);\r\n });\r\n }} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <TableContext.Provider value={true}>\r\n <RcTable {...props} expandable={{ expandIcon: ExpandIcon, ...expandable }} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n </TableContext.Provider>\r\n {pagination && <CustomPagination {...pagination} onChange={setPage} />}\r\n </>;\r\n\r\n if (card) {\r\n return <Card>\r\n {children}\r\n </Card>;\r\n }\r\n return children;\r\n});\r\n\r\nexport default memo(Table) as CustomTableType;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 1rem;\r\n height: 48px;\r\n border-bottom: 2px solid #212529;\r\n`;\r\n\r\nconst RightTools = styled(Space)`\r\n\r\n`;\r\nconst LeftTools = styled(Space)`\r\n\r\n`;\r\n\r\nconst Action = styled.span`\r\n cursor: pointer;\r\n font-size: 20px;\r\n line-height: 1;\r\n\r\n &:hover {\r\n color: var(--bs-primary);\r\n }\r\n`;\r\n"],"names":["Checkbox","_ref","indeterminate","props","ref","useRef","useEffect","current","_jsx","className","type","_path","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgPlusSquare","React","createElement","viewBox","xmlns","width","height","fill","d","SvgMinusSquare","Search","data","options","columns","onSearch","setKey","useState","uiSchema","order","properties","fields","forEach","field","column","find","dataIndex","title","ui","valueEnum","enum","keys","flatMap","text","enumNames","extraFields","entries","_ref2","schema","onSubmit","useCallback","_ref3","formData","onReset","Container","children","Form","formContext","layout","_jsxs","Button","onClick","variant","styled","div","LightSearch","_ref4","keyword","onKeywordChange","value","setValue","debouncedOnKeywordChange","useDebounce","onChange","e","FormControl","placeholder","CustomTHead","thead","components","table","BsTable","header","wrapper","ExpandIconContainer","a","ExpandIcon","record","expanded","expandable","onExpand","MinusIcon","PlusIcon","CustomPagination","Pagination","Table","forwardRef","rowKey","paginate","toolBarRender","search","rowSelection","card","sync","setData","pagination","setPagination","total","pageSize","loading","setLoading","params","setParams","useUrlSearchParams","transformColumns","setSelectionRowKeys","setKeys","Set","selectedRowKeys","getRowKey","getRecordByKey","setSelectedKeys","changedKeys","Array","from","records","map","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","delete","add","align","render","useSelection","filters","setFilters","useControllableState","undefined","defaultValue","setKeyword","q","page","setPage","fetchData","async","result","request","url","isPagination","current_page","per_page","action","reload","useImperativeHandle","customColumns","useMemo","valueType","customColumn","index","NumberFormat","status","_Fragment","Loader","unstable_batchedUpdates","Header","LeftTools","size","RightTools","Action","TableContext","Provider","RcTable","expandIcon","Card","memo","Space","span"],"mappings":"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"}
package/es/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{B as Button,C as Card,E as Error,F as Form,I as ImageZoom,L as Loader,g as LoadingButton,M as Message,m as Modal,l as ModalButton,k as ModalForm,N as NumberFormat,P as Pagination,h as RequestButton,R as Result,S as Space,f as Statistic,e as Step,d as Steps,j as Table,c as Toast,n as Tooltip,i as isRecord,q as isRequestError,r as request,s as showRequestError,b as useControllableState,a as useDebounce,p as useOverlayState,o as useRequest,u as useSafeState,w as waitPayComplete}from"./index-6ae8237d.js";export{StyleSheetManager,ThemeProvider,createGlobalStyle,css,keyframes,default as styled}from"styled-components";export{useAsync,useAsyncCallback}from"react-async-hook";import"sweetalert2/dist/sweetalert2.js";import"sweetalert2-react-content";import"react/jsx-runtime";import"react";import"react-bootstrap";import"lodash";import"axios";import"query-string";import"retry-axios";import"rc-notification";import"classnames";
1
+ export{B as Button,C as Card,E as Error,F as Form,I as ImageZoom,L as Loader,g as LoadingButton,M as Message,m as Modal,l as ModalButton,k as ModalForm,N as NumberFormat,P as Pagination,h as RequestButton,R as Result,S as Space,f as Statistic,e as Step,d as Steps,j as Table,c as Toast,n as Tooltip,i as isRecord,q as isRequestError,r as request,s as showRequestError,b as useControllableState,a as useDebounce,p as useOverlayState,o as useRequest,u as useSafeState,w as waitPayComplete}from"./index-563b11c6.js";export{StyleSheetManager,ThemeProvider,createGlobalStyle,css,keyframes,default as styled}from"styled-components";export{useAsync,useAsyncCallback}from"react-async-hook";import"sweetalert2/dist/sweetalert2.js";import"sweetalert2-react-content";import"react/jsx-runtime";import"react";import"react-bootstrap";import"lodash";import"axios";import"query-string";import"retry-axios";import"rc-notification";import"classnames";
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/components",
3
- "version": "1.0.57",
3
+ "version": "1.0.58",
4
4
  "scripts": {
5
5
  "prebuild": "rimraf lib types",
6
6
  "build": "rollup -c --environment NODE_ENV:production",
@@ -17,8 +17,10 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "@babel/runtime": "^7.11.2",
20
+ "@toast-ui/editor": "^3.2.2",
21
+ "@toast-ui/react-editor": "^3.2.3",
20
22
  "@topthink/bootstrap": "^1.0.23",
21
- "@topthink/json-form": "^1.0.46",
23
+ "@topthink/json-form": "^1.0.47",
22
24
  "@types/styled-components": "^5.1.11",
23
25
  "ajv-i18n": "^4.0.0",
24
26
  "axios": "^0.27.2",
@@ -37,9 +39,9 @@
37
39
  },
38
40
  "peerDependencies": {
39
41
  "lodash": "*",
40
- "react": "^17",
42
+ "react": "^17||^18",
41
43
  "react-bootstrap": "^2.1.2",
42
- "react-dom": "^17"
44
+ "react-dom": "^17||^18"
43
45
  },
44
46
  "devDependencies": {
45
47
  "@babel/core": "^7.13.8",
@@ -62,5 +64,5 @@
62
64
  },
63
65
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
64
66
  "license": "MIT",
65
- "gitHead": "b8f6fb22062f0733456eb62b2d91b0d72462f6a8"
67
+ "gitHead": "2a1755e13c0112249986a913f31880175d8f594e"
66
68
  }
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { WidgetProps } from '@rjsf/core';
3
+ import '@toast-ui/editor/dist/toastui-editor-only.css';
4
+ import '@toast-ui/editor/dist/i18n/zh-cn';
5
+ export default function EditorWidget(props: WidgetProps): JSX.Element;