yy-forms 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.fatherrc.js +37 -0
  2. package/CHANGELOG.md +254 -0
  3. package/LICENSE +21 -0
  4. package/README.md +99 -0
  5. package/dist/index.d.ts +145 -0
  6. package/dist/index.esm.js +4006 -0
  7. package/dist/index.js +4041 -0
  8. package/es/Provider.js +248 -0
  9. package/es/index.d.ts +145 -0
  10. package/es/index.js +44 -0
  11. package/es/settings/index.js +975 -0
  12. package/es/styles/atom.less +1134 -0
  13. package/es/styles/index.less +358 -0
  14. package/es/transformer/form-render.js +75 -0
  15. package/es/utils/context.js +3 -0
  16. package/es/utils/hooks.js +48 -0
  17. package/es/utils/index.js +706 -0
  18. package/es/utils/mapping.js +31 -0
  19. package/es/utils/serialize.js +276 -0
  20. package/es/widgets/htmlInput.js +20 -0
  21. package/es/widgets/idInput.js +23 -0
  22. package/es/widgets/index.js +5 -0
  23. package/es/widgets/jsonInput.js +24 -0
  24. package/es/widgets/list.js +24 -0
  25. package/es/widgets/percentSlider.js +89 -0
  26. package/package.json +53 -0
  27. package/src/Provider.jsx +239 -0
  28. package/src/components/Canvas/core/RenderChildren.jsx +18 -0
  29. package/src/components/Canvas/core/RenderField.jsx +129 -0
  30. package/src/components/Canvas/core/Wrapper.jsx +298 -0
  31. package/src/components/Canvas/core/Wrapper.less +57 -0
  32. package/src/components/Canvas/core/index.jsx +171 -0
  33. package/src/components/Canvas/index.jsx +178 -0
  34. package/src/components/Settings/GlobalSettings.jsx +48 -0
  35. package/src/components/Settings/ItemSettings.jsx +143 -0
  36. package/src/components/Settings/index.jsx +75 -0
  37. package/src/components/Settings/index.less +25 -0
  38. package/src/components/Sidebar/Element.jsx +80 -0
  39. package/src/components/Sidebar/Element.less +18 -0
  40. package/src/components/Sidebar/index.jsx +47 -0
  41. package/src/components/Sidebar/index.less +23 -0
  42. package/src/i18next/index.ts +14 -0
  43. package/src/i18next/locales/enUS.json +60 -0
  44. package/src/i18next/locales/resources.ts +7 -0
  45. package/src/i18next/locales/zhCN.json +3 -0
  46. package/src/index.d.ts +145 -0
  47. package/src/index.js +45 -0
  48. package/src/settings/index.js +1058 -0
  49. package/src/styles/atom.less +1134 -0
  50. package/src/styles/index.less +358 -0
  51. package/src/transformer/form-render.js +65 -0
  52. package/src/utils/context.js +4 -0
  53. package/src/utils/hooks.js +35 -0
  54. package/src/utils/index.js +678 -0
  55. package/src/utils/mapping.js +29 -0
  56. package/src/utils/serialize.js +368 -0
  57. package/src/widgets/htmlInput.jsx +24 -0
  58. package/src/widgets/idInput.jsx +27 -0
  59. package/src/widgets/index.js +6 -0
  60. package/src/widgets/jsonInput.jsx +29 -0
  61. package/src/widgets/list.jsx +28 -0
  62. package/src/widgets/percentSlider.jsx +74 -0
