@micromag/editor 0.2.413 → 0.3.2

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$h = {"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;
104
149
 
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;
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
+ }
185
+
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;
266
313
 
267
- var styles$g = {"container":"micromag-editor-menus-breadcrumb-container"};
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);
330
+
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$g.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$f = {"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
-
465
-
466
- return /*#__PURE__*/React__default["default"].createElement("div", {
467
- className: classNames__default["default"]([styles$f.container, _defineProperty__default["default"]({}, className, className)])
468
- }, /*#__PURE__*/React__default["default"].createElement("div", {
469
- className: styles$f.inner
470
- }, /*#__PURE__*/React__default["default"].createElement(fields.Fields, {
471
- fields: fields$1,
472
- value: value,
473
- onChange: onChange,
474
- gotoFieldForm: gotoFieldForm,
475
- closeFieldForm: closeFieldForm
476
- })));
477
- };
478
-
479
- ScreenForm.propTypes = propTypes$l;
480
- ScreenForm.defaultProps = defaultProps$l;
481
-
482
- /* eslint-disable react/jsx-props-no-spreading */
483
- var propTypes$k = {
484
- children: PropTypes__default["default"].node
485
- };
486
- var defaultProps$k = {
487
- children: null
488
- };
489
-
490
- var FieldWithContexts = function FieldWithContexts(props) {
491
- // Get definitions
492
- var _useScreenDefinition = contexts.useScreenDefinition(),
493
- _useScreenDefinition$ = _useScreenDefinition.fields,
494
- fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // To use a specific form component
495
-
496
-
497
- var formComponents = contexts.useFormsComponents();
498
- return /*#__PURE__*/React__default["default"].createElement(components.FieldForm, Object.assign({
499
- fields: fields,
500
- formComponents: formComponents
501
- }, props));
502
- };
503
-
504
- FieldWithContexts.propTypes = propTypes$k;
505
- FieldWithContexts.defaultProps = defaultProps$k;
664
+ Breadcrumb.propTypes = propTypes$l;
665
+ Breadcrumb.defaultProps = defaultProps$l;
506
666
 
507
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"};
508
668
 
509
- var propTypes$j = {
669
+ var propTypes$k = {
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
@@ -543,7 +703,7 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
543
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$d = {"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;
773
+
774
+ var definition = type !== null ? screensManager.getDefinition(type) : null;
775
+ return definition != null ? getScreenFieldsWithStates(definition) : [];
776
+ }, [screensManager, screen]); // Get transition value
611
777
 
612
- var _useFormTransition = useFormTransition(url, screenIndex, styles$d),
613
- transitionName = _useFormTransition.name,
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$d.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$d.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$d.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$d.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$d.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$d.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
 
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
+
813
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,
@@ -887,12 +1098,12 @@ var DeviceIcons = /*#__PURE__*/Object.freeze({
887
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
  };
@@ -911,51 +1122,391 @@ var DeviceButton = function DeviceButton(_ref) {
911
1122
  }));
912
1123
  };
913
1124
 
914
- DeviceButton.propTypes = propTypes$f;
915
- DeviceButton.defaultProps = defaultProps$f;
1125
+ DeviceButton.propTypes = propTypes$g;
1126
+ DeviceButton.defaultProps = defaultProps$g;
916
1127
 
917
1128
  var _excluded$5 = ["id"];
918
- var propTypes$e = {
1129
+ var propTypes$f = {
919
1130
  items: core.PropTypes.menuItems,
920
1131
  className: PropTypes__default["default"].string,
921
1132
  onClickItem: PropTypes__default["default"].func
922
1133
  };
923
- var defaultProps$e = {
1134
+ var defaultProps$f = {
924
1135
  items: [],
925
1136
  className: null,
926
1137
  onClickItem: null
927
1138
  };
928
1139
 
929
- var DevicesMenu = function DevicesMenu(_ref) {
930
- var items = _ref.items,
931
- 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$c.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);
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;
1301
+
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
+ }))));
1356
+ };
1357
+
1358
+ ScreenWithPreview.propTypes = propTypes$d;
1359
+ ScreenWithPreview.defaultProps = defaultProps$d;
1360
+
1361
+ var propTypes$c = {
1362
+ screen: core.PropTypes.screen.isRequired,
1363
+ screenState: PropTypes__default["default"].string,
1364
+ value: core.PropTypes.story.isRequired,
1365
+ className: PropTypes__default["default"].string,
1366
+ onChange: PropTypes__default["default"].func
1367
+ };
1368
+ var defaultProps$c = {
1369
+ screenState: null,
1370
+ className: null,
1371
+ onChange: null
1372
+ };
1373
+
1374
+ function ScreenStates(_ref) {
1375
+ var screen = _ref.screen,
1376
+ value = _ref.value,
1377
+ className = _ref.className,
1378
+ onChange = _ref.onChange;
1379
+ var url = contexts.useUrlGenerator();
1380
+ var push = contexts.useRoutePush();
1381
+
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
+ };
940
1457
 
941
- return /*#__PURE__*/React__default["default"].createElement(DeviceButton, Object.assign({
942
- device: id
943
- }, props, itemProps, {
944
- className: styles$c.button,
945
- onClick: function onClick(e) {
946
- return onClickItem !== null ? onClickItem(e, item, index) : null;
947
- }
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),
1470
+ className: styles$a.button,
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
- };
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
+ // }}
952
1501
 
953
- DevicesMenu.propTypes = propTypes$e;
954
- DevicesMenu.defaultProps = defaultProps$e;
1502
+ }));
1503
+ })));
1504
+ }
955
1505
 
956
- var styles$a = {"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$a.container, screens.map(function (screenName) {
1059
- return styles$a["screen-".concat(screenName)];
1060
- }), (_ref3 = {}, _defineProperty__default["default"](_ref3, className, className), _defineProperty__default["default"](_ref3, styles$a.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$a.inner
1652
+ className: styles$d.inner
1063
1653
  }, !withoutDevicesSizes ? /*#__PURE__*/React__default["default"].createElement("div", {
1064
- className: styles$a.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$a.bottom
1671
+ className: styles$d.bottom
1074
1672
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1075
- className: styles$a.inner,
1673
+ className: styles$d.inner,
1076
1674
  ref: bottomRef
1077
1675
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1078
- className: styles$a.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$a.viewerContainer
1087
- }, /*#__PURE__*/React__default["default"].createElement(viewer.Viewer, {
1088
- story: valueParsed,
1089
- storyIsParsed: true,
1090
- screen: screenId,
1091
- className: styles$a.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$9 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
1105
-
1106
- var styles$8 = {"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$7 = {"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$6 = {"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$6.container, 'rounded', (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$6.active, active), _defineProperty__default["default"](_ref2, className, className !== null), _ref2)])
1155
1678
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1156
- className: styles$6.screen
1157
- }, children !== null ? children : /*#__PURE__*/React__default["default"].createElement("div", {
1158
- className: styles$6.inner
1159
- }, icon !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1160
- className: styles$6.icon
1161
- }, icon) : null, label !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1162
- className: styles$6.label
1163
- }, label) : null)), /*#__PURE__*/React__default["default"].createElement(components.Button, {
1164
- className: styles$6.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$6.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
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
+ })))))));
1209
1691
  };
