@micromag/editor 0.2.405 → 0.2.409

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 (4) hide show
  1. package/assets/css/styles.css +12 -10
  2. package/es/index.js +2446 -1254
  3. package/lib/index.js +2454 -1261
  4. package/package.json +10 -7
package/lib/index.js CHANGED
@@ -2,147 +2,58 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
5
6
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
6
- var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
7
- var React = require('react');
8
- var PropTypes = require('prop-types');
9
- var reactRouter = require('react-router');
10
- var reactRouterDom = require('react-router-dom');
11
- var reactIntl = require('react-intl');
7
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
8
+ var core = require('@micromag/core');
9
+ var components = require('@micromag/core/components');
12
10
  var contexts = require('@micromag/core/contexts');
11
+ var hooks = require('@micromag/core/hooks');
13
12
  var utils = require('@micromag/core/utils');
14
- var screens = require('@micromag/screens');
15
- var fields = require('@micromag/fields');
16
- var core = require('@micromag/core');
17
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
18
13
  var classNames = require('classnames');
19
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
20
- var hooks = require('@micromag/core/hooks');
21
- var components = require('@micromag/core/components');
14
+ var PropTypes = require('prop-types');
15
+ var React = require('react');
16
+ var reactIntl = require('react-intl');
17
+ var reactRouter = require('react-router');
18
+ var reactTransitionGroup = require('react-transition-group');
19
+ var uuid = require('uuid');
20
+ var isString = require('lodash/isString');
21
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
22
22
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
23
+ require('lodash/isArray');
24
+ require('lodash/get');
25
+ require('lodash/set');
23
26
  var reactFontawesome = require('@fortawesome/react-fontawesome');
24
27
  var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
25
- var isString = require('lodash/isString');
26
- var uuid = require('uuid');
28
+ var fields = require('@micromag/fields');
27
29
  var size = require('@folklore/size');
28
- var reactSortablejs = require('react-sortablejs');
30
+ var viewer = require('@micromag/viewer');
29
31
  var isFunction = require('lodash/isFunction');
32
+ var reactSortablejs = require('react-sortablejs');
33
+ var core$1 = require('@dnd-kit/core');
34
+ var sortable = require('@dnd-kit/sortable');
35
+ var reactDom = require('react-dom');
36
+ var _createForOfIteratorHelper = require('@babel/runtime/helpers/createForOfIteratorHelper');
37
+ var utilities = require('@dnd-kit/utilities');
30
38
  var orderBy = require('lodash/orderBy');
31
- var viewer = require('@micromag/viewer');
32
- var reactTransitionGroup = require('react-transition-group');
33
- require('lodash/isArray');
34
- require('lodash/get');
35
- require('lodash/set');
39
+ var screens = require('@micromag/screens');
40
+ var reactRouterDom = require('react-router-dom');
36
41
 
37
42
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
38
43
 
39
- var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
40
- var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
41
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
42
- var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
43
44
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
44
- var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
45
+ var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
45
46
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
46
- var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
47
+ var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
48
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
49
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
47
50
  var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
51
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
52
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
48
53
  var isFunction__default = /*#__PURE__*/_interopDefaultLegacy(isFunction);
54
+ var _createForOfIteratorHelper__default = /*#__PURE__*/_interopDefaultLegacy(_createForOfIteratorHelper);
49
55
  var orderBy__default = /*#__PURE__*/_interopDefaultLegacy(orderBy);
50
56
 
51
- var routes = PropTypes__default["default"].shape({
52
- home: PropTypes__default["default"].string.isRequired,
53
- screen: PropTypes__default["default"].string.isRequired,
54
- 'screen.field': PropTypes__default["default"].string.isRequired,
55
- 'screen.field.form': PropTypes__default["default"].string.isRequired
56
- });
57
-
58
- var styles$d = {"container":"micromag-editor-forms-settings-container","inner":"micromag-editor-forms-settings-inner"};
59
-
60
- var propTypes$j = {
61
- name: PropTypes__default["default"].string,
62
- field: core.PropTypes.formField.isRequired,
63
- value: core.PropTypes.component,
64
- className: PropTypes__default["default"].string,
65
- gotoFieldForm: PropTypes__default["default"].func.isRequired,
66
- closeFieldForm: PropTypes__default["default"].func.isRequired,
67
- onChange: PropTypes__default["default"].func
68
- };
69
- var defaultProps$j = {
70
- name: null,
71
- value: null,
72
- className: null,
73
- onChange: null
74
- };
75
-
76
- var SettingsForm = function SettingsForm(_ref) {
77
- var name = _ref.name,
78
- field = _ref.field,
79
- value = _ref.value,
80
- className = _ref.className,
81
- gotoFieldForm = _ref.gotoFieldForm,
82
- closeFieldForm = _ref.closeFieldForm,
83
- onChange = _ref.onChange;
84
- var _field$type = field.type,
85
- type = _field$type === void 0 ? null : _field$type;
86
- var fieldsManager = contexts.useFieldsManager();
87
-
88
- var _ref2 = type !== null ? fieldsManager.getDefinition(type) : field,
89
- _ref2$component = _ref2.component,
90
- fieldComponent = _ref2$component === void 0 ? null : _ref2$component,
91
- settings = _ref2.settings;
92
-
93
- var FieldComponent = contexts.useFieldComponent(fieldComponent);
94
- var FieldsComponent = contexts.useFieldComponent('fields');
95
- var SettingsComponent = FieldComponent !== null ? FieldComponent.settingsComponent || FieldsComponent : FieldsComponent;
96
- var onSettingsChange = React.useCallback(function (newSettingsValue) {
97
- var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), newSettingsValue);
98
-
99
- if (onChange !== null) {
100
- onChange(newValue);
101
- }
102
- }, [value, onChange]);
103
- return /*#__PURE__*/React__default["default"].createElement("div", {
104
- className: classNames__default["default"]([styles$d.container, _defineProperty__default["default"]({}, className, className)])
105
- }, /*#__PURE__*/React__default["default"].createElement("div", {
106
- className: styles$d.inner
107
- }, /*#__PURE__*/React__default["default"].createElement(SettingsComponent, {
108
- name: name,
109
- field: field,
110
- fields: settings,
111
- value: value,
112
- onChange: onSettingsChange,
113
- gotoFieldForm: gotoFieldForm,
114
- closeFieldForm: closeFieldForm
115
- })));
116
- };
117
-
118
- SettingsForm.propTypes = propTypes$j;
119
- SettingsForm.defaultProps = defaultProps$j;
120
-
121
- // eslint-disable-next-line import/prefer-default-export
122
-
123
- var FormsComponents = /*#__PURE__*/Object.freeze({
124
- __proto__: null,
125
- Settings: SettingsForm
126
- });
127
-
128
- /* eslint-disable react/jsx-props-no-spreading */
129
- var propTypes$i = {
130
- children: PropTypes__default["default"].node
131
- };
132
- var defaultProps$i = {
133
- children: null
134
- };
135
-
136
- var FormsProvider = function FormsProvider(props) {
137
- return /*#__PURE__*/React__default["default"].createElement(contexts.ComponentsProvider, Object.assign({
138
- namespace: contexts.FORMS_NAMESPACE,
139
- components: FormsComponents
140
- }, props));
141
- };
142
-
143
- FormsProvider.propTypes = propTypes$i;
144
- FormsProvider.defaultProps = defaultProps$i;
145
-
146
57
  var useRouteParams = function useRouteParams() {
147
58
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
148
59
  _ref$screenOnly = _ref.screenOnly,
@@ -179,25 +90,7 @@ var useRouteParams = function useRouteParams() {
179
90
  return routeParams;
180
91
  };
181
92
 
182
- var _excluded$8 = ["components"];
183
-
184
- var useThemeValue = function useThemeValue(value) {
185
- var isTheme = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
186
- var valueWithTheme = React.useMemo(function () {
187
- if (!isTheme) {
188
- return value;
189
- }
190
-
191
- var _ref = value || {};
192
- _ref.components;
193
- var themeValue = _objectWithoutProperties__default["default"](_ref, _excluded$8);
194
-
195
- return value !== null ? _objectSpread__default["default"]({
196
- theme: themeValue
197
- }, value) : value;
198
- }, [value, isTheme]);
199
- return valueWithTheme;
200
- };
93
+ var styles$f = {"container":"micromag-editor-container","left":"micromag-editor-left","right":"micromag-editor-right","center":"micromag-editor-center","fullscreen":"micromag-editor-fullscreen","preview":"micromag-editor-preview","inner":"micromag-editor-inner","visible":"micromag-editor-visible","screen-medium":"micromag-editor-screen-medium","top":"micromag-editor-top"};
201
94
 
202
95
  var createScreen = function createScreen(definition) {
203
96
  var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -231,614 +124,698 @@ var createScreen = function createScreen(definition) {
231
124
  });
232
125
  };
233
126
 
234
- var styles$c = {"container":"micromag-editor-buttons-screen-container","button":"micromag-editor-buttons-screen-button","border":"micromag-editor-buttons-screen-border","screen":"micromag-editor-buttons-screen-screen","inner":"micromag-editor-buttons-screen-inner","icon":"micromag-editor-buttons-screen-icon","label":"micromag-editor-buttons-screen-label","active":"micromag-editor-buttons-screen-active"};
127
+ var _excluded$b = ["components"];
235
128
 
236
- var propTypes$h = {
237
- active: PropTypes__default["default"].bool,
238
- id: PropTypes__default["default"].string,
239
- href: PropTypes__default["default"].string,
240
- label: core.PropTypes.label,
241
- icon: PropTypes__default["default"].node,
242
- title: PropTypes__default["default"].string,
243
- onClick: PropTypes__default["default"].func,
244
- children: PropTypes__default["default"].node,
245
- refButton: PropTypes__default["default"].shape({
246
- current: PropTypes__default["default"].any // eslint-disable-line
129
+ var deleteScreen = function deleteScreen(story, screenId) {
130
+ var _ref = story || {},
131
+ _ref$components = _ref.components,
132
+ components = _ref$components === void 0 ? [] : _ref$components,
133
+ currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$b);
247
134
 
248
- }),
249
- className: PropTypes__default["default"].string
250
- };
251
- var defaultProps$h = {
252
- active: false,
253
- id: null,
254
- href: null,
255
- label: null,
256
- icon: null,
257
- title: null,
258
- onClick: null,
259
- children: null,
260
- refButton: null,
261
- className: null
135
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
136
+ components: components.filter(function (_ref2) {
137
+ var id = _ref2.id;
138
+ return id !== screenId;
139
+ })
140
+ });
262
141
  };
263
142
 
264
- var ScreenButton = function ScreenButton(_ref) {
265
- var _ref2;
143
+ var _excluded$a = ["components"];
266
144
 
267
- var active = _ref.active,
268
- id = _ref.id,
269
- href = _ref.href,
270
- className = _ref.className,
271
- label = _ref.label,
272
- icon = _ref.icon,
273
- children = _ref.children,
274
- title = _ref.title,
275
- onClick = _ref.onClick,
276
- refButton = _ref.refButton;
277
- return /*#__PURE__*/React__default["default"].createElement("div", {
278
- className: classNames__default["default"]([styles$c.container, 'rounded', (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$c.active, active), _defineProperty__default["default"](_ref2, className, className !== null), _ref2)])
279
- }, /*#__PURE__*/React__default["default"].createElement("div", {
280
- className: styles$c.screen
281
- }, children !== null ? children : /*#__PURE__*/React__default["default"].createElement("div", {
282
- className: styles$c.inner
283
- }, icon !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
284
- className: styles$c.icon
285
- }, icon) : null, label !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
286
- className: styles$c.label
287
- }, label) : null)), /*#__PURE__*/React__default["default"].createElement(components.Button, {
288
- className: styles$c.button,
289
- withoutStyle: true,
290
- id: id,
291
- href: href,
292
- title: title,
293
- onClick: onClick,
294
- refButton: refButton
295
- }, /*#__PURE__*/React__default["default"].createElement("span", {
296
- className: classNames__default["default"]([styles$c.border, 'rounded'])
297
- })));
145
+ var duplicateScreen = function duplicateScreen(story, screenId) {
146
+ var _ref = story || {},
147
+ _ref$components = _ref.components,
148
+ components = _ref$components === void 0 ? [] : _ref$components,
149
+ currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$a);
150
+
151
+ var screen = components.find(function (it) {
152
+ return it.id === screenId;
153
+ }) || null;
154
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
155
+ components: screen !== null ? [].concat(_toConsumableArray__default["default"](components), [_objectSpread__default["default"](_objectSpread__default["default"]({}, screen), {}, {
156
+ id: uuid.v1()
157
+ })]) : components
158
+ });
298
159
  };
299
160
 
300
- ScreenButton.propTypes = propTypes$h;
301
- ScreenButton.defaultProps = defaultProps$h;
302
- var ScreenButton$1 = /*#__PURE__*/React__default["default"].forwardRef(function (props, ref) {
303
- return /*#__PURE__*/React__default["default"].createElement(ScreenButton, Object.assign({}, props, {
304
- refButton: ref
305
- }));
306
- });
161
+ var _excluded$9 = ["components"];
307
162
 
308
- var styles$b = {"container":"micromag-editor-menus-screens-container","placeholder":"micromag-editor-menus-screens-placeholder","preview":"micromag-editor-menus-screens-preview","screen":"micromag-editor-menus-screens-screen","item":"micromag-editor-menus-screens-item","items":"micromag-editor-menus-screens-items","button":"micromag-editor-menus-screens-button","settings":"micromag-editor-menus-screens-settings","isVertical":"micromag-editor-menus-screens-isVertical","noWrap":"micromag-editor-menus-screens-noWrap","withPlaceholder":"micromag-editor-menus-screens-withPlaceholder"};
163
+ var updateScreen = function updateScreen(story, newScreenValue) {
164
+ var newScreenId = newScreenValue.id;
309
165
 
310
- var _excluded$7 = ["onClick", "title", "screen", "className"];
311
- var propTypes$g = {
312
- items: core.PropTypes.menuItems,
313
- withPreview: PropTypes__default["default"].bool,
314
- withPlaceholder: PropTypes__default["default"].bool,
315
- settings: PropTypes__default["default"].node,
316
- previewMinWidth: PropTypes__default["default"].number,
317
- sortable: PropTypes__default["default"].bool,
318
- isVertical: PropTypes__default["default"].bool,
319
- noWrap: PropTypes__default["default"].bool,
320
- className: PropTypes__default["default"].string,
321
- itemClassName: PropTypes__default["default"].string,
322
- buttonClassName: PropTypes__default["default"].string,
323
- settingsClassName: PropTypes__default["default"].string,
324
- onClickItem: PropTypes__default["default"].func,
325
- onOrderChange: PropTypes__default["default"].func
326
- };
327
- var defaultProps$g = {
328
- items: [],
329
- withPreview: false,
330
- withPlaceholder: false,
331
- settings: null,
332
- previewMinWidth: 320,
333
- sortable: false,
334
- isVertical: false,
335
- noWrap: false,
336
- className: null,
337
- itemClassName: null,
338
- buttonClassName: null,
339
- settingsClassName: null,
340
- onClickItem: null,
341
- onOrderChange: null
166
+ var _ref = story || {},
167
+ _ref$components = _ref.components,
168
+ components = _ref$components === void 0 ? [] : _ref$components,
169
+ currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$9);
170
+
171
+ var index = components.findIndex(function (it) {
172
+ return it.id === newScreenId;
173
+ });
174
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
175
+ components: [].concat(_toConsumableArray__default["default"](components.slice(0, index)), [_objectSpread__default["default"](_objectSpread__default["default"]({}, components[index]), newScreenValue)], _toConsumableArray__default["default"](components.slice(index + 1)))
176
+ });
342
177
  };
343
178
 
344
- var ScreensMenu = function ScreensMenu(_ref) {
345
- var _ref8;
179
+ var getFieldByName = function getFieldByName(fields, name) {
180
+ return fields.reduce(function (foundField, it) {
181
+ if (foundField !== null) {
182
+ return foundField;
183
+ }
346
184
 
347
- var items = _ref.items,
348
- withPreview = _ref.withPreview,
349
- withPlaceholder = _ref.withPlaceholder,
350
- settings = _ref.settings,
351
- previewMinWidth = _ref.previewMinWidth,
352
- isVertical = _ref.isVertical,
353
- noWrap = _ref.noWrap,
354
- className = _ref.className,
355
- itemClassName = _ref.itemClassName,
356
- buttonClassName = _ref.buttonClassName,
357
- settingsClassName = _ref.settingsClassName,
358
- sortable = _ref.sortable,
359
- onClickItem = _ref.onClickItem,
360
- onOrderChange = _ref.onOrderChange;
361
- var intl = reactIntl.useIntl();
185
+ var _it$name = it.name,
186
+ fieldName = _it$name === void 0 ? null : _it$name,
187
+ _it$fields = it.fields,
188
+ subFields = _it$fields === void 0 ? [] : _it$fields;
362
189
 
363
- var _useResizeObserver = hooks.useResizeObserver({}, [items]),
364
- containerRef = _useResizeObserver.ref,
365
- contentRect = _useResizeObserver.entry.contentRect;
190
+ if (name !== null && fieldName === name) {
191
+ return it;
192
+ }
366
193
 
367
- var previewStyle = React.useMemo(function () {
368
- var _ref2 = contentRect || {},
369
- _ref2$width = _ref2.width,
370
- itemWidth = _ref2$width === void 0 ? 0 : _ref2$width,
371
- _ref2$height = _ref2.height,
372
- itemHeight = _ref2$height === void 0 ? 0 : _ref2$height;
194
+ return getFieldByName(subFields, name);
195
+ }, null);
196
+ };
373
197
 
374
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 0;
198
+ var useFormTransition = function useFormTransition(url, screenIndex, styles) {
199
+ var lastPageRef = React.useRef({
200
+ url: url,
201
+ screenIndex: screenIndex
202
+ });
203
+ var direction = React.useMemo(function () {
204
+ var _lastPageRef$current = lastPageRef.current,
205
+ lastScreenIndex = _lastPageRef$current.screenIndex,
206
+ lastUrl = _lastPageRef$current.url;
207
+ lastPageRef.current.url = url;
208
+ lastPageRef.current.screenIndex = screenIndex;
375
209
 
376
- var _getSizeWithinBounds = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
377
- previewScale = _getSizeWithinBounds.scale;
210
+ if (screenIndex !== lastScreenIndex) {
211
+ // return screenIndex > lastScreenIndex ? 'bottom' : 'top';
212
+ return null;
213
+ }
214
+
215
+ var urlSplit = url.split('/');
216
+ var lastUrlSplit = lastUrl.split('/');
217
+ var currentPartsCount = urlSplit.length;
218
+ var previousPartsCount = lastUrlSplit.length;
219
+ var isSettings = urlSplit[currentPartsCount - 1] === 'settings';
220
+ var wasSettings = lastUrlSplit[previousPartsCount - 1] === 'settings';
221
+ currentPartsCount -= isSettings ? 1 : 0;
222
+ previousPartsCount -= wasSettings ? 1 : 0;
223
+ return currentPartsCount >= previousPartsCount ? 'right' : 'left';
224
+ }, [url, screenIndex]);
225
+ var name = React.useMemo(function () {
226
+ var _classNames, _classNames2, _classNames3;
378
227
 
379
228
  return {
380
- width: previewMinWidth,
381
- height: previewMinWidth * ratio,
382
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
229
+ enter: classNames__default["default"]((_classNames = {}, _defineProperty__default["default"](_classNames, styles.enterRight, direction === 'right'), _defineProperty__default["default"](_classNames, styles.enterLeft, direction === 'left'), _defineProperty__default["default"](_classNames, styles.enterTop, direction === 'top'), _defineProperty__default["default"](_classNames, styles.enterBottom, direction === 'bottom'), _classNames)) || 'none',
230
+ enterActive: classNames__default["default"]((_classNames2 = {}, _defineProperty__default["default"](_classNames2, styles.enterActiveHorizontal, direction === 'left' || direction === 'right'), _defineProperty__default["default"](_classNames2, styles.enterActiveVertical, direction === 'top' || direction === 'bottom'), _classNames2)) || 'none',
231
+ leave: styles.leave || 'none',
232
+ leaveActive: classNames__default["default"]((_classNames3 = {}, _defineProperty__default["default"](_classNames3, styles.leaveActiveRight, direction === 'right'), _defineProperty__default["default"](_classNames3, styles.leaveActiveLeft, direction === 'left'), _defineProperty__default["default"](_classNames3, styles.leaveActiveTop, direction === 'top'), _defineProperty__default["default"](_classNames3, styles.leaveActiveBottom, direction === 'bottom'), _classNames3)) || 'none'
383
233
  };
384
- }, [previewMinWidth, contentRect]);
385
- var itemsElements = items.map(function (_ref3, index) {
386
- var _ref4;
234
+ }, [direction, screenIndex]);
235
+ return {
236
+ direction: direction,
237
+ name: name,
238
+ timeout: direction === 'left' || direction === 'right' ? 300 : 10
239
+ };
240
+ };
387
241
 
388
- var _ref3$onClick = _ref3.onClick,
389
- _onClick = _ref3$onClick === void 0 ? null : _ref3$onClick,
390
- title = _ref3.title,
391
- screen = _ref3.screen,
392
- _ref3$className = _ref3.className,
393
- itemCustomClassName = _ref3$className === void 0 ? null : _ref3$className,
394
- item = _objectWithoutProperties__default["default"](_ref3, _excluded$7);
242
+ var _excluded$8 = ["className"];
243
+ var propTypes$n = {
244
+ className: PropTypes__default["default"].string
245
+ };
246
+ var defaultProps$n = {
247
+ className: null
248
+ };
395
249
 
396
- return /*#__PURE__*/React__default["default"].createElement("li", {
397
- key: item.id,
398
- className: classNames__default["default"]([styles$b.item, (_ref4 = {}, _defineProperty__default["default"](_ref4, itemClassName, itemClassName !== null), _defineProperty__default["default"](_ref4, itemCustomClassName, itemCustomClassName !== null), _ref4)]),
399
- "data-screen-id": item.id,
400
- ref: index === 0 ? containerRef : null
401
- }, /*#__PURE__*/React__default["default"].createElement(ScreenButton$1, Object.assign({}, item, {
402
- className: classNames__default["default"]([styles$b.button, _defineProperty__default["default"]({}, buttonClassName, buttonClassName !== null)]),
403
- title: utils.isMessage(title) ? intl.formatMessage(title) : null,
404
- onClick: function onClick() {
405
- if (_onClick !== null) {
406
- _onClick(screen, index);
407
- }
250
+ var SettingsButton = function SettingsButton(_ref) {
251
+ var className = _ref.className,
252
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$8);
408
253
 
409
- if (onClickItem !== null) {
410
- onClickItem(screen, index);
411
- }
412
- }
413
- }), withPreview ? /*#__PURE__*/React__default["default"].createElement("div", {
414
- className: styles$b.preview,
415
- style: previewStyle
416
- }, /*#__PURE__*/React__default["default"].createElement(components.ScreenPreview, {
417
- screen: screen,
418
- width: previewStyle.width,
419
- height: previewStyle.height,
420
- className: styles$b.screen
421
- })) : null, withPlaceholder ? /*#__PURE__*/React__default["default"].createElement("div", {
422
- className: styles$b.placeholder,
423
- style: previewStyle
424
- }, /*#__PURE__*/React__default["default"].createElement(components.ScreenPlaceholder, {
425
- screen: item,
426
- width: previewStyle.width,
427
- height: previewStyle.height,
428
- className: styles$b.screen
429
- })) : null), settings !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
430
- className: classNames__default["default"]([_defineProperty__default["default"]({}, settingsClassName, settingsClassName !== null), styles$b.settings, 'p-2'])
431
- }, isFunction__default["default"](settings) ? settings(index) : settings) : null);
432
- });
433
- var sortableItems = React.useMemo(function () {
434
- return items.map(function (_ref7) {
435
- var id = _ref7.id;
436
- return {
437
- id: id
438
- };
439
- });
440
- }, [items]);
441
- return /*#__PURE__*/React__default["default"].createElement("div", {
442
- className: classNames__default["default"]([styles$b.container, (_ref8 = {}, _defineProperty__default["default"](_ref8, styles$b.noWrap, noWrap), _defineProperty__default["default"](_ref8, styles$b.isVertical, isVertical), _defineProperty__default["default"](_ref8, styles$b.withPlaceholder, withPlaceholder), _defineProperty__default["default"](_ref8, className, className), _ref8)])
443
- }, sortable && items.length > 1 ? /*#__PURE__*/React__default["default"].createElement(reactSortablejs.ReactSortable, {
444
- list: sortableItems,
445
- setList: onOrderChange,
446
- animation: 200,
447
- delayOnTouchStart: true,
448
- delay: 2,
449
- tag: "ul",
450
- className: styles$b.items
451
- }, itemsElements) : /*#__PURE__*/React__default["default"].createElement("ul", {
452
- className: styles$b.items
453
- }, itemsElements));
254
+ return /*#__PURE__*/React__default["default"].createElement(components.Button, Object.assign({
255
+ className: className,
256
+ theme: "secondary",
257
+ size: "sm",
258
+ icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
259
+ icon: freeSolidSvgIcons.faCogs
260
+ })
261
+ }, props));
454
262
  };
