yy-forms 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.fatherrc.js +37 -0
  2. package/CHANGELOG.md +254 -0
  3. package/LICENSE +21 -0
  4. package/README.md +99 -0
  5. package/dist/index.d.ts +145 -0
  6. package/dist/index.esm.js +4006 -0
  7. package/dist/index.js +4041 -0
  8. package/es/Provider.js +248 -0
  9. package/es/index.d.ts +145 -0
  10. package/es/index.js +44 -0
  11. package/es/settings/index.js +975 -0
  12. package/es/styles/atom.less +1134 -0
  13. package/es/styles/index.less +358 -0
  14. package/es/transformer/form-render.js +75 -0
  15. package/es/utils/context.js +3 -0
  16. package/es/utils/hooks.js +48 -0
  17. package/es/utils/index.js +706 -0
  18. package/es/utils/mapping.js +31 -0
  19. package/es/utils/serialize.js +276 -0
  20. package/es/widgets/htmlInput.js +20 -0
  21. package/es/widgets/idInput.js +23 -0
  22. package/es/widgets/index.js +5 -0
  23. package/es/widgets/jsonInput.js +24 -0
  24. package/es/widgets/list.js +24 -0
  25. package/es/widgets/percentSlider.js +89 -0
  26. package/package.json +53 -0
  27. package/src/Provider.jsx +239 -0
  28. package/src/components/Canvas/core/RenderChildren.jsx +18 -0
  29. package/src/components/Canvas/core/RenderField.jsx +129 -0
  30. package/src/components/Canvas/core/Wrapper.jsx +298 -0
  31. package/src/components/Canvas/core/Wrapper.less +57 -0
  32. package/src/components/Canvas/core/index.jsx +171 -0
  33. package/src/components/Canvas/index.jsx +178 -0
  34. package/src/components/Settings/GlobalSettings.jsx +48 -0
  35. package/src/components/Settings/ItemSettings.jsx +143 -0
  36. package/src/components/Settings/index.jsx +75 -0
  37. package/src/components/Settings/index.less +25 -0
  38. package/src/components/Sidebar/Element.jsx +80 -0
  39. package/src/components/Sidebar/Element.less +18 -0
  40. package/src/components/Sidebar/index.jsx +47 -0
  41. package/src/components/Sidebar/index.less +23 -0
  42. package/src/i18next/index.ts +14 -0
  43. package/src/i18next/locales/enUS.json +60 -0
  44. package/src/i18next/locales/resources.ts +7 -0
  45. package/src/i18next/locales/zhCN.json +3 -0
  46. package/src/index.d.ts +145 -0
  47. package/src/index.js +45 -0
  48. package/src/settings/index.js +1058 -0
  49. package/src/styles/atom.less +1134 -0
  50. package/src/styles/index.less +358 -0
  51. package/src/transformer/form-render.js +65 -0
  52. package/src/utils/context.js +4 -0
  53. package/src/utils/hooks.js +35 -0
  54. package/src/utils/index.js +678 -0
  55. package/src/utils/mapping.js +29 -0
  56. package/src/utils/serialize.js +368 -0
  57. package/src/widgets/htmlInput.jsx +24 -0
  58. package/src/widgets/idInput.jsx +27 -0
  59. package/src/widgets/index.js +6 -0
  60. package/src/widgets/jsonInput.jsx +29 -0
  61. package/src/widgets/list.jsx +28 -0
  62. package/src/widgets/percentSlider.jsx +74 -0
