@micromag/editor 0.2.412 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -15,11 +15,11 @@ var PropTypes = require('prop-types');
15
15
  var React = require('react');
16
16
  var reactIntl = require('react-intl');
17
17
  var reactRouter = require('react-router');
18
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
18
19
  var reactTransitionGroup = require('react-transition-group');
19
20
  var uuid = require('uuid');
20
21
  var isString = require('lodash/isString');
21
22
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
22
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
23
23
  require('lodash/isArray');
24
24
  require('lodash/get');
25
25
  require('lodash/set');
@@ -28,6 +28,7 @@ var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
28
28
  var fields = require('@micromag/fields');
29
29
  var size = require('@folklore/size');
30
30
  var viewer = require('@micromag/viewer');
31
+ var _toArray = require('@babel/runtime/helpers/toArray');
31
32
  var isFunction = require('lodash/isFunction');
32
33
  var reactSortablejs = require('react-sortablejs');
33
34
  var core$1 = require('@dnd-kit/core');
@@ -47,9 +48,10 @@ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray)
47
48
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
48
49
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
49
50
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
51
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
50
52
  var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
51
53
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
52
- var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
54
+ var _toArray__default = /*#__PURE__*/_interopDefaultLegacy(_toArray);
53
55
  var isFunction__default = /*#__PURE__*/_interopDefaultLegacy(isFunction);
54
56
  var _createForOfIteratorHelper__default = /*#__PURE__*/_interopDefaultLegacy(_createForOfIteratorHelper);
55
57
  var orderBy__default = /*#__PURE__*/_interopDefaultLegacy(orderBy);
@@ -90,24 +92,110 @@ var useRouteParams = function useRouteParams() {
90
92
  return routeParams;
91
93
  };
92
94
 
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"};
95
+ var styles$i = {"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"};
94
96
 
95
- var createScreen = function createScreen(definition) {
96
- var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
97
+ var useFormTransition = function useFormTransition(url, screenIndex, styles) {
98
+ var lastPageRef = React.useRef({
99
+ url: url,
100
+ screenIndex: screenIndex
101
+ });
102
+ var direction = React.useMemo(function () {
103
+ var _lastPageRef$current = lastPageRef.current,
104
+ lastScreenIndex = _lastPageRef$current.screenIndex,
105
+ lastUrl = _lastPageRef$current.url;
106
+ lastPageRef.current.url = url;
107
+ lastPageRef.current.screenIndex = screenIndex;
97
108
 
98
- var _ref = isString__default["default"](definition) ? {
99
- id: definition
100
- } : definition,
101
- id = _ref.id,
109
+ if (screenIndex !== lastScreenIndex) {
110
+ // return screenIndex > lastScreenIndex ? 'bottom' : 'top';
111
+ return null;
112
+ }
113
+
114
+ var urlSplit = url.split('/');
115
+ var lastUrlSplit = lastUrl.split('/');
116
+ var currentPartsCount = urlSplit.length;
117
+ var previousPartsCount = lastUrlSplit.length;
118
+ var isSettings = urlSplit[currentPartsCount - 1] === 'settings';
119
+ var wasSettings = lastUrlSplit[previousPartsCount - 1] === 'settings';
120
+ currentPartsCount -= isSettings ? 1 : 0;
121
+ previousPartsCount -= wasSettings ? 1 : 0;
122
+ return currentPartsCount >= previousPartsCount ? 'right' : 'left';
123
+ }, [url, screenIndex]);
124
+ var transitionClassNames = React.useMemo(function () {
125
+ var _classNames, _classNames2, _classNames3;
126
+
127
+ return {
128
+ 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',
129
+ 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',
130
+ exit: styles.exit || 'none',
131
+ exitActive: classNames__default["default"]((_classNames3 = {}, _defineProperty__default["default"](_classNames3, styles.exitActiveRight, direction === 'right'), _defineProperty__default["default"](_classNames3, styles.exitActiveLeft, direction === 'left'), _defineProperty__default["default"](_classNames3, styles.exitActiveTop, direction === 'top'), _defineProperty__default["default"](_classNames3, styles.exitActiveBottom, direction === 'bottom'), _classNames3)) || 'none'
132
+ };
133
+ }, [direction, screenIndex]);
134
+ return {
135
+ direction: direction,
136
+ classNames: transitionClassNames,
137
+ timeout: direction === 'left' || direction === 'right' ? 300 : 10
138
+ };
139
+ };
140
+
141
+ var styles$h = {"panel":"micromag-editor-form-panel","exit":"micromag-editor-form-exit","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","exitActiveLeft":"micromag-editor-form-exitActiveLeft","exitActiveRight":"micromag-editor-form-exitActiveRight","exitActiveBottom":"micromag-editor-form-exitActiveBottom","exitActiveTop":"micromag-editor-form-exitActiveTop"};
142
+
143
+ function getScreenFieldsWithStates(definition) {
144
+ var _ref = definition || {},
102
145
  _ref$fields = _ref.fields,
103
- fields = _ref$fields === void 0 ? [] : _ref$fields;
146
+ screenFields = _ref$fields === void 0 ? [] : _ref$fields,
147
+ _ref$states = _ref.states,
148
+ states = _ref$states === void 0 ? null : _ref$states;
149
+
150
+ if (states === null) {
151
+ return screenFields;
152
+ }
153
+
154
+ return [].concat(_toConsumableArray__default["default"](states.reduce(function (statesFields, _ref2) {
155
+ var id = _ref2.id,
156
+ _ref2$fields = _ref2.fields,
157
+ fields = _ref2$fields === void 0 ? [] : _ref2$fields,
158
+ _ref2$repeatable = _ref2.repeatable,
159
+ repeatable = _ref2$repeatable === void 0 ? false : _ref2$repeatable,
160
+ _ref2$fieldName = _ref2.fieldName,
161
+ fieldName = _ref2$fieldName === void 0 ? null : _ref2$fieldName,
162
+ label = _ref2.label;
163
+ return [].concat(_toConsumableArray__default["default"](statesFields), _toConsumableArray__default["default"](repeatable ? [{
164
+ type: 'items',
165
+ name: fieldName || id,
166
+ label: label,
167
+ stateId: id,
168
+ itemsField: {
169
+ label: label,
170
+ type: 'fields',
171
+ fields: fields
172
+ }
173
+ }] : []), _toConsumableArray__default["default"](!repeatable && fieldName !== null ? [{
174
+ type: 'fields',
175
+ name: fieldName,
176
+ stateId: id,
177
+ fields: fields
178
+ }] : []), _toConsumableArray__default["default"](!repeatable && fieldName === null ? fields.map(function (it) {
179
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
180
+ stateId: id
181
+ });
182
+ }) : []));
183
+ }, [])), _toConsumableArray__default["default"](screenFields));
184
+ }
104
185
 
105
- var defaultValueFields = fields.reduce(function (all, curr) {
106
- var _ref2 = curr || {},
107
- _ref2$name = _ref2.name,
108
- name = _ref2$name === void 0 ? null : _ref2$name,
109
- _ref2$defaultValue = _ref2.defaultValue,
110
- defaultValue = _ref2$defaultValue === void 0 ? null : _ref2$defaultValue;
186
+ var createScreen = function createScreen(definition) {
187
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
188
+ var finalDefinition = isString__default["default"](definition) ? {
189
+ id: definition
190
+ } : definition;
191
+ var id = finalDefinition.id;
192
+ var screenFields = getScreenFieldsWithStates(finalDefinition);
193
+ var defaultValueFields = screenFields.reduce(function (all, curr) {
194
+ var _ref = curr || {},
195
+ _ref$name = _ref.name,
196
+ name = _ref$name === void 0 ? null : _ref$name,
197
+ _ref$defaultValue = _ref.defaultValue,
198
+ defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue;
111
199
 
112
200
  var newAll = _objectSpread__default["default"]({}, all);
113
201
 
@@ -124,13 +212,13 @@ var createScreen = function createScreen(definition) {
124
212
  });
125
213
  };
126
214
 
127
- var _excluded$b = ["components"];
215
+ var _excluded$c = ["components"];
128
216
 
129
217
  var deleteScreen = function deleteScreen(story, screenId) {
130
218
  var _ref = story || {},
131
219
  _ref$components = _ref.components,
132
220
  components = _ref$components === void 0 ? [] : _ref$components,
133
- currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$b);
221
+ currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$c);
134
222
 
135
223
  return _objectSpread__default["default"](_objectSpread__default["default"]({}, currentValue), {}, {
136
224
  components: components.filter(function (_ref2) {
@@ -140,13 +228,13 @@ var deleteScreen = function deleteScreen(story, screenId) {
140
228
  });
141
229
  };
142
230
 
143
- var _excluded$a = ["components"];
231
+ var _excluded$b = ["components"];
144
232
 
145
233
  var duplicateScreen = function duplicateScreen(story, screenId) {
146
234
  var _ref = story || {},
147
235
  _ref$components = _ref.components,
148
236
  components = _ref$components === void 0 ? [] : _ref$components,
149
- currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$a);
237
+ currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$b);
150
238
 
151
239
  var screen = components.find(function (it) {
152
240
  return it.id === screenId;
@@ -158,7 +246,7 @@ var duplicateScreen = function duplicateScreen(story, screenId) {
158
246
  });
159
247
  };
160
248
 
161
- var _excluded$9 = ["components"];
249
+ var _excluded$a = ["components"];
162
250
 
163
251
  var updateScreen = function updateScreen(story, newScreenValue) {
164
252
  var newScreenId = newScreenValue.id;
@@ -166,7 +254,7 @@ var updateScreen = function updateScreen(story, newScreenValue) {
166
254
  var _ref = story || {},
167
255
  _ref$components = _ref.components,
168
256
  components = _ref$components === void 0 ? [] : _ref$components,
169
- currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$9);
257
+ currentValue = _objectWithoutProperties__default["default"](_ref, _excluded$a);
170
258
 
171
259
  var index = components.findIndex(function (it) {
172
260
  return it.id === newScreenId;
@@ -195,78 +283,179 @@ var getFieldByName = function getFieldByName(fields, name) {
195
283
  }, null);
196
284
  };
197
285
 
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;
209
-
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;
227
-
228
- return {
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'
233
- };
234
- }, [direction, screenIndex]);
235
- return {
236
- direction: direction,
237
- name: name,
238
- timeout: direction === 'left' || direction === 'right' ? 300 : 10
239
- };
240
- };
241
-
242
- var _excluded$8 = ["className"];
243
- var propTypes$n = {
286
+ var _excluded$9 = ["className", "dots"];
287
+ var propTypes$o = {
288
+ dots: PropTypes__default["default"].bool,
244
289
  className: PropTypes__default["default"].string
245
290
  };
246
- var defaultProps$n = {
291
+ var defaultProps$o = {
292
+ dots: false,
247
293
  className: null
248
294
  };
249
295
 
250
296
  var SettingsButton = function SettingsButton(_ref) {
251
297
  var className = _ref.className,
252
- props = _objectWithoutProperties__default["default"](_ref, _excluded$8);
298
+ dots = _ref.dots,
299
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$9);
253
300
 
254
301
  return /*#__PURE__*/React__default["default"].createElement(components.Button, Object.assign({
255
302
  className: className,
256
303
  theme: "secondary",
257
304
  size: "sm",
258
305
  icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
259
- icon: freeSolidSvgIcons.faCogs
306
+ icon: dots ? freeSolidSvgIcons.faEllipsisV : freeSolidSvgIcons.faCogs
260
307
  })
261
308
  }, props));
262
309
  };
263
310
 
264
- SettingsButton.propTypes = propTypes$n;
265
- SettingsButton.defaultProps = defaultProps$n;
311
+ SettingsButton.propTypes = propTypes$o;
312
+ SettingsButton.defaultProps = defaultProps$o;
313
+
314
+ var _excluded$8 = ["name", "form"];
315
+ var propTypes$n = {
316
+ name: PropTypes__default["default"].string,
317
+ form: PropTypes__default["default"].string,
318
+ children: PropTypes__default["default"].node
319
+ };
320
+ var defaultProps$n = {
321
+ name: null,
322
+ form: null,
323
+ children: null
324
+ };
325
+
326
+ var FieldWithContexts = function FieldWithContexts(_ref) {
327
+ var name = _ref.name,
328
+ form = _ref.form,
329
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$8);
266
330
 
267
- var styles$e = {"container":"micromag-editor-menus-breadcrumb-container"};
331
+ // Get definitions
332
+ var definition = contexts.useScreenDefinition();
333
+ var _definition$states = definition.states,
334
+ states = _definition$states === void 0 ? null : _definition$states;
335
+ var screenFields = getScreenFieldsWithStates(definition); // const [stateId = null] = name.split('.');
336
+ // const currentState = states !== null ? states.find(({ id }) => id === stateId) || null : null;
337
+
338
+ var nameParts = name.split('.');
339
+
340
+ var _nameParts = _slicedToArray__default["default"](nameParts, 1),
341
+ _nameParts$ = _nameParts[0],
342
+ stateId = _nameParts$ === void 0 ? null : _nameParts$;
343
+
344
+ var currentState = states !== null ? states.find(function (_ref2) {
345
+ var id = _ref2.id;
346
+ return id === stateId;
347
+ }) || null : null;
348
+ var finalNameParts = nameParts;
349
+
350
+ var _ref3 = currentState || {},
351
+ _ref3$repeatable = _ref3.repeatable,
352
+ repeatable = _ref3$repeatable === void 0 ? false : _ref3$repeatable,
353
+ _ref3$fieldName = _ref3.fieldName,
354
+ fieldName = _ref3$fieldName === void 0 ? null : _ref3$fieldName,
355
+ _ref3$fields = _ref3.fields,
356
+ stateFields = _ref3$fields === void 0 ? [] : _ref3$fields;
357
+
358
+ if (currentState !== null) {
359
+ finalNameParts = (repeatable || fieldName !== null) && nameParts.length <= (repeatable ? 2 : 1) ? [fieldName || stateId].concat(_toConsumableArray__default["default"](nameParts.slice(1))) : nameParts.slice(1);
360
+ }
361
+
362
+ var formComponents = contexts.useFormsComponents(); // if (currentState !== null && !repeatable && stateFieldName === null) {
363
+ // return (
364
+ // <div className="p-2">
365
+ // <Fields fields={stateFields} {...props} />
366
+ // </div>
367
+ // );
368
+ // }
369
+ // const finalFields =
370
+ // repeatable || stateFieldName !== null
371
+ // ? [{
372
+ // name: stateFieldName || stateId,
373
+ // itemsField: {
374
+ // type: 'fields',
375
+ // fields: stateFields,
376
+ // className: 'p-2'
377
+ // },
378
+ // }]
379
+ // : fields;
380
+
381
+ return /*#__PURE__*/React__default["default"].createElement("div", {
382
+ className: classNames__default["default"]({
383
+ 'p-2': form === null
384
+ })
385
+ }, finalNameParts.length > 0 ? /*#__PURE__*/React__default["default"].createElement(components.FieldForm, Object.assign({
386
+ fields: screenFields,
387
+ formComponents: formComponents,
388
+ name: finalNameParts.join('.'),
389
+ form: form
390
+ }, props)) : /*#__PURE__*/React__default["default"].createElement(fields.Fields, Object.assign({
391
+ fields: stateFields
392
+ }, props)));
393
+ };
394
+
395
+ FieldWithContexts.propTypes = propTypes$n;
396
+ FieldWithContexts.defaultProps = defaultProps$n;
397
+
398
+ var styles$g = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
268
399
 