455
263
 
456
- ScreensMenu.propTypes = propTypes$g;
457
- ScreensMenu.defaultProps = defaultProps$g;
264
+ SettingsButton.propTypes = propTypes$n;
265
+ SettingsButton.defaultProps = defaultProps$n;
458
266
 
459
- var styles$a = {"container":"micromag-editor-menus-screen-types-container","row":"micromag-editor-menus-screen-types-row","title":"micromag-editor-menus-screen-types-title"};
267
+ var styles$e = {"container":"micromag-editor-menus-breadcrumb-container"};
460
268
 
461
- var propTypes$f = {
462
- screens: core.PropTypes.screenDefinitions,
463
- selectedTypes: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
464
- className: PropTypes__default["default"].string,
465
- onClickItem: PropTypes__default["default"].func
269
+ var propTypes$m = {
270
+ story: core.PropTypes.story,
271
+ screenId: PropTypes__default["default"].string,
272
+ field: PropTypes__default["default"].string,
273
+ form: PropTypes__default["default"].string,
274
+ url: PropTypes__default["default"].string.isRequired,
275
+ className: PropTypes__default["default"].string
466
276
  };
467
- var defaultProps$f = {
468
- screens: null,
469
- selectedTypes: null,
470
- className: null,
471
- onClickItem: null
277
+ var defaultProps$m = {
278
+ story: null,
279
+ screenId: null,
280
+ field: null,
281
+ form: null,
282
+ className: null
472
283
  };
473
284
 
474
- var ScreenTypes = function ScreenTypes(_ref) {
475
- var screens = _ref.screens,
476
- selectedTypes = _ref.selectedTypes,
477
- className = _ref.className,
478
- onClickItem = _ref.onClickItem;
285
+ var Breadcrumb = function Breadcrumb(_ref) {
286
+ var story = _ref.story,
287
+ screenId = _ref.screenId,
288
+ field = _ref.field,
289
+ form = _ref.form,
290
+ url = _ref.url,
291
+ className = _ref.className;
479
292
  var intl = reactIntl.useIntl();
480
- var screensManager = contexts.useScreensManager();
481
- var finalDefinitions = screens || screensManager.getDefinitions();
482
- var groups = React.useMemo(function () {
483
- var groupItems = finalDefinitions.reduce(function (allGroups, definition) {
484
- var id = definition.id,
485
- title = definition.title,
486
- _definition$group = definition.group,
487
- group = _definition$group === void 0 ? {} : _definition$group;
488
293
 
489
- var _ref2 = group || {},
490
- _ref2$order = _ref2.order,
491
- order = _ref2$order === void 0 ? 0 : _ref2$order,
492
- _ref2$label = _ref2.label,
493
- label = _ref2$label === void 0 ? {} : _ref2$label,
494
- _ref2$hidden = _ref2.hidden,
495
- hidden = _ref2$hidden === void 0 ? false : _ref2$hidden;
294
+ var _ref2 = story || {},
295
+ _ref2$components = _ref2.components,
296
+ screens = _ref2$components === void 0 ? [] : _ref2$components;
496
297
 
497
- var _ref3 = label || {},
498
- _ref3$id = _ref3.id,
499
- messageId = _ref3$id === void 0 ? null : _ref3$id;
298
+ var history = reactRouter.useHistory();
299
+ var screensManager = contexts.useScreensManager();
300
+ var fieldsManager = contexts.useFieldsManager();
301
+ var items = React.useMemo(function () {
302
+ var screenIndex = screens.findIndex(function (it) {
303
+ return it.id === screenId;
304
+ });
500
305
 
501
- if (hidden) {
502
- return allGroups;
503
- }
306
+ if (!screens[screenIndex]) {
307
+ return [];
308
+ }
504
309
 
505
- var _ref4 = utils.isMessage(label) ? {
506
- id: messageId || id,
507
- name: group
508
- } : {
509
- id: messageId || id,
510
- name: title
511
- },
512
- groupId = _ref4.id,
513
- groupName = _ref4.name;
310
+ var type = screens[screenIndex].type;
311
+ var fieldItems = [];
514
312
 
515
- var groupIndex = allGroups.findIndex(function (it) {
516
- return it.id === groupId;
517
- });
518
- var selected = selectedTypes !== null && selectedTypes.indexOf(id) !== -1;
519
- var item = {
520
- id: id,
521
- type: id,
522
- screen: definition,
523
- className: classNames__default["default"](_defineProperty__default["default"]({
524
- 'bg-secondary': !selected,
525
- 'bg-primary': selected
526
- }, styles$a.selected, selected))
527
- };
528
- return groupIndex !== -1 ? [].concat(_toConsumableArray__default["default"](allGroups.slice(0, groupIndex)), [_objectSpread__default["default"](_objectSpread__default["default"]({}, allGroups[groupIndex]), {}, {
529
- items: [].concat(_toConsumableArray__default["default"](allGroups[groupIndex].items), [item])
530
- })], _toConsumableArray__default["default"](allGroups.slice(groupIndex + 1))) : [].concat(_toConsumableArray__default["default"](allGroups), [{
531
- id: groupId,
532
- name: utils.isMessage(label) ? intl.formatMessage(label) : groupName,
533
- order: order,
534
- items: [item]
535
- }]);
536
- }, []);
537
- return orderBy__default["default"](groupItems, ['order', 'name'], ['asc', 'asc']);
538
- }, [finalDefinitions, selectedTypes]);
539
- return /*#__PURE__*/React__default["default"].createElement("div", {
540
- className: classNames__default["default"]([styles$a.container, _defineProperty__default["default"]({}, className, className)])
541
- }, /*#__PURE__*/React__default["default"].createElement("div", {
542
- className: styles$a.rows
543
- }, groups.map(function (_ref6) {
544
- var id = _ref6.id,
545
- name = _ref6.name,
546
- items = _ref6.items;
547
- return /*#__PURE__*/React__default["default"].createElement("div", {
548
- key: "group-".concat(id),
549
- className: styles$a.row
550
- }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, name), /*#__PURE__*/React__default["default"].createElement("div", {
551
- className: styles$a.layouts
552
- }, /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
553
- items: items,
554
- withPlaceholder: true,
555
- itemClassName: classNames__default["default"](['border', 'rounded', {
556
- 'border-secondary': selectedTypes === null,
557
- 'border-dark': selectedTypes !== null,
558
- 'bg-secondary': selectedTypes === null,
559
- 'text-secondary': selectedTypes !== null
560
- }]),
561
- previewMinWidth: 100,
562
- onClickItem: onClickItem
563
- })));
564
- })));
313
+ if (field !== null) {
314
+ var _screensManager$getDe = screensManager.getDefinition(type),
315
+ _screensManager$getDe2 = _screensManager$getDe.fields,
316
+ screenFields = _screensManager$getDe2 === void 0 ? [] : _screensManager$getDe2;
317
+
318
+ var fields = [].concat(_toConsumableArray__default["default"](screenFields), [utils.getScreenExtraField(intl)]);
319
+ var fieldPath = field.split('/');
320
+ var lastKeyIndex = fieldPath.length - 1;
321
+ var parentItem = null;
322
+ fieldPath.reduce(function (currentFields, key, keyIndex) {
323
+ var _currentFields$type = currentFields.type,
324
+ fieldType = _currentFields$type === void 0 ? null : _currentFields$type;
325
+ var fieldsDef = fieldType !== null ? fieldsManager.getDefinition(fieldType) : currentFields;
326
+ var _fieldsDef$fields = fieldsDef.fields,
327
+ subFields = _fieldsDef$fields === void 0 ? null : _fieldsDef$fields,
328
+ _fieldsDef$settings = fieldsDef.settings,
329
+ settings = _fieldsDef$settings === void 0 ? null : _fieldsDef$settings,
330
+ _fieldsDef$itemsField = fieldsDef.itemsField,
331
+ itemsField = _fieldsDef$itemsField === void 0 ? null : _fieldsDef$itemsField;
332
+ var currentSubfields = subFields !== null ? getFieldByName(subFields, key) : null;
333
+ var currentSettings = settings !== null ? getFieldByName(settings, key) : null;
334
+ var isCurrentSubfields = currentSubfields !== null;
335
+ var isCurrentSettings = currentSettings !== null;
336
+ var isListItems = itemsField !== null && !!key.match(/^[0-9]+$/);
337
+ var isLastIndex = keyIndex === lastKeyIndex;
338
+ var pathPrefix = "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex + 1).join('/'));
339
+ var pathSuffix = isLastIndex && form !== null ? "/".concat(form) : '';
340
+ var addNewItem = isLastIndex || isListItems;
341
+ var itemPath = "".concat(pathPrefix).concat(pathSuffix);
342
+ var nextFields = null;
343
+
344
+ if (isCurrentSubfields) {
345
+ nextFields = currentSubfields;
346
+ } else if (isCurrentSettings) {
347
+ nextFields = currentSettings;
348
+
349
+ if (parentItem !== null) {
350
+ fieldItems.push(_objectSpread__default["default"](_objectSpread__default["default"]({}, parentItem), {}, {
351
+ url: "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex).join('/'), "/settings")
352
+ }));
353
+ }
354
+ } else if (isListItems) {
355
+ nextFields = itemsField;
356
+ }
357
+
358
+ var fieldLabel = nextFields ? nextFields.breadcrumbLabel || nextFields.label : null;
359
+ var itemLabel = utils.isMessage(fieldLabel) ? intl.formatMessage(fieldLabel) : fieldLabel;
360
+
361
+ var _ref3 = parentItem || {},
362
+ _ref3$label = _ref3.label,
363
+ parentItemLabel = _ref3$label === void 0 ? null : _ref3$label;
364
+
365
+ var finalItemLabel = isListItems ? "".concat(itemLabel, " #").concat(parseInt(key, 10) + 1) : itemLabel || parentItemLabel;
366
+ var item = {
367
+ url: itemPath,
368
+ label: finalItemLabel || '',
369
+ active: false
370
+ };
371
+
372
+ if (addNewItem) {
373
+ fieldItems.push(item);
374
+ }
375
+
376
+ parentItem = item;
377
+ return nextFields;
378
+ }, {
379
+ fields: fields
380
+ });
381
+ }
382
+
383
+ var finalItems = [{
384
+ label: intl.formatMessage({
385
+ id: "AHvHaY",
386
+ defaultMessage: [{
387
+ "type": 0,
388
+ "value": "Parameters"
389
+ }]
390
+ }),
391
+ url: "/".concat(screenId),
392
+ active: false
393
+ }].concat(fieldItems).filter(function (it) {
394
+ return it !== null;
395
+ });
396
+ var lastItemsIndex = finalItems.length - 1;
397
+ return finalItems.map(function (it, index) {
398
+ return index === lastItemsIndex ? _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
399
+ url: url,
400
+ active: true
401
+ }) : it;
402
+ });
403
+ }, [intl, screens, screenId, field, form, url, screensManager, fieldsManager]);
404
+ var itemsLength = items.length;
405
+ var onClickBack = React.useCallback(function () {
406
+ history.push(items[itemsLength - 2].url);
407
+ }, [items]);
408
+ var withBack = itemsLength > 1;
409
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, withBack ? /*#__PURE__*/React__default["default"].createElement(components.BackButton, {
410
+ onClick: onClickBack,
411
+ className: "mr-2"
412
+ }) : null, /*#__PURE__*/React__default["default"].createElement(components.Breadcrumb, {
413
+ items: items,
414
+ theme: "secondary",
415
+ withoutBar: true,
416
+ noWrap: true,
417
+ className: classNames__default["default"]([styles$e.container, 'text-truncate', _defineProperty__default["default"]({}, className, className !== null)])
418
+ }));
565
419
  };
566
420
 
567
- ScreenTypes.propTypes = propTypes$f;
568
- ScreenTypes.defaultProps = defaultProps$f;
421
+ Breadcrumb.propTypes = propTypes$m;
422
+ Breadcrumb.defaultProps = defaultProps$m;
569
423
 
570
- var styles$9 = {"container":"micromag-editor-modals-screen-types-container","selected":"micromag-editor-modals-screen-types-selected"};
424
+ var styles$d = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
571
425
 
572
- var propTypes$e = {
573
- selectedTypes: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
426
+ var propTypes$l = {
427
+ value: core.PropTypes.component,
574
428
  className: PropTypes__default["default"].string,
575
- onRequestClose: PropTypes__default["default"].func,
576
- onClickScreenType: PropTypes__default["default"].func
429
+ gotoFieldForm: PropTypes__default["default"].func.isRequired,
430
+ closeFieldForm: PropTypes__default["default"].func.isRequired,
431
+ onChange: PropTypes__default["default"].func // onClickDelete: PropTypes.func,
432
+
577
433
  };
578
- var defaultProps$e = {
579
- selectedTypes: null,
434
+ var defaultProps$l = {
435
+ value: null,
580
436
  className: null,
581
- onRequestClose: null,
582
- onClickScreenType: null
437
+ onChange: null // onClickDelete: null,
438
+
583
439
  };
584
440
 
585
- var ScreenTypesModal = function ScreenTypesModal(_ref) {
586
- var selectedTypes = _ref.selectedTypes,
441
+ var ScreenForm = function ScreenForm(_ref) {
442
+ var value = _ref.value,
587
443
  className = _ref.className,
588
- onRequestClose = _ref.onRequestClose,
589
- onClickScreenType = _ref.onClickScreenType;
444
+ gotoFieldForm = _ref.gotoFieldForm,
445
+ closeFieldForm = _ref.closeFieldForm,
446
+ onChange = _ref.onChange;
447
+
448
+ var _useScreenDefinition = contexts.useScreenDefinition(),
449
+ _useScreenDefinition$ = _useScreenDefinition.fields,
450
+ fields$1 = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // const intl = useIntl();
451
+ // const finalOnClickDelete = useCallback(() => {
452
+ // if (
453
+ // onClickDelete !== null &&
454
+ // window.confirm(
455
+ // intl.formatMessage({
456
+ // defaultMessage: 'Are you sure you want to delete this screen?',
457
+ // description: 'Confirm message when deleting a screen',
458
+ // }),
459
+ // )
460
+ // ) {
461
+ // onClickDelete(value);
462
+ // }
463
+ // }, [intl, onClickDelete, value]);
464
+
465
+
466
+ return /*#__PURE__*/React__default["default"].createElement("div", {
467
+ className: classNames__default["default"]([styles$d.container, _defineProperty__default["default"]({}, className, className)])
468
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
469
+ className: styles$d.inner
470
+ }, /*#__PURE__*/React__default["default"].createElement(fields.Fields, {
471
+ fields: fields$1,
472
+ value: value,
473
+ onChange: onChange,
474
+ gotoFieldForm: gotoFieldForm,
475
+ closeFieldForm: closeFieldForm
476
+ })));
477
+ };
478
+
479
+ ScreenForm.propTypes = propTypes$l;
480
+ ScreenForm.defaultProps = defaultProps$l;
481
+
482
+ /* eslint-disable react/jsx-props-no-spreading */
483
+ var propTypes$k = {
484
+ children: PropTypes__default["default"].node
485
+ };
486
+ var defaultProps$k = {
487
+ children: null
488
+ };
489
+
490
+ var FieldWithContexts = function FieldWithContexts(props) {
491
+ // Get definitions
492
+ var _useScreenDefinition = contexts.useScreenDefinition(),
493
+ _useScreenDefinition$ = _useScreenDefinition.fields,
494
+ fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // To use a specific form component
495
+
496
+
497
+ var formComponents = contexts.useFormsComponents();
498
+ return /*#__PURE__*/React__default["default"].createElement(components.FieldForm, Object.assign({
499
+ fields: fields,
500
+ formComponents: formComponents
501
+ }, props));
502
+ };
503
+
504
+ FieldWithContexts.propTypes = propTypes$k;
505
+ FieldWithContexts.defaultProps = defaultProps$k;
506
+
507
+ var styles$c = {"container":"micromag-editor-modals-delete-screen-container","description":"micromag-editor-modals-delete-screen-description","actions":"micromag-editor-modals-delete-screen-actions"};
508
+
509
+ var propTypes$j = {
510
+ className: PropTypes__default["default"].string,
511
+ onConfirm: PropTypes__default["default"].func,
512
+ onCancel: PropTypes__default["default"].func
513
+ };
514
+ var defaultProps$j = {
515
+ className: null,
516
+ onConfirm: null,
517
+ onCancel: null
518
+ };
519
+
520
+ var DeleteScreenModal = function DeleteScreenModal(_ref) {
521
+ var className = _ref.className,
522
+ onConfirm = _ref.onConfirm,
523
+ onCancel = _ref.onCancel;
590
524
  return /*#__PURE__*/React__default["default"].createElement(components.Modal, null, /*#__PURE__*/React__default["default"].createElement(components.ModalDialog, {
591
525
  title: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
592
- id: "QBaiO0",
526
+ id: "p6q/+/",
593
527
  defaultMessage: [{
594
528
  "type": 0,
595
- "value": "Add a screen"
529
+ "value": "Delete screen"
596
530
  }]
597
531
  }),
598
- className: classNames__default["default"]([styles$9.container, _defineProperty__default["default"]({}, className, className)]),
599
- onClickClose: onRequestClose
600
- }, /*#__PURE__*/React__default["default"].createElement(ScreenTypes, {
601
- selectedTypes: selectedTypes,
602
- className: styles$9.menu,
603
- onClickItem: onClickScreenType
604
- })));
532
+ className: classNames__default["default"]([styles$c.container, _defineProperty__default["default"]({}, className, className)]),
533
+ onClickClose: onCancel
534
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
535
+ className: styles$c.description
536
+ }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
537
+ id: "q/tLk0",
538
+ defaultMessage: [{
539
+ "type": 0,
540
+ "value": "Are you sure you want to delete this screen?"
541
+ }]
542
+ }))), /*#__PURE__*/React__default["default"].createElement("div", {
543
+ className: styles$c.actions
544
+ }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
545
+ onClick: onCancel,
546
+ className: "btn-outline-secondary mr-2"
547
+ }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
548
+ id: "0GT0SI",
549
+ defaultMessage: [{
550
+ "type": 0,
551
+ "value": "Cancel"
552
+ }]
553
+ }))), /*#__PURE__*/React__default["default"].createElement(components.Button, {
554
+ onClick: onConfirm,
555
+ theme: "danger",
556
+ label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
557
+ id: "gRxcTc",
558
+ defaultMessage: [{
559
+ "type": 0,
560
+ "value": "Delete screen"
561
+ }]
562
+ })
563
+ }))));
605
564
  };
606
565
 
607
- ScreenTypesModal.propTypes = propTypes$e;
608
- ScreenTypesModal.defaultProps = defaultProps$e;
566
+ DeleteScreenModal.propTypes = propTypes$j;
567
+ DeleteScreenModal.defaultProps = defaultProps$j;
609
568
 
610
- var styles$8 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
569
+ var styles$b = {"panel":"micromag-editor-form-panel","leave":"micromag-editor-form-leave","content":"micromag-editor-form-content","navbar":"micromag-editor-form-navbar","enterBottom":"micromag-editor-form-enterBottom","enterLeft":"micromag-editor-form-enterLeft","enterRight":"micromag-editor-form-enterRight","enterTop":"micromag-editor-form-enterTop","enterActiveHorizontal":"micromag-editor-form-enterActiveHorizontal","enterActiveVertical":"micromag-editor-form-enterActiveVertical","leaveActiveLeft":"micromag-editor-form-leaveActiveLeft","leaveActiveRight":"micromag-editor-form-leaveActiveRight","leaveActiveBottom":"micromag-editor-form-leaveActiveBottom","leaveActiveTop":"micromag-editor-form-leaveActiveTop"};
611
570
 