1210
1692
 
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$7.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
- }
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$7.preview,
1246
- style: previewStyle
1247
- }, /*#__PURE__*/React__default["default"].createElement(components.ScreenPreview, {
1248
- screen: screen,
1249
- width: width,
1250
- height: height,
1251
- className: styles$7.screen
1252
- })) : null, withPlaceholder && !withPreview ? /*#__PURE__*/React__default["default"].createElement("div", {
1253
- className: styles$7.placeholder,
1254
- style: previewStyle
1255
- }, /*#__PURE__*/React__default["default"].createElement(components.ScreenPlaceholder, {
1256
- screen: screen,
1257
- width: width,
1258
- height: height,
1259
- className: styles$7.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) {
@@ -1663,11 +2097,11 @@ var sortableTreeKeyboardCoordinates = function sortableTreeKeyboardCoordinates(c
1663
2097
 
1664
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"};
1665
2099
 
1666
- var styles$4 = {};
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"};
1667
2101
 
1668
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"};
1669
2103
 
1670
- var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "showCount", "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"];
1671
2105
  var propTypes$a = {
1672
2106
  childCount: PropTypes__default["default"].number,
1673
2107
  clone: PropTypes__default["default"].bool,
@@ -1693,6 +2127,7 @@ var propTypes$a = {
1693
2127
  }),
1694
2128
  showId: PropTypes__default["default"].bool,
1695
2129
  showCount: PropTypes__default["default"].bool,
2130
+ showCollapsedCount: PropTypes__default["default"].bool,
1696
2131
  children: PropTypes__default["default"].node
1697
2132
  };
1698
2133
  var defaultProps$a = {
@@ -1712,6 +2147,7 @@ var defaultProps$a = {
1712
2147
  style: null,
1713
2148
  showId: false,
1714
2149
  showCount: false,
2150
+ showCollapsedCount: false,
1715
2151
  children: null
1716
2152
  };
1717
2153
  var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -1735,18 +2171,21 @@ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref)
1735
2171
  var wrapperRef = _ref.wrapperRef;
1736
2172
  _ref.showId;
1737
2173
  var showCount = _ref.showCount,
2174
+ showCollapsedCount = _ref.showCollapsedCount,
1738
2175
  children = _ref.children,
1739
2176
  props = _objectWithoutProperties__default["default"](_ref, _excluded$4);
1740
2177
 
1741
- return /*#__PURE__*/React__default["default"].createElement("li", Object.assign({
2178
+ return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1742
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)]),
1743
2180
  ref: wrapperRef,
1744
- style: _objectSpread__default["default"]({
1745
- marginLeft: "".concat(indentationWidth * depth, "px")
1746
- }, style)
2181
+ style: {
2182
+ marginLeft: "".concat(indentationWidth * depth, "px"),
2183
+ marginRight: "".concat(5 * depth, "px")
2184
+ }
1747
2185
  }, props), /*#__PURE__*/React__default["default"].createElement("div", {
1748
2186
  className: styles$3.inner,
1749
- ref: ref
2187
+ ref: ref,
2188
+ style: style
1750
2189
  }, /*#__PURE__*/React__default["default"].createElement("button", Object.assign({
1751
2190
  className: classNames__default["default"]([styles$3.button, styles$3.handle]),
1752
2191
  type: "button"
@@ -1760,7 +2199,7 @@ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref)
1760
2199
  icon: freeSolidSvgIcons.faTimes
1761
2200
  })) : null, clone && showCount && childCount && childCount > 1 ? /*#__PURE__*/React__default["default"].createElement("span", {
1762
2201
  className: styles$3.count
1763
- }, childCount) : null, onCollapse && collapsed && 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", {
1764
2203
  className: styles$3.collapsedCount
1765
2204
  }, childCount) : null, onCollapse && depth === 0 ? /*#__PURE__*/React__default["default"].createElement("button", {
1766
2205
  type: "button",
@@ -1768,14 +2207,14 @@ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref)
1768
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", "collapsed", "onCollapse", "onClickItem", "isLastChild"];
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,
@@ -1795,6 +2234,8 @@ var propTypes$9 = {
1795
2234
  collapsed: PropTypes__default["default"].bool,
1796
2235
  onCollapse: PropTypes__default["default"].func,
1797
2236
  onClickItem: PropTypes__default["default"].func,
2237
+ // eslint-disable-next-line react/forbid-prop-types
2238
+ childValue: PropTypes__default["default"].object,
1798
2239
  isLastChild: PropTypes__default["default"].bool
1799
2240
  };
1800
2241
  var defaultProps$9 = {
@@ -1805,6 +2246,7 @@ var defaultProps$9 = {
1805
2246
  collapsed: false,
1806
2247
  onCollapse: null,
1807
2248
  onClickItem: null,
2249
+ childValue: null,
1808
2250
  isLastChild: false
1809
2251
  };
1810
2252
 
@@ -1819,12 +2261,13 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1819
2261
  index = _ref2.index,
1820
2262
  depth = _ref2.depth,
1821
2263
  Component = _ref2.component,
1822
- value = _ref2.value,
1823
- itemStyle = _ref2.style,
1824
- smallScale = _ref2.smallScale,
1825
- collapsed = _ref2.collapsed,
2264
+ value = _ref2.value;
2265
+ _ref2.style;
2266
+ _ref2.smallScale;
2267
+ var collapsed = _ref2.collapsed,
1826
2268
  onCollapse = _ref2.onCollapse,
1827
- onClickItem = _ref2.onClickItem;
2269
+ onClickItem = _ref2.onClickItem,
2270
+ childValue = _ref2.childValue;
1828
2271
  _ref2.isLastChild;
1829
2272
  var props = _objectWithoutProperties__default["default"](_ref2, _excluded$3);
1830
2273
 
@@ -1841,28 +2284,17 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1841
2284
  transform = _useSortable.transform,
1842
2285
  transition = _useSortable.transition;
1843
2286
 
1844
- var hasCollapse = onCollapse !== null;
1845
- var _itemStyle$scaledWidt = itemStyle.scaledWidth,
1846
- scaledWidth = _itemStyle$scaledWidt === void 0 ? 100 : _itemStyle$scaledWidt,
1847
- _itemStyle$scaledHeig = itemStyle.scaledHeight,
1848
- scaledHeight = _itemStyle$scaledHeig === void 0 ? 66 : _itemStyle$scaledHeig,
1849
- _itemStyle$scale = itemStyle.scale,
1850
- scale = _itemStyle$scale === void 0 ? 1 : _itemStyle$scale;
1851
- var extraHeight = hasCollapse ? 30 : 0;
2287
+ var timeout = React.useRef(null);
1852
2288
  var actionsStyle = {
1853
- width: depth === 0 ? scaledWidth : scaledWidth * smallScale,
1854
- height: depth === 0 ? scaledHeight + extraHeight : scaledHeight * smallScale,
1855
2289
  transform: utilities.CSS.Translate.toString(transform),
1856
2290
  transition: transition
1857
2291
  };
1858
- var previewStyle = {
1859
- width: itemStyle.width,
1860
- height: itemStyle.height,
1861
- transform: depth === 0 ? itemStyle.transform : "scale(".concat(scale * smallScale, ", ").concat(scale * smallScale, ")")
1862
- };
1863
2292
 
1864
2293
  var _ref3 = listeners || {},
1865
- 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;
1866
2298
 
1867
2299
  var onClickAction = React.useCallback(function (e) {
1868
2300
  if (onClickItem !== null) {
@@ -1870,9 +2302,25 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1870
2302
  }
1871
2303
 
1872
2304
  if (onPointerDown !== null) {
1873
- 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);
1874
2313
  }
1875
2314
  }, [value, index, onClickItem, onPointerDown]);
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]);
1876
2324
  return /*#__PURE__*/React__default["default"].createElement("div", {
1877
2325
  className: classNames__default["default"]([styles$4.container])
1878
2326
  }, /*#__PURE__*/React__default["default"].createElement(SortableTreeItemActions, Object.assign({
@@ -1884,14 +2332,18 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1884
2332
  disableSelection: iOS,
1885
2333
  disableInteraction: isSorting,
1886
2334
  handleProps: _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, attributes), listeners), {}, {
1887
- onPointerDown: onClickAction
2335
+ onPointerDown: onClickAction,
2336
+ onPointerUp: cancellingPointerUp
1888
2337
  }),
1889
2338
  collapsed: collapsed,
1890
2339
  onCollapse: onCollapse
1891
- }, props), Component !== null ? /*#__PURE__*/React__default["default"].createElement(Component, Object.assign({}, value, {
1892
- previewStyle: previewStyle
1893
- })) : 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));
1894
2345
  };