269
400
  var propTypes$m = {
401
+ value: core.PropTypes.component,
402
+ className: PropTypes__default["default"].string,
403
+ gotoFieldForm: PropTypes__default["default"].func.isRequired,
404
+ closeFieldForm: PropTypes__default["default"].func.isRequired,
405
+ onChange: PropTypes__default["default"].func // onClickDelete: PropTypes.func,
406
+
407
+ };
408
+ var defaultProps$m = {
409
+ value: null,
410
+ className: null,
411
+ onChange: null // onClickDelete: null,
412
+
413
+ };
414
+
415
+ var ScreenForm = function ScreenForm(_ref) {
416
+ var value = _ref.value,
417
+ className = _ref.className,
418
+ gotoFieldForm = _ref.gotoFieldForm,
419
+ closeFieldForm = _ref.closeFieldForm,
420
+ onChange = _ref.onChange;
421
+
422
+ var _useScreenDefinition = contexts.useScreenDefinition(),
423
+ _useScreenDefinition$ = _useScreenDefinition.fields,
424
+ fields$1 = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // const intl = useIntl();
425
+ // const finalOnClickDelete = useCallback(() => {
426
+ // if (
427
+ // onClickDelete !== null &&
428
+ // window.confirm(
429
+ // intl.formatMessage({
430
+ // defaultMessage: 'Are you sure you want to delete this screen?',
431
+ // description: 'Confirm message when deleting a screen',
432
+ // }),
433
+ // )
434
+ // ) {
435
+ // onClickDelete(value);
436
+ // }
437
+ // }, [intl, onClickDelete, value]);
438
+
439
+
440
+ return /*#__PURE__*/React__default["default"].createElement("div", {
441
+ className: classNames__default["default"]([styles$g.container, _defineProperty__default["default"]({}, className, className)])
442
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
443
+ className: styles$g.inner
444
+ }, /*#__PURE__*/React__default["default"].createElement(fields.Fields, {
445
+ fields: fields$1,
446
+ value: value,
447
+ onChange: onChange,
448
+ gotoFieldForm: gotoFieldForm,
449
+ closeFieldForm: closeFieldForm
450
+ })));
451
+ };
452
+
453
+ ScreenForm.propTypes = propTypes$m;
454
+ ScreenForm.defaultProps = defaultProps$m;
455
+
456
+ var styles$f = {"container":"micromag-editor-menus-breadcrumb-container"};
457
+
458
+ var propTypes$l = {
270
459
  story: core.PropTypes.story,
271
460
  screenId: PropTypes__default["default"].string,
272
461
  field: PropTypes__default["default"].string,
@@ -274,7 +463,7 @@ var propTypes$m = {
274
463
  url: PropTypes__default["default"].string.isRequired,
275
464
  className: PropTypes__default["default"].string
276
465
  };
277
- var defaultProps$m = {
466
+ var defaultProps$l = {
278
467
  story: null,
279
468
  screenId: null,
280
469
  field: null,
@@ -298,44 +487,87 @@ var Breadcrumb = function Breadcrumb(_ref) {
298
487
  var history = reactRouter.useHistory();
299
488
  var screensManager = contexts.useScreensManager();
300
489
  var fieldsManager = contexts.useFieldsManager();
301
- var items = React.useMemo(function () {
490
+ var route = contexts.useUrlGenerator();
491
+
492
+ var _useMemo = React.useMemo(function () {
302
493
  var screenIndex = screens.findIndex(function (it) {
303
494
  return it.id === screenId;
304
495
  });
305
496
 
306
497
  if (!screens[screenIndex]) {
307
- return [];
498
+ return {};
308
499
  }
309
500
 
310
501
  var type = screens[screenIndex].type;
502
+ var definition = screensManager.getDefinition(type);
503
+ var states = definition.states;
504
+ return {
505
+ fields: [].concat(_toConsumableArray__default["default"](getScreenFieldsWithStates(definition)), [utils.getScreenExtraField(intl)]),
506
+ states: states
507
+ };
508
+ }, [screens, screenId, screensManager, intl]),
509
+ _useMemo$fields = _useMemo.fields,
510
+ screenFields = _useMemo$fields === void 0 ? [] : _useMemo$fields,
511
+ _useMemo$states = _useMemo.states,
512
+ screenStates = _useMemo$states === void 0 ? null : _useMemo$states;
513
+
514
+ var items = React.useMemo(function () {
311
515
  var fieldItems = [];
516
+ var currentState = null;
312
517
 
313
518
  if (field !== null) {
314
- var _screensManager$getDe = screensManager.getDefinition(type),
315
- _screensManager$getDe2 = _screensManager$getDe.fields,
316
- screenFields = _screensManager$getDe2 === void 0 ? [] : _screensManager$getDe2;
519
+ var fieldPath = field.split('/'); // Get state and remove it from path. Replace it with field name if necessary (repeatable or fieldName present)
520
+
521
+ var _fieldPath = _slicedToArray__default["default"](fieldPath, 1),
522
+ _fieldPath$ = _fieldPath[0],
523
+ stateId = _fieldPath$ === void 0 ? null : _fieldPath$;
524
+
525
+ currentState = screenStates !== null ? screenStates.find(function (_ref3) {
526
+ var id = _ref3.id;
527
+ return id === stateId;
528
+ }) || null : null;
529
+ var finalFieldPath = fieldPath;
530
+
531
+ if (currentState !== null) {
532
+ var _ref4 = currentState || {},
533
+ _ref4$repeatable = _ref4.repeatable,
534
+ repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable,
535
+ _ref4$fieldName = _ref4.fieldName,
536
+ fieldName = _ref4$fieldName === void 0 ? null : _ref4$fieldName;
537
+
538
+ finalFieldPath = (repeatable || fieldName !== null) && fieldPath.length <= (repeatable ? 2 : 1) ? [fieldName || stateId].concat(_toConsumableArray__default["default"](fieldPath.slice(1))) : fieldPath.slice(1);
539
+ }
317
540
 
318
- var fields = [].concat(_toConsumableArray__default["default"](screenFields), [utils.getScreenExtraField(intl)]);
319
- var fieldPath = field.split('/');
320
- var lastKeyIndex = fieldPath.length - 1;
541
+ var lastKeyIndex = finalFieldPath.length - 1;
321
542
  var parentItem = null;
322
- fieldPath.reduce(function (currentFields, key, keyIndex) {
543
+ finalFieldPath.reduce(function (currentFields, key, keyIndex) {
323
544
  var _currentFields$type = currentFields.type,
324
- fieldType = _currentFields$type === void 0 ? null : _currentFields$type;
545
+ fieldType = _currentFields$type === void 0 ? null : _currentFields$type,
546
+ _currentFields$fields = currentFields.fields,
547
+ currentSubFields = _currentFields$fields === void 0 ? null : _currentFields$fields,
548
+ _currentFields$itemsF = currentFields.itemsField,
549
+ currentItemsField = _currentFields$itemsF === void 0 ? null : _currentFields$itemsF;
325
550
  var fieldsDef = fieldType !== null ? fieldsManager.getDefinition(fieldType) : currentFields;
326
551
  var _fieldsDef$fields = fieldsDef.fields,
327
- subFields = _fieldsDef$fields === void 0 ? null : _fieldsDef$fields,
552
+ defSubFields = _fieldsDef$fields === void 0 ? null : _fieldsDef$fields,
328
553
  _fieldsDef$settings = fieldsDef.settings,
329
554
  settings = _fieldsDef$settings === void 0 ? null : _fieldsDef$settings,
330
555
  _fieldsDef$itemsField = fieldsDef.itemsField,
331
- itemsField = _fieldsDef$itemsField === void 0 ? null : _fieldsDef$itemsField;
556
+ defItemsField = _fieldsDef$itemsField === void 0 ? null : _fieldsDef$itemsField;
557
+ var itemsField = currentItemsField || defItemsField;
558
+ var subFields = currentSubFields || defSubFields;
332
559
  var currentSubfields = subFields !== null ? getFieldByName(subFields, key) : null;
333
560
  var currentSettings = settings !== null ? getFieldByName(settings, key) : null;
334
561
  var isCurrentSubfields = currentSubfields !== null;
335
562
  var isCurrentSettings = currentSettings !== null;
336
563
  var isListItems = itemsField !== null && !!key.match(/^[0-9]+$/);
337
564
  var isLastIndex = keyIndex === lastKeyIndex;
338
- var pathPrefix = "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex + 1).join('/'));
565
+ var pathPrefix = route('screen.field', {
566
+ screen: screenId,
567
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray__default["default"](finalFieldPath.slice(0, keyIndex + 1))).filter(function (it) {
568
+ return it !== null;
569
+ })
570
+ });
339
571
  var pathSuffix = isLastIndex && form !== null ? "/".concat(form) : '';
340
572
  var addNewItem = isLastIndex || isListItems;
341
573
  var itemPath = "".concat(pathPrefix).concat(pathSuffix);
@@ -348,7 +580,13 @@ var Breadcrumb = function Breadcrumb(_ref) {
348
580
 
349
581
  if (parentItem !== null) {
350
582
  fieldItems.push(_objectSpread__default["default"](_objectSpread__default["default"]({}, parentItem), {}, {
351
- url: "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex).join('/'), "/settings")
583
+ url: route('screen.field.form', {
584
+ screen: screenId,
585
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray__default["default"](finalFieldPath.slice(0, keyIndex))).filter(function (it) {
586
+ return it !== null;
587
+ }),
588
+ form: 'settings'
589
+ })
352
590
  }));
353
591
  }
354
592
  } else if (isListItems) {
@@ -358,9 +596,9 @@ var Breadcrumb = function Breadcrumb(_ref) {
358
596
  var fieldLabel = nextFields ? nextFields.breadcrumbLabel || nextFields.label : null;
359
597
  var itemLabel = utils.isMessage(fieldLabel) ? intl.formatMessage(fieldLabel) : fieldLabel;
360
598
 
361
- var _ref3 = parentItem || {},
362
- _ref3$label = _ref3.label,
363
- parentItemLabel = _ref3$label === void 0 ? null : _ref3$label;
599
+ var _ref5 = parentItem || {},
600
+ _ref5$label = _ref5.label,
601
+ parentItemLabel = _ref5$label === void 0 ? null : _ref5$label;
364
602
 
365
603
  var finalItemLabel = isListItems ? "".concat(itemLabel, " #").concat(parseInt(key, 10) + 1) : itemLabel || parentItemLabel;
366
604
  var item = {
@@ -376,21 +614,26 @@ var Breadcrumb = function Breadcrumb(_ref) {
376
614
  parentItem = item;
377
615
  return nextFields;
378
616
  }, {
379
- fields: fields
617
+ fields: screenFields
380
618
  });
381
619
  }
382
620
 
383
- var finalItems = [{
384
- label: intl.formatMessage({
621
+ var finalItems = [currentState === null || (currentState.repeatable || false) === false ? {
622
+ label: currentState !== null ? currentState.label : intl.formatMessage({
385
623
  id: "AHvHaY",
386
624
  defaultMessage: [{
387
625
  "type": 0,
388
626
  "value": "Parameters"
389
627
  }]
390
628
  }),
391
- url: "/".concat(screenId),
629
+ url: currentState !== null ? route('screen.field', {
630
+ screen: screenId,
631
+ field: currentState.id
632
+ }) : route('screen', {
633
+ screen: screenId
634
+ }),
392
635
  active: false
393
- }].concat(fieldItems).filter(function (it) {
636
+ } : null].concat(fieldItems).filter(function (it) {
394
637
  return it !== null;
395
638
  });
396
639
  var lastItemsIndex = finalItems.length - 1;
@@ -400,7 +643,7 @@ var Breadcrumb = function Breadcrumb(_ref) {
400
643
  active: true
401
644
  }) : it;
402
645
  });
403
- }, [intl, screens, screenId, field, form, url, screensManager, fieldsManager]);
646
+ }, [intl, route, screenId, field, form, url, screenFields, screenStates, fieldsManager]);
404
647
  var itemsLength = items.length;
405
648
  var onClickBack = React.useCallback(function () {
406
649
  history.push(items[itemsLength - 2].url);
@@ -408,110 +651,27 @@ var Breadcrumb = function Breadcrumb(_ref) {
408
651
  var withBack = itemsLength > 1;
409
652
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, withBack ? /*#__PURE__*/React__default["default"].createElement(components.BackButton, {
410
653
  onClick: onClickBack,
411
- className: "mr-2"
654
+ className: "me-2 py-0"
412
655
  }) : null, /*#__PURE__*/React__default["default"].createElement(components.Breadcrumb, {
413
656
  items: items,
414
657
  theme: "secondary",
415
658
  withoutBar: true,
416
659
  noWrap: true,
417
- className: classNames__default["default"]([styles$e.container, 'text-truncate', _defineProperty__default["default"]({}, className, className !== null)])
660
+ className: classNames__default["default"]([styles$f.container, 'text-truncate', _defineProperty__default["default"]({}, className, className !== null)])
418
661
  }));
419
662
  };
420
663
 
421
- Breadcrumb.propTypes = propTypes$m;
422
- Breadcrumb.defaultProps = defaultProps$m;
423
-
424
- var styles$d = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
425
-
426
- var propTypes$l = {
427
- value: core.PropTypes.component,
428
- className: PropTypes__default["default"].string,
429
- gotoFieldForm: PropTypes__default["default"].func.isRequired,
430
- closeFieldForm: PropTypes__default["default"].func.isRequired,
431
- onChange: PropTypes__default["default"].func // onClickDelete: PropTypes.func,
432
-
433
- };
434
- var defaultProps$l = {
435
- value: null,
436
- className: null,
437
- onChange: null // onClickDelete: null,
438
-
439
- };
440
-
441
- var ScreenForm = function ScreenForm(_ref) {
442
- var value = _ref.value,
443
- className = _ref.className,
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
-
664
+ Breadcrumb.propTypes = propTypes$l;
665
+ Breadcrumb.defaultProps = defaultProps$l;
465
666
 
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
- };
667
+ var styles$e = {"container":"micromag-editor-modals-delete-screen-container","description":"micromag-editor-modals-delete-screen-description","actions":"micromag-editor-modals-delete-screen-actions"};
478
668
 
479
- ScreenForm.propTypes = propTypes$l;
480
- ScreenForm.defaultProps = defaultProps$l;
481
-
482
- /* eslint-disable react/jsx-props-no-spreading */
483
669
  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
670
  className: PropTypes__default["default"].string,
511
671
  onConfirm: PropTypes__default["default"].func,
512
672
  onCancel: PropTypes__default["default"].func
513
673
  };
514
- var defaultProps$j = {
674
+ var defaultProps$k = {
515
675
  className: null,
516
676
  onConfirm: null,
517
677
  onCancel: null
@@ -529,10 +689,10 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
529
689
  "value": "Delete screen"
530
690
  }]
531
691
  }),
532
- className: classNames__default["default"]([styles$c.container, _defineProperty__default["default"]({}, className, className)]),
692
+ className: classNames__default["default"]([styles$e.container, _defineProperty__default["default"]({}, className, className)]),
533
693
  onClickClose: onCancel
534
694
  }, /*#__PURE__*/React__default["default"].createElement("div", {
535
- className: styles$c.description
695
+ className: styles$e.description
536
696
  }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
537
697
  id: "q/tLk0",
538
698
  defaultMessage: [{
@@ -540,10 +700,10 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
540
700
  "value": "Are you sure you want to delete this screen?"
541
701
  }]
542
702
  }))), /*#__PURE__*/React__default["default"].createElement("div", {
543
- className: styles$c.actions
703
+ className: styles$e.actions
544
704
  }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
545
705
  onClick: onCancel,
546
- className: "btn-outline-secondary mr-2"
706
+ className: "btn-outline-secondary me-2"
547
707
  }, /*#__PURE__*/React__default["default"].createElement(components.Label, null, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
548
708
  id: "0GT0SI",
549
709
  defaultMessage: [{
@@ -563,18 +723,16 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
563
723
  }))));
564
724
  };
565
725
 
566
- DeleteScreenModal.propTypes = propTypes$j;
567
- DeleteScreenModal.defaultProps = defaultProps$j;
568
-
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"};
726
+ DeleteScreenModal.propTypes = propTypes$k;
727
+ DeleteScreenModal.defaultProps = defaultProps$k;
570
728
 