612
- var propTypes$d = {
571
+ var propTypes$i = {
613
572
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
614
573
  isTheme: PropTypes__default["default"].bool,
615
- isVertical: PropTypes__default["default"].bool,
616
- isCreateOpened: PropTypes__default["default"].bool,
617
- isParsed: PropTypes__default["default"].bool,
618
- onClickScreen: PropTypes__default["default"].func,
619
- onChange: PropTypes__default["default"].func,
620
- className: PropTypes__default["default"].string
574
+ className: PropTypes__default["default"].string,
575
+ onChange: PropTypes__default["default"].func
621
576
  };
622
- var defaultProps$d = {
577
+ var defaultProps$i = {
623
578
  value: null,
624
579
  isTheme: false,
625
- isVertical: false,
626
- isCreateOpened: false,
627
- isParsed: false,
628
- onClickScreen: null,
629
- onChange: null,
630
- className: null
580
+ className: null,
581
+ onChange: null
631
582
  };
632
583
 
633
- var EditorScreens = function EditorScreens(_ref) {
634
- var unparsedValue = _ref.value,
584
+ var EditForm = function EditForm(_ref) {
585
+ var value = _ref.value,
635
586
  isTheme = _ref.isTheme,
636
- isVertical = _ref.isVertical,
637
- isCreateOpened = _ref.isCreateOpened,
638
- isParsed = _ref.isParsed,
639
- onClickScreen = _ref.onClickScreen,
640
- onChange = _ref.onChange,
641
- className = _ref.className;
642
- var valueWithTheme = useThemeValue(unparsedValue, isTheme);
643
- var value = isParsed ? unparsedValue : hooks.useParsedStory(valueWithTheme, {
644
- withMedias: false
645
- });
646
-
647
- var _ref2 = value || {},
648
- _ref2$components = _ref2.components,
649
- screens = _ref2$components === void 0 ? [] : _ref2$components;
650
-
651
- var _useState = React.useState(isCreateOpened),
652
- _useState2 = _slicedToArray__default["default"](_useState, 2),
653
- createModalOpened = _useState2[0],
654
- setCreateModalOpened = _useState2[1];
655
-
656
- var routes = contexts.useRoutes();
657
- var push = contexts.useRoutePush();
658
- var url = contexts.useUrlGenerator();
587
+ className = _ref.className,
588
+ onChange = _ref.onChange;
589
+ // Match routes
590
+ var history = reactRouter.useHistory();
591
+ var routePush = contexts.useRoutePush();
659
592
 
660
- var _useRouteParams = useRouteParams({
661
- screenOnly: true
662
- }),
593
+ var _useRouteParams = useRouteParams(),
594
+ url = _useRouteParams.url,
663
595
  _useRouteParams$scree = _useRouteParams.screen,
664
- currentScreenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree;
665
-
666
- var createScreenFromDefinition = React.useCallback(function (definition) {
667
- var _ref3 = value || {},
668
- _ref3$components = _ref3.components,
669
- currentScreens = _ref3$components === void 0 ? [] : _ref3$components,
670
- _ref3$theme = _ref3.theme,
671
- theme = _ref3$theme === void 0 ? {} : _ref3$theme;
596
+ screenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
597
+ _useRouteParams$field = _useRouteParams.field,
598
+ fieldParams = _useRouteParams$field === void 0 ? null : _useRouteParams$field,
599
+ _useRouteParams$form = _useRouteParams.form,
600
+ formParams = _useRouteParams$form === void 0 ? null : _useRouteParams$form; // Get screen
672
601
 
673
- var _ref4 = isString__default["default"](definition) ? {
674
- id: definition
675
- } : definition,
676
- newScreenType = _ref4.id;
677
602
 
678
- var _ref5 = theme || {},
679
- _ref5$components = _ref5.components,
680
- themeComponents = _ref5$components === void 0 ? null : _ref5$components;
681
-
682
- var themeScreen = themeComponents !== null ? themeComponents.find(function (it) {
683
- return it.type === newScreenType;
684
- }) || null : null;
685
- var newScreen = createScreen(definition, themeScreen);
686
- var foundIndex = screens.findIndex(function (_ref6) {
687
- var id = _ref6.id;
688
- return id === currentScreenId;
689
- });
690
- var currentScreenIndex = !isTheme && foundIndex >= 0 ? foundIndex + 1 : null;
603
+ var _ref2 = value || {},
604
+ _ref2$components = _ref2.components,
605
+ screens = _ref2$components === void 0 ? [] : _ref2$components;
691
606
 
692
- var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
693
- components: [].concat(_toConsumableArray__default["default"](currentScreens.slice(0, currentScreenIndex)), [newScreen], _toConsumableArray__default["default"](currentScreens.slice(currentScreenIndex)))
694
- });
607
+ var screenIndex = screens.findIndex(function (it) {
608
+ return it.id === screenId;
609
+ });
610
+ var screen = screenIndex !== -1 ? screens[screenIndex] : null; // Get transition value
695
611
 
696
- if (onChange !== null) {
697
- onChange(newValue);
698
- }
612
+ var _useFormTransition = useFormTransition(url, screenIndex, styles$b),
613
+ transitionName = _useFormTransition.name,
614
+ transitionTimeout = _useFormTransition.timeout;
699
615
 
700
- return newScreen;
701
- }, [value, onChange, isTheme, screens, currentScreenId, setCreateModalOpened]);
702
- var onOrderChange = React.useCallback(function (listItems) {
703
- var ids = listItems.map(function (_ref7) {
704
- var id = _ref7.id;
705
- return id;
706
- });
616
+ var _useState = React.useState(false),
617
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
618
+ screenSettingsOpened = _useState2[0],
619
+ setScreenSettingsOpened = _useState2[1];
707
620
 
708
- var _ref8 = value || {},
709
- _ref8$components = _ref8.components,
710
- currentScreens = _ref8$components === void 0 ? [] : _ref8$components;
621
+ var _useState3 = React.useState(false),
622
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
623
+ deleteScreenModalOpened = _useState4[0],
624
+ setDeleteScreenModalOpened = _useState4[1];
711
625
 
712
- var currentIds = currentScreens.map(function (_ref9) {
713
- var id = _ref9.id;
714
- return id;
715
- });
716
- var sameOrder = listItems.reduce(function (same, _ref10, index) {
717
- var id = _ref10.id;
718
- return same && id === currentIds[index];
719
- }, true);
626
+ var _useState5 = React.useState({}),
627
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
628
+ fieldForms = _useState6[0],
629
+ setFieldForms = _useState6[1];
720
630
 
721
- if (!sameOrder) {
722
- var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
723
- components: _toConsumableArray__default["default"](currentScreens).sort(function (_ref11, _ref12) {
724
- var idA = _ref11.id;
725
- var idB = _ref12.id;
726
- var indexA = ids.indexOf(idA);
727
- var indexB = ids.indexOf(idB);
631
+ var _useState7 = React.useState(null),
632
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
633
+ fieldContext = _useState8[0],
634
+ setFieldContext = _useState8[1]; // Callbacks
728
635
 
729
- if (indexA === indexB) {
730
- return 0;
731
- }
732
636
 
733
- return indexA > indexB ? 1 : -1;
734
- })
735
- });
637
+ var gotoFieldForm = React.useCallback(function () {
638
+ var field = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
639
+ var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
640
+ var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
641
+ var hasField = field !== null;
642
+ var fieldRoute = formName !== null ? 'screen.field.form' : 'screen.field';
643
+ routePush(hasField ? fieldRoute : 'screen', {
644
+ screen: screenId,
645
+ field: field !== null ? field.split('.') : null,
646
+ form: formName !== null ? utils.slug(formName) : null
647
+ });
648
+ setFieldForms(_objectSpread__default["default"](_objectSpread__default["default"]({}, fieldForms), {}, _defineProperty__default["default"]({}, "".concat(field).concat(formName !== null ? ":".concat(formName) : ''), url)));
649
+ setFieldContext(context);
650
+ }, [routePush, screenId, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
651
+ var closeFieldForm = React.useCallback(function (field) {
652
+ var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
653
+ var fieldKey = "".concat(field).concat(formName !== null ? ":".concat(formName) : '');
654
+ var pastUrl = fieldForms[fieldKey] || null;
736
655
 
737
- if (onChange !== null) {
738
- onChange(newValue);
739
- }
656
+ if (pastUrl !== null) {
657
+ history.push(pastUrl);
740
658
  }
741
- }, [value, onChange]);
742
- var onClickScreenType = React.useCallback(function (definition) {
743
- setCreateModalOpened(false);
744
- var currentScreen = isTheme ? screens.find(function (_ref13) {
745
- var type = _ref13.type;
746
- return type === definition.id;
747
- }) || null : null;
748
659
 
749
- if (!isTheme || currentScreen === null) {
750
- currentScreen = createScreenFromDefinition(definition);
660
+ setFieldForms(Object.keys(fieldForms).reduce(function (map, key) {
661
+ return key !== fieldKey ? _objectSpread__default["default"](_objectSpread__default["default"]({}, map), {}, _defineProperty__default["default"]({}, key, fieldForms[key])) : map;
662
+ }, {}));
663
+ }, [history, screenId, fieldForms, setFieldForms]);
664
+ var triggerOnChange = React.useCallback(function (newValue) {
665
+ if (onChange !== null) {
666
+ onChange(newValue);
751
667
  }
752
-
753
- push('screen', {
754
- screen: currentScreen.id
668
+ }, [onChange]);
669
+ var onScreenFormChange = React.useCallback(function (newScreenValue) {
670
+ triggerOnChange(updateScreen(value, newScreenValue));
671
+ }, [value, triggerOnChange]);
672
+ var onClickDuplicate = React.useCallback(function () {
673
+ triggerOnChange(duplicateScreen(value, screenId));
674
+ setScreenSettingsOpened(false);
675
+ }, [value, screenId, triggerOnChange, setScreenSettingsOpened]);
676
+ var onClickDelete = React.useCallback(function () {
677
+ setDeleteScreenModalOpened(true);
678
+ setScreenSettingsOpened(false);
679
+ }, [setScreenSettingsOpened, setDeleteScreenModalOpened]);
680
+ var onSettingsClick = React.useCallback(function () {
681
+ setScreenSettingsOpened(function (opened) {
682
+ return !opened;
755
683
  });
756
- onClickScreen(currentScreen);
757
- }, [screens, isTheme, createScreenFromDefinition, push, onClickScreen]);
758
- var onClickAdd = React.useCallback(function () {
759
- return setCreateModalOpened(true);
760
- }, [setCreateModalOpened]);
761
- var onCreateModalRequestClose = React.useCallback(function () {
762
- return setCreateModalOpened(false);
763
- }, [setCreateModalOpened]);
684
+ }, [setScreenSettingsOpened]);
685
+ var onDropdownClickOutside = React.useCallback(function () {
686
+ setScreenSettingsOpened(false);
687
+ }, [setScreenSettingsOpened]);
688
+ var onDeleteScreenConfirm = React.useCallback(function () {
689
+ triggerOnChange(deleteScreen(value, screenId));
690
+ setDeleteScreenModalOpened(false);
691
+ }, [value, triggerOnChange, screenId, setScreenSettingsOpened]);
692
+ var onDeleteScreenCancel = React.useCallback(function () {
693
+ setDeleteScreenModalOpened(false);
694
+ }, [setDeleteScreenModalOpened]);
695
+ var dropdownItems = [!isTheme ? {
696
+ id: 'duplicate',
697
+ type: 'button',
698
+ className: 'text-left text-info',
699
+ label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
700
+ id: "IBjY5r",
701
+ defaultMessage: [{
702
+ "type": 0,
703
+ "value": "Duplicate screen"
704
+ }]
705
+ }),
706
+ onClick: onClickDuplicate
707
+ } : null, {
708
+ id: 'delete',
709
+ type: 'button',
710
+ className: 'text-left text-danger',
711
+ label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
712
+ id: "hpiKce",
713
+ defaultMessage: [{
714
+ "type": 0,
715
+ "value": "Delete screen"
716
+ }]
717
+ }),
718
+ onClick: onClickDelete
719
+ }].filter(function (it) {
720
+ return it !== null;
721
+ });
764
722
  return /*#__PURE__*/React__default["default"].createElement("div", {
765
- className: classNames__default["default"](['d-flex', 'flex-column', styles$8.container, className])
766
- }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
723
+ className: classNames__default["default"](['d-flex', 'flex-column', className])
724
+ }, screenId !== null ? /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
767
725
  compact: true,
768
726
  noWrap: true,
769
727
  withoutCollapse: true,
770
- className: classNames__default["default"](['sticky-top', styles$8.navbar])
771
- }, /*#__PURE__*/React__default["default"].createElement("strong", {
772
- className: "mb-0 mr-auto"
728
+ className: classNames__default["default"](['sticky-top', 'border-bottom', 'border-dark', styles$b.navbar])
729
+ }, /*#__PURE__*/React__default["default"].createElement(Breadcrumb, {
730
+ story: value,
731
+ url: url,
732
+ screenId: screenId,
733
+ field: fieldParams,
734
+ form: formParams,
735
+ className: "mr-auto"
736
+ }), fieldParams === null ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(SettingsButton, {
737
+ onClick: onSettingsClick
738
+ }), /*#__PURE__*/React__default["default"].createElement(components.DropdownMenu, {
739
+ items: dropdownItems,
740
+ visible: screenSettingsOpened,
741
+ align: "right",
742
+ onClickOutside: onDropdownClickOutside
743
+ })) : null) : null, /*#__PURE__*/React__default["default"].createElement("div", {
744
+ className: classNames__default["default"](['flex-grow-1', 'd-flex', 'w-100', styles$b.content])
745
+ }, screen !== null ? /*#__PURE__*/React__default["default"].createElement(reactTransitionGroup.CSSTransitionGroup, {
746
+ transitionName: transitionName,
747
+ transitionEnterTimeout: transitionTimeout,
748
+ transitionLeaveTimeout: transitionTimeout,
749
+ className: "w-100 flex-grow-1"
750
+ }, fieldParams !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
751
+ className: classNames__default["default"](['w-100', styles$b.panel]),
752
+ key: "field-".concat(fieldParams, "-").concat(formParams)
753
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenProvider, {
754
+ data: screen
755
+ }, /*#__PURE__*/React__default["default"].createElement(FieldWithContexts, {
756
+ name: fieldParams.replace(/\//g, '.'),
757
+ value: screen,
758
+ form: formParams,
759
+ className: styles$b.form,
760
+ gotoFieldForm: gotoFieldForm,
761
+ closeFieldForm: closeFieldForm,
762
+ fieldContext: fieldContext,
763
+ onChange: onScreenFormChange
764
+ }))) : /*#__PURE__*/React__default["default"].createElement("div", {
765
+ className: classNames__default["default"](['w-100', styles$b.panel]),
766
+ key: "screen-".concat(screen.id)
767
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenProvider, {
768
+ data: screen
769
+ }, /*#__PURE__*/React__default["default"].createElement(ScreenForm, {
770
+ value: screen,
771
+ className: styles$b.form,
772
+ onChange: onScreenFormChange,
773
+ gotoFieldForm: gotoFieldForm,
774
+ closeFieldForm: closeFieldForm
775
+ })))) : /*#__PURE__*/React__default["default"].createElement(components.Empty, {
776
+ className: "w-100 m-2"
773
777
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
774
- id: "jf+4Hq",
778
+ id: "QfpTKK",
775
779
  defaultMessage: [{
776
780
  "type": 0,
777
- "value": "Screens"
778
- }]
779
- })), /*#__PURE__*/React__default["default"].createElement(components.Button, {
780
- theme: "primary",
781
- size: "sm",
782
- onClick: onClickAdd,
783
- icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
784
- icon: freeSolidSvgIcons.faPlus
785
- })
786
- })), /*#__PURE__*/React__default["default"].createElement("div", {
787
- className: "flex-grow-1 d-flex w-100 p-2"
788
- }, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
789
- path: [routes.screen, routes.home],
790
- render: function render(_ref14) {
791
- var _ref14$match$params$s = _ref14.match.params.screen,
792
- screenId = _ref14$match$params$s === void 0 ? null : _ref14$match$params$s;
793
- return screens.length > 0 ? /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
794
- items: screens.map(function (it) {
795
- return {
796
- id: it.id,
797
- screen: it,
798
- href: url('screen', {
799
- screen: it.id
800
- }),
801
- active: it.id === screenId
802
- };
803
- }),
804
- isVertical: isVertical,
805
- withPreview: true,
806
- sortable: true,
807
- className: "w-100",
808
- onClickItem: onClickScreen,
809
- onOrderChange: onOrderChange
810
- }) : /*#__PURE__*/React__default["default"].createElement(components.Empty, {
811
- className: "flex-grow-1 p-2"
812
- }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
813
- theme: "primary",
814
- onClick: onClickAdd
815
- }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
816
- id: "JoWKee",
817
- defaultMessage: [{
818
- "type": 0,
819
- "value": "Create your first screen"
820
- }]
821
- })));
822
- }
823
- })), createModalOpened ? /*#__PURE__*/React__default["default"].createElement(ScreenTypesModal, {
824
- selectedTypes: isTheme ? screens.map(function (_ref15) {
825
- var type = _ref15.type;
826
- return type;
827
- }) : [],
828
- onClickScreenType: onClickScreenType,
829
- onRequestClose: onCreateModalRequestClose
781
+ "value": "Select a screen..."
782
+ }],
783
+ decription: "Indication to select a screen to view the form"
784
+ }))), deleteScreenModalOpened ? /*#__PURE__*/React__default["default"].createElement(DeleteScreenModal, {
785
+ onConfirm: onDeleteScreenConfirm,
786
+ onCancel: onDeleteScreenCancel
830
787
  }) : null);
831
788
  };
832
789
 
833
- EditorScreens.propTypes = propTypes$d;
834
- EditorScreens.defaultProps = defaultProps$d;
790
+ EditForm.propTypes = propTypes$i;
791
+ EditForm.defaultProps = defaultProps$i;
792
+
793
+ var _excluded$7 = ["components"];
794
+
795
+ var useThemeValue = function useThemeValue(value) {
796
+ var isTheme = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
797
+ var valueWithTheme = React.useMemo(function () {
798
+ if (!isTheme) {
799
+ return value;
800
+ }
801
+
802
+ var _ref = value || {};
803
+ _ref.components;
804
+ var themeValue = _objectWithoutProperties__default["default"](_ref, _excluded$7);
805
+
806
+ return value !== null ? _objectSpread__default["default"]({
807
+ theme: themeValue
808
+ }, value) : value;
809
+ }, [value, isTheme]);
810
+ return valueWithTheme;
811
+ };
835
812
 
836
813
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
837
- var propTypes$c = {
814
+ var propTypes$h = {
838
815
  color: PropTypes__default["default"].string,
839
816
  className: PropTypes__default["default"].string
840
817
  };
841
- var defaultProps$c = {
818
+ var defaultProps$h = {
842
819
  color: 'currentColor',
843
820
  className: null
844
821
  };
@@ -863,15 +840,15 @@ var DesktopIcon = function DesktopIcon(_ref) {
863
840
  }));
864
841
  };
865
842
 
866
- DesktopIcon.propTypes = propTypes$c;
867
- DesktopIcon.defaultProps = defaultProps$c;
843
+ DesktopIcon.propTypes = propTypes$h;
844
+ DesktopIcon.defaultProps = defaultProps$h;
868
845
 
869
846
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
870
- var propTypes$b = {
847
+ var propTypes$g = {
871
848
  color: PropTypes__default["default"].string,
872
849
  className: PropTypes__default["default"].string
873
850
  };
874
- var defaultProps$b = {
851
+ var defaultProps$g = {
875
852
  color: 'currentColor',
876
853
  className: null
877
854
  };
@@ -896,8 +873,8 @@ var MobileIcon = function MobileIcon(_ref) {
896
873
  }));
897
874
  };
898
875
 
899
- MobileIcon.propTypes = propTypes$b;
900
- MobileIcon.defaultProps = defaultProps$b;
876
+ MobileIcon.propTypes = propTypes$g;
877
+ MobileIcon.defaultProps = defaultProps$g;
901
878
 