@@ -0,0 +1,4006 @@
1
+ import React, { createContext, useContext, useReducer, Suspense, useState, useRef, useEffect, forwardRef, useImperativeHandle } from 'react';
2
+ import { useTranslation, initReactI18next } from 'react-i18next';
3
+ import 'antd/es/modal/style';
4
+ import _Modal from 'antd/es/modal';
5
+ import 'antd/es/button/style';
6
+ import _Button from 'antd/es/button';
7
+ import 'antd/es/message/style';
8
+ import _message from 'antd/es/message';
9
+ import 'antd/es/input/style';
10
+ import _Input from 'antd/es/input';
11
+ import copyTOClipboard from 'copy-text-to-clipboard';
12
+ import deepClone from 'clone';
13
+ import { nanoid as nanoid$1, customAlphabet } from 'nanoid';
14
+ import FormRender, { useForm, mapping, widgets } from 'form-render';
15
+ import cn from 'classnames';
16
+ import _CopyOutlined from '@ant-design/icons/lib/icons/CopyOutlined';
17
+ import _DeleteOutlined from '@ant-design/icons/lib/icons/DeleteOutlined';
18
+ import _DragOutlined from '@ant-design/icons/lib/icons/DragOutlined';
19
+ import { useDrag, useDrop, DndProvider } from 'react-dnd';
20
+ import _RightOutlined from '@ant-design/icons/lib/icons/RightOutlined';
21
+ import 'antd/es/tabs/style';
22
+ import _Tabs from 'antd/es/tabs';
23
+ import 'antd/es/slider/style';
24
+ import _Slider from 'antd/es/slider';
25
+ import 'antd/es/input-number/style';
26
+ import _InputNumber from 'antd/es/input-number';
27
+ import 'antd/es/config-provider/style';
28
+ import _ConfigProvider from 'antd/es/config-provider';
29
+ import zhCN$1 from 'antd/lib/locale/zh_CN';
30
+ import { HTML5Backend } from 'react-dnd-html5-backend';
31
+ import _PlusCircleOutlined from '@ant-design/icons/lib/icons/PlusCircleOutlined';
32
+ import i18n from 'i18next';
33
+
34
+ function _arrayLikeToArray(r, a) {
35
+ (null == a || a > r.length) && (a = r.length);
36
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
37
+ return n;
38
+ }
39
+ function _arrayWithHoles(r) {
40
+ if (Array.isArray(r)) return r;
41
+ }
42
+ function _arrayWithoutHoles(r) {
43
+ if (Array.isArray(r)) return _arrayLikeToArray(r);
44
+ }
45
+ function asyncGeneratorStep(n, t, e, r, o, a, c) {
46
+ try {
47
+ var i = n[a](c),
48
+ u = i.value;
49
+ } catch (n) {
50
+ return void e(n);
51
+ }
52
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
53
+ }
54
+ function _asyncToGenerator(n) {
55
+ return function () {
56
+ var t = this,
57
+ e = arguments;
58
+ return new Promise(function (r, o) {
59
+ var a = n.apply(t, e);
60
+ function _next(n) {
61
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
62
+ }
63
+ function _throw(n) {
64
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
65
+ }
66
+ _next(void 0);
67
+ });
68
+ };
69
+ }
70
+ function _defineProperty(e, r, t) {
71
+ return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
72
+ value: t,
73
+ enumerable: !0,
74
+ configurable: !0,
75
+ writable: !0
76
+ }) : e[r] = t, e;
77
+ }
78
+ function _extends() {
79
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
80
+ for (var e = 1; e < arguments.length; e++) {
81
+ var t = arguments[e];
82
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
83
+ }
84
+ return n;
85
+ }, _extends.apply(null, arguments);
86
+ }
87
+ function _iterableToArray(r) {
88
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
89
+ }
90
+ function _iterableToArrayLimit(r, l) {
91
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
92
+ if (null != t) {
93
+ var e,
94
+ n,
95
+ i,
96
+ u,
97
+ a = [],
98
+ f = !0,
99
+ o = !1;
100
+ try {
101
+ if (i = (t = t.call(r)).next, 0 === l) {
102
+ if (Object(t) !== t) return;
103
+ f = !1;
104
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
105
+ } catch (r) {
106
+ o = !0, n = r;
107
+ } finally {
108
+ try {
109
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
110
+ } finally {
111
+ if (o) throw n;
112
+ }
113
+ }
114
+ return a;
115
+ }
116
+ }
117
+ function _nonIterableRest() {
118
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
119
+ }
120
+ function _nonIterableSpread() {
121
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
122
+ }
123
+ function ownKeys(e, r) {
124
+ var t = Object.keys(e);
125
+ if (Object.getOwnPropertySymbols) {
126
+ var o = Object.getOwnPropertySymbols(e);
127
+ r && (o = o.filter(function (r) {
128
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
129
+ })), t.push.apply(t, o);
130
+ }
131
+ return t;
132
+ }
133
+ function _objectSpread2(e) {
134
+ for (var r = 1; r < arguments.length; r++) {
135
+ var t = null != arguments[r] ? arguments[r] : {};
136
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
137
+ _defineProperty(e, r, t[r]);
138
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
139
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
140
+ });
141
+ }
142
+ return e;
143
+ }
144
+ function _objectWithoutProperties(e, t) {
145
+ if (null == e) return {};
146
+ var o,
147
+ r,
148
+ i = _objectWithoutPropertiesLoose(e, t);
149
+ if (Object.getOwnPropertySymbols) {
150
+ var n = Object.getOwnPropertySymbols(e);
151
+ for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
152
+ }
153
+ return i;
154
+ }
155
+ function _objectWithoutPropertiesLoose(r, e) {
156
+ if (null == r) return {};
157
+ var t = {};
158
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
159
+ if (-1 !== e.indexOf(n)) continue;
160
+ t[n] = r[n];
161
+ }
162
+ return t;
163
+ }
164
+ function _regenerator() {
165
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
166
+ var e,
167
+ t,
168
+ r = "function" == typeof Symbol ? Symbol : {},
169
+ n = r.iterator || "@@iterator",
170
+ o = r.toStringTag || "@@toStringTag";
171
+ function i(r, n, o, i) {
172
+ var c = n && n.prototype instanceof Generator ? n : Generator,
173
+ u = Object.create(c.prototype);
174
+ return _regeneratorDefine(u, "_invoke", function (r, n, o) {
175
+ var i,
176
+ c,
177
+ u,
178
+ f = 0,
179
+ p = o || [],
180
+ y = !1,
181
+ G = {
182
+ p: 0,
183
+ n: 0,
184
+ v: e,
185
+ a: d,
186
+ f: d.bind(e, 4),
187
+ d: function (t, r) {
188
+ return i = t, c = 0, u = e, G.n = r, a;
189
+ }
190
+ };
191
+ function d(r, n) {
192
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
193
+ var o,
194
+ i = p[t],
195
+ d = G.p,
196
+ l = i[2];
197
+ r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
198
+ }
199
+ if (o || r > 1) return a;
200
+ throw y = !0, n;
201
+ }
202
+ return function (o, p, l) {
203
+ if (f > 1) throw TypeError("Generator is already running");
204
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
205
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
206
+ try {
207
+ if (f = 2, i) {
208
+ if (c || (o = "next"), t = i[o]) {
209
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
210
+ if (!t.done) return t;
211
+ u = t.value, c < 2 && (c = 0);
212
+ } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
213
+ i = e;
214
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
215
+ } catch (t) {
216
+ i = e, c = 1, u = t;
217
+ } finally {
218
+ f = 1;
219
+ }
220
+ }
221
+ return {
222
+ value: t,
223
+ done: y
224
+ };
225
+ };
226
+ }(r, o, i), !0), u;
227
+ }
228
+ var a = {};
229
+ function Generator() {}
230
+ function GeneratorFunction() {}
231
+ function GeneratorFunctionPrototype() {}
232
+ t = Object.getPrototypeOf;
233
+ var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {
234
+ return this;
235
+ }), t),
236
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
237
+ function f(e) {
238
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
239
+ }
240
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine(u), _regeneratorDefine(u, o, "Generator"), _regeneratorDefine(u, n, function () {
241
+ return this;
242
+ }), _regeneratorDefine(u, "toString", function () {
243
+ return "[object Generator]";
244
+ }), (_regenerator = function () {
245
+ return {
246
+ w: i,
247
+ m: f
248
+ };
249
+ })();
250
+ }
251
+ function _regeneratorDefine(e, r, n, t) {
252
+ var i = Object.defineProperty;
253
+ try {
254
+ i({}, "", {});
255
+ } catch (e) {
256
+ i = 0;
257
+ }
258
+ _regeneratorDefine = function (e, r, n, t) {
259
+ function o(r, n) {
260
+ _regeneratorDefine(e, r, function (e) {
261
+ return this._invoke(r, n, e);
262
+ });
263
+ }
264
+ r ? i ? i(e, r, {
265
+ value: n,
266
+ enumerable: !t,
267
+ configurable: !t,
268
+ writable: !t
269
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
270
+ }, _regeneratorDefine(e, r, n, t);
271
+ }
272
+ function _slicedToArray(r, e) {
273
+ return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
274
+ }
275
+ function _toConsumableArray(r) {
276
+ return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
277
+ }
278
+ function _toPrimitive(t, r) {
279
+ if ("object" != typeof t || !t) return t;
280
+ var e = t[Symbol.toPrimitive];
281
+ if (void 0 !== e) {
282
+ var i = e.call(t, r || "default");
283
+ if ("object" != typeof i) return i;
284
+ throw new TypeError("@@toPrimitive must return a primitive value.");
285
+ }
286
+ return ("string" === r ? String : Number)(t);
287
+ }
288
+ function _toPropertyKey(t) {
289
+ var i = _toPrimitive(t, "string");
290
+ return "symbol" == typeof i ? i : i + "";
291
+ }
292
+ function _typeof(o) {
293
+ "@babel/helpers - typeof";
294
+
295
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
296
+ return typeof o;
297
+ } : function (o) {
298
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
299
+ }, _typeof(o);
300
+ }
301
+ function _unsupportedIterableToArray(r, a) {
302
+ if (r) {
303
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
304
+ var t = {}.toString.call(r).slice(8, -1);
305
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
306
+ }
307
+ }
308
+
309
+ var _excluded = ["propsSchema"],
310
+ _excluded2 = ["schema"],
311
+ _excluded3 = ["onChange", "value", "defaultValue", "schema"];
312
+ function stringContains(str, text) {
313
+ return str.indexOf(text) > -1;
314
+ }
315
+ var isObject = function isObject(a) {
316
+ return stringContains(Object.prototype.toString.call(a), 'Object');
317
+ };
318
+
319
+ // '3' => true, 3 => true, undefined => false
320
+ function isLooselyNumber(num) {
321
+ if (typeof num === 'number') return true;
322
+ if (typeof num === 'string') {
323
+ return !Number.isNaN(Number(num));
324
+ }
325
+ return false;
326
+ }
327
+ function isCssLength(str) {
328
+ if (typeof str !== 'string') return false;
329
+ return str.match(/^([0-9])*(%|px|rem|em)$/i);
330
+ }
331
+
332
+ // ----------------- schema 相关
333
+
334
+ // 合并propsSchema和UISchema。由于两者的逻辑相关性,合并为一个大schema能简化内部处理
335
+ function combineSchema() {
336
+ var propsSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
337
+ var uiSchema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
338
+ var propList = getChildren(propsSchema);
339
+ var newList = propList.map(function (p) {
340
+ var name = p.name;
341
+ var _p$schema = p.schema,
342
+ type = _p$schema.type,
343
+ options = _p$schema.enum,
344
+ properties = _p$schema.properties,
345
+ items = _p$schema.items;
346
+ var isObj = type === 'object' && properties;
347
+ var isArr = type === 'array' && items && !options; // enum + array 代表的多选框,没有sub
348
+ var ui = name && uiSchema[p.name];
349
+ if (!ui) {
350
+ return p;
351
+ }
352
+ // 如果是list,递归合并items
353
+ if (isArr) {
354
+ var newItems = combineSchema(items, ui.items || {});
355
+ return _objectSpread2(_objectSpread2({}, p), {}, {
356
+ schema: _objectSpread2(_objectSpread2(_objectSpread2({}, p.schema), ui), {}, {
357
+ items: newItems
358
+ })
359
+ });
360
+ }
361
+ // object递归合并整个schema
362
+ if (isObj) {
363
+ var newSchema = combineSchema(p.schema, ui);
364
+ return _objectSpread2(_objectSpread2({}, p), {}, {
365
+ schema: newSchema
366
+ });
367
+ }
368
+ return _objectSpread2(_objectSpread2({}, p), {}, {
369
+ schema: _objectSpread2(_objectSpread2({}, p.schema), ui)
370
+ });
371
+ });
372
+ var newObj = {};
373
+ newList.forEach(function (s) {
374
+ newObj[s.name] = s.schema;
375
+ });
376
+ var topLevelUi = {};
377
+ Object.keys(uiSchema).forEach(function (key) {
378
+ if (typeof key === 'string' && key.substring(0, 3) === 'ui:') {
379
+ topLevelUi[key] = uiSchema[key];
380
+ }
381
+ });
382
+ if (isEmpty(newObj)) {
383
+ return _objectSpread2(_objectSpread2({}, propsSchema), topLevelUi);
384
+ }
385
+ return _objectSpread2(_objectSpread2(_objectSpread2({}, propsSchema), topLevelUi), {}, {
386
+ properties: newObj
387
+ });
388
+ }
389
+ function isEmpty(obj) {
390
+ return Object.keys(obj).length === 0;
391
+ }
392
+
393
+ // 获得propsSchema的children
394
+ function getChildren(schema) {
395
+ if (!schema) return [];
396
+ var properties = schema.properties,
397
+ items = schema.items,
398
+ type = schema.type;
399
+ if (!properties && !items) {
400
+ return [];
401
+ }
402
+ var schemaSubs = {};
403
+ if (type === 'object') {
404
+ schemaSubs = properties;
405
+ }
406
+ if (type === 'array') {
407
+ schemaSubs = items;
408
+ }
409
+ return Object.keys(schemaSubs).map(function (name) {
410
+ return {
411
+ schema: schemaSubs[name],
412
+ name: name
413
+ };
414
+ });
415
+ }
416
+
417
+ // 后面三个参数都是内部递归使用的,将schema的树形结构扁平化成一层, 每个item的结构
418
+ // {
419
+ // parent: '#',
420
+ // schema: ...,
421
+ // children: []
422
+ // }
423
+ function flattenSchema(schema) {
424
+ var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#';
425
+ var parent = arguments.length > 2 ? arguments[2] : undefined;
426
+ var result = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
427
+ var _schema = deepClone(schema);
428
+ if (!_schema.$id) {
429
+ _schema.$id = name; // 给生成的schema添加一个唯一标识,方便从schema中直接读取
430
+ }
431
+ var children = [];
432
+ var isObj = _schema.type === 'object' && _schema.properties;
433
+ var isList = _schema.type === 'array' && _schema.items && _schema.items.properties;
434
+ if (isObj) {
435
+ Object.entries(_schema.properties).forEach(function (_ref) {
436
+ var _ref2 = _slicedToArray(_ref, 2),
437
+ key = _ref2[0],
438
+ value = _ref2[1];
439
+ var uniqueName = name + '/' + key;
440
+ children.push(uniqueName);
441
+ flattenSchema(value, uniqueName, name, result);
442
+ });
443
+ delete _schema.properties;
444
+ }
445
+ if (isList) {
446
+ Object.entries(_schema.items.properties).forEach(function (_ref3) {
447
+ var _ref4 = _slicedToArray(_ref3, 2),
448
+ key = _ref4[0],
449
+ value = _ref4[1];
450
+ var uniqueName = name + '/' + key;
451
+ children.push(uniqueName);
452
+ flattenSchema(value, uniqueName, name, result);
453
+ });
454
+ delete _schema.items.properties;
455
+ }
456
+ if (_schema.type) {
457
+ result[name] = {
458
+ parent: parent,
459
+ schema: _schema,
460
+ children: children
461
+ };
462
+ }
463
+ return result;
464
+ }
465
+ var getKeyFromUniqueId = function getKeyFromUniqueId() {
466
+ var uniqueId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#';
467
+ var arr = uniqueId.split('/');
468
+ return arr[arr.length - 1];
469
+ };
470
+ var changeKeyFromUniqueId = function changeKeyFromUniqueId() {
471
+ var uniqueId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#';
472
+ var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'something';
473
+ var arr = uniqueId.split('/');
474
+ if (typeof key === 'string' || typeof key === 'number') {
475
+ arr[arr.length - 1] = key;
476
+ }
477
+ return arr.join('/');
478
+ };
479
+
480
+ // final = true 用于最终的导出的输出
481
+ // 几种特例:
482
+ // 1. 删除时值删除了item,没有删除和parent的关联,也没有删除children,所以要在解析这步来兜住 (所有的解析都是)
483
+ // 2. 修改$id的情况, 修改的是schema内的$id, 解析的时候要把schema.$id 作为真正的id (final = true的解析)
484
+ function idToSchema(flatten) {
485
+ var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#';
486
+ var final = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
487
+ var schema = {};
488
+ var _item = flatten[id];
489
+ var item = deepClone(_item);
490
+ if (item) {
491
+ schema = _objectSpread2({}, item.schema);
492
+ // 最终输出去掉 $id
493
+ if (final) {
494
+ schema.$id && delete schema.$id;
495
+ }
496
+ if (item.children.length > 0) {
497
+ item.children.forEach(function (child) {
498
+ var childId = child;
499
+ // TODO: 这个情况会出现吗?return会有问题吗?
500
+ if (!flatten[child]) {
501
+ return;
502
+ }
503
+ // 最终输出将所有的 key 值改了
504
+ try {
505
+ if (final) {
506
+ childId = flatten[child].schema.$id;
507
+ }
508
+ } catch (error) {
509
+ console.error(error, 'catch');
510
+ }
511
+ var key = getKeyFromUniqueId(childId);
512
+ if (schema.type === 'object') {
513
+ if (!schema.properties) {
514
+ schema.properties = {};
515
+ }
516
+ schema.properties[key] = idToSchema(flatten, child, final);
517
+ }
518
+ if (schema.type === 'array' && schema.items && schema.items.type === 'object') {
519
+ if (!schema.items.properties) {
520
+ schema.items.properties = {};
521
+ }
522
+ schema.items.properties[key] = idToSchema(flatten, child, final);
523
+ }
524
+ });
525
+ } else {
526
+ if (schema.type === 'object' && !schema.properties) {
527
+ schema.properties = {};
528
+ }
529
+ if (schema.type === 'array' && schema.items && schema.items.type === 'object' && !schema.items.properties) {
530
+ schema.items.properties = {};
531
+ }
532
+ }
533
+ }
534
+ return schema;
535
+ }
536
+ var copyItem = function copyItem(flatten, $id, getId) {
537
+ var newFlatten = _objectSpread2({}, flatten);
538
+ try {
539
+ var item = flatten[$id];
540
+ var newId = getId($id);
541
+ var siblings = newFlatten[item.parent].children;
542
+ var idx = siblings.findIndex(function (x) {
543
+ return x === $id;
544
+ });
545
+ siblings.splice(idx + 1, 0, newId);
546
+ newFlatten[newId] = deepClone(newFlatten[$id]);
547
+ newFlatten[newId].schema.$id = newId;
548
+ return [newFlatten, newId];
549
+ } catch (error) {
550
+ console.error(error, 'catcherror');
551
+ return [flatten, $id];
552
+ }
553
+ };
554
+
555
+ // Left 点击添加 item
556
+ var addItem = function addItem(_ref5) {
557
+ var selected = _ref5.selected,
558
+ name = _ref5.name,
559
+ schema = _ref5.schema,
560
+ flatten = _ref5.flatten,
561
+ fixedName = _ref5.fixedName,
562
+ getId = _ref5.getId;
563
+ var _selected = selected || '#';
564
+ var newId;
565
+ // string第一个是0,说明点击了object、list的里侧
566
+ if (_selected && _selected[0] === '0' || _selected === '#') {
567
+ var _newFlatten = _objectSpread2({}, flatten);
568
+ try {
569
+ var oldId = _selected.substring(1);
570
+ newId = _selected === '#' ? "#/" : "".concat(oldId, "/");
571
+ if (!fixedName) {
572
+ newId += getId(name);
573
+ } else {
574
+ newId += name;
575
+ }
576
+ if (_selected === '#') {
577
+ oldId = '#';
578
+ }
579
+ var siblings = _newFlatten[oldId].children;
580
+ siblings.push(newId);
581
+ var newItem = {
582
+ parent: oldId,
583
+ schema: _objectSpread2(_objectSpread2({}, schema), {}, {
584
+ $id: newId
585
+ }),
586
+ data: undefined,
587
+ children: []
588
+ };
589
+ _newFlatten[newId] = newItem;
590
+ } catch (error) {
591
+ console.error(error, 'catch');
592
+ }
593
+ return {
594
+ newId: newId,
595
+ newFlatten: _newFlatten
596
+ };
597
+ }
598
+ var _name = fixedName ? name : getId(name);
599
+ var idArr = selected.split('/');
600
+ idArr.pop();
601
+ idArr.push(_name);
602
+ newId = idArr.join('/');
603
+ var newFlatten = _objectSpread2({}, flatten);
604
+ try {
605
+ var item = newFlatten[selected];
606
+ var _siblings = newFlatten[item.parent].children;
607
+ var idx = _siblings.findIndex(function (x) {
608
+ return x === selected;
609
+ });
610
+ _siblings.splice(idx + 1, 0, newId);
611
+ var _newItem = {
612
+ parent: item.parent,
613
+ schema: _objectSpread2(_objectSpread2({}, schema), {}, {
614
+ $id: newId
615
+ }),
616
+ data: undefined,
617
+ children: []
618
+ };
619
+ newFlatten[newId] = _newItem;
620
+ } catch (error) {
621
+ console.error(error);
622
+ }
623
+ return {
624
+ newId: newId,
625
+ newFlatten: newFlatten
626
+ };
627
+ };
628
+
629
+ // position 代表 drop 在元素的哪里: 'up' 上 'down' 下 'inside' 内部
630
+ var dropItem = function dropItem(_ref6) {
631
+ var dragId = _ref6.dragId,
632
+ dragItem = _ref6.dragItem,
633
+ dropId = _ref6.dropId,
634
+ position = _ref6.position,
635
+ flatten = _ref6.flatten;
636
+ var _position = dropId === '#' ? 'inside' : position;
637
+ var newFlatten = _objectSpread2({}, flatten);
638
+ // 会动到三块数据,dragItem, dragParent, dropParent. 其中dropParent可能就是dropItem(inside的情况)
639
+ if (dragItem) {
640
+ newFlatten[dragId] = dragItem;
641
+ }
642
+ var _dragItem = dragItem || newFlatten[dragId];
643
+ var dropItem = newFlatten[dropId];
644
+ var dropParent = dropItem;
645
+ if (_position !== 'inside') {
646
+ var parentId = dropItem.parent;
647
+ dropParent = newFlatten[parentId];
648
+ }
649
+ // TODO: 这块的体验,现在这样兜底了,但是drag起一个元素了,应该让原本变空
650
+ if (dropId.indexOf(dragId) > -1) {
651
+ return [newFlatten, dragId];
652
+ }
653
+ var newId = dragId;
654
+ try {
655
+ var newParentId = dropParent.schema.$id;
656
+ newId = newId.replace(_dragItem.parent, newParentId);
657
+ } catch (error) {}
658
+
659
+ // dragParent 的 children 删除 dragId
660
+ try {
661
+ var dragParent = newFlatten[_dragItem.parent];
662
+ var idx = dragParent.children.indexOf(dragId);
663
+ if (idx > -1 && !dragItem) {
664
+ dragParent.children.splice(idx, 1);
665
+ }
666
+ } catch (error) {
667
+ console.error(error);
668
+ }
669
+ try {
670
+ // dropParent 的 children 添加 dragId
671
+ var newChildren = dropParent.children || []; // 要考虑children为空,inside的情况
672
+ var _idx = newChildren.indexOf(dropId);
673
+ switch (_position) {
674
+ case 'up':
675
+ newChildren.splice(_idx, 0, dragId);
676
+ break;
677
+ case 'down':
678
+ newChildren.splice(_idx + 1, 0, dragId);
679
+ break;
680
+ default:
681
+ // inside 作为 default 情况
682
+ newChildren.push(dragId);
683
+ break;
684
+ }
685
+ dropParent.children = newChildren;
686
+ } catch (error) {
687
+ console.error(error);
688
+ }
689
+ _dragItem.parent = dropParent.$id;
690
+ return [newFlatten, newId];
691
+ };
692
+
693
+ // TODO: 没有考虑list的情况
694
+ var dataToFlatten = function dataToFlatten(flatten, data) {
695
+ if (!flatten || !data) return {};
696
+ Object.entries(flatten).forEach(function (_ref7) {
697
+ var _ref8 = _slicedToArray(_ref7, 2),
698
+ id = _ref8[0],
699
+ item = _ref8[1];
700
+ var branchData = getDataById(data, id);
701
+ flatten[id].data = branchData;
702
+ });
703
+ return flatten;
704
+ };
705
+ var _flattenToData = function flattenToData(flatten) {
706
+ var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#';
707
+ try {
708
+ var result = flatten[id].data;
709
+ var ids = Object.keys(flatten);
710
+ var childrenIds = ids.filter(function (item) {
711
+ var lengthOfId = id.split('/').length;
712
+ var lengthOfChild = item.split('/').length;
713
+ return item.indexOf(id) > -1 && lengthOfChild > lengthOfId;
714
+ });
715
+ if (childrenIds && childrenIds.length > 0) {
716
+ var type = flatten[id].schema.type;
717
+ if (result === undefined) {
718
+ // TODO: 这个是简化的逻辑,在编辑器模型下,list和object都是object结构
719
+ if (type === 'object') {
720
+ result = {};
721
+ } else if (type === 'array') {
722
+ result = [{}];
723
+ }
724
+ }
725
+ childrenIds.forEach(function (c) {
726
+ var lengthOfId = id.split('/').length;
727
+ var lengthOfChild = c.split('/').length;
728
+ // 只比他长1,是直属的child
729
+ if (lengthOfChild === lengthOfId + 1) {
730
+ var cData = _flattenToData(flatten, c);
731
+ var cKey = getKeyFromUniqueId(c);
732
+ if (cData === undefined) return result;
733
+ if (type === 'array') {
734
+ result[0][cKey] = cData;
735
+ } else {
736
+ result[cKey] = cData;
737
+ }
738
+ }
739
+ });
740
+ }
741
+ return result;
742
+ } catch (error) {
743
+ return undefined;
744
+ }
745
+ };
746
+ var _getParentProps = function getParentProps(propName, id, flatten) {
747
+ try {
748
+ var item = flatten[id];
749
+ if (item.schema[propName] !== undefined) return item.schema[propName];
750
+ if (item && item.parent) {
751
+ var parentSchema = flatten[item.parent].schema;
752
+ if (parentSchema[propName] !== undefined) {
753
+ return parentSchema[propName];
754
+ } else {
755
+ return _getParentProps(propName, item.parent, flatten);
756
+ }
757
+ }
758
+ } catch (error) {
759
+ return undefined;
760
+ }
761
+ };
762
+ function looseJsonParse(obj) {
763
+ return Function('"use strict";return (' + obj + ')')();
764
+ }
765
+
766
+ // 获得 propsSchema 的 children
767
+ function getChildren2(schema) {
768
+ if (!schema) return [];
769
+ var properties = schema.properties,
770
+ items = schema.items,
771
+ type = schema.type;
772
+ if (!properties && !items) {
773
+ return [];
774
+ }
775
+ var schemaSubs = {};
776
+ if (type === 'object') {
777
+ schemaSubs = properties;
778
+ }
779
+ if (type === 'array') {
780
+ schemaSubs = items.properties;
781
+ }
782
+ return Object.keys(schemaSubs).map(function (name) {
783
+ return {
784
+ schema: schemaSubs[name],
785
+ name: name
786
+ };
787
+ });
788
+ }
789
+
790
+ // 解析函数字符串值
791
+ // getDataById(formData, '#/a/b/c')
792
+ function getDataById(object, path) {
793
+ path = castPath(path, object);
794
+ var index = 0;
795
+ var length = path.length;
796
+ while (object != null && index < length) {
797
+ var key = toKey(path[index++]);
798
+ if (Array.isArray(object) && _typeof(object[0]) === 'object') {
799
+ object = key ? object[0][key] : object;
800
+ } else {
801
+ object = key ? object[key] : object;
802
+ }
803
+ }
804
+ return index && index == length ? object : undefined;
805
+ }
806
+ function castPath(value, object) {
807
+ if (Array.isArray(value)) {
808
+ return value;
809
+ }
810
+ return isKey(value, object) ? [value] : value.match(/([^\.\/\[\]#"']+)/g);
811
+ }
812
+ function toKey(value) {
813
+ if (typeof value === 'string') {
814
+ return value.replace(/^#\/?/, '');
815
+ }
816
+ var result = "".concat(value);
817
+ return result == '0' && 1 / value == -INFINITY ? '-0' : result;
818
+ }
819
+ var reIsDeepProp = /#\/.+\//;
820
+ var reIsPlainProp = /^\w*$/;
821
+ function isKey(value, object) {
822
+ if (Array.isArray(value)) {
823
+ return false;
824
+ }
825
+ var type = _typeof(value);
826
+ if (type === 'number' || type === 'boolean' || value == null) {
827
+ return true;
828
+ }
829
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
830
+ }
831
+ var oldSchemaToNew = function oldSchemaToNew(schema) {
832
+ if (schema && schema.propsSchema) {
833
+ var propsSchema = schema.propsSchema,
834
+ rest = _objectWithoutProperties(schema, _excluded);
835
+ return _objectSpread2({
836
+ schema: propsSchema
837
+ }, rest);
838
+ }
839
+ if (schema && schema.schema) {
840
+ return schema.schema;
841
+ }
842
+ if (schema && schema.type === 'object') {
843
+ return schema;
844
+ }
845
+ return _objectSpread2({
846
+ type: 'object',
847
+ properties: {}
848
+ }, schema);
849
+ };
850
+ var newSchemaToOld = function newSchemaToOld(setting) {
851
+ if (setting && setting.schema) {
852
+ var schema = setting.schema,
853
+ rest = _objectWithoutProperties(setting, _excluded2);
854
+ return _objectSpread2({
855
+ propsSchema: schema
856
+ }, rest);
857
+ }
858
+ return setting;
859
+ };
860
+ var schemaToState = function schemaToState(value) {
861
+ var schema = oldSchemaToNew(value);
862
+ var frProps = Object.keys(schema).reduce(function (rst, cur) {
863
+ if (['type', 'properties'].includes(cur)) return rst;
864
+ return _objectSpread2(_objectSpread2({}, rst), {}, _defineProperty({}, cur, schema[cur]));
865
+ }, {});
866
+ var isNewVersion = !(value && value.propsSchema);
867
+ return {
868
+ schema: schema,
869
+ frProps: frProps,
870
+ formData: schema.formData || {},
871
+ isNewVersion: isNewVersion
872
+ };
873
+ };
874
+ function defaultGetValueFromEvent(valuePropName) {
875
+ var event = arguments.length <= 1 ? undefined : arguments[1];
876
+ if (event && event.target && valuePropName in event.target) {
877
+ return event.target[valuePropName];
878
+ }
879
+ return event;
880
+ }
881
+ var transformProps = function transformProps(props) {
882
+ var onChange = props.onChange,
883
+ value = props.value,
884
+ defaultValue = props.defaultValue,
885
+ ownSchema = props.schema,
886
+ rest = _objectWithoutProperties(props, _excluded3);
887
+ var schema = _objectSpread2({}, ownSchema);
888
+ var _ref9 = schema || {},
889
+ trigger = _ref9.trigger,
890
+ valuePropName = _ref9.valuePropName;
891
+ var controlProps = {};
892
+ var _valuePropName = 'value';
893
+ var _value = value === undefined ? defaultValue : value;
894
+ if (valuePropName && typeof valuePropName === 'string') {
895
+ _valuePropName = valuePropName;
896
+ controlProps[valuePropName] = _value;
897
+ } else {
898
+ controlProps.value = _value;
899
+ }
900
+ var _onChange = function _onChange() {
901
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
902
+ args[_key] = arguments[_key];
903
+ }
904
+ var newValue = defaultGetValueFromEvent.apply(void 0, [_valuePropName].concat(args));
905
+ onChange(newValue);
906
+ };
907
+ if (trigger && typeof trigger === 'string') {
908
+ controlProps[trigger] = _onChange;
909
+ } else {
910
+ controlProps.onChange = _onChange;
911
+ }
912
+
913
+ // TODO: 之后 ui:xx 会舍去
914
+ var usefulPropsFromSchema = {
915
+ disabled: schema.disabled || schema['ui:disabled'],
916
+ readOnly: schema.readOnly || schema['ui:readonly']
917
+ // hidden: schema.hidden || schema['ui:hidden'],
918
+ // $options: schema.options || schema['ui:options'],
919
+ };
920
+ var _props = _objectSpread2(_objectSpread2(_objectSpread2({}, controlProps), {}, {
921
+ schema: schema
922
+ }, usefulPropsFromSchema), rest);
923
+ return _props;
924
+ };
925
+ var mergeInOrder = function mergeInOrder() {
926
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
927
+ args[_key2] = arguments[_key2];
928
+ }
929
+ return args.reduce(function (result, current) {
930
+ if (!current) return result;
931
+ return Object.keys(current).reduce(function (rst, key) {
932
+ if (rst[key]) delete rst[key];
933
+ return _objectSpread2(_objectSpread2({}, rst), {}, _defineProperty({}, key, current[key]));
934
+ }, result);
935
+ }, {});
936
+ };
937
+ var defaultGetId = function defaultGetId(name) {
938
+ return "".concat(name, "_").concat(nanoid$1(6));
939
+ };
940
+
941
+ var Ctx = /*#__PURE__*/createContext(function () {});
942
+ var StoreCtx = /*#__PURE__*/createContext({});
943
+
944
+ // 使用最顶层组件的 setState
945
+ var useGlobal = function useGlobal() {
946
+ return useContext(Ctx);
947
+ };
948
+
949
+ // 组件最顶层传入的所有props
950
+ var useStore = function useStore() {
951
+ return useContext(StoreCtx);
952
+ };
953
+
954
+ // 类似于 class component 的 setState
955
+ var useSet = function useSet(initState) {
956
+ var _useReducer = useReducer(function (state, newState) {
957
+ var action = newState;
958
+ if (typeof newState === 'function') {
959
+ action = action(state);
960
+ }
961
+ if (newState.action && newState.payload) {
962
+ action = newState.payload;
963
+ if (typeof action === 'function') {
964
+ action = action(state);
965
+ }
966
+ }
967
+ return _objectSpread2(_objectSpread2({}, state), action);
968
+ }, initState),
969
+ _useReducer2 = _slicedToArray(_useReducer, 2),
970
+ state = _useReducer2[0],
971
+ setState = _useReducer2[1];
972
+ var setStateWithActionName = function setStateWithActionName(state, actionName) {
973
+ setState(state);
974
+ };
975
+ return [state, setStateWithActionName];
976
+ };
977
+
978
+ var RenderChildren = function RenderChildren(_ref) {
979
+ var _ref$children = _ref.children,
980
+ children = _ref$children === void 0 ? [] : _ref$children,
981
+ preview = _ref.preview;
982
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (child, i) {
983
+ var FRProps = {
984
+ id: child,
985
+ preview: preview
986
+ };
987
+ return /*#__PURE__*/React.createElement(FR, _extends({
988
+ key: i.toString()
989
+ }, FRProps));
990
+ }));
991
+ };
992
+
993
+ function getWidgetName(schema, _mapping) {
994
+ var type = schema.type,
995
+ format = schema.format,
996
+ enums = schema.enum,
997
+ readonly = schema.readonly;
998
+
999
+ // 如果已经注明了渲染widget,那最好
1000
+ if (schema['widget']) {
1001
+ return schema['widget'];
1002
+ }
1003
+ var list = [];
1004
+ if (readonly) {
1005
+ list.push("".concat(type, "?readonly"));
1006
+ list.push('*?readonly');
1007
+ }
1008
+ if (enums) {
1009
+ list.push("".concat(type, "?enum"));
1010
+ // array 默认使用list,array?enum 默认使用checkboxes,*?enum 默认使用select
1011
+ list.push('*?enum');
1012
+ }
1013
+ if (format) {
1014
+ list.push("".concat(type, ":").concat(format));
1015
+ }
1016
+ list.push(type); // 放在最后兜底,其他都不match时使用type默认的组件
1017
+ var found = '';
1018
+ list.some(function (item) {
1019
+ found = _mapping[item];
1020
+ return !!found;
1021
+ });
1022
+ return found;
1023
+ }
1024
+
1025
+ var RenderField = function RenderField(_ref) {
1026
+ var $id = _ref.$id,
1027
+ item = _ref.item,
1028
+ labelClass = _ref.labelClass,
1029
+ contentClass = _ref.contentClass,
1030
+ isComplex = _ref.isComplex,
1031
+ children = _ref.children;
1032
+ var schema = item.schema,
1033
+ data = item.data;
1034
+ var _useStore = useStore(),
1035
+ onItemChange = _useStore.onItemChange,
1036
+ flatten = _useStore.flatten,
1037
+ widgets = _useStore.widgets,
1038
+ mapping = _useStore.mapping,
1039
+ _useStore$frProps = _useStore.frProps,
1040
+ frProps = _useStore$frProps === void 0 ? {} : _useStore$frProps,
1041
+ fieldRender = _useStore.fieldRender;
1042
+ var labelWidth = frProps.labelWidth,
1043
+ displayType = frProps.displayType,
1044
+ showValidate = frProps.showValidate;
1045
+ var title = schema.title,
1046
+ description = schema.description,
1047
+ required = schema.required;
1048
+ var widgetName = getWidgetName(schema, mapping);
1049
+ var customWidget = schema['widget'];
1050
+ if (customWidget && widgets[customWidget]) {
1051
+ widgetName = customWidget;
1052
+ }
1053
+ var Widget = widgets[widgetName];
1054
+ // 如果不存在,比如有外部的自定义组件名称,使用默认展示组件
1055
+ if (!Widget) {
1056
+ var defaultSchema = _objectSpread2({}, schema);
1057
+ delete defaultSchema['widget'];
1058
+ widgetName = getWidgetName(defaultSchema, mapping);
1059
+ Widget = widgets[widgetName] || 'input';
1060
+ }
1061
+ // 真正有效的label宽度需要从现在所在item开始一直往上回溯(设计成了继承关系),找到的第一个有值的 labelWidth
1062
+ var effectiveLabelWidth = _getParentProps('labelWidth', $id, flatten) || labelWidth;
1063
+ var _labelWidth = isLooselyNumber(effectiveLabelWidth) ? Number(effectiveLabelWidth) : isCssLength(effectiveLabelWidth) ? effectiveLabelWidth : 110; // 默认是 110px 的长度
1064
+
1065
+ var labelStyle = {
1066
+ width: _labelWidth
1067
+ };
1068
+ if (widgetName === 'checkbox') {
1069
+ labelStyle = {
1070
+ flexGrow: 1
1071
+ };
1072
+ } else if (isComplex || displayType === 'column') {
1073
+ labelStyle = {
1074
+ flexGrow: 1
1075
+ };
1076
+ }
1077
+ var onChange = function onChange(value) {
1078
+ var newItem = _objectSpread2({}, item);
1079
+ if (item.schema.type === 'boolean' && item.schema.widget === 'checkbox') {
1080
+ newItem.data = !value;
1081
+ } else {
1082
+ newItem.data = value;
1083
+ }
1084
+ onItemChange($id, newItem, 'data');
1085
+ };
1086
+ var contentStyle = {};
1087
+ if (widgetName === 'checkbox' && displayType === 'row') {
1088
+ contentStyle.marginLeft = effectiveLabelWidth;
1089
+ }
1090
+
1091
+ // TODO: useMemo
1092
+ // 改为直接使用form-render内部自带组件后不需要再包一层options
1093
+ var usefulWidgetProps = transformProps(_objectSpread2({
1094
+ value: data || schema.default,
1095
+ checked: data,
1096
+ disabled: schema.disabled,
1097
+ readOnly: schema.readOnly,
1098
+ format: schema.format,
1099
+ onChange: onChange,
1100
+ schema: schema
1101
+ }, schema['props']));
1102
+ var originNode = /*#__PURE__*/React.createElement(React.Fragment, null, schema.title ? /*#__PURE__*/React.createElement("div", {
1103
+ className: labelClass,
1104
+ style: labelStyle
1105
+ }, /*#__PURE__*/React.createElement("label", {
1106
+ className: cn('fr-label-title', {
1107
+ 'no-colon': widgetName === 'checkbox' || displayType === 'column'
1108
+ }) // checkbox不带冒号
1109
+ ,
1110
+ title: title
1111
+ }, required && /*#__PURE__*/React.createElement("span", {
1112
+ className: "fr-label-required"
1113
+ }, " *"), /*#__PURE__*/React.createElement("span", {
1114
+ className: cn({
1115
+ b: isComplex,
1116
+ 'flex-none': displayType === 'column'
1117
+ })
1118
+ }, /*#__PURE__*/React.createElement("span", {
1119
+ dangerouslySetInnerHTML: {
1120
+ __html: title
1121
+ }
1122
+ })), description && /*#__PURE__*/React.createElement("span", {
1123
+ className: "fr-desc ml2"
1124
+ }, "(\xA0", description, "\xA0)"), displayType !== 'row' && showValidate && /*#__PURE__*/React.createElement("span", {
1125
+ className: "fr-validate"
1126
+ }, "validation"))) : null, /*#__PURE__*/React.createElement("div", {
1127
+ className: contentClass,
1128
+ style: contentStyle
1129
+ }, /*#__PURE__*/React.createElement(Suspense, {
1130
+ fallback: /*#__PURE__*/React.createElement("div", null)
1131
+ }, /*#__PURE__*/React.createElement(Widget, usefulWidgetProps, children || null))));
1132
+ if (!fieldRender) return originNode;
1133
+ return fieldRender(schema, usefulWidgetProps, children, originNode);
1134
+ };
1135
+
1136
+ function styleInject(css, ref) {
1137
+ if ( ref === void 0 ) ref = {};
1138
+ var insertAt = ref.insertAt;
1139
+
1140
+ if (!css || typeof document === 'undefined') { return; }
1141
+
1142
+ var head = document.head || document.getElementsByTagName('head')[0];
1143
+ var style = document.createElement('style');
1144
+ style.type = 'text/css';
1145
+
1146
+ if (insertAt === 'top') {
1147
+ if (head.firstChild) {
1148
+ head.insertBefore(style, head.firstChild);
1149
+ } else {
1150
+ head.appendChild(style);
1151
+ }
1152
+ } else {
1153
+ head.appendChild(style);
1154
+ }
1155
+
1156
+ if (style.styleSheet) {
1157
+ style.styleSheet.cssText = css;
1158
+ } else {
1159
+ style.appendChild(document.createTextNode(css));
1160
+ }
1161
+ }
1162
+
1163
+ var css_248z = ".field-wrapper {\n padding: 20px 8px 0 8px;\n border: 1px dashed #bbb;\n margin: 0 0 8px 0;\n}\n.field-wrapper::-webkit-scrollbar {\n width: 5px;\n background-color: #0002;\n}\n.field-wrapper::-webkit-scrollbar-thumb {\n background: #0004;\n border-radius: 5px;\n}\n.dnd-container > .field-wrapper {\n margin: 0;\n}\n.fr-generator-container .dnd-container > .field-wrapper > div.fr-field {\n margin: 0;\n}\n.pointer-move {\n position: absolute;\n top: -2px;\n left: -2px;\n height: 24px;\n width: 24px;\n color: #fff;\n background-color: #409eff;\n cursor: move;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.pointer-wrapper {\n position: absolute;\n z-index: 20;\n bottom: -2px;\n right: -2px;\n height: 24px;\n border-top-left-radius: 8px;\n background: #409eff;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0 4px;\n}\n.pointer {\n color: #fff;\n padding: 0 4px;\n}\n";
1164
+ styleInject(css_248z);
1165
+
1166
+ function Wrapper(_ref) {
1167
+ var $id = _ref.$id,
1168
+ item = _ref.item,
1169
+ _ref$inside = _ref.inside,
1170
+ inside = _ref$inside === void 0 ? false : _ref$inside,
1171
+ children = _ref.children,
1172
+ style = _ref.style;
1173
+ var _useState = useState(),
1174
+ _useState2 = _slicedToArray(_useState, 2),
1175
+ position = _useState2[0],
1176
+ setPosition = _useState2[1];
1177
+ var _useStore = useStore(),
1178
+ flatten = _useStore.flatten,
1179
+ onFlattenChange = _useStore.onFlattenChange,
1180
+ selected = _useStore.selected,
1181
+ userProps = _useStore.userProps,
1182
+ errorFields = _useStore.errorFields,
1183
+ fieldWrapperRender = _useStore.fieldWrapperRender;
1184
+ var controlButtons = userProps.controlButtons,
1185
+ _userProps$canDrag = userProps.canDrag,
1186
+ _canDrag = _userProps$canDrag === void 0 ? true : _userProps$canDrag,
1187
+ _userProps$canDelete = userProps.canDelete,
1188
+ canDelete = _userProps$canDelete === void 0 ? true : _userProps$canDelete,
1189
+ hideId = userProps.hideId,
1190
+ getId = userProps.getId;
1191
+ var setGlobal = useGlobal();
1192
+ var schema = item.schema;
1193
+ var type = schema.type;
1194
+ var boxRef = useRef(null);
1195
+ var _useDrag = useDrag({
1196
+ type: 'box',
1197
+ item: {
1198
+ $id: inside ? 0 + $id : $id
1199
+ },
1200
+ canDrag: function canDrag() {
1201
+ return typeof _canDrag === 'function' ? _canDrag(schema) : _canDrag;
1202
+ },
1203
+ collect: function collect(monitor) {
1204
+ return {
1205
+ isDragging: monitor.isDragging()
1206
+ };
1207
+ }
1208
+ }),
1209
+ _useDrag2 = _slicedToArray(_useDrag, 3),
1210
+ isDragging = _useDrag2[0].isDragging,
1211
+ dragRef = _useDrag2[1],
1212
+ dragPreview = _useDrag2[2];
1213
+ var _useDrop = useDrop({
1214
+ accept: 'box',
1215
+ drop: function () {
1216
+ var _drop = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(item, monitor) {
1217
+ var didDrop, _dropItem, _dropItem2, newFlatten, newId;
1218
+ return _regenerator().w(function (_context) {
1219
+ while (1) switch (_context.n) {
1220
+ case 0:
1221
+ // 如果 children 已经作为了 drop target,不处理
1222
+ didDrop = monitor.didDrop();
1223
+ if (!(didDrop || (errorFields === null || errorFields === void 0 ? void 0 : errorFields.length))) {
1224
+ _context.n = 1;
1225
+ break;
1226
+ }
1227
+ return _context.a(2);
1228
+ case 1:
1229
+ _dropItem = dropItem({
1230
+ dragId: item.$id,
1231
+ // 内部拖拽用dragId
1232
+ dragItem: item.dragItem,
1233
+ // 从左边栏过来的,用dragItem
1234
+ dropId: $id,
1235
+ position: position,
1236
+ flatten: flatten
1237
+ }), _dropItem2 = _slicedToArray(_dropItem, 2), newFlatten = _dropItem2[0], newId = _dropItem2[1];
1238
+ onFlattenChange(newFlatten);
1239
+ setGlobal({
1240
+ selected: newId
1241
+ });
1242
+ case 2:
1243
+ return _context.a(2);
1244
+ }
1245
+ }, _callee);
1246
+ }));
1247
+ function drop(_x, _x2) {
1248
+ return _drop.apply(this, arguments);
1249
+ }
1250
+ return drop;
1251
+ }(),
1252
+ hover: function hover(item, monitor) {
1253
+ // 只检查被hover的最小元素
1254
+ var didHover = monitor.isOver({
1255
+ shallow: true
1256
+ });
1257
+ if (didHover) {
1258
+ // Determine rectangle on screen
1259
+ var hoverBoundingRect = boxRef.current && boxRef.current.getBoundingClientRect();
1260
+ // Get vertical middle
1261
+ var hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
1262
+ // Determine mouse position
1263
+ // const clientOffset = monitor.getClientOffset();
1264
+ var dragOffset = monitor.getSourceClientOffset();
1265
+ // Get pixels to the top
1266
+ var hoverClientY = dragOffset.y - hoverBoundingRect.top;
1267
+ // Only perform the move when the mouse has crossed half of the items height
1268
+ // When dragging downwards, only move when the cursor is below 50%
1269
+ // When dragging upwards, only move when the cursor is above 50%
1270
+ // Dragging downwards
1271
+ if (inside) {
1272
+ setPosition('inside');
1273
+ } else {
1274
+ if (hoverClientY <= hoverMiddleY) {
1275
+ setPosition('up');
1276
+ }
1277
+ // Dragging upwards
1278
+ if (hoverClientY > hoverMiddleY) {
1279
+ setPosition('down');
1280
+ }
1281
+ }
1282
+ }
1283
+ },
1284
+ collect: function collect(monitor) {
1285
+ return {
1286
+ isOver: monitor.isOver({
1287
+ shallow: true
1288
+ }),
1289
+ canDrop: monitor.canDrop()
1290
+ };
1291
+ }
1292
+ }),
1293
+ _useDrop2 = _slicedToArray(_useDrop, 2),
1294
+ _useDrop2$ = _useDrop2[0],
1295
+ canDrop = _useDrop2$.canDrop,
1296
+ isOver = _useDrop2$.isOver,
1297
+ dropRef = _useDrop2[1];
1298
+ var isActive = canDrop && isOver;
1299
+ dragPreview(dropRef(boxRef));
1300
+ var handleClick = /*#__PURE__*/function () {
1301
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {
1302
+ var _id;
1303
+ return _regenerator().w(function (_context2) {
1304
+ while (1) switch (_context2.n) {
1305
+ case 0:
1306
+ e.stopPropagation();
1307
+ if (!(errorFields === null || errorFields === void 0 ? void 0 : errorFields.length)) {
1308
+ _context2.n = 1;
1309
+ break;
1310
+ }
1311
+ return _context2.a(2);
1312
+ case 1:
1313
+ _id = inside ? '0' + $id : $id;
1314
+ setGlobal({
1315
+ selected: _id
1316
+ });
1317
+ case 2:
1318
+ return _context2.a(2);
1319
+ }
1320
+ }, _callee2);
1321
+ }));
1322
+ return function handleClick(_x3) {
1323
+ return _ref2.apply(this, arguments);
1324
+ };
1325
+ }();
1326
+ var deleteItem = /*#__PURE__*/function () {
1327
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(e) {
1328
+ var newFlatten, newSelect, parent, siblings, idx, _canDelete;
1329
+ return _regenerator().w(function (_context3) {
1330
+ while (1) switch (_context3.n) {
1331
+ case 0:
1332
+ e.stopPropagation();
1333
+ newFlatten = _objectSpread2({}, flatten);
1334
+ newSelect = '#'; // 计算删除后新被选中的元素:
1335
+ // 1. 如果是第一个,选第二个
1336
+ // 2. 如果不是第一,选它前一个
1337
+ // 3. 如果同级元素没了,选parent
1338
+ try {
1339
+ parent = newFlatten[$id].parent;
1340
+ siblings = newFlatten[parent].children;
1341
+ idx = siblings.indexOf($id);
1342
+ if (idx > 0) {
1343
+ newSelect = siblings[idx - 1];
1344
+ } else {
1345
+ newSelect = siblings[1] || parent;
1346
+ }
1347
+ } catch (error) {
1348
+ console.error(error, 'catch');
1349
+ }
1350
+ _canDelete = canDelete;
1351
+ if (!(typeof canDelete === 'function')) {
1352
+ _context3.n = 2;
1353
+ break;
1354
+ }
1355
+ _context3.n = 1;
1356
+ return Promise.resolve(canDelete(newFlatten[$id].schema));
1357
+ case 1:
1358
+ _canDelete = _context3.v;
1359
+ case 2:
1360
+ if (_canDelete) {
1361
+ _context3.n = 3;
1362
+ break;
1363
+ }
1364
+ return _context3.a(2);
1365
+ case 3:
1366
+ delete newFlatten[$id];
1367
+ onFlattenChange(newFlatten);
1368
+ setGlobal({
1369
+ selected: newSelect
1370
+ });
1371
+ case 4:
1372
+ return _context3.a(2);
1373
+ }
1374
+ }, _callee3);
1375
+ }));
1376
+ return function deleteItem(_x4) {
1377
+ return _ref3.apply(this, arguments);
1378
+ };
1379
+ }();
1380
+ var handleItemCopy = function handleItemCopy(e) {
1381
+ e.stopPropagation();
1382
+ if (errorFields === null || errorFields === void 0 ? void 0 : errorFields.length) return;
1383
+ var _copyItem = copyItem(flatten, $id, getId),
1384
+ _copyItem2 = _slicedToArray(_copyItem, 2),
1385
+ newFlatten = _copyItem2[0],
1386
+ newId = _copyItem2[1];
1387
+ onFlattenChange(newFlatten);
1388
+ setGlobal({
1389
+ selected: newId
1390
+ });
1391
+ };
1392
+
1393
+ // 一些computed
1394
+ var isSelected = selected === $id && !inside;
1395
+ if (selected && selected[0] === '0') {
1396
+ isSelected = selected.substring(1) === $id && inside;
1397
+ }
1398
+ var overwriteStyle = {
1399
+ backgroundColor: '#fff',
1400
+ opacity: isDragging ? 0 : 1
1401
+ };
1402
+ if (inside) {
1403
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1404
+ borderColor: '#777',
1405
+ // marginLeft: 12,
1406
+ padding: '12px 12px 0',
1407
+ backgroundColor: '#f6f5f6'
1408
+ });
1409
+ } else if ($id === '#') {
1410
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1411
+ borderColor: '#777',
1412
+ padding: 12,
1413
+ height: '100%',
1414
+ overflow: 'auto',
1415
+ backgroundColor: '#f6f5f6'
1416
+ });
1417
+ } else if (type === 'object') {
1418
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1419
+ paddingTop: 12
1420
+ });
1421
+ }
1422
+ if (isActive) {
1423
+ if (inside) {
1424
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1425
+ boxShadow: '0 -3px 0 red'
1426
+ });
1427
+ } else if (position === 'up') {
1428
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1429
+ boxShadow: '0 -3px 0 red'
1430
+ });
1431
+ } else if (position === 'down') {
1432
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1433
+ boxShadow: '0 3px 0 red'
1434
+ });
1435
+ }
1436
+ }
1437
+ if (isSelected) {
1438
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), {}, {
1439
+ outline: '2px solid #409eff',
1440
+ borderColor: '#fff',
1441
+ zIndex: 1
1442
+ });
1443
+ }
1444
+ if (style && _typeof(style) === 'object') {
1445
+ overwriteStyle = _objectSpread2(_objectSpread2({}, overwriteStyle), style);
1446
+ }
1447
+ if ($id === '#' && inside) return children;
1448
+
1449
+ // 展示的id
1450
+ var shownId = getKeyFromUniqueId(schema.$id);
1451
+
1452
+ // 操作按钮
1453
+ var _controlButtons = Array.isArray(controlButtons) ? controlButtons : [true, true];
1454
+ var _showDefaultBtns = _controlButtons.filter(function (item) {
1455
+ return ['boolean', 'function'].includes(_typeof(item));
1456
+ }).map(function (item) {
1457
+ if (typeof item === 'boolean') return item;
1458
+ return item(schema);
1459
+ });
1460
+ var _extraBtns = _controlButtons.filter(function (item) {
1461
+ return isObject(item) && (item.text || item.children);
1462
+ });
1463
+ var _showDefaultBtns$conc = _showDefaultBtns.concat(_extraBtns).filter(Boolean),
1464
+ _numOfBtns = _showDefaultBtns$conc.length;
1465
+ var hasDuplicateId = Object.keys(flatten).map(function (key) {
1466
+ return flatten[key].schema.$id;
1467
+ }).filter(function (key) {
1468
+ return key === schema.$id;
1469
+ }).length > 1;
1470
+ var originNode = /*#__PURE__*/React.createElement("div", {
1471
+ ref: boxRef,
1472
+ style: overwriteStyle,
1473
+ className: "field-wrapper ".concat($id !== '#' && isSelected ? 'selected-field-wrapper' : '', " relative w-100"),
1474
+ onClick: handleClick
1475
+ }, children, /*#__PURE__*/React.createElement("div", {
1476
+ className: "absolute top-0 right-1 f7"
1477
+ }, !inside && $id !== '#' && !hideId && /*#__PURE__*/React.createElement("span", {
1478
+ className: hasDuplicateId ? 'red' : 'blue'
1479
+ }, shownId), schema.hidden && /*#__PURE__*/React.createElement("span", {
1480
+ style: {
1481
+ color: '#666',
1482
+ marginLeft: '6px'
1483
+ }
1484
+ }, "[hidden]")), !inside && $id !== '#' && isSelected && /*#__PURE__*/React.createElement("div", {
1485
+ className: "pointer-move",
1486
+ ref: dragRef
1487
+ }, /*#__PURE__*/React.createElement(_DragOutlined, null)), !inside && $id !== '#' && isSelected && _numOfBtns > 0 && /*#__PURE__*/React.createElement("div", {
1488
+ className: "pointer-wrapper"
1489
+ }, _showDefaultBtns[0] !== false && /*#__PURE__*/React.createElement("div", {
1490
+ className: "pointer",
1491
+ onClick: deleteItem
1492
+ }, /*#__PURE__*/React.createElement(_DeleteOutlined, null)), _showDefaultBtns[1] !== false && /*#__PURE__*/React.createElement("div", {
1493
+ className: "pointer",
1494
+ onClick: handleItemCopy
1495
+ }, /*#__PURE__*/React.createElement(_CopyOutlined, null)), _extraBtns.map(function (item, idx) {
1496
+ return /*#__PURE__*/React.createElement("div", {
1497
+ key: idx.toString(),
1498
+ className: "pointer",
1499
+ onClick: function onClick(e) {
1500
+ return item.onClick && item.onClick(e, schema);
1501
+ }
1502
+ }, item.text || item.children);
1503
+ })));
1504
+ if (!fieldWrapperRender) return originNode;
1505
+ return fieldWrapperRender(schema, isSelected, children, originNode);
1506
+ }
1507
+
1508
+ var PreviewFR = function PreviewFR(_ref) {
1509
+ var schema = _ref.schema,
1510
+ data = _ref.data;
1511
+ var form = useForm();
1512
+ var _useStore = useStore(),
1513
+ flatten = _useStore.flatten,
1514
+ widgets = _useStore.widgets,
1515
+ mapping = _useStore.mapping,
1516
+ methods = _useStore.methods,
1517
+ userProps = _useStore.userProps,
1518
+ onFlattenChange = _useStore.onFlattenChange;
1519
+ var renderSchema = userProps.transformer.to(schema);
1520
+ useEffect(function () {
1521
+ form.setValues(data);
1522
+ }, []);
1523
+ return /*#__PURE__*/React.createElement(FormRender, {
1524
+ schema: renderSchema,
1525
+ form: form,
1526
+ widgets: widgets,
1527
+ mapping: mapping,
1528
+ methods: methods,
1529
+ watch: {
1530
+ '#': function _(formData) {
1531
+ onFlattenChange(dataToFlatten(flatten, formData), 'data');
1532
+ }
1533
+ }
1534
+ });
1535
+ };
1536
+ var FR = function FR(_ref2) {
1537
+ var _schema$props;
1538
+ var _ref2$id = _ref2.id,
1539
+ id = _ref2$id === void 0 ? '#' : _ref2$id,
1540
+ preview = _ref2.preview,
1541
+ displaySchema = _ref2.displaySchema;
1542
+ var _useStore2 = useStore(),
1543
+ flatten = _useStore2.flatten,
1544
+ _useStore2$frProps = _useStore2.frProps,
1545
+ frProps = _useStore2$frProps === void 0 ? {} : _useStore2$frProps;
1546
+ var _useTranslation = useTranslation(),
1547
+ t = _useTranslation.t;
1548
+ if (preview) {
1549
+ var data = _flattenToData(flatten);
1550
+ return /*#__PURE__*/React.createElement(PreviewFR, {
1551
+ schema: displaySchema,
1552
+ data: data
1553
+ });
1554
+ }
1555
+ var column = frProps.column;
1556
+ var item = flatten[id];
1557
+ if (!item) return null;
1558
+ var schema = item.schema;
1559
+ var displayType = schema.displayType || frProps.displayType;
1560
+ var isObj = schema.type === 'object';
1561
+ var isList = schema.type === 'array' && schema.enum === undefined && !!schema.items;
1562
+ var isComplex = isObj || isList;
1563
+ var width = schema['width'];
1564
+ var containerClass = "fr-field w-100 ".concat(isComplex ? 'fr-field-complex' : '', " ").concat(schema.className || '');
1565
+ var labelClass = 'fr-label mb2';
1566
+ var contentClass = 'fr-content';
1567
+ var columnStyle = {};
1568
+ if (!isComplex && width) {
1569
+ columnStyle = {
1570
+ width: width,
1571
+ paddingRight: '12px'
1572
+ };
1573
+ } else if (!isComplex && column > 1) {
1574
+ columnStyle = {
1575
+ width: "calc(100% /".concat(column, ")"),
1576
+ paddingRight: '12px'
1577
+ };
1578
+ } else if ('flex' === (schema === null || schema === void 0 ? void 0 : schema.theme)) {
1579
+ columnStyle.width = width;
1580
+ }
1581
+
1582
+ // 如果传入自定义样式则覆盖使用,object 外层样式使用 schema.style,内层样式使用 schema.props.style
1583
+ if ('object' === _typeof(schema === null || schema === void 0 ? void 0 : schema.style)) {
1584
+ columnStyle = _objectSpread2(_objectSpread2({}, columnStyle), schema.style);
1585
+ }
1586
+ switch (schema.type) {
1587
+ case 'object':
1588
+ if (schema.title) {
1589
+ containerClass += ' ba b--black-20 pt4 pr3 pb2 relative mt3 mb4'; // object的margin bottom由内部元素撑起
1590
+ labelClass += ' fr-label-object bg-white absolute ph2 top-upper left-1'; // fr-label-object 无默认style,只是占位用于使用者样式覆盖
1591
+ }
1592
+ containerClass += ' fr-field-object'; // object的margin bottom由内部元素撑起
1593
+ if (schema.title) {
1594
+ contentClass += ' ml3'; // 缩进
1595
+ }
1596
+ break;
1597
+ case 'array':
1598
+ if (isList) {
1599
+ labelClass += ' mt2 mb3';
1600
+ }
1601
+ break;
1602
+ case 'boolean':
1603
+ if (schema['widget'] !== 'switch') {
1604
+ if (schema.title) {
1605
+ labelClass += ' ml2';
1606
+ labelClass = labelClass.replace('mb2', 'mb0');
1607
+ }
1608
+ contentClass += ' flex items-center'; // checkbox高度短,需要居中对齐
1609
+ containerClass += ' flex items-center flex-row-reverse justify-end';
1610
+ }
1611
+ break;
1612
+ default:
1613
+ if (displayType === 'row') {
1614
+ labelClass = labelClass.replace('mb2', 'mb0');
1615
+ }
1616
+ }
1617
+ // 横排时
1618
+ var isCheckBox = schema.type === 'boolean' && schema['widget'] !== 'switch';
1619
+ if (displayType === 'row' && !isComplex && !isCheckBox) {
1620
+ containerClass += ' flex items-center';
1621
+ labelClass += ' flex-shrink-0 fr-label-row';
1622
+ labelClass = labelClass.replace('mb2', 'mb0');
1623
+ contentClass += ' flex-grow-1 relative';
1624
+ }
1625
+
1626
+ // 横排的checkbox
1627
+ if (displayType === 'row' && isCheckBox) {
1628
+ contentClass += ' flex justify-end pr2';
1629
+ }
1630
+ var fieldProps = {
1631
+ $id: id,
1632
+ item: item,
1633
+ labelClass: labelClass,
1634
+ contentClass: contentClass,
1635
+ isComplex: isComplex
1636
+ };
1637
+ var childrenElement = item.children && item.children.length > 0 ? /*#__PURE__*/React.createElement("ul", {
1638
+ className: "flex flex-wrap pl0",
1639
+ style: schema === null || schema === void 0 ? void 0 : (_schema$props = schema.props) === null || _schema$props === void 0 ? void 0 : _schema$props.style
1640
+ }, /*#__PURE__*/React.createElement(RenderChildren, {
1641
+ children: item.children
1642
+ })) : null;
1643
+ var isEmpty = Object.keys(flatten).length < 2; // 只有一个根元素 # 的情况
1644
+ if (isEmpty) {
1645
+ return /*#__PURE__*/React.createElement(Wrapper, {
1646
+ style: columnStyle,
1647
+ $id: id,
1648
+ item: item
1649
+ }, /*#__PURE__*/React.createElement("div", {
1650
+ className: "".concat(containerClass, " h-100 f4 black-40 flex items-center justify-center")
1651
+ }, t('点击/拖拽左侧栏的组件进行添加')));
1652
+ }
1653
+ return /*#__PURE__*/React.createElement(Wrapper, {
1654
+ style: columnStyle,
1655
+ $id: id,
1656
+ item: item
1657
+ }, /*#__PURE__*/React.createElement("div", {
1658
+ className: containerClass
1659
+ }, /*#__PURE__*/React.createElement(RenderField, fieldProps, (isObj || isList) && /*#__PURE__*/React.createElement(Wrapper, {
1660
+ $id: id,
1661
+ item: item,
1662
+ inside: true
1663
+ }, childrenElement || /*#__PURE__*/React.createElement("div", {
1664
+ className: "h2"
1665
+ })))));
1666
+ };
1667
+
1668
+ var TextArea = _Input.TextArea;
1669
+ var Canvas = function Canvas(_ref) {
1670
+ var onSelect = _ref.onSelect;
1671
+ var _useTranslation = useTranslation(),
1672
+ t = _useTranslation.t;
1673
+ var setGlobal = useGlobal();
1674
+ var _useStore = useStore(),
1675
+ userProps = _useStore.userProps,
1676
+ displaySchema = _useStore.displaySchema,
1677
+ displaySchemaString = _useStore.displaySchemaString,
1678
+ preview = _useStore.preview,
1679
+ selected = _useStore.selected,
1680
+ flatten = _useStore.flatten,
1681
+ onChange = _useStore.onChange,
1682
+ onSchemaChange = _useStore.onSchemaChange;
1683
+ var _useSet = useSet({
1684
+ showModal: false,
1685
+ showModal2: false,
1686
+ schemaForImport: ''
1687
+ }),
1688
+ _useSet2 = _slicedToArray(_useSet, 2),
1689
+ local = _useSet2[0],
1690
+ setState = _useSet2[1];
1691
+ var transformer = userProps.transformer,
1692
+ _userProps$extraButto = userProps.extraButtons,
1693
+ extraButtons = _userProps$extraButto === void 0 ? [] : _userProps$extraButto;
1694
+ var toggleModal = function toggleModal() {
1695
+ return setState({
1696
+ showModal: !local.showModal
1697
+ });
1698
+ };
1699
+ var toggleModal2 = function toggleModal2() {
1700
+ return setState({
1701
+ showModal2: !local.showModal2
1702
+ });
1703
+ };
1704
+ var onTextareaChange = function onTextareaChange(e) {
1705
+ setState({
1706
+ schemaForImport: e.target.value
1707
+ });
1708
+ };
1709
+ var importSchema = function importSchema() {
1710
+ try {
1711
+ var value = transformer.from(looseJsonParse(local.schemaForImport));
1712
+ setGlobal(function () {
1713
+ return _objectSpread2({
1714
+ selected: undefined
1715
+ }, schemaToState(value));
1716
+ });
1717
+ onChange(value.formData || {});
1718
+ onSchemaChange(value);
1719
+ } catch (error) {
1720
+ console.error(error, 'catch');
1721
+ _message.info(t('格式不对哦,请重新尝试')); // 可以加个格式哪里不对的提示
1722
+ }
1723
+ toggleModal2();
1724
+ };
1725
+ var copySchema = function copySchema() {
1726
+ copyTOClipboard(displaySchemaString);
1727
+ _message.info(t('复制成功'));
1728
+ toggleModal();
1729
+ };
1730
+ var clearSchema = function clearSchema() {
1731
+ var schema = {
1732
+ type: 'object',
1733
+ properties: {}
1734
+ };
1735
+ setGlobal({
1736
+ schema: schema,
1737
+ formData: {},
1738
+ selected: undefined
1739
+ });
1740
+ onChange({});
1741
+ onSchemaChange(schema);
1742
+ };
1743
+ useEffect(function () {
1744
+ if (!onSelect) return;
1745
+ onSelect(idToSchema(flatten, selected));
1746
+ }, [selected]);
1747
+ var _extraButtons = Array.isArray(extraButtons) ? extraButtons : [];
1748
+ var _showDefaultBtns = _extraButtons.filter(function (item) {
1749
+ return !isObject(item);
1750
+ });
1751
+ var _extraBtns = _extraButtons.filter(function (item) {
1752
+ return isObject(item);
1753
+ });
1754
+ var getDefaultBtnText = function getDefaultBtnText(text, defaultText, index) {
1755
+ if (typeof index === 'number') {
1756
+ if (Array.isArray(text)) return text[index];
1757
+ return defaultText[index];
1758
+ }
1759
+ if (typeof text === 'string') return text;
1760
+ return defaultText;
1761
+ };
1762
+ return /*#__PURE__*/React.createElement("div", {
1763
+ className: "mid-layout pr2"
1764
+ }, /*#__PURE__*/React.createElement("div", {
1765
+ className: "mv2 mh1"
1766
+ }, _showDefaultBtns[0] !== false && /*#__PURE__*/React.createElement(_Button, {
1767
+ className: "mr2 mb1",
1768
+ onClick: function onClick() {
1769
+ setGlobal({
1770
+ selected: '#',
1771
+ preview: !preview
1772
+ });
1773
+ }
1774
+ }, getDefaultBtnText(_showDefaultBtns[0], [t('开始编辑'), t('最终展示')], Number(!preview))), _showDefaultBtns[1] !== false && /*#__PURE__*/React.createElement(_Button, {
1775
+ className: "mr2",
1776
+ onClick: clearSchema
1777
+ }, getDefaultBtnText(_showDefaultBtns[1], t('清空'))), _showDefaultBtns[2] !== false && /*#__PURE__*/React.createElement(_Button, {
1778
+ className: "mr2",
1779
+ onClick: toggleModal2
1780
+ }, getDefaultBtnText(_showDefaultBtns[2], t('导入'))), _showDefaultBtns[3] !== false && /*#__PURE__*/React.createElement(_Button, {
1781
+ type: "primary",
1782
+ className: "mr2",
1783
+ onClick: toggleModal
1784
+ }, getDefaultBtnText(_showDefaultBtns[3], t('导出schema'))), _extraBtns.map(function (item, idx) {
1785
+ return /*#__PURE__*/React.createElement(_Button, _extends({
1786
+ key: idx.toString(),
1787
+ className: "mr2"
1788
+ }, item), item.text || item.children);
1789
+ })), /*#__PURE__*/React.createElement("div", {
1790
+ className: "dnd-container ".concat(preview ? 'preview' : 'edit')
1791
+ }, /*#__PURE__*/React.createElement("div", {
1792
+ style: {
1793
+ height: preview ? 33 : 0
1794
+ }
1795
+ }), /*#__PURE__*/React.createElement(FR, {
1796
+ preview: preview,
1797
+ displaySchema: displaySchema
1798
+ })), /*#__PURE__*/React.createElement(_Modal, {
1799
+ open: local.showModal,
1800
+ onOk: copySchema,
1801
+ onCancel: toggleModal,
1802
+ okText: t('复制'),
1803
+ cancelText: t('取消')
1804
+ }, /*#__PURE__*/React.createElement("div", {
1805
+ className: "mt3"
1806
+ }, /*#__PURE__*/React.createElement(TextArea, {
1807
+ style: {
1808
+ fontSize: 12
1809
+ },
1810
+ value: displaySchemaString,
1811
+ autoSize: {
1812
+ minRows: 10,
1813
+ maxRows: 30
1814
+ }
1815
+ }))), /*#__PURE__*/React.createElement(_Modal, {
1816
+ open: local.showModal2,
1817
+ okText: t('导入'),
1818
+ cancelText: t('取消'),
1819
+ onOk: importSchema,
1820
+ onCancel: toggleModal2
1821
+ }, /*#__PURE__*/React.createElement("div", {
1822
+ className: "mt3"
1823
+ }, /*#__PURE__*/React.createElement(TextArea, {
1824
+ style: {
1825
+ fontSize: 12
1826
+ },
1827
+ value: local.schemaForImport,
1828
+ placeholder: t('贴入需要导入的schema,模样可点击导出schema参考'),
1829
+ onChange: onTextareaChange,
1830
+ autoSize: {
1831
+ minRows: 10,
1832
+ maxRows: 30
1833
+ }
1834
+ }))));
1835
+ };
1836
+
1837
+ var _useTranslation = useTranslation(),
1838
+ t = _useTranslation.t;
1839
+ // 只需写配置,方便可扩展
1840
+ var baseCommonSettings = {
1841
+ type: {
1842
+ title: '类型',
1843
+ type: 'string',
1844
+ hidden: '{{true}}'
1845
+ },
1846
+ widget: {
1847
+ title: '组件',
1848
+ type: 'string',
1849
+ hidden: '{{true}}'
1850
+ },
1851
+ format: {
1852
+ title: '格式',
1853
+ type: 'string',
1854
+ hidden: '{{true}}'
1855
+ }
1856
+ };
1857
+ var defaultCommonSettings = {
1858
+ $id: {
1859
+ title: 'ID',
1860
+ description: '字段名称/英文',
1861
+ type: 'string',
1862
+ widget: 'idInput',
1863
+ require: true,
1864
+ rules: [{
1865
+ pattern: '^#/.+$',
1866
+ message: 'ID 必填'
1867
+ }]
1868
+ },
1869
+ title: {
1870
+ title: '标题',
1871
+ type: 'string',
1872
+ widget: 'htmlInput'
1873
+ },
1874
+ displayType: {
1875
+ title: '标题展示模式',
1876
+ type: 'string',
1877
+ enum: ['row', 'column'],
1878
+ enumNames: ['同行', '单独一行'],
1879
+ widget: 'radio'
1880
+ },
1881
+ description: {
1882
+ title: '说明',
1883
+ type: 'string'
1884
+ },
1885
+ default: {
1886
+ title: '默认值',
1887
+ type: 'string'
1888
+ },
1889
+ required: {
1890
+ title: '必填',
1891
+ type: 'boolean'
1892
+ },
1893
+ placeholder: {
1894
+ title: '占位符',
1895
+ type: 'string'
1896
+ },
1897
+ bind: {
1898
+ title: 'Bind',
1899
+ type: 'string'
1900
+ },
1901
+ min: {
1902
+ title: '最小值',
1903
+ type: 'number'
1904
+ },
1905
+ max: {
1906
+ title: '最大值',
1907
+ type: 'number'
1908
+ },
1909
+ disabled: {
1910
+ title: '禁用',
1911
+ type: 'boolean'
1912
+ },
1913
+ readOnly: {
1914
+ title: '只读',
1915
+ type: 'boolean'
1916
+ },
1917
+ hidden: {
1918
+ title: '隐藏',
1919
+ type: 'boolean'
1920
+ },
1921
+ readOnlyWidget: {
1922
+ title: '只读组件',
1923
+ type: 'string'
1924
+ },
1925
+ width: {
1926
+ title: '元素宽度',
1927
+ type: 'string',
1928
+ widget: 'percentSlider'
1929
+ },
1930
+ labelWidth: {
1931
+ title: '标签宽度',
1932
+ description: '默认值120',
1933
+ type: 'number',
1934
+ widget: 'slider',
1935
+ max: 400,
1936
+ props: {
1937
+ hideNumber: true
1938
+ }
1939
+ }
1940
+ };
1941
+
1942
+ // widget 用于指定 schema 右侧配置对应的 setting
1943
+ var elements = [{
1944
+ text: '输入框',
1945
+ name: 'input',
1946
+ schema: {
1947
+ title: '输入框',
1948
+ type: 'string'
1949
+ },
1950
+ setting: {
1951
+ props: {
1952
+ title: '选项',
1953
+ type: 'object',
1954
+ labelWidth: 80,
1955
+ properties: {
1956
+ allowClear: {
1957
+ title: '是否带清除按钮',
1958
+ description: '填写内容后才会出现x哦',
1959
+ type: 'boolean'
1960
+ },
1961
+ addonBefore: {
1962
+ title: '前tab',
1963
+ type: 'string'
1964
+ },
1965
+ addonAfter: {
1966
+ title: '后tab',
1967
+ type: 'string'
1968
+ },
1969
+ prefix: {
1970
+ title: '前缀',
1971
+ type: 'string'
1972
+ },
1973
+ suffix: {
1974
+ title: '后缀',
1975
+ type: 'string'
1976
+ }
1977
+ }
1978
+ },
1979
+ minLength: {
1980
+ title: '最短字数',
1981
+ type: 'number'
1982
+ },
1983
+ maxLength: {
1984
+ title: '最长字数',
1985
+ type: 'number'
1986
+ },
1987
+ pattern: {
1988
+ title: '校验正则表达式',
1989
+ type: 'string',
1990
+ props: {
1991
+ placeholder: '填写正则表达式'
1992
+ }
1993
+ }
1994
+ }
1995
+ }, {
1996
+ text: '大输入框',
1997
+ name: 'textarea',
1998
+ schema: {
1999
+ title: '编辑框',
2000
+ type: 'string',
2001
+ format: 'textarea'
2002
+ },
2003
+ setting: {
2004
+ props: {
2005
+ title: '选项',
2006
+ type: 'object',
2007
+ labelWidth: 80,
2008
+ properties: {
2009
+ autoSize: {
2010
+ title: '高度自动',
2011
+ type: 'boolean'
2012
+ },
2013
+ rows: {
2014
+ title: '指定高度',
2015
+ type: 'number'
2016
+ }
2017
+ }
2018
+ },
2019
+ minLength: {
2020
+ title: '最短字数',
2021
+ type: 'number'
2022
+ },
2023
+ maxLength: {
2024
+ title: '最长字数',
2025
+ type: 'number'
2026
+ },
2027
+ pattern: {
2028
+ title: '校验正则表达式',
2029
+ type: 'string',
2030
+ props: {
2031
+ placeholder: '填写正则表达式'
2032
+ }
2033
+ }
2034
+ }
2035
+ }, {
2036
+ text: '日期选择',
2037
+ name: 'date',
2038
+ schema: {
2039
+ title: '日期选择',
2040
+ type: 'string',
2041
+ format: 'date'
2042
+ },
2043
+ setting: {
2044
+ format: {
2045
+ title: '格式',
2046
+ type: 'string',
2047
+ enum: ['dateTime', 'date', 'time'],
2048
+ enumNames: ['日期时间', '日期', '时间']
2049
+ }
2050
+ }
2051
+ }, {
2052
+ text: '时间选择',
2053
+ name: 'time',
2054
+ show: false,
2055
+ schema: {
2056
+ title: '时间选择',
2057
+ type: 'string',
2058
+ format: 'time'
2059
+ },
2060
+ setting: {
2061
+ format: {
2062
+ title: '格式',
2063
+ type: 'string',
2064
+ enum: ['dateTime', 'date', 'time'],
2065
+ enumNames: ['日期时间', '日期', '时间']
2066
+ }
2067
+ }
2068
+ }, {
2069
+ text: '数字输入框',
2070
+ name: 'number',
2071
+ schema: {
2072
+ title: '数字输入框',
2073
+ type: 'number'
2074
+ },
2075
+ setting: {
2076
+ default: {
2077
+ title: '默认值',
2078
+ type: 'number'
2079
+ }
2080
+ }
2081
+ }, {
2082
+ text: '是否选择',
2083
+ name: 'checkbox',
2084
+ schema: {
2085
+ title: '是否选择',
2086
+ type: 'boolean',
2087
+ widget: 'checkbox'
2088
+ },
2089
+ setting: {
2090
+ default: {
2091
+ title: '是否默认勾选',
2092
+ type: 'boolean'
2093
+ }
2094
+ }
2095
+ }, {
2096
+ text: '是否switch',
2097
+ name: 'switch',
2098
+ schema: {
2099
+ title: '是否选择',
2100
+ type: 'boolean',
2101
+ widget: 'switch'
2102
+ },
2103
+ setting: {
2104
+ default: {
2105
+ title: '是否默认开启',
2106
+ type: 'boolean'
2107
+ }
2108
+ }
2109
+ }, {
2110
+ text: '下拉单选',
2111
+ name: 'select',
2112
+ schema: {
2113
+ title: '单选',
2114
+ type: 'string',
2115
+ enum: ['a', 'b', 'c'],
2116
+ enumNames: ['早', '中', '晚'],
2117
+ widget: 'select'
2118
+ },
2119
+ setting: {
2120
+ enumList: {
2121
+ title: '选项',
2122
+ type: 'array',
2123
+ widget: 'simpleList',
2124
+ className: 'frg-options-list',
2125
+ items: {
2126
+ type: 'object',
2127
+ properties: {
2128
+ value: {
2129
+ title: '',
2130
+ type: 'string',
2131
+ className: 'frg-options-input',
2132
+ props: {},
2133
+ placeholder: '字段'
2134
+ },
2135
+ label: {
2136
+ title: '',
2137
+ type: 'string',
2138
+ className: 'frg-options-input',
2139
+ props: {},
2140
+ placeholder: '名称'
2141
+ }
2142
+ }
2143
+ },
2144
+ props: {
2145
+ hideMove: true,
2146
+ hideCopy: true
2147
+ }
2148
+ }
2149
+ }
2150
+ }, {
2151
+ text: '点击单选',
2152
+ name: 'radio',
2153
+ schema: {
2154
+ title: '单选',
2155
+ type: 'string',
2156
+ enum: ['a', 'b', 'c'],
2157
+ enumNames: ['早', '中', '晚'],
2158
+ widget: 'radio'
2159
+ },
2160
+ setting: {
2161
+ enumList: {
2162
+ title: '选项',
2163
+ type: 'array',
2164
+ widget: 'simpleList',
2165
+ className: 'frg-options-list',
2166
+ items: {
2167
+ type: 'object',
2168
+ properties: {
2169
+ value: {
2170
+ title: '',
2171
+ type: 'string',
2172
+ className: 'frg-options-input',
2173
+ props: {},
2174
+ placeholder: '字段'
2175
+ },
2176
+ label: {
2177
+ title: '',
2178
+ type: 'string',
2179
+ className: 'frg-options-input',
2180
+ props: {},
2181
+ placeholder: '名称'
2182
+ }
2183
+ }
2184
+ },
2185
+ props: {
2186
+ hideMove: true,
2187
+ hideCopy: true
2188
+ }
2189
+ }
2190
+ }
2191
+ }, {
2192
+ text: '下拉多选',
2193
+ name: 'multiSelect',
2194
+ schema: {
2195
+ title: '多选',
2196
+ description: '下拉多选',
2197
+ type: 'array',
2198
+ items: {
2199
+ type: 'string'
2200
+ },
2201
+ enum: ['A', 'B', 'C', 'D'],
2202
+ enumNames: ['杭州', '武汉', '湖州', '贵阳'],
2203
+ widget: 'multiSelect'
2204
+ },
2205
+ setting: {
2206
+ default: {
2207
+ title: '默认值',
2208
+ type: 'array',
2209
+ widget: 'jsonInput'
2210
+ },
2211
+ enumList: {
2212
+ title: '选项',
2213
+ type: 'array',
2214
+ widget: 'simpleList',
2215
+ className: 'frg-options-list',
2216
+ items: {
2217
+ type: 'object',
2218
+ properties: {
2219
+ value: {
2220
+ title: '',
2221
+ type: 'string',
2222
+ className: 'frg-options-input',
2223
+ props: {},
2224
+ placeholder: '字段'
2225
+ },
2226
+ label: {
2227
+ title: '',
2228
+ type: 'string',
2229
+ className: 'frg-options-input',
2230
+ props: {},
2231
+ placeholder: '名称'
2232
+ }
2233
+ }
2234
+ },
2235
+ props: {
2236
+ hideMove: true,
2237
+ hideCopy: true
2238
+ }
2239
+ }
2240
+ }
2241
+ }, {
2242
+ text: '点击多选',
2243
+ name: 'checkboxes',
2244
+ schema: {
2245
+ title: '多选',
2246
+ type: 'array',
2247
+ widget: 'checkboxes',
2248
+ items: {
2249
+ type: 'string'
2250
+ },
2251
+ enum: ['A', 'B', 'C', 'D'],
2252
+ enumNames: ['杭州', '武汉', '湖州', '贵阳']
2253
+ },
2254
+ setting: {
2255
+ default: {
2256
+ title: '默认值',
2257
+ type: 'array',
2258
+ widget: 'jsonInput'
2259
+ },
2260
+ enumList: {
2261
+ title: '选项',
2262
+ type: 'array',
2263
+ widget: 'simpleList',
2264
+ className: 'frg-options-list',
2265
+ items: {
2266
+ type: 'object',
2267
+ properties: {
2268
+ value: {
2269
+ title: '',
2270
+ type: 'string',
2271
+ className: 'frg-options-input',
2272
+ props: {},
2273
+ placeholder: '字段'
2274
+ },
2275
+ label: {
2276
+ title: '',
2277
+ type: 'string',
2278
+ className: 'frg-options-input',
2279
+ props: {},
2280
+ placeholder: '名称'
2281
+ }
2282
+ }
2283
+ },
2284
+ props: {
2285
+ hideMove: true,
2286
+ hideCopy: true
2287
+ }
2288
+ }
2289
+ }
2290
+ }, {
2291
+ text: 'HTML',
2292
+ name: 'html',
2293
+ schema: {
2294
+ title: 'HTML',
2295
+ type: 'string',
2296
+ widget: 'html'
2297
+ },
2298
+ setting: {
2299
+ props: {
2300
+ type: 'object',
2301
+ properties: {
2302
+ value: {
2303
+ title: '展示内容',
2304
+ type: 'string'
2305
+ }
2306
+ }
2307
+ }
2308
+ }
2309
+ }];
2310
+ var advancedElements = [{
2311
+ text: '日期范围',
2312
+ name: 'dateRange',
2313
+ schema: {
2314
+ title: '日期范围',
2315
+ type: 'range',
2316
+ format: 'dateTime',
2317
+ props: {
2318
+ placeholder: ['开始时间', '结束时间']
2319
+ }
2320
+ },
2321
+ setting: {
2322
+ format: {
2323
+ title: '类型',
2324
+ type: 'string',
2325
+ enum: ['dateTime', 'date'],
2326
+ enumNames: ['日期时间', '日期']
2327
+ }
2328
+ }
2329
+ }, {
2330
+ text: '数字(slider)',
2331
+ name: 'slider',
2332
+ schema: {
2333
+ title: '带滑动条',
2334
+ type: 'number',
2335
+ widget: 'slider'
2336
+ },
2337
+ setting: {
2338
+ default: {
2339
+ title: '默认值',
2340
+ type: 'number'
2341
+ }
2342
+ }
2343
+ }, {
2344
+ text: '图片展示',
2345
+ name: 'image',
2346
+ schema: {
2347
+ title: '图片展示',
2348
+ type: 'string',
2349
+ format: 'image'
2350
+ },
2351
+ setting: {}
2352
+ }, {
2353
+ text: '颜色选择',
2354
+ name: 'color',
2355
+ schema: {
2356
+ title: '颜色选择',
2357
+ type: 'string',
2358
+ format: 'color'
2359
+ },
2360
+ setting: {}
2361
+ }];
2362
+ var layouts = [{
2363
+ text: '对象',
2364
+ name: 'object',
2365
+ schema: {
2366
+ title: '对象',
2367
+ type: 'object',
2368
+ properties: {}
2369
+ },
2370
+ setting: {
2371
+ theme: {
2372
+ title: '主题',
2373
+ type: 'string',
2374
+ enum: ['collapse', 'collapse:pure', 'collapse:ghost', 'card', 'tile', 'flex'],
2375
+ enumNames: ['默认', '无框', '幽灵', '卡片', '平铺', '弹性'],
2376
+ default: 'collapse',
2377
+ widget: 'radio'
2378
+ },
2379
+ props: {
2380
+ title: '弹性布局',
2381
+ hidden: '{{"flex" !== formData.theme}}',
2382
+ type: 'object',
2383
+ theme: 'tile',
2384
+ properties: {
2385
+ style: {
2386
+ title: '布局样式',
2387
+ type: 'object',
2388
+ theme: 'flex',
2389
+ props: {
2390
+ style: {
2391
+ flexDirection: 'column'
2392
+ }
2393
+ },
2394
+ properties: {
2395
+ height: {
2396
+ title: '高度',
2397
+ description: 'height',
2398
+ type: 'string',
2399
+ widget: 'input'
2400
+ },
2401
+ flexDirection: {
2402
+ title: '布局方向',
2403
+ description: 'flex-direction',
2404
+ type: 'string',
2405
+ enum: ['row', 'row-reverse', 'column', 'column-reverse'],
2406
+ enumNames: ['横向', '横向反转', '纵向', '纵向反转'],
2407
+ widget: 'select'
2408
+ },
2409
+ flexWrap: {
2410
+ title: '换行方式',
2411
+ description: 'flex-wrap',
2412
+ type: 'string',
2413
+ enum: ['wrap', 'nowrap', 'wrap-reverse'],
2414
+ enumNames: ['换行', '不换行', '反向换行'],
2415
+ widget: 'select'
2416
+ },
2417
+ justifyContent: {
2418
+ title: '对齐方式',
2419
+ description: 'justify-content',
2420
+ type: 'string',
2421
+ enum: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around'],
2422
+ enumNames: ['起点对齐', '终点对齐', '居中对齐', '两端对齐', '相同间距'],
2423
+ widget: 'select'
2424
+ },
2425
+ alignItems: {
2426
+ title: '轴对齐方式',
2427
+ description: 'align-items',
2428
+ type: 'string',
2429
+ enum: ['flex-start', 'flex-end', 'center', 'baseline', 'stretch'],
2430
+ enumNames: ['起点对齐', '终点对齐', '居中对齐', '基线对齐', '拉伸铺满'],
2431
+ widget: 'select'
2432
+ },
2433
+ alignContent: {
2434
+ title: '多轴线对齐',
2435
+ description: 'align-content',
2436
+ type: 'string',
2437
+ enum: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'stretch'],
2438
+ enumNames: ['起点对齐', '终点对齐', '居中对齐', '两端对齐', '相同间距', '拉伸铺满'],
2439
+ widget: 'select'
2440
+ }
2441
+ }
2442
+ }
2443
+ }
2444
+ },
2445
+ style: {
2446
+ title: '元素样式',
2447
+ type: 'object',
2448
+ properties: {
2449
+ background: {
2450
+ title: '背景',
2451
+ description: 'background',
2452
+ type: 'string',
2453
+ widget: 'color'
2454
+ },
2455
+ margin: {
2456
+ title: '外边距',
2457
+ description: 'margin',
2458
+ type: 'string',
2459
+ widget: 'input'
2460
+ },
2461
+ padding: {
2462
+ title: '内边距',
2463
+ description: 'padding',
2464
+ type: 'string',
2465
+ widget: 'input'
2466
+ },
2467
+ borderWidth: {
2468
+ title: '边框宽',
2469
+ description: 'border-width',
2470
+ type: 'string',
2471
+ widget: 'input'
2472
+ },
2473
+ borderStyle: {
2474
+ title: '边框样式',
2475
+ description: 'border-style',
2476
+ type: 'string',
2477
+ widget: 'input'
2478
+ },
2479
+ borderColor: {
2480
+ title: '边框颜色',
2481
+ description: 'border-color',
2482
+ type: 'string',
2483
+ widget: 'color'
2484
+ },
2485
+ borderRadius: {
2486
+ title: '圆角',
2487
+ description: 'border-radius',
2488
+ type: 'string',
2489
+ widget: 'input'
2490
+ },
2491
+ flex: {
2492
+ title: '弹性伸缩',
2493
+ description: 'flex',
2494
+ type: 'string',
2495
+ widget: 'input'
2496
+ },
2497
+ order: {
2498
+ title: '排列顺序',
2499
+ description: 'order',
2500
+ type: 'string',
2501
+ widget: 'input'
2502
+ },
2503
+ alignSelf: {
2504
+ title: '自身对齐',
2505
+ description: 'align-self',
2506
+ type: 'string',
2507
+ widget: 'input'
2508
+ }
2509
+ }
2510
+ }
2511
+ }
2512
+ }, {
2513
+ text: '常规列表',
2514
+ name: 'list',
2515
+ schema: {
2516
+ title: '数组',
2517
+ type: 'array',
2518
+ items: {
2519
+ type: 'object',
2520
+ properties: {}
2521
+ }
2522
+ },
2523
+ setting: {
2524
+ default: {
2525
+ title: '默认值',
2526
+ type: 'array',
2527
+ widget: 'jsonInput'
2528
+ },
2529
+ items: {
2530
+ type: 'object',
2531
+ hidden: '{{true}}'
2532
+ },
2533
+ min: {
2534
+ title: '最小长度',
2535
+ type: 'number'
2536
+ },
2537
+ max: {
2538
+ title: '最大长度',
2539
+ type: 'number'
2540
+ },
2541
+ props: {
2542
+ title: '选项',
2543
+ type: 'object',
2544
+ properties: {
2545
+ // foldable: {
2546
+ // title: '是否可折叠',
2547
+ // type: 'boolean',
2548
+ // },
2549
+ hideDelete: {
2550
+ title: '隐藏删除按钮',
2551
+ type: 'string'
2552
+ },
2553
+ hideAdd: {
2554
+ title: '隐藏新增/复制按钮',
2555
+ type: 'string'
2556
+ }
2557
+ }
2558
+ }
2559
+ }
2560
+ }, {
2561
+ text: '简单列表',
2562
+ name: 'simpleList',
2563
+ schema: {
2564
+ title: '数组',
2565
+ type: 'array',
2566
+ widget: 'simpleList',
2567
+ items: {
2568
+ type: 'object',
2569
+ properties: {}
2570
+ }
2571
+ },
2572
+ setting: {
2573
+ default: {
2574
+ title: '默认值',
2575
+ type: 'array',
2576
+ widget: 'jsonInput'
2577
+ },
2578
+ items: {
2579
+ type: 'object',
2580
+ hidden: '{{true}}'
2581
+ },
2582
+ min: {
2583
+ title: '最小长度',
2584
+ type: 'number'
2585
+ },
2586
+ max: {
2587
+ title: '最大长度',
2588
+ type: 'number'
2589
+ },
2590
+ props: {
2591
+ title: '选项',
2592
+ type: 'object',
2593
+ properties: {
2594
+ // foldable: {
2595
+ // title: '是否可折叠',
2596
+ // type: 'boolean',
2597
+ // },
2598
+ hideTitle: {
2599
+ title: '隐藏标题',
2600
+ type: 'boolean'
2601
+ },
2602
+ hideDelete: {
2603
+ title: '隐藏删除按钮',
2604
+ type: 'string'
2605
+ },
2606
+ hideAdd: {
2607
+ title: '隐藏新增/复制按钮',
2608
+ type: 'string'
2609
+ }
2610
+ }
2611
+ }
2612
+ }
2613
+ }, {
2614
+ text: '表格列表',
2615
+ name: 'list2',
2616
+ schema: {
2617
+ title: '数组',
2618
+ type: 'array',
2619
+ widget: 'list2',
2620
+ items: {
2621
+ type: 'object',
2622
+ properties: {}
2623
+ }
2624
+ },
2625
+ setting: {
2626
+ default: {
2627
+ title: '默认值',
2628
+ type: 'array',
2629
+ widget: 'jsonInput'
2630
+ },
2631
+ items: {
2632
+ type: 'object',
2633
+ hidden: '{{true}}'
2634
+ },
2635
+ min: {
2636
+ title: '最小长度',
2637
+ type: 'number'
2638
+ },
2639
+ max: {
2640
+ title: '最大长度',
2641
+ type: 'number'
2642
+ },
2643
+ props: {
2644
+ title: '选项',
2645
+ type: 'object',
2646
+ properties: {
2647
+ // foldable: {
2648
+ // title: '是否可折叠',
2649
+ // type: 'boolean',
2650
+ // },
2651
+ hideDelete: {
2652
+ title: '隐藏删除按钮',
2653
+ type: 'string'
2654
+ },
2655
+ hideAdd: {
2656
+ title: '隐藏新增/复制按钮',
2657
+ type: 'string'
2658
+ },
2659
+ hideCopy: {
2660
+ title: '隐藏复制按钮',
2661
+ type: 'string'
2662
+ },
2663
+ hideMove: {
2664
+ title: '隐藏上下移动按钮',
2665
+ type: 'string'
2666
+ }
2667
+ }
2668
+ }
2669
+ }
2670
+ }, {
2671
+ text: '复杂表格列表',
2672
+ name: 'drawerList',
2673
+ schema: {
2674
+ title: '数组',
2675
+ type: 'array',
2676
+ widget: 'drawerList',
2677
+ items: {
2678
+ type: 'object',
2679
+ properties: {}
2680
+ }
2681
+ },
2682
+ setting: {
2683
+ default: {
2684
+ title: '默认值',
2685
+ type: 'array',
2686
+ widget: 'jsonInput'
2687
+ },
2688
+ items: {
2689
+ type: 'object',
2690
+ hidden: '{{true}}'
2691
+ },
2692
+ min: {
2693
+ title: '最小长度',
2694
+ type: 'number'
2695
+ },
2696
+ max: {
2697
+ title: '最大长度',
2698
+ type: 'number'
2699
+ },
2700
+ props: {
2701
+ title: '选项',
2702
+ type: 'object',
2703
+ properties: {
2704
+ // foldable: {
2705
+ // title: '是否可折叠',
2706
+ // type: 'boolean',
2707
+ // },
2708
+ hideDelete: {
2709
+ title: '隐藏删除按钮',
2710
+ type: 'string'
2711
+ },
2712
+ hideAdd: {
2713
+ title: '隐藏新增/复制按钮',
2714
+ type: 'string'
2715
+ }
2716
+ }
2717
+ }
2718
+ }
2719
+ }];
2720
+ var defaultSettings = [{
2721
+ title: '基础组件',
2722
+ widgets: elements,
2723
+ show: true,
2724
+ useCommon: true // TODO: 是否将common
2725
+ }, {
2726
+ title: '高级组件',
2727
+ widgets: advancedElements
2728
+ }
2729
+ // {
2730
+ // title: '布局组件',
2731
+ // widgets: layouts,
2732
+ // },
2733
+ // {
2734
+ // title: '模板',
2735
+ // widgets: saves,
2736
+ // },
2737
+ ];
2738
+ var defaultGlobalSettings = {
2739
+ type: 'object',
2740
+ properties: {
2741
+ column: {
2742
+ title: t('整体布局'),
2743
+ type: 'number',
2744
+ enum: [1, 2, 3],
2745
+ enumNames: [t('一行一列'), t('一行二列'), t('一行三列')],
2746
+ props: {
2747
+ placeholder: t('默认一行一列')
2748
+ }
2749
+ },
2750
+ labelWidth: {
2751
+ title: t('标签宽度'),
2752
+ type: 'number',
2753
+ widget: 'slider',
2754
+ max: 300,
2755
+ default: 120,
2756
+ props: {
2757
+ hideNumber: true
2758
+ }
2759
+ },
2760
+ displayType: {
2761
+ title: t('标签展示模式'),
2762
+ type: 'string',
2763
+ default: 'row',
2764
+ enum: ['row', 'column'],
2765
+ enumNames: [t('同行'), t('单独一行')],
2766
+ widget: 'radio'
2767
+ }
2768
+ }
2769
+ };
2770
+
2771
+ function GlobalSettings(_ref) {
2772
+ var widgets = _ref.widgets;
2773
+ var form = useForm();
2774
+ var _useState = useState(false),
2775
+ _useState2 = _slicedToArray(_useState, 2),
2776
+ innerUpdate = _useState2[0],
2777
+ setInnerUpdate = _useState2[1];
2778
+ var _useStore = useStore(),
2779
+ globalWidgets = _useStore.widgets,
2780
+ frProps = _useStore.frProps,
2781
+ _useStore$userProps = _useStore.userProps,
2782
+ userProps = _useStore$userProps === void 0 ? {} : _useStore$userProps,
2783
+ mapping = _useStore.mapping;
2784
+ var setGlobal = useGlobal();
2785
+ var globalSettings = userProps.globalSettings || defaultGlobalSettings;
2786
+ var onDataChange = function onDataChange(value) {
2787
+ setInnerUpdate(!!Object.keys(value).length);
2788
+ setGlobal({
2789
+ frProps: value
2790
+ });
2791
+ };
2792
+ useEffect(function () {
2793
+ if (innerUpdate) {
2794
+ setInnerUpdate(false);
2795
+ } else {
2796
+ form.setValues(frProps);
2797
+ }
2798
+ }, [frProps]);
2799
+ useEffect(function () {
2800
+ setGlobal({
2801
+ settingsForm: form
2802
+ });
2803
+ }, []);
2804
+ return /*#__PURE__*/React.createElement("div", {
2805
+ style: {
2806
+ paddingRight: 24
2807
+ }
2808
+ }, /*#__PURE__*/React.createElement(FormRender, {
2809
+ form: form,
2810
+ schema: globalSettings,
2811
+ watch: {
2812
+ '#': function _(v) {
2813
+ return onDataChange(v);
2814
+ }
2815
+ },
2816
+ widgets: _objectSpread2(_objectSpread2({}, globalWidgets), widgets),
2817
+ mapping: mapping
2818
+ }));
2819
+ }
2820
+
2821
+ var css_248z$1 = ".fr-generator-container .right-layout {\n flex-shrink: 0;\n width: 8rem;\n padding-top: 24px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.fr-generator-container .right-layout ::-webkit-scrollbar {\n width: 5px;\n background-color: #0002;\n}\n.fr-generator-container .right-layout ::-webkit-scrollbar-thumb {\n background: #0004;\n border-radius: 5px;\n}\n@media screen and (min-width: 60em) {\n .fr-generator-container .right-layout {\n width: 16rem;\n }\n}\n";
2822
+ styleInject(css_248z$1);
2823
+
2824
+ function HtmlInput(_ref) {
2825
+ var value = _ref.value,
2826
+ disabled = _ref.disabled,
2827
+ readonly = _ref.readonly,
2828
+ options = _ref.options,
2829
+ onChange = _ref.onChange;
2830
+ var handleChange = function handleChange(e) {
2831
+ var newVal = e.target.value;
2832
+ onChange(newVal && newVal.replace(/on(.*?=)/g, 'no$1'));
2833
+ };
2834
+ return /*#__PURE__*/React.createElement(_Input, _extends({
2835
+ disabled: disabled || readonly
2836
+ }, options, {
2837
+ onChange: handleChange,
2838
+ value: value && value.replace(/no(.*?=)/g, 'on$1')
2839
+ }));
2840
+ }
2841
+
2842
+ function IdInput(_ref) {
2843
+ var onChange = _ref.onChange,
2844
+ value = _ref.value,
2845
+ disabled = _ref.disabled,
2846
+ readonly = _ref.readonly,
2847
+ options = _ref.options;
2848
+ var handleChange = function handleChange(e) {
2849
+ try {
2850
+ var newId = changeKeyFromUniqueId(value, e.target.value);
2851
+ onChange(newId);
2852
+ } catch (error) {}
2853
+ };
2854
+ return /*#__PURE__*/React.createElement(_Input, _extends({
2855
+ disabled: disabled || readonly
2856
+ }, options, {
2857
+ onChange: handleChange,
2858
+ value: getKeyFromUniqueId(value)
2859
+ }));
2860
+ }
2861
+
2862
+ function jsonInput(_ref) {
2863
+ var onChange = _ref.onChange,
2864
+ value = _ref.value,
2865
+ disabled = _ref.disabled,
2866
+ readonly = _ref.readonly,
2867
+ options = _ref.options;
2868
+ var handleChange = function handleChange(e) {
2869
+ try {
2870
+ onChange(JSON.parse(e.target.value));
2871
+ } catch (_unused) {
2872
+ onChange(e.target.value);
2873
+ }
2874
+ };
2875
+ var inputValue = typeof value === 'string' ? value : JSON.stringify(value);
2876
+ return /*#__PURE__*/React.createElement(_Input, _extends({
2877
+ disabled: disabled || readonly
2878
+ }, options, {
2879
+ onChange: handleChange,
2880
+ value: inputValue
2881
+ }));
2882
+ }
2883
+
2884
+ var PercentSlider = function PercentSlider(p) {
2885
+ var style = p.invalid ? {
2886
+ borderColor: '#f5222d'
2887
+ } : {};
2888
+ var _p$schema = p.schema,
2889
+ max = _p$schema.max,
2890
+ min = _p$schema.min,
2891
+ step = _p$schema.step;
2892
+ var setting = {};
2893
+ if (max || max === 0) {
2894
+ setting = {
2895
+ max: max
2896
+ };
2897
+ }
2898
+ if (min || min === 0) {
2899
+ setting = _objectSpread2(_objectSpread2({}, setting), {}, {
2900
+ min: min
2901
+ });
2902
+ }
2903
+ if (step) {
2904
+ setting = _objectSpread2(_objectSpread2({}, setting), {}, {
2905
+ step: step
2906
+ });
2907
+ }
2908
+ var hideNumber = false;
2909
+ if (p.options && p.options.hideNumber) {
2910
+ hideNumber = true;
2911
+ }
2912
+ var isPercent = function isPercent(string) {
2913
+ return typeof string === 'string' && string.endsWith('%');
2914
+ };
2915
+ var numberValue = 100;
2916
+ if (isPercent(p.value)) {
2917
+ try {
2918
+ numberValue = Number(p.value.split('%')[0]);
2919
+ if (Number.isNaN(numberValue)) numberValue = 100;
2920
+ } catch (error) {}
2921
+ }
2922
+ var handleChange = function handleChange(newNumber) {
2923
+ var a = newNumber + '%';
2924
+ p.onChange(a);
2925
+ };
2926
+ var renderNumber = p.readonly ? /*#__PURE__*/React.createElement("span", {
2927
+ style: {
2928
+ width: '80px'
2929
+ }
2930
+ }, p.value === ( '') ? '-' : p.value + '%') : /*#__PURE__*/React.createElement(_InputNumber, _extends({}, p.options, setting, {
2931
+ style: _objectSpread2({
2932
+ width: '80px'
2933
+ }, style),
2934
+ value: numberValue,
2935
+ disabled: p.disabled,
2936
+ onChange: handleChange,
2937
+ formatter: function formatter(value) {
2938
+ return "".concat(value, "%");
2939
+ },
2940
+ parser: function parser(value) {
2941
+ return value.replace('%', '');
2942
+ }
2943
+ }));
2944
+ return /*#__PURE__*/React.createElement("div", {
2945
+ className: "fr-slider"
2946
+ }, /*#__PURE__*/React.createElement(_Slider, _extends({
2947
+ style: {
2948
+ flexGrow: 1,
2949
+ marginRight: hideNumber ? 0 : 12
2950
+ }
2951
+ }, setting, {
2952
+ onChange: handleChange,
2953
+ max: 100,
2954
+ tooltip: {
2955
+ formatter: function formatter(v) {
2956
+ return v + '%';
2957
+ }
2958
+ },
2959
+ value: numberValue || 100,
2960
+ disabled: p.disabled || p.readonly
2961
+ })), hideNumber ? null : renderNumber);
2962
+ };
2963
+
2964
+ var frgWidgets = /*#__PURE__*/Object.freeze({
2965
+ __proto__: null,
2966
+ idInput: IdInput,
2967
+ htmlInput: HtmlInput,
2968
+ jsonInput: jsonInput,
2969
+ percentSlider: PercentSlider
2970
+ });
2971
+
2972
+ function ItemSettings(_ref) {
2973
+ var widgets = _ref.widgets;
2974
+ var setGlobal = useGlobal();
2975
+ var form = useForm();
2976
+ var isReady = useRef(false);
2977
+ var _useStore = useStore(),
2978
+ selected = _useStore.selected,
2979
+ flatten = _useStore.flatten,
2980
+ onItemChange = _useStore.onItemChange,
2981
+ onItemErrorChange = _useStore.onItemErrorChange,
2982
+ _useStore$userProps = _useStore.userProps,
2983
+ userProps = _useStore$userProps === void 0 ? {} : _useStore$userProps,
2984
+ globalWidgets = _useStore.widgets,
2985
+ globalMapping = _useStore.mapping;
2986
+ var settings = userProps.settings,
2987
+ commonSettings = userProps.commonSettings,
2988
+ hideId = userProps.hideId,
2989
+ validation = userProps.validation,
2990
+ transformer = userProps.transformer;
2991
+ var _useState = useState({}),
2992
+ _useState2 = _slicedToArray(_useState, 2),
2993
+ settingSchema = _useState2[0],
2994
+ setSettingSchema = _useState2[1];
2995
+ var _widgets = _objectSpread2(_objectSpread2({}, globalWidgets), frgWidgets);
2996
+ var getWidgetList = function getWidgetList(settings, commonSettings) {
2997
+ return settings.reduce(function (widgetList, setting) {
2998
+ if (!Array.isArray(setting.widgets)) return widgetList;
2999
+ var basicWidgets = setting.widgets.map(function (item) {
3000
+ var baseItemSettings = {};
3001
+ if (item.schema.type === 'array' && item.schema.items) {
3002
+ baseItemSettings.items = {
3003
+ type: 'object',
3004
+ hidden: '{{true}}'
3005
+ };
3006
+ }
3007
+ return _objectSpread2(_objectSpread2({}, item), {}, {
3008
+ widget: item.widget || item.schema.widget || getWidgetName(item.schema, globalMapping),
3009
+ setting: mergeInOrder(baseCommonSettings, commonSettings, baseItemSettings, item.setting)
3010
+ });
3011
+ });
3012
+ return [].concat(_toConsumableArray(widgetList), _toConsumableArray(basicWidgets));
3013
+ }, []);
3014
+ };
3015
+ var onDataChange = function onDataChange() {
3016
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3017
+ try {
3018
+ if (selected === '#' || !isReady.current || !value.$id) return;
3019
+ var item = _objectSpread2(_objectSpread2({}, flatten[selected]), {}, {
3020
+ schema: transformer.fromSetting(value)
3021
+ });
3022
+ onItemChange(selected, item, 'schema');
3023
+ } catch (error) {
3024
+ console.error(error, 'catch');
3025
+ }
3026
+ };
3027
+ useEffect(function () {
3028
+ // setting 该显示什么的计算,要把选中组件的 schema 和它对应的 widgets 的整体 schema 进行拼接
3029
+ try {
3030
+ isReady.current = false;
3031
+ var item = flatten[selected];
3032
+ if (!item || selected === '#') return;
3033
+ // 算 widgetList
3034
+ var _settings = Array.isArray(settings) ? [].concat(_toConsumableArray(settings), [{
3035
+ widgets: [].concat(_toConsumableArray(elements), _toConsumableArray(advancedElements), _toConsumableArray(layouts))
3036
+ }]) // TODO: 不是最优解
3037
+ : defaultSettings;
3038
+ var _commonSettings = isObject(commonSettings) ? commonSettings : defaultCommonSettings;
3039
+ var widgetList = getWidgetList(_settings, _commonSettings);
3040
+ var widgetName = getWidgetName(item.schema, globalMapping);
3041
+ var element = widgetList.find(function (e) {
3042
+ return e.widget === widgetName;
3043
+ }) || {}; // 有可能会没有找到
3044
+ var properties = _objectSpread2({}, element.setting);
3045
+ if (hideId) delete properties.$id;
3046
+ setTimeout(function () {
3047
+ setSettingSchema({
3048
+ type: 'object',
3049
+ displayType: 'column',
3050
+ properties: properties
3051
+ });
3052
+ var value = transformer.toSetting(item.schema);
3053
+ form.setValues(value);
3054
+ onDataChange(form.getValues());
3055
+ validation && form.submit();
3056
+ isReady.current = true;
3057
+ }, 0);
3058
+ } catch (error) {
3059
+ isReady.current = true;
3060
+ console.error(error);
3061
+ }
3062
+ }, [selected]);
3063
+ useEffect(function () {
3064
+ validation && onItemErrorChange(form === null || form === void 0 ? void 0 : form.errorFields);
3065
+ }, [validation, form === null || form === void 0 ? void 0 : form.errorFields]);
3066
+ useEffect(function () {
3067
+ setGlobal({
3068
+ settingsForm: form
3069
+ });
3070
+ }, []);
3071
+ return /*#__PURE__*/React.createElement("div", {
3072
+ style: {
3073
+ paddingRight: 24
3074
+ }
3075
+ }, /*#__PURE__*/React.createElement(FormRender, {
3076
+ form: form,
3077
+ schema: settingSchema,
3078
+ widgets: _objectSpread2(_objectSpread2({}, _widgets), widgets),
3079
+ mapping: globalMapping,
3080
+ watch: {
3081
+ '#': function _(v) {
3082
+ return setTimeout(function () {
3083
+ return onDataChange(v);
3084
+ }, 0);
3085
+ }
3086
+ }
3087
+ }));
3088
+ }
3089
+
3090
+ var TabPane = _Tabs.TabPane;
3091
+ function Settings(_ref) {
3092
+ var widgets = _ref.widgets;
3093
+ var _useTranslation = useTranslation(),
3094
+ t = _useTranslation.t;
3095
+ var _useSet = useSet({
3096
+ tabsKey: 'globalSettings',
3097
+ showRight: true,
3098
+ showItemSettings: false
3099
+ }),
3100
+ _useSet2 = _slicedToArray(_useSet, 2),
3101
+ state = _useSet2[0],
3102
+ setState = _useSet2[1];
3103
+ var _useStore = useStore(),
3104
+ selected = _useStore.selected,
3105
+ _useStore$userProps = _useStore.userProps,
3106
+ userProps = _useStore$userProps === void 0 ? {} : _useStore$userProps;
3107
+ var tabsKey = state.tabsKey,
3108
+ showRight = state.showRight,
3109
+ showItemSettings = state.showItemSettings;
3110
+ var toggleRight = function toggleRight() {
3111
+ return setState({
3112
+ showRight: !showRight
3113
+ });
3114
+ };
3115
+ var ToggleIcon = function ToggleIcon() {
3116
+ return /*#__PURE__*/React.createElement("div", {
3117
+ className: "absolute top-0 left-0 pointer",
3118
+ style: {
3119
+ height: 30,
3120
+ width: 30,
3121
+ padding: '8px 0 0 8px'
3122
+ },
3123
+ onClick: toggleRight
3124
+ }, /*#__PURE__*/React.createElement(_RightOutlined, {
3125
+ style: {
3126
+ color: '#666'
3127
+ }
3128
+ }));
3129
+ };
3130
+ var HideRightArrow = function HideRightArrow() {
3131
+ return /*#__PURE__*/React.createElement("div", {
3132
+ className: "absolute right-0 top-0 h2 flex-center",
3133
+ style: {
3134
+ width: 40,
3135
+ transform: 'rotate(180deg)'
3136
+ }
3137
+ }, /*#__PURE__*/React.createElement(ToggleIcon, null));
3138
+ };
3139
+
3140
+ // 如果没有选中任何item,或者是选中了根节点,object、list的内部,显示placeholder
3141
+ useEffect(function () {
3142
+ if (selected && selected[0] === '0' || selected === '#' || !selected) {
3143
+ setState({
3144
+ tabsKey: 'globalSettings',
3145
+ showItemSettings: false
3146
+ });
3147
+ } else {
3148
+ setState({
3149
+ tabsKey: 'itemSettings',
3150
+ showItemSettings: true
3151
+ });
3152
+ }
3153
+ }, [selected]);
3154
+ var globalSettingHide = userProps.globalSettings === null || userProps.globalSettings && !Object.keys(userProps.globalSettings).length;
3155
+ return showRight ? /*#__PURE__*/React.createElement("div", {
3156
+ className: "right-layout relative pl2"
3157
+ }, /*#__PURE__*/React.createElement(ToggleIcon, null), /*#__PURE__*/React.createElement(_Tabs, {
3158
+ activeKey: tabsKey,
3159
+ onChange: function onChange(key) {
3160
+ return setState({
3161
+ tabsKey: key
3162
+ });
3163
+ }
3164
+ }, showItemSettings && /*#__PURE__*/React.createElement(TabPane, {
3165
+ tab: t("组件配置"),
3166
+ key: "itemSettings"
3167
+ }, /*#__PURE__*/React.createElement(ItemSettings, {
3168
+ widgets: widgets
3169
+ })), !globalSettingHide && /*#__PURE__*/React.createElement(TabPane, {
3170
+ tab: t("表单配置"),
3171
+ key: "globalSettings"
3172
+ }, /*#__PURE__*/React.createElement(GlobalSettings, {
3173
+ widgets: widgets
3174
+ })))) : /*#__PURE__*/React.createElement(HideRightArrow, null);
3175
+ }
3176
+
3177
+ var css_248z$2 = ".left-item {\n width: 7rem;\n height: 2.2rem;\n margin: 4px;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n color: #333;\n background-color: #f5f7fa;\n}\n.left-item:hover {\n border: 1px dashed #ddd;\n color: #409eff;\n border: 1px dashed #409eff;\n}\n";
3178
+ styleInject(css_248z$2);
3179
+
3180
+ var Element = function Element(_ref) {
3181
+ var text = _ref.text,
3182
+ name = _ref.name,
3183
+ schema = _ref.schema,
3184
+ icon = _ref.icon,
3185
+ fixedName = _ref.fixedName;
3186
+ var setGlobal = useGlobal();
3187
+ var _useStore = useStore(),
3188
+ selected = _useStore.selected,
3189
+ flatten = _useStore.flatten,
3190
+ errorFields = _useStore.errorFields,
3191
+ userProps = _useStore.userProps,
3192
+ onFlattenChange = _useStore.onFlattenChange,
3193
+ elementRender = _useStore.elementRender;
3194
+ var getId = userProps.getId;
3195
+ var _useDrag = useDrag({
3196
+ type: 'box',
3197
+ item: {
3198
+ dragItem: {
3199
+ parent: '#',
3200
+ schema: schema,
3201
+ children: []
3202
+ },
3203
+ $id: fixedName ? "#/".concat(name) : "#/".concat(getId(name))
3204
+ },
3205
+ collect: function collect(monitor) {
3206
+ return {
3207
+ isDragging: monitor.isDragging()
3208
+ };
3209
+ }
3210
+ }),
3211
+ _useDrag2 = _slicedToArray(_useDrag, 2),
3212
+ isDragging = _useDrag2[0].isDragging,
3213
+ dragRef = _useDrag2[1];
3214
+ var handleElementClick = /*#__PURE__*/function () {
3215
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
3216
+ var _addItem, newId, newFlatten;
3217
+ return _regenerator().w(function (_context) {
3218
+ while (1) switch (_context.n) {
3219
+ case 0:
3220
+ if (!(errorFields === null || errorFields === void 0 ? void 0 : errorFields.length)) {
3221
+ _context.n = 1;
3222
+ break;
3223
+ }
3224
+ return _context.a(2);
3225
+ case 1:
3226
+ if (!(selected && !flatten[selected])) {
3227
+ _context.n = 2;
3228
+ break;
3229
+ }
3230
+ setGlobal({
3231
+ selected: '#'
3232
+ });
3233
+ return _context.a(2);
3234
+ case 2:
3235
+ _addItem = addItem({
3236
+ selected: selected,
3237
+ name: name,
3238
+ schema: schema,
3239
+ flatten: flatten,
3240
+ fixedName: fixedName,
3241
+ getId: getId
3242
+ }), newId = _addItem.newId, newFlatten = _addItem.newFlatten;
3243
+ onFlattenChange(newFlatten);
3244
+ setGlobal({
3245
+ selected: newId
3246
+ });
3247
+ case 3:
3248
+ return _context.a(2);
3249
+ }
3250
+ }, _callee);
3251
+ }));
3252
+ return function handleElementClick() {
3253
+ return _ref2.apply(this, arguments);
3254
+ };
3255
+ }();
3256
+ var widgetProps = {
3257
+ text: text,
3258
+ icon: icon,
3259
+ onClick: handleElementClick
3260
+ };
3261
+ var originNode = /*#__PURE__*/React.createElement(WidgetUI, widgetProps);
3262
+ return /*#__PURE__*/React.createElement("div", {
3263
+ ref: dragRef
3264
+ }, elementRender ? elementRender(schema, widgetProps, originNode) : originNode);
3265
+ };
3266
+
3267
+ // 目前没有用icon,但是可以补上
3268
+ var WidgetUI = function WidgetUI(_ref3) {
3269
+ var onClick = _ref3.onClick,
3270
+ text = _ref3.text,
3271
+ icon = _ref3.icon;
3272
+ var _useTranslation = useTranslation(["components"]),
3273
+ t = _useTranslation.t;
3274
+ return /*#__PURE__*/React.createElement("li", {
3275
+ className: "left-item",
3276
+ onClick: onClick
3277
+ }, icon, t(text));
3278
+ };
3279
+
3280
+ var css_248z$3 = ".left-layout {\n flex-shrink: 0;\n padding: 16px 0 0 8px;\n overflow-y: auto;\n height: 100%;\n}\n.left-layout::-webkit-scrollbar {\n width: 5px;\n background-color: #0002;\n}\n.left-layout::-webkit-scrollbar-thumb {\n background: #0004;\n border-radius: 5px;\n}\n.left-layout ul {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n}\n";
3281
+ styleInject(css_248z$3);
3282
+
3283
+ var Sidebar = function Sidebar(props) {
3284
+ var _useTranslation = useTranslation(),
3285
+ t = _useTranslation.t;
3286
+ var _useStore = useStore(),
3287
+ _useStore$userProps = _useStore.userProps,
3288
+ userProps = _useStore$userProps === void 0 ? {} : _useStore$userProps;
3289
+ var settings = userProps.settings;
3290
+ var _settings = Array.isArray(settings) ? settings : defaultSettings;
3291
+ return /*#__PURE__*/React.createElement("div", {
3292
+ className: "left-layout w5-l w4"
3293
+ }, Array.isArray(_settings) ? _settings.map(function (item, idx) {
3294
+ if (item && item.show === false) {
3295
+ return null;
3296
+ }
3297
+ return /*#__PURE__*/React.createElement("div", {
3298
+ key: idx
3299
+ }, /*#__PURE__*/React.createElement("p", {
3300
+ className: "f6 b"
3301
+ }, t(item.title, {
3302
+ ns: 'components'
3303
+ })), /*#__PURE__*/React.createElement("ul", {
3304
+ className: "pl0"
3305
+ }, Array.isArray(item.widgets) ? item.widgets.filter(function (item) {
3306
+ return item.show !== false;
3307
+ }).map(function (widget, idx) {
3308
+ return /*#__PURE__*/React.createElement(Element, _extends({
3309
+ key: idx.toString()
3310
+ }, props, widget));
3311
+ }) : /*#__PURE__*/React.createElement("div", null, t('此处配置有误'))));
3312
+ }) : /*#__PURE__*/React.createElement("div", null, t('配置错误:Setting不是数组')));
3313
+ };
3314
+
3315
+ // Setting Schema => FR Schema
3316
+ var transformFrom = function transformFrom(schema) {
3317
+ var isObj = schema.type === 'object' && schema.properties;
3318
+ var isList = schema.type === 'array' && schema.items && schema.items.properties;
3319
+ var hasChildren = isObj || isList;
3320
+ if (!hasChildren) {
3321
+ if (Array.isArray(schema.enumList)) {
3322
+ schema.enum = schema.enumList.filter(function (item) {
3323
+ return item.value;
3324
+ }).map(function (item) {
3325
+ return item.value;
3326
+ });
3327
+ schema.enumNames = schema.enumList.filter(function (item) {
3328
+ return item.value;
3329
+ }).map(function (item) {
3330
+ return item.label || item.value;
3331
+ });
3332
+ }
3333
+ delete schema.enumList;
3334
+ } else {
3335
+ var childrenList = getChildren2(schema);
3336
+ childrenList.map(function (item) {
3337
+ if (isObj) {
3338
+ schema.properties[item.name] = transformTo(_objectSpread2({}, item.schema));
3339
+ }
3340
+ if (isList) {
3341
+ schema.items.properties[item.name] = transformTo(_objectSpread2({}, item.schema));
3342
+ }
3343
+ });
3344
+ }
3345
+ return schema;
3346
+ };
3347
+ var fromSetting = function fromSetting(schema) {
3348
+ return transformFrom(_objectSpread2({}, schema));
3349
+ };
3350
+
3351
+ // FR Schema => Setting Schema
3352
+ var transformTo = function transformTo(schema) {
3353
+ var isObj = schema.type === 'object' && schema.properties;
3354
+ var isList = schema.type === 'array' && schema.items && schema.items.properties;
3355
+ var hasChildren = isObj || isList;
3356
+ if (!hasChildren) {
3357
+ if (Array.isArray(schema.enum) && Array.isArray(schema.enumNames)) {
3358
+ var list = schema.enum.map(function (item, idx) {
3359
+ return {
3360
+ value: item,
3361
+ label: schema.enumNames[idx]
3362
+ };
3363
+ });
3364
+ schema.enumList = list;
3365
+ }
3366
+ } else {
3367
+ var childrenList = getChildren2(schema);
3368
+ childrenList.map(function (item) {
3369
+ if (isObj) {
3370
+ schema.properties[item.name] = transformFrom(_objectSpread2({}, item.schema));
3371
+ }
3372
+ if (isList) {
3373
+ schema.items.properties[item.name] = transformFrom(_objectSpread2({}, item.schema));
3374
+ }
3375
+ });
3376
+ }
3377
+ return schema;
3378
+ };
3379
+ var toSetting = function toSetting(schema) {
3380
+ return transformTo(_objectSpread2({}, schema));
3381
+ };
3382
+
3383
+ var nanoid = customAlphabet('1234567890abcdef');
3384
+
3385
+ // Generate an internal UID to make the regexp pattern harder to guess.
3386
+ var UID = nanoid(32);
3387
+ var PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\d+)__@"', 'g');
3388
+ var IS_NATIVE_CODE_REGEXP = /\{\s*\[native code\]\s*\}/g;
3389
+ var IS_PURE_FUNCTION = /function.*?\(/;
3390
+ var IS_ARROW_FUNCTION = /.*?=>.*?/;
3391
+ var UNSAFE_CHARS_REGEXP = /[<>\/\u2028\u2029]/g;
3392
+ var RESERVED_SYMBOLS = ['*', 'async'];
3393
+
3394
+ // Mapping of unsafe HTML and invalid JavaScript line terminator chars to their
3395
+ // Unicode char counterparts which are safe to use in JavaScript strings.
3396
+ var ESCAPED_CHARS = {
3397
+ '<': "\\u003C",
3398
+ '>': "\\u003E",
3399
+ '/': "\\u002F",
3400
+ "\u2028": "\\u2028",
3401
+ "\u2029": "\\u2029"
3402
+ };
3403
+ function escapeUnsafeChars(unsafeChar) {
3404
+ return ESCAPED_CHARS[unsafeChar];
3405
+ }
3406
+ function deleteFunctions(obj) {
3407
+ var functionKeys = [];
3408
+ for (var key in obj) {
3409
+ if (typeof obj[key] === 'function') {
3410
+ functionKeys.push(key);
3411
+ }
3412
+ }
3413
+ for (var i = 0; i < functionKeys.length; i++) {
3414
+ delete obj[functionKeys[i]];
3415
+ }
3416
+ }
3417
+ function deleteUndefined(obj) {
3418
+ var undefinedKeys = [];
3419
+ for (var key in obj) {
3420
+ if (typeof obj[key] === 'undefined') {
3421
+ undefinedKeys.push(key);
3422
+ }
3423
+ }
3424
+ for (var i = 0; i < undefinedKeys.length; i++) {
3425
+ delete obj[undefinedKeys[i]];
3426
+ }
3427
+ }
3428
+ function serializeUtil(obj, options) {
3429
+ options || (options = {});
3430
+
3431
+ // Backwards-compatibility for `space` as the second argument.
3432
+ if (typeof options === 'number' || typeof options === 'string') {
3433
+ options = {
3434
+ space: options
3435
+ };
3436
+ }
3437
+ var functions = [];
3438
+ var regexps = [];
3439
+ var dates = [];
3440
+ var maps = [];
3441
+ var sets = [];
3442
+ var arrays = [];
3443
+ var undefs = [];
3444
+ var infinities = [];
3445
+ var bigInts = [];
3446
+ var urls = [];
3447
+
3448
+ // Returns placeholders for functions and regexps (identified by index)
3449
+ // which are later replaced by their string representation.
3450
+ function replacer(key, value) {
3451
+ // For nested function
3452
+ if (options.ignoreFunction) {
3453
+ deleteFunctions(value);
3454
+ }
3455
+ if (options.ignoreUndefined) {
3456
+ deleteUndefined(value);
3457
+ }
3458
+ if (!value && value !== undefined) {
3459
+ return value;
3460
+ }
3461
+
3462
+ // If the value is an object w/ a toJSON method, toJSON is called before
3463
+ // the replacer runs, so we use this[key] to get the non-toJSONed value.
3464
+ var origValue = this[key];
3465
+ var type = _typeof(origValue);
3466
+ if (type === 'object') {
3467
+ if (origValue instanceof RegExp) {
3468
+ return '@__R-' + UID + '-' + (regexps.push(origValue) - 1) + '__@';
3469
+ }
3470
+ if (origValue instanceof Date) {
3471
+ return '@__D-' + UID + '-' + (dates.push(origValue) - 1) + '__@';
3472
+ }
3473
+ if (origValue instanceof Map) {
3474
+ return '@__M-' + UID + '-' + (maps.push(origValue) - 1) + '__@';
3475
+ }
3476
+ if (origValue instanceof Set) {
3477
+ return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';
3478
+ }
3479
+ if (origValue instanceof Array) {
3480
+ var isSparse = origValue.filter(function () {
3481
+ return true;
3482
+ }).length !== origValue.length;
3483
+ if (isSparse) {
3484
+ return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';
3485
+ }
3486
+ }
3487
+ if (origValue instanceof URL) {
3488
+ return '@__L-' + UID + '-' + (urls.push(origValue) - 1) + '__@';
3489
+ }
3490
+ }
3491
+ if (type === 'function') {
3492
+ return '@__F-' + UID + '-' + (functions.push(origValue) - 1) + '__@';
3493
+ }
3494
+ if (type === 'undefined') {
3495
+ return '@__U-' + UID + '-' + (undefs.push(origValue) - 1) + '__@';
3496
+ }
3497
+ if (type === 'number' && !isNaN(origValue) && !isFinite(origValue)) {
3498
+ return '@__I-' + UID + '-' + (infinities.push(origValue) - 1) + '__@';
3499
+ }
3500
+ if (type === 'bigint') {
3501
+ return '@__B-' + UID + '-' + (bigInts.push(origValue) - 1) + '__@';
3502
+ }
3503
+ return value;
3504
+ }
3505
+ function serializeFunc(fn) {
3506
+ var serializedFn = fn.toString();
3507
+ if (IS_NATIVE_CODE_REGEXP.test(serializedFn)) {
3508
+ throw new TypeError('Serializing native function: ' + fn.name);
3509
+ }
3510
+
3511
+ // pure functions, example: {key: function() {}}
3512
+ if (IS_PURE_FUNCTION.test(serializedFn)) {
3513
+ return serializedFn;
3514
+ }
3515
+
3516
+ // arrow functions, example: arg1 => arg1+5
3517
+ if (IS_ARROW_FUNCTION.test(serializedFn)) {
3518
+ return serializedFn;
3519
+ }
3520
+ var argsStartsAt = serializedFn.indexOf('(');
3521
+ var def = serializedFn.substr(0, argsStartsAt).trim().split(' ').filter(function (val) {
3522
+ return val.length > 0;
3523
+ });
3524
+ var nonReservedSymbols = def.filter(function (val) {
3525
+ return RESERVED_SYMBOLS.indexOf(val) === -1;
3526
+ });
3527
+
3528
+ // enhanced literal objects, example: {key() {}}
3529
+ if (nonReservedSymbols.length > 0) {
3530
+ return (def.indexOf('async') > -1 ? 'async ' : '') + 'function' + (def.join('').indexOf('*') > -1 ? '*' : '') + serializedFn.substr(argsStartsAt);
3531
+ }
3532
+
3533
+ // arrow functions
3534
+ return serializedFn;
3535
+ }
3536
+
3537
+ // Check if the parameter is function
3538
+ if (options.ignoreFunction && typeof obj === 'function') {
3539
+ obj = undefined;
3540
+ }
3541
+ // Protects against `JSON.stringify()` returning `undefined`, by serializing
3542
+ // to the literal string: "undefined".
3543
+ if (obj === undefined) {
3544
+ return String(obj);
3545
+ }
3546
+ var str;
3547
+
3548
+ // Creates a JSON string representation of the value.
3549
+ // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args.
3550
+ if (options.isJSON && !options.space) {
3551
+ str = JSON.stringify(obj);
3552
+ } else {
3553
+ str = JSON.stringify(obj, options.isJSON ? null : replacer, options.space);
3554
+ }
3555
+
3556
+ // Protects against `JSON.stringify()` returning `undefined`, by serializing
3557
+ // to the literal string: "undefined".
3558
+ if (typeof str !== 'string') {
3559
+ return String(str);
3560
+ }
3561
+
3562
+ // Replace unsafe HTML and invalid JavaScript line terminator chars with
3563
+ // their safe Unicode char counterpart. This _must_ happen before the
3564
+ // regexps and functions are serialized and added back to the string.
3565
+ if (options.unsafe !== true) {
3566
+ str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);
3567
+ }
3568
+ if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {
3569
+ return str;
3570
+ }
3571
+
3572
+ // Replaces all occurrences of function, regexp, date, map and set placeholders in the
3573
+ // JSON string with their string representations. If the original value can
3574
+ // not be found, then `undefined` is used.
3575
+ return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) {
3576
+ // The placeholder may not be preceded by a backslash. This is to prevent
3577
+ // replacing things like `"a\"@__R-<UID>-0__@"` and thus outputting
3578
+ // invalid JS.
3579
+ if (backSlash) {
3580
+ return match;
3581
+ }
3582
+ if (type === 'D') {
3583
+ return 'new Date("' + dates[valueIndex].toISOString() + '")';
3584
+ }
3585
+ if (type === 'R') {
3586
+ return 'new RegExp(' + serialize(regexps[valueIndex].source) + ', "' + regexps[valueIndex].flags + '")';
3587
+ }
3588
+ if (type === 'M') {
3589
+ return 'new Map(' + serialize(Array.from(maps[valueIndex].entries())) + ')';
3590
+ }
3591
+ if (type === 'S') {
3592
+ return 'new Set(' + serialize(Array.from(sets[valueIndex].values())) + ')';
3593
+ }
3594
+ if (type === 'A') {
3595
+ return 'Array.prototype.slice.call(' + serialize(Object.assign({
3596
+ length: arrays[valueIndex].length
3597
+ }, arrays[valueIndex])) + ')';
3598
+ }
3599
+ if (type === 'U') {
3600
+ return 'undefined';
3601
+ }
3602
+ if (type === 'I') {
3603
+ return infinities[valueIndex];
3604
+ }
3605
+ if (type === 'B') {
3606
+ return 'BigInt("' + bigInts[valueIndex] + '")';
3607
+ }
3608
+ if (type === 'L') {
3609
+ return 'new URL("' + urls[valueIndex].toString() + '")';
3610
+ }
3611
+ var fn = functions[valueIndex];
3612
+ return serializeFunc(fn);
3613
+ });
3614
+ }
3615
+
3616
+ /**
3617
+ * @description 使用serialize-javascript进行序列化,替代JSON.stringify()
3618
+ * @description 组件rules里面会存储一些validator函数,如果用JSON.stringify提交给接口会丢失
3619
+ * @param {*} obj 传入需要序列化的值
3620
+ * @returns 序列化后的值
3621
+ */
3622
+ function serialize(obj) {
3623
+ return serializeUtil(obj, {
3624
+ ignoreUndefined: true
3625
+ });
3626
+ }
3627
+
3628
+ /**
3629
+ * @description 序列化成编辑器需要的展示格式
3630
+ * @param {*} obj 传入需要序列化的值
3631
+ * @return {*} 序列化后的值
3632
+ */
3633
+ function serializeToDraft(obj) {
3634
+ return serializeUtil(obj, {
3635
+ space: 2,
3636
+ ignoreUndefined: true
3637
+ });
3638
+ }
3639
+
3640
+ /**
3641
+ * @description 对serialize-javascript序列化后的值进行反序列化化
3642
+ * @param {*} serializedJavascript 反序列化后的值
3643
+ * @returns
3644
+ */
3645
+ function deserialize(serializedJavascript) {
3646
+ return new Function('return ' + serializedJavascript)();
3647
+ }
3648
+
3649
+ function list(props) {
3650
+ if (!/^#/.test(props.schema.$id)) {
3651
+ return /*#__PURE__*/React.createElement("div", {
3652
+ className: "w-100"
3653
+ }, props.children);
3654
+ }
3655
+ return /*#__PURE__*/React.createElement("div", {
3656
+ className: "flex flex-column"
3657
+ }, /*#__PURE__*/React.createElement("div", {
3658
+ className: "fr-set w-100 flex flex-column ba pt4 pb2 ph2 relative b--black-10"
3659
+ }, props.children, /*#__PURE__*/React.createElement(_Button, {
3660
+ size: "small",
3661
+ className: "self-end",
3662
+ type: "dashed",
3663
+ icon: /*#__PURE__*/React.createElement(_DeleteOutlined, null)
3664
+ }, "\u5220\u9664")), /*#__PURE__*/React.createElement(_Button, {
3665
+ size: "small",
3666
+ className: "self-end",
3667
+ icon: /*#__PURE__*/React.createElement(_PlusCircleOutlined, null)
3668
+ }, "\u6DFB\u52A0"));
3669
+ }
3670
+
3671
+ var DEFAULT_SCHEMA = {
3672
+ type: 'object',
3673
+ properties: {}
3674
+ };
3675
+
3676
+ // TODO: formData 不存在的时候会报错:can't find # of undefined
3677
+ function Provider(props, ref) {
3678
+ var defaultValue = props.defaultValue,
3679
+ canDrag = props.canDrag,
3680
+ canDelete = props.canDelete,
3681
+ submit = props.submit,
3682
+ _transformer = props.transformer,
3683
+ extraButtons = props.extraButtons,
3684
+ controlButtons = props.controlButtons,
3685
+ _preview = props.preview,
3686
+ hideId = props.hideId,
3687
+ _props$getId = props.getId,
3688
+ getId = _props$getId === void 0 ? defaultGetId : _props$getId,
3689
+ settings = props.settings,
3690
+ commonSettings = props.commonSettings,
3691
+ globalSettings = props.globalSettings,
3692
+ _props$widgets = props.widgets,
3693
+ widgets$1 = _props$widgets === void 0 ? {} : _props$widgets,
3694
+ _props$mapping = props.mapping,
3695
+ mapping$1 = _props$mapping === void 0 ? {} : _props$mapping,
3696
+ _props$methods = props.methods,
3697
+ methods = _props$methods === void 0 ? {} : _props$methods,
3698
+ _props$configProvider = props.configProvider,
3699
+ configProvider = _props$configProvider === void 0 ? {} : _props$configProvider,
3700
+ _props$validation = props.validation,
3701
+ validation = _props$validation === void 0 ? true : _props$validation,
3702
+ children = props.children,
3703
+ fieldRender = props.fieldRender,
3704
+ fieldWrapperRender = props.fieldWrapperRender,
3705
+ elementRender = props.elementRender,
3706
+ prefixCls = props.prefixCls;
3707
+ var transformer = _objectSpread2({
3708
+ from: function from(schema) {
3709
+ return schema;
3710
+ },
3711
+ to: function to(schema) {
3712
+ return schema;
3713
+ },
3714
+ fromSetting: fromSetting,
3715
+ toSetting: toSetting
3716
+ }, _transformer);
3717
+ var frwRef = ref || useRef();
3718
+ var _useSet = useSet({
3719
+ formData: {},
3720
+ frProps: {},
3721
+ // form-render 的全局 props 等
3722
+ isNewVersion: true,
3723
+ // 用schema字段,还是用propsSchema字段,这是一个问题
3724
+ preview: false,
3725
+ // preview = false 是编辑模式
3726
+ schema: {},
3727
+ selected: undefined,
3728
+ // 被选中的$id, 如果object/array的内部,以首字母0标识
3729
+ settingsForm: null
3730
+ }),
3731
+ _useSet2 = _slicedToArray(_useSet, 2),
3732
+ state = _useSet2[0],
3733
+ setState = _useSet2[1];
3734
+ var _useState = useState([]),
3735
+ _useState2 = _slicedToArray(_useState, 2),
3736
+ errorFields = _useState2[0],
3737
+ setErrorFields = _useState2[1];
3738
+
3739
+ // 收口点 propsSchema 到 schema 的转换 (一共3处,其他两个是 importSchema 和 setValue,在 FRWrapper 文件)
3740
+ useEffect(function () {
3741
+ var schema = defaultValue ? transformer.from(defaultValue) : DEFAULT_SCHEMA;
3742
+ if (schema) setState(schemaToState(schema));
3743
+ }, [defaultValue]);
3744
+ var formData = state.formData,
3745
+ frProps = state.frProps,
3746
+ isNewVersion = state.isNewVersion,
3747
+ preview = state.preview,
3748
+ schema = state.schema,
3749
+ selected = state.selected;
3750
+ var onChange = function onChange(data) {
3751
+ setState({
3752
+ formData: data
3753
+ });
3754
+ props.onChange && props.onChange(data);
3755
+ };
3756
+ var onSchemaChange = function onSchemaChange(newSchema) {
3757
+ setState({
3758
+ schema: newSchema
3759
+ });
3760
+ if (props.onSchemaChange) {
3761
+ setTimeout(function () {
3762
+ if (!frwRef.current) return;
3763
+ var pureSchema = frwRef.current.getValue();
3764
+ props.onSchemaChange(pureSchema);
3765
+ }, 0);
3766
+ }
3767
+ };
3768
+ var _mapping = _objectSpread2(_objectSpread2({}, mapping), mapping$1);
3769
+ var _widgets = _objectSpread2(_objectSpread2(_objectSpread2({}, widgets), widgets$1), {}, {
3770
+ list: list
3771
+ });
3772
+ var rootState = {
3773
+ preview: _preview !== null && _preview !== void 0 ? _preview : preview,
3774
+ mapping: _mapping,
3775
+ widgets: _widgets,
3776
+ methods: methods,
3777
+ selected: selected
3778
+ };
3779
+ var userProps = {
3780
+ canDrag: canDrag,
3781
+ canDelete: canDelete,
3782
+ submit: submit,
3783
+ transformer: transformer,
3784
+ isNewVersion: isNewVersion,
3785
+ extraButtons: extraButtons,
3786
+ controlButtons: controlButtons,
3787
+ hideId: hideId,
3788
+ getId: getId,
3789
+ validation: validation,
3790
+ settings: settings,
3791
+ commonSettings: commonSettings,
3792
+ globalSettings: globalSettings
3793
+ };
3794
+ var _schema = {};
3795
+ if (schema) {
3796
+ _schema = combineSchema(_objectSpread2(_objectSpread2({}, schema), frProps)); // TODO: 要不要判断是否都是object
3797
+ }
3798
+ var flatten = flattenSchema(_schema);
3799
+ var flattenWithData = transformer.from(dataToFlatten(flatten, formData));
3800
+ var onFlattenChange = function onFlattenChange(newFlatten) {
3801
+ var changeSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'schema';
3802
+ var newSchema = idToSchema(newFlatten);
3803
+ var newData = _flattenToData(newFlatten);
3804
+ // 判断只有schema变化时才调用,一般需求的用户不需要
3805
+ if (changeSource === 'schema') {
3806
+ onSchemaChange(newSchema);
3807
+ }
3808
+ // schema 变化大都会触发 data 变化
3809
+ onChange(newData);
3810
+ };
3811
+ var onItemChange = function onItemChange(key, value, changeSource) {
3812
+ flattenWithData[key] = value;
3813
+ onFlattenChange(flattenWithData, changeSource);
3814
+ };
3815
+ var displaySchema = {};
3816
+ var displaySchemaString = '';
3817
+ try {
3818
+ var _schema2 = _objectSpread2(_objectSpread2({}, idToSchema(flattenWithData, '#', true)), frProps);
3819
+ displaySchema = transformer.to(_schema2);
3820
+ if (!isNewVersion) {
3821
+ displaySchema = newSchemaToOld(displaySchema);
3822
+ }
3823
+ // displaySchemaString = JSON.stringify(displaySchema, null, 2);
3824
+ // 支持直接保存函数之后(解决validtor不能正常保存的问题),这里因为导入导出的问题,序列化也用内置的api序列化
3825
+ displaySchemaString = serializeToDraft(displaySchema);
3826
+ } catch (error) {}
3827
+ var getValue = function getValue() {
3828
+ return displaySchema;
3829
+ };
3830
+ var setValue = function setValue(value) {
3831
+ try {
3832
+ setState(function (state) {
3833
+ return _objectSpread2(_objectSpread2({}, state), {}, {
3834
+ selected: undefined
3835
+ }, schemaToState(transformer.from(value)));
3836
+ });
3837
+ } catch (error) {
3838
+ console.error(error);
3839
+ }
3840
+ };
3841
+ var copyValue = function copyValue() {
3842
+ copyTOClipboard(displaySchemaString);
3843
+ };
3844
+ var getErrorFields = function getErrorFields() {
3845
+ return errorFields;
3846
+ };
3847
+ var getSettingsForm = function getSettingsForm() {
3848
+ return state.settingsForm;
3849
+ };
3850
+ useImperativeHandle(frwRef, function () {
3851
+ return {
3852
+ getValue: getValue,
3853
+ setValue: setValue,
3854
+ copyValue: copyValue,
3855
+ getErrorFields: getErrorFields,
3856
+ getSettingsForm: getSettingsForm
3857
+ };
3858
+ });
3859
+
3860
+ // TODO: flatten是频繁在变的,应该和其他两个函数分开
3861
+ var store = _objectSpread2({
3862
+ flatten: flattenWithData,
3863
+ // schema + formData = flattenWithData
3864
+ onFlattenChange: onFlattenChange,
3865
+ // onChange + onSchemaChange = onFlattenChange
3866
+ onItemChange: onItemChange,
3867
+ // onFlattenChange 里只改一个item的flatten,使用这个方法
3868
+ onSchemaChange: onSchemaChange,
3869
+ onChange: onChange,
3870
+ errorFields: errorFields,
3871
+ onItemErrorChange: setErrorFields,
3872
+ userProps: userProps,
3873
+ frProps: frProps,
3874
+ displaySchema: displaySchema,
3875
+ displaySchemaString: displaySchemaString,
3876
+ fieldRender: fieldRender,
3877
+ fieldWrapperRender: fieldWrapperRender,
3878
+ elementRender: elementRender
3879
+ }, rootState);
3880
+ return /*#__PURE__*/React.createElement(DndProvider, {
3881
+ backend: HTML5Backend,
3882
+ context: window
3883
+ }, /*#__PURE__*/React.createElement(_ConfigProvider, _extends({
3884
+ locale: zhCN$1
3885
+ }, configProvider), /*#__PURE__*/React.createElement(Ctx.Provider, {
3886
+ value: setState
3887
+ }, /*#__PURE__*/React.createElement(StoreCtx.Provider, {
3888
+ value: store
3889
+ }, children))));
3890
+ }
3891
+ var Provider$1 = /*#__PURE__*/forwardRef(Provider);
3892
+
3893
+ var translation = {
3894
+ "导入": "Import",
3895
+ "清除": "Clear",
3896
+ "清空": "Clear",
3897
+ "导出schema": "Export Schema",
3898
+ "最终展示": "Preview",
3899
+ "开始编辑": "Edit",
3900
+ "复制": "Copy",
3901
+ "取消": "Cancel",
3902
+ "复制成功": "Copy Success",
3903
+ "贴入需要导入的schema,模样可点击导出schema参考": "Paste the schema. Click export schema reference",
3904
+ "格式不对哦,请重新尝试": "Wrong format, please try again",
3905
+ "点击/拖拽左侧栏的组件进行添加": "Click / Drag the component in the left column to add",
3906
+ "组件配置": "Component Setting",
3907
+ "表单配置": "Form Setting",
3908
+ "此处配置有误": "Incorrect configuration here",
3909
+ "配置错误:Setting不是数组": "Configuration error: setting is not an array"
3910
+ };
3911
+ var components = {
3912
+ "基础组件": "Basic",
3913
+ "高级组件": "Advanced",
3914
+ "布局组件": "Layout",
3915
+ "模板": "Template",
3916
+ "输入框": "Input",
3917
+ "大输入框": "Textarea",
3918
+ "日期选择": "Date Picker",
3919
+ "数字输入框": "NumberInput",
3920
+ "是否选择": "Checkbox",
3921
+ "是否switch": "Switch",
3922
+ "下拉单选": "SelectSingle",
3923
+ "点击单选": "Radio",
3924
+ "下拉多选": "SelectMultiple",
3925
+ "点击多选": "CheckboxGroup",
3926
+ HTML: "HTML",
3927
+ "日期范围": "DateRange",
3928
+ "数字(slider)": "Slider",
3929
+ "图片展示": "Image",
3930
+ "颜色选择": "ColorPicker",
3931
+ "对象": "Section",
3932
+ "常规列表": "List",
3933
+ "简单列表": "SimpleList",
3934
+ "表格列表": "TableList",
3935
+ "复杂表格列表": "DrawerList",
3936
+ "整体布局": "Grid Columns",
3937
+ "一行一列": "Single Column",
3938
+ "一行二列": "Two Columns",
3939
+ "一行三列": "Three Columns",
3940
+ "默认一行一列": "Single Column by default",
3941
+ "标签宽度": "Form Label Width",
3942
+ "标签展示模式": "Label Alignment",
3943
+ "同行": "Horizontal",
3944
+ "单独一行": "Vertical",
3945
+ "复杂结构样例": "Example"
3946
+ };
3947
+ var enUS = {
3948
+ translation: translation,
3949
+ components: components
3950
+ };
3951
+
3952
+ var translation$1 = {
3953
+ };
3954
+ var zhCN = {
3955
+ translation: translation$1
3956
+ };
3957
+
3958
+ var resources = {
3959
+ en: enUS,
3960
+ cn: zhCN
3961
+ };
3962
+
3963
+ i18n.use(initReactI18next).init({
3964
+ debug: false,
3965
+ resources: resources,
3966
+ lng: 'cn',
3967
+ interpolation: {
3968
+ escapeValue: false // react already safes from xss
3969
+ }
3970
+ });
3971
+
3972
+ var css_248z$4 = ".fr-generator-container {\n /* Resets */\n /*\n This will set table to full width and then\n all cells will be equal width\n */\n /* 1. Fix for Chrome 44 bug.\n * https://code.google.com/p/chromium/issues/detail?id=506893 */\n /* Height Percentages - Based off of height of parent */\n /* Screen Height Percentage */\n /* String Properties */\n /* Max Width Percentages */\n /* Max Width Scale */\n /* Max Width String Properties */\n /* .link:hover { color: #3e71f7; font-size: 14px; } */\n}\n.fr-generator-container .outline {\n outline: 1px solid;\n}\n.fr-generator-container .outline-transparent {\n outline: 1px solid transparent;\n}\n.fr-generator-container .outline-0 {\n outline: 0;\n}\n.fr-generator-container .ba {\n border-style: solid;\n border-width: 1px;\n}\n.fr-generator-container .bt {\n border-top-style: solid;\n border-top-width: 1px;\n}\n.fr-generator-container .br {\n border-right-style: solid;\n border-right-width: 1px;\n}\n.fr-generator-container .bb {\n border-bottom-style: solid;\n border-bottom-width: 1px;\n}\n.fr-generator-container .bl {\n border-left-style: solid;\n border-left-width: 1px;\n}\n.fr-generator-container .bn {\n border-style: none;\n border-width: 0;\n}\n.fr-generator-container .br0 {\n border-radius: 0;\n}\n.fr-generator-container .br1 {\n border-radius: 0.125rem;\n}\n.fr-generator-container .br2 {\n border-radius: 0.25rem;\n}\n.fr-generator-container .br3 {\n border-radius: 0.5rem;\n}\n.fr-generator-container .br4 {\n border-radius: 1rem;\n}\n.fr-generator-container .br-100 {\n border-radius: 100%;\n}\n.fr-generator-container .br-pill {\n border-radius: 9999px;\n}\n.fr-generator-container .br--bottom {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.fr-generator-container .br--top {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n.fr-generator-container .br--right {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.fr-generator-container .br--left {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.fr-generator-container .b--dotted {\n border-style: dotted;\n}\n.fr-generator-container .b--dashed {\n border-style: dashed;\n}\n.fr-generator-container .b--solid {\n border-style: solid;\n}\n.fr-generator-container .b--none {\n border-style: none;\n}\n.fr-generator-container .b--black-10 {\n border-color: rgba(0, 0, 0, 0.1);\n}\n.fr-generator-container .b--black-20 {\n border-color: rgba(0, 0, 0, 0.2);\n}\n.fr-generator-container .b--black-30 {\n border-color: rgba(0, 0, 0, 0.3);\n}\n.fr-generator-container .black-40 {\n color: rgba(0, 0, 0, 0.4);\n}\n.fr-generator-container .f4 {\n font-size: 1.25rem;\n}\n.fr-generator-container .bw0 {\n border-width: 0;\n}\n.fr-generator-container .bw1 {\n border-width: 0.125rem;\n}\n.fr-generator-container .bw2 {\n border-width: 0.25rem;\n}\n.fr-generator-container .bw3 {\n border-width: 0.5rem;\n}\n.fr-generator-container .bw4 {\n border-width: 1rem;\n}\n.fr-generator-container .bw5 {\n border-width: 2rem;\n}\n.fr-generator-container .bt-0 {\n border-top-width: 0;\n}\n.fr-generator-container .br-0 {\n border-right-width: 0;\n}\n.fr-generator-container .bb-0 {\n border-bottom-width: 0;\n}\n.fr-generator-container .bl-0 {\n border-left-width: 0;\n}\n.fr-generator-container .shadow-1 {\n box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2);\n}\n.fr-generator-container .shadow-2 {\n box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.2);\n}\n.fr-generator-container .shadow-3 {\n box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.2);\n}\n.fr-generator-container .shadow-4 {\n box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2);\n}\n.fr-generator-container .shadow-5 {\n box-shadow: 4px 4px 8px 0 rgba(0, 0, 0, 0.2);\n}\n.fr-generator-container .top-0 {\n top: 0;\n}\n.fr-generator-container .right-0 {\n right: 0;\n}\n.fr-generator-container .bottom-0 {\n bottom: 0;\n}\n.fr-generator-container .left-0 {\n left: 0;\n}\n.fr-generator-container .top-1 {\n top: 1rem;\n}\n.fr-generator-container .right-1 {\n right: 1rem;\n}\n.fr-generator-container .bottom-1 {\n bottom: 1rem;\n}\n.fr-generator-container .left-1 {\n left: 1rem;\n}\n.fr-generator-container .top-2 {\n top: 2rem;\n}\n.fr-generator-container .right-2 {\n right: 2rem;\n}\n.fr-generator-container .bottom-2 {\n bottom: 2rem;\n}\n.fr-generator-container .left-2 {\n left: 2rem;\n}\n.fr-generator-container .top--1 {\n top: -1rem;\n}\n.fr-generator-container .right--1 {\n right: -1rem;\n}\n.fr-generator-container .bottom--1 {\n bottom: -1rem;\n}\n.fr-generator-container .left--1 {\n left: -1rem;\n}\n.fr-generator-container .top--2 {\n top: -2rem;\n}\n.fr-generator-container .right--2 {\n right: -2rem;\n}\n.fr-generator-container .bottom--2 {\n bottom: -2rem;\n}\n.fr-generator-container .left--2 {\n left: -2rem;\n}\n.fr-generator-container .absolute--fill {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.fr-generator-container .dn {\n display: none;\n}\n.fr-generator-container .di {\n display: inline;\n}\n.fr-generator-container .db {\n display: block;\n}\n.fr-generator-container .dib {\n display: inline-block;\n}\n.fr-generator-container .dit {\n display: inline-table;\n}\n.fr-generator-container .dt {\n display: table;\n}\n.fr-generator-container .dtc {\n display: table-cell;\n}\n.fr-generator-container .dt-row {\n display: table-row;\n}\n.fr-generator-container .dt-row-group {\n display: table-row-group;\n}\n.fr-generator-container .dt-column {\n display: table-column;\n}\n.fr-generator-container .dt-column-group {\n display: table-column-group;\n}\n.fr-generator-container .dt--fixed {\n table-layout: fixed;\n width: 100%;\n}\n.fr-generator-container .flex {\n display: flex;\n}\n.fr-generator-container .inline-flex {\n display: inline-flex;\n}\n.fr-generator-container .flex-auto {\n flex: 1 1 auto;\n min-width: 0;\n /* 1 */\n min-height: 0;\n /* 1 */\n}\n.fr-generator-container .flex-none {\n flex: none;\n}\n.fr-generator-container .flex-column {\n flex-direction: column;\n}\n.fr-generator-container .flex-row {\n flex-direction: row;\n}\n.fr-generator-container .flex-wrap {\n flex-wrap: wrap;\n}\n.fr-generator-container .flex-nowrap {\n flex-wrap: nowrap;\n}\n.fr-generator-container .flex-wrap-reverse {\n flex-wrap: wrap-reverse;\n}\n.fr-generator-container .flex-column-reverse {\n flex-direction: column-reverse;\n}\n.fr-generator-container .flex-row-reverse {\n flex-direction: row-reverse;\n}\n.fr-generator-container .items-start {\n align-items: flex-start;\n}\n.fr-generator-container .items-end {\n align-items: flex-end;\n}\n.fr-generator-container .items-center {\n align-items: center;\n}\n.fr-generator-container .items-baseline {\n align-items: baseline;\n}\n.fr-generator-container .items-stretch {\n align-items: stretch;\n}\n.fr-generator-container .self-start {\n align-self: flex-start;\n}\n.fr-generator-container .self-end {\n align-self: flex-end;\n}\n.fr-generator-container .self-center {\n align-self: center;\n}\n.fr-generator-container .self-baseline {\n align-self: baseline;\n}\n.fr-generator-container .self-stretch {\n align-self: stretch;\n}\n.fr-generator-container .justify-start {\n justify-content: flex-start;\n}\n.fr-generator-container .justify-end {\n justify-content: flex-end;\n}\n.fr-generator-container .justify-center {\n justify-content: center;\n}\n.fr-generator-container .justify-between {\n justify-content: space-between;\n}\n.fr-generator-container .justify-around {\n justify-content: space-around;\n}\n.fr-generator-container .content-start {\n align-content: flex-start;\n}\n.fr-generator-container .content-end {\n align-content: flex-end;\n}\n.fr-generator-container .content-center {\n align-content: center;\n}\n.fr-generator-container .content-between {\n align-content: space-between;\n}\n.fr-generator-container .content-around {\n align-content: space-around;\n}\n.fr-generator-container .content-stretch {\n align-content: stretch;\n}\n.fr-generator-container .order-0 {\n order: 0;\n}\n.fr-generator-container .order-1 {\n order: 1;\n}\n.fr-generator-container .order-2 {\n order: 2;\n}\n.fr-generator-container .order-3 {\n order: 3;\n}\n.fr-generator-container .order-4 {\n order: 4;\n}\n.fr-generator-container .order-5 {\n order: 5;\n}\n.fr-generator-container .order-6 {\n order: 6;\n}\n.fr-generator-container .order-7 {\n order: 7;\n}\n.fr-generator-container .order-8 {\n order: 8;\n}\n.fr-generator-container .order-last {\n order: 99999;\n}\n.fr-generator-container .flex-grow-0 {\n flex-grow: 0;\n}\n.fr-generator-container .flex-grow-1 {\n flex-grow: 1;\n}\n.fr-generator-container .flex-shrink-0 {\n flex-shrink: 0;\n}\n.fr-generator-container .flex-shrink-1 {\n flex-shrink: 1;\n}\n.fr-generator-container .fw1 {\n font-weight: 100;\n}\n.fr-generator-container .fw2 {\n font-weight: 200;\n}\n.fr-generator-container .fw3 {\n font-weight: 300;\n}\n.fr-generator-container .fw4 {\n font-weight: 400;\n}\n.fr-generator-container .fw5 {\n font-weight: 500;\n}\n.fr-generator-container .fw6 {\n font-weight: 600;\n}\n.fr-generator-container .fw7 {\n font-weight: 700;\n}\n.fr-generator-container .fw8 {\n font-weight: 800;\n}\n.fr-generator-container .fw9 {\n font-weight: 900;\n}\n.fr-generator-container .h1 {\n height: 1rem;\n}\n.fr-generator-container .h2 {\n height: 2rem;\n}\n.fr-generator-container .h3 {\n height: 4rem;\n}\n.fr-generator-container .h4 {\n height: 8rem;\n}\n.fr-generator-container .h5 {\n height: 16rem;\n}\n.fr-generator-container .h-25 {\n height: 25%;\n}\n.fr-generator-container .h-50 {\n height: 50%;\n}\n.fr-generator-container .h-75 {\n height: 75%;\n}\n.fr-generator-container .h-100 {\n height: 100%;\n}\n.fr-generator-container .min-h-100 {\n min-height: 100%;\n}\n.fr-generator-container .vh-25 {\n height: 25vh;\n}\n.fr-generator-container .vh-50 {\n height: 50vh;\n}\n.fr-generator-container .vh-75 {\n height: 75vh;\n}\n.fr-generator-container .vh-100 {\n height: 100vh;\n}\n.fr-generator-container .min-vh-100 {\n min-height: 100vh;\n}\n.fr-generator-container .h-auto {\n height: auto;\n}\n.fr-generator-container .h-inherit {\n height: inherit;\n}\n.fr-generator-container .tracked {\n letter-spacing: 0.1em;\n}\n.fr-generator-container .tracked-tight {\n letter-spacing: -0.05em;\n}\n.fr-generator-container .tracked-mega {\n letter-spacing: 0.25em;\n}\n.fr-generator-container .lh-solid {\n line-height: 1;\n}\n.fr-generator-container .lh-title {\n line-height: 1.25;\n}\n.fr-generator-container .lh-copy {\n line-height: 1.5;\n}\n.fr-generator-container .mw-100 {\n max-width: 100%;\n}\n.fr-generator-container .mw1 {\n max-width: 1rem;\n}\n.fr-generator-container .mw2 {\n max-width: 2rem;\n}\n.fr-generator-container .mw3 {\n max-width: 4rem;\n}\n.fr-generator-container .mw4 {\n max-width: 8rem;\n}\n.fr-generator-container .mw5 {\n max-width: 16rem;\n}\n.fr-generator-container .mw6 {\n max-width: 32rem;\n}\n.fr-generator-container .mw7 {\n max-width: 48rem;\n}\n.fr-generator-container .mw8 {\n max-width: 64rem;\n}\n.fr-generator-container .mw9 {\n max-width: 96rem;\n}\n.fr-generator-container .mw-none {\n max-width: none;\n}\n.fr-generator-container .w1 {\n width: 1rem;\n}\n.fr-generator-container .w2 {\n width: 2rem;\n}\n.fr-generator-container .w3 {\n width: 4rem;\n}\n.fr-generator-container .w4 {\n width: 8rem;\n}\n.fr-generator-container .w5 {\n width: 16rem;\n}\n.fr-generator-container .w-10 {\n width: 10%;\n}\n.fr-generator-container .w-20 {\n width: 20%;\n}\n.fr-generator-container .w-25 {\n width: 25%;\n}\n.fr-generator-container .w-30 {\n width: 30%;\n}\n.fr-generator-container .w-33 {\n width: 33%;\n}\n.fr-generator-container .w-34 {\n width: 34%;\n}\n.fr-generator-container .w-40 {\n width: 40%;\n}\n.fr-generator-container .w-50 {\n width: 50%;\n}\n.fr-generator-container .w-60 {\n width: 60%;\n}\n.fr-generator-container .w-70 {\n width: 70%;\n}\n.fr-generator-container .w-75 {\n width: 75%;\n}\n.fr-generator-container .w-80 {\n width: 80%;\n}\n.fr-generator-container .w-90 {\n width: 90%;\n}\n.fr-generator-container .w-100 {\n width: 100%;\n}\n.fr-generator-container .w-third {\n width: calc(100% / 3);\n}\n.fr-generator-container .w-two-thirds {\n width: calc(100% / 1.5);\n}\n.fr-generator-container .w-auto {\n width: auto;\n}\n.fr-generator-container .tl {\n text-align: left;\n}\n.fr-generator-container .tr {\n text-align: right;\n}\n.fr-generator-container .tc {\n text-align: center;\n}\n.fr-generator-container .tj {\n text-align: justify;\n}\n.fr-generator-container .overflow-visible {\n overflow: visible;\n}\n.fr-generator-container .overflow-hidden {\n overflow: hidden;\n}\n.fr-generator-container .overflow-scroll {\n overflow: scroll;\n}\n.fr-generator-container .overflow-auto {\n overflow: auto;\n}\n.fr-generator-container .overflow-x-visible {\n overflow-x: visible;\n}\n.fr-generator-container .overflow-x-hidden {\n overflow-x: hidden;\n}\n.fr-generator-container .overflow-x-scroll {\n overflow-x: scroll;\n}\n.fr-generator-container .overflow-x-auto {\n overflow-x: auto;\n}\n.fr-generator-container .overflow-y-visible {\n overflow-y: visible;\n}\n.fr-generator-container .overflow-y-hidden {\n overflow-y: hidden;\n}\n.fr-generator-container .overflow-y-scroll {\n overflow-y: scroll;\n}\n.fr-generator-container .overflow-y-auto {\n overflow-y: auto;\n}\n.fr-generator-container .static {\n position: static;\n}\n.fr-generator-container .relative {\n position: relative;\n}\n.fr-generator-container .absolute {\n position: absolute;\n}\n.fr-generator-container .fixed {\n position: fixed;\n}\n.fr-generator-container .o-100 {\n opacity: 1;\n}\n.fr-generator-container .o-90 {\n opacity: 0.9;\n}\n.fr-generator-container .o-80 {\n opacity: 0.8;\n}\n.fr-generator-container .o-70 {\n opacity: 0.7;\n}\n.fr-generator-container .o-60 {\n opacity: 0.6;\n}\n.fr-generator-container .o-50 {\n opacity: 0.5;\n}\n.fr-generator-container .o-40 {\n opacity: 0.4;\n}\n.fr-generator-container .o-30 {\n opacity: 0.3;\n}\n.fr-generator-container .o-20 {\n opacity: 0.2;\n}\n.fr-generator-container .o-10 {\n opacity: 0.1;\n}\n.fr-generator-container .o-05 {\n opacity: 0.05;\n}\n.fr-generator-container .o-025 {\n opacity: 0.025;\n}\n.fr-generator-container .o-0 {\n opacity: 0;\n}\n.fr-generator-container .pa0 {\n padding: 0;\n}\n.fr-generator-container .pa1 {\n padding: 0.25rem;\n}\n.fr-generator-container .pa2 {\n padding: 0.5rem;\n}\n.fr-generator-container .pa3 {\n padding: 1rem;\n}\n.fr-generator-container .pa4 {\n padding: 2rem;\n}\n.fr-generator-container .pa5 {\n padding: 4rem;\n}\n.fr-generator-container .pa6 {\n padding: 8rem;\n}\n.fr-generator-container .pa7 {\n padding: 16rem;\n}\n.fr-generator-container .pl0 {\n padding-left: 0;\n}\n.fr-generator-container .pl1 {\n padding-left: 0.25rem;\n}\n.fr-generator-container .pl2 {\n padding-left: 0.5rem;\n}\n.fr-generator-container .pl3 {\n padding-left: 1rem;\n}\n.fr-generator-container .pl4 {\n padding-left: 2rem;\n}\n.fr-generator-container .pl5 {\n padding-left: 4rem;\n}\n.fr-generator-container .pl6 {\n padding-left: 8rem;\n}\n.fr-generator-container .pl7 {\n padding-left: 16rem;\n}\n.fr-generator-container .pr0 {\n padding-right: 0;\n}\n.fr-generator-container .pr1 {\n padding-right: 0.25rem;\n}\n.fr-generator-container .pr2 {\n padding-right: 0.5rem;\n}\n.fr-generator-container .pr3 {\n padding-right: 1rem;\n}\n.fr-generator-container .pr4 {\n padding-right: 2rem;\n}\n.fr-generator-container .pr5 {\n padding-right: 4rem;\n}\n.fr-generator-container .pr6 {\n padding-right: 8rem;\n}\n.fr-generator-container .pr7 {\n padding-right: 16rem;\n}\n.fr-generator-container .pb0 {\n padding-bottom: 0;\n}\n.fr-generator-container .pb1 {\n padding-bottom: 0.25rem;\n}\n.fr-generator-container .pb2 {\n padding-bottom: 0.5rem;\n}\n.fr-generator-container .pb3 {\n padding-bottom: 1rem;\n}\n.fr-generator-container .pb4 {\n padding-bottom: 2rem;\n}\n.fr-generator-container .pb5 {\n padding-bottom: 4rem;\n}\n.fr-generator-container .pb6 {\n padding-bottom: 8rem;\n}\n.fr-generator-container .pb7 {\n padding-bottom: 16rem;\n}\n.fr-generator-container .pt0 {\n padding-top: 0;\n}\n.fr-generator-container .pt1 {\n padding-top: 0.25rem;\n}\n.fr-generator-container .pt2 {\n padding-top: 0.5rem;\n}\n.fr-generator-container .pt3 {\n padding-top: 1rem;\n}\n.fr-generator-container .pt4 {\n padding-top: 2rem;\n}\n.fr-generator-container .pt5 {\n padding-top: 4rem;\n}\n.fr-generator-container .pt6 {\n padding-top: 8rem;\n}\n.fr-generator-container .pt7 {\n padding-top: 16rem;\n}\n.fr-generator-container .pv0 {\n padding-top: 0;\n padding-bottom: 0;\n}\n.fr-generator-container .pv1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.fr-generator-container .pv2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.fr-generator-container .pv3 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.fr-generator-container .pv4 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.fr-generator-container .pv5 {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n.fr-generator-container .pv6 {\n padding-top: 8rem;\n padding-bottom: 8rem;\n}\n.fr-generator-container .pv7 {\n padding-top: 16rem;\n padding-bottom: 16rem;\n}\n.fr-generator-container .ph0 {\n padding-left: 0;\n padding-right: 0;\n}\n.fr-generator-container .ph1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.fr-generator-container .ph2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.fr-generator-container .ph3 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.fr-generator-container .ph4 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.fr-generator-container .ph5 {\n padding-left: 4rem;\n padding-right: 4rem;\n}\n.fr-generator-container .ph6 {\n padding-left: 8rem;\n padding-right: 8rem;\n}\n.fr-generator-container .ph7 {\n padding-left: 16rem;\n padding-right: 16rem;\n}\n.fr-generator-container .ma1 {\n margin: 0.25rem;\n}\n.fr-generator-container .ma2 {\n margin: 0.5rem;\n}\n.fr-generator-container .ma3 {\n margin: 1rem;\n}\n.fr-generator-container .ma4 {\n margin: 2rem;\n}\n.fr-generator-container .ma5 {\n margin: 4rem;\n}\n.fr-generator-container .ma6 {\n margin: 8rem;\n}\n.fr-generator-container .ma7 {\n margin: 16rem;\n}\n.fr-generator-container .ma0 {\n margin: 0;\n}\n.fr-generator-container .ml1 {\n margin-left: 0.25rem;\n}\n.fr-generator-container .ml2 {\n margin-left: 0.5rem;\n}\n.fr-generator-container .ml3 {\n margin-left: 1rem;\n}\n.fr-generator-container .ml4 {\n margin-left: 2rem;\n}\n.fr-generator-container .ml5 {\n margin-left: 4rem;\n}\n.fr-generator-container .ml6 {\n margin-left: 8rem;\n}\n.fr-generator-container .ml7 {\n margin-left: 16rem;\n}\n.fr-generator-container .ml0 {\n margin-left: 0;\n}\n.fr-generator-container .mr1 {\n margin-right: 0.25rem;\n}\n.fr-generator-container .mr2 {\n margin-right: 0.5rem;\n}\n.fr-generator-container .mr3 {\n margin-right: 1rem;\n}\n.fr-generator-container .mr4 {\n margin-right: 2rem;\n}\n.fr-generator-container .mr5 {\n margin-right: 4rem;\n}\n.fr-generator-container .mr6 {\n margin-right: 8rem;\n}\n.fr-generator-container .mr7 {\n margin-right: 16rem;\n}\n.fr-generator-container .mr0 {\n margin-right: 0;\n}\n.fr-generator-container .mb1 {\n margin-bottom: 0.25rem;\n}\n.fr-generator-container .mb2 {\n margin-bottom: 0.5rem;\n}\n.fr-generator-container .mb3 {\n margin-bottom: 1rem;\n}\n.fr-generator-container .mb4 {\n margin-bottom: 2rem;\n}\n.fr-generator-container .mb5 {\n margin-bottom: 4rem;\n}\n.fr-generator-container .mb6 {\n margin-bottom: 8rem;\n}\n.fr-generator-container .mb7 {\n margin-bottom: 16rem;\n}\n.fr-generator-container .mb0 {\n margin-bottom: 0;\n}\n.fr-generator-container .mt1 {\n margin-top: 0.25rem;\n}\n.fr-generator-container .mt2 {\n margin-top: 0.5rem;\n}\n.fr-generator-container .mt3 {\n margin-top: 1rem;\n}\n.fr-generator-container .mt4 {\n margin-top: 2rem;\n}\n.fr-generator-container .mt5 {\n margin-top: 4rem;\n}\n.fr-generator-container .mt6 {\n margin-top: 8rem;\n}\n.fr-generator-container .mt7 {\n margin-top: 16rem;\n}\n.fr-generator-container .mt0 {\n margin-top: 0;\n}\n.fr-generator-container .mv1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.fr-generator-container .mv2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.fr-generator-container .mv3 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.fr-generator-container .mv4 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n}\n.fr-generator-container .mv5 {\n margin-top: 4rem;\n margin-bottom: 4rem;\n}\n.fr-generator-container .mv6 {\n margin-top: 8rem;\n margin-bottom: 8rem;\n}\n.fr-generator-container .mv7 {\n margin-top: 16rem;\n margin-bottom: 16rem;\n}\n.fr-generator-container .mv0 {\n margin-top: 0;\n margin-bottom: 0;\n}\n.fr-generator-container .mh1 {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n.fr-generator-container .mh2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.fr-generator-container .mh3 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.fr-generator-container .mh4 {\n margin-left: 2rem;\n margin-right: 2rem;\n}\n.fr-generator-container .mh5 {\n margin-left: 4rem;\n margin-right: 4rem;\n}\n.fr-generator-container .mh6 {\n margin-left: 8rem;\n margin-right: 8rem;\n}\n.fr-generator-container .mh7 {\n margin-left: 16rem;\n margin-right: 16rem;\n}\n.fr-generator-container .mh0 {\n margin-left: 0;\n margin-right: 0;\n}\n.fr-generator-container .red {\n color: red;\n}\n.fr-generator-container .blue {\n color: #357edd;\n}\n.fr-generator-container .f7 {\n font-size: 0.75rem;\n}\n.fr-generator-container .debug * {\n outline: 1px solid gold;\n}\n.fr-generator-container .debug-white * {\n outline: 1px solid white;\n}\n.fr-generator-container .debug-black * {\n outline: 1px solid black;\n}\n.fr-generator-container .debug-grid {\n background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII=) repeat top left;\n}\n.fr-generator-container .truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.fr-generator-container .bg-white {\n background-color: #fff;\n}\n.fr-generator-container .pointer:hover {\n cursor: pointer;\n}\n.fr-generator-container .link {\n color: #1890ff;\n font-size: 14px;\n}\n.fr-generator-container .link:hover {\n color: #40a9ff;\n font-size: 14px;\n}\n@media screen and (min-width: 60em) {\n .fr-generator-container .w5-l {\n width: 16rem;\n }\n}\n/*\n 用于原有样式的覆盖\n */\n.fr-generator-container {\n display: flex;\n overflow: hidden;\n height: 100%;\n min-height: 30vh;\n position: relative;\n}\n.fr-generator-container .mid-layout {\n padding: 0 8px;\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n flex-shrink: 1;\n /* height: 100%; */\n overflow: hidden;\n border-left: 1px solid #e0e0e0;\n border-right: 1px solid #e0e0e0;\n}\n.fr-generator-container .flex-center {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.fr-generator-container .dnd-container {\n flex-grow: 1;\n overflow-y: auto;\n}\n.fr-generator-container .ant-tabs.ant-tabs-top {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.fr-generator-container .ant-tabs-content-holder {\n flex-grow: 1;\n}\n.fr-generator-container .ant-tabs-content.ant-tabs-content-top {\n height: 100%;\n}\n.fr-generator-container .ant-tabs-tabpane.ant-tabs-tabpane-active {\n height: 100%;\n overflow-y: auto;\n}\n.fr-generator-container .dnd-container.edit {\n /* Row */\n /* 自定义类 */\n /* 组件内部样式*/\n /* 其他样式 */\n}\n.fr-generator-container .dnd-container.edit .top-upper {\n top: -12px;\n}\n.fr-generator-container .dnd-container.edit .fr-set {\n padding: 12px 14px 12px 12px;\n margin-bottom: 12px;\n border-radius: 4px;\n}\n.fr-generator-container .dnd-container.edit .fr-field {\n margin-bottom: 24px;\n}\n.fr-generator-container .dnd-container.edit .fr-label {\n display: block;\n}\n.fr-generator-container .dnd-container.edit .fr-label-title {\n display: inline-flex;\n color: #333;\n font-size: 14px;\n min-height: 22px;\n /* \"\"的标签页占位 */\n line-height: 22px;\n}\n.fr-generator-container .dnd-container.edit .fr-label-required {\n margin: 1px 4px 0 0;\n color: #f5222d;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n}\n.fr-generator-container .dnd-container.edit .fr-label-title::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 10px 0 2px;\n}\n.fr-generator-container .dnd-container.edit .fr-label-title.no-colon::after {\n content: '';\n margin: 0;\n}\n.fr-generator-container .dnd-container.edit .fr-label-object .fr-label-title {\n font-size: 16px;\n color: #222;\n}\n.fr-generator-container .dnd-container.edit .fr-desc {\n margin-top: 3px;\n font-size: 12px;\n word-break: break-all;\n color: #888;\n}\n.fr-generator-container .dnd-container.edit .fr-validate {\n margin-left: 12px;\n font-size: 12px;\n word-break: break-all;\n color: #f5222d;\n}\n.fr-generator-container .dnd-container.edit .fr-validate-row {\n margin: 3px 0 0 0;\n}\n.fr-generator-container .dnd-container.edit .fr-label-row {\n text-align: right;\n flex-shrink: 0;\n}\n.fr-generator-container .dnd-container.edit .fr-field-row .fr-content {\n flex: 1;\n position: relative;\n}\n.fr-generator-container .dnd-container.edit .fr-field-row .fr-tooltip-icon {\n margin: 3px 2px 0 0;\n}\n.fr-generator-container .dnd-container.edit .hover-b--black-20:hover {\n border-color: rgba(0, 0, 0, 0.3);\n}\n.fr-generator-container .dnd-container.edit .pt44 {\n padding-top: 46px;\n}\n.fr-generator-container .dnd-container.edit .pv12 {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.fr-generator-container .dnd-container.edit .fr-color-picker {\n width: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n color: #666;\n}\n.fr-generator-container .dnd-container.edit .fr-color-picker .rc-color-picker-trigger {\n margin-right: 12px;\n height: 30px;\n width: 60px;\n border: 1px solid #e5e5e5;\n}\n.fr-generator-container .dnd-container.edit .fr-color-picker > p {\n margin: 0;\n font-size: 14px;\n line-height: 28px;\n}\n.fr-generator-container .dnd-container.edit .fr-color-picker .rc-color-picker-wrap {\n display: flex;\n}\n.fr-generator-container .dnd-container.edit .next-input,\n.fr-generator-container .dnd-container.edit .next-number-picker {\n width: 100%;\n}\n.fr-generator-container .dnd-container.edit .upload-img {\n max-width: 200px;\n max-height: 200px;\n margin-right: 24px;\n}\n.fr-generator-container .dnd-container.edit .fr-preview-image {\n width: 160px;\n}\n.fr-generator-container .dnd-container.edit .fr-preview {\n position: relative;\n cursor: pointer;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-mod,\n.fr-generator-container .dnd-container.edit .fr-upload-file {\n display: flex;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-mod {\n align-items: center;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-mod .fr-upload-preview {\n margin: 0 12px;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-file .ant-upload-list-item {\n margin: 5px 0 0 8px;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-file .ant-upload-list-item-name {\n margin-right: 6px;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-file .ant-upload-list-item-info {\n cursor: pointer;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-file .next-upload-list-text .next-upload-list-item-done,\n.fr-generator-container .dnd-container.edit .fr-upload-file .next-upload-list-text .next-upload-list-item .next-icon {\n height: 28px;\n line-height: 28px;\n margin-left: 12px;\n}\n.fr-generator-container .dnd-container.edit .fr-upload-file .next-upload-list-item-name-wrap {\n margin-top: -4px;\n}\n.fr-generator-container .dnd-container.edit .fr-sort-help-class {\n background: #fff;\n}\n.fr-generator-container .dnd-container.edit .fold-icon.fold-icon-active {\n transform: rotate(0deg);\n}\n.fr-generator-container .dnd-container.edit .fold-icon {\n transform: rotate(-90deg);\n transition: transform 0.24s;\n cursor: pointer;\n position: relative;\n}\n.fr-generator-container .dnd-container.edit .fold-icon::after {\n content: '';\n position: absolute;\n top: -20px;\n right: -10px;\n bottom: -5px;\n left: -20px;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle {\n cursor: pointer;\n position: relative;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle:hover .fr-tooltip-container {\n opacity: 1;\n visibility: visible;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-icon {\n height: 14px;\n width: 14px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEnUlEQVR42u1bS0iUURT+zd4Y9KDosSihNhYUaBE9YKpFDKKOOmOLahtJ2SoxA2fUdUoQJK5qU0ib6LlxUYJpkY0LE3tQZkU7y7A0e1jnA4Of8pz//5373/+BF44Oc+/c853v3nOf5xpup0QiMZ9kD8mxeDzeTHKXPveSvKXP3+j/GP1/h++QhzIoW1ZWthu/NYKYysvLN5EhKZJ7ZMQEye8ZyjjJfZIk6vS10YWFhcvI4FoC2wfwLkkf6aiBLt8YHovFNhCoFnRlgNQkY9BJbrLeS9uzqFueYAzXJV9ITgKLVsvBPCnuAAifSIe23kBd7zApHHUI8D3JBfptFUlialbYSJIDweep7+Iog7L4jUMdn4HNzeksmxRcdgColyRZWlq6NQOd21AH6rKrFxiBVanxxcXFS6jSdpsAHtLYUODC1FqAum0S0Q7Mqlp+ESlO2zD8DUmJBhcsgS4bJDwBdhUKb1ko+kll6qLR6AJDU4IuuAZ0W2C7kWnrJy1a/QONvjsNjxLp32VjsEzO1OcOkoJJoeJuGuBWGB4nYCCcD4RGmiSJOm35PIup7kokEplr+CQBCzAJeEeJqC22V3jE2IBQWVd+fv48w2cJmAhbp4C7H7bZaf1KoZJBbET8vCEDRgF/pdXGZim1/ifGl344WtTIJJ//B+ggts+K6t4BrAwBH2GjNKo2CuxVqzJeGLDqFemoFnQ0sq0vDHyP4D+KwI1ILqZqpyqsGmFjznStX8tNIzQlbjYUJasVnCo9wAzsjE1npyPgFQPqJvKDRYC8ioWt/200BFD7FRMwIu0nFBNwgNMFm80Fz0mAFIOqVz4IyoS/ZvQ1mQv1MYBqkO8GCSDXTDRjvAoCznAHrH/X0qu4FqE99Voj2AkErOPsg+3w/wqmwDMjHAkkPGdsPITMBqb7t4SFANjCjTkgoI0ZJY+Hwnp5f9MGdtIMOxF35n1ZXDrG38fYmDa48zWcs4eFANxesUtv+jPMZC4PCwE4NWL0DRvcehkHjyEhACdGCxl9vwBwggEyxw0wXhCAOANG34TsAi4k37kA/RliMnND1ANyGX1DGAMe89Og+uSjaRDSAwKucgeIYSEAcQzc8T4ISDGZrSFygVaml6dAQILJfBEiAl4yy/0KZK6WtsMBJwD+v0bcDk/tlp4yveB0cAmQj8hhs7lQE1NoIAQEPGdsazZ3k+3SoahOAvQfisoDBeR2QAmArjvcsbi2i5FMQ+Ay0Jvn6GIE10VWV2MBIiALmKWrMfFylJsRgkIAsAp1NojX47hCZn74HdfjficAAzp3PY6rf9g4GyBhw3/6Axoi0yW48IDtcQwBRVIUOHaQfguSAiYpvB42Od1Cxiz8s5tkpdfGAwOwSFhhy0xXUnV+DpSEbmCwwFiXKcPXbYTKpnSHykIndFsYf01JsDRJTxCDpUGU7nB5SKcfwuWLiooWK38wQXLJwcOFtIoHE/Bh5v6SE2DMdvNN4BE3nszQ93szfTJDclTbU7lAP5pSGIxY5eWzOdL/lXrkKW6Fp7M3XPTi4SR0zz6dnX087fOEq2k8hTc/nydJm57Pj3v5fP4PSqRR6oYkTaUAAAAASUVORK5CYII=');\n background-size: cover;\n display: block;\n margin: 4px 0 0 4px;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-container {\n position: absolute;\n width: 160px;\n left: 50%;\n white-space: initial !important;\n bottom: 30px;\n text-align: center;\n background: #2b222a;\n padding: 4px;\n margin-left: -77px;\n border-radius: 4px;\n color: #efefef;\n font-size: 13px;\n cursor: auto;\n z-index: 99999;\n transition: all 0.5s ease;\n opacity: 0;\n visibility: hidden;\n word-wrap: break-word;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-triangle {\n position: absolute;\n left: 50%;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top: 5px solid #2b222a;\n transition: all 0.5s ease;\n content: ' ';\n font-size: 0;\n line-height: 0;\n margin-left: -5px;\n width: 0;\n bottom: -5px;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle::before,\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle::after {\n color: #efefef;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n text-align: center;\n}\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle:focus::before,\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle:focus::after,\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle:hover::before,\n.fr-generator-container .dnd-container.edit .fr-tooltip-toggle:hover::after {\n opacity: 1;\n transition: all 0.75s ease;\n}\n.fr-generator-container .dnd-container.edit .fr-slider {\n display: flex;\n width: 100%;\n align-items: center;\n}\n.fr-generator-container .dnd-container.edit .fr-map {\n display: flex;\n flex-wrap: wrap;\n}\n.frg-options-list .fr-list-1 .fr-field.fr-field-object {\n flex: 1;\n}\n.frg-options-list .fr-list-1 .fr-field.fr-field-inline > div:first-child {\n display: none;\n}\n.frg-options-list .frg-options-input:first-child {\n margin-right: 6px;\n}\n.frg-options-list .frg-options-input .fr-content.fr-content-inline {\n max-width: 96px;\n min-width: 96px;\n}\n";
3973
+ styleInject(css_248z$4);
3974
+
3975
+ var _excluded$1 = ["fixedName", "settingsWidgets", "onCanvasSelect", "locale"];
3976
+ var Generator = /*#__PURE__*/forwardRef(function (_ref, ref) {
3977
+ var fixedName = _ref.fixedName,
3978
+ settingsWidgets = _ref.settingsWidgets,
3979
+ onCanvasSelect = _ref.onCanvasSelect,
3980
+ _ref$locale = _ref.locale,
3981
+ locale = _ref$locale === void 0 ? 'cn' : _ref$locale,
3982
+ props = _objectWithoutProperties(_ref, _excluded$1);
3983
+ var _useTranslation = useTranslation(),
3984
+ i18n = _useTranslation.i18n;
3985
+ useEffect(function () {
3986
+ i18n.changeLanguage(locale);
3987
+ }, [locale]);
3988
+ return /*#__PURE__*/React.createElement(Provider$1, _extends({
3989
+ ref: ref
3990
+ }, props), /*#__PURE__*/React.createElement("div", {
3991
+ className: "fr-generator-container"
3992
+ }, /*#__PURE__*/React.createElement(Sidebar, {
3993
+ fixedName: fixedName
3994
+ }), /*#__PURE__*/React.createElement(Canvas, {
3995
+ onSelect: onCanvasSelect
3996
+ }), /*#__PURE__*/React.createElement(Settings, {
3997
+ widgets: settingsWidgets
3998
+ })));
3999
+ });
4000
+ Generator.Provider = Provider$1;
4001
+ Generator.Sidebar = Sidebar;
4002
+ Generator.Canvas = Canvas;
4003
+ Generator.Settings = Settings;
4004
+
4005
+ export default Generator;
4006
+ export { defaultCommonSettings, defaultGlobalSettings, defaultSettings, deserialize, fromSetting, serialize, serializeToDraft, serializeUtil, toSetting };