571
- var propTypes$i = {
729
+ var propTypes$j = {
572
730
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
573
731
  isTheme: PropTypes__default["default"].bool,
574
732
  className: PropTypes__default["default"].string,
575
733
  onChange: PropTypes__default["default"].func
576
734
  };
577
- var defaultProps$i = {
735
+ var defaultProps$j = {
578
736
  value: null,
579
737
  isTheme: false,
580
738
  className: null,
@@ -607,10 +765,18 @@ var EditForm = function EditForm(_ref) {
607
765
  var screenIndex = screens.findIndex(function (it) {
608
766
  return it.id === screenId;
609
767
  });
610
- var screen = screenIndex !== -1 ? screens[screenIndex] : null; // Get transition value
768
+ var screen = screenIndex !== -1 ? screens[screenIndex] : null;
769
+ var screensManager = contexts.useScreensManager();
770
+ var screenFields = React.useMemo(function () {
771
+ var _ref3 = screen || {},
772
+ type = _ref3.type;
611
773
 
612
- var _useFormTransition = useFormTransition(url, screenIndex, styles$b),
613
- transitionName = _useFormTransition.name,
774
+ var definition = type !== null ? screensManager.getDefinition(type) : null;
775
+ return definition != null ? getScreenFieldsWithStates(definition) : [];
776
+ }, [screensManager, screen]); // Get transition value
777
+
778
+ var _useFormTransition = useFormTransition(url, screenIndex, styles$h),
779
+ transitionClassNames = _useFormTransition.classNames,
614
780
  transitionTimeout = _useFormTransition.timeout;
615
781
 
616
782
  var _useState = React.useState(false),
@@ -640,14 +806,29 @@ var EditForm = function EditForm(_ref) {
640
806
  var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
641
807
  var hasField = field !== null;
642
808
  var fieldRoute = formName !== null ? 'screen.field.form' : 'screen.field';
809
+
810
+ var _ref4 = field !== null ? field.split('.') : [],
811
+ _ref5 = _slicedToArray__default["default"](_ref4, 1),
812
+ _ref5$ = _ref5[0],
813
+ rootFieldName = _ref5$ === void 0 ? null : _ref5$;
814
+
815
+ var _ref6 = (rootFieldName !== null ? screenFields.find(function (_ref7) {
816
+ var name = _ref7.name;
817
+ return name === rootFieldName;
818
+ }) || null : null) || {},
819
+ _ref6$stateId = _ref6.stateId,
820
+ stateId = _ref6$stateId === void 0 ? null : _ref6$stateId;
821
+
643
822
  routePush(hasField ? fieldRoute : 'screen', {
644
823
  screen: screenId,
645
- field: field !== null ? field.split('.') : null,
824
+ field: field !== null ? [stateId].concat(_toConsumableArray__default["default"](field.split('.'))).filter(function (it) {
825
+ return it !== null;
826
+ }) : null,
646
827
  form: formName !== null ? utils.slug(formName) : null
647
828
  });
648
829
  setFieldForms(_objectSpread__default["default"](_objectSpread__default["default"]({}, fieldForms), {}, _defineProperty__default["default"]({}, "".concat(field).concat(formName !== null ? ":".concat(formName) : ''), url)));
649
830
  setFieldContext(context);
650
- }, [routePush, screenId, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
831
+ }, [routePush, screenId, screenFields, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
651
832
  var closeFieldForm = React.useCallback(function (field) {
652
833
  var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
653
834
  var fieldKey = "".concat(field).concat(formName !== null ? ":".concat(formName) : '');
@@ -695,7 +876,6 @@ var EditForm = function EditForm(_ref) {
695
876
  var dropdownItems = [!isTheme ? {
696
877
  id: 'duplicate',
697
878
  type: 'button',
698
- className: 'text-left text-info',
699
879
  label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
700
880
  id: "IBjY5r",
701
881
  defaultMessage: [{
@@ -707,7 +887,6 @@ var EditForm = function EditForm(_ref) {
707
887
  } : null, {
708
888
  id: 'delete',
709
889
  type: 'button',
710
- className: 'text-left text-danger',
711
890
  label: /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
712
891
  id: "hpiKce",
713
892
  defaultMessage: [{
@@ -725,54 +904,67 @@ var EditForm = function EditForm(_ref) {
725
904
  compact: true,
726
905
  noWrap: true,
727
906
  withoutCollapse: true,
728
- className: classNames__default["default"](['sticky-top', 'border-bottom', 'border-dark', styles$b.navbar])
907
+ className: classNames__default["default"](['sticky-top', 'border-bottom', 'border-dark', styles$h.navbar])
729
908
  }, /*#__PURE__*/React__default["default"].createElement(Breadcrumb, {
730
909
  story: value,
731
910
  url: url,
732
911
  screenId: screenId,
733
912
  field: fieldParams,
734
913
  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
914
+ className: "me-auto"
915
+ }), fieldParams === null ? /*#__PURE__*/React__default["default"].createElement("div", {
916
+ className: "dropdown"
917
+ }, /*#__PURE__*/React__default["default"].createElement(SettingsButton, {
918
+ onClick: onSettingsClick,
919
+ dots: true,
920
+ className: "py-0",
921
+ theme: "default"
738
922
  }), /*#__PURE__*/React__default["default"].createElement(components.DropdownMenu, {
923
+ align: "end",
739
924
  items: dropdownItems,
740
925
  visible: screenSettingsOpened,
741
- align: "right",
742
926
  onClickOutside: onDropdownClickOutside
743
927
  })) : 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]),
928
+ className: classNames__default["default"](['flex-grow-1', 'd-flex', 'w-100', styles$h.content])
929
+ }, screen !== null ? /*#__PURE__*/React__default["default"].createElement(reactTransitionGroup.TransitionGroup, {
930
+ className: "w-100 flex-grow-1",
931
+ childFactory: function childFactory(child) {
932
+ return /*#__PURE__*/React__default["default"].cloneElement(child, {
933
+ classNames: transitionClassNames
934
+ });
935
+ }
936
+ }, fieldParams !== null ? /*#__PURE__*/React__default["default"].createElement(reactTransitionGroup.CSSTransition, {
937
+ timeout: transitionTimeout,
752
938
  key: "field-".concat(fieldParams, "-").concat(formParams)
939
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
940
+ className: classNames__default["default"](['w-100', styles$h.panel])
753
941
  }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenProvider, {
754
942
  data: screen
755
943
  }, /*#__PURE__*/React__default["default"].createElement(FieldWithContexts, {
756
944
  name: fieldParams.replace(/\//g, '.'),
757
945
  value: screen,
758
946
  form: formParams,
759
- className: styles$b.form,
947
+ className: styles$h.form,
760
948
  gotoFieldForm: gotoFieldForm,
761
949
  closeFieldForm: closeFieldForm,
762
950
  fieldContext: fieldContext,
763
951
  onChange: onScreenFormChange
764
- }))) : /*#__PURE__*/React__default["default"].createElement("div", {
765
- className: classNames__default["default"](['w-100', styles$b.panel]),
952
+ })))) : /*#__PURE__*/React__default["default"].createElement(reactTransitionGroup.CSSTransition, {
953
+ classNames: transitionClassNames,
954
+ timeout: transitionTimeout,
955
+ key: "screen-".concat(screen.id)
956
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
957
+ className: classNames__default["default"](['w-100', styles$h.panel]),
766
958
  key: "screen-".concat(screen.id)
767
959
  }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenProvider, {
768
960
  data: screen
769
961
  }, /*#__PURE__*/React__default["default"].createElement(ScreenForm, {
770
962
  value: screen,
771
- className: styles$b.form,
963
+ className: styles$h.form,
772
964
  onChange: onScreenFormChange,
773
965
  gotoFieldForm: gotoFieldForm,
774
966
  closeFieldForm: closeFieldForm
775
- })))) : /*#__PURE__*/React__default["default"].createElement(components.Empty, {
967
+ }))))) : /*#__PURE__*/React__default["default"].createElement(components.Empty, {
776
968
  className: "w-100 m-2"
777
969
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
778
970
  id: "QfpTKK",
@@ -787,8 +979,25 @@ var EditForm = function EditForm(_ref) {
787
979
  }) : null);
788
980
  };
789
981
 
790
- EditForm.propTypes = propTypes$i;
791
- EditForm.defaultProps = defaultProps$i;
982
+ EditForm.propTypes = propTypes$j;
983
+ EditForm.defaultProps = defaultProps$j;
984
+
985
+ function useScreenStates(screen) {
986
+ var _ref = screen || {},
987
+ type = _ref.type;
988
+
989
+ var screensManager = contexts.useScreensManager();
990
+ var states = React.useMemo(function () {
991
+ var definition = screensManager.getDefinition(type) || null;
992
+
993
+ var _ref2 = definition || {},
994
+ _ref2$states = _ref2.states,
995
+ screenStates = _ref2$states === void 0 ? null : _ref2$states;
996
+
997
+ return screenStates;
998
+ }, [screensManager, type]);
999
+ return states;
1000
+ }
792
1001
 
793
1002
  var _excluded$7 = ["components"];
794
1003
 
@@ -810,14 +1019,16 @@ var useThemeValue = function useThemeValue(value) {
810
1019
  return valueWithTheme;
811
1020
  };
812
1021
 
813
- var styles$a = {"container":"micromag-editor-menus-devices-container","button":"micromag-editor-menus-devices-button"};
1022
+ var styles$d = {"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"};
1023
+
1024
+ var styles$c = {"container":"micromag-editor-menus-devices-container","button":"micromag-editor-menus-devices-button"};
814
1025
 
815
1026
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
816
- var propTypes$h = {
1027
+ var propTypes$i = {
817
1028
  color: PropTypes__default["default"].string,
818
1029
  className: PropTypes__default["default"].string
819
1030
  };
820
- var defaultProps$h = {
1031
+ var defaultProps$i = {
821
1032
  color: 'currentColor',
822
1033
  className: null
823
1034
  };
@@ -842,15 +1053,15 @@ var DesktopIcon = function DesktopIcon(_ref) {
842
1053
  }));
843
1054
  };
844
1055
 
845
- DesktopIcon.propTypes = propTypes$h;
846
- DesktopIcon.defaultProps = defaultProps$h;
1056
+ DesktopIcon.propTypes = propTypes$i;
1057
+ DesktopIcon.defaultProps = defaultProps$i;
847
1058
 
848
1059
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
849
- var propTypes$g = {
1060
+ var propTypes$h = {
850
1061
  color: PropTypes__default["default"].string,
851
1062
  className: PropTypes__default["default"].string
852
1063
  };
853
- var defaultProps$g = {
1064
+ var defaultProps$h = {
854
1065
  color: 'currentColor',
855
1066
  className: null
856
1067
  };
@@ -875,8 +1086,8 @@ var MobileIcon = function MobileIcon(_ref) {
875
1086
  }));
876
1087
  };
877
1088
 
878
- MobileIcon.propTypes = propTypes$g;
879
- MobileIcon.defaultProps = defaultProps$g;
1089
+ MobileIcon.propTypes = propTypes$h;
1090
+ MobileIcon.defaultProps = defaultProps$h;
880
1091
 
881
1092
  var DeviceIcons = /*#__PURE__*/Object.freeze({
882
1093
  __proto__: null,
@@ -884,78 +1095,418 @@ var DeviceIcons = /*#__PURE__*/Object.freeze({
884
1095
  Mobile: MobileIcon
885
1096
  });
886
1097
 
887
- var styles$9 = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
1098
+ var styles$b = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
888
1099
 
889
1100
  var _excluded$6 = ["device", "className", "iconComponents"];
890
- var propTypes$f = {
1101
+ var propTypes$g = {
891
1102
  device: PropTypes__default["default"].string.isRequired,
892
1103
  iconComponents: core.PropTypes.components,
893
1104
  className: PropTypes__default["default"].string
894
1105
  };
895
- var defaultProps$f = {
1106
+ var defaultProps$g = {
896
1107
  iconComponents: DeviceIcons,
897
1108
  className: null
898
1109
  };
899
1110
 
900
- var DeviceButton = function DeviceButton(_ref) {
901
- var device = _ref.device,
902
- className = _ref.className,
903
- iconComponents = _ref.iconComponents,
904
- props = _objectWithoutProperties__default["default"](_ref, _excluded$6);
1111
+ var DeviceButton = function DeviceButton(_ref) {
1112
+ var device = _ref.device,
1113
+ className = _ref.className,
1114
+ iconComponents = _ref.iconComponents,
1115
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$6);
1116
+
1117
+ var DeviceIcon = utils.getComponentFromName(device, iconComponents, DesktopIcon);
1118
+ return /*#__PURE__*/React__default["default"].createElement(components.Button, Object.assign({
1119
+ className: classNames__default["default"]([styles$b.container, _defineProperty__default["default"]({}, className, className !== null)])
1120
+ }, props), /*#__PURE__*/React__default["default"].createElement(DeviceIcon, {
1121
+ className: styles$b.icon
1122
+ }));
1123
+ };
1124
+
1125
+ DeviceButton.propTypes = propTypes$g;
1126
+ DeviceButton.defaultProps = defaultProps$g;
1127
+
1128
+ var _excluded$5 = ["id"];
1129
+ var propTypes$f = {
1130
+ items: core.PropTypes.menuItems,
1131
+ className: PropTypes__default["default"].string,
1132
+ onClickItem: PropTypes__default["default"].func
1133
+ };
1134
+ var defaultProps$f = {
1135
+ items: [],
1136
+ className: null,
1137
+ onClickItem: null
1138
+ };
1139
+
1140
+ var DevicesMenu = function DevicesMenu(_ref) {
1141
+ var items = _ref.items,
1142
+ className = _ref.className,
1143
+ onClickItem = _ref.onClickItem;
1144
+ return /*#__PURE__*/React__default["default"].createElement(components.Tabs, {
1145
+ items: items,
1146
+ theme: "outline-secondary",
1147
+ className: classNames__default["default"]([styles$c.container, _defineProperty__default["default"]({}, className, className !== null)]),
1148
+ renderItemButton: function renderItemButton(item, index, props) {
1149
+ var id = item.id,
1150
+ itemProps = _objectWithoutProperties__default["default"](item, _excluded$5);
1151
+
1152
+ return /*#__PURE__*/React__default["default"].createElement(DeviceButton, Object.assign({
1153
+ device: id
1154
+ }, props, itemProps, {
1155
+ className: styles$c.button,
1156
+ onClick: function onClick(e) {
1157
+ return onClickItem !== null ? onClickItem(e, item, index) : null;
1158
+ }
1159
+ }));
1160
+ }
1161
+ });
1162
+ };
1163
+
1164
+ DevicesMenu.propTypes = propTypes$f;
1165
+ DevicesMenu.defaultProps = defaultProps$f;
1166
+
1167
+ var styles$a = {"button":"micromag-editor-partials-screen-states-button","addButton":"micromag-editor-partials-screen-states-addButton","title":"micromag-editor-partials-screen-states-title"};
1168
+
1169
+ var styles$9 = {"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","frame":"micromag-editor-buttons-screen-with-preview-frame"};
1170
+
1171
+ var styles$8 = {"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"};
1172
+
1173
+ var propTypes$e = {
1174
+ active: PropTypes__default["default"].bool,
1175
+ id: PropTypes__default["default"].string,
1176
+ href: PropTypes__default["default"].string,
1177
+ label: core.PropTypes.label,
1178
+ icon: PropTypes__default["default"].node,
1179
+ title: PropTypes__default["default"].string,
1180
+ onClick: PropTypes__default["default"].func,
1181
+ children: PropTypes__default["default"].node,
1182
+ refButton: PropTypes__default["default"].shape({
1183
+ current: PropTypes__default["default"].any // eslint-disable-line
1184
+
1185
+ }),
1186
+ className: PropTypes__default["default"].string
1187
+ };
1188
+ var defaultProps$e = {
1189
+ active: false,
1190
+ id: null,
1191
+ href: null,
1192
+ label: null,
1193
+ icon: null,
1194
+ title: null,
1195
+ onClick: null,
1196
+ children: null,
1197
+ refButton: null,
1198
+ className: null
1199
+ };
1200
+
1201
+ var ScreenButton = function ScreenButton(_ref) {
1202
+ var _ref2;
1203
+
1204
+ var active = _ref.active,
1205
+ id = _ref.id,
1206
+ href = _ref.href,
1207
+ className = _ref.className,
1208
+ label = _ref.label,
1209
+ icon = _ref.icon,
1210
+ children = _ref.children,
1211
+ title = _ref.title,
1212
+ onClick = _ref.onClick,
1213
+ refButton = _ref.refButton;
1214
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1215
+ className: classNames__default["default"]([styles$8.container, 'rounded', (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$8.active, active), _defineProperty__default["default"](_ref2, className, className !== null), _ref2)])
1216
+ }, children !== null ? children : /*#__PURE__*/React__default["default"].createElement("div", {
1217
+ className: styles$8.screen
1218
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1219
+ className: styles$8.inner
1220
+ }, icon !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1221
+ className: styles$8.icon
1222
+ }, icon) : null, label !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1223
+ className: styles$8.label
1224
+ }, label) : null)), /*#__PURE__*/React__default["default"].createElement(components.Button, {
1225
+ className: styles$8.button,
1226
+ withoutStyle: true,
1227
+ id: id,
1228
+ href: href,
1229
+ title: title,
1230
+ onClick: onClick,
1231
+ refButton: refButton
1232
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
1233
+ className: classNames__default["default"]([styles$8.border, 'rounded'])
1234
+ })));
1235
+ };
1236
+
1237
+ ScreenButton.propTypes = propTypes$e;
1238
+ ScreenButton.defaultProps = defaultProps$e;
1239
+ var ScreenButton$1 = /*#__PURE__*/React__default["default"].forwardRef(function (props, ref) {
1240
+ return /*#__PURE__*/React__default["default"].createElement(ScreenButton, Object.assign({}, props, {
1241
+ refButton: ref
1242
+ }));
1243
+ });
1244
+
1245
+ var propTypes$d = {
1246
+ screen: core.PropTypes.screenComponent,
1247
+ screenState: PropTypes__default["default"].string,
1248
+ index: PropTypes__default["default"].number.isRequired,
1249
+ href: PropTypes__default["default"].string,
1250
+ title: PropTypes__default["default"].string,
1251
+ active: PropTypes__default["default"].bool,
1252
+ previewWidth: PropTypes__default["default"].number,
1253
+ previewHeight: PropTypes__default["default"].number,
1254
+ withPreview: PropTypes__default["default"].bool,
1255
+ withPlaceholder: PropTypes__default["default"].bool,
1256
+ onClick: PropTypes__default["default"].func,
1257
+ onClickItem: PropTypes__default["default"].func,
1258
+ className: PropTypes__default["default"].string
1259
+ };
1260
+ var defaultProps$d = {
1261
+ screen: null,
1262
+ screenState: null,
1263
+ title: null,
1264
+ href: null,
1265
+ active: false,
1266
+ previewWidth: 320,
1267
+ previewHeight: 480,
1268
+ withPreview: true,
1269
+ withPlaceholder: false,
1270
+ onClick: null,
1271
+ onClickItem: null,
1272
+ className: null
1273
+ };
1274
+
1275
+ var ScreenWithPreview = function ScreenWithPreview(_ref) {
1276
+ var _classNames;
1277
+
1278
+ var screen = _ref.screen,
1279
+ screenState = _ref.screenState,
1280
+ index = _ref.index,
1281
+ title = _ref.title,
1282
+ href = _ref.href,
1283
+ active = _ref.active,
1284
+ className = _ref.className,
1285
+ previewWidth = _ref.previewWidth,
1286
+ previewHeight = _ref.previewHeight,
1287
+ _onClick = _ref.onClick,
1288
+ onClickItem = _ref.onClickItem,
1289
+ withPreview = _ref.withPreview,
1290
+ withPlaceholder = _ref.withPlaceholder;
1291
+ var intl = reactIntl.useIntl();
1292
+
1293
+ var _useResizeObserver = hooks.useResizeObserver(),
1294
+ refResize = _useResizeObserver.ref,
1295
+ contentRect = _useResizeObserver.entry.contentRect;
1296
+
1297
+ var _useMemo = React.useMemo(function () {
1298
+ var _ref2 = contentRect || {},
1299
+ _ref2$width = _ref2.width,
1300
+ itemWidth = _ref2$width === void 0 ? 0 : _ref2$width;
905
1301
 
906
- var DeviceIcon = utils.getComponentFromName(device, iconComponents, DesktopIcon);
907
- return /*#__PURE__*/React__default["default"].createElement(components.Button, Object.assign({
908
- className: classNames__default["default"]([styles$9.container, _defineProperty__default["default"]({}, className, className !== null)])
909
- }, props), /*#__PURE__*/React__default["default"].createElement(DeviceIcon, {
910
- className: styles$9.icon
911
- }));
1302
+ var ratio = 3 / 4;
1303
+ var finalWidth = previewWidth;
1304
+ var finalHeight = previewHeight !== null ? previewHeight : previewWidth * ratio;
1305
+ var previewScale = itemWidth / previewWidth;
1306
+ return {
1307
+ width: itemWidth,
1308
+ height: finalHeight * previewScale,
1309
+ screenWidth: finalWidth,
1310
+ screenHeight: finalHeight,
1311
+ scale: previewScale
1312
+ };
1313
+ }, [withPlaceholder, previewWidth, previewHeight, contentRect]),
1314
+ width = _useMemo.width,
1315
+ height = _useMemo.height,
1316
+ screenWidth = _useMemo.screenWidth,
1317
+ screenHeight = _useMemo.screenHeight,
1318
+ scale = _useMemo.scale;
1319
+
1320
+ var ScreenComponent = withPlaceholder ? components.ScreenPlaceholder : components.ScreenPreview;
1321
+ return /*#__PURE__*/React__default["default"].createElement(ScreenButton$1, {
1322
+ href: href,
1323
+ ref: refResize,
1324
+ active: active,
1325
+ className: classNames__default["default"]([styles$9.button, _defineProperty__default["default"]({}, className, className !== null)]),
1326
+ title: utils.isMessage(title) ? intl.formatMessage(title) : null,
1327
+ onClick: function onClick() {
1328
+ if (_onClick !== null) {
1329
+ _onClick(screen, index);
1330
+ }
1331
+
1332
+ if (onClickItem !== null) {
1333
+ onClickItem(screen, index);
1334
+ }
1335
+ }
1336
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1337
+ className: styles$9.frame,
1338
+ style: {
1339
+ width: width,
1340
+ height: height
1341
+ }
1342
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1343
+ className: classNames__default["default"]((_classNames = {}, _defineProperty__default["default"](_classNames, styles$9.preview, withPreview && !withPlaceholder), _defineProperty__default["default"](_classNames, styles$9.placeholder, withPlaceholder && !withPreview), _classNames)),
1344
+ style: {
1345
+ width: withPlaceholder ? width : screenWidth,
1346
+ height: withPlaceholder ? height : screenHeight,
1347
+ transform: withPlaceholder ? null : "scale(".concat(scale, ")")
1348
+ }
1349
+ }, /*#__PURE__*/React__default["default"].createElement(ScreenComponent, {
1350
+ screen: screen,
1351
+ screenState: screenState,
1352
+ width: withPlaceholder ? width : screenWidth,
1353
+ height: withPlaceholder ? height : screenHeight,
1354
+ className: styles$9.screen
1355
+ }))));
912
1356
  };