902
879
  var DeviceIcons = /*#__PURE__*/Object.freeze({
903
880
  __proto__: null,
@@ -905,15 +882,15 @@ var DeviceIcons = /*#__PURE__*/Object.freeze({
905
882
  Mobile: MobileIcon
906
883
  });
907
884
 
908
- var styles$7 = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
885
+ var styles$a = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
909
886
 
910
887
  var _excluded$6 = ["device", "className", "iconComponents"];
911
- var propTypes$a = {
888
+ var propTypes$f = {
912
889
  device: PropTypes__default["default"].string.isRequired,
913
890
  iconComponents: core.PropTypes.components,
914
891
  className: PropTypes__default["default"].string
915
892
  };
916
- var defaultProps$a = {
893
+ var defaultProps$f = {
917
894
  iconComponents: DeviceIcons,
918
895
  className: null
919
896
  };
@@ -926,24 +903,24 @@ var DeviceButton = function DeviceButton(_ref) {
926
903
 
927
904
  var DeviceIcon = utils.getComponentFromName(device, iconComponents, DesktopIcon);
928
905
  return /*#__PURE__*/React__default["default"].createElement(components.Button, Object.assign({
929
- className: classNames__default["default"]([styles$7.container, _defineProperty__default["default"]({}, className, className !== null)])
906
+ className: classNames__default["default"]([styles$a.container, _defineProperty__default["default"]({}, className, className !== null)])
930
907
  }, props), /*#__PURE__*/React__default["default"].createElement(DeviceIcon, {
931
- className: styles$7.icon
908
+ className: styles$a.icon
932
909
  }));
933
910
  };
934
911
 
935
- DeviceButton.propTypes = propTypes$a;
936
- DeviceButton.defaultProps = defaultProps$a;
912
+ DeviceButton.propTypes = propTypes$f;
913
+ DeviceButton.defaultProps = defaultProps$f;
937
914
 
938
- var styles$6 = {"container":"micromag-editor-menus-devices-container","button":"micromag-editor-menus-devices-button"};
915
+ var styles$9 = {"container":"micromag-editor-menus-devices-container","button":"micromag-editor-menus-devices-button"};
939
916
 
940
917
  var _excluded$5 = ["id"];
941
- var propTypes$9 = {
918
+ var propTypes$e = {
942
919
  items: core.PropTypes.menuItems,
943
920
  className: PropTypes__default["default"].string,
944
921
  onClickItem: PropTypes__default["default"].func
945
922
  };
946
- var defaultProps$9 = {
923
+ var defaultProps$e = {
947
924
  items: [],
948
925
  className: null,
949
926
  onClickItem: null
@@ -956,7 +933,7 @@ var DevicesMenu = function DevicesMenu(_ref) {
956
933
  return /*#__PURE__*/React__default["default"].createElement(components.Tabs, {
957
934
  items: items,
958
935
  theme: "outline-secondary",
959
- className: classNames__default["default"]([styles$6.container, _defineProperty__default["default"]({}, className, className !== null)]),
936
+ className: classNames__default["default"]([styles$9.container, _defineProperty__default["default"]({}, className, className !== null)]),
960
937
  renderItemButton: function renderItemButton(item, index, props) {
961
938
  var id = item.id,
962
939
  itemProps = _objectWithoutProperties__default["default"](item, _excluded$5);
@@ -964,7 +941,7 @@ var DevicesMenu = function DevicesMenu(_ref) {
964
941
  return /*#__PURE__*/React__default["default"].createElement(DeviceButton, Object.assign({
965
942
  device: id
966
943
  }, props, itemProps, {
967
- className: styles$6.button,
944
+ className: styles$9.button,
968
945
  onClick: function onClick(e) {
969
946
  return onClickItem !== null ? onClickItem(e, item, index) : null;
970
947
  }
@@ -973,12 +950,12 @@ var DevicesMenu = function DevicesMenu(_ref) {
973
950
  });
974
951
  };
975
952
 
976
- DevicesMenu.propTypes = propTypes$9;
977
- DevicesMenu.defaultProps = defaultProps$9;
953
+ DevicesMenu.propTypes = propTypes$e;
954
+ DevicesMenu.defaultProps = defaultProps$e;
978
955
 
979
- var styles$5 = {"container":"micromag-editor-preview-container","noStory":"micromag-editor-preview-noStory","story":"micromag-editor-preview-story","inner":"micromag-editor-preview-inner","top":"micromag-editor-preview-top","bottom":"micromag-editor-preview-bottom","preview":"micromag-editor-preview-preview","viewerContainer":"micromag-editor-preview-viewerContainer","screen-medium":"micromag-editor-preview-screen-medium","withoutDevicesSizes":"micromag-editor-preview-withoutDevicesSizes"};
956
+ var styles$8 = {"container":"micromag-editor-preview-container","noStory":"micromag-editor-preview-noStory","story":"micromag-editor-preview-story","inner":"micromag-editor-preview-inner","top":"micromag-editor-preview-top","bottom":"micromag-editor-preview-bottom","preview":"micromag-editor-preview-preview","viewerContainer":"micromag-editor-preview-viewerContainer","screen-medium":"micromag-editor-preview-screen-medium","withoutDevicesSizes":"micromag-editor-preview-withoutDevicesSizes"};
980
957
 
981
- var propTypes$8 = {
958
+ var propTypes$d = {
982
959
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
983
960
  devices: core.PropTypes.devices,
984
961
  device: PropTypes__default["default"].string,
@@ -988,7 +965,7 @@ var propTypes$8 = {
988
965
  onScreenChange: PropTypes__default["default"].func,
989
966
  withoutDevicesSizes: PropTypes__default["default"].bool
990
967
  };
991
- var defaultProps$8 = {
968
+ var defaultProps$d = {
992
969
  value: null,
993
970
  devices: [{
994
971
  id: 'mobile',
@@ -1078,13 +1055,13 @@ var EditorPreview = function EditorPreview(_ref) {
1078
1055
  };
1079
1056
  }, [device, contentRect, screen, withoutDevicesSizes]);
1080
1057
  return /*#__PURE__*/React__default["default"].createElement("div", {
1081
- className: classNames__default["default"]([styles$5.container, screens.map(function (screenName) {
1082
- return styles$5["screen-".concat(screenName)];
1083
- }), (_ref3 = {}, _defineProperty__default["default"](_ref3, className, className), _defineProperty__default["default"](_ref3, styles$5.withoutDevicesSizes, withoutDevicesSizes), _ref3)])
1058
+ className: classNames__default["default"]([styles$8.container, screens.map(function (screenName) {
1059
+ return styles$8["screen-".concat(screenName)];
1060
+ }), (_ref3 = {}, _defineProperty__default["default"](_ref3, className, className), _defineProperty__default["default"](_ref3, styles$8.withoutDevicesSizes, withoutDevicesSizes), _ref3)])
1084
1061
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1085
- className: styles$5.inner
1062
+ className: styles$8.inner
1086
1063
  }, !withoutDevicesSizes ? /*#__PURE__*/React__default["default"].createElement("div", {
1087
- className: styles$5.top
1064
+ className: styles$8.top
1088
1065
  }, /*#__PURE__*/React__default["default"].createElement(DevicesMenu, {
1089
1066
  items: devices.map(function (it) {
1090
1067
  return _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
@@ -1093,12 +1070,12 @@ var EditorPreview = function EditorPreview(_ref) {
1093
1070
  }),
1094
1071
  onClickItem: onClickDeviceItem
1095
1072
  })) : null, /*#__PURE__*/React__default["default"].createElement("div", {
1096
- className: styles$5.bottom
1073
+ className: styles$8.bottom
1097
1074
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1098
- className: styles$5.inner,
1075
+ className: styles$8.inner,
1099
1076
  ref: bottomRef
1100
1077
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1101
- className: styles$5.preview,
1078
+ className: styles$8.preview,
1102
1079
  style: previewStyle
1103
1080
  }, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1104
1081
  path: [routes.screen, routes.home],
@@ -1106,12 +1083,12 @@ var EditorPreview = function EditorPreview(_ref) {
1106
1083
  var _ref4$match$params$sc = _ref4.match.params.screen,
1107
1084
  screenId = _ref4$match$params$sc === void 0 ? null : _ref4$match$params$sc;
1108
1085
  return /*#__PURE__*/React__default["default"].createElement("div", {
1109
- className: styles$5.viewerContainer
1086
+ className: styles$8.viewerContainer
1110
1087
  }, /*#__PURE__*/React__default["default"].createElement(viewer.Viewer, {
1111
1088
  story: valueParsed,
1112
1089
  storyIsParsed: true,
1113
1090
  screen: screenId,
1114
- className: styles$5.story,
1091
+ className: styles$8.story,
1115
1092
  theme: viewerTheme,
1116
1093
  interactions: null,
1117
1094
  renderContext: "edit",
@@ -1121,678 +1098,1794 @@ var EditorPreview = function EditorPreview(_ref) {
1121
1098
  }))))));
1122
1099
  };
1123
1100
 
1124
- EditorPreview.propTypes = propTypes$8;
1125
- EditorPreview.defaultProps = defaultProps$8;
1101
+ EditorPreview.propTypes = propTypes$d;
1102
+ EditorPreview.defaultProps = defaultProps$d;
1126
1103
 
1127
- var _excluded$4 = ["components"];
1104
+ var styles$7 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
1128
1105
 
1129
- var deleteScreen = function deleteScreen(story, screenId) {
1130
- var _ref = story || {},
1131
- _ref$components = _ref.components,
1132
- components = _ref$components === void 0 ? [] : _ref$components,
1133
- currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$4);
1106
+ var styles$6 = {"container":"micromag-editor-menus-screens-container","placeholder":"micromag-editor-menus-screens-placeholder","preview":"micromag-editor-menus-screens-preview","screen":"micromag-editor-menus-screens-screen","item":"micromag-editor-menus-screens-item","items":"micromag-editor-menus-screens-items","button":"micromag-editor-menus-screens-button","settings":"micromag-editor-menus-screens-settings","isVertical":"micromag-editor-menus-screens-isVertical","noWrap":"micromag-editor-menus-screens-noWrap","withPlaceholder":"micromag-editor-menus-screens-withPlaceholder"};
1134
1107
 
1135
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
1136
- components: components.filter(function (_ref2) {
1137
- var id = _ref2.id;
1138
- return id !== screenId;
1139
- })
1108
+ var styles$5 = {"button":"micromag-editor-buttons-screen-with-preview-button","placeholder":"micromag-editor-buttons-screen-with-preview-placeholder","preview":"micromag-editor-buttons-screen-with-preview-preview","screen":"micromag-editor-buttons-screen-with-preview-screen"};
1109
+
1110
+ var styles$4 = {"container":"micromag-editor-buttons-screen-container","button":"micromag-editor-buttons-screen-button","border":"micromag-editor-buttons-screen-border","screen":"micromag-editor-buttons-screen-screen","inner":"micromag-editor-buttons-screen-inner","icon":"micromag-editor-buttons-screen-icon","label":"micromag-editor-buttons-screen-label","active":"micromag-editor-buttons-screen-active"};
1111
+
1112
+ var propTypes$c = {
1113
+ active: PropTypes__default["default"].bool,
1114
+ id: PropTypes__default["default"].string,
1115
+ href: PropTypes__default["default"].string,
1116
+ label: core.PropTypes.label,
1117
+ icon: PropTypes__default["default"].node,
1118
+ title: PropTypes__default["default"].string,
1119
+ onClick: PropTypes__default["default"].func,
1120
+ children: PropTypes__default["default"].node,
1121
+ refButton: PropTypes__default["default"].shape({
1122
+ current: PropTypes__default["default"].any // eslint-disable-line
1123
+
1124
+ }),
1125
+ className: PropTypes__default["default"].string
1126
+ };
1127
+ var defaultProps$c = {
1128
+ active: false,
1129
+ id: null,
1130
+ href: null,
1131
+ label: null,
1132
+ icon: null,
1133
+ title: null,
1134
+ onClick: null,
1135
+ children: null,
1136
+ refButton: null,
1137
+ className: null
1138
+ };
1139
+
1140
+ var ScreenButton = function ScreenButton(_ref) {
1141
+ var _ref2;
1142
+
1143
+ var active = _ref.active,
1144
+ id = _ref.id,
1145
+ href = _ref.href,
1146
+ className = _ref.className,
1147
+ label = _ref.label,
1148
+ icon = _ref.icon,
1149
+ children = _ref.children,
1150
+ title = _ref.title,
1151
+ onClick = _ref.onClick,
1152
+ refButton = _ref.refButton;
1153
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1154
+ className: classNames__default["default"]([styles$4.container, 'rounded', (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$4.active, active), _defineProperty__default["default"](_ref2, className, className !== null), _ref2)])
1155
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1156
+ className: styles$4.screen
1157
+ }, children !== null ? children : /*#__PURE__*/React__default["default"].createElement("div", {
1158
+ className: styles$4.inner
1159
+ }, icon !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1160
+ className: styles$4.icon
1161
+ }, icon) : null, label !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1162
+ className: styles$4.label
1163
+ }, label) : null)), /*#__PURE__*/React__default["default"].createElement(components.Button, {
1164
+ className: styles$4.button,
1165
+ withoutStyle: true,
1166
+ id: id,
1167
+ href: href,
1168
+ title: title,
1169
+ onClick: onClick,
1170
+ refButton: refButton
1171
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
1172
+ className: classNames__default["default"]([styles$4.border, 'rounded'])
1173
+ })));
1174
+ };
1175
+
1176
+ ScreenButton.propTypes = propTypes$c;
1177
+ ScreenButton.defaultProps = defaultProps$c;
1178
+ var ScreenButton$1 = /*#__PURE__*/React__default["default"].forwardRef(function (props, ref) {
1179
+ return /*#__PURE__*/React__default["default"].createElement(ScreenButton, Object.assign({}, props, {
1180
+ refButton: ref
1181
+ }));
1182
+ });
1183
+
1184
+ var propTypes$b = {
1185
+ screen: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
1186
+ index: PropTypes__default["default"].number.isRequired,
1187
+ title: PropTypes__default["default"].string,
1188
+ previewStyle: PropTypes__default["default"].shape({
1189
+ width: PropTypes__default["default"].number,
1190
+ height: PropTypes__default["default"].number
1191
+ }),
1192
+ withPreview: PropTypes__default["default"].bool,
1193
+ withPlaceholder: PropTypes__default["default"].bool,
1194
+ onClick: PropTypes__default["default"].func,
1195
+ onClickItem: PropTypes__default["default"].func,
1196
+ buttonClassName: PropTypes__default["default"].string,
1197
+ className: PropTypes__default["default"].string
1198
+ };
1199
+ var defaultProps$b = {
1200
+ screen: null,
1201
+ title: null,
1202
+ previewStyle: null,
1203
+ withPreview: true,
1204
+ withPlaceholder: false,
1205
+ onClick: null,
1206
+ onClickItem: null,
1207
+ buttonClassName: null,
1208
+ className: null
1209
+ };
1210
+
1211
+ var ScreenWithPreview = function ScreenWithPreview(_ref) {
1212
+ var _ref3;
1213
+
1214
+ var screen = _ref.screen,
1215
+ index = _ref.index,
1216
+ title = _ref.title,
1217
+ className = _ref.className,
1218
+ buttonClassName = _ref.buttonClassName,
1219
+ previewStyle = _ref.previewStyle,
1220
+ _onClick = _ref.onClick,
1221
+ onClickItem = _ref.onClickItem,
1222
+ withPreview = _ref.withPreview,
1223
+ withPlaceholder = _ref.withPlaceholder;
1224
+ var intl = reactIntl.useIntl();
1225
+
1226
+ var _ref2 = previewStyle || {},
1227
+ _ref2$width = _ref2.width,
1228
+ width = _ref2$width === void 0 ? null : _ref2$width,
1229
+ _ref2$height = _ref2.height,
1230
+ height = _ref2$height === void 0 ? null : _ref2$height;
1231
+
1232
+ return /*#__PURE__*/React__default["default"].createElement(ScreenButton$1, Object.assign({}, screen, {
1233
+ className: classNames__default["default"]([styles$5.button, (_ref3 = {}, _defineProperty__default["default"](_ref3, buttonClassName, buttonClassName !== null), _defineProperty__default["default"](_ref3, className, className !== null), _ref3)]),
1234
+ title: utils.isMessage(title) ? intl.formatMessage(title) : null,
1235
+ onClick: function onClick() {
1236
+ if (_onClick !== null) {
1237
+ _onClick(screen, index);
1238
+ }
1239
+
1240
+ if (onClickItem !== null) {
1241
+ onClickItem(screen, index);
1242
+ }
1243
+ }
1244
+ }), withPreview && !withPlaceholder ? /*#__PURE__*/React__default["default"].createElement("div", {
1245
+ className: styles$5.preview,
1246
+ style: previewStyle
1247
+ }, /*#__PURE__*/React__default["default"].createElement(components.ScreenPreview, {
1248
+ screen: screen,
1249
+ width: width,
1250
+ height: height,
1251
+ className: styles$5.screen
1252
+ })) : null, withPlaceholder && !withPreview ? /*#__PURE__*/React__default["default"].createElement("div", {
1253
+ className: styles$5.placeholder,
1254
+ style: previewStyle
1255
+ }, /*#__PURE__*/React__default["default"].createElement(components.ScreenPlaceholder, {
1256
+ screen: screen,
1257
+ width: width,
1258
+ height: height,
1259
+ className: styles$5.screen
1260
+ })) : null);
1261
+ };
1262
+
1263
+ ScreenWithPreview.propTypes = propTypes$b;
1264
+ ScreenWithPreview.defaultProps = defaultProps$b;
1265
+
1266
+ var iOS = /iPad|iPhone|iPod/.test(navigator.platform);
1267
+
1268
+ function getDragDepth(offset, indentationWidth) {
1269
+ return Math.round(offset / indentationWidth);
1270
+ }
1271
+
1272
+ function getMaxDepth(_ref) {
1273
+ var previousItem = _ref.previousItem;
1274
+
1275
+ if (previousItem) {
1276
+ // return previousItem.depth + 1;
1277
+ return 1;
1278
+ }
1279
+
1280
+ return 0;
1281
+ }
1282
+
1283
+ function getMinDepth(_ref2) {
1284
+ var nextItem = _ref2.nextItem;
1285
+
1286
+ if (nextItem) {
1287
+ // return nextItem.depth;
1288
+ return 0;
1289
+ }
1290
+
1291
+ return 0;
1292
+ }
1293
+
1294
+ function getProjection(items, activeId, overId, dragOffset, indentationWidth) {
1295
+ var overItemIndex = items.findIndex(function (_ref3) {
1296
+ var id = _ref3.id;
1297
+ return id === overId;
1298
+ });
1299
+ var activeItemIndex = items.findIndex(function (_ref4) {
1300
+ var id = _ref4.id;
1301
+ return id === activeId;
1302
+ });
1303
+ var activeItem = items[activeItemIndex];
1304
+ var newItems = sortable.arrayMove(items, activeItemIndex, overItemIndex);
1305
+ var previousItem = newItems[overItemIndex - 1];
1306
+ var nextItem = newItems[overItemIndex + 1];
1307
+ var dragDepth = getDragDepth(dragOffset, indentationWidth);
1308
+ var projectedDepth = activeItem.depth + dragDepth;
1309
+ var maxDepth = getMaxDepth({
1310
+ previousItem: previousItem
1311
+ });
1312
+ var minDepth = getMinDepth({
1313
+ nextItem: nextItem
1314
+ });
1315
+ var depth = projectedDepth;
1316
+
1317
+ if (projectedDepth >= maxDepth) {
1318
+ depth = maxDepth;
1319
+ } else if (projectedDepth < minDepth) {
1320
+ depth = minDepth;
1321
+ }
1322
+
1323
+ function getParentId() {
1324
+ var _newItems$slice$rever;
1325
+
1326
+ if (depth === 0 || !previousItem) {
1327
+ return null;
1328
+ }
1329
+
1330
+ if (depth === previousItem.depth) {
1331
+ return previousItem.parentId;
1332
+ }
1333
+
1334
+ if (depth > previousItem.depth) {
1335
+ return previousItem.id;
1336
+ }
1337
+
1338
+ var newParent = (_newItems$slice$rever = newItems.slice(0, overItemIndex).reverse().find(function (item) {
1339
+ return item.depth === depth;
1340
+ })) === null || _newItems$slice$rever === void 0 ? void 0 : _newItems$slice$rever.parentId;
1341
+ return newParent !== null && newParent !== void 0 ? newParent : null;
1342
+ }
1343
+
1344
+ return {
1345
+ depth: depth,
1346
+ maxDepth: maxDepth,
1347
+ minDepth: minDepth,
1348
+ parentId: getParentId()
1349
+ };
1350
+ }
1351
+
1352
+ function flatten(items) {
1353
+ var parentId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1354
+ var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1355
+ return items.reduce(function (acc, item, index) {
1356
+ return [].concat(_toConsumableArray__default["default"](acc), [_objectSpread__default["default"](_objectSpread__default["default"]({}, item), {}, {
1357
+ parentId: item.parentId || parentId,
1358
+ depth: item.parentId ? 1 : 0,
1359
+ index: index
1360
+ })], _toConsumableArray__default["default"](flatten(item.children || [], item.id, depth + 1)));
1361
+ }, []);
1362
+ }
1363
+
1364
+ function flattenTree(items) {
1365
+ return flatten(items);
1366
+ }
1367
+ function buildTree(flattenedItems) {
1368
+ var items = flattenedItems.map(function (item) {
1369
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, item), {}, {
1370
+ children: []
1371
+ });
1372
+ });
1373
+ var nodeList = items.reduce(function (acc, item) {
1374
+ var _item$parentId = item.parentId,
1375
+ parentId = _item$parentId === void 0 ? null : _item$parentId;
1376
+
1377
+ if (parentId) {
1378
+ var found = false;
1379
+ var newList = acc.map(function (it) {
1380
+ if (it.id === parentId) {
1381
+ found = true;
1382
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
1383
+ children: [].concat(_toConsumableArray__default["default"](it.children), [_objectSpread__default["default"]({}, item)])
1384
+ });
1385
+ }
1386
+
1387
+ return it;
1388
+ });
1389
+
1390
+ if (found) {
1391
+ return newList;
1392
+ }
1393
+
1394
+ acc.push(_objectSpread__default["default"](_objectSpread__default["default"]({}, items.find(function (_ref5) {
1395
+ var id = _ref5.id;
1396
+ return id === parentId;
1397
+ }) || null), {}, {
1398
+ children: [item]
1399
+ }));
1400
+ return acc;
1401
+ }
1402
+
1403
+ acc.push(item);
1404
+ return acc;
1405
+ }, []);
1406
+ return nodeList;
1407
+ }
1408
+ function findItemDeep(items, itemId) {
1409
+ for (var i = 0; i < items.length - 1; i += 1) {
1410
+ var item = items[i] || {};
1411
+ var id = item.id,
1412
+ _item$children = item.children,
1413
+ children = _item$children === void 0 ? [] : _item$children;
1414
+
1415
+ if (id === itemId) {
1416
+ return item;
1417
+ }
1418
+
1419
+ if (children.length) {
1420
+ var child = findItemDeep(children, itemId);
1421
+
1422
+ if (child) {
1423
+ return child;
1424
+ }
1425
+ }
1426
+ }
1427
+
1428
+ return undefined;
1429
+ }
1430
+ function removeItem(items, id) {
1431
+ var newItems = [];
1432
+
1433
+ for (var i = 0; i < items.length - 1; i += 1) {
1434
+ var item = items[i] || {};
1435
+
1436
+ if (item.id === id) {
1437
+ // eslint-disable-next-line no-continue
1438
+ continue;
1439
+ }
1440
+
1441
+ if (item.children.length) {
1442
+ item.children = removeItem(item.children || [], id);
1443
+ }
1444
+
1445
+ newItems.push(item);
1446
+ }
1447
+
1448
+ return newItems;
1449
+ }
1450
+ function setProperty(items, id, property, setter) {
1451
+ // const item = items[i];
1452
+ // if (item.id === id) {
1453
+ // item[property] = setter(item[property]);
1454
+ // newItems.push({ ...item });
1455
+ // } else {
1456
+ // const { children = [] } = item;
1457
+ // let newChildren = [];
1458
+ // if (children.length > 0) {
1459
+ // newChildren = setProperty(children, id, property, setter);
1460
+ // }
1461
+ // newItems.push({ ...item, children: newChildren });
1462
+ // }
1463
+ // }
1464
+
1465
+ var _iterator = _createForOfIteratorHelper__default["default"](items),
1466
+ _step;
1467
+
1468
+ try {
1469
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1470
+ var item = _step.value;
1471
+
1472
+ if (item.id === id) {
1473
+ item[property] = setter(item[property]);
1474
+ continue;
1475
+ }
1476
+
1477
+ var _item$children2 = item.children,
1478
+ children = _item$children2 === void 0 ? [] : _item$children2;
1479
+
1480
+ if (children.length) {
1481
+ children = setProperty(children, id, property, setter);
1482
+ }
1483
+ } // console.log('fubar', items, newItems);
1484
+ // return newItems;
1485
+
1486
+ } catch (err) {
1487
+ _iterator.e(err);
1488
+ } finally {
1489
+ _iterator.f();
1490
+ }
1491
+
1492
+ return _toConsumableArray__default["default"](items);
1493
+ }
1494
+
1495
+ function countChildren(items) {
1496
+ var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1497
+ return items.reduce(function (acc, _ref7) {
1498
+ var _ref7$children = _ref7.children,
1499
+ children = _ref7$children === void 0 ? [] : _ref7$children;
1500
+
1501
+ if (children.length) {
1502
+ return countChildren(children, acc + 1);
1503
+ }
1504
+
1505
+ return acc + 1;
1506
+ }, count);
1507
+ }
1508
+
1509
+ function getChildCount(items, id) {
1510
+ if (!id) {
1511
+ return 0;
1512
+ }
1513
+
1514
+ var item = findItemDeep(items, id);
1515
+ return item ? countChildren(item.children || []) : 0;
1516
+ }
1517
+ function removeChildrenOf(items, ids) {
1518
+ var excludeParentIds = _toConsumableArray__default["default"](ids);
1519
+
1520
+ return items.filter(function (item) {
1521
+ if (item.parentId && excludeParentIds.includes(item.parentId)) {
1522
+ var _item$children3 = item.children,
1523
+ children = _item$children3 === void 0 ? [] : _item$children3;
1524
+
1525
+ if (children.length) {
1526
+ excludeParentIds.push(item.id);
1527
+ }
1528
+
1529
+ return false;
1530
+ }
1531
+
1532
+ return true;
1140
1533
  });
1534
+ }
1535
+
1536
+ var directions = [core$1.KeyboardCode.Down, core$1.KeyboardCode.Right, core$1.KeyboardCode.Up, core$1.KeyboardCode.Left];
1537
+ var horizontal = [core$1.KeyboardCode.Left, core$1.KeyboardCode.Right];
1538
+ var sortableTreeKeyboardCoordinates = function sortableTreeKeyboardCoordinates(context, indentationWidth) {
1539
+ return function (event, _ref) {
1540
+ var currentCoordinates = _ref.currentCoordinates,
1541
+ _ref$context = _ref.context,
1542
+ active = _ref$context.active,
1543
+ over = _ref$context.over,
1544
+ collisionRect = _ref$context.collisionRect,
1545
+ droppableContainers = _ref$context.droppableContainers;
1546
+
1547
+ if (directions.includes(event.code)) {
1548
+ var _droppableContainers$;
1549
+
1550
+ if (!active || !collisionRect) {
1551
+ return;
1552
+ }
1553
+
1554
+ event.preventDefault();
1555
+ var _context$current = context.current,
1556
+ items = _context$current.items,
1557
+ offset = _context$current.offset;
1558
+
1559
+ if (horizontal.includes(event.code) && over !== null && over !== void 0 && over.id) {
1560
+ var _getProjection = getProjection(items, active.id, over.id, offset, indentationWidth),
1561
+ depth = _getProjection.depth,
1562
+ maxDepth = _getProjection.maxDepth,
1563
+ minDepth = _getProjection.minDepth;
1564
+
1565
+ switch (event.code) {
1566
+ case core$1.KeyboardCode.Left:
1567
+ if (depth > minDepth) {
1568
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentCoordinates), {}, {
1569
+ x: currentCoordinates.x - indentationWidth
1570
+ });
1571
+ }
1572
+
1573
+ break;
1574
+
1575
+ case core$1.KeyboardCode.Right:
1576
+ if (depth < maxDepth) {
1577
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentCoordinates), {}, {
1578
+ x: currentCoordinates.x + indentationWidth
1579
+ });
1580
+ }
1581
+
1582
+ break;
1583
+
1584
+ default:
1585
+ return undefined;
1586
+ }
1587
+
1588
+ return undefined;
1589
+ }
1590
+
1591
+ var containers = [];
1592
+ var overRect = over !== null && over !== void 0 && over.id ? (_droppableContainers$ = droppableContainers.get(over.id)) === null || _droppableContainers$ === void 0 ? void 0 : _droppableContainers$.rect.current : undefined;
1593
+
1594
+ if (overRect) {
1595
+ droppableContainers.forEach(function (container) {
1596
+ if (container !== null && container !== void 0 && container.disabled) {
1597
+ return;
1598
+ }
1599
+
1600
+ var rect = container === null || container === void 0 ? void 0 : container.rect.current;
1601
+
1602
+ if (!rect) {
1603
+ return;
1604
+ }
1605
+
1606
+ switch (event.code) {
1607
+ case core$1.KeyboardCode.Down:
1608
+ if (overRect.top < rect.top) {
1609
+ containers.push(container);
1610
+ }
1611
+
1612
+ break;
1613
+
1614
+ case core$1.KeyboardCode.Up:
1615
+ if (overRect.top > rect.top) {
1616
+ containers.push(container);
1617
+ }
1618
+
1619
+ break;
1620
+
1621
+ }
1622
+ });
1623
+ }
1624
+
1625
+ var collisions = core$1.closestCorners({
1626
+ active: active,
1627
+ collisionRect: collisionRect,
1628
+ pointerCoordinates: null,
1629
+ droppableContainers: containers
1630
+ });
1631
+ var closestId = core$1.getFirstCollision(collisions, 'id');
1632
+
1633
+ if (closestId && over !== null && over !== void 0 && over.id) {
1634
+ var _droppableContainers$2, _droppableContainers$3;
1635
+
1636
+ var newNode = (_droppableContainers$2 = droppableContainers.get(closestId)) === null || _droppableContainers$2 === void 0 ? void 0 : _droppableContainers$2.node.current;
1637
+ var activeNodeRect = (_droppableContainers$3 = droppableContainers.get(active.id)) === null || _droppableContainers$3 === void 0 ? void 0 : _droppableContainers$3.rect.current;
1638
+
1639
+ if (newNode && activeNodeRect) {
1640
+ var newRect = core$1.getClientRect(newNode, {
1641
+ ignoreTransform: true
1642
+ });
1643
+ var newItem = items.find(function (_ref2) {
1644
+ var id = _ref2.id;
1645
+ return id === closestId;
1646
+ });
1647
+ var activeItem = items.find(function (_ref3) {
1648
+ var id = _ref3.id;
1649
+ return id === active.id;
1650
+ });
1651
+
1652
+ if (newItem && activeItem) {
1653
+ var _getProjection2 = getProjection(items, active.id, closestId, (newItem.depth - activeItem.depth) * indentationWidth, indentationWidth),
1654
+ _depth = _getProjection2.depth;
1655
+
1656
+ var topOffset = newRect.top > activeNodeRect.top ? Math.abs(activeNodeRect.height - newRect.height) : 0;
1657
+ var newCoordinates = {
1658
+ x: newRect.left + _depth * indentationWidth,
1659
+ y: newRect.top + topOffset
1660
+ };
1661
+ return newCoordinates;
1662
+ }
1663
+ }
1664
+ }
1665
+ }
1666
+
1667
+ return undefined;
1668
+ };
1141
1669
  };
