ronds-metadata 1.1.33 → 1.1.34

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.
package/es/api/index.js CHANGED
@@ -6,10 +6,32 @@ import _createClass from "@babel/runtime/helpers/esm/createClass";
6
6
  /*
7
7
  * @Author:wangxian
8
8
  * @Date: 2021-09-18 14:15:04
9
- * @LastEditTime: 2022-05-21 08:37:14
9
+ * @LastEditTime: 2022-08-29 18:32:10
10
10
  */
11
- import { HttpHelper } from '../framework/http';
11
+ import { guid, md5 } from '@/utils';
12
+ import { addInterceptor, HttpHelper } from '../framework/http';
12
13
  var http = new HttpHelper();
14
+ var token = 'Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkNBMzFBMEJDMkQ5M0I3RkVFOTBDMDkwMDI4MUVBMTlEIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2Mzg1MTM1NzMsImV4cCI6MTY3MDA0OTU3MywiaXNzIjoiaHR0cDovLzE5Mi4xNjguMS4xNzk6MzEwMDIiLCJhdWQiOiJlcG0iLCJjbGllbnRfaWQiOiJlcG0iLCJzdWIiOiIzYTAwMjYxOS1kNGRjLTY5NGMtYjUzNi0xNzM3YzVjZjRlM2UiLCJhdXRoX3RpbWUiOjE2Mzg1MTM1NzMsImlkcCI6ImxvY2FsIiwicGhvbmVfbnVtYmVyIjoiMTgxNjQ0NjI0MDAiLCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOiJGYWxzZSIsImVtYWlsIjoieGlhbi53YW5nQHJvbmRzLmNvbS5jbiIsImVtYWlsX3ZlcmlmaWVkIjoiRmFsc2UiLCJuYW1lIjoid2FuZ3hpYW4iLCJpYXQiOjE2Mzg1MTM1NzMsInNjb3BlIjpbImFkZHJlc3MiLCJlbWFpbCIsImVwbSIsIm9wZW5pZCIsInBob25lIiwicHJvZmlsZSIsInJvbGUiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsicHdkIl19.FI4lIbjLwCn0sF9iZ1aaJ9vXLEi8TxQiLROab_8XYdDrR4HVFIcWYHbxUWqhdQtaCKwyyhL8tJLVgi-O_EaOTj_ui5AZLH_LVSR1_lAzYIER3yfoz2vEOaR0T0HlPAVuO60nI_In4q9XyuW12_8morm1f4NukrYxVqDiRh8_biUevWXAH0WgeXmLyzKBduDrE-5dZzAx4O6dFBSqDpedIJt36ILQR5vXEBtje7IlVgVN2jRCQ-jdHfiGYoTsggoybQ1YfI5aUDv9RHMEETTgdHWtRSvlyv5QuW1yF7LiHvT1a2KKN3YhHnKtcmPkoD-WT8taVxsAn3oxGwyZ0Ru5sw';
15
+ addInterceptor(function (httpClient) {
16
+ httpClient.interceptors.request.use(function (_config) {
17
+ if (!_config.headers) {
18
+ _config.headers = {};
19
+ }
20
+
21
+ _config.headers.Authorization = token;
22
+ var url = _config.url;
23
+ var timestamp = new Date().getTime();
24
+
25
+ var _guid = guid();
26
+
27
+ var signature = md5("".concat(url).concat(timestamp).concat(guid));
28
+ _config.headers.url = url;
29
+ _config.headers.timestamp = timestamp;
30
+ _config.headers.nonce = _guid;
31
+ _config.headers.signature = signature;
32
+ return _config;
33
+ });
34
+ });
13
35
 