913
1357
 
914
- DeviceButton.propTypes = propTypes$f;
915
- DeviceButton.defaultProps = defaultProps$f;
1358
+ ScreenWithPreview.propTypes = propTypes$d;
1359
+ ScreenWithPreview.defaultProps = defaultProps$d;
916
1360
 
917
- var _excluded$5 = ["id"];
918
- var propTypes$e = {
919
- items: core.PropTypes.menuItems,
1361
+ var propTypes$c = {
1362
+ screen: core.PropTypes.screen.isRequired,
1363
+ screenState: PropTypes__default["default"].string,
1364
+ value: core.PropTypes.story.isRequired,
920
1365
  className: PropTypes__default["default"].string,
921
- onClickItem: PropTypes__default["default"].func
1366
+ onChange: PropTypes__default["default"].func
922
1367
  };
923
- var defaultProps$e = {
924
- items: [],
1368
+ var defaultProps$c = {
1369
+ screenState: null,
925
1370
  className: null,
926
- onClickItem: null
1371
+ onChange: null
927
1372
  };
928
1373
 
929
- var DevicesMenu = function DevicesMenu(_ref) {
930
- var items = _ref.items,
1374
+ function ScreenStates(_ref) {
1375
+ var screen = _ref.screen,
1376
+ value = _ref.value,
931
1377
  className = _ref.className,
932
- onClickItem = _ref.onClickItem;
933
- return /*#__PURE__*/React__default["default"].createElement(components.Tabs, {
934
- items: items,
935
- theme: "outline-secondary",
936
- className: classNames__default["default"]([styles$a.container, _defineProperty__default["default"]({}, className, className !== null)]),
937
- renderItemButton: function renderItemButton(item, index, props) {
938
- var id = item.id,
939
- itemProps = _objectWithoutProperties__default["default"](item, _excluded$5);
1378
+ onChange = _ref.onChange;
1379
+ var url = contexts.useUrlGenerator();
1380
+ var push = contexts.useRoutePush();
940
1381
 
941
- return /*#__PURE__*/React__default["default"].createElement(DeviceButton, Object.assign({
942
- device: id
943
- }, props, itemProps, {
1382
+ var _useRouteParams = useRouteParams(),
1383
+ _useRouteParams$scree = _useRouteParams.screen,
1384
+ screenParam = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1385
+ _useRouteParams$field = _useRouteParams.field,
1386
+ field = _useRouteParams$field === void 0 ? null : _useRouteParams$field;
1387
+
1388
+ var states = useScreenStates(screen);
1389
+
1390
+ var _ref2 = field !== null ? field.split('/') : [],
1391
+ _ref3 = _toArray__default["default"](_ref2),
1392
+ _ref3$ = _ref3[0],
1393
+ stateParam = _ref3$ === void 0 ? null : _ref3$,
1394
+ stateIndexes = _ref3.slice(1);
1395
+
1396
+ var stateIndex = stateIndexes.find(function (it) {
1397
+ return it.match(/^[0-9]+$/) !== null;
1398
+ }) || null;
1399
+ var currentState = stateParam !== null && states.findIndex(function (_ref4) {
1400
+ var id = _ref4.id;
1401
+ return id === stateParam;
1402
+ }) !== -1 ? stateParam : null;
1403
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1404
+ className: classNames__default["default"]([styles$a.container, _defineProperty__default["default"]({}, className, className !== null)])
1405
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1406
+ className: "d-flex align-items-end flex-wrap m-n1"
1407
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1408
+ className: "p-1 align-self-stretch d-flex flex-column"
1409
+ }, /*#__PURE__*/React__default["default"].createElement("h6", {
1410
+ className: classNames__default["default"](['fw-normal', 'invisible', styles$a.title])
1411
+ }, "Settings"), /*#__PURE__*/React__default["default"].createElement(components.Button, {
1412
+ className: classNames__default["default"]([styles$a.button, 'p-0', 'flex-grow-1', 'justify-content-center']),
1413
+ theme: screenParam !== null && field === null ? 'primary' : 'secondary',
1414
+ outline: screenParam === null || field !== null,
1415
+ size: "lg",
1416
+ icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1417
+ icon: freeSolidSvgIcons.faCogs
1418
+ }),
1419
+ href: url('screen', {
1420
+ screen: screen.id
1421
+ })
1422
+ })), states.map(function (state) {
1423
+ var id = state.id,
1424
+ _state$label = state.label,
1425
+ label = _state$label === void 0 ? null : _state$label,
1426
+ _state$repeatable = state.repeatable,
1427
+ repeatable = _state$repeatable === void 0 ? false : _state$repeatable,
1428
+ _state$fieldName = state.fieldName,
1429
+ fieldName = _state$fieldName === void 0 ? null : _state$fieldName;
1430
+ var repeatableItems = repeatable ? screen[fieldName || id] || [] : null;
1431
+
1432
+ var onClickAdd = function onClickAdd() {
1433
+ var _ref6 = value || {},
1434
+ _ref6$components = _ref6.components,
1435
+ currentComponentsValue = _ref6$components === void 0 ? [] : _ref6$components;
1436
+
1437
+ var currentScreenIndex = currentComponentsValue.findIndex(function (_ref7) {
1438
+ var screenId = _ref7.id;
1439
+ return screen.id === screenId;
1440
+ });
1441
+ var currentScreenValue = currentComponentsValue[currentScreenIndex] || {};
1442
+ var currentFieldValue = currentScreenValue[fieldName || id] || [];
1443
+
1444
+ var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
1445
+ components: [].concat(_toConsumableArray__default["default"](currentComponentsValue.slice(0, currentScreenIndex)), [_objectSpread__default["default"](_objectSpread__default["default"]({}, currentScreenValue), {}, _defineProperty__default["default"]({}, fieldName || id, [].concat(_toConsumableArray__default["default"](currentFieldValue), [{}])))], _toConsumableArray__default["default"](currentComponentsValue.slice(currentScreenIndex + 1)))
1446
+ });
1447
+
1448
+ if (onChange !== null) {
1449
+ onChange(newValue);
1450
+ }
1451
+
1452
+ push('screen.field', {
1453
+ screen: screen.id,
1454
+ field: [id, currentFieldValue.length]
1455
+ });
1456
+ };
1457
+
1458
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1459
+ className: "p-1 align-self-stretch d-flex flex-column"
1460
+ }, /*#__PURE__*/React__default["default"].createElement("h6", {
1461
+ className: classNames__default["default"](['fw-normal', 'text-muted', styles$a.title])
1462
+ }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, label)), repeatable ? /*#__PURE__*/React__default["default"].createElement("ul", {
1463
+ className: "d-flex list-unstyled flex-wrap m-n1 flex-grow-1"
1464
+ }, repeatableItems.map(function (item, index) {
1465
+ return /*#__PURE__*/React__default["default"].createElement("li", {
1466
+ className: "p-1"
1467
+ }, /*#__PURE__*/React__default["default"].createElement(ScreenWithPreview, {
1468
+ screen: screen,
1469
+ screenState: "".concat(id, ".").concat(index),
944
1470
  className: styles$a.button,
945
- onClick: function onClick(e) {
946
- return onClickItem !== null ? onClickItem(e, item, index) : null;
947
- }
1471
+ active: currentState !== null && id === currentState.split('.')[0] && stateIndex !== null && parseInt(stateIndex, 10) === index,
1472
+ href: url('screen.field', {
1473
+ screen: screen.id,
1474
+ field: [id, index]
1475
+ })
948
1476
  }));
949
- }
950
- });
951
- };
952
-
953
- DevicesMenu.propTypes = propTypes$e;
954
- DevicesMenu.defaultProps = defaultProps$e;
1477
+ }), /*#__PURE__*/React__default["default"].createElement("li", {
1478
+ className: "p-1"
1479
+ }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
1480
+ className: classNames__default["default"]([styles$a.button, styles$a.addButton, 'h-100', 'p-0', 'justify-content-center']),
1481
+ theme: "secondary",
1482
+ outline: true,
1483
+ size: "lg",
1484
+ icon: /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1485
+ icon: freeSolidSvgIcons.faPlus
1486
+ }),
1487
+ onClick: onClickAdd
1488
+ }))) : /*#__PURE__*/React__default["default"].createElement(ScreenWithPreview, {
1489
+ screen: screen,
1490
+ screenState: id,
1491
+ className: styles$a.button,
1492
+ active: id === currentState,
1493
+ href: url('screen.field', {
1494
+ screen: screen.id,
1495
+ field: id
1496
+ }) // onClick={() => {
1497
+ // if (onStateChange !== null) {
1498
+ // onStateChange(id);
1499
+ // }
1500
+ // }}
1501
+
1502
+ }));
1503
+ })));
1504
+ }
955
1505
 
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"};
1506
+ ScreenStates.propTypes = propTypes$c;
1507
+ ScreenStates.defaultProps = defaultProps$c;
957
1508
 