1142
1670
 
1143
- var _excluded$3 = ["components"];
1671
+ var styles$3 = {"wrapper":"micromag-editor-sortable-tree-item-actions-wrapper","inner":"micromag-editor-sortable-tree-item-actions-inner","button":"micromag-editor-sortable-tree-item-actions-button","withChildren":"micromag-editor-sortable-tree-item-actions-withChildren","clone":"micromag-editor-sortable-tree-item-actions-clone","ghost":"micromag-editor-sortable-tree-item-actions-ghost","indicator":"micromag-editor-sortable-tree-item-actions-indicator","handle":"micromag-editor-sortable-tree-item-actions-handle","text":"micromag-editor-sortable-tree-item-actions-text","collapsedCount":"micromag-editor-sortable-tree-item-actions-collapsedCount","count":"micromag-editor-sortable-tree-item-actions-count","disableInteraction":"micromag-editor-sortable-tree-item-actions-disableInteraction","Count":"micromag-editor-sortable-tree-item-actions-Count","Text":"micromag-editor-sortable-tree-item-actions-Text","disableSelection":"micromag-editor-sortable-tree-item-actions-disableSelection","collapse":"micromag-editor-sortable-tree-item-actions-collapse","collapsed":"micromag-editor-sortable-tree-item-actions-collapsed","children":"micromag-editor-sortable-tree-item-actions-children"};
1144
1672
 
1145
- var duplicateScreen = function duplicateScreen(story, screenId) {
1146
- var _ref = story || {},
1147
- _ref$components = _ref.components,
1148
- components = _ref$components === void 0 ? [] : _ref$components,
1149
- currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$3);
1673
+ var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "children"];
1674
+ var propTypes$a = {
1675
+ childCount: PropTypes__default["default"].number,
1676
+ clone: PropTypes__default["default"].bool,
1677
+ collapsed: PropTypes__default["default"].bool,
1678
+ depth: PropTypes__default["default"].number.isRequired,
1679
+ disableInteraction: PropTypes__default["default"].bool,
1680
+ disableSelection: PropTypes__default["default"].bool,
1681
+ ghost: PropTypes__default["default"].bool,
1682
+ // eslint-disable-next-line react/forbid-prop-types
1683
+ handleProps: PropTypes__default["default"].any,
1684
+ indicator: PropTypes__default["default"].bool,
1685
+ indentationWidth: PropTypes__default["default"].number.isRequired,
1686
+ value: PropTypes__default["default"].string,
1687
+ onCollapse: PropTypes__default["default"].func,
1688
+ onRemove: PropTypes__default["default"].func,
1689
+ onClick: PropTypes__default["default"].func,
1690
+ // eslint-disable-next-line react/forbid-prop-types
1691
+ wrapperRef: PropTypes__default["default"].any,
1692
+ style: PropTypes__default["default"].shape({
1693
+ width: PropTypes__default["default"].number.isRequired,
1694
+ height: PropTypes__default["default"].number.isRequired,
1695
+ transform: PropTypes__default["default"].string.isRequired
1696
+ }),
1697
+ showId: PropTypes__default["default"].bool,
1698
+ children: PropTypes__default["default"].node
1699
+ };
1700
+ var defaultProps$a = {
1701
+ childCount: null,
1702
+ clone: false,
1703
+ collapsed: false,
1704
+ disableInteraction: false,
1705
+ disableSelection: false,
1706
+ ghost: false,
1707
+ handleProps: null,
1708
+ indicator: false,
1709
+ value: null,
1710
+ onCollapse: null,
1711
+ onRemove: null,
1712
+ onClick: null,
1713
+ wrapperRef: null,
1714
+ style: null,
1715
+ showId: false,
1716
+ children: null
1717
+ };
1718
+ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1719
+ var _ref2;
1720
+
1721
+ var childCount = _ref.childCount,
1722
+ clone = _ref.clone,
1723
+ depth = _ref.depth,
1724
+ disableSelection = _ref.disableSelection,
1725
+ disableInteraction = _ref.disableInteraction,
1726
+ ghost = _ref.ghost,
1727
+ handleProps = _ref.handleProps,
1728
+ indentationWidth = _ref.indentationWidth,
1729
+ indicator = _ref.indicator,
1730
+ collapsed = _ref.collapsed,
1731
+ onCollapse = _ref.onCollapse,
1732
+ onRemove = _ref.onRemove,
1733
+ onClick = _ref.onClick,
1734
+ style = _ref.style,
1735
+ value = _ref.value,
1736
+ wrapperRef = _ref.wrapperRef,
1737
+ showId = _ref.showId,
1738
+ children = _ref.children,
1739
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$4);
1740
+
1741
+ return /*#__PURE__*/React__default["default"].createElement("li", Object.assign({
1742
+ className: classNames__default["default"]([styles$3.wrapper, (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$3.clone, clone), _defineProperty__default["default"](_ref2, styles$3.ghost, ghost), _defineProperty__default["default"](_ref2, styles$3.indicator, indicator), _defineProperty__default["default"](_ref2, styles$3.disableSelection, disableSelection), _defineProperty__default["default"](_ref2, styles$3.disableInteraction, disableInteraction), _defineProperty__default["default"](_ref2, styles$3.withChildren, onCollapse !== null), _ref2)]),
1743
+ ref: wrapperRef,
1744
+ style: _objectSpread__default["default"]({
1745
+ marginLeft: "".concat(indentationWidth * depth, "px")
1746
+ }, style)
1747
+ }, props), /*#__PURE__*/React__default["default"].createElement("div", {
1748
+ className: styles$3.inner,
1749
+ ref: ref,
1750
+ style: {
1751
+ width: style.width,
1752
+ height: style.height
1753
+ }
1754
+ }, /*#__PURE__*/React__default["default"].createElement("button", Object.assign({
1755
+ className: classNames__default["default"]([styles$3.button, styles$3.handle]),
1756
+ type: "button"
1757
+ }, handleProps), /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1758
+ icon: freeSolidSvgIcons.faGripLines
1759
+ })), /*#__PURE__*/React__default["default"].createElement("button", {
1760
+ className: classNames__default["default"]([styles$3.button, styles$3.full]),
1761
+ type: "button",
1762
+ onClick: onClick,
1763
+ style: {
1764
+ width: style.width,
1765
+ height: style.height
1766
+ }
1767
+ }), showId ? /*#__PURE__*/React__default["default"].createElement("span", {
1768
+ className: styles$3.text
1769
+ }, value) : null, !clone && onRemove ? /*#__PURE__*/React__default["default"].createElement("button", {
1770
+ type: "button",
1771
+ onClick: onRemove
1772
+ }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1773
+ icon: freeSolidSvgIcons.faTimes
1774
+ })) : null, clone && childCount && childCount > 1 ? /*#__PURE__*/React__default["default"].createElement("span", {
1775
+ className: styles$3.count
1776
+ }, childCount) : null, onCollapse && childCount !== null && childCount > 0 ? /*#__PURE__*/React__default["default"].createElement("span", {
1777
+ className: styles$3.collapsedCount
1778
+ }, childCount) : null, onCollapse && depth === 0 ? /*#__PURE__*/React__default["default"].createElement("button", {
1779
+ type: "button",
1780
+ onClick: onCollapse,
1781
+ className: classNames__default["default"](styles$3.button, styles$3.collapse, collapsed && styles$3.collapsed),
1782
+ style: {
1783
+ width: style.width
1784
+ }
1785
+ }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1786
+ icon: freeSolidSvgIcons.faAngleDown
1787
+ })) : null), /*#__PURE__*/React__default["default"].createElement("div", {
1788
+ className: styles$3.children
1789
+ }, children));
1790
+ });
1791
+ SortableTreeItemActions.propTypes = propTypes$a;
1792
+ SortableTreeItemActions.defaultProps = defaultProps$a;
1793
+
1794
+ var _excluded$3 = ["id", "depth", "component", "screenValue", "style", "onCollapse", "onClick"];
1795
+ var propTypes$9 = {
1796
+ id: PropTypes__default["default"].string.isRequired,
1797
+ depth: PropTypes__default["default"].number.isRequired,
1798
+ component: PropTypes__default["default"].func,
1799
+ // eslint-disable-next-line react/forbid-prop-types
1800
+ screenValue: PropTypes__default["default"].object,
1801
+ style: PropTypes__default["default"].shape({
1802
+ width: PropTypes__default["default"].number.isRequired,
1803
+ height: PropTypes__default["default"].number.isRequired,
1804
+ scaledWidth: PropTypes__default["default"].number.isRequired,
1805
+ scaledHeight: PropTypes__default["default"].number.isRequired,
1806
+ transform: PropTypes__default["default"].string.isRequired,
1807
+ scale: PropTypes__default["default"].number.isRequired
1808
+ }),
1809
+ onCollapse: PropTypes__default["default"].func,
1810
+ onClick: PropTypes__default["default"].func
1811
+ };
1812
+ var defaultProps$9 = {
1813
+ component: null,
1814
+ screenValue: null,
1815
+ style: null,
1816
+ onCollapse: null,
1817
+ onClick: null
1818
+ };
1819
+
1820
+ var animateLayoutChanges = function animateLayoutChanges(_ref) {
1821
+ var isSorting = _ref.isSorting,
1822
+ wasDragging = _ref.wasDragging;
1823
+ return !(isSorting || wasDragging);
1824
+ };
1825
+
1826
+ var SortableTreeItem = function SortableTreeItem(_ref2) {
1827
+ var id = _ref2.id,
1828
+ depth = _ref2.depth,
1829
+ Component = _ref2.component,
1830
+ screenValue = _ref2.screenValue,
1831
+ itemStyle = _ref2.style,
1832
+ onCollapse = _ref2.onCollapse,
1833
+ onClick = _ref2.onClick,
1834
+ props = _objectWithoutProperties__default["default"](_ref2, _excluded$3);
1835
+
1836
+ var _useSortable = sortable.useSortable({
1837
+ id: id,
1838
+ animateLayoutChanges: animateLayoutChanges
1839
+ }),
1840
+ attributes = _useSortable.attributes,
1841
+ isDragging = _useSortable.isDragging,
1842
+ isSorting = _useSortable.isSorting,
1843
+ listeners = _useSortable.listeners,
1844
+ setDraggableNodeRef = _useSortable.setDraggableNodeRef,
1845
+ setDroppableNodeRef = _useSortable.setDroppableNodeRef,
1846
+ transform = _useSortable.transform,
1847
+ transition = _useSortable.transition;
1848
+
1849
+ var hasCollapse = onCollapse !== null;
1850
+ var _itemStyle$scaledWidt = itemStyle.scaledWidth,
1851
+ scaledWidth = _itemStyle$scaledWidt === void 0 ? 100 : _itemStyle$scaledWidt,
1852
+ _itemStyle$scaledHeig = itemStyle.scaledHeight,
1853
+ scaledHeight = _itemStyle$scaledHeig === void 0 ? 66 : _itemStyle$scaledHeig,
1854
+ _itemStyle$scale = itemStyle.scale,
1855
+ scale = _itemStyle$scale === void 0 ? 1 : _itemStyle$scale;
1856
+ var extraHeight = hasCollapse ? 30 : 0;
1857
+ var actionsStyle = {
1858
+ width: depth === 0 ? scaledWidth : scaledWidth * 0.75,
1859
+ height: depth === 0 ? scaledHeight + extraHeight : scaledHeight * 0.75,
1860
+ transform: utilities.CSS.Translate.toString(transform),
1861
+ transition: transition
1862
+ };
1863
+ var previewStyle = {
1864
+ width: itemStyle.width,
1865
+ height: itemStyle.height,
1866
+ transform: depth === 0 ? itemStyle.transform : "scale(".concat(scale * 0.75, ", ").concat(scale * 0.75, ")"),
1867
+ transformOrigin: 'top left'
1868
+ };
1869
+ return /*#__PURE__*/React__default["default"].createElement(SortableTreeItemActions, Object.assign({
1870
+ ref: setDraggableNodeRef,
1871
+ wrapperRef: setDroppableNodeRef,
1872
+ style: actionsStyle,
1873
+ depth: depth,
1874
+ ghost: isDragging,
1875
+ disableSelection: iOS,
1876
+ disableInteraction: isSorting,
1877
+ handleProps: _objectSpread__default["default"](_objectSpread__default["default"]({}, attributes), listeners),
1878
+ onCollapse: onCollapse,
1879
+ onClick: onClick
1880
+ }, props), Component !== null ? /*#__PURE__*/React__default["default"].createElement(Component, Object.assign({}, screenValue, {
1881
+ previewStyle: previewStyle
1882
+ })) : null);
1883
+ };
1884
+ SortableTreeItem.propTypes = propTypes$9;
1885
+ SortableTreeItem.defaultProps = defaultProps$9;
1886
+
1887
+ var initialItems = [{
1888
+ id: 'Home',
1889
+ children: []
1890
+ }, {
1891
+ id: 'Collections',
1892
+ children: [{
1893
+ id: 'Spring',
1894
+ children: []
1895
+ }, {
1896
+ id: 'Summer',
1897
+ children: []
1898
+ }, {
1899
+ id: 'Fall',
1900
+ children: []
1901
+ }, {
1902
+ id: 'Winter',
1903
+ children: []
1904
+ }]
1905
+ }, {
1906
+ id: 'About Us',
1907
+ children: []
1908
+ }, {
1909
+ id: 'My Account',
1910
+ children: [{
1911
+ id: 'Addresses',
1912
+ children: []
1913
+ }, {
1914
+ id: 'Order History',
1915
+ children: []
1916
+ }]
1917
+ }];
1918
+ var measuring = {
1919
+ droppable: {
1920
+ strategy: core$1.MeasuringStrategy.Always
1921
+ }
1922
+ };
1923
+
1924
+ var dropAnimation = _objectSpread__default["default"](_objectSpread__default["default"]({}, core$1.defaultDropAnimation), {}, {
1925
+ dragSourceOpacity: 0.5
1926
+ });
1150
1927
 
1151
- var screen = components.find(function (it) {
1152
- return it.id === screenId;
1153
- }) || null;
1154
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
1155
- components: screen !== null ? [].concat(_toConsumableArray__default["default"](components), [_objectSpread__default["default"](_objectSpread__default["default"]({}, screen), {}, {
1156
- id: uuid.v1()
1157
- })]) : components
1928
+ var adjustTranslate = function adjustTranslate(_ref) {
1929
+ var transform = _ref.transform;
1930
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, transform), {}, {
1931
+ y: transform.y - 25
1158
1932
  });
1159
1933
  };
1160
1934
 
1161
- var _excluded$2 = ["components"];
1935
+ var propTypes$8 = {
1936
+ collapsible: PropTypes__default["default"].bool,
1937
+ // eslint-disable-next-line react/forbid-prop-types
1938
+ items: PropTypes__default["default"].array,
1939
+ indentationWidth: PropTypes__default["default"].number,
1940
+ indicator: PropTypes__default["default"].bool,
1941
+ removable: PropTypes__default["default"].bool,
1942
+ component: PropTypes__default["default"].func,
1943
+ itemStyle: PropTypes__default["default"].shape({}),
1944
+ onClickItem: PropTypes__default["default"].func,
1945
+ onChange: PropTypes__default["default"].func
1946
+ };
1947
+ var defaultProps$8 = {
1948
+ collapsible: true,
1949
+ items: initialItems,
1950
+ indentationWidth: 30,
1951
+ indicator: false,
1952
+ removable: false,
1953
+ component: null,
1954
+ itemStyle: null,
1955
+ onClickItem: null,
1956
+ onChange: null
1957
+ };
1958
+ var SortableTree = function SortableTree(_ref2) {
1959
+ var collapsible = _ref2.collapsible,
1960
+ defaultItems = _ref2.items,
1961
+ indicator = _ref2.indicator,
1962
+ indentationWidth = _ref2.indentationWidth,
1963
+ removable = _ref2.removable,
1964
+ component = _ref2.component,
1965
+ itemStyle = _ref2.itemStyle,
1966
+ onClickItem = _ref2.onClickItem,
1967
+ onChange = _ref2.onChange;
1968
+
1969
+ var _useState = React.useState(function () {
1970
+ return defaultItems;
1971
+ }),
1972
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1973
+ items = _useState2[0],
1974
+ setItems = _useState2[1];
1162
1975
 
1163
- var updateScreen = function updateScreen(story, newScreenValue) {
1164
- var newScreenId = newScreenValue.id;
1976
+ var _useState3 = React.useState(null),
1977
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
1978
+ activeId = _useState4[0],
1979
+ setActiveId = _useState4[1];
1165
1980
 
1166
- var _ref = story || {},
1167
- _ref$components = _ref.components,
1168
- components = _ref$components === void 0 ? [] : _ref$components,
1169
- currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$2);
1981
+ var _useState5 = React.useState(null),
1982
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
1983
+ overId = _useState6[0],
1984
+ setOverId = _useState6[1];
1170
1985
 
1171
- var index = components.findIndex(function (it) {
1172
- return it.id === newScreenId;
1173
- });
1174
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
1175
- components: [].concat(_toConsumableArray__default["default"](components.slice(0, index)), [_objectSpread__default["default"](_objectSpread__default["default"]({}, components[index]), newScreenValue)], _toConsumableArray__default["default"](components.slice(index + 1)))
1986
+ var _useState7 = React.useState(0),
1987
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
1988
+ offsetLeft = _useState8[0],
1989
+ setOffsetLeft = _useState8[1];
1990
+
1991
+ var _useState9 = React.useState(null),
1992
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
1993
+ currentPosition = _useState10[0],
1994
+ setCurrentPosition = _useState10[1];
1995
+
1996
+ var flattenedItems = React.useMemo(function () {
1997
+ var flattenedTree = flattenTree(items); // console.log('yo', items, flattenedTree);
1998
+
1999
+ var collapsedItems = flattenedTree.reduce(function (acc, _ref3) {
2000
+ var children = _ref3.children,
2001
+ collapsed = _ref3.collapsed,
2002
+ id = _ref3.id;
2003
+ return collapsed && children.length ? [].concat(_toConsumableArray__default["default"](acc), [id]) : acc;
2004
+ }, []) || null;
2005
+ return removeChildrenOf(flattenedTree, activeId ? [activeId].concat(_toConsumableArray__default["default"](collapsedItems)) : collapsedItems);
2006
+ }, [activeId, items]);
2007
+ var projected = activeId && overId ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
2008
+ var sensorContext = React.useRef({
2009
+ items: flattenedItems,
2010
+ offset: offsetLeft
1176
2011
  });
1177
- };
1178
-
1179
- var getFieldByName = function getFieldByName(fields, name) {
1180
- return fields.reduce(function (foundField, it) {
1181
- if (foundField !== null) {
1182
- return foundField;
1183
- }
1184
-
1185
- var _it$name = it.name,
1186
- fieldName = _it$name === void 0 ? null : _it$name,
1187
- _it$fields = it.fields,
1188
- subFields = _it$fields === void 0 ? [] : _it$fields;
1189
2012
 
1190
- if (name !== null && fieldName === name) {
1191
- return it;
1192
- }
2013
+ var _useState11 = React.useState(function () {
2014
+ return sortableTreeKeyboardCoordinates(sensorContext, indentationWidth);
2015
+ }),
2016
+ _useState12 = _slicedToArray__default["default"](_useState11, 1),
2017
+ coordinateGetter = _useState12[0];
1193
2018
 
1194
- return getFieldByName(subFields, name);
1195
- }, null);
1196
- };
2019
+ var sensors = core$1.useSensors(core$1.useSensor(core$1.PointerSensor), core$1.useSensor(core$1.KeyboardSensor, {
2020
+ coordinateGetter: coordinateGetter
2021
+ }));
2022
+ var sortedIds = React.useMemo(function () {
2023
+ return flattenedItems.map(function (_ref4) {
2024
+ var id = _ref4.id;
2025
+ return id;
2026
+ });
2027
+ }, [flattenedItems]);
2028
+ var activeItem = activeId ? flattenedItems.find(function (_ref5) {
2029
+ var id = _ref5.id;
2030
+ return id === activeId;
2031
+ }) : null;
2032
+ React.useEffect(function () {
2033
+ sensorContext.current = {
2034
+ items: flattenedItems,
2035
+ offset: offsetLeft
2036
+ };
2037
+ }, [flattenedItems, offsetLeft]);
2038
+ var announcements = React.useMemo(function () {
2039
+ return {
2040
+ onDragStart: function onDragStart(id) {
2041
+ return "Picked up ".concat(id, ".");
2042
+ },
2043
+ onDragMove: function onDragMove(id, currentOverId) {
2044
+ return getMovementAnnouncement('onDragMove', id, currentOverId);
2045
+ },
2046
+ onDragOver: function onDragOver(id, currentOverId) {
2047
+ return getMovementAnnouncement('onDragOver', id, currentOverId);
2048
+ },
2049
+ onDragEnd: function onDragEnd(id, currentOverId) {
2050
+ // console.log('drag end', flattenedItems);
2051
+ if (onChange !== null) {
2052
+ onChange((flattenedItems || []).map(function (_ref6) {
2053
+ var itemId = _ref6.id,
2054
+ _ref6$children = _ref6.children,
2055
+ children = _ref6$children === void 0 ? [] : _ref6$children,
2056
+ _ref6$parentId = _ref6.parentId,
2057
+ parentId = _ref6$parentId === void 0 ? null : _ref6$parentId;
2058
+ return {
2059
+ id: itemId,
2060
+ props: _objectSpread__default["default"](_objectSpread__default["default"]({}, (children || []).length > 0 ? {
2061
+ group: {
2062
+ mergeNavItems: true
2063
+ }
2064
+ } : {
2065
+ group: null
2066
+ }), parentId !== null ? {
2067
+ parentId: parentId
2068
+ } : {
2069
+ parentId: null
2070
+ })
2071
+ };
2072
+ }));
2073
+ }
1197
2074
 
1198
- var useFormTransition = function useFormTransition(url, screenIndex, styles) {
1199
- var lastPageRef = React.useRef({
1200
- url: url,
1201
- screenIndex: screenIndex
1202
- });
1203
- var direction = React.useMemo(function () {
1204
- var _lastPageRef$current = lastPageRef.current,
1205
- lastScreenIndex = _lastPageRef$current.screenIndex,
1206
- lastUrl = _lastPageRef$current.url;
1207
- lastPageRef.current.url = url;
1208
- lastPageRef.current.screenIndex = screenIndex;
2075
+ return getMovementAnnouncement('onDragEnd', id, currentOverId);
2076
+ },
2077
+ onDragCancel: function onDragCancel(id) {
2078
+ return "Moving was cancelled. ".concat(id, " was dropped in its original position.");
2079
+ }
2080
+ };
2081
+ }, [flattenedItems, onChange]); // Note: this is quite brutal for perf
2082
+
2083
+ React.useEffect(function () {// setItems(defaultItems);
2084
+ }, [defaultItems, setItems]); // console.log('render: current id', activeId);
2085
+
2086
+ return /*#__PURE__*/React__default["default"].createElement(core$1.DndContext, {
2087
+ announcements: announcements,
2088
+ sensors: sensors,
2089
+ collisionDetection: core$1.closestCenter,
2090
+ measuring: measuring,
2091
+ onDragStart: handleDragStart,
2092
+ onDragMove: handleDragMove,
2093
+ onDragOver: handleDragOver,
2094
+ onDragEnd: handleDragEnd,
2095
+ onDragCancel: handleDragCancel
2096
+ }, /*#__PURE__*/React__default["default"].createElement(sortable.SortableContext, {
2097
+ items: sortedIds,
2098
+ strategy: sortable.verticalListSortingStrategy
2099
+ }, flattenedItems.map(function (_ref7, idx) {
2100
+ var id = _ref7.id,
2101
+ _ref7$children = _ref7.children,
2102
+ children = _ref7$children === void 0 ? [] : _ref7$children,
2103
+ collapsed = _ref7.collapsed,
2104
+ depth = _ref7.depth,
2105
+ _ref7$screenValue = _ref7.screenValue,
2106
+ screenValue = _ref7$screenValue === void 0 ? null : _ref7$screenValue;
2107
+ return /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2108
+ key: id,
2109
+ id: id,
2110
+ value: id,
2111
+ depth: id === activeId && projected ? projected.depth : depth,
2112
+ indentationWidth: indentationWidth,
2113
+ indicator: indicator,
2114
+ collapsed: Boolean(collapsed && children.length),
2115
+ onCollapse: collapsible && children.length ? function () {
2116
+ return handleCollapse(id);
2117
+ } : undefined,
2118
+ onRemove: removable ? function () {
2119
+ return handleRemove(id);
2120
+ } : undefined,
2121
+ childCount: getChildCount(items, id),
2122
+ component: component,
2123
+ screenValue: screenValue,
2124
+ style: itemStyle,
2125
+ onClick: function onClick() {
2126
+ if (onClickItem !== null) {
2127
+ onClickItem({
2128
+ id: id
2129
+ }, idx);
2130
+ }
2131
+ }
2132
+ });
2133
+ }), /*#__PURE__*/reactDom.createPortal( /*#__PURE__*/React__default["default"].createElement(core$1.DragOverlay, {
2134
+ dropAnimation: dropAnimation,
2135
+ modifiers: indicator ? [adjustTranslate] : undefined
2136
+ }, activeId && activeItem ? /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2137
+ id: activeId,
2138
+ depth: activeItem.depth,
2139
+ clone: true,
2140
+ childCount: getChildCount(items, activeId) + 1,
2141
+ value: activeId,
2142
+ indentationWidth: indentationWidth,
2143
+ component: component,
2144
+ screenValue: activeItem === null || activeItem === void 0 ? void 0 : activeItem.screenValue,
2145
+ style: itemStyle
2146
+ }) : null), document.body)));
2147
+
2148
+ function handleDragStart(_ref8) {
2149
+ var newActiveId = _ref8.active.id;
2150
+ setActiveId(newActiveId);
2151
+ setOverId(newActiveId);
2152
+ var newActiveItem = flattenedItems.find(function (_ref9) {
2153
+ var id = _ref9.id;
2154
+ return id === newActiveId;
2155
+ });
1209
2156
 
1210
- if (screenIndex !== lastScreenIndex) {
1211
- // return screenIndex > lastScreenIndex ? 'bottom' : 'top';
1212
- return null;
2157
+ if (newActiveItem) {
2158
+ setCurrentPosition({
2159
+ parentId: newActiveItem.parentId,
2160
+ overId: activeId
2161
+ });
1213
2162
  }
1214
2163
 
1215
- var urlSplit = url.split('/');
1216
- var lastUrlSplit = lastUrl.split('/');
1217
- var currentPartsCount = urlSplit.length;
1218
- var previousPartsCount = lastUrlSplit.length;
1219
- var isSettings = urlSplit[currentPartsCount - 1] === 'settings';
1220
- var wasSettings = lastUrlSplit[previousPartsCount - 1] === 'settings';
1221
- currentPartsCount -= isSettings ? 1 : 0;
1222
- previousPartsCount -= wasSettings ? 1 : 0;
1223
- return currentPartsCount >= previousPartsCount ? 'right' : 'left';
1224
- }, [url, screenIndex]);
1225
- var name = React.useMemo(function () {
1226
- var _classNames, _classNames2, _classNames3;
1227
-
1228
- return {
1229
- enter: classNames__default["default"]((_classNames = {}, _defineProperty__default["default"](_classNames, styles.enterRight, direction === 'right'), _defineProperty__default["default"](_classNames, styles.enterLeft, direction === 'left'), _defineProperty__default["default"](_classNames, styles.enterTop, direction === 'top'), _defineProperty__default["default"](_classNames, styles.enterBottom, direction === 'bottom'), _classNames)) || 'none',
1230
- enterActive: classNames__default["default"]((_classNames2 = {}, _defineProperty__default["default"](_classNames2, styles.enterActiveHorizontal, direction === 'left' || direction === 'right'), _defineProperty__default["default"](_classNames2, styles.enterActiveVertical, direction === 'top' || direction === 'bottom'), _classNames2)) || 'none',
1231
- leave: styles.leave || 'none',
1232
- leaveActive: classNames__default["default"]((_classNames3 = {}, _defineProperty__default["default"](_classNames3, styles.leaveActiveRight, direction === 'right'), _defineProperty__default["default"](_classNames3, styles.leaveActiveLeft, direction === 'left'), _defineProperty__default["default"](_classNames3, styles.leaveActiveTop, direction === 'top'), _defineProperty__default["default"](_classNames3, styles.leaveActiveBottom, direction === 'bottom'), _classNames3)) || 'none'
1233
- };
1234
- }, [direction, screenIndex]);
1235
- return {
1236
- direction: direction,
1237
- name: name,
1238
- timeout: direction === 'left' || direction === 'right' ? 300 : 10
1239
- };
1240
- };
2164
+ document.body.style.setProperty('cursor', 'grabbing');
2165
+ }
2166
+
2167
+ function handleDragMove(_ref10) {
2168
+ var delta = _ref10.delta;
2169
+ setOffsetLeft(delta.x);
2170
+ }
2171
+
2172
+ function handleDragOver(_ref11) {
2173
+ var _over$id;
2174
+
2175
+ var over = _ref11.over;
2176
+ setOverId((_over$id = over === null || over === void 0 ? void 0 : over.id) !== null && _over$id !== void 0 ? _over$id : null);
2177
+ }
2178
+
2179
+ function resetState() {
2180
+ setOverId(null);
2181
+ setActiveId(null);
2182
+ setOffsetLeft(0);
2183
+ setCurrentPosition(null);
2184
+ document.body.style.setProperty('cursor', '');
2185
+ }
2186
+
2187
+ function handleDragEnd(_ref12) {
2188
+ var active = _ref12.active,
2189
+ over = _ref12.over;
2190
+ resetState();
2191
+
2192
+ if (projected && over) {
2193
+ var depth = projected.depth,
2194
+ parentId = projected.parentId;
2195
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2196
+ var overIndex = clonedItems.findIndex(function (_ref13) {
2197
+ var id = _ref13.id;
2198
+ return id === over.id;
2199
+ });
2200
+ var activeIndex = clonedItems.findIndex(function (_ref14) {
2201
+ var id = _ref14.id;
2202
+ return id === active.id;
2203
+ });
2204
+ var activeTreeItem = clonedItems[activeIndex];
2205
+ clonedItems[activeIndex] = _objectSpread__default["default"](_objectSpread__default["default"]({}, activeTreeItem), {}, {
2206
+ depth: depth,
2207
+ parentId: parentId
2208
+ });
2209
+ var sortedItems = sortable.arrayMove(clonedItems, activeIndex, overIndex);
2210
+ var newItems = buildTree(sortedItems);
2211
+ setItems(newItems);
2212
+ }
2213
+ }
1241
2214
 