14
36
  var Api = /*#__PURE__*/function () {
15
37
  function Api() {
@@ -1,10 +1,12 @@
1
1
  import 'react-markdown-editor-lite/lib/index.css';
2
+ import 'github-markdown-css';
2
3
  import './index.less';
3
4
  interface IMdEditProps {
4
5
  value: string;
5
6
  width?: number;
6
7
  height?: number;
7
8
  onChange: (txt: string) => void;
9
+ onImageUpload?: (file: any) => void;
8
10
  }
9
11
  declare const MdEdit: (props: IMdEditProps) => JSX.Element;
10
12
  export default MdEdit;
@@ -1,48 +1,42 @@
1
1
  /*
2
2
  * @Author: your name
3
3
  * @Date: 2021-12-15 15:29:51
4
- * @LastEditTime: 2022-03-16 17:08:11
4
+ * @LastEditTime: 2022-08-29 18:29:30
5
5
  */
6
6
  import React from 'react';
7
7
  import MdEditor from 'react-markdown-editor-lite';
8
- import MarkdownIt from 'markdown-it';
9
- import emoji from 'markdown-it-emoji';
8
+ import ReactMarkdown from 'react-markdown';
10
9
  import 'react-markdown-editor-lite/lib/index.css';
10
+ import remarkGfm from 'remark-gfm';
11
+ import 'github-markdown-css';
11
12
  import './index.less';
12
- var mdParser = new MarkdownIt({
13
- html: true,
14
- linkify: true,
15
- typographer: true // highlight: (str: string = '', lang: string) => {
16
- // if (lang && hljs.getLanguage(lang)) {
17
- // try {
18
- // return hljs.highlight(lang, str).value;
19
- // } catch (__) {
20
- // // ...
21
- // }
22
- // }
23
- // return '';
24
- // },
25
-
26
- }).use(emoji);
27
13
 
28
14
  var MdEdit = function MdEdit(props) {
29
15
  var value = props.value,
30
16
  width = props.width,
31
17
  height = props.height,
32
- onChange = props.onChange;
18
+ onChange = props.onChange,
19
+ onImageUpload = props.onImageUpload;
33
20
 
34
21
  var onValueChange = function onValueChange(v) {
35
22
  onChange && onChange(v.text);
36
23
  };
37
24
 
25
+ var onMyImageUpload = function onMyImageUpload(file) {
26
+ onImageUpload && onImageUpload(file);
27
+ };
28
+
38
29
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MdEditor, {
39
30
  value: value,
31
+ onImageUpload: onMyImageUpload,
40
32
  style: {
41
33
  width: "".concat(width, "px"),
42
34
  height: "".concat(height, "px")
43
35
  },
44
36
  renderHTML: function renderHTML(text) {
45
- return mdParser.render(text);
37
+ return /*#__PURE__*/React.createElement(ReactMarkdown, {
38
+ remarkPlugins: [remarkGfm]
39
+ }, text);
46
40
  },
47
41
  onChange: onValueChange
48
42
  }));
@@ -3,6 +3,14 @@ import _Form from "antd/es/form";
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import "antd/es/select/style";
5
5
  import _Select from "antd/es/select";
6
+ import "antd/es/space/style";
7
+ import _Space from "antd/es/space";
8
+ import "antd/es/pagination/style";
9
+ import _Pagination from "antd/es/pagination";
10
+ import "antd/es/input/style";
11
+ import _Input from "antd/es/input";
12
+ import "antd/es/divider/style";
13
+ import _Divider from "antd/es/divider";
6
14
  import "antd/es/cascader/style";
7
15
  import _Cascader from "antd/es/cascader";
8
16
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
@@ -14,7 +22,7 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
14
22
  /*
15
23
  * @Author:wangxian
16
24
  * @Date: 2021-09-18 14:15:04
17
- * @LastEditTime: 2022-08-08 14:51:55
25
+ * @LastEditTime: 2022-08-11 18:42:06
18
26
  */
19
27
  import React from 'react';
20
28
  import { MetadataFormContext, MetadataRefContext } from '../interface';
@@ -22,9 +30,10 @@ import { useGetExtraInfo } from '../hooks';
22
30
  import { MetadataService } from '../../../framework/metadata/MetadataService';
23
31
  import { deepClone } from '../../../utils';
24
32
  import { useAsyncMemo } from '../../../framework/hooks/use-async-memo';
33
+ import { tr } from '../../../framework/locale';
25
34
 
26
35
  function Index(props) {
27
- var _extraInfo$http3, _extraInfo$http4;
36
+ var _extraInfo$http5, _extraInfo$http6, _extraInfo$http7, _extraInfo$http8;
28
37
 
29
38
  var id = props.id,
30
39
  name = props.name,
@@ -45,6 +54,9 @@ function Index(props) {
45
54
  cascaderOption = _React$useState2[0],
46
55
  setCascaderOption = _React$useState2[1];
47
56
 
57
+ var pageRef = React.useRef(1);
58
+ var totalRef = React.useRef();
59
+
48
60
  var onSelect = function onSelect(value) {
49
61
  formContext.stream$ && formContext.stream$.next({
50
62
  type: 'onSelectChange',
@@ -53,8 +65,8 @@ function Index(props) {
53
65
  };
54
66
 
55
67
  var getEnumDataByUrl = React.useCallback( /*#__PURE__*/function () {
56
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(http, pid) {
57
- var server, _url, res;
68
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(http, pid, page) {
69
+ var server, _url, res, _res;
58
70
 
59
71
  return _regeneratorRuntime.wrap(function _callee$(_context) {
60
72
  while (1) {
@@ -62,18 +74,21 @@ function Index(props) {
62
74
  case 0:
63
75
  server = new MetadataService();
64
76
  _url = pid || pid === '' ? http.url.replace('{pid}', pid) : http.url;
65
- _context.next = 4;
77
+ _url = page ? http.url.replace('{page}', page) : http.url;
78
+ _context.next = 5;
66
79
  return server.GetEnumDataByUrl(_url);
67
80
 
68
- case 4:
81
+ case 5:
69
82
  res = _context.sent;
83
+ _res = (res === null || res === void 0 ? void 0 : res.total) ? res === null || res === void 0 ? void 0 : res.list : res;
84
+ totalRef.current = res === null || res === void 0 ? void 0 : res.total;
70
85
 
71
- if (!(res && res.length > 0)) {
72
- _context.next = 9;
86
+ if (!(_res && _res.length > 0)) {
87
+ _context.next = 12;
73
88
  break;
74
89
  }
75
90
 
76
- return _context.abrupt("return", res.map(function (it) {
91
+ return _context.abrupt("return", _res.map(function (it) {
77
92
  if (http === null || http === void 0 ? void 0 : http.isCascader) {
78
93
  return {
79
94
  value: it[(http === null || http === void 0 ? void 0 : http.key) || 'id'],
@@ -88,11 +103,11 @@ function Index(props) {
88
103
  }
89
104
  }));
90
105
 
91
- case 9:
106
+ case 12:
92
107
  console.warn("".concat(_url, " is not return success result"));
93
108
  return _context.abrupt("return", []);
94
109
 
95
- case 11:
110
+ case 14:
96
111
  case "end":
97
112
  return _context.stop();
98
113
  }
@@ -100,7 +115,7 @@ function Index(props) {
100
115
  }, _callee);
101
116
  }));
102
117
 
103
- return function (_x, _x2) {
118
+ return function (_x, _x2, _x3) {
104
119
  return _ref.apply(this, arguments);
105
120
  };
106
121
  }(), []);
@@ -136,7 +151,7 @@ function Index(props) {
136
151
  return processSelectOptionsData();
137
152
  }, [initEnumValue, myEnum, id]);
138
153
  var httpOptions = useAsyncMemo( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
139
- var _extraInfo$http, res;
154
+ var _extraInfo$http, _extraInfo$http2, res;
140
155
 
141
156
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
142
157
  while (1) {
@@ -148,12 +163,12 @@ function Index(props) {
148
163
  }
149
164
 
150
165
  _context2.next = 3;
151
- return getEnumDataByUrl(deepClone(extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.http), '');
166
+ return getEnumDataByUrl(deepClone(extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.http), '', (extraInfo === null || extraInfo === void 0 ? void 0 : (_extraInfo$http = extraInfo.http) === null || _extraInfo$http === void 0 ? void 0 : _extraInfo$http.isPagination) && pageRef.current);
152
167
 
153
168
  case 3:
154
169
  res = _context2.sent;
155
170
 
156
- if (extraInfo === null || extraInfo === void 0 ? void 0 : (_extraInfo$http = extraInfo.http) === null || _extraInfo$http === void 0 ? void 0 : _extraInfo$http.isCascader) {
171
+ if (extraInfo === null || extraInfo === void 0 ? void 0 : (_extraInfo$http2 = extraInfo.http) === null || _extraInfo$http2 === void 0 ? void 0 : _extraInfo$http2.isCascader) {
157
172
  setCascaderOption(_toConsumableArray(res));
158
173
  }
159
174
 
@@ -199,20 +214,24 @@ function Index(props) {
199
214
  }, _callee3);
200
215
  }));
201
216
 
202
- return function loadData(_x3) {
217
+ return function loadData(_x4) {
203
218
  return _ref3.apply(this, arguments);
204
219
  };
205
220
  }();
206
221
 
207
- var processSelectType = function processSelectType(b) {
208
- if (b) {
222
+ var onSearch = function onSearch(value) {};
223
+
224
+ var onPagination = function onPagination(page, pageSize) {};
225
+
226
+ var processSelectType = function processSelectType(isCascader, isPagination) {
227
+ if (isCascader) {
209
228
  return /*#__PURE__*/React.createElement(_Cascader, {
210
229
  multiple: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.isMutiple,
211
230
  options: cascaderOption,
212
231
  loadData: loadData,
213
232
  maxTagCount: 10
214
233
  });
215
- } else {
234
+ } else if (isPagination) {
216
235
  var _extraInfo$disabled;
217
236
 
218
237
  return /*#__PURE__*/React.createElement(_Select, {
@@ -221,6 +240,42 @@ function Index(props) {
221
240
  disabled: (_extraInfo$disabled = extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.disabled) !== null && _extraInfo$disabled !== void 0 ? _extraInfo$disabled : disabled,
222
241
  placeholder: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.placeholder,
223
242
  options: httpOptions && httpOptions.length > 0 ? httpOptions : options,
243
+ dropdownRender: function dropdownRender(menu) {
244
+ return /*#__PURE__*/React.createElement(React.Fragment, null, menu, /*#__PURE__*/React.createElement(_Divider, {
245
+ style: {
246
+ margin: '8px 0'
247
+ }
248
+ }), /*#__PURE__*/React.createElement(_Space, {
249
+ style: {
250
+ padding: '0 8px 4px',
251
+ width: '100%',
252
+ display: 'flex'
253
+ }
254
+ }, /*#__PURE__*/React.createElement(_Input.Search, {
255
+ placeholder: tr('根据名称检索'),
256
+ onSearch: onSearch
257
+ }), /*#__PURE__*/React.createElement(_Pagination, {
258
+ simple: true,
259
+ defaultCurrent: pageRef.current,
260
+ total: totalRef.current,
261
+ pageSize: 30,
262
+ onChange: onPagination
263
+ })));
264
+ },
265
+ getPopupContainer: function getPopupContainer(triggerNode) {
266
+ return triggerNode.parentNode;
267
+ },
268
+ allowClear: true
269
+ });
270
+ } else {
271
+ var _extraInfo$disabled2;
272
+
273
+ return /*#__PURE__*/React.createElement(_Select, {
274
+ mode: (extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.isMutiple) ? 'multiple' : extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.mode,
275
+ onSelect: onSelect,
276
+ disabled: (_extraInfo$disabled2 = extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.disabled) !== null && _extraInfo$disabled2 !== void 0 ? _extraInfo$disabled2 : disabled,
277
+ placeholder: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.placeholder,
278
+ options: httpOptions && httpOptions.length > 0 ? httpOptions : options,
224
279
  showSearch: true,
225
280
  filterOption: function filterOption(input, option) {
226
281
  var _option$label;
@@ -236,7 +291,7 @@ function Index(props) {
236
291
  };
237
292
 
238
293
  if (isObj && isRefForm && field) {
239
- var _extraInfo$http2;
294
+ var _extraInfo$http3, _extraInfo$http4;
240
295
 
241
296
  return /*#__PURE__*/React.createElement(_Form.Item, _extends({}, field, {
242
297
  style: {
@@ -251,7 +306,7 @@ function Index(props) {
251
306
  }],
252
307
  help: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.help,
253
308
  tooltip: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.tooltip
254
- }), processSelectType((_extraInfo$http2 = extraInfo.http) === null || _extraInfo$http2 === void 0 ? void 0 : _extraInfo$http2.isCascader));
309
+ }), processSelectType((_extraInfo$http3 = extraInfo.http) === null || _extraInfo$http3 === void 0 ? void 0 : _extraInfo$http3.isCascader, (_extraInfo$http4 = extraInfo.http) === null || _extraInfo$http4 === void 0 ? void 0 : _extraInfo$http4.isPagination));
255
310
  }
256
311
 
257
312
  return !field ? /*#__PURE__*/React.createElement(_Form.Item, {
@@ -267,7 +322,7 @@ function Index(props) {
267
322
  }],
268
323
  help: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.help,
269
324
  tooltip: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.tooltip
270
- }, processSelectType((_extraInfo$http3 = extraInfo.http) === null || _extraInfo$http3 === void 0 ? void 0 : _extraInfo$http3.isCascader)) : /*#__PURE__*/React.createElement(_Form.Item, _extends({}, field, {
325
+ }, processSelectType((_extraInfo$http5 = extraInfo.http) === null || _extraInfo$http5 === void 0 ? void 0 : _extraInfo$http5.isCascader, (_extraInfo$http6 = extraInfo.http) === null || _extraInfo$http6 === void 0 ? void 0 : _extraInfo$http6.isPagination)) : /*#__PURE__*/React.createElement(_Form.Item, _extends({}, field, {
271
326
  style: {
272
327
  flex: 1,
273
328
  paddingRight: '10px'
@@ -279,7 +334,7 @@ function Index(props) {
279
334
  }],
280
335
  help: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.help,
281
336
  tooltip: extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.tooltip
282
- }), processSelectType((_extraInfo$http4 = extraInfo.http) === null || _extraInfo$http4 === void 0 ? void 0 : _extraInfo$http4.isCascader));
337
+ }), processSelectType((_extraInfo$http7 = extraInfo.http) === null || _extraInfo$http7 === void 0 ? void 0 : _extraInfo$http7.isCascader, (_extraInfo$http8 = extraInfo.http) === null || _extraInfo$http8 === void 0 ? void 0 : _extraInfo$http8.isPagination));
283
338
  }
284
339
 
285
340
  export default /*#__PURE__*/React.memo(Index);
@@ -16,5 +16,5 @@ export declare class MetadataService {
16
16
  /** 获取元数据的值 */
17
17
  GetMetadataObjList(data: any): Promise<any[]>;
18
18
  /** 通过扩展规则获取枚举类型的值 */
19
- GetEnumDataByUrl(url: string): Promise<any[]>;
19
+ GetEnumDataByUrl(url: string): Promise<any>;
20
20
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * @Author: wangxian
3
3
  * @Date: 2021-09-18 14:15:04
4
- * @LastEditTime: 2022-05-23 12:00:58
4
+ * @LastEditTime: 2022-08-11 18:26:11
5
5
  */
6
6
  export type IMetaType = 'object' | 'ref' | 'bool' | 'number' | 'text' | 'enum' | 'array' | string;
7
7
 
@@ -94,5 +94,5 @@ export interface IAPI {
94
94
  // 获取元数据的值
95
95
  GetMetadataObjList(data: any): Promise<any[]>;
96
96
  /** 通过扩展规则获取枚举类型的值 */
97
- GetEnumDataByUrl(url: string): Promise<any[]>;
97
+ GetEnumDataByUrl(url: string): Promise<any>;
98
98
  }
package/es/utils.d.ts CHANGED
@@ -13,3 +13,4 @@ export declare function useDebounce(fn: Function, delay: number, dep?: Dependenc
13
13
  export declare function useThrottle(fn: Function, delay: number, dep?: DependencyList): (...args: any[]) => void;
14
14
  export declare function deepClone<T = any>(target: T): T;
15
15
  export declare function guid(): string;
16
+ export declare const md5: (data: string, digest?: string) => any;
package/es/utils.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * @Author: wangxian
3
3
  * @Date: 2021-09-18 14:15:04
4
- * @LastEditTime: 2022-04-13 15:00:29
4
+ * @LastEditTime: 2022-08-11 09:42:43
5
5
  */
6
6
  import { useCallback, useEffect, useRef } from 'react';
7
7
  /** 防抖 */
@@ -102,4 +102,11 @@ export function guid() {
102
102
  }
103
103
 
104
104
  return id;
105
- }
105
+ }
106
+
107
+ var crypto = require('crypto');
108
+
109
+ export var md5 = function md5(data) {
110
+ var digest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'hex';
111
+ return crypto.createHash('md5').update(data).digest(digest || 'base64');
112
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "public": true,
3
3
  "name": "ronds-metadata",
4
- "version": "1.1.33",
4
+ "version": "1.1.34",
5
5
  "scripts": {
6
6
  "start": "dumi dev",
7
7
  "docs:build": "dumi build",
@@ -37,23 +37,28 @@
37
37
  "@babel/helper-create-regexp-features-plugin": "^7.12.13",
38
38
  "@babel/runtime": "^7.11.2",
39
39
  "@popperjs/core": "^2.4.4",
40
+ "@types/markdown-navbar": "^1.4.0",
40
41
  "ahooks": "^3.4.0",
41
42
  "axios": "^0.21.4",
42
43
  "babel-plugin-import": "^1.13.3",
43
44
  "babel-plugin-transform-remove-console": "^6.9.4",
44
45
  "bl": "^5.0.0",
45
46
  "codemirror": "^5.63.0",
47
+ "github-markdown-css": "^5.1.0",
46
48
  "highlight.js": "11.3.1",
47
49
  "immer": "^9.0.14",
48
50
  "lodash": "^4.17.21",
49
51
  "markdown-it": "^12.3.2",
50
52
  "markdown-it-emoji": "^2.0.0",
53
+ "markdown-navbar": "^1.4.3",
51
54
  "qs": "^6.10.1",
52
55
  "react": "^17.0.2",
53
56
  "react-dnd": "^11.1.3",
54
57
  "react-dnd-html5-backend": "^11.1.3",
58
+ "react-markdown": "^8.0.3",
55
59
  "react-markdown-editor-lite": "^1.3.2",
56
60
  "react-popper": "^2.2.3",
61
+ "remark-gfm": "^3.0.1",
57
62
  "rxjs": "^7.5.4"
58
63
  },
59
64
  "peerDependencies": {
@@ -72,6 +77,7 @@
72
77
  "@umijs/test": "^3.0.5",
73
78
  "antd": "^4.18.1",
74
79
  "babel-loader": "^8.1.0",
80
+ "copy-to-clipboard": "^3.3.1",
75
81
  "css-loader": "^4.2.2",
76
82
  "dumi": "^1.0.16",
77
83
  "father-build": "^1.17.2",
@@ -81,7 +87,6 @@
81
87
  "prettier": "^2.2.1",
82
88
  "style-loader": "^1.2.1",
83
89
  "webpack-cli": "^3.3.12",
84
- "copy-to-clipboard": "^3.3.1",
85
90
  "yorkie": "^2.0.0"
86
91
  }
87
92
  }