958
- var propTypes$d = {
1509
+ var propTypes$b = {
959
1510
  value: PropTypes__default["default"].oneOfType([core.PropTypes.story, core.PropTypes.theme]),
960
1511
  devices: core.PropTypes.devices,
961
1512
  device: PropTypes__default["default"].string,
@@ -963,9 +1514,10 @@ var propTypes$d = {
963
1514
  isTheme: PropTypes__default["default"].bool,
964
1515
  className: PropTypes__default["default"].string,
965
1516
  onScreenChange: PropTypes__default["default"].func,
1517
+ onChange: PropTypes__default["default"].func,
966
1518
  withoutDevicesSizes: PropTypes__default["default"].bool
967
1519
  };
968
- var defaultProps$d = {
1520
+ var defaultProps$b = {
969
1521
  value: null,
970
1522
  devices: [{
971
1523
  id: 'mobile',
@@ -976,16 +1528,17 @@ var defaultProps$d = {
976
1528
  width: 1200,
977
1529
  height: 900
978
1530
  }],
979
- device: null,
1531
+ device: 'mobile',
980
1532
  viewerTheme: null,
981
1533
  isTheme: false,
982
1534
  className: null,
983
1535
  onScreenChange: null,
984
- withoutDevicesSizes: false
1536
+ onChange: null,
1537
+ withoutDevicesSizes: true
985
1538
  };
986
1539
 
987
1540
  var EditorPreview = function EditorPreview(_ref) {
988
- var _ref3;
1541
+ var _ref9;
989
1542
 
990
1543
  var value = _ref.value,
991
1544
  viewerTheme = _ref.viewerTheme,
@@ -994,8 +1547,14 @@ var EditorPreview = function EditorPreview(_ref) {
994
1547
  initialDevice = _ref.device,
995
1548
  className = _ref.className,
996
1549
  onScreenChange = _ref.onScreenChange,
1550
+ onChange = _ref.onChange,
997
1551
  withoutDevicesSizes = _ref.withoutDevicesSizes;
998
- var routes = contexts.useRoutes();
1552
+
1553
+ var _useRouteParams = useRouteParams(),
1554
+ _useRouteParams$scree = _useRouteParams.screen,
1555
+ screenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1556
+ _useRouteParams$field = _useRouteParams.field,
1557
+ fieldParam = _useRouteParams$field === void 0 ? null : _useRouteParams$field;
999
1558
 
1000
1559
  var _useScreenSize = contexts.useScreenSize(),
1001
1560
  _useScreenSize$screen = _useScreenSize.screen,
@@ -1029,7 +1588,7 @@ var EditorPreview = function EditorPreview(_ref) {
1029
1588
  contentRect = _useResizeObserver.entry.contentRect;
1030
1589
 
1031
1590
  var previewStyle = React.useMemo(function () {
1032
- if (withoutDevicesSizes) {
1591
+ if (withoutDevicesSizes && initialDevice === null) {
1033
1592
  return {};
1034
1593
  }
1035
1594
 
@@ -1053,215 +1612,90 @@ var EditorPreview = function EditorPreview(_ref) {
1053
1612
  height: maxHeight,
1054
1613
  transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
1055
1614
  };
1056
- }, [device, contentRect, screen, withoutDevicesSizes]);
1615
+ }, [device, contentRect, screen, withoutDevicesSizes, initialDevice]);
1616
+ var currentScreen = React.useMemo(function () {
1617
+ var _ref3 = valueParsed || {},
1618
+ _ref3$components = _ref3.components,
1619
+ components = _ref3$components === void 0 ? [] : _ref3$components;
1620
+
1621
+ return (screenId !== null ? components.find(function (_ref4) {
1622
+ var id = _ref4.id;
1623
+ return id === screenId;
1624
+ }) : components[0]) || null;
1625
+ }, [valueParsed, screenId]);
1626
+ var currentScreenStates = useScreenStates(currentScreen);
1627
+
1628
+ var _ref5 = fieldParam !== null && currentScreenStates !== null ? fieldParam.split('/') : [],
1629
+ _ref6 = _slicedToArray__default["default"](_ref5, 1),
1630
+ _ref6$ = _ref6[0],
1631
+ screenStateParam = _ref6$ === void 0 ? null : _ref6$;
1632
+
1633
+ var currentScreenState = screenStateParam !== null ? currentScreenStates.find(function (_ref7) {
1634
+ var id = _ref7.id;
1635
+ return id === screenStateParam;
1636
+ }) || null : null;
1637
+
1638
+ var _ref8 = currentScreenState || {},
1639
+ _ref8$id = _ref8.id,
1640
+ screenStateId = _ref8$id === void 0 ? null : _ref8$id,
1641
+ _ref8$repeatable = _ref8.repeatable,
1642
+ repeatable = _ref8$repeatable === void 0 ? false : _ref8$repeatable;
1643
+
1644
+ var currentScreenStateId = currentScreenState !== null && repeatable ? "".concat(screenStateId, ".").concat(fieldParam.split('/').find(function (it) {
1645
+ return it.match(/^[0-9]+$/) !== null;
1646
+ }) || 0) : screenStateId;
1057
1647
  return /*#__PURE__*/React__default["default"].createElement("div", {
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)])
1648
+ className: classNames__default["default"]([styles$d.container, screens.map(function (screenName) {
1649
+ return styles$d["screen-".concat(screenName)];
1650
+ }), (_ref9 = {}, _defineProperty__default["default"](_ref9, className, className), _defineProperty__default["default"](_ref9, styles$d.withoutDevicesSizes, withoutDevicesSizes), _ref9)])
1061
1651
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1062
- className: styles$8.inner
1652
+ className: styles$d.inner
1063
1653
  }, !withoutDevicesSizes ? /*#__PURE__*/React__default["default"].createElement("div", {
1064
- className: styles$8.top
1654
+ className: styles$d.top
1065
1655
  }, /*#__PURE__*/React__default["default"].createElement(DevicesMenu, {
1066
1656
  items: devices.map(function (it) {
1067
1657
  return _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
1068
1658
  active: it.id === deviceId
1069
1659
  });
1070
1660
  }),
1071
- onClickItem: onClickDeviceItem
1661
+ onClickItem: onClickDeviceItem,
1662
+ className: styles$d.devices
1663
+ })) : null, currentScreenStates !== null && currentScreen !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1664
+ className: classNames__default["default"]([styles$d.top, 'px-1'])
1665
+ }, /*#__PURE__*/React__default["default"].createElement(ScreenStates, {
1666
+ screen: currentScreen,
1667
+ screenState: currentScreenStateId,
1668
+ value: value,
1669
+ onChange: onChange
1072
1670
  })) : null, /*#__PURE__*/React__default["default"].createElement("div", {
1073
- className: styles$8.bottom
1671
+ className: styles$d.bottom
1074
1672
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1075
- className: styles$8.inner,
1673
+ className: styles$d.inner,
1076
1674
  ref: bottomRef
1077
1675
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1078
- className: styles$8.preview,
1676
+ className: styles$d.preview,
1079
1677
  style: previewStyle
1080
- }, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
1081
- path: [routes.screen, routes.home],
1082
- render: function render(_ref4) {
1083
- var _ref4$match$params$sc = _ref4.match.params.screen,
1084
- screenId = _ref4$match$params$sc === void 0 ? null : _ref4$match$params$sc;
1085
- return /*#__PURE__*/React__default["default"].createElement("div", {
1086
- className: styles$8.viewerContainer
1087
- }, /*#__PURE__*/React__default["default"].createElement(viewer.Viewer, {
1088
- story: valueParsed,
1089
- storyIsParsed: true,
1090
- screen: screenId,
1091
- className: styles$8.story,
1092
- theme: viewerTheme,
1093
- interactions: null,
1094
- renderContext: "edit",
1095
- onScreenChange: onScreenChange
1096
- }));
1097
- }
1098
- }))))));
1099
- };
1100
-
1101
- EditorPreview.propTypes = propTypes$d;
1102
- EditorPreview.defaultProps = defaultProps$d;
1103
-
1104
- var styles$7 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
1105
-
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"};
1107
-
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
1678
  }, /*#__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
- }
1679
+ className: styles$d.viewerContainer
1680
+ }, /*#__PURE__*/React__default["default"].createElement(viewer.Viewer, {
1681
+ story: valueParsed,
1682
+ storyIsParsed: true,
1683
+ screen: screenId,
1684
+ screenState: currentScreenStateId,
1685
+ className: styles$d.story,
1686
+ theme: viewerTheme,
1687
+ interactions: null,
1688
+ renderContext: "edit",
1689
+ onScreenChange: onScreenChange
1690
+ })))))));
1691
+ };
1692
+
1693
+ EditorPreview.propTypes = propTypes$b;
1694
+ EditorPreview.defaultProps = defaultProps$b;
1239
1695
 
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
- };
1696
+ var styles$7 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
1262
1697
 
1263
- ScreenWithPreview.propTypes = propTypes$b;
1264
- ScreenWithPreview.defaultProps = defaultProps$b;
1698
+ 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","noWrap":"micromag-editor-menus-screens-noWrap","isVertical":"micromag-editor-menus-screens-isVertical","withPlaceholder":"micromag-editor-menus-screens-withPlaceholder"};
1265
1699
 
1266
1700
  var iOS = /iPad|iPhone|iPod/.test(navigator.platform);
1267
1701
  function getDragDepth(offset, indentationWidth) {
@@ -1661,9 +2095,13 @@ var sortableTreeKeyboardCoordinates = function sortableTreeKeyboardCoordinates(c
1661
2095
  };
1662
2096
  };
1663
2097
 
1664
- var styles$3 = {"wrapper":"micromag-editor-sortable-sortable-tree-item-actions-wrapper","inner":"micromag-editor-sortable-sortable-tree-item-actions-inner","button":"micromag-editor-sortable-sortable-tree-item-actions-button","handle":"micromag-editor-sortable-sortable-tree-item-actions-handle","icon":"micromag-editor-sortable-sortable-tree-item-actions-icon","withChildren":"micromag-editor-sortable-sortable-tree-item-actions-withChildren","clone":"micromag-editor-sortable-sortable-tree-item-actions-clone","ghost":"micromag-editor-sortable-sortable-tree-item-actions-ghost","indicator":"micromag-editor-sortable-sortable-tree-item-actions-indicator","text":"micromag-editor-sortable-sortable-tree-item-actions-text","collapsedCount":"micromag-editor-sortable-sortable-tree-item-actions-collapsedCount","count":"micromag-editor-sortable-sortable-tree-item-actions-count","disableInteraction":"micromag-editor-sortable-sortable-tree-item-actions-disableInteraction","Count":"micromag-editor-sortable-sortable-tree-item-actions-Count","Text":"micromag-editor-sortable-sortable-tree-item-actions-Text","disableSelection":"micromag-editor-sortable-sortable-tree-item-actions-disableSelection","collapse":"micromag-editor-sortable-sortable-tree-item-actions-collapse","collapsed":"micromag-editor-sortable-sortable-tree-item-actions-collapsed","children":"micromag-editor-sortable-sortable-tree-item-actions-children"};
2098
+ var styles$5 = {"item":"micromag-editor-sortable-sortable-tree-item","parent":"micromag-editor-sortable-sortable-tree-parent","group":"micromag-editor-sortable-sortable-tree-group","isLastChild":"micromag-editor-sortable-sortable-tree-isLastChild"};
2099
+
2100
+ var styles$4 = {"container":"micromag-editor-sortable-sortable-tree-item-container","parent":"micromag-editor-sortable-sortable-tree-item-parent","child":"micromag-editor-sortable-sortable-tree-item-child"};
2101
+
2102
+ var styles$3 = {"wrapper":"micromag-editor-sortable-sortable-tree-item-actions-wrapper","inner":"micromag-editor-sortable-sortable-tree-item-actions-inner","button":"micromag-editor-sortable-sortable-tree-item-actions-button","handle":"micromag-editor-sortable-sortable-tree-item-actions-handle","icon":"micromag-editor-sortable-sortable-tree-item-actions-icon","text":"micromag-editor-sortable-sortable-tree-item-actions-text","collapsedCount":"micromag-editor-sortable-sortable-tree-item-actions-collapsedCount","count":"micromag-editor-sortable-sortable-tree-item-actions-count","disableInteraction":"micromag-editor-sortable-sortable-tree-item-actions-disableInteraction","clone":"micromag-editor-sortable-sortable-tree-item-actions-clone","disableSelection":"micromag-editor-sortable-sortable-tree-item-actions-disableSelection","collapse":"micromag-editor-sortable-sortable-tree-item-actions-collapse","collapsed":"micromag-editor-sortable-sortable-tree-item-actions-collapsed","children":"micromag-editor-sortable-sortable-tree-item-actions-children","withChildren":"micromag-editor-sortable-sortable-tree-item-actions-withChildren","ghost":"micromag-editor-sortable-sortable-tree-item-actions-ghost","indicator":"micromag-editor-sortable-sortable-tree-item-actions-indicator"};
1665
2103
 
1666
- var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "children"];
2104
+ var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "showCount", "showCollapsedCount", "children"];
1667
2105
  var propTypes$a = {
1668
2106
  childCount: PropTypes__default["default"].number,
1669
2107
  clone: PropTypes__default["default"].bool,
@@ -1688,6 +2126,8 @@ var propTypes$a = {
1688
2126
  transform: PropTypes__default["default"].string.isRequired
1689
2127
  }),
1690
2128
  showId: PropTypes__default["default"].bool,
2129
+ showCount: PropTypes__default["default"].bool,
2130
+ showCollapsedCount: PropTypes__default["default"].bool,
1691
2131
  children: PropTypes__default["default"].node
1692
2132
  };
1693
2133
  var defaultProps$a = {
@@ -1706,6 +2146,8 @@ var defaultProps$a = {
1706
2146
  wrapperRef: null,
1707
2147
  style: null,
1708
2148
  showId: false,
2149
+ showCount: false,
2150
+ showCollapsedCount: false,
1709
2151
  children: null
1710
2152
  };
1711
2153
  var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -1728,22 +2170,22 @@ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref)
1728
2170
  _ref.value;
1729
2171
  var wrapperRef = _ref.wrapperRef;
1730
2172
  _ref.showId;
1731
- var children = _ref.children,
2173
+ var showCount = _ref.showCount,
2174
+ showCollapsedCount = _ref.showCollapsedCount,
2175
+ children = _ref.children,
1732
2176
  props = _objectWithoutProperties__default["default"](_ref, _excluded$4);
1733
2177
 
1734
- return /*#__PURE__*/React__default["default"].createElement("li", Object.assign({
2178
+ return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1735
2179
  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)]),
1736
2180
  ref: wrapperRef,
1737
- style: _objectSpread__default["default"]({
1738
- marginLeft: "".concat(indentationWidth * depth, "px")
1739
- }, style)
2181
+ style: {
2182
+ marginLeft: "".concat(indentationWidth * depth, "px"),
2183
+ marginRight: "".concat(5 * depth, "px")
2184
+ }
1740
2185
  }, props), /*#__PURE__*/React__default["default"].createElement("div", {
1741
2186
  className: styles$3.inner,
1742
2187
  ref: ref,
1743
- style: {
1744
- width: style.width,
1745
- height: style.height
1746
- }
2188
+ style: style
1747
2189
  }, /*#__PURE__*/React__default["default"].createElement("button", Object.assign({
1748
2190
  className: classNames__default["default"]([styles$3.button, styles$3.handle]),
1749
2191
  type: "button"
@@ -1755,27 +2197,24 @@ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref)
1755
2197
  onClick: onRemove
1756
2198
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1757
2199
  icon: freeSolidSvgIcons.faTimes
1758
- })) : null, clone && childCount && childCount > 1 ? /*#__PURE__*/React__default["default"].createElement("span", {
2200
+ })) : null, clone && showCount && childCount && childCount > 1 ? /*#__PURE__*/React__default["default"].createElement("span", {
1759
2201
  className: styles$3.count
1760
- }, childCount) : null, onCollapse && childCount !== null && childCount > 0 ? /*#__PURE__*/React__default["default"].createElement("span", {
2202
+ }, childCount) : null, showCollapsedCount && onCollapse && collapsed && childCount !== null && childCount > 0 ? /*#__PURE__*/React__default["default"].createElement("span", {
1761
2203
  className: styles$3.collapsedCount
1762
2204
  }, childCount) : null, onCollapse && depth === 0 ? /*#__PURE__*/React__default["default"].createElement("button", {
1763
2205
  type: "button",
1764
- onClick: onCollapse,
1765
- className: classNames__default["default"](styles$3.button, styles$3.collapse, collapsed && styles$3.collapsed),
1766
- style: {
1767
- width: style.width
1768
- }
2206
+ onClick: onCollapse,
2207
+ className: classNames__default["default"](styles$3.button, styles$3.collapse, collapsed && styles$3.collapsed)
1769
2208
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1770
2209
  icon: freeSolidSvgIcons.faAngleDown
1771
- })) : null), /*#__PURE__*/React__default["default"].createElement("div", {
2210
+ })) : null, /*#__PURE__*/React__default["default"].createElement("div", {
1772
2211
  className: styles$3.children
1773
- }, children));
2212
+ }, children)));
1774
2213
  });
1775
2214
  SortableTreeItemActions.propTypes = propTypes$a;
1776
2215
  SortableTreeItemActions.defaultProps = defaultProps$a;
1777
2216
 
1778
- var _excluded$3 = ["id", "index", "depth", "component", "value", "style", "smallScale", "onCollapse", "onClickItem"];
2217
+ var _excluded$3 = ["id", "index", "depth", "component", "value", "style", "smallScale", "collapsed", "onCollapse", "onClickItem", "childValue", "isLastChild"];
1779
2218
  var propTypes$9 = {
1780
2219
  id: PropTypes__default["default"].string.isRequired,
1781
2220
  index: PropTypes__default["default"].number.isRequired,
@@ -1792,16 +2231,23 @@ var propTypes$9 = {
1792
2231
  scale: PropTypes__default["default"].number.isRequired
1793
2232
  }),