1242
- var _excluded$1 = ["className"];
1243
- var propTypes$7 = {
1244
- className: PropTypes__default["default"].string
1245
- };
1246
- var defaultProps$7 = {
1247
- className: null
1248
- };
2215
+ function handleDragCancel() {
2216
+ resetState();
2217
+ }
1249
2218
 
1250
- var SettingsButton = function SettingsButton(_ref) {
1251
- var className = _ref.className,
1252
- props = _objectWithoutProperties__default["default"](_ref, _excluded$1);
2219
+ function handleRemove(id) {
2220
+ setItems(function (newItems) {
2221
+ return removeItem(newItems, id);
2222
+ });
2223
+ }
1253
2224
 
1254
- return /*#__PURE__*/React__default["default"].createElement(components.Button, Object.assign({
1255
- className: className,
1256
- theme: "secondary",
1257
- size: "sm",
1258
- icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1259
- icon: freeSolidSvgIcons.faCogs
1260
- })
1261
- }, props));
1262
- };
2225
+ function handleCollapse(id) {
2226
+ setItems(function (newItems) {
2227
+ return setProperty(newItems, id, 'collapsed', function (value) {
2228
+ return !value;
2229
+ });
2230
+ });
2231
+ }
1263
2232
 
1264
- SettingsButton.propTypes = propTypes$7;
1265
- SettingsButton.defaultProps = defaultProps$7;
2233
+ function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2234
+ if (currentOverId && projected) {
2235
+ if (eventName !== 'onDragEnd') {
2236
+ if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2237
+ return;
2238
+ }
1266
2239
 
1267
- var styles$4 = {"container":"micromag-editor-menus-breadcrumb-container"};
2240
+ setCurrentPosition({
2241
+ parentId: projected.parentId,
2242
+ overId: currentOverId
2243
+ });
2244
+ }
1268
2245
 
1269
- var propTypes$6 = {
1270
- story: core.PropTypes.story,
1271
- screenId: PropTypes__default["default"].string,
1272
- field: PropTypes__default["default"].string,
1273
- form: PropTypes__default["default"].string,
1274
- url: PropTypes__default["default"].string.isRequired,
1275
- className: PropTypes__default["default"].string
1276
- };
1277
- var defaultProps$6 = {
1278
- story: null,
1279
- screenId: null,
1280
- field: null,
1281
- form: null,
1282
- className: null
1283
- };
2246
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2247
+ var overIndex = clonedItems.findIndex(function (_ref15) {
2248
+ var id = _ref15.id;
2249
+ return id === currentOverId;
2250
+ });
2251
+ var activeIndex = clonedItems.findIndex(function (_ref16) {
2252
+ var id = _ref16.id;
2253
+ return id === currentActiveId;
2254
+ });
2255
+ var sortedItems = sortable.arrayMove(clonedItems, activeIndex, overIndex);
2256
+ var previousItem = sortedItems[overIndex - 1];
2257
+ var newAnnouncement;
2258
+ var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2259
+ var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2260
+
2261
+ if (!previousItem) {
2262
+ var nextItem = sortedItems[overIndex + 1];
2263
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2264
+ } else if (projected.depth > previousItem.depth) {
2265
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2266
+ } else {
2267
+ var previousSibling = previousItem;
2268
+
2269
+ var _loop = function _loop() {
2270
+ var _previousSibling = previousSibling,
2271
+ parentId = _previousSibling.parentId;
2272
+ previousSibling = sortedItems.find(function (_ref17) {
2273
+ var id = _ref17.id;
2274
+ return id === parentId;
2275
+ });
2276
+ };
1284
2277
 
1285
- var Breadcrumb = function Breadcrumb(_ref) {
1286
- var story = _ref.story,
1287
- screenId = _ref.screenId,
1288
- field = _ref.field,
1289
- form = _ref.form,
1290
- url = _ref.url,
1291
- className = _ref.className;
1292
- var intl = reactIntl.useIntl();
2278
+ while (previousSibling && projected.depth < previousSibling.depth) {
2279
+ _loop();
2280
+ }
1293
2281
 
1294
- var _ref2 = story || {},
1295
- _ref2$components = _ref2.components,
1296
- screens = _ref2$components === void 0 ? [] : _ref2$components;
2282
+ if (previousSibling) {
2283
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2284
+ }
2285
+ } // eslint-disable-next-line consistent-return
1297
2286
 
1298
- var history = reactRouter.useHistory();
1299
- var screensManager = contexts.useScreensManager();
1300
- var fieldsManager = contexts.useFieldsManager();
1301
- var items = React.useMemo(function () {
1302
- var screenIndex = screens.findIndex(function (it) {
1303
- return it.id === screenId;
1304
- });
1305
2287
 
1306
- if (!screens[screenIndex]) {
1307
- return [];
2288
+ return newAnnouncement;
1308
2289
  }
2290
+ }
2291
+ };
2292
+ SortableTree.propTypes = propTypes$8;
2293
+ SortableTree.defaultProps = defaultProps$8;
1309
2294
 
1310
- var type = screens[screenIndex].type;
1311
- var fieldItems = [];
2295
+ var _excluded$2 = ["className", "screen", "type"],
2296
+ _excluded2 = ["id", "screen"];
2297
+ var propTypes$7 = {
2298
+ items: core.PropTypes.menuItems,
2299
+ withPreview: PropTypes__default["default"].bool,
2300
+ withPlaceholder: PropTypes__default["default"].bool,
2301
+ settings: PropTypes__default["default"].node,
2302
+ previewMinWidth: PropTypes__default["default"].number,
2303
+ sortable: PropTypes__default["default"].bool,
2304
+ isTree: PropTypes__default["default"].bool,
2305
+ isVertical: PropTypes__default["default"].bool,
2306
+ noWrap: PropTypes__default["default"].bool,
2307
+ className: PropTypes__default["default"].string,
2308
+ itemClassName: PropTypes__default["default"].string,
2309
+ buttonClassName: PropTypes__default["default"].string,
2310
+ settingsClassName: PropTypes__default["default"].string,
2311
+ onClickItem: PropTypes__default["default"].func,
2312
+ onOrderChange: PropTypes__default["default"].func
2313
+ };
2314
+ var defaultProps$7 = {
2315
+ items: [],
2316
+ withPreview: false,
2317
+ withPlaceholder: false,
2318
+ settings: null,
2319
+ previewMinWidth: 320,
2320
+ sortable: false,
2321
+ isTree: false,
2322
+ isVertical: false,
2323
+ noWrap: false,
2324
+ className: null,
2325
+ itemClassName: null,
2326
+ buttonClassName: null,
2327
+ settingsClassName: null,
2328
+ onClickItem: null,
2329
+ onOrderChange: null
2330
+ };
1312
2331
 
1313
- if (field !== null) {
1314
- var _screensManager$getDe = screensManager.getDefinition(type),
1315
- _screensManager$getDe2 = _screensManager$getDe.fields,
1316
- screenFields = _screensManager$getDe2 === void 0 ? [] : _screensManager$getDe2;
2332
+ var ScreensMenu = function ScreensMenu(_ref) {
2333
+ var _ref9;
1317
2334
 
1318
- var fields = [].concat(_toConsumableArray__default["default"](screenFields), [utils.getScreenExtraField(intl)]);
1319
- var fieldPath = field.split('/');
1320
- var lastKeyIndex = fieldPath.length - 1;
1321
- var parentItem = null;
1322
- fieldPath.reduce(function (currentFields, key, keyIndex) {
1323
- var _currentFields$type = currentFields.type,
1324
- fieldType = _currentFields$type === void 0 ? null : _currentFields$type;
1325
- var fieldsDef = fieldType !== null ? fieldsManager.getDefinition(fieldType) : currentFields;
1326
- var _fieldsDef$fields = fieldsDef.fields,
1327
- subFields = _fieldsDef$fields === void 0 ? null : _fieldsDef$fields,
1328
- _fieldsDef$settings = fieldsDef.settings,
1329
- settings = _fieldsDef$settings === void 0 ? null : _fieldsDef$settings,
1330
- _fieldsDef$itemsField = fieldsDef.itemsField,
1331
- itemsField = _fieldsDef$itemsField === void 0 ? null : _fieldsDef$itemsField;
1332
- var currentSubfields = subFields !== null ? getFieldByName(subFields, key) : null;
1333
- var currentSettings = settings !== null ? getFieldByName(settings, key) : null;
1334
- var isCurrentSubfields = currentSubfields !== null;
1335
- var isCurrentSettings = currentSettings !== null;
1336
- var isListItems = itemsField !== null && !!key.match(/^[0-9]+$/);
1337
- var isLastIndex = keyIndex === lastKeyIndex;
1338
- var pathPrefix = "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex + 1).join('/'));
1339
- var pathSuffix = isLastIndex && form !== null ? "/".concat(form) : '';
1340
- var addNewItem = isLastIndex || isListItems;
1341
- var itemPath = "".concat(pathPrefix).concat(pathSuffix);
1342
- var nextFields = null;
2335
+ var items = _ref.items,
2336
+ withPreview = _ref.withPreview,
2337
+ withPlaceholder = _ref.withPlaceholder,
2338
+ settings = _ref.settings,
2339
+ previewMinWidth = _ref.previewMinWidth,
2340
+ isVertical = _ref.isVertical,
2341
+ noWrap = _ref.noWrap,
2342
+ className = _ref.className,
2343
+ itemClassName = _ref.itemClassName,
2344
+ buttonClassName = _ref.buttonClassName,
2345
+ settingsClassName = _ref.settingsClassName,
2346
+ sortable = _ref.sortable,
2347
+ isTree = _ref.isTree,
2348
+ onClickItem = _ref.onClickItem,
2349
+ onOrderChange = _ref.onOrderChange;
1343
2350
 
1344
- if (isCurrentSubfields) {
1345
- nextFields = currentSubfields;
1346
- } else if (isCurrentSettings) {
1347
- nextFields = currentSettings;
2351
+ var _useResizeObserver = hooks.useResizeObserver({}, [items]),
2352
+ containerRef = _useResizeObserver.ref,
2353
+ contentRect = _useResizeObserver.entry.contentRect;
1348
2354
 
1349
- if (parentItem !== null) {
1350
- fieldItems.push(_objectSpread__default["default"](_objectSpread__default["default"]({}, parentItem), {}, {
1351
- url: "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex).join('/'), "/settings")
1352
- }));
1353
- }
1354
- } else if (isListItems) {
1355
- nextFields = itemsField;
1356
- }
2355
+ var _useResizeObserver2 = hooks.useResizeObserver({}, [items]),
2356
+ columnRef = _useResizeObserver2.ref,
2357
+ columnRect = _useResizeObserver2.entry.contentRect;
1357
2358
 
1358
- var fieldLabel = nextFields ? nextFields.breadcrumbLabel || nextFields.label : null;
1359
- var itemLabel = utils.isMessage(fieldLabel) ? intl.formatMessage(fieldLabel) : fieldLabel;
2359
+ var previewStyle = React.useMemo(function () {
2360
+ var _ref2 = contentRect || {},
2361
+ _ref2$width = _ref2.width,
2362
+ itemWidth = _ref2$width === void 0 ? 0 : _ref2$width,
2363
+ _ref2$height = _ref2.height,
2364
+ itemHeight = _ref2$height === void 0 ? 0 : _ref2$height;
1360
2365
 
1361
- var _ref3 = parentItem || {},
1362
- _ref3$label = _ref3.label,
1363
- parentItemLabel = _ref3$label === void 0 ? null : _ref3$label;
2366
+ var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 2 / 3;
1364
2367
 
1365
- var finalItemLabel = isListItems ? "".concat(itemLabel, " #").concat(parseInt(key, 10) + 1) : itemLabel || parentItemLabel;
1366
- var item = {
1367
- url: itemPath,
1368
- label: finalItemLabel || '',
1369
- active: false
1370
- };
2368
+ var _getSizeWithinBounds = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2369
+ previewScale = _getSizeWithinBounds.scale;
1371
2370
 
1372
- if (addNewItem) {
1373
- fieldItems.push(item);
1374
- }
2371
+ return {
2372
+ width: previewMinWidth,
2373
+ height: previewMinWidth * ratio,
2374
+ transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
2375
+ };
2376
+ }, [previewMinWidth, contentRect]);
2377
+ var treeStyle = React.useMemo(function () {
2378
+ var _ref3 = columnRect || {},
2379
+ _ref3$width = _ref3.width,
2380
+ itemWidth = _ref3$width === void 0 ? 0 : _ref3$width;
1375
2381
 
1376
- parentItem = item;
1377
- return nextFields;
1378
- }, {
1379
- fields: fields
1380
- });
1381
- }
2382
+ var itemHeight = itemWidth * 3 / 2;
2383
+ var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 0;
1382
2384
 
1383
- var finalItems = [{
1384
- label: intl.formatMessage({
1385
- id: "AHvHaY",
1386
- defaultMessage: [{
1387
- "type": 0,
1388
- "value": "Parameters"
1389
- }]
1390
- }),
1391
- url: "/".concat(screenId),
1392
- active: false
1393
- }].concat(fieldItems).filter(function (it) {
1394
- return it !== null;
1395
- });
1396
- var lastItemsIndex = finalItems.length - 1;
1397
- return finalItems.map(function (it, index) {
1398
- return index === lastItemsIndex ? _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
1399
- url: url,
1400
- active: true
1401
- }) : it;
2385
+ var _getSizeWithinBounds2 = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2386
+ scaledWidth = _getSizeWithinBounds2.width,
2387
+ scaledHeight = _getSizeWithinBounds2.height,
2388
+ previewScale = _getSizeWithinBounds2.scale;
2389
+
2390
+ return {
2391
+ width: previewMinWidth,
2392
+ height: previewMinWidth * ratio,
2393
+ transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")"),
2394
+ scale: previewScale,
2395
+ scaledWidth: scaledWidth,
2396
+ scaledHeight: scaledHeight
2397
+ };
2398
+ }, [previewMinWidth, columnRect]);
2399
+ var itemsElements = !isTree ? items.map(function (_ref4, index) {
2400
+ var _ref5;
2401
+
2402
+ var _ref4$className = _ref4.className,
2403
+ itemCustomClassName = _ref4$className === void 0 ? null : _ref4$className,
2404
+ screen = _ref4.screen,
2405
+ type = _ref4.type,
2406
+ item = _objectWithoutProperties__default["default"](_ref4, _excluded$2);
2407
+
2408
+ return /*#__PURE__*/React__default["default"].createElement("li", {
2409
+ key: item.id,
2410
+ className: classNames__default["default"]([styles$6.item, (_ref5 = {}, _defineProperty__default["default"](_ref5, itemClassName, itemClassName !== null), _defineProperty__default["default"](_ref5, itemCustomClassName, itemCustomClassName !== null), _ref5)]),
2411
+ "data-screen-id": item.id,
2412
+ ref: index === 0 ? containerRef : null
2413
+ }, /*#__PURE__*/React__default["default"].createElement(ScreenWithPreview, {
2414
+ index: index,
2415
+ screen: _objectSpread__default["default"](_objectSpread__default["default"]({}, screen), withPlaceholder ? {
2416
+ type: type
2417
+ } : null),
2418
+ buttonClassName: buttonClassName,
2419
+ previewStyle: previewStyle,
2420
+ withPreview: withPreview,
2421
+ withPlaceholder: withPlaceholder,
2422
+ onClick: onClickItem
2423
+ }), settings !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
2424
+ className: classNames__default["default"]([_defineProperty__default["default"]({}, settingsClassName, settingsClassName !== null), styles$6.settings, 'p-2'])
2425
+ }, isFunction__default["default"](settings) ? settings(index) : settings) : null);
2426
+ }) : [];
2427
+ var sortableItems = React.useMemo(function () {
2428
+ return isTree ? items.reduce(function (acc, _ref7) {
2429
+ var id = _ref7.id,
2430
+ _ref7$screen = _ref7.screen,
2431
+ screen = _ref7$screen === void 0 ? {} : _ref7$screen,
2432
+ props = _objectWithoutProperties__default["default"](_ref7, _excluded2);
2433
+
2434
+ var _screen$parentId = screen.parentId,
2435
+ parentId = _screen$parentId === void 0 ? null : _screen$parentId; // console.log('hey', id, screen, parentId, props);
2436
+ // const children =
2437
+ // items.filter(({ screen: { parentId: cpid = null } }) => cpid === id) ||
2438
+ // [];
2439
+ // console.log('children', children);
2440
+
2441
+ acc.push(_objectSpread__default["default"]({
2442
+ id: id,
2443
+ parentId: parentId,
2444
+ screenValue: {
2445
+ id: id,
2446
+ screen: screen
2447
+ }
2448
+ }, props));
2449
+ return acc;
2450
+ }, []) : items.map(function (_ref8) {
2451
+ var id = _ref8.id;
2452
+ return {
2453
+ id: id
2454
+ };
1402
2455
  });
1403
- }, [intl, screens, screenId, field, form, url, screensManager, fieldsManager]);
1404
- var itemsLength = items.length;
1405
- var onClickBack = React.useCallback(function () {
1406
- history.push(items[itemsLength - 2].url);
1407
- }, [items]);
1408
- var withBack = itemsLength > 1;
1409
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, withBack ? /*#__PURE__*/React__default["default"].createElement(components.BackButton, {
1410
- onClick: onClickBack,
1411
- className: "mr-2"
1412
- }) : null, /*#__PURE__*/React__default["default"].createElement(components.Breadcrumb, {
1413
- items: items,
1414
- theme: "secondary",
1415
- withoutBar: true,
1416
- noWrap: true,
1417
- className: classNames__default["default"]([styles$4.container, 'text-truncate', _defineProperty__default["default"]({}, className, className !== null)])
1418
- }));
2456
+ }, [items, isTree]); // console.log('screens menu items/sitems', items, sortableItems);
2457
+
2458
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2459
+ className: classNames__default["default"]([styles$6.container, (_ref9 = {}, _defineProperty__default["default"](_ref9, styles$6.noWrap, noWrap), _defineProperty__default["default"](_ref9, styles$6.isVertical, isVertical), _defineProperty__default["default"](_ref9, styles$6.isTree, isTree), _defineProperty__default["default"](_ref9, styles$6.withPlaceholder, withPlaceholder), _defineProperty__default["default"](_ref9, className, className), _ref9)]),
2460
+ ref: columnRef
2461
+ }, isTree && !sortable ? /*#__PURE__*/React__default["default"].createElement(SortableTree, {
2462
+ items: sortableItems,
2463
+ component: ScreenWithPreview,
2464
+ itemStyle: treeStyle,
2465
+ onClickItem: onClickItem,
2466
+ onChange: onOrderChange
2467
+ }) : null, !isTree && sortable && items.length > 1 ? /*#__PURE__*/React__default["default"].createElement(reactSortablejs.ReactSortable, {
2468
+ list: sortableItems,
2469
+ setList: onOrderChange,
2470
+ animation: 200,
2471
+ delayOnTouchStart: true,
2472
+ delay: 2,
2473
+ tag: "ul",
2474
+ className: styles$6.items
2475
+ }, itemsElements) : null, !isTree && (!sortable || items.length < 1) ? /*#__PURE__*/React__default["default"].createElement("ul", {
2476
+ className: styles$6.items
2477
+ }, itemsElements) : null);
1419
2478
  };