2346
+
1895
2347
  SortableTreeItem.propTypes = propTypes$9;
1896
2348
  SortableTreeItem.defaultProps = defaultProps$9;
1897
2349
 
@@ -1913,18 +2365,6 @@ var initialItems = [{
1913
2365
  id: 'Winter',
1914
2366
  children: []
1915
2367
  }]
1916
- }, {
1917
- id: 'About Us',
1918
- children: []
1919
- }, {
1920
- id: 'My Account',
1921
- children: [{
1922
- id: 'Addresses',
1923
- children: []
1924
- }, {
1925
- id: 'Order History',
1926
- children: []
1927
- }]
1928
2368
  }];
1929
2369
  var measuring = {
1930
2370
  droppable: {
@@ -1951,7 +2391,6 @@ var propTypes$8 = {
1951
2391
  indicator: PropTypes__default["default"].bool,
1952
2392
  removable: PropTypes__default["default"].bool,
1953
2393
  component: PropTypes__default["default"].func,
1954
- itemStyle: PropTypes__default["default"].shape({}),
1955
2394
  onClickItem: PropTypes__default["default"].func,
1956
2395
  onChange: PropTypes__default["default"].func
1957
2396
  };
@@ -1962,10 +2401,10 @@ var defaultProps$8 = {
1962
2401
  indicator: false,
1963
2402
  removable: false,
1964
2403
  component: null,
1965
- itemStyle: null,
1966
2404
  onClickItem: null,
1967
2405
  onChange: null
1968
2406
  };
2407
+
1969
2408
  var SortableTree = function SortableTree(_ref2) {
1970
2409
  var collapsible = _ref2.collapsible,
1971
2410
  defaultItems = _ref2.items,
@@ -1973,12 +2412,11 @@ var SortableTree = function SortableTree(_ref2) {
1973
2412
  indentationWidth = _ref2.indentationWidth,
1974
2413
  removable = _ref2.removable,
1975
2414
  component = _ref2.component,
1976
- itemStyle = _ref2.itemStyle,
1977
2415
  onClickItem = _ref2.onClickItem,
1978
2416
  onChange = _ref2.onChange;
1979
2417
 
1980
2418
  var _useState = React.useState(function () {
1981
- return defaultItems;
2419
+ return buildTree(defaultItems);
1982
2420
  }),
1983
2421
  _useState2 = _slicedToArray__default["default"](_useState, 2),
1984
2422
  items = _useState2[0],
@@ -2002,11 +2440,20 @@ var SortableTree = function SortableTree(_ref2) {
2002
2440
  var _useState9 = React.useState(null),
2003
2441
  _useState10 = _slicedToArray__default["default"](_useState9, 2),
2004
2442
  currentPosition = _useState10[0],
2005
- setCurrentPosition = _useState10[1];
2443
+ setCurrentPosition = _useState10[1]; // Tree setup from list
2006
2444
 
2007
- var flattenedItems = React.useMemo(function () {
2008
- var flattenedTree = flattenTree(items); // console.log('yo', items, flattenedTree);
2009
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);
2010
2457
  var collapsedItems = flattenedTree.reduce(function (acc, _ref3) {
2011
2458
  var _ref3$children = _ref3.children,
2012
2459
  children = _ref3$children === void 0 ? [] : _ref3$children,
@@ -2015,38 +2462,101 @@ var SortableTree = function SortableTree(_ref2) {
2015
2462
  return collapsed && children.length ? [].concat(_toConsumableArray__default["default"](acc), [id]) : acc;
2016
2463
  }, []) || null;
2017
2464
  return removeChildrenOf(flattenedTree, activeId ? [activeId].concat(_toConsumableArray__default["default"](collapsedItems)) : collapsedItems);
2018
- }, [activeId, items]);
2465
+ }, [activeId, items, items.length]);
2019
2466
  var projected = activeId && overId ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
2020
2467
  var sensorContext = React.useRef({
2021
2468
  items: flattenedItems,
2022
2469
  offset: offsetLeft
2023
2470
  });
2024
2471
 
2025
- var _useState11 = React.useState(function () {
2026
- return sortableTreeKeyboardCoordinates(sensorContext, indentationWidth);
2027
- }),
2028
- _useState12 = _slicedToArray__default["default"](_useState11, 1),
2029
- coordinateGetter = _useState12[0];
2472
+ var _useState11 = React.useState(function () {
2473
+ return sortableTreeKeyboardCoordinates(sensorContext, indentationWidth);
2474
+ }),
2475
+ _useState12 = _slicedToArray__default["default"](_useState11, 1),
2476
+ coordinateGetter = _useState12[0];
2477
+
2478
+ var sensors = core$1.useSensors(core$1.useSensor(core$1.PointerSensor), core$1.useSensor(core$1.KeyboardSensor, {
2479
+ coordinateGetter: coordinateGetter
2480
+ }));
2481
+ var sortedIds = React.useMemo(function () {
2482
+ return flattenedItems.map(function (_ref4) {
2483
+ var id = _ref4.id;
2484
+ return id;
2485
+ });
2486
+ }, [flattenedItems]);
2487
+ var activeItem = activeId ? flattenedItems.find(function (_ref5) {
2488
+ var id = _ref5.id;
2489
+ return id === activeId;
2490
+ }) : null;
2491
+ React.useEffect(function () {
2492
+ sensorContext.current = {
2493
+ items: flattenedItems,
2494
+ offset: offsetLeft
2495
+ };
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
+ }
2030
2559
 
2031
- var sensors = core$1.useSensors(core$1.useSensor(core$1.PointerSensor), core$1.useSensor(core$1.KeyboardSensor, {
2032
- coordinateGetter: coordinateGetter
2033
- }));
2034
- var sortedIds = React.useMemo(function () {
2035
- return flattenedItems.map(function (_ref4) {
2036
- var id = _ref4.id;
2037
- return id;
2038
- });
2039
- }, [flattenedItems]);
2040
- var activeItem = activeId ? flattenedItems.find(function (_ref5) {
2041
- var id = _ref5.id;
2042
- return id === activeId;
2043
- }) : null;
2044
- React.useEffect(function () {
2045
- sensorContext.current = {
2046
- items: flattenedItems,
2047
- offset: offsetLeft
2048
- };
2049
- }, [flattenedItems, offsetLeft]);
2050
2560
  var announcements = React.useMemo(function () {
2051
2561
  return {
2052
2562
  onDragStart: function onDragStart(id) {
@@ -2059,16 +2569,17 @@ var SortableTree = function SortableTree(_ref2) {
2059
2569
  return getMovementAnnouncement('onDragOver', id, currentOverId);
2060
2570
  },
2061
2571
  onDragEnd: function onDragEnd(id, currentOverId) {
2062
- // console.log('drag end', flattenedItems);
2572
+ var flat = flattenTree(items);
2573
+
2063
2574
  if (onChange !== null) {
2064
- onChange((flattenedItems || []).map(function (_ref6) {
2065
- var itemId = _ref6.id,
2066
- _ref6$children = _ref6.children,
2067
- children = _ref6$children === void 0 ? [] : _ref6$children,
2068
- _ref6$parentId = _ref6.parentId,
2069
- parentId = _ref6$parentId === void 0 ? null : _ref6$parentId,
2070
- _ref6$collapsed = _ref6.collapsed,
2071
- 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;
2072
2583
  return {
2073
2584
  id: itemId,
2074
2585
  props: _objectSpread__default["default"](_objectSpread__default["default"]({}, (children || []).length > 0 ? {
@@ -2093,98 +2604,18 @@ var SortableTree = function SortableTree(_ref2) {
2093
2604
  return "Moving was cancelled. ".concat(id, " was dropped in its original position.");
2094
2605
  }
2095
2606
  };
2096
- }, [flattenedItems, onChange]); // Initial tree setup from list
2097
-
2098
- React.useEffect(function () {
2099
- // console.log('fuck off');
2100
- setItems(buildTree(defaultItems));
2101
- }, []);
2102
- var activeValue = defaultItems.find(function (_ref7) {
2103
- var _ref7$id = _ref7.id,
2104
- defaultId = _ref7$id === void 0 ? null : _ref7$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;
2105
2611
  return defaultId === activeId;
2106
2612
  });
2107
- return /*#__PURE__*/React__default["default"].createElement(core$1.DndContext, {
2108
- announcements: announcements,
2109
- sensors: sensors,
2110
- collisionDetection: core$1.closestCenter,
2111
- measuring: measuring,
2112
- onDragStart: handleDragStart,
2113
- onDragMove: handleDragMove,
2114
- onDragOver: handleDragOver,
2115
- onDragEnd: handleDragEnd,
2116
- onDragCancel: handleDragCancel
2117
- }, /*#__PURE__*/React__default["default"].createElement(sortable.SortableContext, {
2118
- items: sortedIds,
2119
- strategy: sortable.verticalListSortingStrategy
2120
- }, flattenedItems.map(function (_ref8, idx) {
2121
- var _flattenedItems, _ref10;
2122
-
2123
- var id = _ref8.id,
2124
- _ref8$children = _ref8.children,
2125
- children = _ref8$children === void 0 ? [] : _ref8$children,
2126
- collapsed = _ref8.collapsed,
2127
- depth = _ref8.depth;
2128
- var screenValue = defaultItems.find(function (_ref9) {
2129
- var _ref9$id = _ref9.id,
2130
- defaultId = _ref9$id === void 0 ? null : _ref9$id;
2131
- return defaultId === id;
2132
- });
2133
- var next = ((_flattenedItems = flattenedItems[idx + 1]) === null || _flattenedItems === void 0 ? void 0 : _flattenedItems.parentId) || null;
2134
- var isCollapsed = collapsed && children.length > 0;
2135
- var onCollapse = collapsible && children.length ? function () {
2136
- return handleCollapse(id);
2137
- } : null;
2138
- var currentDepth = id === activeId && projected ? projected.depth : depth;
2139
- return /*#__PURE__*/React__default["default"].createElement("div", {
2140
- className: classNames__default["default"]([styles$5.item, (_ref10 = {}, _defineProperty__default["default"](_ref10, styles$5.parent, onCollapse !== null && !collapsed), _defineProperty__default["default"](_ref10, styles$5.group, depth === 1), _defineProperty__default["default"](_ref10, styles$5.isLastChild, next === null), _ref10)]),
2141
- key: id
2142
- }, /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2143
- key: id,
2144
- id: id,
2145
- depth: currentDepth,
2146
- indentationWidth: indentationWidth,
2147
- indicator: indicator,
2148
- collapsed: isCollapsed,
2149
- onCollapse: onCollapse,
2150
- onRemove: removable ? function () {
2151
- return handleRemove(id);
2152
- } : undefined,
2153
- childCount: getChildCount(items, id),
2154
- component: component,
2155
- value: (screenValue === null || screenValue === void 0 ? void 0 : screenValue.value) || null,
2156
- style: itemStyle,
2157
- onClickItem: onClickItem,
2158
- index: idx
2159
- }));
2160
- }), /*#__PURE__*/reactDom.createPortal( /*#__PURE__*/React__default["default"].createElement(core$1.DragOverlay, {
2161
- dropAnimation: dropAnimation,
2162
- modifiers: indicator ? [adjustTranslate] : undefined
2163
- }, activeId && activeItem ? /*#__PURE__*/React__default["default"].createElement("div", {
2164
- className: styles$5.item,
2165
- key: activeId
2166
- }, /*#__PURE__*/React__default["default"].createElement(SortableTreeItem, {
2167
- id: activeId,
2168
- depth: activeItem.depth,
2169
- clone: true,
2170
- childCount: getChildCount(items, activeId) + 1,
2171
- indentationWidth: indentationWidth,
2172
- component: component,
2173
- value: activeValue === null || activeValue === void 0 ? void 0 : activeValue.value,
2174
- onClickItem: onClickItem,
2175
- index: flattenedItems.findIndex(function (_ref11) {
2176
- var id = _ref11.id;
2177
- return activeId === id;
2178
- }),
2179
- style: itemStyle
2180
- })) : null), document.body)));
2181
-
2182
- function handleDragStart(_ref12) {
2183
- var newActiveId = _ref12.active.id;
2613
+ var handleDragStart = React.useCallback(function (_ref11) {
2614
+ var newActiveId = _ref11.active.id;
2184
2615
  setActiveId(newActiveId);
2185
2616
  setOverId(newActiveId);
2186
- var newActiveItem = flattenedItems.find(function (_ref13) {
2187
- var id = _ref13.id;
2617
+ var newActiveItem = flattenedItems.find(function (_ref12) {
2618
+ var id = _ref12.id;
2188
2619
  return id === newActiveId;
2189
2620
  });
2190
2621
 
@@ -2196,53 +2627,49 @@ var SortableTree = function SortableTree(_ref2) {
2196
2627
  }
2197
2628
 
2198
2629
  document.body.style.setProperty('cursor', 'grabbing');
2199
- }
2200
-
2201
- function handleDragMove(_ref14) {
2202
- var delta = _ref14.delta;
2630
+ }, [flattenedItems, setActiveId, setOverId, setCurrentPosition]);
2631
+ var handleDragMove = React.useCallback(function (_ref13) {
2632
+ var delta = _ref13.delta;
2203
2633
  setOffsetLeft(delta.x);
2204
- }
2205
-
2206
- function handleDragOver(_ref15) {
2634
+ }, [setOffsetLeft]);
2635
+ var handleDragOver = React.useCallback(function (_ref14) {
2207
2636
  var _over$id;
2208
2637
 
2209
- var over = _ref15.over;
2638
+ var over = _ref14.over;
2210
2639
  setOverId((_over$id = over === null || over === void 0 ? void 0 : over.id) !== null && _over$id !== void 0 ? _over$id : null);
2211
- }
2212
-
2213
- function resetState() {
2640
+ }, [setOverId]);
2641
+ var resetState = React.useCallback(function () {
2214
2642
  setOverId(null);
2215
2643
  setActiveId(null);
2216
2644
  setOffsetLeft(0);
2217
2645
  setCurrentPosition(null);
2218
2646
  document.body.style.setProperty('cursor', '');
2219
- }
2220
-
2221
- function handleDragEnd(_ref16) {
2222
- var active = _ref16.active,
2223
- over = _ref16.over;
2647
+ }, [setOverId, setActiveId, setOffsetLeft, setCurrentPosition]);
2648
+ var handleDragEnd = React.useCallback(function (_ref15) {
2649
+ var active = _ref15.active,
2650
+ over = _ref15.over;
2224
2651
  resetState();
2225
2652
 
2226
2653
  if (projected && over) {
2227
2654
  var depth = projected.depth,
2228
2655
  parentId = projected.parentId;
2229
2656
  var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2230
- var overIndex = clonedItems.findIndex(function (_ref17) {
2231
- var id = _ref17.id;
2657
+ var overIndex = clonedItems.findIndex(function (_ref16) {
2658
+ var id = _ref16.id;
2232
2659
  return id === over.id;
2233
2660
  });
2234
- var activeIndex = clonedItems.findIndex(function (_ref18) {
2235
- var id = _ref18.id;
2661
+ var activeIndex = clonedItems.findIndex(function (_ref17) {
2662
+ var id = _ref17.id;
2236
2663
  return id === active.id;
2237
2664
  });
2238
2665
  var activeTreeItem = clonedItems[activeIndex];
2239
2666
  var maxDepth = getMaxDepth(activeTreeItem); // Un-merge and flatten
2240
2667
 
2241
2668
  if (depth > 0 && depth >= maxDepth && (activeTreeItem === null || activeTreeItem === void 0 ? void 0 : activeTreeItem.children) !== null && activeTreeItem.children.length > 0) {
2242
- var _loop = function _loop(i) {
2669
+ var _loop2 = function _loop2(i) {
2243
2670
  var childId = activeTreeItem.children[i].id;
2244
- var childIndex = clonedItems.findIndex(function (_ref19) {
2245
- var id = _ref19.id;
2671
+ var childIndex = clonedItems.findIndex(function (_ref18) {
2672
+ var id = _ref18.id;
2246
2673
  return id === childId;
2247
2674
  });
2248
2675
  clonedItems[childIndex].parentId = parentId;
@@ -2250,7 +2677,7 @@ var SortableTree = function SortableTree(_ref2) {
2250
2677
  };
2251
2678
 
2252
2679
  for (var i = 0; i < activeTreeItem.children.length; i += 1) {
2253
- _loop(i);
2680
+ _loop2(i);
2254
2681
  }
2255
2682
 
2256
2683
  activeTreeItem.children = [];
@@ -2264,96 +2691,113 @@ var SortableTree = function SortableTree(_ref2) {
2264
2691
  var newItems = buildTree(sortedItems);
2265
2692
  setItems(newItems);
2266
2693
  }
2267
- }
2268
-
2269
- function handleDragCancel() {
2694
+ }, [projected, items, resetState, sortable.arrayMove, buildTree, setItems]);
2695
+ var handleDragCancel = React.useCallback(function () {
2270
2696
  resetState();
2271
- }
2272
-
2273
- function handleRemove(id) {
2697
+ }, [resetState]);
2698
+ var handleRemove = React.useCallback(function (id) {
2274
2699
  setItems(function (newItems) {
2275
2700
  return removeItem(newItems, id);
2276
2701
  });
2277
- }
2278
-
2279
- function handleCollapse(id) {
2702
+ }, [setItems, removeItem]);
2703
+ var handleCollapse = React.useCallback(function (id) {
2280
2704
  setItems(function (newItems) {
2281
2705
  return setProperty(newItems, id, 'collapsed', function (value) {
2282
2706
  return !value;
2283
2707
  });
2284
2708
  });
2285
- }
2286
-
2287
- function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2288
- if (currentOverId && projected) {
2289
- if (eventName !== 'onDragEnd') {
2290
- if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2291
- return;
2292
- }
2293
-
2294
- setCurrentPosition({
2295
- parentId: projected.parentId,
2296
- overId: currentOverId
2297
- });
2298
- }
2299
-
2300
- var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2301
- var overIndex = clonedItems.findIndex(function (_ref20) {
2302
- var id = _ref20.id;
2303
- return id === currentOverId;
2304
- });
2305
- var activeIndex = clonedItems.findIndex(function (_ref21) {
2306
- var id = _ref21.id;
2307
- return id === currentActiveId;
2308
- });
2309
- var sortedItems = sortable.arrayMove(clonedItems, activeIndex, overIndex);
2310
- var previousItem = sortedItems[overIndex - 1];
2311
- var newAnnouncement;
2312
- var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2313
- var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2314
-
2315
- if (!previousItem) {
2316
- var nextItem = sortedItems[overIndex + 1];
2317
- newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2318
- } else if (projected.depth > previousItem.depth) {
2319
- newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2320
- } else {
2321
- var previousSibling = previousItem;
2322
-
2323
- var _loop2 = function _loop2() {
2324
- var _previousSibling = previousSibling,
2325
- parentId = _previousSibling.parentId;
2326
- previousSibling = sortedItems.find(function (_ref22) {
2327
- var id = _ref22.id;
2328
- return id === parentId;
2329
- });
2330
- };
2331
-
2332
- while (previousSibling && projected.depth < previousSibling.depth) {
2333
- _loop2();
2334
- }
2335
-
2336
- if (previousSibling) {
2337
- newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2338
- }
2339
- } // eslint-disable-next-line consistent-return
2340
-
2341
-
2342
- return newAnnouncement;
2343
- }
2344
- }
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)));
2345
2789
  };
2790
+
2346
2791
  SortableTree.propTypes = propTypes$8;
2347
2792
  SortableTree.defaultProps = defaultProps$8;
2348
2793
 
2349
- var _excluded$2 = ["className", "screen", "type", "onClick"],
2350
- _excluded2 = ["id", "screen"];
2794
+ var _excluded$2 = ["className", "screen", "type", "onClick", "active", "href"],
2795
+ _excluded2 = ["id", "screen", "href"];
2351
2796
  var propTypes$7 = {
2352
2797
  items: core.PropTypes.menuItems,
2353
2798
  withPreview: PropTypes__default["default"].bool,
2354
2799
  withPlaceholder: PropTypes__default["default"].bool,
2355
2800
  settings: PropTypes__default["default"].oneOfType([PropTypes__default["default"].node, PropTypes__default["default"].func]),
2356
- previewMinWidth: PropTypes__default["default"].number,
2357
2801
  sortable: PropTypes__default["default"].bool,
2358
2802
  isTree: PropTypes__default["default"].bool,
2359
2803
  isVertical: PropTypes__default["default"].bool,
@@ -2370,7 +2814,6 @@ var defaultProps$7 = {
2370
2814
  withPreview: false,
2371
2815
  withPlaceholder: false,
2372
2816
  settings: null,
2373
- previewMinWidth: 320,
2374
2817
  sortable: false,
2375
2818
  isTree: false,
2376
2819
  isVertical: false,
@@ -2384,13 +2827,12 @@ var defaultProps$7 = {
2384
2827
  };
2385
2828
 
2386
2829
  var ScreensMenu = function ScreensMenu(_ref) {
2387
- var _ref10;
2830
+ var _ref8;
2388
2831
 
2389
2832
  var items = _ref.items,
2390
2833
  withPreview = _ref.withPreview,
2391
2834
  withPlaceholder = _ref.withPlaceholder,
2392
2835
  settings = _ref.settings,
2393
- previewMinWidth = _ref.previewMinWidth,
2394
2836
  isVertical = _ref.isVertical,
2395
2837
  noWrap = _ref.noWrap,
2396
2838
  className = _ref.className,
@@ -2401,125 +2843,78 @@ var ScreensMenu = function ScreensMenu(_ref) {
2401
2843
  isTree = _ref.isTree,
2402
2844
  onClickItem = _ref.onClickItem,
2403
2845
  onOrderChange = _ref.onOrderChange;
2404
-
2405
- var _useResizeObserver = hooks.useResizeObserver({}, [items]),
2406
- containerRef = _useResizeObserver.ref,
2407
- contentRect = _useResizeObserver.entry.contentRect;
2408
-
2409
- var _useResizeObserver2 = hooks.useResizeObserver({}, [items]),
2410
- columnRef = _useResizeObserver2.ref,
2411
- columnRect = _useResizeObserver2.entry.contentRect;
2412
-
2413
- var previewStyle = React.useMemo(function () {
2414
- var _ref2 = contentRect || {},
2415
- _ref2$width = _ref2.width,
2416
- itemWidth = _ref2$width === void 0 ? 0 : _ref2$width,
2417
- _ref2$height = _ref2.height,
2418
- itemHeight = _ref2$height === void 0 ? 0 : _ref2$height;
2419
-
2420
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 2 / 3;
2421
-
2422
- var _getSizeWithinBounds = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2423
- previewScale = _getSizeWithinBounds.scale;
2424
-
2425
- return {
2426
- width: previewMinWidth,
2427
- height: previewMinWidth * ratio,
2428
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
2429
- };
2430
- }, [previewMinWidth, contentRect]);
2431
- var treeStyle = React.useMemo(function () {
2432
- var _ref3 = columnRect || {},
2433
- _ref3$width = _ref3.width,
2434
- itemWidth = _ref3$width === void 0 ? 0 : _ref3$width;
2435
-
2436
- var itemHeight = itemWidth * 3 / 2;
2437
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 0;
2438
-
2439
- var _getSizeWithinBounds2 = size.getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2440
- scaledWidth = _getSizeWithinBounds2.width,
2441
- scaledHeight = _getSizeWithinBounds2.height,
2442
- previewScale = _getSizeWithinBounds2.scale;
2443
-
2444
- return {
2445
- width: previewMinWidth,
2446
- height: previewMinWidth * ratio,
2447
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")"),
2448
- scale: previewScale,
2449
- scaledWidth: scaledWidth,
2450
- scaledHeight: scaledHeight
2451
- };
2452
- }, [previewMinWidth, columnRect]);
2453
- var itemsElements = !isTree ? items.map(function (_ref4, index) {
2454
- var _ref5;
2455
-
2456
- var _ref4$className = _ref4.className,
2457
- itemCustomClassName = _ref4$className === void 0 ? null : _ref4$className,
2458
- screen = _ref4.screen,
2459
- type = _ref4.type,
2460
- _ref4$onClick = _ref4.onClick,
2461
- onClick = _ref4$onClick === void 0 ? null : _ref4$onClick,
2462
- 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);
2463
2858
 
2464
2859
  return /*#__PURE__*/React__default["default"].createElement("li", {
2465
2860
  key: item.id,
2466
- className: classNames__default["default"]([styles$8.item, (_ref5 = {}, _defineProperty__default["default"](_ref5, itemClassName, itemClassName !== null), _defineProperty__default["default"](_ref5, itemCustomClassName, itemCustomClassName !== null), _ref5)]),
2467
- "data-screen-id": item.id,
2468
- 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
2469
2863
  }, /*#__PURE__*/React__default["default"].createElement(ScreenWithPreview, {
2470
2864
  index: index,
2471
- screen: _objectSpread__default["default"](_objectSpread__default["default"]({}, screen), withPlaceholder ? {
2865
+ screen: withPlaceholder ? _objectSpread__default["default"](_objectSpread__default["default"]({}, screen), {}, {
2472
2866
  type: type
2473
- } : null),
2474
- buttonClassName: buttonClassName,
2475
- previewStyle: previewStyle,
2867
+ }) : screen,
2868
+ href: href,
2869
+ className: buttonClassName,
2870
+ active: active,
2476
2871
  withPreview: withPreview,
2477
2872
  withPlaceholder: withPlaceholder,
2478
2873
  onClick: onClick,
2479
2874
  onClickItem: onClickItem
2480
2875
  }), settings !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
2481
- className: classNames__default["default"]([_defineProperty__default["default"]({}, settingsClassName, settingsClassName !== null), styles$8.settings, 'p-2'])
2876
+ className: classNames__default["default"]([_defineProperty__default["default"]({}, settingsClassName, settingsClassName !== null), styles$6.settings, 'p-2'])
2482
2877
  }, isFunction__default["default"](settings) ? settings(index) : settings) : null);
2483
2878
  }) : [];
2484
2879
  var sortableItems = React.useMemo(function () {
2485
- return isTree ? items.map(function (_ref7) {
2486
- var id = _ref7.id,
2487
- _ref7$screen = _ref7.screen,
2488
- screen = _ref7$screen === void 0 ? {} : _ref7$screen,
2489
- 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);
2490
2886
 
2491
2887
  var _screen$parentId = screen.parentId,
2492
2888
  parentId = _screen$parentId === void 0 ? null : _screen$parentId,
2493
2889
  _screen$group = screen.group,
2494
2890
  group = _screen$group === void 0 ? {} : _screen$group;
2495
2891
 
2496
- var _ref8 = group || {},
2497
- _ref8$collapsed = _ref8.collapsed,
2498
- 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;
2499
2895
 
2500
- return _objectSpread__default["default"]({
2896
+ return {
2501
2897
  id: id,
2502
2898
  parentId: parentId,
2503
2899
  collapsed: collapsed,
2504
- value: {
2900
+ value: _objectSpread__default["default"]({
2505
2901
  id: id,
2506
- screen: screen
2507
- }
2508
- }, props);
2509
- }, []) : items.map(function (_ref9) {
2510
- var id = _ref9.id;
2902
+ screen: screen,
2903
+ href: href
2904
+ }, props)
2905
+ };
2906
+ }, []) : items.map(function (_ref7) {
2907
+ var id = _ref7.id;
2511
2908
  return {
2512
2909
  id: id
2513
2910
  };
2514
2911
  });
2515
- }, [items, isTree]);
2912
+ }, [items, isTree, items.length]);
2516
2913
  return /*#__PURE__*/React__default["default"].createElement("div", {
2517
- className: classNames__default["default"]([styles$8.container, (_ref10 = {}, _defineProperty__default["default"](_ref10, styles$8.noWrap, noWrap), _defineProperty__default["default"](_ref10, styles$8.isVertical, isVertical), _defineProperty__default["default"](_ref10, styles$8.isTree, isTree), _defineProperty__default["default"](_ref10, styles$8.withPlaceholder, withPlaceholder), _defineProperty__default["default"](_ref10, className, className), _ref10)]),
2518
- 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)])
2519
2915
  }, isTree && !sortable ? /*#__PURE__*/React__default["default"].createElement(SortableTree, {
2520
2916
  items: sortableItems,
2521
2917
  component: ScreenWithPreview,
2522
- itemStyle: treeStyle,
2523
2918
  onClickItem: onClickItem,
2524
2919
  onChange: onOrderChange
2525
2920
  }) : null, !isTree && sortable && items.length > 1 ? /*#__PURE__*/React__default["default"].createElement(reactSortablejs.ReactSortable, {
@@ -2529,16 +2924,16 @@ var ScreensMenu = function ScreensMenu(_ref) {
2529
2924
  delayOnTouchStart: true,
2530
2925
  delay: 2,
2531
2926
  tag: "ul",
2532
- className: styles$8.items
2927
+ className: styles$6.items
2533
2928
  }, itemsElements) : null, !isTree && (!sortable || items.length < 1) ? /*#__PURE__*/React__default["default"].createElement("ul", {
2534
- className: styles$8.items
2929
+ className: styles$6.items
2535
2930
  }, itemsElements) : null);
2536
2931
  };
2537
2932
 
2538
2933
  ScreensMenu.propTypes = propTypes$7;
2539
2934
  ScreensMenu.defaultProps = defaultProps$7;
2540
2935
 
2541
- 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"};
2542
2937
 
2543
2938
  var propTypes$6 = {
2544
2939
  screens: core.PropTypes.screenDefinitions,
@@ -2634,13 +3029,12 @@ var ScreenTypes = function ScreenTypes(_ref) {
2634
3029
  }, /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
2635
3030
  items: items,
2636
3031
  withPlaceholder: true,
2637
- itemClassName: classNames__default["default"](['border', 'rounded', {
3032
+ itemClassName: classNames__default["default"]([styles$2.screen, 'border', 'rounded', {
2638
3033
  'border-secondary': selectedTypes === null,
2639
3034
  'border-dark': selectedTypes !== null,
2640
3035
  'bg-secondary': selectedTypes === null,
2641
3036
  'text-secondary': selectedTypes !== null
2642
3037
  }]),
2643
- previewMinWidth: 100,
2644
3038
  onClickItem: onClickItem
2645
3039
  })));
2646
3040
  })));
@@ -2784,54 +3178,62 @@ var EditorScreens = function EditorScreens(_ref) {
2784
3178
  return newScreen;
2785
3179
  }, [value, onChange, isTheme, screens, currentScreenId, setCreateModalOpened]);
2786
3180
  var onOrderChange = React.useCallback(function (listItems) {
2787
- // const ids = listItems.map(({ id }) => id);
2788
- var screenProps = listItems.map(function (_ref7) {
2789
- var id = _ref7.id,
2790
- _ref7$props = _ref7.props,
2791
- props = _ref7$props === void 0 ? null : _ref7$props;
3181
+ var ids = listItems.map(function (_ref7) {
3182
+ var id = _ref7.id;
3183
+ return id;
3184
+ });
3185
+ var screenProps = listItems.map(function (_ref8) {
3186
+ var id = _ref8.id,
3187
+ _ref8$props = _ref8.props,
3188
+ props = _ref8$props === void 0 ? null : _ref8$props;
2792
3189
  return {
2793
3190
  id: id,
2794
3191
  props: props
2795
3192
  };
2796
3193
  });
2797
- var hasScreenProps = (screenProps.filter(function (_ref8) {
2798
- var props = _ref8.props;
3194
+ var hasScreenProps = (screenProps.filter(function (_ref9) {
3195
+ var props = _ref9.props;
2799
3196
  return props !== null;
2800
3197
  }) || []).length > 0;
2801
3198
 
2802
- var _ref9 = value || {},
2803
- _ref9$components = _ref9.components,
2804
- currentScreens = _ref9$components === void 0 ? [] : _ref9$components;
3199
+ var _ref10 = value || {},
3200
+ _ref10$components = _ref10.components,
3201
+ currentScreens = _ref10$components === void 0 ? [] : _ref10$components;
2805
3202
 
2806
- var currentIds = currentScreens.map(function (_ref10) {
2807
- var id = _ref10.id;
3203
+ var currentIds = currentScreens.map(function (_ref11) {
3204
+ var id = _ref11.id;
2808
3205
  return id;
2809
3206
  });
2810
- var sameOrder = listItems.reduce(function (same, _ref11, index) {
2811
- var id = _ref11.id;
3207
+ var sameOrder = listItems.reduce(function (same, _ref12, index) {
3208
+ var id = _ref12.id;
2812
3209
  return same && id === currentIds[index];
2813
3210
  }, true);
2814
3211
 
2815
3212
  if (!sameOrder || hasScreenProps) {
3213
+ console.log('order', ids);
3214
+
2816
3215
  var newValue = _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, {
2817
- components: _toConsumableArray__default["default"](currentScreens) // .sort(({ id: idA }, { id: idB }) => {
2818
- // const indexA = ids.indexOf(idA);
2819
- // const indexB = ids.indexOf(idB);
2820
- // if (indexA === indexB) {
2821
- // return 0;
2822
- // }
2823
- // return indexA > indexB ? 1 : -1;
2824
- // })
2825
- .map(function (_ref12) {
3216
+ components: _toConsumableArray__default["default"](currentScreens).sort(function (_ref13, _ref14) {
3217
+ var idA = _ref13.id;
3218
+ var idB = _ref14.id;
3219
+ var indexA = ids.indexOf(idA);
3220
+ var indexB = ids.indexOf(idB);
3221
+
3222
+ if (indexA === indexB) {
3223
+ return 0;
3224
+ }
3225
+
3226
+ return indexA > indexB ? 1 : -1;
3227
+ }).map(function (_ref15) {
2826
3228
  var _screenProps$find;
2827
3229
 
2828
- var id = _ref12.id,
2829
- props = _objectWithoutProperties__default["default"](_ref12, _excluded$1);
3230
+ var id = _ref15.id,
3231
+ props = _objectWithoutProperties__default["default"](_ref15, _excluded$1);
2830
3232
 
2831
3233
  return _objectSpread__default["default"](_objectSpread__default["default"]({
2832
3234
  id: id
2833
- }, props), (_screenProps$find = screenProps.find(function (_ref13) {
2834
- var propsId = _ref13.id;
3235
+ }, props), (_screenProps$find = screenProps.find(function (_ref16) {
3236
+ var propsId = _ref16.id;
2835
3237
  return propsId === id;
2836
3238
  })) === null || _screenProps$find === void 0 ? void 0 : _screenProps$find.props);
2837
3239
  })
@@ -2844,8 +3246,8 @@ var EditorScreens = function EditorScreens(_ref) {
2844
3246
  }, [value, onChange]);
2845
3247
  var onClickScreenType = React.useCallback(function (definition) {
2846
3248
  setCreateModalOpened(false);
2847
- var currentScreen = isTheme ? screens.find(function (_ref14) {
2848
- var type = _ref14.type;
3249
+ var currentScreen = isTheme ? screens.find(function (_ref17) {
3250
+ var type = _ref17.type;
2849
3251
  return type === definition.id;
2850
3252
  }) || null : null;
2851
3253
 
@@ -2863,16 +3265,17 @@ var EditorScreens = function EditorScreens(_ref) {
2863
3265
  }, [setCreateModalOpened]);
2864
3266
  var onCreateModalRequestClose = React.useCallback(function () {
2865
3267
  return setCreateModalOpened(false);
2866
- }, [setCreateModalOpened]);
3268
+ }, [setCreateModalOpened]); // console.log(screens);
3269
+
2867
3270
  return /*#__PURE__*/React__default["default"].createElement("div", {
2868
- className: classNames__default["default"](['d-flex', 'flex-column', styles$9.container, className])
3271
+ className: classNames__default["default"](['d-flex', 'flex-column', styles$7.container, className])
2869
3272
  }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
2870
3273
  compact: true,
2871
3274
  noWrap: true,
2872
3275
  withoutCollapse: true,
2873
- className: classNames__default["default"](['sticky-top', styles$9.navbar])
3276
+ className: classNames__default["default"](['sticky-top', styles$7.navbar])
2874
3277
  }, /*#__PURE__*/React__default["default"].createElement("strong", {
2875
- className: "mb-0 mr-auto"
3278
+ className: "mb-0 me-auto"
2876
3279
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
2877
3280
  id: "jf+4Hq",
2878
3281
  defaultMessage: [{
@@ -2890,9 +3293,9 @@ var EditorScreens = function EditorScreens(_ref) {
2890
3293
  className: "flex-grow-1 d-flex w-100 p-2"
2891
3294
  }, /*#__PURE__*/React__default["default"].createElement(reactRouter.Route, {
2892
3295
  path: [routes.screen, routes.home],
2893
- render: function render(_ref15) {
2894
- var _ref15$match$params$s = _ref15.match.params.screen,
2895
- screenId = _ref15$match$params$s === void 0 ? null : _ref15$match$params$s;
3296
+ render: function render(_ref18) {
3297
+ var _ref18$match$params$s = _ref18.match.params.screen,
3298
+ screenId = _ref18$match$params$s === void 0 ? null : _ref18$match$params$s;
2896
3299
  return screens.length > 0 ? /*#__PURE__*/React__default["default"].createElement(ScreensMenu, {
2897
3300
  items: screens.map(function (it) {
2898
3301
  return {
@@ -2925,8 +3328,8 @@ var EditorScreens = function EditorScreens(_ref) {
2925
3328
  })));
2926
3329
  }
2927
3330
  })), createModalOpened ? /*#__PURE__*/React__default["default"].createElement(ScreenTypesModal, {
2928
- selectedTypes: isTheme ? screens.map(function (_ref16) {
2929
- var type = _ref16.type;
3331
+ selectedTypes: isTheme ? screens.map(function (_ref19) {
3332
+ var type = _ref19.type;
2930
3333
  return type;
2931
3334
  }) : [],
2932
3335
  onClickScreenType: onClickScreenType,
@@ -3072,21 +3475,21 @@ var Editor = function Editor(_ref) {
3072
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, {
3073
3476
  size: screenSize
3074
3477
  }, /*#__PURE__*/React__default["default"].createElement("div", {
3075
- className: classNames__default["default"]([styles$h.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3076
- return styles$h["screen-".concat(screenName)];
3077
- }) : null, (_ref5 = {}, _defineProperty__default["default"](_ref5, styles$h.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)]),
3078
3481
  ref: refContainer
3079
3482
  }, /*#__PURE__*/React__default["default"].createElement(components.Navbar, {
3080
3483
  theme: "light",
3081
3484
  compact: true,
3082
3485
  noWrap: true,
3083
3486
  withoutCollapse: true,
3084
- className: styles$h.top
3487
+ className: styles$i.top
3085
3488
  }, mobileView !== 'screens' ? /*#__PURE__*/React__default["default"].createElement(components.Button, {
3086
3489
  size: "sm",
3087
3490
  theme: "secondary",
3088
3491
  onClick: onClickScreens,
3089
- className: "mr-auto"
3492
+ className: "me-auto"
3090
3493
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
3091
3494
  id: "wkysUu",
3092
3495
  defaultMessage: [{
@@ -3114,9 +3517,9 @@ var Editor = function Editor(_ref) {
3114
3517
  "value": "View screen"
3115
3518
  }]
3116
3519
  })) : null), /*#__PURE__*/React__default["default"].createElement("div", {
3117
- className: styles$h.inner
3520
+ className: styles$i.inner
3118
3521
  }, /*#__PURE__*/React__default["default"].createElement("div", {
3119
- className: classNames__default["default"]([styles$h.left, _defineProperty__default["default"]({}, styles$h.visible, !isMobile || mobileView === 'screens')]),
3522
+ className: classNames__default["default"]([styles$i.left, _defineProperty__default["default"]({}, styles$i.visible, !isMobile || mobileView === 'screens')]),
3120
3523
  ref: refScreensContainer
3121
3524
  }, /*#__PURE__*/React__default["default"].createElement(EditorScreens, {
3122
3525
  value: story,
@@ -3126,24 +3529,25 @@ var Editor = function Editor(_ref) {
3126
3529
  onChange: onStoryChange,
3127
3530
  onClickScreen: onClickScreen,
3128
3531
  isVertical: !isMobile,
3129
- className: styles$h.inner,
3532
+ className: styles$i.inner,
3130
3533
  isTree: true
3131
3534
  })), /*#__PURE__*/React__default["default"].createElement("div", {
3132
- className: classNames__default["default"]([styles$h.center, _defineProperty__default["default"]({}, styles$h.visible, !isMobile || mobileView === 'preview')])
3535
+ className: classNames__default["default"]([styles$i.center, _defineProperty__default["default"]({}, styles$i.visible, !isMobile || mobileView === 'preview')])
3133
3536
  }, /*#__PURE__*/React__default["default"].createElement(EditorPreview, {
3134
3537
  value: story,
3135
3538
  isTheme: isTheme,
3136
3539
  viewerTheme: viewerTheme,
3137
- className: styles$h.preview,
3138
- onScreenChange: onPreviewScreenChange
3540
+ className: styles$i.preview,
3541
+ onScreenChange: onPreviewScreenChange,
3542
+ onChange: onStoryChange
3139
3543
  })), /*#__PURE__*/React__default["default"].createElement("div", {
3140
- className: classNames__default["default"]([styles$h.right, _defineProperty__default["default"]({}, styles$h.visible, !isMobile || mobileView === 'form')])
3544
+ className: classNames__default["default"]([styles$i.right, _defineProperty__default["default"]({}, styles$i.visible, !isMobile || mobileView === 'form')])
3141
3545
  }, /*#__PURE__*/React__default["default"].createElement(EditForm, {
3142
3546
  key: screenId,
3143
3547
  value: story,
3144
3548
  isTheme: isTheme,
3145
3549
  onChange: onStoryChange,
3146
- className: styles$h.inner
3550
+ className: styles$i.inner
3147
3551
  }))), /*#__PURE__*/React__default["default"].createElement(components.Modals, null)))));
3148
3552
  };
3149
3553