1794
2233
  smallScale: PropTypes__default["default"].number,
2234
+ collapsed: PropTypes__default["default"].bool,
1795
2235
  onCollapse: PropTypes__default["default"].func,
1796
- onClickItem: PropTypes__default["default"].func
2236
+ onClickItem: PropTypes__default["default"].func,
2237
+ // eslint-disable-next-line react/forbid-prop-types
2238
+ childValue: PropTypes__default["default"].object,
2239
+ isLastChild: PropTypes__default["default"].bool
1797
2240
  };
1798
2241
  var defaultProps$9 = {
1799
2242
  component: null,
1800
2243
  value: null,
1801
2244
  style: null,
1802
2245
  smallScale: 0.75,
2246
+ collapsed: false,
1803
2247
  onCollapse: null,
1804
- onClickItem: null
2248
+ onClickItem: null,
2249
+ childValue: null,
2250
+ isLastChild: false
1805
2251
  };
1806
2252
 
1807
2253
  var animateLayoutChanges = function animateLayoutChanges(_ref) {
@@ -1815,12 +2261,15 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1815
2261
  index = _ref2.index,
1816
2262
  depth = _ref2.depth,
1817
2263
  Component = _ref2.component,
1818
- value = _ref2.value,
1819
- itemStyle = _ref2.style,
1820
- smallScale = _ref2.smallScale,
2264
+ value = _ref2.value;
2265
+ _ref2.style;
2266
+ _ref2.smallScale;
2267
+ var collapsed = _ref2.collapsed,
1821
2268
  onCollapse = _ref2.onCollapse,
1822
2269
  onClickItem = _ref2.onClickItem,
1823
- props = _objectWithoutProperties__default["default"](_ref2, _excluded$3);
2270
+ childValue = _ref2.childValue;
2271
+ _ref2.isLastChild;
2272
+ var props = _objectWithoutProperties__default["default"](_ref2, _excluded$3);
1824
2273
 
1825
2274
  var _useSortable = sortable.useSortable({
1826
2275
  id: id,
@@ -1835,28 +2284,17 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1835
2284
  transform = _useSortable.transform,
1836
2285
  transition = _useSortable.transition;
1837
2286
 
1838
- var hasCollapse = onCollapse !== null;
1839
- var _itemStyle$scaledWidt = itemStyle.scaledWidth,
1840
- scaledWidth = _itemStyle$scaledWidt === void 0 ? 100 : _itemStyle$scaledWidt,
1841
- _itemStyle$scaledHeig = itemStyle.scaledHeight,
1842
- scaledHeight = _itemStyle$scaledHeig === void 0 ? 66 : _itemStyle$scaledHeig,
1843
- _itemStyle$scale = itemStyle.scale,
1844
- scale = _itemStyle$scale === void 0 ? 1 : _itemStyle$scale;
1845
- var extraHeight = hasCollapse ? 30 : 0;
2287
+ var timeout = React.useRef(null);
1846
2288
  var actionsStyle = {
1847
- width: depth === 0 ? scaledWidth : scaledWidth * smallScale,
1848
- height: depth === 0 ? scaledHeight + extraHeight : scaledHeight * smallScale,
1849
2289
  transform: utilities.CSS.Translate.toString(transform),
1850
2290
  transition: transition
1851
2291
  };
1852
- var previewStyle = {
1853
- width: itemStyle.width,
1854
- height: itemStyle.height,
1855
- transform: depth === 0 ? itemStyle.transform : "scale(".concat(scale * smallScale, ", ").concat(scale * smallScale, ")")
1856
- };
1857
2292
 
1858
2293
  var _ref3 = listeners || {},
1859
- onPointerDown = _ref3.onPointerDown;
2294
+ _ref3$onPointerDown = _ref3.onPointerDown,
2295
+ onPointerDown = _ref3$onPointerDown === void 0 ? null : _ref3$onPointerDown,
2296
+ _ref3$onPointerUp = _ref3.onPointerUp,
2297
+ onPointerUp = _ref3$onPointerUp === void 0 ? null : _ref3$onPointerUp;
1860
2298
 
1861
2299
  var onClickAction = React.useCallback(function (e) {
1862
2300
  if (onClickItem !== null) {
@@ -1864,10 +2302,28 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1864
2302
  }
1865
2303
 
1866
2304
  if (onPointerDown !== null) {
1867
- onPointerDown(e);
2305
+ e.persist();
2306
+ timeout.current = setTimeout(function () {
2307
+ if (onPointerDown !== null) {
2308
+ onPointerDown(e);
2309
+ }
2310
+
2311
+ timeout.current = null;
2312
+ }, 200);
1868
2313
  }
1869
2314
  }, [value, index, onClickItem, onPointerDown]);
1870
- return /*#__PURE__*/React__default["default"].createElement(SortableTreeItemActions, Object.assign({
2315
+ var cancellingPointerUp = React.useCallback(function (e) {
2316
+ if (timeout.current !== null) {
2317
+ clearTimeout(timeout.current);
2318
+ }
2319
+
2320
+ if (onPointerUp !== null) {
2321
+ onPointerUp(e);
2322
+ }
2323
+ }, [onPointerUp]);
2324
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2325
+ className: classNames__default["default"]([styles$4.container])
2326
+ }, /*#__PURE__*/React__default["default"].createElement(SortableTreeItemActions, Object.assign({
1871
2327
  ref: setDraggableNodeRef,
1872
2328
  wrapperRef: setDroppableNodeRef,
1873
2329
  style: actionsStyle,
@@ -1876,13 +2332,18 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1876
2332
  disableSelection: iOS,
1877
2333
  disableInteraction: isSorting,
1878
2334
  handleProps: _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, attributes), listeners), {}, {
1879
- onPointerDown: onClickAction
2335
+ onPointerDown: onClickAction,
2336
+ onPointerUp: cancellingPointerUp
1880
2337
  }),
2338
+ collapsed: collapsed,
1881
2339
  onCollapse: onCollapse
1882
- }, props), Component !== null ? /*#__PURE__*/React__default["default"].createElement(Component, Object.assign({}, value, {
1883
- previewStyle: previewStyle
1884
- })) : null);
2340
+ }, props), Component !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
2341
+ className: styles$4.parent
2342
+ }, /*#__PURE__*/React__default["default"].createElement(Component, value)) : null, childValue !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
2343
+ className: styles$4.child
2344
+ }, /*#__PURE__*/React__default["default"].createElement(Component, childValue)) : null));
1885
2345
  };
2346
+
1886
2347
  SortableTreeItem.propTypes = propTypes$9;
1887
2348
  SortableTreeItem.defaultProps = defaultProps$9;
1888
2349
 
@@ -1904,18 +2365,6 @@ var initialItems = [{
1904
2365
  id: 'Winter',
1905
2366
  children: []
1906
2367
  }]
1907
- }, {
1908
- id: 'About Us',
1909
- children: []
1910
- }, {
1911
- id: 'My Account',
1912
- children: [{
1913
- id: 'Addresses',
1914
- children: []
1915
- }, {
1916
- id: 'Order History',
1917
- children: []
1918
- }]
1919
2368
  }];