1420
2479
 
1421
- Breadcrumb.propTypes = propTypes$6;
1422
- Breadcrumb.defaultProps = defaultProps$6;
2480
+ ScreensMenu.propTypes = propTypes$7;
2481
+ ScreensMenu.defaultProps = defaultProps$7;
1423
2482
 
1424
- var styles$3 = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
2483
+ var styles$2 = {"container":"micromag-editor-menus-screen-types-container","row":"micromag-editor-menus-screen-types-row","title":"micromag-editor-menus-screen-types-title"};
1425
2484
 
1426
- var propTypes$5 = {
1427
- value: core.PropTypes.component,
2485
+ var propTypes$6 = {
2486
+ screens: core.PropTypes.screenDefinitions,
2487
+ selectedTypes: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
1428
2488
  className: PropTypes__default["default"].string,
1429
- gotoFieldForm: PropTypes__default["default"].func.isRequired,
1430
- closeFieldForm: PropTypes__default["default"].func.isRequired,
1431
- onChange: PropTypes__default["default"].func // onClickDelete: PropTypes.func,
1432
-
2489
+ onClickItem: PropTypes__default["default"].func
1433
2490
  };
1434
- var defaultProps$5 = {
1435
- value: null,
2491
+ var defaultProps$6 = {
2492
+ screens: null,
2493
+ selectedTypes: null,
1436
2494
  className: null,
1437
- onChange: null // onClickDelete: null,
1438
-
2495
+ onClickItem: null
1439
2496
  };
1440
2497
 
1441
- var ScreenForm = function ScreenForm(_ref) {
1442
- var value = _ref.value,
2498
+ var ScreenTypes = function ScreenTypes(_ref) {
2499
+ var screens = _ref.screens,
2500
+ selectedTypes = _ref.selectedTypes,
1443
2501
  className = _ref.className,
1444
- gotoFieldForm = _ref.gotoFieldForm,
1445
- closeFieldForm = _ref.closeFieldForm,
1446
- onChange = _ref.onChange;
1447
-
1448
- var _useScreenDefinition = contexts.useScreenDefinition(),
1449
- _useScreenDefinition$ = _useScreenDefinition.fields,
1450
- fields$1 = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // const intl = useIntl();
1451
- // const finalOnClickDelete = useCallback(() => {
1452
- // if (
1453
- // onClickDelete !== null &&
1454
- // window.confirm(
1455
- // intl.formatMessage({
1456
- // defaultMessage: 'Are you sure you want to delete this screen?',
1457
- // description: 'Confirm message when deleting a screen',
1458
- // }),
1459
- // )
1460
- // ) {
1461
- // onClickDelete(value);
1462
- // }
1463
- // }, [intl, onClickDelete, value]);
1464
-
1465
-
1466
- return /*#__PURE__*/React__default["default"].createElement("div", {
1467
- className: classNames__default["default"]([styles$3.container, _defineProperty__default["default"]({}, className, className)])
1468
- }, /*#__PURE__*/React__default["default"].createElement("div", {
1469
- className: styles$3.inner
1470
- }, /*#__PURE__*/React__default["default"].createElement(fields.Fields, {
1471
- fields: fields$1,
1472
- value: value,
1473
- onChange: onChange,
1474
- gotoFieldForm: gotoFieldForm,
1475
- closeFieldForm: closeFieldForm
1476
- })));
1477
- };
2502
+ onClickItem = _ref.onClickItem;
2503
+ var intl = reactIntl.useIntl();
2504
+ var screensManager = contexts.useScreensManager();
2505
+ var finalDefinitions = screens || screensManager.getDefinitions();
2506
+ var groups = React.useMemo(function () {
2507
+ var groupItems = finalDefinitions.reduce(function (allGroups, definition) {
2508
+ var id = definition.id,
2509
+ title = definition.title,
2510
+ _definition$group = definition.group,
2511
+ group = _definition$group === void 0 ? {} : _definition$group;
1478
2512
 
1479
- ScreenForm.propTypes = propTypes$5;
1480
- ScreenForm.defaultProps = defaultProps$5;
2513
+ var _ref2 = group || {},
2514
+ _ref2$order = _ref2.order,
2515
+ order = _ref2$order === void 0 ? 0 : _ref2$order,
2516
+ _ref2$label = _ref2.label,
2517
+ label = _ref2$label === void 0 ? {} : _ref2$label,
2518
+ _ref2$hidden = _ref2.hidden,
2519
+ hidden = _ref2$hidden === void 0 ? false : _ref2$hidden;
1481
2520
 
1482
- /* eslint-disable react/jsx-props-no-spreading */
1483
- var propTypes$4 = {
1484
- children: PropTypes__default["default"].node
1485
- };
1486
- var defaultProps$4 = {
1487
- children: null
1488
- };
2521
+ var _ref3 = label || {},
2522
+ _ref3$id = _ref3.id,
2523
+ messageId = _ref3$id === void 0 ? null : _ref3$id;
1489
2524
 
1490
- var FieldWithContexts = function FieldWithContexts(props) {
1491
- // Get definitions
1492
- var _useScreenDefinition = contexts.useScreenDefinition(),
1493
- _useScreenDefinition$ = _useScreenDefinition.fields,
1494
- fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // To use a specific form component
2525
+ if (hidden) {
2526
+ return allGroups;
2527
+ }
1495
2528
 
2529
+ var _ref4 = utils.isMessage(label) ? {
2530
+ id: messageId || id,
2531
+ name: group
2532
+ } : {
2533
+ id: messageId || id,
2534
+ name: title
2535
+ },
2536
+ groupId = _ref4.id,
2537
+ groupName = _ref4.name;
1496
2538
 
1497
- var formComponents = contexts.useFormsComponents();
1498
- return /*#__PURE__*/React__default["default"].createElement(components.FieldForm, Object.assign({
1499
- fields: fields,
1500
- formComponents: formComponents
1501
- }, props));
2539
+ var groupIndex = allGroups.findIndex(function (it) {
2540
+ return it.id === groupId;
2541
+ });
2542
+ var selected = selectedTypes !== null && selectedTypes.indexOf(id) !== -1;
2543
+ var item = {
2544
+ id: id,
2545
+ type: id,
2546
+ screen: definition,
2547
+ className: classNames__default["default"](_defineProperty__default["default"]({
2548
+ 'bg-secondary': !selected,
2549
+ 'bg-primary': selected
2550
+ }, styles$2.selected, selected))
2551
+ };
2552
+ return groupIndex !== -1 ? [].concat(_toConsumableArray__default["default"](allGroups.slice(0, groupIndex)), [_objectSpread__default["default"](_objectSpread__default["default"]({}, allGroups[groupIndex]), {}, {
2553
+ items: [].concat(_toConsumableArray__default["default"](allGroups[groupIndex].items), [item])
2554
+ })], _toConsumableArray__default["default"](allGroups.slice(groupIndex + 1))) : [].concat(_toConsumableArray__default["default"](allGroups), [{
2555
+ id: groupId,
2556
+ name: utils.isMessage(label) ? intl.formatMessage(label) : groupName,
2557
+ order: order,
2558
+ items: [item]
2559
+ }]);
2560
+ }, []);
2561
+ return orderBy__default["default"](groupItems, ['order', 'name'], ['asc', 'asc']);
2562
+ }, [finalDefinitions, selectedTypes]);
2563
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2564
+ className: classNames__default["default"]([styles$2.container, _defineProperty__default["default"]({}, className, className)])
2565
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2566
+ className: styles$2.rows
2567
+ }, groups.map(function (_ref6) {
2568
+ var id = _ref6.id,
2569
+ name = _ref6.name,
2570
+ items = _ref6.items;
2571
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2572
+ key: "group-".concat(id),
2573
+ className: styles$2.row
2574
+ }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, name), /*#__PURE__*/React__default["default"].createElement("div", {
2575
+ className: styles$2.layouts
2576
+ }, /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
2577
+ items: items,
2578
+ withPlaceholder: true,
2579
+ itemClassName: classNames__default["default"](['border', 'rounded', {
2580
+ 'border-secondary': selectedTypes === null,
2581
+ 'border-dark': selectedTypes !== null,
2582
+ 'bg-secondary': selectedTypes === null,
2583
+ 'text-secondary': selectedTypes !== null
2584
+ }]),
2585
+ previewMinWidth: 100,
2586
+ onClickItem: onClickItem
2587
+ })));
2588
+ })));
1502
2589
  };
1503
2590
 
1504
- FieldWithContexts.propTypes = propTypes$4;
1505
- FieldWithContexts.defaultProps = defaultProps$4;
2591
+ ScreenTypes.propTypes = propTypes$6;
2592
+ ScreenTypes.defaultProps = defaultProps$6;
1506
2593
 
1507
- var styles$2 = {"container":"micromag-editor-modals-delete-screen-container","description":"micromag-editor-modals-delete-screen-description","actions":"micromag-editor-modals-delete-screen-actions"};
2594
+ var styles$1 = {"container":"micromag-editor-modals-screen-types-container","selected":"micromag-editor-modals-screen-types-selected"};
1508
2595
 
1509
- var propTypes$3 = {
2596
+ var propTypes$5 = {
2597
+ selectedTypes: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
1510
2598
  className: PropTypes__default["default"].string,
1511
- onConfirm: PropTypes__default["default"].func,
1512
- onCancel: PropTypes__default["default"].func
2599
+ onRequestClose: PropTypes__default["default"].func,
2600
+ onClickScreenType: PropTypes__default["default"].func
1513
2601
  };
1514
- var defaultProps$3 = {
2602
+ var defaultProps$5 = {
2603
+ selectedTypes: null,
1515
2604
  className: null,
1516
- onConfirm: null,
1517
- onCancel: null
2605
+ onRequestClose: null,
2606
+ onClickScreenType: null
1518
2607
  };
1519
2608
 
1520
- var DeleteScreenModal = function DeleteScreenModal(_ref) {
1521
- var className = _ref.className,
1522
- onConfirm = _ref.onConfirm,
1523
- onCancel = _ref.onCancel;
2609
+ var ScreenTypesModal = function ScreenTypesModal(_ref) {
2610
+ var selectedTypes = _ref.selectedTypes,
2611
+ className = _ref.className,
2612
+ onRequestClose = _ref.onRequestClose,
2613
+ onClickScreenType = _ref.onClickScreenType;
1524
2614
  return /*#__PURE__*/React__default["default"].createElement(components.Modal, null, /*#__PURE__*/React__default["default"].createElement(components.ModalDialog, {
1525
2615
  title: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1526
- id: "p6q/+/",
2616
+ id: "QBaiO0",
1527
2617
  defaultMessage: [{
1528
2618
  "type": 0,
1529
- "value": "Delete screen"
2619
+ "value": "Add a screen"
1530
2620
  }]
1531
2621
  }),
1532
- className: classNames__default["default"]([styles$2.container, _defineProperty__default["default"]({}, className, className)]),
1533
- onClickClose: onCancel
1534
- }, /*#__PURE__*/React__default["default"].createElement("div", {
1535
- className: styles$2.description
1536
- }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1537
- id: "q/tLk0",
1538
- defaultMessage: [{
1539
- "type": 0,
1540
- "value": "Are you sure you want to delete this screen?"
1541
- }]
1542
- }))), /*#__PURE__*/React__default["default"].createElement("div", {
1543
- className: styles$2.actions
1544
- }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
1545
- onClick: onCancel,
1546
- className: "btn-outline-secondary mr-2"
1547
- }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1548
- id: "0GT0SI",
1549
- defaultMessage: [{
1550
- "type": 0,
1551
- "value": "Cancel"
1552
- }]
1553
- }))), /*#__PURE__*/React__default["default"].createElement(components.Button, {
1554
- onClick: onConfirm,
1555
- theme: "danger",
1556
- label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1557
- id: "gRxcTc",
1558
- defaultMessage: [{
1559
- "type": 0,
1560
- "value": "Delete screen"
1561
- }]
1562
- })
1563
- }))));
2622
+ className: classNames__default["default"]([styles$1.container, _defineProperty__default["default"]({}, className, className)]),
2623
+ onClickClose: onRequestClose
2624
+ }, /*#__PURE__*/React__default["default"].createElement(ScreenTypes, {
2625
+ selectedTypes: selectedTypes,
2626
+ className: styles$1.menu,
2627
+ onClickItem: onClickScreenType
2628
+ })));
1564
2629
  };
1565
2630
 
1566
- DeleteScreenModal.propTypes = propTypes$3;
1567
- DeleteScreenModal.defaultProps = defaultProps$3;
1568
-
1569
- var styles$1 = {"panel":"micromag-editor-form-panel","leave":"micromag-editor-form-leave","content":"micromag-editor-form-content","navbar":"micromag-editor-form-navbar","enterBottom":"micromag-editor-form-enterBottom","enterLeft":"micromag-editor-form-enterLeft","enterRight":"micromag-editor-form-enterRight","enterTop":"micromag-editor-form-enterTop","enterActiveHorizontal":"micromag-editor-form-enterActiveHorizontal","enterActiveVertical":"micromag-editor-form-enterActiveVertical","leaveActiveLeft":"micromag-editor-form-leaveActiveLeft","leaveActiveRight":"micromag-editor-form-leaveActiveRight","leaveActiveBottom":"micromag-editor-form-leaveActiveBottom","leaveActiveTop":"micromag-editor-form-leaveActiveTop"};
2631
+ ScreenTypesModal.propTypes = propTypes$5;
2632
+ ScreenTypesModal.defaultProps = defaultProps$5;
1570
2633
 