package/es/Provider.js ADDED
@@ -0,0 +1,248 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); 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; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
13
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
14
+ import React from "react";
15
+ import { ConfigProvider } from 'antd';
16
+ import zhCN from 'antd/lib/locale/zh_CN';
17
+ import copyTOClipboard from 'copy-text-to-clipboard';
18
+ import { mapping as defaultMapping, widgets as defaultWidgets } from 'form-render';
19
+ import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
20
+ import { DndProvider } from 'react-dnd';
21
+ import { HTML5Backend } from 'react-dnd-html5-backend';
22
+ import { fromSetting, toSetting } from './transformer/form-render';
23
+ import { combineSchema, dataToFlatten, defaultGetId, flattenSchema, flattenToData, idToSchema, newSchemaToOld, schemaToState } from './utils';
24
+ import { Ctx, StoreCtx } from './utils/context';
25
+ import { useSet } from './utils/hooks';
26
+ import { serializeToDraft } from './utils/serialize';
27
+ import list from './widgets/list';
28
+ var DEFAULT_SCHEMA = {
29
+ type: 'object',
30
+ properties: {}
31
+ };
32
+
33
+ // TODO: formData 不存在的时候会报错:can't find # of undefined
34
+ function Provider(props, ref) {
35
+ var defaultValue = props.defaultValue,
36
+ canDrag = props.canDrag,
37
+ canDelete = props.canDelete,
38
+ submit = props.submit,
39
+ _transformer = props.transformer,
40
+ extraButtons = props.extraButtons,
41
+ controlButtons = props.controlButtons,
42
+ _preview = props.preview,
43
+ hideId = props.hideId,
44
+ _props$getId = props.getId,
45
+ getId = _props$getId === void 0 ? defaultGetId : _props$getId,
46
+ settings = props.settings,
47
+ commonSettings = props.commonSettings,
48
+ globalSettings = props.globalSettings,
49
+ _props$widgets = props.widgets,
50
+ widgets = _props$widgets === void 0 ? {} : _props$widgets,
51
+ _props$mapping = props.mapping,
52
+ mapping = _props$mapping === void 0 ? {} : _props$mapping,
53
+ _props$methods = props.methods,
54
+ methods = _props$methods === void 0 ? {} : _props$methods,
55
+ _props$configProvider = props.configProvider,
56
+ configProvider = _props$configProvider === void 0 ? {} : _props$configProvider,
57
+ _props$validation = props.validation,
58
+ validation = _props$validation === void 0 ? true : _props$validation,
59
+ children = props.children,
60
+ fieldRender = props.fieldRender,
61
+ fieldWrapperRender = props.fieldWrapperRender,
62
+ elementRender = props.elementRender,
63
+ prefixCls = props.prefixCls;
64
+ var transformer = _objectSpread({
65
+ from: function from(schema) {
66
+ return schema;
67
+ },
68
+ to: function to(schema) {
69
+ return schema;
70
+ },
71
+ fromSetting: fromSetting,
72
+ toSetting: toSetting
73
+ }, _transformer);
74
+ var frwRef = ref || useRef();
75
+ var _useSet = useSet({
76
+ formData: {},
77
+ frProps: {},
78
+ // form-render 的全局 props 等
79
+ isNewVersion: true,
80
+ // 用schema字段,还是用propsSchema字段,这是一个问题
81
+ preview: false,
82
+ // preview = false 是编辑模式
83
+ schema: {},
84
+ selected: undefined,
85
+ // 被选中的$id, 如果object/array的内部,以首字母0标识
86
+ settingsForm: null
87
+ }),
88
+ _useSet2 = _slicedToArray(_useSet, 2),
89
+ state = _useSet2[0],
90
+ setState = _useSet2[1];
91
+ var _useState = useState([]),
92
+ _useState2 = _slicedToArray(_useState, 2),
93
+ errorFields = _useState2[0],
94
+ setErrorFields = _useState2[1];
95
+
96
+ // 收口点 propsSchema 到 schema 的转换 (一共3处,其他两个是 importSchema 和 setValue,在 FRWrapper 文件)
97
+ useEffect(function () {
98
+ var schema = defaultValue ? transformer.from(defaultValue) : DEFAULT_SCHEMA;
99
+ if (schema) setState(schemaToState(schema));
100
+ }, [defaultValue]);
101
+ var formData = state.formData,
102
+ frProps = state.frProps,
103
+ isNewVersion = state.isNewVersion,
104
+ preview = state.preview,
105
+ schema = state.schema,
106
+ selected = state.selected;
107
+ var onChange = function onChange(data) {
108
+ setState({
109
+ formData: data
110
+ });
111
+ props.onChange && props.onChange(data);
112
+ };
113
+ var onSchemaChange = function onSchemaChange(newSchema) {
114
+ setState({
115
+ schema: newSchema
116
+ });
117
+ if (props.onSchemaChange) {
118
+ setTimeout(function () {
119
+ if (!frwRef.current) return;
120
+ var pureSchema = frwRef.current.getValue();
121
+ props.onSchemaChange(pureSchema);
122
+ }, 0);
123
+ }
124
+ };
125
+ var _mapping = _objectSpread(_objectSpread({}, defaultMapping), mapping);
126
+ var _widgets = _objectSpread(_objectSpread(_objectSpread({}, defaultWidgets), widgets), {}, {
127
+ list: list
128
+ });
129
+ var rootState = {
130
+ preview: _preview !== null && _preview !== void 0 ? _preview : preview,
131
+ mapping: _mapping,
132
+ widgets: _widgets,
133
+ methods: methods,
134
+ selected: selected
135
+ };
136
+ var userProps = {
137
+ canDrag: canDrag,
138
+ canDelete: canDelete,
139
+ submit: submit,
140
+ transformer: transformer,
141
+ isNewVersion: isNewVersion,
142
+ extraButtons: extraButtons,
143
+ controlButtons: controlButtons,
144
+ hideId: hideId,
145
+ getId: getId,
146
+ validation: validation,
147
+ settings: settings,
148
+ commonSettings: commonSettings,
149
+ globalSettings: globalSettings
150
+ };
151
+ var _schema = {};
152
+ if (schema) {
153
+ _schema = combineSchema(_objectSpread(_objectSpread({}, schema), frProps)); // TODO: 要不要判断是否都是object
154
+ }
155
+ var flatten = flattenSchema(_schema);
156
+ var flattenWithData = transformer.from(dataToFlatten(flatten, formData));
157
+ var onFlattenChange = function onFlattenChange(newFlatten) {
158
+ var changeSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'schema';
159
+ var newSchema = idToSchema(newFlatten);
160
+ var newData = flattenToData(newFlatten);
161
+ // 判断只有schema变化时才调用,一般需求的用户不需要
162
+ if (changeSource === 'schema') {
163
+ onSchemaChange(newSchema);
164
+ }
165
+ // schema 变化大都会触发 data 变化
166
+ onChange(newData);
167
+ };
168
+ var onItemChange = function onItemChange(key, value, changeSource) {
169
+ flattenWithData[key] = value;
170
+ onFlattenChange(flattenWithData, changeSource);
171
+ };
172
+ var displaySchema = {};
173
+ var displaySchemaString = '';
174
+ try {
175
+ var _schema2 = _objectSpread(_objectSpread({}, idToSchema(flattenWithData, '#', true)), frProps);
176
+ displaySchema = transformer.to(_schema2);
177
+ if (!isNewVersion) {
178
+ displaySchema = newSchemaToOld(displaySchema);
179
+ }
180
+ // displaySchemaString = JSON.stringify(displaySchema, null, 2);
181
+ // 支持直接保存函数之后(解决validtor不能正常保存的问题),这里因为导入导出的问题,序列化也用内置的api序列化
182
+ displaySchemaString = serializeToDraft(displaySchema);
183
+ } catch (error) {}
184
+ var getValue = function getValue() {
185
+ return displaySchema;
186
+ };
187
+ var setValue = function setValue(value) {
188
+ try {
189
+ setState(function (state) {
190
+ return _objectSpread(_objectSpread({}, state), {}, {
191
+ selected: undefined
192
+ }, schemaToState(transformer.from(value)));
193
+ });
194
+ } catch (error) {
195
+ console.error(error);
196
+ }
197
+ };
198
+ var copyValue = function copyValue() {
199
+ copyTOClipboard(displaySchemaString);
200
+ };
201
+ var getErrorFields = function getErrorFields() {
202
+ return errorFields;
203
+ };
204
+ var getSettingsForm = function getSettingsForm() {
205
+ return state.settingsForm;
206
+ };
207
+ useImperativeHandle(frwRef, function () {
208
+ return {
209
+ getValue: getValue,
210
+ setValue: setValue,
211
+ copyValue: copyValue,
212
+ getErrorFields: getErrorFields,
213
+ getSettingsForm: getSettingsForm
214
+ };
215
+ });
216
+
217
+ // TODO: flatten是频繁在变的,应该和其他两个函数分开
218
+ var store = _objectSpread({
219
+ flatten: flattenWithData,
220
+ // schema + formData = flattenWithData
221
+ onFlattenChange: onFlattenChange,
222
+ // onChange + onSchemaChange = onFlattenChange
223
+ onItemChange: onItemChange,
224
+ // onFlattenChange 里只改一个item的flatten,使用这个方法
225
+ onSchemaChange: onSchemaChange,
226
+ onChange: onChange,
227
+ errorFields: errorFields,
228
+ onItemErrorChange: setErrorFields,
229
+ userProps: userProps,
230
+ frProps: frProps,
231
+ displaySchema: displaySchema,
232
+ displaySchemaString: displaySchemaString,
233
+ fieldRender: fieldRender,
234
+ fieldWrapperRender: fieldWrapperRender,
235
+ elementRender: elementRender
236
+ }, rootState);
237
+ return /*#__PURE__*/React.createElement(DndProvider, {
238
+ backend: HTML5Backend,
239
+ context: window
240
+ }, /*#__PURE__*/React.createElement(ConfigProvider, _extends({
241
+ locale: zhCN
242
+ }, configProvider), /*#__PURE__*/React.createElement(Ctx.Provider, {
243
+ value: setState
244
+ }, /*#__PURE__*/React.createElement(StoreCtx.Provider, {
245
+ value: store
246
+ }, children))));
247
+ }
248
+ export default /*#__PURE__*/forwardRef(Provider);
package/es/index.d.ts ADDED
@@ -0,0 +1,145 @@
1
+ import { FC, ForwardRefExoticComponent, ReactNode, RefAttributes } from 'react';
2
+
3
+ export interface Transformer {
4
+ /** 正向的转换函数 */
5
+ from?: (schema: any) => any;
6
+ /** 反向的转换函数 */
7
+ to?: (schema: any) => any;
8
+ /** 反向的转换函数 */
9
+ fromSetting?: (schema: any) => any;
10
+ /** 反向的转换函数 */
11
+ toSetting?: (schema: any) => any;
12
+ }
13
+
14
+ export interface ExtraButton {
15
+ /** 按钮文案 */
16
+ text: string;
17
+ /** 点击回调 */
18
+ onClick?: (event: any) => void;
19
+ [key: string]: any;
20
+ }
21
+
22
+ export interface ControlButton {
23
+ /** 按钮文案 */
24
+ text?: string;
25
+ /** 点击回调 */
26
+ onClick?: (event: any, schema: any) => void;
27
+ }
28
+
29
+ export interface SettingWidget {
30
+ /** 按钮生成的 schema 的 key 值 */
31
+ name: string;
32
+ /** 在左侧栏按钮展示文案 */
33
+ text: string;
34
+ /** 在左侧栏按钮展示图标 */
35
+ icon?: string | ReactNode;
36
+ /** 如果是基本组件,这个字段注明它对应的 widgets */
37
+ widget?: string;
38
+ /** 组件对应的 schema 片段 */
39
+ schema?: any;
40
+ /** 组件的配置信息,使用 form-render 的 schema 来描述 */
41
+ setting?: any;
42
+ }
43
+
44
+ export interface Setting {
45
+ /** 最外层的分组名称 */
46
+ title: string;
47
+ /** 每个组件的配置,在左侧栏是一个按钮 */
48
+ widgets: SettingWidget[];
49
+ show?: boolean;
50
+ useCommon?: boolean;
51
+ }
52
+
53
+ export interface FRGeneratorProps {
54
+ getId?: (name: string) => string;
55
+ /** 国际化配置 */
56
+ locale?: 'cn' | 'en';
57
+ /** 隐藏组件 ID */
58
+ hideId?: boolean;
59
+ /** 固定 id */
60
+ fixedName?: boolean;
61
+ /** 组件删除控制 */
62
+ canDelete?: boolean | Function;
63
+ /** 默认一进入编辑器展示的表单对应的 schema */
64
+ defaultValue?: any;
65
+ /** 自定义 schema 到 form-render 的 schema 的双向转换函数 */
66
+ transformer?: Transformer;
67
+ /** 编辑区顶部的自定义按钮 */
68
+ extraButtons?: (ExtraButton | boolean | string)[];
69
+ /** 选中项操作按钮 */
70
+ controlButtons?: (ControlButton | boolean | Function)[];
71
+ /** 预览态控制 */
72
+ preview?: boolean;
73
+ /** 左右侧栏配置 */
74
+ settings?: Setting[];
75
+ /** 通用配置 */
76
+ commonSettings?: any;
77
+ /** 全局配置 */
78
+ globalSettings?: any;
79
+ /** 自定义组件 */
80
+ widgets?: any;
81
+ /** 配置栏自定义组件 */
82
+ settingsWidgets?: any;
83
+ /** 组件和 schema 的映射规则 */
84
+ mapping?: any;
85
+ /** 配置表单校验 */
86
+ validation?: boolean;
87
+ fieldRender?: (
88
+ schema?: any,
89
+ widgetProps?: any,
90
+ children?: ReactNode,
91
+ originNode?: ReactNode
92
+ ) => ReactNode;
93
+ fieldWrapperRender?: (
94
+ schema?: any,
95
+ isSelected?: boolean,
96
+ children?: ReactNode,
97
+ originNode?: ReactNode
98
+ ) => ReactNode;
99
+ elementRender?: (
100
+ schema?: any,
101
+ widgetProps?: SettingWidget,
102
+ originNode?: ReactNode
103
+ ) => ReactNode;
104
+ /** 表单 data 变化回调 */
105
+ onChange?: (data: any) => void;
106
+ /** 表单 schema 变化回调 */
107
+ onSchemaChange?: (schema: any) => void;
108
+ /** 画布组件选择回调 */
109
+ onCanvasSelect?: (schema: any) => void;
110
+ }
111
+
112
+ export interface SettingsProps {
113
+ /** 自定义组件 */
114
+ widgets?: any;
115
+ }
116
+ export interface CanvasProps {
117
+ /** 画布组件选择回调 */
118
+ onCanvasSelect?: (schema: any) => void;
119
+ }
120
+
121
+ export interface SidebarProps {
122
+ /** 固定 id */
123
+ fixedName?: boolean;
124
+ }
125
+
126
+ export interface Generator
127
+ extends ForwardRefExoticComponent<
128
+ FRGeneratorProps & RefAttributes<HTMLElement>
129
+ > {
130
+ Provider: FC<FRGeneratorProps>;
131
+ Settings: FC<SettingsProps>;
132
+ Canvas: FC<CanvasProps>;
133
+ Sidebar: FC<SidebarProps>;
134
+ }
135
+
136
+ declare const FRGenerator: Generator;
137
+ declare const defaultSettings: Setting[];
138
+ declare const defaultCommonSettings: any;
139
+ declare const defaultGlobalSettings: any;
140
+ declare const fromSetting: (schema: any) => any;
141
+ declare const toSetting: (schema: any) => any;
142
+
143
+ export { defaultSettings, defaultCommonSettings, defaultGlobalSettings };
144
+ export { fromSetting, toSetting };
145
+ export default FRGenerator;
package/es/index.js ADDED
@@ -0,0 +1,44 @@
1
+ var _excluded = ["fixedName", "settingsWidgets", "onCanvasSelect", "locale"];
2
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
5
+ import React, { useEffect, forwardRef } from 'react';
6
+ import { useTranslation } from 'react-i18next';
7
+ import Canvas from './components/Canvas';
8
+ import Settings from './components/Settings';
9
+ import Sidebar from './components/Sidebar';
10
+ import Provider from './Provider';
11
+ import './i18next';
12
+ import './styles/index.less';
13
+ var Generator = /*#__PURE__*/forwardRef(function (_ref, ref) {
14
+ var fixedName = _ref.fixedName,
15
+ settingsWidgets = _ref.settingsWidgets,
16
+ onCanvasSelect = _ref.onCanvasSelect,
17
+ _ref$locale = _ref.locale,
18
+ locale = _ref$locale === void 0 ? 'cn' : _ref$locale,
19
+ props = _objectWithoutProperties(_ref, _excluded);
20
+ var _useTranslation = useTranslation(),
21
+ i18n = _useTranslation.i18n;
22
+ useEffect(function () {
23
+ i18n.changeLanguage(locale);
24
+ }, [locale]);
25
+ return /*#__PURE__*/React.createElement(Provider, _extends({
26
+ ref: ref
27
+ }, props), /*#__PURE__*/React.createElement("div", {
28
+ className: "fr-generator-container"
29
+ }, /*#__PURE__*/React.createElement(Sidebar, {
30
+ fixedName: fixedName
31
+ }), /*#__PURE__*/React.createElement(Canvas, {
32
+ onSelect: onCanvasSelect
33
+ }), /*#__PURE__*/React.createElement(Settings, {
34
+ widgets: settingsWidgets
35
+ })));
36
+ });
37
+ Generator.Provider = Provider;
38
+ Generator.Sidebar = Sidebar;
39
+ Generator.Canvas = Canvas;
40
+ Generator.Settings = Settings;
41
+ export { defaultCommonSettings, defaultGlobalSettings, defaultSettings } from './settings';
42
+ export { fromSetting, toSetting } from './transformer/form-render';
43
+ export default Generator;
44
+ export * from './utils/serialize';