1920
2369
  var measuring = {
1921
2370
  droppable: {
@@ -1942,7 +2391,6 @@ var propTypes$8 = {
1942
2391
  indicator: PropTypes__default["default"].bool,
1943
2392
  removable: PropTypes__default["default"].bool,
1944
2393
  component: PropTypes__default["default"].func,
1945
- itemStyle: PropTypes__default["default"].shape({}),
1946
2394
  onClickItem: PropTypes__default["default"].func,
1947
2395
  onChange: PropTypes__default["default"].func
1948
2396
  };
@@ -1953,10 +2401,10 @@ var defaultProps$8 = {
1953
2401
  indicator: false,
1954
2402
  removable: false,
1955
2403
  component: null,
1956
- itemStyle: null,
1957
2404
  onClickItem: null,
1958
2405
  onChange: null
1959
2406
  };
2407
+
1960
2408
  var SortableTree = function SortableTree(_ref2) {
1961
2409
  var collapsible = _ref2.collapsible,
1962
2410
  defaultItems = _ref2.items,
@@ -1964,12 +2412,11 @@ var SortableTree = function SortableTree(_ref2) {
1964
2412
  indentationWidth = _ref2.indentationWidth,
1965
2413
  removable = _ref2.removable,
1966
2414
  component = _ref2.component,
1967
- itemStyle = _ref2.itemStyle,
1968
2415
  onClickItem = _ref2.onClickItem,
1969
2416
  onChange = _ref2.onChange;
1970
2417
 
1971
2418
  var _useState = React.useState(function () {
1972
- return defaultItems;
2419
+ return buildTree(defaultItems);
1973
2420
  }),
1974
2421
  _useState2 = _slicedToArray__default["default"](_useState, 2),
1975
2422
  items = _useState2[0],
@@ -1993,11 +2440,20 @@ var SortableTree = function SortableTree(_ref2) {
1993
2440
  var _useState9 = React.useState(null),
1994
2441
  _useState10 = _slicedToArray__default["default"](_useState9, 2),
1995
2442
  currentPosition = _useState10[0],
1996
- setCurrentPosition = _useState10[1];
2443
+ setCurrentPosition = _useState10[1]; // Tree setup from list
1997
2444
 
1998
- var flattenedItems = React.useMemo(function () {
1999
- var flattenedTree = flattenTree(items); // console.log('yo', items, flattenedTree);
2000
2445
 
2446
+ React.useEffect(function () {
2447
+ var flat = flattenTree(items);
2448
+ var merged = defaultItems.map(function (t1) {
2449
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, flat.find(function (t2) {
2450
+ return t2.id === t1.id;
2451
+ })), t1);
2452
+ });
2453
+ setItems(buildTree(merged));
2454
+ }, [defaultItems.length]);
2455
+ var flattenedItems = React.useMemo(function () {
2456
+ var flattenedTree = flattenTree(items);
2001
2457
  var collapsedItems = flattenedTree.reduce(function (acc, _ref3) {
2002
2458
  var _ref3$children = _ref3.children,
2003
2459
  children = _ref3$children === void 0 ? [] : _ref3$children,
@@ -2006,7 +2462,7 @@ var SortableTree = function SortableTree(_ref2) {
2006
2462
  return collapsed && children.length ? [].concat(_toConsumableArray__default["default"](acc), [id]) : acc;
2007
2463
  }, []) || null;
2008
2464
  return removeChildrenOf(flattenedTree, activeId ? [activeId].concat(_toConsumableArray__default["default"](collapsedItems)) : collapsedItems);
2009
- }, [activeId, items]);
2465
+ }, [activeId, items, items.length]);
2010
2466
  var projected = activeId && overId ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
2011
2467
  var sensorContext = React.useRef({
2012
2468
  items: flattenedItems,
@@ -2038,6 +2494,69 @@ var SortableTree = function SortableTree(_ref2) {
2038
2494
  offset: offsetLeft
2039
2495
  };
2040
2496
  }, [flattenedItems, offsetLeft]);
2497
+
2498
+ function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2499
+ if (currentOverId && projected) {
2500
+ if (eventName !== 'onDragEnd') {
2501
+ if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2502
+ return;
2503
+ }
2504
+
2505
+ setCurrentPosition({
2506
+ parentId: projected.parentId,
2507
+ overId: currentOverId
2508
+ });
2509
+ }
2510
+
2511
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2512
+ var overIndex = clonedItems.findIndex(function (_ref6) {
2513
+ var id = _ref6.id;
2514
+ return id === currentOverId;
2515
+ });
2516
+ var activeIndex = clonedItems.findIndex(function (_ref7) {
2517
+ var id = _ref7.id;
2518
+ return id === currentActiveId;
2519
+ });
2520
+ var sortedItems = sortable.arrayMove(clonedItems, activeIndex, overIndex);
2521
+ var previousItem = sortedItems[overIndex - 1];
2522
+ var newAnnouncement;
2523
+ var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2524
+ var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2525
+
2526
+ if (!previousItem) {
2527
+ var nextItem = typeof sortedItems[overIndex + 1] !== 'undefined' ? sortedItems[overIndex + 1] : null;
2528
+
2529
+ if (nextItem !== null) {
2530
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2531
+ }
2532
+ } else if (projected.depth > previousItem.depth) {
2533
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2534
+ } else {
2535
+ var previousSibling = previousItem;
2536
+
2537
+ var _loop = function _loop() {
2538
+ var _previousSibling = previousSibling,
2539
+ parentId = _previousSibling.parentId;
2540
+ previousSibling = sortedItems.find(function (_ref8) {
2541
+ var id = _ref8.id;
2542
+ return id === parentId;
2543
+ });
2544
+ };
2545
+
2546
+ while (previousSibling && projected.depth < previousSibling.depth) {
2547
+ _loop();
2548
+ }
2549
+
2550
+ if (previousSibling) {
2551
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2552
+ }
2553
+ } // eslint-disable-next-line consistent-return
2554
+
2555
+
2556
+ return newAnnouncement;
2557
+ }
2558
+ }
2559
+
2041
2560
  var announcements = React.useMemo(function () {
2042
2561
  return {
2043
2562
  onDragStart: function onDragStart(id) {
@@ -2050,16 +2569,17 @@ var SortableTree = function SortableTree(_ref2) {
2050
2569
  return getMovementAnnouncement('onDragOver', id, currentOverId);
2051
2570
  },
2052
2571
  onDragEnd: function onDragEnd(id, currentOverId) {
2053
- // console.log('drag end', flattenedItems);
2572
+ var flat = flattenTree(items);
2573
+
2054
2574
  if (onChange !== null) {
2055
- onChange((flattenedItems || []).map(function (_ref6) {
2056
- var itemId = _ref6.id,
2057
- _ref6$children = _ref6.children,
2058
- children = _ref6$children === void 0 ? [] : _ref6$children,
2059
- _ref6$parentId = _ref6.parentId,
2060
- parentId = _ref6$parentId === void 0 ? null : _ref6$parentId,
2061
- _ref6$collapsed = _ref6.collapsed,
2062
- collapsed = _ref6$collapsed === void 0 ? false : _ref6$collapsed;
2575
+ onChange((flat || []).map(function (_ref9) {
2576
+ var itemId = _ref9.id,
2577
+ _ref9$children = _ref9.children,
2578
+ children = _ref9$children === void 0 ? [] : _ref9$children,
2579
+ _ref9$parentId = _ref9.parentId,
2580
+ parentId = _ref9$parentId === void 0 ? null : _ref9$parentId,
2581
+ _ref9$collapsed = _ref9.collapsed,
2582
+ collapsed = _ref9$collapsed === void 0 ? false : _ref9$collapsed;
2063
2583
  return {
2064
2584
  id: itemId,
2065
2585
  props: _objectSpread__default["default"](_objectSpread__default["default"]({}, (children || []).length > 0 ? {
@@ -2084,78 +2604,18 @@ var SortableTree = function SortableTree(_ref2) {
2084
2604
  return "Moving was cancelled. ".concat(id, " was dropped in its original position.");
2085
2605
  }
2086
2606
  };
2087
- }, [flattenedItems, onChange]); // Initial tree setup from list
2088
-
2089
- React.useEffect(function () {
2090
- // console.log('fuck off');
2091
- setItems(buildTree(defaultItems));
2092
- }, []);
2093
- return /*#__PURE__*/React__default["default"].createElement(core$1.DndContext, {
2094
- announcements: announcements,
2095
- sensors: sensors,
2096
- collisionDetection: core$1.closestCenter,
2097
- measuring: measuring,
2098
- onDragStart: handleDragStart,
2099
- onDragMove: handleDragMove,
2100
- onDragOver: handleDragOver,
2101
- onDragEnd: handleDragEnd,
2102
- onDragCancel: handleDragCancel
2103
- }, /*#__PURE__*/React__default["default"].createElement(sortable.SortableContext, {
2104
- items: sortedIds,
2105
- strategy: sortable.verticalListSortingStrategy
2106
- }, flattenedItems.map(function (_ref7, idx) {
2107
- var id = _ref7.id,
2108
- _ref7$children = _ref7.children,
2109
- children = _ref7$children === void 0 ? [] : _ref7$children,
2110
- collapsed = _ref7.collapsed,
2111
- depth = _ref7.depth,
2112
- _ref7$value = _ref7.value,
2113
- value = _ref7$value === void 0 ? null : _ref7$value;
2114
- return /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2115
- key: id,
2116
- id: id,
2117
- depth: id === activeId && projected ? projected.depth : depth,
2118
- indentationWidth: indentationWidth,
2119
- indicator: indicator,
2120
- collapsed: Boolean(collapsed && children.length),
2121
- onCollapse: collapsible && children.length ? function () {
2122
- return handleCollapse(id);
2123
- } : undefined,
2124
- onRemove: removable ? function () {
2125
- return handleRemove(id);
2126
- } : undefined,
2127
- childCount: getChildCount(items, id),
2128
- component: component,
2129
- value: value,
2130
- style: itemStyle,
2131
- onClickItem: onClickItem,
2132
- index: idx
2133
- });
2134
- }), /*#__PURE__*/reactDom.createPortal( /*#__PURE__*/React__default["default"].createElement(core$1.DragOverlay, {
2135
- dropAnimation: dropAnimation,
2136
- modifiers: indicator ? [adjustTranslate] : undefined
2137
- }, activeId && activeItem ? /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2138
- id: activeId,
2139
- depth: activeItem.depth,
2140
- clone: true,
2141
- childCount: getChildCount(items, activeId) + 1,
2142
- indentationWidth: indentationWidth,
2143
- component: component,
2144
- value: activeItem === null || activeItem === void 0 ? void 0 : activeItem.value,
2145
- onClickItem: onClickItem,
2146
- index: flattenedItems.findIndex(function (_ref8) {
2147
- var id = _ref8.id;
2148
- return activeId === id;
2149
- }),
2150
- style: itemStyle
2151
- }) : null), document.body)));
2152
-
2153
- function handleDragStart(_ref9) {
2154
- var newActiveId = _ref9.active.id;
2607
+ }, [flattenedItems, onChange, getMovementAnnouncement]);
2608
+ var activeValue = defaultItems.find(function (_ref10) {
2609
+ var _ref10$id = _ref10.id,
2610
+ defaultId = _ref10$id === void 0 ? null : _ref10$id;
2611
+ return defaultId === activeId;
2612
+ });
2613
+ var handleDragStart = React.useCallback(function (_ref11) {
2614
+ var newActiveId = _ref11.active.id;
2155
2615
  setActiveId(newActiveId);
2156
2616
  setOverId(newActiveId);
2157
- var newActiveItem = flattenedItems.find(function (_ref10) {
2158
- var id = _ref10.id;
2617
+ var newActiveItem = flattenedItems.find(function (_ref12) {
2618
+ var id = _ref12.id;
2159
2619
  return id === newActiveId;
2160
2620
  });
2161
2621
 
@@ -2167,53 +2627,49 @@ var SortableTree = function SortableTree(_ref2) {
2167
2627
  }
2168
2628
 
2169
2629
  document.body.style.setProperty('cursor', 'grabbing');
2170
- }
2171
-
2172
- function handleDragMove(_ref11) {
2173
- var delta = _ref11.delta;
2630
+ }, [flattenedItems, setActiveId, setOverId, setCurrentPosition]);
2631
+ var handleDragMove = React.useCallback(function (_ref13) {
2632
+ var delta = _ref13.delta;
2174
2633
  setOffsetLeft(delta.x);
2175
- }
2176
-
2177
- function handleDragOver(_ref12) {
2634
+ }, [setOffsetLeft]);
2635
+ var handleDragOver = React.useCallback(function (_ref14) {
2178
2636
  var _over$id;
2179
2637
 
2180
- var over = _ref12.over;
2638
+ var over = _ref14.over;
2181
2639
  setOverId((_over$id = over === null || over === void 0 ? void 0 : over.id) !== null && _over$id !== void 0 ? _over$id : null);
2182
- }
2183
-
2184
- function resetState() {
2640
+ }, [setOverId]);
2641
+ var resetState = React.useCallback(function () {
2185
2642
  setOverId(null);
2186
2643
  setActiveId(null);
2187
2644
  setOffsetLeft(0);
2188
2645
  setCurrentPosition(null);
2189
2646
  document.body.style.setProperty('cursor', '');
2190
- }
2191
-
2192
- function handleDragEnd(_ref13) {
2193
- var active = _ref13.active,
2194
- over = _ref13.over;
2647
+ }, [setOverId, setActiveId, setOffsetLeft, setCurrentPosition]);
2648
+ var handleDragEnd = React.useCallback(function (_ref15) {
2649
+ var active = _ref15.active,
2650
+ over = _ref15.over;
2195
2651
  resetState();
2196
2652
 
2197
2653
  if (projected && over) {
2198
2654
  var depth = projected.depth,
2199
2655
  parentId = projected.parentId;
2200
2656
  var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2201
- var overIndex = clonedItems.findIndex(function (_ref14) {
2202
- var id = _ref14.id;
2657
+ var overIndex = clonedItems.findIndex(function (_ref16) {
2658
+ var id = _ref16.id;
2203
2659
  return id === over.id;
2204
2660
  });
2205
- var activeIndex = clonedItems.findIndex(function (_ref15) {
2206
- var id = _ref15.id;
2661
+ var activeIndex = clonedItems.findIndex(function (_ref17) {
2662
+ var id = _ref17.id;
2207
2663
  return id === active.id;
2208
2664
  });
2209
2665
  var activeTreeItem = clonedItems[activeIndex];
2210
2666
  var maxDepth = getMaxDepth(activeTreeItem); // Un-merge and flatten
2211
2667
 
2212
2668
  if (depth > 0 && depth >= maxDepth && (activeTreeItem === null || activeTreeItem === void 0 ? void 0 : activeTreeItem.children) !== null && activeTreeItem.children.length > 0) {
2213
- var _loop = function _loop(i) {
2669
+ var _loop2 = function _loop2(i) {
2214
2670
  var childId = activeTreeItem.children[i].id;
2215
- var childIndex = clonedItems.findIndex(function (_ref16) {
2216
- var id = _ref16.id;
2671
+ var childIndex = clonedItems.findIndex(function (_ref18) {
2672
+ var id = _ref18.id;
2217
2673
  return id === childId;
2218
2674
  });
2219
2675
  clonedItems[childIndex].parentId = parentId;
@@ -2221,7 +2677,7 @@ var SortableTree = function SortableTree(_ref2) {
2221
2677
  };
2222
2678
 
2223
2679
  for (var i = 0; i < activeTreeItem.children.length; i += 1) {
2224
- _loop(i);
2680
+ _loop2(i);
2225
2681
  }
2226
2682
 
2227
2683
  activeTreeItem.children = [];
@@ -2235,96 +2691,113 @@ var SortableTree = function SortableTree(_ref2) {
2235
2691
  var newItems = buildTree(sortedItems);
2236
2692
  setItems(newItems);
2237
2693
  }
2238
- }
2239
-
2240
- function handleDragCancel() {
2694
+ }, [projected, items, resetState, sortable.arrayMove, buildTree, setItems]);
2695
+ var handleDragCancel = React.useCallback(function () {
2241
2696
  resetState();
2242
- }
2243
-
2244
- function handleRemove(id) {
2697
+ }, [resetState]);
2698
+ var handleRemove = React.useCallback(function (id) {
2245
2699
  setItems(function (newItems) {
2246
2700
  return removeItem(newItems, id);
2247
2701
  });
2248
- }
2249
-
2250
- function handleCollapse(id) {
2702
+ }, [setItems, removeItem]);
2703
+ var handleCollapse = React.useCallback(function (id) {
2251
2704
  setItems(function (newItems) {
2252
2705
  return setProperty(newItems, id, 'collapsed', function (value) {
2253
2706
  return !value;
2254
2707
  });
2255
2708
  });
2256
- }
2257
-
2258
- function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2259
- if (currentOverId && projected) {
2260
- if (eventName !== 'onDragEnd') {
2261
- if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2262
- return;
2263
- }
2264
-
2265
- setCurrentPosition({
2266
- parentId: projected.parentId,
2267
- overId: currentOverId
2268
- });
2269
- }
2270
-
2271
- var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2272
- var overIndex = clonedItems.findIndex(function (_ref17) {
2273
- var id = _ref17.id;
2274
- return id === currentOverId;
2275
- });
2276
- var activeIndex = clonedItems.findIndex(function (_ref18) {
2277
- var id = _ref18.id;
2278
- return id === currentActiveId;
2279
- });
2280
- var sortedItems = sortable.arrayMove(clonedItems, activeIndex, overIndex);
2281
- var previousItem = sortedItems[overIndex - 1];
2282
- var newAnnouncement;
2283
- var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2284
- var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2285
-
2286
- if (!previousItem) {
2287
- var nextItem = sortedItems[overIndex + 1];
2288
- newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2289
- } else if (projected.depth > previousItem.depth) {
2290
- newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2291
- } else {
2292
- var previousSibling = previousItem;
2293
-
2294
- var _loop2 = function _loop2() {
2295
- var _previousSibling = previousSibling,
2296
- parentId = _previousSibling.parentId;
2297
- previousSibling = sortedItems.find(function (_ref19) {
2298
- var id = _ref19.id;
2299
- return id === parentId;
2300
- });
2301
- };
2302
-
2303
- while (previousSibling && projected.depth < previousSibling.depth) {
2304
- _loop2();
2305
- }
2306
-
2307
- if (previousSibling) {
2308
- newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2309
- }
2310
- } // eslint-disable-next-line consistent-return
2311
-
2312
-
2313
- return newAnnouncement;
2314
- }
2315
- }
2709
+ }, [setItems, setProperty]);
2710
+ return /*#__PURE__*/React__default["default"].createElement(core$1.DndContext, {
2711
+ announcements: announcements,
2712
+ sensors: sensors,
2713
+ collisionDetection: core$1.closestCenter,
2714
+ measuring: measuring,
2715
+ onDragStart: handleDragStart,
2716
+ onDragMove: handleDragMove,
2717
+ onDragOver: handleDragOver,
2718
+ onDragEnd: handleDragEnd,
2719
+ onDragCancel: handleDragCancel
2720
+ }, /*#__PURE__*/React__default["default"].createElement(sortable.SortableContext, {
2721
+ items: sortedIds,
2722
+ strategy: sortable.verticalListSortingStrategy
2723
+ }, flattenedItems.map(function (_ref19, idx) {
2724
+ var _flattenedItems, _ref22;
2725
+
2726
+ var id = _ref19.id,
2727
+ _ref19$children = _ref19.children,
2728
+ children = _ref19$children === void 0 ? [] : _ref19$children,
2729
+ collapsed = _ref19.collapsed,
2730
+ depth = _ref19.depth;
2731
+ var screenValue = defaultItems.find(function (_ref20) {
2732
+ var _ref20$id = _ref20.id,
2733
+ defaultId = _ref20$id === void 0 ? null : _ref20$id;
2734
+ return defaultId === id;
2735
+ });
2736
+ var next = ((_flattenedItems = flattenedItems[idx + 1]) === null || _flattenedItems === void 0 ? void 0 : _flattenedItems.parentId) || null;
2737
+ var isCollapsed = collapsed && children.length > 0;
2738
+ var onCollapse = collapsible && children.length ? function () {
2739
+ return handleCollapse(id);
2740
+ } : null;
2741
+ var currentDepth = id === activeId && projected ? projected.depth : depth;
2742
+ var childCount = getChildCount(items, id);
2743
+ var childValue = childCount > 0 && collapsed ? defaultItems.slice().reverse().find(function (_ref21) {
2744
+ var _ref21$parentId = _ref21.parentId,
2745
+ parentId = _ref21$parentId === void 0 ? null : _ref21$parentId;
2746
+ return parentId === id;
2747
+ }) : null;
2748
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2749
+ className: classNames__default["default"]([styles$5.item, (_ref22 = {}, _defineProperty__default["default"](_ref22, styles$5.parent, onCollapse !== null && !collapsed), _defineProperty__default["default"](_ref22, styles$5.group, depth === 1), _defineProperty__default["default"](_ref22, styles$5.isLastChild, next === null), _ref22)]),
2750
+ key: id
2751
+ }, /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2752
+ key: id,
2753
+ id: id,
2754
+ depth: currentDepth,
2755
+ indentationWidth: indentationWidth,
2756
+ indicator: indicator,
2757
+ collapsed: isCollapsed,
2758
+ onCollapse: onCollapse,
2759
+ onRemove: removable ? function () {
2760
+ return handleRemove(id);
2761
+ } : undefined,
2762
+ childCount: childCount,
2763
+ component: component,
2764
+ value: (screenValue === null || screenValue === void 0 ? void 0 : screenValue.value) || null,
2765
+ onClickItem: onClickItem,
2766
+ index: idx,
2767
+ childValue: (childValue === null || childValue === void 0 ? void 0 : childValue.value) || null
2768
+ }));
2769
+ }), /*#__PURE__*/reactDom.createPortal( /*#__PURE__*/React__default["default"].createElement(core$1.DragOverlay, {
2770
+ dropAnimation: dropAnimation,
2771
+ modifiers: indicator ? [adjustTranslate] : undefined
2772
+ }, activeId && activeItem ? /*#__PURE__*/React__default["default"].createElement("div", {
2773
+ className: styles$5.item,
2774
+ key: activeId
2775
+ }, /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2776
+ id: activeId,
2777
+ depth: activeItem.depth,
2778
+ clone: true,
2779
+ childCount: getChildCount(items, activeId) + 1,
2780
+ indentationWidth: indentationWidth,
2781
+ component: component,
2782
+ value: activeValue === null || activeValue === void 0 ? void 0 : activeValue.value,
2783
+ onClickItem: onClickItem,
2784
+ index: flattenedItems.findIndex(function (_ref23) {
2785
+ var id = _ref23.id;
2786
+ return activeId === id;
2787
+ })
2788
+ })) : null), document.body)));
2316
2789
  };
2790
+
2317
2791
  SortableTree.propTypes = propTypes$8;
2318
2792
  SortableTree.defaultProps = defaultProps$8;
2319
2793
 
2320
- var _excluded$2 = ["className", "screen", "type", "onClick"],
2321
- _excluded2 = ["id", "screen"];
2794
+ var _excluded$2 = ["className", "screen", "type", "onClick", "active", "href"],
2795
+ _excluded2 = ["id", "screen", "href"];
2322
2796
  var propTypes$7 = {
2323
2797
  items: core.PropTypes.menuItems,
2324
2798
  withPreview: PropTypes__default["default"].bool,
2325
2799
  withPlaceholder: PropTypes__default["default"].bool,
2326
- settings: PropTypes__default["default"].node,
2327
- previewMinWidth: PropTypes__default["default"].number,
2800
+ settings: PropTypes__default["default"].oneOfType([PropTypes__default["default"].node, PropTypes__default["default"].func]),
2328
2801
  sortable: PropTypes__default["default"].bool,
2329
2802
  isTree: PropTypes__default["default"].bool,
2330
2803
  isVertical: PropTypes__default["default"].bool,
@@ -2341,7 +2814,6 @@ var defaultProps$7 = {
2341
2814
  withPreview: false,
2342
2815
  withPlaceholder: false,
2343
2816
  settings: null,
2344
- previewMinWidth: 320,
2345
2817
  sortable: false,
2346
2818
  isTree: false,
2347
2819
  isVertical: false,
@@ -2355,13 +2827,12 @@ var defaultProps$7 = {
2355
2827
  };
2356
2828
 
2357
2829
  var ScreensMenu = function ScreensMenu(_ref) {
2358
- var _ref10;
2830
+ var _ref8;
2359
2831
 
2360
2832
  var items = _ref.items,
2361
2833
  withPreview = _ref.withPreview,
2362
2834
  withPlaceholder = _ref.withPlaceholder,
2363
2835
  settings = _ref.settings,
2364
- previewMinWidth = _ref.previewMinWidth,
2365
2836
  isVertical = _ref.isVertical,
2366
2837
  noWrap = _ref.noWrap,
2367
2838
  className = _ref.className,
@@ -2372,78 +2843,31 @@ var ScreensMenu = function ScreensMenu(_ref) {
2372
2843
  isTree = _ref.isTree,
2373
2844
  onClickItem = _ref.onClickItem,
2374
2845
  onOrderChange = _ref.onOrderChange;
2375
-
2376
- var _useResizeObserver = hooks.useResizeObserver({}, [items]),
2377
- containerRef = _useResizeObserver.ref,
2378
- contentRect = _useResizeObserver.entry.contentRect;
2379
-
2380
- var _useResizeObserver2 = hooks.useResizeObserver({}, [items]),
2381
- columnRef = _useResizeObserver2.ref,
2382
- columnRect = _useResizeObserver2.entry.contentRect;
2383
-
2384
- var previewStyle = React.useMemo(function () {
2385
- var _ref2 = contentRect || {},
2386
- _ref2$width = _ref2.width,
2387
- itemWidth = _ref2$width === void 0 ? 0 : _ref2$width,
2388
- _ref2$height = _ref2.height,
2389
- itemHeight = _ref2$height === void 0 ? 0 : _ref2$height;
2390
-
2391
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 2 / 3;
2392
-
2393
- var _getSizeWithinBounds = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2394
- previewScale = _getSizeWithinBounds.scale;
2395
-
2396
- return {
2397
- width: previewMinWidth,
2398
- height: previewMinWidth * ratio,
2399
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
2400
- };
2401
- }, [previewMinWidth, contentRect]);
2402
- var treeStyle = React.useMemo(function () {
2403
- var _ref3 = columnRect || {},
2404
- _ref3$width = _ref3.width,
2405
- itemWidth = _ref3$width === void 0 ? 0 : _ref3$width;
2406
-
2407
- var itemHeight = itemWidth * 3 / 2;
2408
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 0;
2409
-
2410
- var _getSizeWithinBounds2 = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2411
- scaledWidth = _getSizeWithinBounds2.width,
2412
- scaledHeight = _getSizeWithinBounds2.height,
2413
- previewScale = _getSizeWithinBounds2.scale;
2414
-
2415
- return {
2416
- width: previewMinWidth,
2417
- height: previewMinWidth * ratio,
2418
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")"),
2419
- scale: previewScale,
2420
- scaledWidth: scaledWidth,
2421
- scaledHeight: scaledHeight
2422
- };
2423
- }, [previewMinWidth, columnRect]);
2424
- var itemsElements = !isTree ? items.map(function (_ref4, index) {
2425
- var _ref5;
2426
-
2427
- var _ref4$className = _ref4.className,
2428
- itemCustomClassName = _ref4$className === void 0 ? null : _ref4$className,
2429
- screen = _ref4.screen,
2430
- type = _ref4.type,
2431
- _ref4$onClick = _ref4.onClick,
2432
- onClick = _ref4$onClick === void 0 ? null : _ref4$onClick,
2433
- item = _objectWithoutProperties__default["default"](_ref4, _excluded$2);
2846
+ var itemsElements = !isTree ? items.map(function (_ref2, index) {
2847
+ var _ref3;
2848
+
2849
+ var _ref2$className = _ref2.className,
2850
+ itemCustomClassName = _ref2$className === void 0 ? null : _ref2$className,
2851
+ screen = _ref2.screen,
2852
+ type = _ref2.type,
2853
+ _ref2$onClick = _ref2.onClick,
2854
+ onClick = _ref2$onClick === void 0 ? null : _ref2$onClick,
2855
+ active = _ref2.active,
2856
+ href = _ref2.href,
2857
+ item = _objectWithoutProperties__default["default"](_ref2, _excluded$2);
2434
2858
 
2435
2859
  return /*#__PURE__*/React__default["default"].createElement("li", {
2436
2860
  key: item.id,
2437
- className: classNames__default["default"]([styles$6.item, (_ref5 = {}, _defineProperty__default["default"](_ref5, itemClassName, itemClassName !== null), _defineProperty__default["default"](_ref5, itemCustomClassName, itemCustomClassName !== null), _ref5)]),
2438
- "data-screen-id": item.id,
2439
- ref: index === 0 ? containerRef : null
2861
+ className: classNames__default["default"]([styles$6.item, (_ref3 = {}, _defineProperty__default["default"](_ref3, itemClassName, itemClassName !== null), _defineProperty__default["default"](_ref3, itemCustomClassName, itemCustomClassName !== null), _ref3)]),
2862
+ "data-screen-id": item.id
2440
2863
  }, /*#__PURE__*/React__default["default"].createElement(ScreenWithPreview, {
2441
2864
  index: index,
2442
- screen: _objectSpread__default["default"](_objectSpread__default["default"]({}, screen), withPlaceholder ? {
2865
+ screen: withPlaceholder ? _objectSpread__default["default"](_objectSpread__default["default"]({}, screen), {}, {
2443
2866
  type: type
2444
- } : null),
2445
- buttonClassName: buttonClassName,
2446
- previewStyle: previewStyle,
2867
+ }) : screen,
2868
+ href: href,
2869
+ className: buttonClassName,
2870
+ active: active,
2447
2871
  withPreview: withPreview,
2448
2872
  withPlaceholder: withPlaceholder,
2449
2873
  onClick: onClick,
@@ -2453,44 +2877,44 @@ var ScreensMenu = function ScreensMenu(_ref) {
2453
2877
  }, isFunction__default["default"](settings) ? settings(index) : settings) : null);
2454
2878
  }) : [];
2455
2879
  var sortableItems = React.useMemo(function () {
2456
- return isTree ? items.map(function (_ref7) {
2457
- var id = _ref7.id,
2458
- _ref7$screen = _ref7.screen,
2459
- screen = _ref7$screen === void 0 ? {} : _ref7$screen,
2460
- props = _objectWithoutProperties__default["default"](_ref7, _excluded2);
2880
+ return isTree ? items.map(function (_ref5) {
2881
+ var id = _ref5.id,
2882
+ _ref5$screen = _ref5.screen,
2883
+ screen = _ref5$screen === void 0 ? {} : _ref5$screen,
2884
+ href = _ref5.href,
2885
+ props = _objectWithoutProperties__default["default"](_ref5, _excluded2);
2461
2886
 
2462
2887
  var _screen$parentId = screen.parentId,
2463
2888
  parentId = _screen$parentId === void 0 ? null : _screen$parentId,
2464
2889
  _screen$group = screen.group,
2465
2890
  group = _screen$group === void 0 ? {} : _screen$group;
2466
2891
 
2467
- var _ref8 = group || {},
2468
- _ref8$collapsed = _ref8.collapsed,
2469
- collapsed = _ref8$collapsed === void 0 ? true : _ref8$collapsed;
2892
+ var _ref6 = group || {},
2893
+ _ref6$collapsed = _ref6.collapsed,
2894
+ collapsed = _ref6$collapsed === void 0 ? true : _ref6$collapsed;
2470
2895
 
2471
- return _objectSpread__default["default"]({
2896
+ return {
2472
2897
  id: id,
2473
2898
  parentId: parentId,
2474
2899
  collapsed: collapsed,
2475
- value: {
2900
+ value: _objectSpread__default["default"]({
2476
2901
  id: id,
2477
- screen: screen
2478
- }
2479
- }, props);
2480
- }, []) : items.map(function (_ref9) {
2481
- var id = _ref9.id;
2902
+ screen: screen,
2903
+ href: href
2904
+ }, props)
2905
+ };
2906
+ }, []) : items.map(function (_ref7) {
2907
+ var id = _ref7.id;
2482
2908
  return {
2483
2909
  id: id
2484
2910
  };
2485
2911
  });
2486
- }, [items, isTree]);
2912
+ }, [items, isTree, items.length]);
2487
2913
  return /*#__PURE__*/React__default["default"].createElement("div", {
2488
- className: classNames__default["default"]([styles$6.container, (_ref10 = {}, _defineProperty__default["default"](_ref10, styles$6.noWrap, noWrap), _defineProperty__default["default"](_ref10, styles$6.isVertical, isVertical), _defineProperty__default["default"](_ref10, styles$6.isTree, isTree), _defineProperty__default["default"](_ref10, styles$6.withPlaceholder, withPlaceholder), _defineProperty__default["default"](_ref10, className, className), _ref10)]),
2489
- ref: columnRef
2914
+ className: classNames__default["default"]([styles$6.container, (_ref8 = {}, _defineProperty__default["default"](_ref8, styles$6.noWrap, noWrap), _defineProperty__default["default"](_ref8, styles$6.isVertical, isVertical), _defineProperty__default["default"](_ref8, styles$6.isTree, isTree), _defineProperty__default["default"](_ref8, styles$6.withPlaceholder, withPlaceholder), _defineProperty__default["default"](_ref8, className, className), _ref8)])
2490
2915
  }, isTree && !sortable ? /*#__PURE__*/React__default["default"].createElement(SortableTree, {
2491
2916
  items: sortableItems,
2492
2917
  component: ScreenWithPreview,
2493
- itemStyle: treeStyle,
2494
2918
  onClickItem: onClickItem,
2495
2919
  onChange: onOrderChange
2496
2920
  }) : null, !isTree && sortable && items.length > 1 ? /*#__PURE__*/React__default["default"].createElement(reactSortablejs.ReactSortable, {
@@ -2509,7 +2933,7 @@ var ScreensMenu = function ScreensMenu(_ref) {
2509
2933
  ScreensMenu.propTypes = propTypes$7;
2510
2934
  ScreensMenu.defaultProps = defaultProps$7;
2511
2935
 
2512
- var styles$2 = {"container":"micromag-editor-menus-screen-types-container","row":"micromag-editor-menus-screen-types-row","title":"micromag-editor-menus-screen-types-title"};
2936
+ var styles$2 = {"container":"micromag-editor-menus-screen-types-container","row":"micromag-editor-menus-screen-types-row","title":"micromag-editor-menus-screen-types-title","screen":"micromag-editor-menus-screen-types-screen"};
2513
2937
 
2514
2938
  var propTypes$6 = {
2515
2939
  screens: core.PropTypes.screenDefinitions,
@@ -2605,13 +3029,12 @@ var ScreenTypes = function ScreenTypes(_ref) {
2605
3029
  }, /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
2606
3030
  items: items,
2607
3031
  withPlaceholder: true,
2608
- itemClassName: classNames__default["default"](['border', 'rounded', {
3032
+ itemClassName: classNames__default["default"]([styles$2.screen, 'border', 'rounded', {
2609
3033
  'border-secondary': selectedTypes === null,
2610
3034
  'border-dark': selectedTypes !== null,
2611
3035
  'bg-secondary': selectedTypes === null,
2612
3036
  'text-secondary': selectedTypes !== null
2613
3037
  }]),
2614
- previewMinWidth: 100,
2615
3038
  onClickItem: onClickItem
2616
3039
  })));
2617
3040
  })));
@@ -2787,6 +3210,8 @@ var EditorScreens = function EditorScreens(_ref) {
2787
3210
  }, true);
2788
3211
 
2789
3212
  if (!sameOrder || hasScreenProps) {
3213
+ console.log('order', ids);
3214
+
2790
3215
  var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
2791
3216
  components: _toConsumableArray__default["default"](currentScreens).sort(function (_ref13, _ref14) {
2792
3217
  var idA = _ref13.id;
@@ -2840,7 +3265,8 @@ var EditorScreens = function EditorScreens(_ref) {
2840
3265
  }, [setCreateModalOpened]);
2841
3266
  var onCreateModalRequestClose = React.useCallback(function () {
2842
3267
  return setCreateModalOpened(false);
2843
- }, [setCreateModalOpened]);
3268
+ }, [setCreateModalOpened]); // console.log(screens);
3269
+
2844
3270
  return /*#__PURE__*/React__default["default"].createElement("div", {
2845
3271
  className: classNames__default["default"](['d-flex', 'flex-column', styles$7.container, className])
2846
3272
  }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
@@ -2849,7 +3275,7 @@ var EditorScreens = function EditorScreens(_ref) {
2849
3275
  withoutCollapse: true,
2850
3276
  className: classNames__default["default"](['sticky-top', styles$7.navbar])
2851
3277
  }, /*#__PURE__*/React__default["default"].createElement("strong", {
2852
- className: "mb-0 mr-auto"
3278
+ className: "mb-0 me-auto"
2853
3279
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
2854
3280
  id: "jf+4Hq",
2855
3281
  defaultMessage: [{
@@ -3049,21 +3475,21 @@ var Editor = function Editor(_ref) {
3049
3475
  return /*#__PURE__*/React__default["default"].createElement(contexts.ModalsProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.PanelsProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenSizeProvider, {
3050
3476
  size: screenSize
3051
3477
  }, /*#__PURE__*/React__default["default"].createElement("div", {
3052
- className: classNames__default["default"]([styles$f.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3053
- return styles$f["screen-".concat(screenName)];
3054
- }) : null, (_ref5 = {}, _defineProperty__default["default"](_ref5, styles$f.fullscreen, fullscreen), _defineProperty__default["default"](_ref5, className, className), _ref5)]),
3478
+ className: classNames__default["default"]([styles$i.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3479
+ return styles$i["screen-".concat(screenName)];
3480
+ }) : null, (_ref5 = {}, _defineProperty__default["default"](_ref5, styles$i.fullscreen, fullscreen), _defineProperty__default["default"](_ref5, className, className), _ref5)]),
3055
3481
  ref: refContainer
3056
3482
  }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
3057
3483
  theme: "light",
3058
3484
  compact: true,
3059
3485
  noWrap: true,
3060
3486
  withoutCollapse: true,
3061
- className: styles$f.top
3487
+ className: styles$i.top
3062
3488
  }, mobileView !== 'screens' ? /*#__PURE__*/React__default["default"].createElement(components.Button, {
3063
3489
  size: "sm",
3064
3490
  theme: "secondary",
3065
3491
  onClick: onClickScreens,
3066
- className: "mr-auto"
3492
+ className: "me-auto"
3067
3493
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
3068
3494
  id: "wkysUu",
3069
3495
  defaultMessage: [{
@@ -3091,9 +3517,9 @@ var Editor = function Editor(_ref) {
3091
3517
  "value": "View screen"
3092
3518
  }]
3093
3519
  })) : null), /*#__PURE__*/React__default["default"].createElement("div", {
3094
- className: styles$f.inner
3520
+ className: styles$i.inner
3095
3521
  }, /*#__PURE__*/React__default["default"].createElement("div", {
3096
- className: classNames__default["default"]([styles$f.left, _defineProperty__default["default"]({}, styles$f.visible, !isMobile || mobileView === 'screens')]),
3522
+ className: classNames__default["default"]([styles$i.left, _defineProperty__default["default"]({}, styles$i.visible, !isMobile || mobileView === 'screens')]),
3097
3523
  ref: refScreensContainer
3098
3524
  }, /*#__PURE__*/React__default["default"].createElement(EditorScreens, {
3099
3525
  value: story,
@@ -3103,24 +3529,25 @@ var Editor = function Editor(_ref) {
3103
3529
  onChange: onStoryChange,
3104
3530
  onClickScreen: onClickScreen,
3105
3531
  isVertical: !isMobile,
3106
- className: styles$f.inner,
3532
+ className: styles$i.inner,
3107
3533
  isTree: true
3108
3534
  })), /*#__PURE__*/React__default["default"].createElement("div", {
3109
- className: classNames__default["default"]([styles$f.center, _defineProperty__default["default"]({}, styles$f.visible, !isMobile || mobileView === 'preview')])
3535
+ className: classNames__default["default"]([styles$i.center, _defineProperty__default["default"]({}, styles$i.visible, !isMobile || mobileView === 'preview')])
3110
3536
  }, /*#__PURE__*/React__default["default"].createElement(EditorPreview, {
3111
3537
  value: story,
3112
3538
  isTheme: isTheme,
3113
3539
  viewerTheme: viewerTheme,
3114
- className: styles$f.preview,
3115
- onScreenChange: onPreviewScreenChange
3540
+ className: styles$i.preview,
3541
+ onScreenChange: onPreviewScreenChange,
3542
+ onChange: onStoryChange
3116
3543
  })), /*#__PURE__*/React__default["default"].createElement("div", {
3117
- className: classNames__default["default"]([styles$f.right, _defineProperty__default["default"]({}, styles$f.visible, !isMobile || mobileView === 'form')])
3544
+ className: classNames__default["default"]([styles$i.right, _defineProperty__default["default"]({}, styles$i.visible, !isMobile || mobileView === 'form')])
3118
3545
  }, /*#__PURE__*/React__default["default"].createElement(EditForm, {
3119
3546
  key: screenId,
3120
3547
  value: story,
3121
3548
  isTheme: isTheme,
3122
3549
  onChange: onStoryChange,
3123
- className: styles$f.inner
3550
+ className: styles$i.inner
3124
3551
  }))), /*#__PURE__*/React__default["default"].createElement(components.Modals, null)))));
3125
3552
  };
3126
3553