1571
- var propTypes$2 = {
2634
+ var _excluded$1 = ["id"];
2635
+ var propTypes$4 = {
1572
2636
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
1573
2637
  isTheme: PropTypes__default["default"].bool,
1574
- className: PropTypes__default["default"].string,
1575
- onChange: PropTypes__default["default"].func
2638
+ isVertical: PropTypes__default["default"].bool,
2639
+ isCreateOpened: PropTypes__default["default"].bool,
2640
+ isParsed: PropTypes__default["default"].bool,
2641
+ isTree: PropTypes__default["default"].bool,
2642
+ onClickScreen: PropTypes__default["default"].func,
2643
+ onChange: PropTypes__default["default"].func,
2644
+ className: PropTypes__default["default"].string
1576
2645
  };
1577
- var defaultProps$2 = {
2646
+ var defaultProps$4 = {
1578
2647
  value: null,
1579
2648
  isTheme: false,
1580
- className: null,
1581
- onChange: null
2649
+ isVertical: false,
2650
+ isCreateOpened: false,
2651
+ isParsed: false,
2652
+ isTree: false,
2653
+ onClickScreen: null,
2654
+ onChange: null,
2655
+ className: null
1582
2656
  };
1583
2657
 
1584
- var EditForm = function EditForm(_ref) {
1585
- var value = _ref.value,
2658
+ var EditorScreens = function EditorScreens(_ref) {
2659
+ var unparsedValue = _ref.value,
1586
2660
  isTheme = _ref.isTheme,
1587
- className = _ref.className,
1588
- onChange = _ref.onChange;
1589
- // Match routes
1590
- var history = reactRouter.useHistory();
1591
- var routePush = contexts.useRoutePush();
1592
-
1593
- var _useRouteParams = useRouteParams(),
1594
- url = _useRouteParams.url,
1595
- _useRouteParams$scree = _useRouteParams.screen,
1596
- screenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1597
- _useRouteParams$field = _useRouteParams.field,
1598
- fieldParams = _useRouteParams$field === void 0 ? null : _useRouteParams$field,
1599
- _useRouteParams$form = _useRouteParams.form,
1600
- formParams = _useRouteParams$form === void 0 ? null : _useRouteParams$form; // Get screen
1601
-
2661
+ isVertical = _ref.isVertical,
2662
+ isCreateOpened = _ref.isCreateOpened,
2663
+ isParsed = _ref.isParsed,
2664
+ isTree = _ref.isTree,
2665
+ onClickScreen = _ref.onClickScreen,
2666
+ onChange = _ref.onChange,
2667
+ className = _ref.className;
2668
+ var valueWithTheme = useThemeValue(unparsedValue, isTheme);
2669
+ var value = isParsed ? unparsedValue : hooks.useParsedStory(valueWithTheme, {
2670
+ withMedias: false
2671
+ });
1602
2672
 
1603
2673
  var _ref2 = value || {},
1604
2674
  _ref2$components = _ref2.components,
1605
2675
  screens = _ref2$components === void 0 ? [] : _ref2$components;
1606
2676
 
1607
- var screenIndex = screens.findIndex(function (it) {
1608
- return it.id === screenId;
1609
- });
1610
- var screen = screenIndex !== -1 ? screens[screenIndex] : null; // Get transition value
1611
-
1612
- var _useFormTransition = useFormTransition(url, screenIndex, styles$1),
1613
- transitionName = _useFormTransition.name,
1614
- transitionTimeout = _useFormTransition.timeout;
1615
-
1616
- var _useState = React.useState(false),
2677
+ var _useState = React.useState(isCreateOpened),
1617
2678
  _useState2 = _slicedToArray__default["default"](_useState, 2),
1618
- screenSettingsOpened = _useState2[0],
1619
- setScreenSettingsOpened = _useState2[1];
2679
+ createModalOpened = _useState2[0],
2680
+ setCreateModalOpened = _useState2[1];
1620
2681
 
1621
- var _useState3 = React.useState(false),
1622
- _useState4 = _slicedToArray__default["default"](_useState3, 2),
1623
- deleteScreenModalOpened = _useState4[0],
1624
- setDeleteScreenModalOpened = _useState4[1];
2682
+ var routes = contexts.useRoutes();
2683
+ var push = contexts.useRoutePush();
2684
+ var url = contexts.useUrlGenerator();
1625
2685
 
1626
- var _useState5 = React.useState({}),
1627
- _useState6 = _slicedToArray__default["default"](_useState5, 2),
1628
- fieldForms = _useState6[0],
1629
- setFieldForms = _useState6[1];
2686
+ var _useRouteParams = useRouteParams({
2687
+ screenOnly: true
2688
+ }),
2689
+ _useRouteParams$scree = _useRouteParams.screen,
2690
+ currentScreenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree;
1630
2691
 
1631
- var _useState7 = React.useState(null),
1632
- _useState8 = _slicedToArray__default["default"](_useState7, 2),
1633
- fieldContext = _useState8[0],
1634
- setFieldContext = _useState8[1]; // Callbacks
2692
+ var createScreenFromDefinition = React.useCallback(function (definition) {
2693
+ var _ref3 = value || {},
2694
+ _ref3$components = _ref3.components,
2695
+ currentScreens = _ref3$components === void 0 ? [] : _ref3$components,
2696
+ _ref3$theme = _ref3.theme,
2697
+ theme = _ref3$theme === void 0 ? {} : _ref3$theme;
2698
+
2699
+ var _ref4 = isString__default["default"](definition) ? {
2700
+ id: definition
2701
+ } : definition,
2702
+ newScreenType = _ref4.id;
1635
2703
 
2704
+ var _ref5 = theme || {},
2705
+ _ref5$components = _ref5.components,
2706
+ themeComponents = _ref5$components === void 0 ? null : _ref5$components;
1636
2707
 
1637
- var gotoFieldForm = React.useCallback(function () {
1638
- var field = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1639
- var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1640
- var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1641
- var hasField = field !== null;
1642
- var fieldRoute = formName !== null ? 'screen.field.form' : 'screen.field';
1643
- routePush(hasField ? fieldRoute : 'screen', {
1644
- screen: screenId,
1645
- field: field !== null ? field.split('.') : null,
1646
- form: formName !== null ? utils.slug(formName) : null
2708
+ var themeScreen = themeComponents !== null ? themeComponents.find(function (it) {
2709
+ return it.type === newScreenType;
2710
+ }) || null : null;
2711
+ var newScreen = createScreen(definition, themeScreen);
2712
+ var foundIndex = screens.findIndex(function (_ref6) {
2713
+ var id = _ref6.id;
2714
+ return id === currentScreenId;
1647
2715
  });
1648
- setFieldForms(_objectSpread__default["default"](_objectSpread__default["default"]({}, fieldForms), {}, _defineProperty__default["default"]({}, "".concat(field).concat(formName !== null ? ":".concat(formName) : ''), url)));
1649
- setFieldContext(context);
1650
- }, [routePush, screenId, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
1651
- var closeFieldForm = React.useCallback(function (field) {
1652
- var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1653
- var fieldKey = "".concat(field).concat(formName !== null ? ":".concat(formName) : '');
1654
- var pastUrl = fieldForms[fieldKey] || null;
2716
+ var currentScreenIndex = !isTheme && foundIndex >= 0 ? foundIndex + 1 : null;
1655
2717
 
1656
- if (pastUrl !== null) {
1657
- history.push(pastUrl);
1658
- }
2718
+ var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
2719
+ components: [].concat(_toConsumableArray__default["default"](currentScreens.slice(0, currentScreenIndex)), [newScreen], _toConsumableArray__default["default"](currentScreens.slice(currentScreenIndex)))
2720
+ });
1659
2721
 
1660
- setFieldForms(Object.keys(fieldForms).reduce(function (map, key) {
1661
- return key !== fieldKey ? _objectSpread__default["default"](_objectSpread__default["default"]({}, map), {}, _defineProperty__default["default"]({}, key, fieldForms[key])) : map;
1662
- }, {}));
1663
- }, [history, screenId, fieldForms, setFieldForms]);
1664
- var triggerOnChange = React.useCallback(function (newValue) {
1665
2722
  if (onChange !== null) {
1666
2723
  onChange(newValue);
1667
2724
  }
1668
- }, [onChange]);
1669
- var onScreenFormChange = React.useCallback(function (newScreenValue) {
1670
- triggerOnChange(updateScreen(value, newScreenValue));
1671
- }, [value, triggerOnChange]);
1672
- var onClickDuplicate = React.useCallback(function () {
1673
- triggerOnChange(duplicateScreen(value, screenId));
1674
- setScreenSettingsOpened(false);
1675
- }, [value, screenId, triggerOnChange, setScreenSettingsOpened]);
1676
- var onClickDelete = React.useCallback(function () {
1677
- setDeleteScreenModalOpened(true);
1678
- setScreenSettingsOpened(false);
1679
- }, [setScreenSettingsOpened, setDeleteScreenModalOpened]);
1680
- var onSettingsClick = React.useCallback(function () {
1681
- setScreenSettingsOpened(function (opened) {
1682
- return !opened;
2725
+
2726
+ return newScreen;
2727
+ }, [value, onChange, isTheme, screens, currentScreenId, setCreateModalOpened]);
2728
+ var onOrderChange = React.useCallback(function (listItems) {
2729
+ var ids = listItems.map(function (_ref7) {
2730
+ var id = _ref7.id;
2731
+ return id;
2732
+ });
2733
+ var screenProps = listItems.map(function (_ref8) {
2734
+ var id = _ref8.id,
2735
+ _ref8$props = _ref8.props,
2736
+ props = _ref8$props === void 0 ? null : _ref8$props;
2737
+ return {
2738
+ id: id,
2739
+ props: props
2740
+ };
2741
+ });
2742
+ var hasScreenProps = (screenProps.filter(function (_ref9) {
2743
+ var props = _ref9.props;
2744
+ return props !== null;
2745
+ }) || []).length > 0;
2746
+
2747
+ var _ref10 = value || {},
2748
+ _ref10$components = _ref10.components,
2749
+ currentScreens = _ref10$components === void 0 ? [] : _ref10$components;
2750
+
2751
+ var currentIds = currentScreens.map(function (_ref11) {
2752
+ var id = _ref11.id;
2753
+ return id;
2754
+ });
2755
+ var sameOrder = listItems.reduce(function (same, _ref12, index) {
2756
+ var id = _ref12.id;
2757
+ return same && id === currentIds[index];
2758
+ }, true);
2759
+
2760
+ if (!sameOrder || hasScreenProps) {
2761
+ var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
2762
+ components: _toConsumableArray__default["default"](currentScreens).sort(function (_ref13, _ref14) {
2763
+ var idA = _ref13.id;
2764
+ var idB = _ref14.id;
2765
+ var indexA = ids.indexOf(idA);
2766
+ var indexB = ids.indexOf(idB);
2767
+
2768
+ if (indexA === indexB) {
2769
+ return 0;
2770
+ }
2771
+
2772
+ return indexA > indexB ? 1 : -1;
2773
+ }).map(function (_ref15) {
2774
+ var _screenProps$find;
2775
+
2776
+ var id = _ref15.id,
2777
+ props = _objectWithoutProperties__default["default"](_ref15, _excluded$1);
2778
+
2779
+ return _objectSpread__default["default"](_objectSpread__default["default"]({
2780
+ id: id
2781
+ }, props), (_screenProps$find = screenProps.find(function (_ref16) {
2782
+ var propsId = _ref16.id;
2783
+ return propsId === id;
2784
+ })) === null || _screenProps$find === void 0 ? void 0 : _screenProps$find.props);
2785
+ })
2786
+ });
2787
+
2788
+ if (onChange !== null) {
2789
+ onChange(newValue);
2790
+ }
2791
+ }
2792
+ }, [value, onChange]);
2793
+ var onClickScreenType = React.useCallback(function (definition) {
2794
+ setCreateModalOpened(false);
2795
+ var currentScreen = isTheme ? screens.find(function (_ref17) {
2796
+ var type = _ref17.type;
2797
+ return type === definition.id;
2798
+ }) || null : null;
2799
+
2800
+ if (!isTheme || currentScreen === null) {
2801
+ currentScreen = createScreenFromDefinition(definition);
2802
+ }
2803
+
2804
+ push('screen', {
2805
+ screen: currentScreen.id
1683
2806
  });
1684
- }, [setScreenSettingsOpened]);
1685
- var onDropdownClickOutside = React.useCallback(function () {
1686
- setScreenSettingsOpened(false);
1687
- }, [setScreenSettingsOpened]);
1688
- var onDeleteScreenConfirm = React.useCallback(function () {
1689
- triggerOnChange(deleteScreen(value, screenId));
1690
- setDeleteScreenModalOpened(false);
1691
- }, [value, triggerOnChange, screenId, setScreenSettingsOpened]);
1692
- var onDeleteScreenCancel = React.useCallback(function () {
1693
- setDeleteScreenModalOpened(false);
1694
- }, [setDeleteScreenModalOpened]);
1695
- var dropdownItems = [!isTheme ? {
1696
- id: 'duplicate',
1697
- type: 'button',
1698
- className: 'text-left text-info',
1699
- label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1700
- id: "IBjY5r",
1701
- defaultMessage: [{
1702
- "type": 0,
1703
- "value": "Duplicate screen"
1704
- }]
1705
- }),
1706
- onClick: onClickDuplicate
1707
- } : null, {
1708
- id: 'delete',
1709
- type: 'button',
1710
- className: 'text-left text-danger',
1711
- label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1712
- id: "hpiKce",
1713
- defaultMessage: [{
1714
- "type": 0,
1715
- "value": "Delete screen"
1716
- }]
1717
- }),
1718
- onClick: onClickDelete
1719
- }].filter(function (it) {
1720
- return it !== null;
1721
- });
2807
+ onClickScreen(currentScreen);
2808
+ }, [screens, isTheme, createScreenFromDefinition, push, onClickScreen]);
2809
+ var onClickAdd = React.useCallback(function () {
2810
+ return setCreateModalOpened(true);
2811
+ }, [setCreateModalOpened]);
2812
+ var onCreateModalRequestClose = React.useCallback(function () {
2813
+ return setCreateModalOpened(false);
2814
+ }, [setCreateModalOpened]);
1722
2815
  return /*#__PURE__*/React__default["default"].createElement("div", {
1723
- className: classNames__default["default"](['d-flex', 'flex-column', className])
1724
- }, screenId !== null ? /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
2816
+ className: classNames__default["default"](['d-flex', 'flex-column', styles$7.container, className])
2817
+ }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
1725
2818
  compact: true,
1726
2819
  noWrap: true,
1727
2820
  withoutCollapse: true,
1728
- className: classNames__default["default"](['sticky-top', 'border-bottom', 'border-dark', styles$1.navbar])
1729
- }, /*#__PURE__*/React__default["default"].createElement(Breadcrumb, {
1730
- story: value,
1731
- url: url,
1732
- screenId: screenId,
1733
- field: fieldParams,
1734
- form: formParams,
1735
- className: "mr-auto"
1736
- }), fieldParams === null ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(SettingsButton, {
1737
- onClick: onSettingsClick
1738
- }), /*#__PURE__*/React__default["default"].createElement(components.DropdownMenu, {
1739
- items: dropdownItems,
1740
- visible: screenSettingsOpened,
1741
- align: "right",
1742
- onClickOutside: onDropdownClickOutside
1743
- })) : null) : null, /*#__PURE__*/React__default["default"].createElement("div", {
1744
- className: classNames__default["default"](['flex-grow-1', 'd-flex', 'w-100', styles$1.content])
1745
- }, screen !== null ? /*#__PURE__*/React__default["default"].createElement(reactTransitionGroup.CSSTransitionGroup, {
1746
- transitionName: transitionName,
1747
- transitionEnterTimeout: transitionTimeout,
1748
- transitionLeaveTimeout: transitionTimeout,
1749
- className: "w-100 flex-grow-1"
1750
- }, fieldParams !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1751
- className: classNames__default["default"](['w-100', styles$1.panel]),
1752
- key: "field-".concat(fieldParams, "-").concat(formParams)
1753
- }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenProvider, {
1754
- data: screen
1755
- }, /*#__PURE__*/React__default["default"].createElement(FieldWithContexts, {
1756
- name: fieldParams.replace(/\//g, '.'),
1757
- value: screen,
1758
- form: formParams,
1759
- className: styles$1.form,
1760
- gotoFieldForm: gotoFieldForm,
1761
- closeFieldForm: closeFieldForm,
1762
- fieldContext: fieldContext,
1763
- onChange: onScreenFormChange
1764
- }))) : /*#__PURE__*/React__default["default"].createElement("div", {
1765
- className: classNames__default["default"](['w-100', styles$1.panel]),
1766
- key: "screen-".concat(screen.id)
1767
- }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenProvider, {
1768
- data: screen
1769
- }, /*#__PURE__*/React__default["default"].createElement(ScreenForm, {
1770
- value: screen,
1771
- className: styles$1.form,
1772
- onChange: onScreenFormChange,
1773
- gotoFieldForm: gotoFieldForm,
1774
- closeFieldForm: closeFieldForm
1775
- })))) : /*#__PURE__*/React__default["default"].createElement(components.Empty, {
1776
- className: "w-100 m-2"
2821
+ className: classNames__default["default"](['sticky-top', styles$7.navbar])
2822
+ }, /*#__PURE__*/React__default["default"].createElement("strong", {
2823
+ className: "mb-0 mr-auto"
1777
2824
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
1778
- id: "QfpTKK",
2825
+ id: "jf+4Hq",
1779
2826
  defaultMessage: [{
1780
2827
  "type": 0,
1781
- "value": "Select a screen..."
1782
- }],
1783
- decription: "Indication to select a screen to view the form"
1784
- }))), deleteScreenModalOpened ? /*#__PURE__*/React__default["default"].createElement(DeleteScreenModal, {
1785
- onConfirm: onDeleteScreenConfirm,
1786
- onCancel: onDeleteScreenCancel
2828
+ "value": "Screens"
2829
+ }]
2830
+ })), /*#__PURE__*/React__default["default"].createElement(components.Button, {
2831
+ theme: "primary",
2832
+ size: "sm",
2833
+ onClick: onClickAdd,
2834
+ icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
2835
+ icon: freeSolidSvgIcons.faPlus
2836
+ })
2837
+ })), /*#__PURE__*/React__default["default"].createElement("div", {
2838
+ className: "flex-grow-1 d-flex w-100 p-2"
2839
+ }, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
2840
+ path: [routes.screen, routes.home],
2841
+ render: function render(_ref18) {
2842
+ var _ref18$match$params$s = _ref18.match.params.screen,
2843
+ screenId = _ref18$match$params$s === void 0 ? null : _ref18$match$params$s;
2844
+ return screens.length > 0 ? /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
2845
+ items: screens.map(function (it) {
2846
+ return {
2847
+ id: it.id,
2848
+ screen: it,
2849
+ href: url('screen', {
2850
+ screen: it.id
2851
+ }),
2852
+ active: it.id === screenId
2853
+ };
2854
+ }),
2855
+ isVertical: isVertical,
2856
+ withPreview: true,
2857
+ sortable: !isTree,
2858
+ className: "w-100",
2859
+ onClickItem: onClickScreen,
2860
+ onOrderChange: onOrderChange,
2861
+ isTree: isTree
2862
+ }) : /*#__PURE__*/React__default["default"].createElement(components.Empty, {
2863
+ className: "flex-grow-1 p-2"
2864
+ }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
2865
+ theme: "primary",
2866
+ onClick: onClickAdd
2867
+ }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
2868
+ id: "JoWKee",
2869
+ defaultMessage: [{
2870
+ "type": 0,
2871
+ "value": "Create your first screen"
2872
+ }]
2873
+ })));
2874
+ }
2875
+ })), createModalOpened ? /*#__PURE__*/React__default["default"].createElement(ScreenTypesModal, {
2876
+ selectedTypes: isTheme ? screens.map(function (_ref19) {
2877
+ var type = _ref19.type;
2878
+ return type;
2879
+ }) : [],
2880
+ onClickScreenType: onClickScreenType,
2881
+ onRequestClose: onCreateModalRequestClose
1787
2882
  }) : null);
1788
2883
  };
1789
2884
 
1790
- EditForm.propTypes = propTypes$2;
1791
- EditForm.defaultProps = defaultProps$2;
1792
-
1793
- var styles = {"container":"micromag-editor-container","left":"micromag-editor-left","right":"micromag-editor-right","center":"micromag-editor-center","fullscreen":"micromag-editor-fullscreen","preview":"micromag-editor-preview","inner":"micromag-editor-inner","visible":"micromag-editor-visible","screen-medium":"micromag-editor-screen-medium","top":"micromag-editor-top"};
2885
+ EditorScreens.propTypes = propTypes$4;
2886
+ EditorScreens.defaultProps = defaultProps$4;
1794
2887
 
1795
- var propTypes$1 = {
2888
+ var propTypes$3 = {
1796
2889
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
1797
2890
  deviceScreens: core.PropTypes.deviceScreens,
1798
2891
  viewerTheme: core.PropTypes.viewerTheme,
@@ -1803,7 +2896,7 @@ var propTypes$1 = {
1803
2896
  onChange: PropTypes__default["default"].func,
1804
2897
  className: PropTypes__default["default"].string
1805
2898
  };
1806
- var defaultProps$1 = {
2899
+ var defaultProps$3 = {
1807
2900
  value: null,
1808
2901
  deviceScreens: utils.getDeviceScreens(),
1809
2902
  viewerTheme: null,
@@ -1896,7 +2989,11 @@ var Editor = function Editor(_ref) {
1896
2989
  if (screenSize.screen) {
1897
2990
  setMobileView('preview');
1898
2991
  }
1899
- }, [screenSize.screen]);
2992
+
2993
+ push('screen', {
2994
+ screen: clickedScreenId.current
2995
+ });
2996
+ }, [screenSize.screen, push]);
1900
2997
  var onPreviewScreenChange = React.useCallback(function (_ref4) {
1901
2998
  var newScreenId = _ref4.id;
1902
2999
  push('screen', {
@@ -1918,20 +3015,21 @@ var Editor = function Editor(_ref) {
1918
3015
  var cnt = item.parentNode.parentNode.parentNode;
1919
3016
  screens.scrollTop = cnt.offsetTop + item.offsetTop + item.offsetHeight / 2 - screens.clientHeight / 2;
1920
3017
  }
1921
- }, [screenId]);
3018
+ }, [screenId]); // console.log('editor level value', value);
3019
+
1922
3020
  return /*#__PURE__*/React__default["default"].createElement(contexts.ModalsProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.PanelsProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenSizeProvider, {
1923
3021
  size: screenSize
1924
3022
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1925
- className: classNames__default["default"]([styles.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
1926
- return styles["screen-".concat(screenName)];
1927
- }) : null, (_ref5 = {}, _defineProperty__default["default"](_ref5, styles.fullscreen, fullscreen), _defineProperty__default["default"](_ref5, className, className), _ref5)]),
3023
+ className: classNames__default["default"]([styles$f.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3024
+ return styles$f["screen-".concat(screenName)];
3025
+ }) : null, (_ref5 = {}, _defineProperty__default["default"](_ref5, styles$f.fullscreen, fullscreen), _defineProperty__default["default"](_ref5, className, className), _ref5)]),
1928
3026
  ref: refContainer
1929
3027
  }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
1930
3028
  theme: "light",
1931
3029
  compact: true,
1932
3030
  noWrap: true,
1933
3031
  withoutCollapse: true,
1934
- className: styles.top
3032
+ className: styles$f.top
1935
3033
  }, mobileView !== 'screens' ? /*#__PURE__*/React__default["default"].createElement(components.Button, {
1936
3034
  size: "sm",
1937
3035
  theme: "secondary",
@@ -1964,9 +3062,9 @@ var Editor = function Editor(_ref) {
1964
3062
  "value": "View screen"
1965
3063
  }]
1966
3064
  })) : null), /*#__PURE__*/React__default["default"].createElement("div", {
1967
- className: styles.inner
3065
+ className: styles$f.inner
1968
3066
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1969
- className: classNames__default["default"]([styles.left, _defineProperty__default["default"]({}, styles.visible, !isMobile || mobileView === 'screens')]),
3067
+ className: classNames__default["default"]([styles$f.left, _defineProperty__default["default"]({}, styles$f.visible, !isMobile || mobileView === 'screens')]),
1970
3068
  ref: refScreensContainer
1971
3069
  }, /*#__PURE__*/React__default["default"].createElement(EditorScreens, {
1972
3070
  value: story,
@@ -1976,28 +3074,28 @@ var Editor = function Editor(_ref) {
1976
3074
  onChange: onStoryChange,
1977
3075
  onClickScreen: onClickScreen,
1978
3076
  isVertical: !isMobile,
1979
- className: styles.inner
3077
+ className: styles$f.inner
1980
3078
  })), /*#__PURE__*/React__default["default"].createElement("div", {
1981
- className: classNames__default["default"]([styles.center, _defineProperty__default["default"]({}, styles.visible, !isMobile || mobileView === 'preview')])
3079
+ className: classNames__default["default"]([styles$f.center, _defineProperty__default["default"]({}, styles$f.visible, !isMobile || mobileView === 'preview')])
1982
3080
  }, /*#__PURE__*/React__default["default"].createElement(EditorPreview, {
1983
3081
  value: story,
1984
3082
  isTheme: isTheme,
1985
3083
  viewerTheme: viewerTheme,
1986
- className: styles.preview,
3084
+ className: styles$f.preview,
1987
3085
  onScreenChange: onPreviewScreenChange
1988
3086
  })), /*#__PURE__*/React__default["default"].createElement("div", {
1989
- className: classNames__default["default"]([styles.right, _defineProperty__default["default"]({}, styles.visible, !isMobile || mobileView === 'form')])
3087
+ className: classNames__default["default"]([styles$f.right, _defineProperty__default["default"]({}, styles$f.visible, !isMobile || mobileView === 'form')])
1990
3088
  }, /*#__PURE__*/React__default["default"].createElement(EditForm, {
1991
3089
  key: screenId,
1992
3090
  value: story,
1993
3091
  isTheme: isTheme,
1994
3092
  onChange: onStoryChange,
1995
- className: styles.inner
3093
+ className: styles$f.inner
1996
3094
  }))), /*#__PURE__*/React__default["default"].createElement(components.Modals, null)))));
1997
3095
  };
1998
3096
 
1999
- Editor.propTypes = propTypes$1;
2000
- Editor.defaultProps = defaultProps$1;
3097
+ Editor.propTypes = propTypes$3;
3098
+ Editor.defaultProps = defaultProps$3;
2001
3099
 
2002
3100
  var home = "/";
2003
3101
  var screen = "/:screen";
@@ -2008,6 +3106,101 @@ var defaultRoutes = {
2008
3106
  "screen.field.form": "/:screen/:field+/:form"
2009
3107
  };
2010
3108
 
3109
+ var routes = PropTypes__default["default"].shape({
3110
+ home: PropTypes__default["default"].string.isRequired,
3111
+ screen: PropTypes__default["default"].string.isRequired,
3112
+ 'screen.field': PropTypes__default["default"].string.isRequired,
3113
+ 'screen.field.form': PropTypes__default["default"].string.isRequired
3114
+ });
3115
+
3116
+ var styles = {"container":"micromag-editor-forms-settings-container","inner":"micromag-editor-forms-settings-inner"};
3117
+
3118
+ var propTypes$2 = {
3119
+ name: PropTypes__default["default"].string,
3120
+ field: core.PropTypes.formField.isRequired,
3121
+ value: core.PropTypes.component,
3122
+ className: PropTypes__default["default"].string,
3123
+ gotoFieldForm: PropTypes__default["default"].func.isRequired,
3124
+ closeFieldForm: PropTypes__default["default"].func.isRequired,
3125
+ onChange: PropTypes__default["default"].func
3126
+ };
3127
+ var defaultProps$2 = {
3128
+ name: null,
3129
+ value: null,
3130
+ className: null,
3131
+ onChange: null
3132
+ };
3133
+
3134
+ var SettingsForm = function SettingsForm(_ref) {
3135
+ var name = _ref.name,
3136
+ field = _ref.field,
3137
+ value = _ref.value,
3138
+ className = _ref.className,
3139
+ gotoFieldForm = _ref.gotoFieldForm,
3140
+ closeFieldForm = _ref.closeFieldForm,
3141
+ onChange = _ref.onChange;
3142
+ var _field$type = field.type,
3143
+ type = _field$type === void 0 ? null : _field$type;
3144
+ var fieldsManager = contexts.useFieldsManager();
3145
+
3146
+ var _ref2 = type !== null ? fieldsManager.getDefinition(type) : field,
3147
+ _ref2$component = _ref2.component,
3148
+ fieldComponent = _ref2$component === void 0 ? null : _ref2$component,
3149
+ settings = _ref2.settings;
3150
+
3151
+ var FieldComponent = contexts.useFieldComponent(fieldComponent);
3152
+ var FieldsComponent = contexts.useFieldComponent('fields');
3153
+ var SettingsComponent = FieldComponent !== null ? FieldComponent.settingsComponent || FieldsComponent : FieldsComponent;
3154
+ var onSettingsChange = React.useCallback(function (newSettingsValue) {
3155
+ var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), newSettingsValue);
3156
+
3157
+ if (onChange !== null) {
3158
+ onChange(newValue);
3159
+ }
3160
+ }, [value, onChange]);
3161
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3162
+ className: classNames__default["default"]([styles.container, _defineProperty__default["default"]({}, className, className)])
3163
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
3164
+ className: styles.inner
3165
+ }, /*#__PURE__*/React__default["default"].createElement(SettingsComponent, {
3166
+ name: name,
3167
+ field: field,
3168
+ fields: settings,
3169
+ value: value,
3170
+ onChange: onSettingsChange,
3171
+ gotoFieldForm: gotoFieldForm,
3172
+ closeFieldForm: closeFieldForm
3173
+ })));
3174
+ };
3175
+
3176
+ SettingsForm.propTypes = propTypes$2;
3177
+ SettingsForm.defaultProps = defaultProps$2;
3178
+
3179
+ // eslint-disable-next-line import/prefer-default-export
3180
+
3181
+ var FormsComponents = /*#__PURE__*/Object.freeze({
3182
+ __proto__: null,
3183
+ Settings: SettingsForm
3184
+ });
3185
+
3186
+ /* eslint-disable react/jsx-props-no-spreading */
3187
+ var propTypes$1 = {
3188
+ children: PropTypes__default["default"].node
3189
+ };
3190
+ var defaultProps$1 = {
3191
+ children: null
3192
+ };
3193
+
3194
+ var FormsProvider = function FormsProvider(props) {
3195
+ return /*#__PURE__*/React__default["default"].createElement(contexts.ComponentsProvider, Object.assign({
3196
+ namespace: contexts.FORMS_NAMESPACE,
3197
+ components: FormsComponents
3198
+ }, props));
3199
+ };
3200
+
3201
+ FormsProvider.propTypes = propTypes$1;
3202
+ FormsProvider.defaultProps = defaultProps$1;
3203
+
2011
3204
  var _excluded = ["value", "memoryRouter", "routes", "basePath", "uppy", "googleApiKey", "googleMapsLibraries"];
2012
3205
  var propTypes = {
2013
3206
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),