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.
- package/.fatherrc.js +37 -0
- package/CHANGELOG.md +254 -0
- package/LICENSE +21 -0
- package/README.md +99 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.esm.js +4006 -0
- package/dist/index.js +4041 -0
- package/es/Provider.js +248 -0
- package/es/index.d.ts +145 -0
- package/es/index.js +44 -0
- package/es/settings/index.js +975 -0
- package/es/styles/atom.less +1134 -0
- package/es/styles/index.less +358 -0
- package/es/transformer/form-render.js +75 -0
- package/es/utils/context.js +3 -0
- package/es/utils/hooks.js +48 -0
- package/es/utils/index.js +706 -0
- package/es/utils/mapping.js +31 -0
- package/es/utils/serialize.js +276 -0
- package/es/widgets/htmlInput.js +20 -0
- package/es/widgets/idInput.js +23 -0
- package/es/widgets/index.js +5 -0
- package/es/widgets/jsonInput.js +24 -0
- package/es/widgets/list.js +24 -0
- package/es/widgets/percentSlider.js +89 -0
- package/package.json +53 -0
- package/src/Provider.jsx +239 -0
- package/src/components/Canvas/core/RenderChildren.jsx +18 -0
- package/src/components/Canvas/core/RenderField.jsx +129 -0
- package/src/components/Canvas/core/Wrapper.jsx +298 -0
- package/src/components/Canvas/core/Wrapper.less +57 -0
- package/src/components/Canvas/core/index.jsx +171 -0
- package/src/components/Canvas/index.jsx +178 -0
- package/src/components/Settings/GlobalSettings.jsx +48 -0
- package/src/components/Settings/ItemSettings.jsx +143 -0
- package/src/components/Settings/index.jsx +75 -0
- package/src/components/Settings/index.less +25 -0
- package/src/components/Sidebar/Element.jsx +80 -0
- package/src/components/Sidebar/Element.less +18 -0
- package/src/components/Sidebar/index.jsx +47 -0
- package/src/components/Sidebar/index.less +23 -0
- package/src/i18next/index.ts +14 -0
- package/src/i18next/locales/enUS.json +60 -0
- package/src/i18next/locales/resources.ts +7 -0
- package/src/i18next/locales/zhCN.json +3 -0
- package/src/index.d.ts +145 -0
- package/src/index.js +45 -0
- package/src/settings/index.js +1058 -0
- package/src/styles/atom.less +1134 -0
- package/src/styles/index.less +358 -0
- package/src/transformer/form-render.js +65 -0
- package/src/utils/context.js +4 -0
- package/src/utils/hooks.js +35 -0
- package/src/utils/index.js +678 -0
- package/src/utils/mapping.js +29 -0
- package/src/utils/serialize.js +368 -0
- package/src/widgets/htmlInput.jsx +24 -0
- package/src/widgets/idInput.jsx +27 -0
- package/src/widgets/index.js +6 -0
- package/src/widgets/jsonInput.jsx +29 -0
- package/src/widgets/list.jsx +28 -0
- 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 };
|