@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/es/index.js CHANGED
@@ -2,28 +2,29 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
3
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
4
  import { PropTypes as PropTypes$1 } from '@micromag/core';
5
- import { Button, BackButton, Breadcrumb as Breadcrumb$1, FieldForm, Modal, ModalDialog, Label, Navbar, DropdownMenu, Empty, Tabs, ScreenPreview, ScreenPlaceholder, Modals } from '@micromag/core/components';
6
- import { useRoutes, useScreensManager, useFieldsManager, useScreenDefinition, useFormsComponents, useRoutePush, ScreenProvider, useScreenSize, useUrlGenerator, ModalsProvider, PanelsProvider, ScreenSizeProvider, useFieldComponent, ComponentsProvider, FORMS_NAMESPACE, UppyProvider, StoryProvider, GoogleKeysProvider, GoogleMapsClientProvider, FontsProvider, EditorProvider, ComponentsContext, RoutesProvider } from '@micromag/core/contexts';
7
- import { useParsedStory, useResizeObserver, useScreenSizeFromElement, useMediasParser } from '@micromag/core/hooks';
5
+ import { Button, FieldForm, BackButton, Breadcrumb as Breadcrumb$1, Modal, ModalDialog, Label, Navbar, DropdownMenu, Empty, Tabs, ScreenPlaceholder, ScreenPreview, Modals } from '@micromag/core/components';
6
+ import { useRoutes, useScreenDefinition, useFormsComponents, useScreensManager, useFieldsManager, useUrlGenerator, useRoutePush, ScreenProvider, useScreenSize, ModalsProvider, PanelsProvider, ScreenSizeProvider, useFieldComponent, ComponentsProvider, FORMS_NAMESPACE, UppyProvider, StoryProvider, GoogleKeysProvider, GoogleMapsClientProvider, FontsProvider, EditorProvider, ComponentsContext, RoutesProvider } from '@micromag/core/contexts';
7
+ import { useResizeObserver, useParsedStory, useScreenSizeFromElement, useMediasParser } from '@micromag/core/hooks';
8
8
  import { getScreenExtraField, isMessage, slug, getComponentFromName, getDeviceScreens } from '@micromag/core/utils';
9
9
  import classNames from 'classnames';
10
10
  import PropTypes from 'prop-types';
11
11
  import React, { useMemo, useRef, useCallback, useState, forwardRef, useEffect } from 'react';
12
12
  import { useIntl, FormattedMessage } from 'react-intl';
13
13
  import { useRouteMatch, useHistory, Route, MemoryRouter } from 'react-router';
14
- import { CSSTransitionGroup } from 'react-transition-group';
14
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
15
+ import { TransitionGroup, CSSTransition } from 'react-transition-group';
15
16
  import { v1 } from 'uuid';
16
17
  import isString from 'lodash/isString';
17
18
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
18
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
19
19
  import 'lodash/isArray';
20
20
  import 'lodash/get';
21
21
  import 'lodash/set';
22
22
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
23
- import { faCogs, faGripLines, faTimes, faAngleDown, faPlus } from '@fortawesome/free-solid-svg-icons';
23
+ import { faEllipsisV, faCogs, faPlus, faGripLines, faTimes, faAngleDown } from '@fortawesome/free-solid-svg-icons';
24
24
  import { Fields, FieldsProvider } from '@micromag/fields';
25
25
  import { getSizeWithinBounds } from '@folklore/size';
26
26
  import { Viewer } from '@micromag/viewer';
27
+ import _toArray from '@babel/runtime/helpers/toArray';
27
28
  import isFunction from 'lodash/isFunction';
28
29
  import { ReactSortable } from 'react-sortablejs';
29
30
  import { KeyboardCode, closestCorners, getFirstCollision, getClientRect, MeasuringStrategy, defaultDropAnimation, useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter, DragOverlay } from '@dnd-kit/core';
@@ -71,24 +72,110 @@ var useRouteParams = function useRouteParams() {
71
72
  return routeParams;
72
73
  };
73
74
 
74
- 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"};
75
+ 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"};
75
76
 
76
- var createScreen = function createScreen(definition) {
77
- var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
77
+ var useFormTransition = function useFormTransition(url, screenIndex, styles) {
78
+ var lastPageRef = useRef({
79
+ url: url,
80
+ screenIndex: screenIndex
81
+ });
82
+ var direction = useMemo(function () {
83
+ var _lastPageRef$current = lastPageRef.current,
84
+ lastScreenIndex = _lastPageRef$current.screenIndex,
85
+ lastUrl = _lastPageRef$current.url;
86
+ lastPageRef.current.url = url;
87
+ lastPageRef.current.screenIndex = screenIndex;
78
88
 
79
- var _ref = isString(definition) ? {
80
- id: definition
81
- } : definition,
82
- id = _ref.id,
89
+ if (screenIndex !== lastScreenIndex) {
90
+ // return screenIndex > lastScreenIndex ? 'bottom' : 'top';
91
+ return null;
92
+ }
93
+
94
+ var urlSplit = url.split('/');
95
+ var lastUrlSplit = lastUrl.split('/');
96
+ var currentPartsCount = urlSplit.length;
97
+ var previousPartsCount = lastUrlSplit.length;
98
+ var isSettings = urlSplit[currentPartsCount - 1] === 'settings';
99
+ var wasSettings = lastUrlSplit[previousPartsCount - 1] === 'settings';
100
+ currentPartsCount -= isSettings ? 1 : 0;
101
+ previousPartsCount -= wasSettings ? 1 : 0;
102
+ return currentPartsCount >= previousPartsCount ? 'right' : 'left';
103
+ }, [url, screenIndex]);
104
+ var transitionClassNames = useMemo(function () {
105
+ var _classNames, _classNames2, _classNames3;
106
+
107
+ return {
108
+ enter: classNames((_classNames = {}, _defineProperty(_classNames, styles.enterRight, direction === 'right'), _defineProperty(_classNames, styles.enterLeft, direction === 'left'), _defineProperty(_classNames, styles.enterTop, direction === 'top'), _defineProperty(_classNames, styles.enterBottom, direction === 'bottom'), _classNames)) || 'none',
109
+ enterActive: classNames((_classNames2 = {}, _defineProperty(_classNames2, styles.enterActiveHorizontal, direction === 'left' || direction === 'right'), _defineProperty(_classNames2, styles.enterActiveVertical, direction === 'top' || direction === 'bottom'), _classNames2)) || 'none',
110
+ exit: styles.exit || 'none',
111
+ exitActive: classNames((_classNames3 = {}, _defineProperty(_classNames3, styles.exitActiveRight, direction === 'right'), _defineProperty(_classNames3, styles.exitActiveLeft, direction === 'left'), _defineProperty(_classNames3, styles.exitActiveTop, direction === 'top'), _defineProperty(_classNames3, styles.exitActiveBottom, direction === 'bottom'), _classNames3)) || 'none'
112
+ };
113
+ }, [direction, screenIndex]);
114
+ return {
115
+ direction: direction,
116
+ classNames: transitionClassNames,
117
+ timeout: direction === 'left' || direction === 'right' ? 300 : 10
118
+ };
119
+ };
120
+
121
+ 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"};
122
+
123
+ function getScreenFieldsWithStates(definition) {
124
+ var _ref = definition || {},
83
125
  _ref$fields = _ref.fields,
84
- fields = _ref$fields === void 0 ? [] : _ref$fields;
126
+ screenFields = _ref$fields === void 0 ? [] : _ref$fields,
127
+ _ref$states = _ref.states,
128
+ states = _ref$states === void 0 ? null : _ref$states;
129
+
130
+ if (states === null) {
131
+ return screenFields;
132
+ }
85
133
 
86
- var defaultValueFields = fields.reduce(function (all, curr) {
87
- var _ref2 = curr || {},
88
- _ref2$name = _ref2.name,
89
- name = _ref2$name === void 0 ? null : _ref2$name,
90
- _ref2$defaultValue = _ref2.defaultValue,
91
- defaultValue = _ref2$defaultValue === void 0 ? null : _ref2$defaultValue;
134
+ return [].concat(_toConsumableArray(states.reduce(function (statesFields, _ref2) {
135
+ var id = _ref2.id,
136
+ _ref2$fields = _ref2.fields,
137
+ fields = _ref2$fields === void 0 ? [] : _ref2$fields,
138
+ _ref2$repeatable = _ref2.repeatable,
139
+ repeatable = _ref2$repeatable === void 0 ? false : _ref2$repeatable,
140
+ _ref2$fieldName = _ref2.fieldName,
141
+ fieldName = _ref2$fieldName === void 0 ? null : _ref2$fieldName,
142
+ label = _ref2.label;
143
+ return [].concat(_toConsumableArray(statesFields), _toConsumableArray(repeatable ? [{
144
+ type: 'items',
145
+ name: fieldName || id,
146
+ label: label,
147
+ stateId: id,
148
+ itemsField: {
149
+ label: label,
150
+ type: 'fields',
151
+ fields: fields
152
+ }
153
+ }] : []), _toConsumableArray(!repeatable && fieldName !== null ? [{
154
+ type: 'fields',
155
+ name: fieldName,
156
+ stateId: id,
157
+ fields: fields
158
+ }] : []), _toConsumableArray(!repeatable && fieldName === null ? fields.map(function (it) {
159
+ return _objectSpread(_objectSpread({}, it), {}, {
160
+ stateId: id
161
+ });
162
+ }) : []));
163
+ }, [])), _toConsumableArray(screenFields));
164
+ }
165
+
166
+ var createScreen = function createScreen(definition) {
167
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
168
+ var finalDefinition = isString(definition) ? {
169
+ id: definition
170
+ } : definition;
171
+ var id = finalDefinition.id;
172
+ var screenFields = getScreenFieldsWithStates(finalDefinition);
173
+ var defaultValueFields = screenFields.reduce(function (all, curr) {
174
+ var _ref = curr || {},
175
+ _ref$name = _ref.name,
176
+ name = _ref$name === void 0 ? null : _ref$name,
177
+ _ref$defaultValue = _ref.defaultValue,
178
+ defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue;
92
179
 
93
180
  var newAll = _objectSpread({}, all);
94
181
 
@@ -105,13 +192,13 @@ var createScreen = function createScreen(definition) {
105
192
  });
106
193
  };
107
194
 
108
- var _excluded$b = ["components"];
195
+ var _excluded$c = ["components"];
109
196
 
110
197
  var deleteScreen = function deleteScreen(story, screenId) {
111
198
  var _ref = story || {},
112
199
  _ref$components = _ref.components,
113
200
  components = _ref$components === void 0 ? [] : _ref$components,
114
- currentValue = _objectWithoutProperties(_ref, _excluded$b);
201
+ currentValue = _objectWithoutProperties(_ref, _excluded$c);
115
202
 
116
203
  return _objectSpread(_objectSpread({}, currentValue), {}, {
117
204
  components: components.filter(function (_ref2) {
@@ -121,13 +208,13 @@ var deleteScreen = function deleteScreen(story, screenId) {
121
208
  });
122
209
  };
123
210
 
124
- var _excluded$a = ["components"];
211
+ var _excluded$b = ["components"];
125
212
 
126
213
  var duplicateScreen = function duplicateScreen(story, screenId) {
127
214
  var _ref = story || {},
128
215
  _ref$components = _ref.components,
129
216
  components = _ref$components === void 0 ? [] : _ref$components,
130
- currentValue = _objectWithoutProperties(_ref, _excluded$a);
217
+ currentValue = _objectWithoutProperties(_ref, _excluded$b);
131
218
 
132
219
  var screen = components.find(function (it) {
133
220
  return it.id === screenId;
@@ -139,7 +226,7 @@ var duplicateScreen = function duplicateScreen(story, screenId) {
139
226
  });
140
227
  };
141
228
 
142
- var _excluded$9 = ["components"];
229
+ var _excluded$a = ["components"];
143
230
 
144
231
  var updateScreen = function updateScreen(story, newScreenValue) {
145
232
  var newScreenId = newScreenValue.id;
@@ -147,7 +234,7 @@ var updateScreen = function updateScreen(story, newScreenValue) {
147
234
  var _ref = story || {},
148
235
  _ref$components = _ref.components,
149
236
  components = _ref$components === void 0 ? [] : _ref$components,
150
- currentValue = _objectWithoutProperties(_ref, _excluded$9);
237
+ currentValue = _objectWithoutProperties(_ref, _excluded$a);
151
238
 
152
239
  var index = components.findIndex(function (it) {
153
240
  return it.id === newScreenId;
@@ -176,78 +263,179 @@ var getFieldByName = function getFieldByName(fields, name) {
176
263
  }, null);
177
264
  };
178
265
 
179
- var useFormTransition = function useFormTransition(url, screenIndex, styles) {
180
- var lastPageRef = useRef({
181
- url: url,
182
- screenIndex: screenIndex
183
- });
184
- var direction = useMemo(function () {
185
- var _lastPageRef$current = lastPageRef.current,
186
- lastScreenIndex = _lastPageRef$current.screenIndex,
187
- lastUrl = _lastPageRef$current.url;
188
- lastPageRef.current.url = url;
189
- lastPageRef.current.screenIndex = screenIndex;
190
-
191
- if (screenIndex !== lastScreenIndex) {
192
- // return screenIndex > lastScreenIndex ? 'bottom' : 'top';
193
- return null;
194
- }
195
-
196
- var urlSplit = url.split('/');
197
- var lastUrlSplit = lastUrl.split('/');
198
- var currentPartsCount = urlSplit.length;
199
- var previousPartsCount = lastUrlSplit.length;
200
- var isSettings = urlSplit[currentPartsCount - 1] === 'settings';
201
- var wasSettings = lastUrlSplit[previousPartsCount - 1] === 'settings';
202
- currentPartsCount -= isSettings ? 1 : 0;
203
- previousPartsCount -= wasSettings ? 1 : 0;
204
- return currentPartsCount >= previousPartsCount ? 'right' : 'left';
205
- }, [url, screenIndex]);
206
- var name = useMemo(function () {
207
- var _classNames, _classNames2, _classNames3;
208
-
209
- return {
210
- enter: classNames((_classNames = {}, _defineProperty(_classNames, styles.enterRight, direction === 'right'), _defineProperty(_classNames, styles.enterLeft, direction === 'left'), _defineProperty(_classNames, styles.enterTop, direction === 'top'), _defineProperty(_classNames, styles.enterBottom, direction === 'bottom'), _classNames)) || 'none',
211
- enterActive: classNames((_classNames2 = {}, _defineProperty(_classNames2, styles.enterActiveHorizontal, direction === 'left' || direction === 'right'), _defineProperty(_classNames2, styles.enterActiveVertical, direction === 'top' || direction === 'bottom'), _classNames2)) || 'none',
212
- leave: styles.leave || 'none',
213
- leaveActive: classNames((_classNames3 = {}, _defineProperty(_classNames3, styles.leaveActiveRight, direction === 'right'), _defineProperty(_classNames3, styles.leaveActiveLeft, direction === 'left'), _defineProperty(_classNames3, styles.leaveActiveTop, direction === 'top'), _defineProperty(_classNames3, styles.leaveActiveBottom, direction === 'bottom'), _classNames3)) || 'none'
214
- };
215
- }, [direction, screenIndex]);
216
- return {
217
- direction: direction,
218
- name: name,
219
- timeout: direction === 'left' || direction === 'right' ? 300 : 10
220
- };
221
- };
222
-
223
- var _excluded$8 = ["className"];
224
- var propTypes$n = {
266
+ var _excluded$9 = ["className", "dots"];
267
+ var propTypes$o = {
268
+ dots: PropTypes.bool,
225
269
  className: PropTypes.string
226
270
  };
227
- var defaultProps$n = {
271
+ var defaultProps$o = {
272
+ dots: false,
228
273
  className: null
229
274
  };
230
275
 
231
276
  var SettingsButton = function SettingsButton(_ref) {
232
277
  var className = _ref.className,
233
- props = _objectWithoutProperties(_ref, _excluded$8);
278
+ dots = _ref.dots,
279
+ props = _objectWithoutProperties(_ref, _excluded$9);
234
280
 
235
281
  return /*#__PURE__*/React.createElement(Button, Object.assign({
236
282
  className: className,
237
283
  theme: "secondary",
238
284
  size: "sm",
239
285
  icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
240
- icon: faCogs
286
+ icon: dots ? faEllipsisV : faCogs
241
287
  })
242
288
  }, props));
243
289
  };
244
290
 
245
- SettingsButton.propTypes = propTypes$n;
246
- SettingsButton.defaultProps = defaultProps$n;
291
+ SettingsButton.propTypes = propTypes$o;
292
+ SettingsButton.defaultProps = defaultProps$o;
293
+
294
+ var _excluded$8 = ["name", "form"];
295
+ var propTypes$n = {
296
+ name: PropTypes.string,
297
+ form: PropTypes.string,
298
+ children: PropTypes.node
299
+ };
300
+ var defaultProps$n = {
301
+ name: null,
302
+ form: null,
303
+ children: null
304
+ };
305
+
306
+ var FieldWithContexts = function FieldWithContexts(_ref) {
307
+ var name = _ref.name,
308
+ form = _ref.form,
309
+ props = _objectWithoutProperties(_ref, _excluded$8);
310
+
311
+ // Get definitions
312
+ var definition = useScreenDefinition();
313
+ var _definition$states = definition.states,
314
+ states = _definition$states === void 0 ? null : _definition$states;
315
+ var screenFields = getScreenFieldsWithStates(definition); // const [stateId = null] = name.split('.');
316
+ // const currentState = states !== null ? states.find(({ id }) => id === stateId) || null : null;
317
+
318
+ var nameParts = name.split('.');
319
+
320
+ var _nameParts = _slicedToArray(nameParts, 1),
321
+ _nameParts$ = _nameParts[0],
322
+ stateId = _nameParts$ === void 0 ? null : _nameParts$;
323
+
324
+ var currentState = states !== null ? states.find(function (_ref2) {
325
+ var id = _ref2.id;
326
+ return id === stateId;
327
+ }) || null : null;
328
+ var finalNameParts = nameParts;
329
+
330
+ var _ref3 = currentState || {},
331
+ _ref3$repeatable = _ref3.repeatable,
332
+ repeatable = _ref3$repeatable === void 0 ? false : _ref3$repeatable,
333
+ _ref3$fieldName = _ref3.fieldName,
334
+ fieldName = _ref3$fieldName === void 0 ? null : _ref3$fieldName,
335
+ _ref3$fields = _ref3.fields,
336
+ stateFields = _ref3$fields === void 0 ? [] : _ref3$fields;
337
+
338
+ if (currentState !== null) {
339
+ finalNameParts = (repeatable || fieldName !== null) && nameParts.length <= (repeatable ? 2 : 1) ? [fieldName || stateId].concat(_toConsumableArray(nameParts.slice(1))) : nameParts.slice(1);
340
+ }
247
341
 
248
- var styles$g = {"container":"micromag-editor-menus-breadcrumb-container"};
342
+ var formComponents = useFormsComponents(); // if (currentState !== null && !repeatable && stateFieldName === null) {
343
+ // return (
344
+ // <div className="p-2">
345
+ // <Fields fields={stateFields} {...props} />
346
+ // </div>
347
+ // );
348
+ // }
349
+ // const finalFields =
350
+ // repeatable || stateFieldName !== null
351
+ // ? [{
352
+ // name: stateFieldName || stateId,
353
+ // itemsField: {
354
+ // type: 'fields',
355
+ // fields: stateFields,
356
+ // className: 'p-2'
357
+ // },
358
+ // }]
359
+ // : fields;
360
+
361
+ return /*#__PURE__*/React.createElement("div", {
362
+ className: classNames({
363
+ 'p-2': form === null
364
+ })
365
+ }, finalNameParts.length > 0 ? /*#__PURE__*/React.createElement(FieldForm, Object.assign({
366
+ fields: screenFields,
367
+ formComponents: formComponents,
368
+ name: finalNameParts.join('.'),
369
+ form: form
370
+ }, props)) : /*#__PURE__*/React.createElement(Fields, Object.assign({
371
+ fields: stateFields
372
+ }, props)));
373
+ };
374
+
375
+ FieldWithContexts.propTypes = propTypes$n;
376
+ FieldWithContexts.defaultProps = defaultProps$n;
377
+
378
+ var styles$g = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
249
379
 
250
380
  var propTypes$m = {
381
+ value: PropTypes$1.component,
382
+ className: PropTypes.string,
383
+ gotoFieldForm: PropTypes.func.isRequired,
384
+ closeFieldForm: PropTypes.func.isRequired,
385
+ onChange: PropTypes.func // onClickDelete: PropTypes.func,
386
+
387
+ };
388
+ var defaultProps$m = {
389
+ value: null,
390
+ className: null,
391
+ onChange: null // onClickDelete: null,
392
+
393
+ };
394
+
395
+ var ScreenForm = function ScreenForm(_ref) {
396
+ var value = _ref.value,
397
+ className = _ref.className,
398
+ gotoFieldForm = _ref.gotoFieldForm,
399
+ closeFieldForm = _ref.closeFieldForm,
400
+ onChange = _ref.onChange;
401
+
402
+ var _useScreenDefinition = useScreenDefinition(),
403
+ _useScreenDefinition$ = _useScreenDefinition.fields,
404
+ fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // const intl = useIntl();
405
+ // const finalOnClickDelete = useCallback(() => {
406
+ // if (
407
+ // onClickDelete !== null &&
408
+ // window.confirm(
409
+ // intl.formatMessage({
410
+ // defaultMessage: 'Are you sure you want to delete this screen?',
411
+ // description: 'Confirm message when deleting a screen',
412
+ // }),
413
+ // )
414
+ // ) {
415
+ // onClickDelete(value);
416
+ // }
417
+ // }, [intl, onClickDelete, value]);
418
+
419
+
420
+ return /*#__PURE__*/React.createElement("div", {
421
+ className: classNames([styles$g.container, _defineProperty({}, className, className)])
422
+ }, /*#__PURE__*/React.createElement("div", {
423
+ className: styles$g.inner
424
+ }, /*#__PURE__*/React.createElement(Fields, {
425
+ fields: fields,
426
+ value: value,
427
+ onChange: onChange,
428
+ gotoFieldForm: gotoFieldForm,
429
+ closeFieldForm: closeFieldForm
430
+ })));
431
+ };
432
+
433
+ ScreenForm.propTypes = propTypes$m;
434
+ ScreenForm.defaultProps = defaultProps$m;
435
+
436
+ var styles$f = {"container":"micromag-editor-menus-breadcrumb-container"};
437
+
438
+ var propTypes$l = {
251
439
  story: PropTypes$1.story,
252
440
  screenId: PropTypes.string,
253
441
  field: PropTypes.string,
@@ -255,7 +443,7 @@ var propTypes$m = {
255
443
  url: PropTypes.string.isRequired,
256
444
  className: PropTypes.string
257
445
  };
258
- var defaultProps$m = {
446
+ var defaultProps$l = {
259
447
  story: null,
260
448
  screenId: null,
261
449
  field: null,
@@ -279,44 +467,87 @@ var Breadcrumb = function Breadcrumb(_ref) {
279
467
  var history = useHistory();
280
468
  var screensManager = useScreensManager();
281
469
  var fieldsManager = useFieldsManager();
282
- var items = useMemo(function () {
470
+ var route = useUrlGenerator();
471
+
472
+ var _useMemo = useMemo(function () {
283
473
  var screenIndex = screens.findIndex(function (it) {
284
474
  return it.id === screenId;
285
475
  });
286
476
 
287
477
  if (!screens[screenIndex]) {
288
- return [];
478
+ return {};
289
479
  }
290
480
 
291
481
  var type = screens[screenIndex].type;
482
+ var definition = screensManager.getDefinition(type);
483
+ var states = definition.states;
484
+ return {
485
+ fields: [].concat(_toConsumableArray(getScreenFieldsWithStates(definition)), [getScreenExtraField(intl)]),
486
+ states: states
487
+ };
488
+ }, [screens, screenId, screensManager, intl]),
489
+ _useMemo$fields = _useMemo.fields,
490
+ screenFields = _useMemo$fields === void 0 ? [] : _useMemo$fields,
491
+ _useMemo$states = _useMemo.states,
492
+ screenStates = _useMemo$states === void 0 ? null : _useMemo$states;
493
+
494
+ var items = useMemo(function () {
292
495
  var fieldItems = [];
496
+ var currentState = null;
293
497
 
294
498
  if (field !== null) {
295
- var _screensManager$getDe = screensManager.getDefinition(type),
296
- _screensManager$getDe2 = _screensManager$getDe.fields,
297
- screenFields = _screensManager$getDe2 === void 0 ? [] : _screensManager$getDe2;
499
+ var fieldPath = field.split('/'); // Get state and remove it from path. Replace it with field name if necessary (repeatable or fieldName present)
500
+
501
+ var _fieldPath = _slicedToArray(fieldPath, 1),
502
+ _fieldPath$ = _fieldPath[0],
503
+ stateId = _fieldPath$ === void 0 ? null : _fieldPath$;
504
+
505
+ currentState = screenStates !== null ? screenStates.find(function (_ref3) {
506
+ var id = _ref3.id;
507
+ return id === stateId;
508
+ }) || null : null;
509
+ var finalFieldPath = fieldPath;
510
+
511
+ if (currentState !== null) {
512
+ var _ref4 = currentState || {},
513
+ _ref4$repeatable = _ref4.repeatable,
514
+ repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable,
515
+ _ref4$fieldName = _ref4.fieldName,
516
+ fieldName = _ref4$fieldName === void 0 ? null : _ref4$fieldName;
517
+
518
+ finalFieldPath = (repeatable || fieldName !== null) && fieldPath.length <= (repeatable ? 2 : 1) ? [fieldName || stateId].concat(_toConsumableArray(fieldPath.slice(1))) : fieldPath.slice(1);
519
+ }
298
520
 
299
- var fields = [].concat(_toConsumableArray(screenFields), [getScreenExtraField(intl)]);
300
- var fieldPath = field.split('/');
301
- var lastKeyIndex = fieldPath.length - 1;
521
+ var lastKeyIndex = finalFieldPath.length - 1;
302
522
  var parentItem = null;
303
- fieldPath.reduce(function (currentFields, key, keyIndex) {
523
+ finalFieldPath.reduce(function (currentFields, key, keyIndex) {
304
524
  var _currentFields$type = currentFields.type,
305
- fieldType = _currentFields$type === void 0 ? null : _currentFields$type;
525
+ fieldType = _currentFields$type === void 0 ? null : _currentFields$type,
526
+ _currentFields$fields = currentFields.fields,
527
+ currentSubFields = _currentFields$fields === void 0 ? null : _currentFields$fields,
528
+ _currentFields$itemsF = currentFields.itemsField,
529
+ currentItemsField = _currentFields$itemsF === void 0 ? null : _currentFields$itemsF;
306
530
  var fieldsDef = fieldType !== null ? fieldsManager.getDefinition(fieldType) : currentFields;
307
531
  var _fieldsDef$fields = fieldsDef.fields,
308
- subFields = _fieldsDef$fields === void 0 ? null : _fieldsDef$fields,
532
+ defSubFields = _fieldsDef$fields === void 0 ? null : _fieldsDef$fields,
309
533
  _fieldsDef$settings = fieldsDef.settings,
310
534
  settings = _fieldsDef$settings === void 0 ? null : _fieldsDef$settings,
311
535
  _fieldsDef$itemsField = fieldsDef.itemsField,
312
- itemsField = _fieldsDef$itemsField === void 0 ? null : _fieldsDef$itemsField;
536
+ defItemsField = _fieldsDef$itemsField === void 0 ? null : _fieldsDef$itemsField;
537
+ var itemsField = currentItemsField || defItemsField;
538
+ var subFields = currentSubFields || defSubFields;
313
539
  var currentSubfields = subFields !== null ? getFieldByName(subFields, key) : null;
314
540
  var currentSettings = settings !== null ? getFieldByName(settings, key) : null;
315
541
  var isCurrentSubfields = currentSubfields !== null;
316
542
  var isCurrentSettings = currentSettings !== null;
317
543
  var isListItems = itemsField !== null && !!key.match(/^[0-9]+$/);
318
544
  var isLastIndex = keyIndex === lastKeyIndex;
319
- var pathPrefix = "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex + 1).join('/'));
545
+ var pathPrefix = route('screen.field', {
546
+ screen: screenId,
547
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray(finalFieldPath.slice(0, keyIndex + 1))).filter(function (it) {
548
+ return it !== null;
549
+ })
550
+ });
320
551
  var pathSuffix = isLastIndex && form !== null ? "/".concat(form) : '';
321
552
  var addNewItem = isLastIndex || isListItems;
322
553
  var itemPath = "".concat(pathPrefix).concat(pathSuffix);
@@ -329,7 +560,13 @@ var Breadcrumb = function Breadcrumb(_ref) {
329
560
 
330
561
  if (parentItem !== null) {
331
562
  fieldItems.push(_objectSpread(_objectSpread({}, parentItem), {}, {
332
- url: "/".concat(screenId, "/").concat(fieldPath.slice(0, keyIndex).join('/'), "/settings")
563
+ url: route('screen.field.form', {
564
+ screen: screenId,
565
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray(finalFieldPath.slice(0, keyIndex))).filter(function (it) {
566
+ return it !== null;
567
+ }),
568
+ form: 'settings'
569
+ })
333
570
  }));
334
571
  }
335
572
  } else if (isListItems) {
@@ -339,9 +576,9 @@ var Breadcrumb = function Breadcrumb(_ref) {
339
576
  var fieldLabel = nextFields ? nextFields.breadcrumbLabel || nextFields.label : null;
340
577
  var itemLabel = isMessage(fieldLabel) ? intl.formatMessage(fieldLabel) : fieldLabel;
341
578
 
342
- var _ref3 = parentItem || {},
343
- _ref3$label = _ref3.label,
344
- parentItemLabel = _ref3$label === void 0 ? null : _ref3$label;
579
+ var _ref5 = parentItem || {},
580
+ _ref5$label = _ref5.label,
581
+ parentItemLabel = _ref5$label === void 0 ? null : _ref5$label;
345
582
 
346
583
  var finalItemLabel = isListItems ? "".concat(itemLabel, " #").concat(parseInt(key, 10) + 1) : itemLabel || parentItemLabel;
347
584
  var item = {
@@ -357,21 +594,26 @@ var Breadcrumb = function Breadcrumb(_ref) {
357
594
  parentItem = item;
358
595
  return nextFields;
359
596
  }, {
360
- fields: fields
597
+ fields: screenFields
361
598
  });
362
599
  }
363
600
 
364
- var finalItems = [{
365
- label: intl.formatMessage({
601
+ var finalItems = [currentState === null || (currentState.repeatable || false) === false ? {
602
+ label: currentState !== null ? currentState.label : intl.formatMessage({
366
603
  id: "AHvHaY",
367
604
  defaultMessage: [{
368
605
  "type": 0,
369
606
  "value": "Parameters"
370
607
  }]
371
608
  }),
372
- url: "/".concat(screenId),
609
+ url: currentState !== null ? route('screen.field', {
610
+ screen: screenId,
611
+ field: currentState.id
612
+ }) : route('screen', {
613
+ screen: screenId
614
+ }),
373
615
  active: false
374
- }].concat(fieldItems).filter(function (it) {
616
+ } : null].concat(fieldItems).filter(function (it) {
375
617
  return it !== null;
376
618
  });
377
619
  var lastItemsIndex = finalItems.length - 1;
@@ -381,7 +623,7 @@ var Breadcrumb = function Breadcrumb(_ref) {
381
623
  active: true
382
624
  }) : it;
383
625
  });
384
- }, [intl, screens, screenId, field, form, url, screensManager, fieldsManager]);
626
+ }, [intl, route, screenId, field, form, url, screenFields, screenStates, fieldsManager]);
385
627
  var itemsLength = items.length;
386
628
  var onClickBack = useCallback(function () {
387
629
  history.push(items[itemsLength - 2].url);
@@ -389,110 +631,27 @@ var Breadcrumb = function Breadcrumb(_ref) {
389
631
  var withBack = itemsLength > 1;
390
632
  return /*#__PURE__*/React.createElement(React.Fragment, null, withBack ? /*#__PURE__*/React.createElement(BackButton, {
391
633
  onClick: onClickBack,
392
- className: "mr-2"
634
+ className: "me-2 py-0"
393
635
  }) : null, /*#__PURE__*/React.createElement(Breadcrumb$1, {
394
636
  items: items,
395
637
  theme: "secondary",
396
638
  withoutBar: true,
397
639
  noWrap: true,
398
- className: classNames([styles$g.container, 'text-truncate', _defineProperty({}, className, className !== null)])
640
+ className: classNames([styles$f.container, 'text-truncate', _defineProperty({}, className, className !== null)])
399
641
  }));
400
642
  };
401
643
 
402
- Breadcrumb.propTypes = propTypes$m;
403
- Breadcrumb.defaultProps = defaultProps$m;
404
-
405
- var styles$f = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
406
-
407
- var propTypes$l = {
408
- value: PropTypes$1.component,
409
- className: PropTypes.string,
410
- gotoFieldForm: PropTypes.func.isRequired,
411
- closeFieldForm: PropTypes.func.isRequired,
412
- onChange: PropTypes.func // onClickDelete: PropTypes.func,
413
-
414
- };
415
- var defaultProps$l = {
416
- value: null,
417
- className: null,
418
- onChange: null // onClickDelete: null,
419
-
420
- };
421
-
422
- var ScreenForm = function ScreenForm(_ref) {
423
- var value = _ref.value,
424
- className = _ref.className,
425
- gotoFieldForm = _ref.gotoFieldForm,
426
- closeFieldForm = _ref.closeFieldForm,
427
- onChange = _ref.onChange;
428
-
429
- var _useScreenDefinition = useScreenDefinition(),
430
- _useScreenDefinition$ = _useScreenDefinition.fields,
431
- fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // const intl = useIntl();
432
- // const finalOnClickDelete = useCallback(() => {
433
- // if (
434
- // onClickDelete !== null &&
435
- // window.confirm(
436
- // intl.formatMessage({
437
- // defaultMessage: 'Are you sure you want to delete this screen?',
438
- // description: 'Confirm message when deleting a screen',
439
- // }),
440
- // )
441
- // ) {
442
- // onClickDelete(value);
443
- // }
444
- // }, [intl, onClickDelete, value]);
445
-
446
-
447
- return /*#__PURE__*/React.createElement("div", {
448
- className: classNames([styles$f.container, _defineProperty({}, className, className)])
449
- }, /*#__PURE__*/React.createElement("div", {
450
- className: styles$f.inner
451
- }, /*#__PURE__*/React.createElement(Fields, {
452
- fields: fields,
453
- value: value,
454
- onChange: onChange,
455
- gotoFieldForm: gotoFieldForm,
456
- closeFieldForm: closeFieldForm
457
- })));
458
- };
459
-
460
- ScreenForm.propTypes = propTypes$l;
461
- ScreenForm.defaultProps = defaultProps$l;
462
-
463
- /* eslint-disable react/jsx-props-no-spreading */
464
- var propTypes$k = {
465
- children: PropTypes.node
466
- };
467
- var defaultProps$k = {
468
- children: null
469
- };
470
-
471
- var FieldWithContexts = function FieldWithContexts(props) {
472
- // Get definitions
473
- var _useScreenDefinition = useScreenDefinition(),
474
- _useScreenDefinition$ = _useScreenDefinition.fields,
475
- fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$; // To use a specific form component
476
-
477
-
478
- var formComponents = useFormsComponents();
479
- return /*#__PURE__*/React.createElement(FieldForm, Object.assign({
480
- fields: fields,
481
- formComponents: formComponents
482
- }, props));
483
- };
484
-
485
- FieldWithContexts.propTypes = propTypes$k;
486
- FieldWithContexts.defaultProps = defaultProps$k;
644
+ Breadcrumb.propTypes = propTypes$l;
645
+ Breadcrumb.defaultProps = defaultProps$l;
487
646
 
488
647
  var styles$e = {"container":"micromag-editor-modals-delete-screen-container","description":"micromag-editor-modals-delete-screen-description","actions":"micromag-editor-modals-delete-screen-actions"};
489
648
 
490
- var propTypes$j = {
649
+ var propTypes$k = {
491
650
  className: PropTypes.string,
492
651
  onConfirm: PropTypes.func,
493
652
  onCancel: PropTypes.func
494
653
  };
495
- var defaultProps$j = {
654
+ var defaultProps$k = {
496
655
  className: null,
497
656
  onConfirm: null,
498
657
  onCancel: null
@@ -524,7 +683,7 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
524
683
  className: styles$e.actions
525
684
  }, /*#__PURE__*/React.createElement(Button, {
526
685
  onClick: onCancel,
527
- className: "btn-outline-secondary mr-2"
686
+ className: "btn-outline-secondary me-2"
528
687
  }, /*#__PURE__*/React.createElement(Label, null, /*#__PURE__*/React.createElement(FormattedMessage, {
529
688
  id: "0GT0SI",
530
689
  defaultMessage: [{
@@ -544,18 +703,16 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
544
703
  }))));
545
704
  };
546
705
 
547
- DeleteScreenModal.propTypes = propTypes$j;
548
- DeleteScreenModal.defaultProps = defaultProps$j;
706
+ DeleteScreenModal.propTypes = propTypes$k;
707
+ DeleteScreenModal.defaultProps = defaultProps$k;
549
708
 
550
- 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"};
551
-
552
- var propTypes$i = {
709
+ var propTypes$j = {
553
710
  value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
554
711
  isTheme: PropTypes.bool,
555
712
  className: PropTypes.string,
556
713
  onChange: PropTypes.func
557
714
  };
558
- var defaultProps$i = {
715
+ var defaultProps$j = {
559
716
  value: null,
560
717
  isTheme: false,
561
718
  className: null,
@@ -588,10 +745,18 @@ var EditForm = function EditForm(_ref) {
588
745
  var screenIndex = screens.findIndex(function (it) {
589
746
  return it.id === screenId;
590
747
  });
591
- var screen = screenIndex !== -1 ? screens[screenIndex] : null; // Get transition value
748
+ var screen = screenIndex !== -1 ? screens[screenIndex] : null;
749
+ var screensManager = useScreensManager();
750
+ var screenFields = useMemo(function () {
751
+ var _ref3 = screen || {},
752
+ type = _ref3.type;
592
753
 
593
- var _useFormTransition = useFormTransition(url, screenIndex, styles$d),
594
- transitionName = _useFormTransition.name,
754
+ var definition = type !== null ? screensManager.getDefinition(type) : null;
755
+ return definition != null ? getScreenFieldsWithStates(definition) : [];
756
+ }, [screensManager, screen]); // Get transition value
757
+
758
+ var _useFormTransition = useFormTransition(url, screenIndex, styles$h),
759
+ transitionClassNames = _useFormTransition.classNames,
595
760
  transitionTimeout = _useFormTransition.timeout;
596
761
 
597
762
  var _useState = useState(false),
@@ -621,14 +786,29 @@ var EditForm = function EditForm(_ref) {
621
786
  var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
622
787
  var hasField = field !== null;
623
788
  var fieldRoute = formName !== null ? 'screen.field.form' : 'screen.field';
789
+
790
+ var _ref4 = field !== null ? field.split('.') : [],
791
+ _ref5 = _slicedToArray(_ref4, 1),
792
+ _ref5$ = _ref5[0],
793
+ rootFieldName = _ref5$ === void 0 ? null : _ref5$;
794
+
795
+ var _ref6 = (rootFieldName !== null ? screenFields.find(function (_ref7) {
796
+ var name = _ref7.name;
797
+ return name === rootFieldName;
798
+ }) || null : null) || {},
799
+ _ref6$stateId = _ref6.stateId,
800
+ stateId = _ref6$stateId === void 0 ? null : _ref6$stateId;
801
+
624
802
  routePush(hasField ? fieldRoute : 'screen', {
625
803
  screen: screenId,
626
- field: field !== null ? field.split('.') : null,
804
+ field: field !== null ? [stateId].concat(_toConsumableArray(field.split('.'))).filter(function (it) {
805
+ return it !== null;
806
+ }) : null,
627
807
  form: formName !== null ? slug(formName) : null
628
808
  });
629
809
  setFieldForms(_objectSpread(_objectSpread({}, fieldForms), {}, _defineProperty({}, "".concat(field).concat(formName !== null ? ":".concat(formName) : ''), url)));
630
810
  setFieldContext(context);
631
- }, [routePush, screenId, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
811
+ }, [routePush, screenId, screenFields, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
632
812
  var closeFieldForm = useCallback(function (field) {
633
813
  var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
634
814
  var fieldKey = "".concat(field).concat(formName !== null ? ":".concat(formName) : '');
@@ -676,7 +856,6 @@ var EditForm = function EditForm(_ref) {
676
856
  var dropdownItems = [!isTheme ? {
677
857
  id: 'duplicate',
678
858
  type: 'button',
679
- className: 'text-left text-info',
680
859
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
681
860
  id: "IBjY5r",
682
861
  defaultMessage: [{
@@ -688,7 +867,6 @@ var EditForm = function EditForm(_ref) {
688
867
  } : null, {
689
868
  id: 'delete',
690
869
  type: 'button',
691
- className: 'text-left text-danger',
692
870
  label: /*#__PURE__*/React.createElement(FormattedMessage, {
693
871
  id: "hpiKce",
694
872
  defaultMessage: [{
@@ -706,54 +884,67 @@ var EditForm = function EditForm(_ref) {
706
884
  compact: true,
707
885
  noWrap: true,
708
886
  withoutCollapse: true,
709
- className: classNames(['sticky-top', 'border-bottom', 'border-dark', styles$d.navbar])
887
+ className: classNames(['sticky-top', 'border-bottom', 'border-dark', styles$h.navbar])
710
888
  }, /*#__PURE__*/React.createElement(Breadcrumb, {
711
889
  story: value,
712
890
  url: url,
713
891
  screenId: screenId,
714
892
  field: fieldParams,
715
893
  form: formParams,
716
- className: "mr-auto"
717
- }), fieldParams === null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SettingsButton, {
718
- onClick: onSettingsClick
894
+ className: "me-auto"
895
+ }), fieldParams === null ? /*#__PURE__*/React.createElement("div", {
896
+ className: "dropdown"
897
+ }, /*#__PURE__*/React.createElement(SettingsButton, {
898
+ onClick: onSettingsClick,
899
+ dots: true,
900
+ className: "py-0",
901
+ theme: "default"
719
902
  }), /*#__PURE__*/React.createElement(DropdownMenu, {
903
+ align: "end",
720
904
  items: dropdownItems,
721
905
  visible: screenSettingsOpened,
722
- align: "right",
723
906
  onClickOutside: onDropdownClickOutside
724
907
  })) : null) : null, /*#__PURE__*/React.createElement("div", {
725
- className: classNames(['flex-grow-1', 'd-flex', 'w-100', styles$d.content])
726
- }, screen !== null ? /*#__PURE__*/React.createElement(CSSTransitionGroup, {
727
- transitionName: transitionName,
728
- transitionEnterTimeout: transitionTimeout,
729
- transitionLeaveTimeout: transitionTimeout,
730
- className: "w-100 flex-grow-1"
731
- }, fieldParams !== null ? /*#__PURE__*/React.createElement("div", {
732
- className: classNames(['w-100', styles$d.panel]),
908
+ className: classNames(['flex-grow-1', 'd-flex', 'w-100', styles$h.content])
909
+ }, screen !== null ? /*#__PURE__*/React.createElement(TransitionGroup, {
910
+ className: "w-100 flex-grow-1",
911
+ childFactory: function childFactory(child) {
912
+ return /*#__PURE__*/React.cloneElement(child, {
913
+ classNames: transitionClassNames
914
+ });
915
+ }
916
+ }, fieldParams !== null ? /*#__PURE__*/React.createElement(CSSTransition, {
917
+ timeout: transitionTimeout,
733
918
  key: "field-".concat(fieldParams, "-").concat(formParams)
919
+ }, /*#__PURE__*/React.createElement("div", {
920
+ className: classNames(['w-100', styles$h.panel])
734
921
  }, /*#__PURE__*/React.createElement(ScreenProvider, {
735
922
  data: screen
736
923
  }, /*#__PURE__*/React.createElement(FieldWithContexts, {
737
924
  name: fieldParams.replace(/\//g, '.'),
738
925
  value: screen,
739
926
  form: formParams,
740
- className: styles$d.form,
927
+ className: styles$h.form,
741
928
  gotoFieldForm: gotoFieldForm,
742
929
  closeFieldForm: closeFieldForm,
743
930
  fieldContext: fieldContext,
744
931
  onChange: onScreenFormChange
745
- }))) : /*#__PURE__*/React.createElement("div", {
746
- className: classNames(['w-100', styles$d.panel]),
932
+ })))) : /*#__PURE__*/React.createElement(CSSTransition, {
933
+ classNames: transitionClassNames,
934
+ timeout: transitionTimeout,
935
+ key: "screen-".concat(screen.id)
936
+ }, /*#__PURE__*/React.createElement("div", {
937
+ className: classNames(['w-100', styles$h.panel]),
747
938
  key: "screen-".concat(screen.id)
748
939
  }, /*#__PURE__*/React.createElement(ScreenProvider, {
749
940
  data: screen
750
941
  }, /*#__PURE__*/React.createElement(ScreenForm, {
751
942
  value: screen,
752
- className: styles$d.form,
943
+ className: styles$h.form,
753
944
  onChange: onScreenFormChange,
754
945
  gotoFieldForm: gotoFieldForm,
755
946
  closeFieldForm: closeFieldForm
756
- })))) : /*#__PURE__*/React.createElement(Empty, {
947
+ }))))) : /*#__PURE__*/React.createElement(Empty, {
757
948
  className: "w-100 m-2"
758
949
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
759
950
  id: "QfpTKK",
@@ -768,8 +959,25 @@ var EditForm = function EditForm(_ref) {
768
959
  }) : null);
769
960
  };
770
961
 
771
- EditForm.propTypes = propTypes$i;
772
- EditForm.defaultProps = defaultProps$i;
962
+ EditForm.propTypes = propTypes$j;
963
+ EditForm.defaultProps = defaultProps$j;
964
+
965
+ function useScreenStates(screen) {
966
+ var _ref = screen || {},
967
+ type = _ref.type;
968
+
969
+ var screensManager = useScreensManager();
970
+ var states = useMemo(function () {
971
+ var definition = screensManager.getDefinition(type) || null;
972
+
973
+ var _ref2 = definition || {},
974
+ _ref2$states = _ref2.states,
975
+ screenStates = _ref2$states === void 0 ? null : _ref2$states;
976
+
977
+ return screenStates;
978
+ }, [screensManager, type]);
979
+ return states;
980
+ }
773
981
 
774
982
  var _excluded$7 = ["components"];
775
983
 
@@ -791,14 +999,16 @@ var useThemeValue = function useThemeValue(value) {
791
999
  return valueWithTheme;
792
1000
  };
793
1001
 
1002
+ 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"};
1003
+
794
1004
  var styles$c = {"container":"micromag-editor-menus-devices-container","button":"micromag-editor-menus-devices-button"};
795
1005
 
796
1006
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
797
- var propTypes$h = {
1007
+ var propTypes$i = {
798
1008
  color: PropTypes.string,
799
1009
  className: PropTypes.string
800
1010
  };
801
- var defaultProps$h = {
1011
+ var defaultProps$i = {
802
1012
  color: 'currentColor',
803
1013
  className: null
804
1014
  };
@@ -823,15 +1033,15 @@ var DesktopIcon = function DesktopIcon(_ref) {
823
1033
  }));
824
1034
  };
825
1035
 
826
- DesktopIcon.propTypes = propTypes$h;
827
- DesktopIcon.defaultProps = defaultProps$h;
1036
+ DesktopIcon.propTypes = propTypes$i;
1037
+ DesktopIcon.defaultProps = defaultProps$i;
828
1038
 
829
1039
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
830
- var propTypes$g = {
1040
+ var propTypes$h = {
831
1041
  color: PropTypes.string,
832
1042
  className: PropTypes.string
833
1043
  };
834
- var defaultProps$g = {
1044
+ var defaultProps$h = {
835
1045
  color: 'currentColor',
836
1046
  className: null
837
1047
  };
@@ -856,8 +1066,8 @@ var MobileIcon = function MobileIcon(_ref) {
856
1066
  }));
857
1067
  };
858
1068
 
859
- MobileIcon.propTypes = propTypes$g;
860
- MobileIcon.defaultProps = defaultProps$g;
1069
+ MobileIcon.propTypes = propTypes$h;
1070
+ MobileIcon.defaultProps = defaultProps$h;
861
1071
 
862
1072
  var DeviceIcons = /*#__PURE__*/Object.freeze({
863
1073
  __proto__: null,
@@ -868,12 +1078,12 @@ var DeviceIcons = /*#__PURE__*/Object.freeze({
868
1078
  var styles$b = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
869
1079
 
870
1080
  var _excluded$6 = ["device", "className", "iconComponents"];
871
- var propTypes$f = {
1081
+ var propTypes$g = {
872
1082
  device: PropTypes.string.isRequired,
873
1083
  iconComponents: PropTypes$1.components,
874
1084
  className: PropTypes.string
875
1085
  };
876
- var defaultProps$f = {
1086
+ var defaultProps$g = {
877
1087
  iconComponents: DeviceIcons,
878
1088
  className: null
879
1089
  };
@@ -892,51 +1102,391 @@ var DeviceButton = function DeviceButton(_ref) {
892
1102
  }));
893
1103
  };
894
1104
 
895
- DeviceButton.propTypes = propTypes$f;
896
- DeviceButton.defaultProps = defaultProps$f;
1105
+ DeviceButton.propTypes = propTypes$g;
1106
+ DeviceButton.defaultProps = defaultProps$g;
897
1107
 
898
1108
  var _excluded$5 = ["id"];
899
- var propTypes$e = {
1109
+ var propTypes$f = {
900
1110
  items: PropTypes$1.menuItems,
901
1111
  className: PropTypes.string,
902
1112
  onClickItem: PropTypes.func
903
1113
  };
904
- var defaultProps$e = {
1114
+ var defaultProps$f = {
905
1115
  items: [],
906
1116
  className: null,
907
1117
  onClickItem: null
908
1118
  };
909
1119
 
910
- var DevicesMenu = function DevicesMenu(_ref) {
911
- var items = _ref.items,
912
- className = _ref.className,
913
- onClickItem = _ref.onClickItem;
914
- return /*#__PURE__*/React.createElement(Tabs, {
915
- items: items,
916
- theme: "outline-secondary",
917
- className: classNames([styles$c.container, _defineProperty({}, className, className !== null)]),
918
- renderItemButton: function renderItemButton(item, index, props) {
919
- var id = item.id,
920
- itemProps = _objectWithoutProperties(item, _excluded$5);
1120
+ var DevicesMenu = function DevicesMenu(_ref) {
1121
+ var items = _ref.items,
1122
+ className = _ref.className,
1123
+ onClickItem = _ref.onClickItem;
1124
+ return /*#__PURE__*/React.createElement(Tabs, {
1125
+ items: items,
1126
+ theme: "outline-secondary",
1127
+ className: classNames([styles$c.container, _defineProperty({}, className, className !== null)]),
1128
+ renderItemButton: function renderItemButton(item, index, props) {
1129
+ var id = item.id,
1130
+ itemProps = _objectWithoutProperties(item, _excluded$5);
1131
+
1132
+ return /*#__PURE__*/React.createElement(DeviceButton, Object.assign({
1133
+ device: id
1134
+ }, props, itemProps, {
1135
+ className: styles$c.button,
1136
+ onClick: function onClick(e) {
1137
+ return onClickItem !== null ? onClickItem(e, item, index) : null;
1138
+ }
1139
+ }));
1140
+ }
1141
+ });
1142
+ };
1143
+
1144
+ DevicesMenu.propTypes = propTypes$f;
1145
+ DevicesMenu.defaultProps = defaultProps$f;
1146
+
1147
+ var styles$a = {"button":"micromag-editor-partials-screen-states-button","addButton":"micromag-editor-partials-screen-states-addButton","title":"micromag-editor-partials-screen-states-title"};
1148
+
1149
+ 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"};
1150
+
1151
+ 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"};
1152
+
1153
+ var propTypes$e = {
1154
+ active: PropTypes.bool,
1155
+ id: PropTypes.string,
1156
+ href: PropTypes.string,
1157
+ label: PropTypes$1.label,
1158
+ icon: PropTypes.node,
1159
+ title: PropTypes.string,
1160
+ onClick: PropTypes.func,
1161
+ children: PropTypes.node,
1162
+ refButton: PropTypes.shape({
1163
+ current: PropTypes.any // eslint-disable-line
1164
+
1165
+ }),
1166
+ className: PropTypes.string
1167
+ };
1168
+ var defaultProps$e = {
1169
+ active: false,
1170
+ id: null,
1171
+ href: null,
1172
+ label: null,
1173
+ icon: null,
1174
+ title: null,
1175
+ onClick: null,
1176
+ children: null,
1177
+ refButton: null,
1178
+ className: null
1179
+ };
1180
+
1181
+ var ScreenButton = function ScreenButton(_ref) {
1182
+ var _ref2;
1183
+
1184
+ var active = _ref.active,
1185
+ id = _ref.id,
1186
+ href = _ref.href,
1187
+ className = _ref.className,
1188
+ label = _ref.label,
1189
+ icon = _ref.icon,
1190
+ children = _ref.children,
1191
+ title = _ref.title,
1192
+ onClick = _ref.onClick,
1193
+ refButton = _ref.refButton;
1194
+ return /*#__PURE__*/React.createElement("div", {
1195
+ className: classNames([styles$8.container, 'rounded', (_ref2 = {}, _defineProperty(_ref2, styles$8.active, active), _defineProperty(_ref2, className, className !== null), _ref2)])
1196
+ }, children !== null ? children : /*#__PURE__*/React.createElement("div", {
1197
+ className: styles$8.screen
1198
+ }, /*#__PURE__*/React.createElement("div", {
1199
+ className: styles$8.inner
1200
+ }, icon !== null ? /*#__PURE__*/React.createElement("div", {
1201
+ className: styles$8.icon
1202
+ }, icon) : null, label !== null ? /*#__PURE__*/React.createElement("div", {
1203
+ className: styles$8.label
1204
+ }, label) : null)), /*#__PURE__*/React.createElement(Button, {
1205
+ className: styles$8.button,
1206
+ withoutStyle: true,
1207
+ id: id,
1208
+ href: href,
1209
+ title: title,
1210
+ onClick: onClick,
1211
+ refButton: refButton
1212
+ }, /*#__PURE__*/React.createElement("span", {
1213
+ className: classNames([styles$8.border, 'rounded'])
1214
+ })));
1215
+ };
1216
+
1217
+ ScreenButton.propTypes = propTypes$e;
1218
+ ScreenButton.defaultProps = defaultProps$e;
1219
+ var ScreenButton$1 = /*#__PURE__*/React.forwardRef(function (props, ref) {
1220
+ return /*#__PURE__*/React.createElement(ScreenButton, Object.assign({}, props, {
1221
+ refButton: ref
1222
+ }));
1223
+ });
1224
+
1225
+ var propTypes$d = {
1226
+ screen: PropTypes$1.screenComponent,
1227
+ screenState: PropTypes.string,
1228
+ index: PropTypes.number.isRequired,
1229
+ href: PropTypes.string,
1230
+ title: PropTypes.string,
1231
+ active: PropTypes.bool,
1232
+ previewWidth: PropTypes.number,
1233
+ previewHeight: PropTypes.number,
1234
+ withPreview: PropTypes.bool,
1235
+ withPlaceholder: PropTypes.bool,
1236
+ onClick: PropTypes.func,
1237
+ onClickItem: PropTypes.func,
1238
+ className: PropTypes.string
1239
+ };
1240
+ var defaultProps$d = {
1241
+ screen: null,
1242
+ screenState: null,
1243
+ title: null,
1244
+ href: null,
1245
+ active: false,
1246
+ previewWidth: 320,
1247
+ previewHeight: 480,
1248
+ withPreview: true,
1249
+ withPlaceholder: false,
1250
+ onClick: null,
1251
+ onClickItem: null,
1252
+ className: null
1253
+ };
1254
+
1255
+ var ScreenWithPreview = function ScreenWithPreview(_ref) {
1256
+ var _classNames;
1257
+
1258
+ var screen = _ref.screen,
1259
+ screenState = _ref.screenState,
1260
+ index = _ref.index,
1261
+ title = _ref.title,
1262
+ href = _ref.href,
1263
+ active = _ref.active,
1264
+ className = _ref.className,
1265
+ previewWidth = _ref.previewWidth,
1266
+ previewHeight = _ref.previewHeight,
1267
+ _onClick = _ref.onClick,
1268
+ onClickItem = _ref.onClickItem,
1269
+ withPreview = _ref.withPreview,
1270
+ withPlaceholder = _ref.withPlaceholder;
1271
+ var intl = useIntl();
1272
+
1273
+ var _useResizeObserver = useResizeObserver(),
1274
+ refResize = _useResizeObserver.ref,
1275
+ contentRect = _useResizeObserver.entry.contentRect;
1276
+
1277
+ var _useMemo = useMemo(function () {
1278
+ var _ref2 = contentRect || {},
1279
+ _ref2$width = _ref2.width,
1280
+ itemWidth = _ref2$width === void 0 ? 0 : _ref2$width;
1281
+
1282
+ var ratio = 3 / 4;
1283
+ var finalWidth = previewWidth;
1284
+ var finalHeight = previewHeight !== null ? previewHeight : previewWidth * ratio;
1285
+ var previewScale = itemWidth / previewWidth;
1286
+ return {
1287
+ width: itemWidth,
1288
+ height: finalHeight * previewScale,
1289
+ screenWidth: finalWidth,
1290
+ screenHeight: finalHeight,
1291
+ scale: previewScale
1292
+ };
1293
+ }, [withPlaceholder, previewWidth, previewHeight, contentRect]),
1294
+ width = _useMemo.width,
1295
+ height = _useMemo.height,
1296
+ screenWidth = _useMemo.screenWidth,
1297
+ screenHeight = _useMemo.screenHeight,
1298
+ scale = _useMemo.scale;
1299
+
1300
+ var ScreenComponent = withPlaceholder ? ScreenPlaceholder : ScreenPreview;
1301
+ return /*#__PURE__*/React.createElement(ScreenButton$1, {
1302
+ href: href,
1303
+ ref: refResize,
1304
+ active: active,
1305
+ className: classNames([styles$9.button, _defineProperty({}, className, className !== null)]),
1306
+ title: isMessage(title) ? intl.formatMessage(title) : null,
1307
+ onClick: function onClick() {
1308
+ if (_onClick !== null) {
1309
+ _onClick(screen, index);
1310
+ }
1311
+
1312
+ if (onClickItem !== null) {
1313
+ onClickItem(screen, index);
1314
+ }
1315
+ }
1316
+ }, /*#__PURE__*/React.createElement("div", {
1317
+ className: styles$9.frame,
1318
+ style: {
1319
+ width: width,
1320
+ height: height
1321
+ }
1322
+ }, /*#__PURE__*/React.createElement("div", {
1323
+ className: classNames((_classNames = {}, _defineProperty(_classNames, styles$9.preview, withPreview && !withPlaceholder), _defineProperty(_classNames, styles$9.placeholder, withPlaceholder && !withPreview), _classNames)),
1324
+ style: {
1325
+ width: withPlaceholder ? width : screenWidth,
1326
+ height: withPlaceholder ? height : screenHeight,
1327
+ transform: withPlaceholder ? null : "scale(".concat(scale, ")")
1328
+ }
1329
+ }, /*#__PURE__*/React.createElement(ScreenComponent, {
1330
+ screen: screen,
1331
+ screenState: screenState,
1332
+ width: withPlaceholder ? width : screenWidth,
1333
+ height: withPlaceholder ? height : screenHeight,
1334
+ className: styles$9.screen
1335
+ }))));
1336
+ };
1337
+
1338
+ ScreenWithPreview.propTypes = propTypes$d;
1339
+ ScreenWithPreview.defaultProps = defaultProps$d;
1340
+
1341
+ var propTypes$c = {
1342
+ screen: PropTypes$1.screen.isRequired,
1343
+ screenState: PropTypes.string,
1344
+ value: PropTypes$1.story.isRequired,
1345
+ className: PropTypes.string,
1346
+ onChange: PropTypes.func
1347
+ };
1348
+ var defaultProps$c = {
1349
+ screenState: null,
1350
+ className: null,
1351
+ onChange: null
1352
+ };
1353
+
1354
+ function ScreenStates(_ref) {
1355
+ var screen = _ref.screen,
1356
+ value = _ref.value,
1357
+ className = _ref.className,
1358
+ onChange = _ref.onChange;
1359
+ var url = useUrlGenerator();
1360
+ var push = useRoutePush();
1361
+
1362
+ var _useRouteParams = useRouteParams(),
1363
+ _useRouteParams$scree = _useRouteParams.screen,
1364
+ screenParam = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1365
+ _useRouteParams$field = _useRouteParams.field,
1366
+ field = _useRouteParams$field === void 0 ? null : _useRouteParams$field;
1367
+
1368
+ var states = useScreenStates(screen);
1369
+
1370
+ var _ref2 = field !== null ? field.split('/') : [],
1371
+ _ref3 = _toArray(_ref2),
1372
+ _ref3$ = _ref3[0],
1373
+ stateParam = _ref3$ === void 0 ? null : _ref3$,
1374
+ stateIndexes = _ref3.slice(1);
1375
+
1376
+ var stateIndex = stateIndexes.find(function (it) {
1377
+ return it.match(/^[0-9]+$/) !== null;
1378
+ }) || null;
1379
+ var currentState = stateParam !== null && states.findIndex(function (_ref4) {
1380
+ var id = _ref4.id;
1381
+ return id === stateParam;
1382
+ }) !== -1 ? stateParam : null;
1383
+ return /*#__PURE__*/React.createElement("div", {
1384
+ className: classNames([styles$a.container, _defineProperty({}, className, className !== null)])
1385
+ }, /*#__PURE__*/React.createElement("div", {
1386
+ className: "d-flex align-items-end flex-wrap m-n1"
1387
+ }, /*#__PURE__*/React.createElement("div", {
1388
+ className: "p-1 align-self-stretch d-flex flex-column"
1389
+ }, /*#__PURE__*/React.createElement("h6", {
1390
+ className: classNames(['fw-normal', 'invisible', styles$a.title])
1391
+ }, "Settings"), /*#__PURE__*/React.createElement(Button, {
1392
+ className: classNames([styles$a.button, 'p-0', 'flex-grow-1', 'justify-content-center']),
1393
+ theme: screenParam !== null && field === null ? 'primary' : 'secondary',
1394
+ outline: screenParam === null || field !== null,
1395
+ size: "lg",
1396
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1397
+ icon: faCogs
1398
+ }),
1399
+ href: url('screen', {
1400
+ screen: screen.id
1401
+ })
1402
+ })), states.map(function (state) {
1403
+ var id = state.id,
1404
+ _state$label = state.label,
1405
+ label = _state$label === void 0 ? null : _state$label,
1406
+ _state$repeatable = state.repeatable,
1407
+ repeatable = _state$repeatable === void 0 ? false : _state$repeatable,
1408
+ _state$fieldName = state.fieldName,
1409
+ fieldName = _state$fieldName === void 0 ? null : _state$fieldName;
1410
+ var repeatableItems = repeatable ? screen[fieldName || id] || [] : null;
1411
+
1412
+ var onClickAdd = function onClickAdd() {
1413
+ var _ref6 = value || {},
1414
+ _ref6$components = _ref6.components,
1415
+ currentComponentsValue = _ref6$components === void 0 ? [] : _ref6$components;
1416
+
1417
+ var currentScreenIndex = currentComponentsValue.findIndex(function (_ref7) {
1418
+ var screenId = _ref7.id;
1419
+ return screen.id === screenId;
1420
+ });
1421
+ var currentScreenValue = currentComponentsValue[currentScreenIndex] || {};
1422
+ var currentFieldValue = currentScreenValue[fieldName || id] || [];
1423
+
1424
+ var newValue = _objectSpread(_objectSpread({}, value), {}, {
1425
+ components: [].concat(_toConsumableArray(currentComponentsValue.slice(0, currentScreenIndex)), [_objectSpread(_objectSpread({}, currentScreenValue), {}, _defineProperty({}, fieldName || id, [].concat(_toConsumableArray(currentFieldValue), [{}])))], _toConsumableArray(currentComponentsValue.slice(currentScreenIndex + 1)))
1426
+ });
1427
+
1428
+ if (onChange !== null) {
1429
+ onChange(newValue);
1430
+ }
1431
+
1432
+ push('screen.field', {
1433
+ screen: screen.id,
1434
+ field: [id, currentFieldValue.length]
1435
+ });
1436
+ };
921
1437
 
922
- return /*#__PURE__*/React.createElement(DeviceButton, Object.assign({
923
- device: id
924
- }, props, itemProps, {
925
- className: styles$c.button,
926
- onClick: function onClick(e) {
927
- return onClickItem !== null ? onClickItem(e, item, index) : null;
928
- }
1438
+ return /*#__PURE__*/React.createElement("div", {
1439
+ className: "p-1 align-self-stretch d-flex flex-column"
1440
+ }, /*#__PURE__*/React.createElement("h6", {
1441
+ className: classNames(['fw-normal', 'text-muted', styles$a.title])
1442
+ }, /*#__PURE__*/React.createElement(FormattedMessage, label)), repeatable ? /*#__PURE__*/React.createElement("ul", {
1443
+ className: "d-flex list-unstyled flex-wrap m-n1 flex-grow-1"
1444
+ }, repeatableItems.map(function (item, index) {
1445
+ return /*#__PURE__*/React.createElement("li", {
1446
+ className: "p-1"
1447
+ }, /*#__PURE__*/React.createElement(ScreenWithPreview, {
1448
+ screen: screen,
1449
+ screenState: "".concat(id, ".").concat(index),
1450
+ className: styles$a.button,
1451
+ active: currentState !== null && id === currentState.split('.')[0] && stateIndex !== null && parseInt(stateIndex, 10) === index,
1452
+ href: url('screen.field', {
1453
+ screen: screen.id,
1454
+ field: [id, index]
1455
+ })
929
1456
  }));
930
- }
931
- });
932
- };
1457
+ }), /*#__PURE__*/React.createElement("li", {
1458
+ className: "p-1"
1459
+ }, /*#__PURE__*/React.createElement(Button, {
1460
+ className: classNames([styles$a.button, styles$a.addButton, 'h-100', 'p-0', 'justify-content-center']),
1461
+ theme: "secondary",
1462
+ outline: true,
1463
+ size: "lg",
1464
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1465
+ icon: faPlus
1466
+ }),
1467
+ onClick: onClickAdd
1468
+ }))) : /*#__PURE__*/React.createElement(ScreenWithPreview, {
1469
+ screen: screen,
1470
+ screenState: id,
1471
+ className: styles$a.button,
1472
+ active: id === currentState,
1473
+ href: url('screen.field', {
1474
+ screen: screen.id,
1475
+ field: id
1476
+ }) // onClick={() => {
1477
+ // if (onStateChange !== null) {
1478
+ // onStateChange(id);
1479
+ // }
1480
+ // }}
933
1481
 
934
- DevicesMenu.propTypes = propTypes$e;
935
- DevicesMenu.defaultProps = defaultProps$e;
1482
+ }));
1483
+ })));
1484
+ }
936
1485
 
937
- 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"};
1486
+ ScreenStates.propTypes = propTypes$c;
1487
+ ScreenStates.defaultProps = defaultProps$c;
938
1488
 
939
- var propTypes$d = {
1489
+ var propTypes$b = {
940
1490
  value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
941
1491
  devices: PropTypes$1.devices,
942
1492
  device: PropTypes.string,
@@ -944,9 +1494,10 @@ var propTypes$d = {
944
1494
  isTheme: PropTypes.bool,
945
1495
  className: PropTypes.string,
946
1496
  onScreenChange: PropTypes.func,
1497
+ onChange: PropTypes.func,
947
1498
  withoutDevicesSizes: PropTypes.bool
948
1499
  };
949
- var defaultProps$d = {
1500
+ var defaultProps$b = {
950
1501
  value: null,
951
1502
  devices: [{
952
1503
  id: 'mobile',
@@ -957,16 +1508,17 @@ var defaultProps$d = {
957
1508
  width: 1200,
958
1509
  height: 900
959
1510
  }],
960
- device: null,
1511
+ device: 'mobile',
961
1512
  viewerTheme: null,
962
1513
  isTheme: false,
963
1514
  className: null,
964
1515
  onScreenChange: null,
965
- withoutDevicesSizes: false
1516
+ onChange: null,
1517
+ withoutDevicesSizes: true
966
1518
  };
967
1519
 
968
1520
  var EditorPreview = function EditorPreview(_ref) {
969
- var _ref3;
1521
+ var _ref9;
970
1522
 
971
1523
  var value = _ref.value,
972
1524
  viewerTheme = _ref.viewerTheme,
@@ -975,8 +1527,14 @@ var EditorPreview = function EditorPreview(_ref) {
975
1527
  initialDevice = _ref.device,
976
1528
  className = _ref.className,
977
1529
  onScreenChange = _ref.onScreenChange,
1530
+ onChange = _ref.onChange,
978
1531
  withoutDevicesSizes = _ref.withoutDevicesSizes;
979
- var routes = useRoutes();
1532
+
1533
+ var _useRouteParams = useRouteParams(),
1534
+ _useRouteParams$scree = _useRouteParams.screen,
1535
+ screenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1536
+ _useRouteParams$field = _useRouteParams.field,
1537
+ fieldParam = _useRouteParams$field === void 0 ? null : _useRouteParams$field;
980
1538
 
981
1539
  var _useScreenSize = useScreenSize(),
982
1540
  _useScreenSize$screen = _useScreenSize.screen,
@@ -1010,7 +1568,7 @@ var EditorPreview = function EditorPreview(_ref) {
1010
1568
  contentRect = _useResizeObserver.entry.contentRect;
1011
1569
 
1012
1570
  var previewStyle = useMemo(function () {
1013
- if (withoutDevicesSizes) {
1571
+ if (withoutDevicesSizes && initialDevice === null) {
1014
1572
  return {};
1015
1573
  }
1016
1574
 
@@ -1034,215 +1592,90 @@ var EditorPreview = function EditorPreview(_ref) {
1034
1592
  height: maxHeight,
1035
1593
  transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
1036
1594
  };
1037
- }, [device, contentRect, screen, withoutDevicesSizes]);
1595
+ }, [device, contentRect, screen, withoutDevicesSizes, initialDevice]);
1596
+ var currentScreen = useMemo(function () {
1597
+ var _ref3 = valueParsed || {},
1598
+ _ref3$components = _ref3.components,
1599
+ components = _ref3$components === void 0 ? [] : _ref3$components;
1600
+
1601
+ return (screenId !== null ? components.find(function (_ref4) {
1602
+ var id = _ref4.id;
1603
+ return id === screenId;
1604
+ }) : components[0]) || null;
1605
+ }, [valueParsed, screenId]);
1606
+ var currentScreenStates = useScreenStates(currentScreen);
1607
+
1608
+ var _ref5 = fieldParam !== null && currentScreenStates !== null ? fieldParam.split('/') : [],
1609
+ _ref6 = _slicedToArray(_ref5, 1),
1610
+ _ref6$ = _ref6[0],
1611
+ screenStateParam = _ref6$ === void 0 ? null : _ref6$;
1612
+
1613
+ var currentScreenState = screenStateParam !== null ? currentScreenStates.find(function (_ref7) {
1614
+ var id = _ref7.id;
1615
+ return id === screenStateParam;
1616
+ }) || null : null;
1617
+
1618
+ var _ref8 = currentScreenState || {},
1619
+ _ref8$id = _ref8.id,
1620
+ screenStateId = _ref8$id === void 0 ? null : _ref8$id,
1621
+ _ref8$repeatable = _ref8.repeatable,
1622
+ repeatable = _ref8$repeatable === void 0 ? false : _ref8$repeatable;
1623
+
1624
+ var currentScreenStateId = currentScreenState !== null && repeatable ? "".concat(screenStateId, ".").concat(fieldParam.split('/').find(function (it) {
1625
+ return it.match(/^[0-9]+$/) !== null;
1626
+ }) || 0) : screenStateId;
1038
1627
  return /*#__PURE__*/React.createElement("div", {
1039
- className: classNames([styles$a.container, screens.map(function (screenName) {
1040
- return styles$a["screen-".concat(screenName)];
1041
- }), (_ref3 = {}, _defineProperty(_ref3, className, className), _defineProperty(_ref3, styles$a.withoutDevicesSizes, withoutDevicesSizes), _ref3)])
1628
+ className: classNames([styles$d.container, screens.map(function (screenName) {
1629
+ return styles$d["screen-".concat(screenName)];
1630
+ }), (_ref9 = {}, _defineProperty(_ref9, className, className), _defineProperty(_ref9, styles$d.withoutDevicesSizes, withoutDevicesSizes), _ref9)])
1042
1631
  }, /*#__PURE__*/React.createElement("div", {
1043
- className: styles$a.inner
1632
+ className: styles$d.inner
1044
1633
  }, !withoutDevicesSizes ? /*#__PURE__*/React.createElement("div", {
1045
- className: styles$a.top
1634
+ className: styles$d.top
1046
1635
  }, /*#__PURE__*/React.createElement(DevicesMenu, {
1047
1636
  items: devices.map(function (it) {
1048
1637
  return _objectSpread(_objectSpread({}, it), {}, {
1049
1638
  active: it.id === deviceId
1050
1639
  });
1051
1640
  }),
1052
- onClickItem: onClickDeviceItem
1641
+ onClickItem: onClickDeviceItem,
1642
+ className: styles$d.devices
1643
+ })) : null, currentScreenStates !== null && currentScreen !== null ? /*#__PURE__*/React.createElement("div", {
1644
+ className: classNames([styles$d.top, 'px-1'])
1645
+ }, /*#__PURE__*/React.createElement(ScreenStates, {
1646
+ screen: currentScreen,
1647
+ screenState: currentScreenStateId,
1648
+ value: value,
1649
+ onChange: onChange
1053
1650
  })) : null, /*#__PURE__*/React.createElement("div", {
1054
- className: styles$a.bottom
1651
+ className: styles$d.bottom
1055
1652
  }, /*#__PURE__*/React.createElement("div", {
1056
- className: styles$a.inner,
1653
+ className: styles$d.inner,
1057
1654
  ref: bottomRef
1058
1655
  }, /*#__PURE__*/React.createElement("div", {
1059
- className: styles$a.preview,
1656
+ className: styles$d.preview,
1060
1657
  style: previewStyle
1061
- }, /*#__PURE__*/React.createElement(Route, {
1062
- path: [routes.screen, routes.home],
1063
- render: function render(_ref4) {
1064
- var _ref4$match$params$sc = _ref4.match.params.screen,
1065
- screenId = _ref4$match$params$sc === void 0 ? null : _ref4$match$params$sc;
1066
- return /*#__PURE__*/React.createElement("div", {
1067
- className: styles$a.viewerContainer
1068
- }, /*#__PURE__*/React.createElement(Viewer, {
1069
- story: valueParsed,
1070
- storyIsParsed: true,
1071
- screen: screenId,
1072
- className: styles$a.story,
1073
- theme: viewerTheme,
1074
- interactions: null,
1075
- renderContext: "edit",
1076
- onScreenChange: onScreenChange
1077
- }));
1078
- }
1079
- }))))));
1080
- };
1081
-
1082
- EditorPreview.propTypes = propTypes$d;
1083
- EditorPreview.defaultProps = defaultProps$d;
1084
-
1085
- var styles$9 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
1086
-
1087
- 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"};
1088
-
1089
- 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"};
1090
-
1091
- 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"};
1092
-
1093
- var propTypes$c = {
1094
- active: PropTypes.bool,
1095
- id: PropTypes.string,
1096
- href: PropTypes.string,
1097
- label: PropTypes$1.label,
1098
- icon: PropTypes.node,
1099
- title: PropTypes.string,
1100
- onClick: PropTypes.func,
1101
- children: PropTypes.node,
1102
- refButton: PropTypes.shape({
1103
- current: PropTypes.any // eslint-disable-line
1104
-
1105
- }),
1106
- className: PropTypes.string
1107
- };
1108
- var defaultProps$c = {
1109
- active: false,
1110
- id: null,
1111
- href: null,
1112
- label: null,
1113
- icon: null,
1114
- title: null,
1115
- onClick: null,
1116
- children: null,
1117
- refButton: null,
1118
- className: null
1119
- };
1120
-
1121
- var ScreenButton = function ScreenButton(_ref) {
1122
- var _ref2;
1123
-
1124
- var active = _ref.active,
1125
- id = _ref.id,
1126
- href = _ref.href,
1127
- className = _ref.className,
1128
- label = _ref.label,
1129
- icon = _ref.icon,
1130
- children = _ref.children,
1131
- title = _ref.title,
1132
- onClick = _ref.onClick,
1133
- refButton = _ref.refButton;
1134
- return /*#__PURE__*/React.createElement("div", {
1135
- className: classNames([styles$6.container, 'rounded', (_ref2 = {}, _defineProperty(_ref2, styles$6.active, active), _defineProperty(_ref2, className, className !== null), _ref2)])
1136
1658
  }, /*#__PURE__*/React.createElement("div", {
1137
- className: styles$6.screen
1138
- }, children !== null ? children : /*#__PURE__*/React.createElement("div", {
1139
- className: styles$6.inner
1140
- }, icon !== null ? /*#__PURE__*/React.createElement("div", {
1141
- className: styles$6.icon
1142
- }, icon) : null, label !== null ? /*#__PURE__*/React.createElement("div", {
1143
- className: styles$6.label
1144
- }, label) : null)), /*#__PURE__*/React.createElement(Button, {
1145
- className: styles$6.button,
1146
- withoutStyle: true,
1147
- id: id,
1148
- href: href,
1149
- title: title,
1150
- onClick: onClick,
1151
- refButton: refButton
1152
- }, /*#__PURE__*/React.createElement("span", {
1153
- className: classNames([styles$6.border, 'rounded'])
1154
- })));
1155
- };
1156
-
1157
- ScreenButton.propTypes = propTypes$c;
1158
- ScreenButton.defaultProps = defaultProps$c;
1159
- var ScreenButton$1 = /*#__PURE__*/React.forwardRef(function (props, ref) {
1160
- return /*#__PURE__*/React.createElement(ScreenButton, Object.assign({}, props, {
1161
- refButton: ref
1162
- }));
1163
- });
1164
-
1165
- var propTypes$b = {
1166
- screen: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
1167
- index: PropTypes.number.isRequired,
1168
- title: PropTypes.string,
1169
- previewStyle: PropTypes.shape({
1170
- width: PropTypes.number,
1171
- height: PropTypes.number
1172
- }),
1173
- withPreview: PropTypes.bool,
1174
- withPlaceholder: PropTypes.bool,
1175
- onClick: PropTypes.func,
1176
- onClickItem: PropTypes.func,
1177
- buttonClassName: PropTypes.string,
1178
- className: PropTypes.string
1179
- };
1180
- var defaultProps$b = {
1181
- screen: null,
1182
- title: null,
1183
- previewStyle: null,
1184
- withPreview: true,
1185
- withPlaceholder: false,
1186
- onClick: null,
1187
- onClickItem: null,
1188
- buttonClassName: null,
1189
- className: null
1659
+ className: styles$d.viewerContainer
1660
+ }, /*#__PURE__*/React.createElement(Viewer, {
1661
+ story: valueParsed,
1662
+ storyIsParsed: true,
1663
+ screen: screenId,
1664
+ screenState: currentScreenStateId,
1665
+ className: styles$d.story,
1666
+ theme: viewerTheme,
1667
+ interactions: null,
1668
+ renderContext: "edit",
1669
+ onScreenChange: onScreenChange
1670
+ })))))));
1190
1671
  };
1191
1672
 
1192
- var ScreenWithPreview = function ScreenWithPreview(_ref) {
1193
- var _ref3;
1194
-
1195
- var screen = _ref.screen,
1196
- index = _ref.index,
1197
- title = _ref.title,
1198
- className = _ref.className,
1199
- buttonClassName = _ref.buttonClassName,
1200
- previewStyle = _ref.previewStyle,
1201
- _onClick = _ref.onClick,
1202
- onClickItem = _ref.onClickItem,
1203
- withPreview = _ref.withPreview,
1204
- withPlaceholder = _ref.withPlaceholder;
1205
- var intl = useIntl();
1206
-
1207
- var _ref2 = previewStyle || {},
1208
- _ref2$width = _ref2.width,
1209
- width = _ref2$width === void 0 ? null : _ref2$width,
1210
- _ref2$height = _ref2.height,
1211
- height = _ref2$height === void 0 ? null : _ref2$height;
1212
-
1213
- return /*#__PURE__*/React.createElement(ScreenButton$1, Object.assign({}, screen, {
1214
- className: classNames([styles$7.button, (_ref3 = {}, _defineProperty(_ref3, buttonClassName, buttonClassName !== null), _defineProperty(_ref3, className, className !== null), _ref3)]),
1215
- title: isMessage(title) ? intl.formatMessage(title) : null,
1216
- onClick: function onClick() {
1217
- if (_onClick !== null) {
1218
- _onClick(screen, index);
1219
- }
1673
+ EditorPreview.propTypes = propTypes$b;
1674
+ EditorPreview.defaultProps = defaultProps$b;
1220
1675
 
1221
- if (onClickItem !== null) {
1222
- onClickItem(screen, index);
1223
- }
1224
- }
1225
- }), withPreview && !withPlaceholder ? /*#__PURE__*/React.createElement("div", {
1226
- className: styles$7.preview,
1227
- style: previewStyle
1228
- }, /*#__PURE__*/React.createElement(ScreenPreview, {
1229
- screen: screen,
1230
- width: width,
1231
- height: height,
1232
- className: styles$7.screen
1233
- })) : null, withPlaceholder && !withPreview ? /*#__PURE__*/React.createElement("div", {
1234
- className: styles$7.placeholder,
1235
- style: previewStyle
1236
- }, /*#__PURE__*/React.createElement(ScreenPlaceholder, {
1237
- screen: screen,
1238
- width: width,
1239
- height: height,
1240
- className: styles$7.screen
1241
- })) : null);
1242
- };
1676
+ var styles$7 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
1243
1677
 
1244
- ScreenWithPreview.propTypes = propTypes$b;
1245
- ScreenWithPreview.defaultProps = defaultProps$b;
1678
+ 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"};
1246
1679
 
1247
1680
  var iOS = /iPad|iPhone|iPod/.test(navigator.platform);
1248
1681
  function getDragDepth(offset, indentationWidth) {
@@ -1644,11 +2077,11 @@ var sortableTreeKeyboardCoordinates = function sortableTreeKeyboardCoordinates(c
1644
2077
 
1645
2078
  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"};
1646
2079
 
1647
- var styles$4 = {};
2080
+ 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"};
1648
2081
 
1649
2082
  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"};
1650
2083
 
1651
- var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "showCount", "children"];
2084
+ var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "showCount", "showCollapsedCount", "children"];
1652
2085
  var propTypes$a = {
1653
2086
  childCount: PropTypes.number,
1654
2087
  clone: PropTypes.bool,
@@ -1674,6 +2107,7 @@ var propTypes$a = {
1674
2107
  }),
1675
2108
  showId: PropTypes.bool,
1676
2109
  showCount: PropTypes.bool,
2110
+ showCollapsedCount: PropTypes.bool,
1677
2111
  children: PropTypes.node
1678
2112
  };
1679
2113
  var defaultProps$a = {
@@ -1693,6 +2127,7 @@ var defaultProps$a = {
1693
2127
  style: null,
1694
2128
  showId: false,
1695
2129
  showCount: false,
2130
+ showCollapsedCount: false,
1696
2131
  children: null
1697
2132
  };
1698
2133
  var SortableTreeItemActions = /*#__PURE__*/forwardRef(function (_ref, ref) {
@@ -1716,18 +2151,21 @@ var SortableTreeItemActions = /*#__PURE__*/forwardRef(function (_ref, ref) {
1716
2151
  var wrapperRef = _ref.wrapperRef;
1717
2152
  _ref.showId;
1718
2153
  var showCount = _ref.showCount,
2154
+ showCollapsedCount = _ref.showCollapsedCount,
1719
2155
  children = _ref.children,
1720
2156
  props = _objectWithoutProperties(_ref, _excluded$4);
1721
2157
 
1722
- return /*#__PURE__*/React.createElement("li", Object.assign({
2158
+ return /*#__PURE__*/React.createElement("div", Object.assign({
1723
2159
  className: classNames([styles$3.wrapper, (_ref2 = {}, _defineProperty(_ref2, styles$3.clone, clone), _defineProperty(_ref2, styles$3.ghost, ghost), _defineProperty(_ref2, styles$3.indicator, indicator), _defineProperty(_ref2, styles$3.disableSelection, disableSelection), _defineProperty(_ref2, styles$3.disableInteraction, disableInteraction), _defineProperty(_ref2, styles$3.withChildren, onCollapse !== null), _ref2)]),
1724
2160
  ref: wrapperRef,
1725
- style: _objectSpread({
1726
- marginLeft: "".concat(indentationWidth * depth, "px")
1727
- }, style)
2161
+ style: {
2162
+ marginLeft: "".concat(indentationWidth * depth, "px"),
2163
+ marginRight: "".concat(5 * depth, "px")
2164
+ }
1728
2165
  }, props), /*#__PURE__*/React.createElement("div", {
1729
2166
  className: styles$3.inner,
1730
- ref: ref
2167
+ ref: ref,
2168
+ style: style
1731
2169
  }, /*#__PURE__*/React.createElement("button", Object.assign({
1732
2170
  className: classNames([styles$3.button, styles$3.handle]),
1733
2171
  type: "button"
@@ -1741,7 +2179,7 @@ var SortableTreeItemActions = /*#__PURE__*/forwardRef(function (_ref, ref) {
1741
2179
  icon: faTimes
1742
2180
  })) : null, clone && showCount && childCount && childCount > 1 ? /*#__PURE__*/React.createElement("span", {
1743
2181
  className: styles$3.count
1744
- }, childCount) : null, onCollapse && collapsed && childCount !== null && childCount > 0 ? /*#__PURE__*/React.createElement("span", {
2182
+ }, childCount) : null, showCollapsedCount && onCollapse && collapsed && childCount !== null && childCount > 0 ? /*#__PURE__*/React.createElement("span", {
1745
2183
  className: styles$3.collapsedCount
1746
2184
  }, childCount) : null, onCollapse && depth === 0 ? /*#__PURE__*/React.createElement("button", {
1747
2185
  type: "button",
@@ -1749,14 +2187,14 @@ var SortableTreeItemActions = /*#__PURE__*/forwardRef(function (_ref, ref) {
1749
2187
  className: classNames(styles$3.button, styles$3.collapse, collapsed && styles$3.collapsed)
1750
2188
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1751
2189
  icon: faAngleDown
1752
- })) : null), /*#__PURE__*/React.createElement("div", {
2190
+ })) : null, /*#__PURE__*/React.createElement("div", {
1753
2191
  className: styles$3.children
1754
- }, children));
2192
+ }, children)));
1755
2193
  });
1756
2194
  SortableTreeItemActions.propTypes = propTypes$a;
1757
2195
  SortableTreeItemActions.defaultProps = defaultProps$a;
1758
2196
 
1759
- var _excluded$3 = ["id", "index", "depth", "component", "value", "style", "smallScale", "collapsed", "onCollapse", "onClickItem", "isLastChild"];
2197
+ var _excluded$3 = ["id", "index", "depth", "component", "value", "style", "smallScale", "collapsed", "onCollapse", "onClickItem", "childValue", "isLastChild"];
1760
2198
  var propTypes$9 = {
1761
2199
  id: PropTypes.string.isRequired,
1762
2200
  index: PropTypes.number.isRequired,
@@ -1776,6 +2214,8 @@ var propTypes$9 = {
1776
2214
  collapsed: PropTypes.bool,
1777
2215
  onCollapse: PropTypes.func,
1778
2216
  onClickItem: PropTypes.func,
2217
+ // eslint-disable-next-line react/forbid-prop-types
2218
+ childValue: PropTypes.object,
1779
2219
  isLastChild: PropTypes.bool
1780
2220
  };
1781
2221
  var defaultProps$9 = {
@@ -1786,6 +2226,7 @@ var defaultProps$9 = {
1786
2226
  collapsed: false,
1787
2227
  onCollapse: null,
1788
2228
  onClickItem: null,
2229
+ childValue: null,
1789
2230
  isLastChild: false
1790
2231
  };
1791
2232
 
@@ -1800,12 +2241,13 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1800
2241
  index = _ref2.index,
1801
2242
  depth = _ref2.depth,
1802
2243
  Component = _ref2.component,
1803
- value = _ref2.value,
1804
- itemStyle = _ref2.style,
1805
- smallScale = _ref2.smallScale,
1806
- collapsed = _ref2.collapsed,
2244
+ value = _ref2.value;
2245
+ _ref2.style;
2246
+ _ref2.smallScale;
2247
+ var collapsed = _ref2.collapsed,
1807
2248
  onCollapse = _ref2.onCollapse,
1808
- onClickItem = _ref2.onClickItem;
2249
+ onClickItem = _ref2.onClickItem,
2250
+ childValue = _ref2.childValue;
1809
2251
  _ref2.isLastChild;
1810
2252
  var props = _objectWithoutProperties(_ref2, _excluded$3);
1811
2253
 
@@ -1822,28 +2264,17 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1822
2264
  transform = _useSortable.transform,
1823
2265
  transition = _useSortable.transition;
1824
2266
 
1825
- var hasCollapse = onCollapse !== null;
1826
- var _itemStyle$scaledWidt = itemStyle.scaledWidth,
1827
- scaledWidth = _itemStyle$scaledWidt === void 0 ? 100 : _itemStyle$scaledWidt,
1828
- _itemStyle$scaledHeig = itemStyle.scaledHeight,
1829
- scaledHeight = _itemStyle$scaledHeig === void 0 ? 66 : _itemStyle$scaledHeig,
1830
- _itemStyle$scale = itemStyle.scale,
1831
- scale = _itemStyle$scale === void 0 ? 1 : _itemStyle$scale;
1832
- var extraHeight = hasCollapse ? 30 : 0;
2267
+ var timeout = useRef(null);
1833
2268
  var actionsStyle = {
1834
- width: depth === 0 ? scaledWidth : scaledWidth * smallScale,
1835
- height: depth === 0 ? scaledHeight + extraHeight : scaledHeight * smallScale,
1836
2269
  transform: CSS.Translate.toString(transform),
1837
2270
  transition: transition
1838
2271
  };
1839
- var previewStyle = {
1840
- width: itemStyle.width,
1841
- height: itemStyle.height,
1842
- transform: depth === 0 ? itemStyle.transform : "scale(".concat(scale * smallScale, ", ").concat(scale * smallScale, ")")
1843
- };
1844
2272
 
1845
2273
  var _ref3 = listeners || {},
1846
- onPointerDown = _ref3.onPointerDown;
2274
+ _ref3$onPointerDown = _ref3.onPointerDown,
2275
+ onPointerDown = _ref3$onPointerDown === void 0 ? null : _ref3$onPointerDown,
2276
+ _ref3$onPointerUp = _ref3.onPointerUp,
2277
+ onPointerUp = _ref3$onPointerUp === void 0 ? null : _ref3$onPointerUp;
1847
2278
 
1848
2279
  var onClickAction = useCallback(function (e) {
1849
2280
  if (onClickItem !== null) {
@@ -1851,9 +2282,25 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1851
2282
  }
1852
2283
 
1853
2284
  if (onPointerDown !== null) {
1854
- onPointerDown(e);
2285
+ e.persist();
2286
+ timeout.current = setTimeout(function () {
2287
+ if (onPointerDown !== null) {
2288
+ onPointerDown(e);
2289
+ }
2290
+
2291
+ timeout.current = null;
2292
+ }, 200);
1855
2293
  }
1856
2294
  }, [value, index, onClickItem, onPointerDown]);
2295
+ var cancellingPointerUp = useCallback(function (e) {
2296
+ if (timeout.current !== null) {
2297
+ clearTimeout(timeout.current);
2298
+ }
2299
+
2300
+ if (onPointerUp !== null) {
2301
+ onPointerUp(e);
2302
+ }
2303
+ }, [onPointerUp]);
1857
2304
  return /*#__PURE__*/React.createElement("div", {
1858
2305
  className: classNames([styles$4.container])
1859
2306
  }, /*#__PURE__*/React.createElement(SortableTreeItemActions, Object.assign({
@@ -1865,14 +2312,18 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
1865
2312
  disableSelection: iOS,
1866
2313
  disableInteraction: isSorting,
1867
2314
  handleProps: _objectSpread(_objectSpread(_objectSpread({}, attributes), listeners), {}, {
1868
- onPointerDown: onClickAction
2315
+ onPointerDown: onClickAction,
2316
+ onPointerUp: cancellingPointerUp
1869
2317
  }),
1870
2318
  collapsed: collapsed,
1871
2319
  onCollapse: onCollapse
1872
- }, props), Component !== null ? /*#__PURE__*/React.createElement(Component, Object.assign({}, value, {
1873
- previewStyle: previewStyle
1874
- })) : null));
2320
+ }, props), Component !== null ? /*#__PURE__*/React.createElement("div", {
2321
+ className: styles$4.parent
2322
+ }, /*#__PURE__*/React.createElement(Component, value)) : null, childValue !== null ? /*#__PURE__*/React.createElement("div", {
2323
+ className: styles$4.child
2324
+ }, /*#__PURE__*/React.createElement(Component, childValue)) : null));
1875
2325
  };
2326
+
1876
2327
  SortableTreeItem.propTypes = propTypes$9;
1877
2328
  SortableTreeItem.defaultProps = defaultProps$9;
1878
2329
 
@@ -1894,18 +2345,6 @@ var initialItems = [{
1894
2345
  id: 'Winter',
1895
2346
  children: []
1896
2347
  }]
1897
- }, {
1898
- id: 'About Us',
1899
- children: []
1900
- }, {
1901
- id: 'My Account',
1902
- children: [{
1903
- id: 'Addresses',
1904
- children: []
1905
- }, {
1906
- id: 'Order History',
1907
- children: []
1908
- }]
1909
2348
  }];
1910
2349
  var measuring = {
1911
2350
  droppable: {
@@ -1932,7 +2371,6 @@ var propTypes$8 = {
1932
2371
  indicator: PropTypes.bool,
1933
2372
  removable: PropTypes.bool,
1934
2373
  component: PropTypes.func,
1935
- itemStyle: PropTypes.shape({}),
1936
2374
  onClickItem: PropTypes.func,
1937
2375
  onChange: PropTypes.func
1938
2376
  };
@@ -1943,10 +2381,10 @@ var defaultProps$8 = {
1943
2381
  indicator: false,
1944
2382
  removable: false,
1945
2383
  component: null,
1946
- itemStyle: null,
1947
2384
  onClickItem: null,
1948
2385
  onChange: null
1949
2386
  };
2387
+
1950
2388
  var SortableTree = function SortableTree(_ref2) {
1951
2389
  var collapsible = _ref2.collapsible,
1952
2390
  defaultItems = _ref2.items,
@@ -1954,12 +2392,11 @@ var SortableTree = function SortableTree(_ref2) {
1954
2392
  indentationWidth = _ref2.indentationWidth,
1955
2393
  removable = _ref2.removable,
1956
2394
  component = _ref2.component,
1957
- itemStyle = _ref2.itemStyle,
1958
2395
  onClickItem = _ref2.onClickItem,
1959
2396
  onChange = _ref2.onChange;
1960
2397
 
1961
2398
  var _useState = useState(function () {
1962
- return defaultItems;
2399
+ return buildTree(defaultItems);
1963
2400
  }),
1964
2401
  _useState2 = _slicedToArray(_useState, 2),
1965
2402
  items = _useState2[0],
@@ -1983,11 +2420,20 @@ var SortableTree = function SortableTree(_ref2) {
1983
2420
  var _useState9 = useState(null),
1984
2421
  _useState10 = _slicedToArray(_useState9, 2),
1985
2422
  currentPosition = _useState10[0],
1986
- setCurrentPosition = _useState10[1];
2423
+ setCurrentPosition = _useState10[1]; // Tree setup from list
1987
2424
 
1988
- var flattenedItems = useMemo(function () {
1989
- var flattenedTree = flattenTree(items); // console.log('yo', items, flattenedTree);
1990
2425
 
2426
+ useEffect(function () {
2427
+ var flat = flattenTree(items);
2428
+ var merged = defaultItems.map(function (t1) {
2429
+ return _objectSpread(_objectSpread({}, flat.find(function (t2) {
2430
+ return t2.id === t1.id;
2431
+ })), t1);
2432
+ });
2433
+ setItems(buildTree(merged));
2434
+ }, [defaultItems.length]);
2435
+ var flattenedItems = useMemo(function () {
2436
+ var flattenedTree = flattenTree(items);
1991
2437
  var collapsedItems = flattenedTree.reduce(function (acc, _ref3) {
1992
2438
  var _ref3$children = _ref3.children,
1993
2439
  children = _ref3$children === void 0 ? [] : _ref3$children,
@@ -1996,38 +2442,101 @@ var SortableTree = function SortableTree(_ref2) {
1996
2442
  return collapsed && children.length ? [].concat(_toConsumableArray(acc), [id]) : acc;
1997
2443
  }, []) || null;
1998
2444
  return removeChildrenOf(flattenedTree, activeId ? [activeId].concat(_toConsumableArray(collapsedItems)) : collapsedItems);
1999
- }, [activeId, items]);
2445
+ }, [activeId, items, items.length]);
2000
2446
  var projected = activeId && overId ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
2001
2447
  var sensorContext = useRef({
2002
2448
  items: flattenedItems,
2003
2449
  offset: offsetLeft
2004
2450
  });
2005
2451
 
2006
- var _useState11 = useState(function () {
2007
- return sortableTreeKeyboardCoordinates(sensorContext, indentationWidth);
2008
- }),
2009
- _useState12 = _slicedToArray(_useState11, 1),
2010
- coordinateGetter = _useState12[0];
2452
+ var _useState11 = useState(function () {
2453
+ return sortableTreeKeyboardCoordinates(sensorContext, indentationWidth);
2454
+ }),
2455
+ _useState12 = _slicedToArray(_useState11, 1),
2456
+ coordinateGetter = _useState12[0];
2457
+
2458
+ var sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, {
2459
+ coordinateGetter: coordinateGetter
2460
+ }));
2461
+ var sortedIds = useMemo(function () {
2462
+ return flattenedItems.map(function (_ref4) {
2463
+ var id = _ref4.id;
2464
+ return id;
2465
+ });
2466
+ }, [flattenedItems]);
2467
+ var activeItem = activeId ? flattenedItems.find(function (_ref5) {
2468
+ var id = _ref5.id;
2469
+ return id === activeId;
2470
+ }) : null;
2471
+ useEffect(function () {
2472
+ sensorContext.current = {
2473
+ items: flattenedItems,
2474
+ offset: offsetLeft
2475
+ };
2476
+ }, [flattenedItems, offsetLeft]);
2477
+
2478
+ function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2479
+ if (currentOverId && projected) {
2480
+ if (eventName !== 'onDragEnd') {
2481
+ if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2482
+ return;
2483
+ }
2484
+
2485
+ setCurrentPosition({
2486
+ parentId: projected.parentId,
2487
+ overId: currentOverId
2488
+ });
2489
+ }
2490
+
2491
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2492
+ var overIndex = clonedItems.findIndex(function (_ref6) {
2493
+ var id = _ref6.id;
2494
+ return id === currentOverId;
2495
+ });
2496
+ var activeIndex = clonedItems.findIndex(function (_ref7) {
2497
+ var id = _ref7.id;
2498
+ return id === currentActiveId;
2499
+ });
2500
+ var sortedItems = arrayMove(clonedItems, activeIndex, overIndex);
2501
+ var previousItem = sortedItems[overIndex - 1];
2502
+ var newAnnouncement;
2503
+ var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2504
+ var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2505
+
2506
+ if (!previousItem) {
2507
+ var nextItem = typeof sortedItems[overIndex + 1] !== 'undefined' ? sortedItems[overIndex + 1] : null;
2508
+
2509
+ if (nextItem !== null) {
2510
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2511
+ }
2512
+ } else if (projected.depth > previousItem.depth) {
2513
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2514
+ } else {
2515
+ var previousSibling = previousItem;
2516
+
2517
+ var _loop = function _loop() {
2518
+ var _previousSibling = previousSibling,
2519
+ parentId = _previousSibling.parentId;
2520
+ previousSibling = sortedItems.find(function (_ref8) {
2521
+ var id = _ref8.id;
2522
+ return id === parentId;
2523
+ });
2524
+ };
2525
+
2526
+ while (previousSibling && projected.depth < previousSibling.depth) {
2527
+ _loop();
2528
+ }
2529
+
2530
+ if (previousSibling) {
2531
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2532
+ }
2533
+ } // eslint-disable-next-line consistent-return
2534
+
2535
+
2536
+ return newAnnouncement;
2537
+ }
2538
+ }
2011
2539
 
2012
- var sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, {
2013
- coordinateGetter: coordinateGetter
2014
- }));
2015
- var sortedIds = useMemo(function () {
2016
- return flattenedItems.map(function (_ref4) {
2017
- var id = _ref4.id;
2018
- return id;
2019
- });
2020
- }, [flattenedItems]);
2021
- var activeItem = activeId ? flattenedItems.find(function (_ref5) {
2022
- var id = _ref5.id;
2023
- return id === activeId;
2024
- }) : null;
2025
- useEffect(function () {
2026
- sensorContext.current = {
2027
- items: flattenedItems,
2028
- offset: offsetLeft
2029
- };
2030
- }, [flattenedItems, offsetLeft]);
2031
2540
  var announcements = useMemo(function () {
2032
2541
  return {
2033
2542
  onDragStart: function onDragStart(id) {
@@ -2040,16 +2549,17 @@ var SortableTree = function SortableTree(_ref2) {
2040
2549
  return getMovementAnnouncement('onDragOver', id, currentOverId);
2041
2550
  },
2042
2551
  onDragEnd: function onDragEnd(id, currentOverId) {
2043
- // console.log('drag end', flattenedItems);
2552
+ var flat = flattenTree(items);
2553
+
2044
2554
  if (onChange !== null) {
2045
- onChange((flattenedItems || []).map(function (_ref6) {
2046
- var itemId = _ref6.id,
2047
- _ref6$children = _ref6.children,
2048
- children = _ref6$children === void 0 ? [] : _ref6$children,
2049
- _ref6$parentId = _ref6.parentId,
2050
- parentId = _ref6$parentId === void 0 ? null : _ref6$parentId,
2051
- _ref6$collapsed = _ref6.collapsed,
2052
- collapsed = _ref6$collapsed === void 0 ? false : _ref6$collapsed;
2555
+ onChange((flat || []).map(function (_ref9) {
2556
+ var itemId = _ref9.id,
2557
+ _ref9$children = _ref9.children,
2558
+ children = _ref9$children === void 0 ? [] : _ref9$children,
2559
+ _ref9$parentId = _ref9.parentId,
2560
+ parentId = _ref9$parentId === void 0 ? null : _ref9$parentId,
2561
+ _ref9$collapsed = _ref9.collapsed,
2562
+ collapsed = _ref9$collapsed === void 0 ? false : _ref9$collapsed;
2053
2563
  return {
2054
2564
  id: itemId,
2055
2565
  props: _objectSpread(_objectSpread({}, (children || []).length > 0 ? {
@@ -2074,98 +2584,18 @@ var SortableTree = function SortableTree(_ref2) {
2074
2584
  return "Moving was cancelled. ".concat(id, " was dropped in its original position.");
2075
2585
  }
2076
2586
  };
2077
- }, [flattenedItems, onChange]); // Initial tree setup from list
2078
-
2079
- useEffect(function () {
2080
- // console.log('fuck off');
2081
- setItems(buildTree(defaultItems));
2082
- }, []);
2083
- var activeValue = defaultItems.find(function (_ref7) {
2084
- var _ref7$id = _ref7.id,
2085
- defaultId = _ref7$id === void 0 ? null : _ref7$id;
2587
+ }, [flattenedItems, onChange, getMovementAnnouncement]);
2588
+ var activeValue = defaultItems.find(function (_ref10) {
2589
+ var _ref10$id = _ref10.id,
2590
+ defaultId = _ref10$id === void 0 ? null : _ref10$id;
2086
2591
  return defaultId === activeId;
2087
2592
  });
2088
- return /*#__PURE__*/React.createElement(DndContext, {
2089
- announcements: announcements,
2090
- sensors: sensors,
2091
- collisionDetection: closestCenter,
2092
- measuring: measuring,
2093
- onDragStart: handleDragStart,
2094
- onDragMove: handleDragMove,
2095
- onDragOver: handleDragOver,
2096
- onDragEnd: handleDragEnd,
2097
- onDragCancel: handleDragCancel
2098
- }, /*#__PURE__*/React.createElement(SortableContext, {
2099
- items: sortedIds,
2100
- strategy: verticalListSortingStrategy
2101
- }, flattenedItems.map(function (_ref8, idx) {
2102
- var _flattenedItems, _ref10;
2103
-
2104
- var id = _ref8.id,
2105
- _ref8$children = _ref8.children,
2106
- children = _ref8$children === void 0 ? [] : _ref8$children,
2107
- collapsed = _ref8.collapsed,
2108
- depth = _ref8.depth;
2109
- var screenValue = defaultItems.find(function (_ref9) {
2110
- var _ref9$id = _ref9.id,
2111
- defaultId = _ref9$id === void 0 ? null : _ref9$id;
2112
- return defaultId === id;
2113
- });
2114
- var next = ((_flattenedItems = flattenedItems[idx + 1]) === null || _flattenedItems === void 0 ? void 0 : _flattenedItems.parentId) || null;
2115
- var isCollapsed = collapsed && children.length > 0;
2116
- var onCollapse = collapsible && children.length ? function () {
2117
- return handleCollapse(id);
2118
- } : null;
2119
- var currentDepth = id === activeId && projected ? projected.depth : depth;
2120
- return /*#__PURE__*/React.createElement("div", {
2121
- className: classNames([styles$5.item, (_ref10 = {}, _defineProperty(_ref10, styles$5.parent, onCollapse !== null && !collapsed), _defineProperty(_ref10, styles$5.group, depth === 1), _defineProperty(_ref10, styles$5.isLastChild, next === null), _ref10)]),
2122
- key: id
2123
- }, /*#__PURE__*/React.createElement(SortableTreeItem, {
2124
- key: id,
2125
- id: id,
2126
- depth: currentDepth,
2127
- indentationWidth: indentationWidth,
2128
- indicator: indicator,
2129
- collapsed: isCollapsed,
2130
- onCollapse: onCollapse,
2131
- onRemove: removable ? function () {
2132
- return handleRemove(id);
2133
- } : undefined,
2134
- childCount: getChildCount(items, id),
2135
- component: component,
2136
- value: (screenValue === null || screenValue === void 0 ? void 0 : screenValue.value) || null,
2137
- style: itemStyle,
2138
- onClickItem: onClickItem,
2139
- index: idx
2140
- }));
2141
- }), /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(DragOverlay, {
2142
- dropAnimation: dropAnimation,
2143
- modifiers: indicator ? [adjustTranslate] : undefined
2144
- }, activeId && activeItem ? /*#__PURE__*/React.createElement("div", {
2145
- className: styles$5.item,
2146
- key: activeId
2147
- }, /*#__PURE__*/React.createElement(SortableTreeItem, {
2148
- id: activeId,
2149
- depth: activeItem.depth,
2150
- clone: true,
2151
- childCount: getChildCount(items, activeId) + 1,
2152
- indentationWidth: indentationWidth,
2153
- component: component,
2154
- value: activeValue === null || activeValue === void 0 ? void 0 : activeValue.value,
2155
- onClickItem: onClickItem,
2156
- index: flattenedItems.findIndex(function (_ref11) {
2157
- var id = _ref11.id;
2158
- return activeId === id;
2159
- }),
2160
- style: itemStyle
2161
- })) : null), document.body)));
2162
-
2163
- function handleDragStart(_ref12) {
2164
- var newActiveId = _ref12.active.id;
2593
+ var handleDragStart = useCallback(function (_ref11) {
2594
+ var newActiveId = _ref11.active.id;
2165
2595
  setActiveId(newActiveId);
2166
2596
  setOverId(newActiveId);
2167
- var newActiveItem = flattenedItems.find(function (_ref13) {
2168
- var id = _ref13.id;
2597
+ var newActiveItem = flattenedItems.find(function (_ref12) {
2598
+ var id = _ref12.id;
2169
2599
  return id === newActiveId;
2170
2600
  });
2171
2601
 
@@ -2177,53 +2607,49 @@ var SortableTree = function SortableTree(_ref2) {
2177
2607
  }
2178
2608
 
2179
2609
  document.body.style.setProperty('cursor', 'grabbing');
2180
- }
2181
-
2182
- function handleDragMove(_ref14) {
2183
- var delta = _ref14.delta;
2610
+ }, [flattenedItems, setActiveId, setOverId, setCurrentPosition]);
2611
+ var handleDragMove = useCallback(function (_ref13) {
2612
+ var delta = _ref13.delta;
2184
2613
  setOffsetLeft(delta.x);
2185
- }
2186
-
2187
- function handleDragOver(_ref15) {
2614
+ }, [setOffsetLeft]);
2615
+ var handleDragOver = useCallback(function (_ref14) {
2188
2616
  var _over$id;
2189
2617
 
2190
- var over = _ref15.over;
2618
+ var over = _ref14.over;
2191
2619
  setOverId((_over$id = over === null || over === void 0 ? void 0 : over.id) !== null && _over$id !== void 0 ? _over$id : null);
2192
- }
2193
-
2194
- function resetState() {
2620
+ }, [setOverId]);
2621
+ var resetState = useCallback(function () {
2195
2622
  setOverId(null);
2196
2623
  setActiveId(null);
2197
2624
  setOffsetLeft(0);
2198
2625
  setCurrentPosition(null);
2199
2626
  document.body.style.setProperty('cursor', '');
2200
- }
2201
-
2202
- function handleDragEnd(_ref16) {
2203
- var active = _ref16.active,
2204
- over = _ref16.over;
2627
+ }, [setOverId, setActiveId, setOffsetLeft, setCurrentPosition]);
2628
+ var handleDragEnd = useCallback(function (_ref15) {
2629
+ var active = _ref15.active,
2630
+ over = _ref15.over;
2205
2631
  resetState();
2206
2632
 
2207
2633
  if (projected && over) {
2208
2634
  var depth = projected.depth,
2209
2635
  parentId = projected.parentId;
2210
2636
  var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2211
- var overIndex = clonedItems.findIndex(function (_ref17) {
2212
- var id = _ref17.id;
2637
+ var overIndex = clonedItems.findIndex(function (_ref16) {
2638
+ var id = _ref16.id;
2213
2639
  return id === over.id;
2214
2640
  });
2215
- var activeIndex = clonedItems.findIndex(function (_ref18) {
2216
- var id = _ref18.id;
2641
+ var activeIndex = clonedItems.findIndex(function (_ref17) {
2642
+ var id = _ref17.id;
2217
2643
  return id === active.id;
2218
2644
  });
2219
2645
  var activeTreeItem = clonedItems[activeIndex];
2220
2646
  var maxDepth = getMaxDepth(activeTreeItem); // Un-merge and flatten
2221
2647
 
2222
2648
  if (depth > 0 && depth >= maxDepth && (activeTreeItem === null || activeTreeItem === void 0 ? void 0 : activeTreeItem.children) !== null && activeTreeItem.children.length > 0) {
2223
- var _loop = function _loop(i) {
2649
+ var _loop2 = function _loop2(i) {
2224
2650
  var childId = activeTreeItem.children[i].id;
2225
- var childIndex = clonedItems.findIndex(function (_ref19) {
2226
- var id = _ref19.id;
2651
+ var childIndex = clonedItems.findIndex(function (_ref18) {
2652
+ var id = _ref18.id;
2227
2653
  return id === childId;
2228
2654
  });
2229
2655
  clonedItems[childIndex].parentId = parentId;
@@ -2231,7 +2657,7 @@ var SortableTree = function SortableTree(_ref2) {
2231
2657
  };
2232
2658
 
2233
2659
  for (var i = 0; i < activeTreeItem.children.length; i += 1) {
2234
- _loop(i);
2660
+ _loop2(i);
2235
2661
  }
2236
2662
 
2237
2663
  activeTreeItem.children = [];
@@ -2245,96 +2671,113 @@ var SortableTree = function SortableTree(_ref2) {
2245
2671
  var newItems = buildTree(sortedItems);
2246
2672
  setItems(newItems);
2247
2673
  }
2248
- }
2249
-
2250
- function handleDragCancel() {
2674
+ }, [projected, items, resetState, arrayMove, buildTree, setItems]);
2675
+ var handleDragCancel = useCallback(function () {
2251
2676
  resetState();
2252
- }
2253
-
2254
- function handleRemove(id) {
2677
+ }, [resetState]);
2678
+ var handleRemove = useCallback(function (id) {
2255
2679
  setItems(function (newItems) {
2256
2680
  return removeItem(newItems, id);
2257
2681
  });
2258
- }
2259
-
2260
- function handleCollapse(id) {
2682
+ }, [setItems, removeItem]);
2683
+ var handleCollapse = useCallback(function (id) {
2261
2684
  setItems(function (newItems) {
2262
2685
  return setProperty(newItems, id, 'collapsed', function (value) {
2263
2686
  return !value;
2264
2687
  });
2265
2688
  });
2266
- }
2267
-
2268
- function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2269
- if (currentOverId && projected) {
2270
- if (eventName !== 'onDragEnd') {
2271
- if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2272
- return;
2273
- }
2274
-
2275
- setCurrentPosition({
2276
- parentId: projected.parentId,
2277
- overId: currentOverId
2278
- });
2279
- }
2280
-
2281
- var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2282
- var overIndex = clonedItems.findIndex(function (_ref20) {
2283
- var id = _ref20.id;
2284
- return id === currentOverId;
2285
- });
2286
- var activeIndex = clonedItems.findIndex(function (_ref21) {
2287
- var id = _ref21.id;
2288
- return id === currentActiveId;
2289
- });
2290
- var sortedItems = arrayMove(clonedItems, activeIndex, overIndex);
2291
- var previousItem = sortedItems[overIndex - 1];
2292
- var newAnnouncement;
2293
- var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2294
- var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2295
-
2296
- if (!previousItem) {
2297
- var nextItem = sortedItems[overIndex + 1];
2298
- newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2299
- } else if (projected.depth > previousItem.depth) {
2300
- newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2301
- } else {
2302
- var previousSibling = previousItem;
2303
-
2304
- var _loop2 = function _loop2() {
2305
- var _previousSibling = previousSibling,
2306
- parentId = _previousSibling.parentId;
2307
- previousSibling = sortedItems.find(function (_ref22) {
2308
- var id = _ref22.id;
2309
- return id === parentId;
2310
- });
2311
- };
2312
-
2313
- while (previousSibling && projected.depth < previousSibling.depth) {
2314
- _loop2();
2315
- }
2316
-
2317
- if (previousSibling) {
2318
- newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2319
- }
2320
- } // eslint-disable-next-line consistent-return
2321
-
2322
-
2323
- return newAnnouncement;
2324
- }
2325
- }
2689
+ }, [setItems, setProperty]);
2690
+ return /*#__PURE__*/React.createElement(DndContext, {
2691
+ announcements: announcements,
2692
+ sensors: sensors,
2693
+ collisionDetection: closestCenter,
2694
+ measuring: measuring,
2695
+ onDragStart: handleDragStart,
2696
+ onDragMove: handleDragMove,
2697
+ onDragOver: handleDragOver,
2698
+ onDragEnd: handleDragEnd,
2699
+ onDragCancel: handleDragCancel
2700
+ }, /*#__PURE__*/React.createElement(SortableContext, {
2701
+ items: sortedIds,
2702
+ strategy: verticalListSortingStrategy
2703
+ }, flattenedItems.map(function (_ref19, idx) {
2704
+ var _flattenedItems, _ref22;
2705
+
2706
+ var id = _ref19.id,
2707
+ _ref19$children = _ref19.children,
2708
+ children = _ref19$children === void 0 ? [] : _ref19$children,
2709
+ collapsed = _ref19.collapsed,
2710
+ depth = _ref19.depth;
2711
+ var screenValue = defaultItems.find(function (_ref20) {
2712
+ var _ref20$id = _ref20.id,
2713
+ defaultId = _ref20$id === void 0 ? null : _ref20$id;
2714
+ return defaultId === id;
2715
+ });
2716
+ var next = ((_flattenedItems = flattenedItems[idx + 1]) === null || _flattenedItems === void 0 ? void 0 : _flattenedItems.parentId) || null;
2717
+ var isCollapsed = collapsed && children.length > 0;
2718
+ var onCollapse = collapsible && children.length ? function () {
2719
+ return handleCollapse(id);
2720
+ } : null;
2721
+ var currentDepth = id === activeId && projected ? projected.depth : depth;
2722
+ var childCount = getChildCount(items, id);
2723
+ var childValue = childCount > 0 && collapsed ? defaultItems.slice().reverse().find(function (_ref21) {
2724
+ var _ref21$parentId = _ref21.parentId,
2725
+ parentId = _ref21$parentId === void 0 ? null : _ref21$parentId;
2726
+ return parentId === id;
2727
+ }) : null;
2728
+ return /*#__PURE__*/React.createElement("div", {
2729
+ className: classNames([styles$5.item, (_ref22 = {}, _defineProperty(_ref22, styles$5.parent, onCollapse !== null && !collapsed), _defineProperty(_ref22, styles$5.group, depth === 1), _defineProperty(_ref22, styles$5.isLastChild, next === null), _ref22)]),
2730
+ key: id
2731
+ }, /*#__PURE__*/React.createElement(SortableTreeItem, {
2732
+ key: id,
2733
+ id: id,
2734
+ depth: currentDepth,
2735
+ indentationWidth: indentationWidth,
2736
+ indicator: indicator,
2737
+ collapsed: isCollapsed,
2738
+ onCollapse: onCollapse,
2739
+ onRemove: removable ? function () {
2740
+ return handleRemove(id);
2741
+ } : undefined,
2742
+ childCount: childCount,
2743
+ component: component,
2744
+ value: (screenValue === null || screenValue === void 0 ? void 0 : screenValue.value) || null,
2745
+ onClickItem: onClickItem,
2746
+ index: idx,
2747
+ childValue: (childValue === null || childValue === void 0 ? void 0 : childValue.value) || null
2748
+ }));
2749
+ }), /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(DragOverlay, {
2750
+ dropAnimation: dropAnimation,
2751
+ modifiers: indicator ? [adjustTranslate] : undefined
2752
+ }, activeId && activeItem ? /*#__PURE__*/React.createElement("div", {
2753
+ className: styles$5.item,
2754
+ key: activeId
2755
+ }, /*#__PURE__*/React.createElement(SortableTreeItem, {
2756
+ id: activeId,
2757
+ depth: activeItem.depth,
2758
+ clone: true,
2759
+ childCount: getChildCount(items, activeId) + 1,
2760
+ indentationWidth: indentationWidth,
2761
+ component: component,
2762
+ value: activeValue === null || activeValue === void 0 ? void 0 : activeValue.value,
2763
+ onClickItem: onClickItem,
2764
+ index: flattenedItems.findIndex(function (_ref23) {
2765
+ var id = _ref23.id;
2766
+ return activeId === id;
2767
+ })
2768
+ })) : null), document.body)));
2326
2769
  };
2770
+
2327
2771
  SortableTree.propTypes = propTypes$8;
2328
2772
  SortableTree.defaultProps = defaultProps$8;
2329
2773
 
2330
- var _excluded$2 = ["className", "screen", "type", "onClick"],
2331
- _excluded2 = ["id", "screen"];
2774
+ var _excluded$2 = ["className", "screen", "type", "onClick", "active", "href"],
2775
+ _excluded2 = ["id", "screen", "href"];
2332
2776
  var propTypes$7 = {
2333
2777
  items: PropTypes$1.menuItems,
2334
2778
  withPreview: PropTypes.bool,
2335
2779
  withPlaceholder: PropTypes.bool,
2336
2780
  settings: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
2337
- previewMinWidth: PropTypes.number,
2338
2781
  sortable: PropTypes.bool,
2339
2782
  isTree: PropTypes.bool,
2340
2783
  isVertical: PropTypes.bool,
@@ -2351,7 +2794,6 @@ var defaultProps$7 = {
2351
2794
  withPreview: false,
2352
2795
  withPlaceholder: false,
2353
2796
  settings: null,
2354
- previewMinWidth: 320,
2355
2797
  sortable: false,
2356
2798
  isTree: false,
2357
2799
  isVertical: false,
@@ -2365,13 +2807,12 @@ var defaultProps$7 = {
2365
2807
  };
2366
2808
 
2367
2809
  var ScreensMenu = function ScreensMenu(_ref) {
2368
- var _ref10;
2810
+ var _ref8;
2369
2811
 
2370
2812
  var items = _ref.items,
2371
2813
  withPreview = _ref.withPreview,
2372
2814
  withPlaceholder = _ref.withPlaceholder,
2373
2815
  settings = _ref.settings,
2374
- previewMinWidth = _ref.previewMinWidth,
2375
2816
  isVertical = _ref.isVertical,
2376
2817
  noWrap = _ref.noWrap,
2377
2818
  className = _ref.className,
@@ -2382,125 +2823,78 @@ var ScreensMenu = function ScreensMenu(_ref) {
2382
2823
  isTree = _ref.isTree,
2383
2824
  onClickItem = _ref.onClickItem,
2384
2825
  onOrderChange = _ref.onOrderChange;
2385
-
2386
- var _useResizeObserver = useResizeObserver({}, [items]),
2387
- containerRef = _useResizeObserver.ref,
2388
- contentRect = _useResizeObserver.entry.contentRect;
2389
-
2390
- var _useResizeObserver2 = useResizeObserver({}, [items]),
2391
- columnRef = _useResizeObserver2.ref,
2392
- columnRect = _useResizeObserver2.entry.contentRect;
2393
-
2394
- var previewStyle = useMemo(function () {
2395
- var _ref2 = contentRect || {},
2396
- _ref2$width = _ref2.width,
2397
- itemWidth = _ref2$width === void 0 ? 0 : _ref2$width,
2398
- _ref2$height = _ref2.height,
2399
- itemHeight = _ref2$height === void 0 ? 0 : _ref2$height;
2400
-
2401
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 2 / 3;
2402
-
2403
- var _getSizeWithinBounds = getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2404
- previewScale = _getSizeWithinBounds.scale;
2405
-
2406
- return {
2407
- width: previewMinWidth,
2408
- height: previewMinWidth * ratio,
2409
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")")
2410
- };
2411
- }, [previewMinWidth, contentRect]);
2412
- var treeStyle = useMemo(function () {
2413
- var _ref3 = columnRect || {},
2414
- _ref3$width = _ref3.width,
2415
- itemWidth = _ref3$width === void 0 ? 0 : _ref3$width;
2416
-
2417
- var itemHeight = itemWidth * 3 / 2;
2418
- var ratio = itemHeight !== 0 && itemWidth !== 0 ? itemHeight / itemWidth : 0;
2419
-
2420
- var _getSizeWithinBounds2 = getSizeWithinBounds(previewMinWidth, previewMinWidth * ratio, itemWidth, itemHeight),
2421
- scaledWidth = _getSizeWithinBounds2.width,
2422
- scaledHeight = _getSizeWithinBounds2.height,
2423
- previewScale = _getSizeWithinBounds2.scale;
2424
-
2425
- return {
2426
- width: previewMinWidth,
2427
- height: previewMinWidth * ratio,
2428
- transform: "scale(".concat(previewScale, ", ").concat(previewScale, ")"),
2429
- scale: previewScale,
2430
- scaledWidth: scaledWidth,
2431
- scaledHeight: scaledHeight
2432
- };
2433
- }, [previewMinWidth, columnRect]);
2434
- var itemsElements = !isTree ? items.map(function (_ref4, index) {
2435
- var _ref5;
2436
-
2437
- var _ref4$className = _ref4.className,
2438
- itemCustomClassName = _ref4$className === void 0 ? null : _ref4$className,
2439
- screen = _ref4.screen,
2440
- type = _ref4.type,
2441
- _ref4$onClick = _ref4.onClick,
2442
- onClick = _ref4$onClick === void 0 ? null : _ref4$onClick,
2443
- item = _objectWithoutProperties(_ref4, _excluded$2);
2826
+ var itemsElements = !isTree ? items.map(function (_ref2, index) {
2827
+ var _ref3;
2828
+
2829
+ var _ref2$className = _ref2.className,
2830
+ itemCustomClassName = _ref2$className === void 0 ? null : _ref2$className,
2831
+ screen = _ref2.screen,
2832
+ type = _ref2.type,
2833
+ _ref2$onClick = _ref2.onClick,
2834
+ onClick = _ref2$onClick === void 0 ? null : _ref2$onClick,
2835
+ active = _ref2.active,
2836
+ href = _ref2.href,
2837
+ item = _objectWithoutProperties(_ref2, _excluded$2);
2444
2838
 
2445
2839
  return /*#__PURE__*/React.createElement("li", {
2446
2840
  key: item.id,
2447
- className: classNames([styles$8.item, (_ref5 = {}, _defineProperty(_ref5, itemClassName, itemClassName !== null), _defineProperty(_ref5, itemCustomClassName, itemCustomClassName !== null), _ref5)]),
2448
- "data-screen-id": item.id,
2449
- ref: index === 0 ? containerRef : null
2841
+ className: classNames([styles$6.item, (_ref3 = {}, _defineProperty(_ref3, itemClassName, itemClassName !== null), _defineProperty(_ref3, itemCustomClassName, itemCustomClassName !== null), _ref3)]),
2842
+ "data-screen-id": item.id
2450
2843
  }, /*#__PURE__*/React.createElement(ScreenWithPreview, {
2451
2844
  index: index,
2452
- screen: _objectSpread(_objectSpread({}, screen), withPlaceholder ? {
2845
+ screen: withPlaceholder ? _objectSpread(_objectSpread({}, screen), {}, {
2453
2846
  type: type
2454
- } : null),
2455
- buttonClassName: buttonClassName,
2456
- previewStyle: previewStyle,
2847
+ }) : screen,
2848
+ href: href,
2849
+ className: buttonClassName,
2850
+ active: active,
2457
2851
  withPreview: withPreview,
2458
2852
  withPlaceholder: withPlaceholder,
2459
2853
  onClick: onClick,
2460
2854
  onClickItem: onClickItem
2461
2855
  }), settings !== null ? /*#__PURE__*/React.createElement("div", {
2462
- className: classNames([_defineProperty({}, settingsClassName, settingsClassName !== null), styles$8.settings, 'p-2'])
2856
+ className: classNames([_defineProperty({}, settingsClassName, settingsClassName !== null), styles$6.settings, 'p-2'])
2463
2857
  }, isFunction(settings) ? settings(index) : settings) : null);
2464
2858
  }) : [];
2465
2859
  var sortableItems = useMemo(function () {
2466
- return isTree ? items.map(function (_ref7) {
2467
- var id = _ref7.id,
2468
- _ref7$screen = _ref7.screen,
2469
- screen = _ref7$screen === void 0 ? {} : _ref7$screen,
2470
- props = _objectWithoutProperties(_ref7, _excluded2);
2860
+ return isTree ? items.map(function (_ref5) {
2861
+ var id = _ref5.id,
2862
+ _ref5$screen = _ref5.screen,
2863
+ screen = _ref5$screen === void 0 ? {} : _ref5$screen,
2864
+ href = _ref5.href,
2865
+ props = _objectWithoutProperties(_ref5, _excluded2);
2471
2866
 
2472
2867
  var _screen$parentId = screen.parentId,
2473
2868
  parentId = _screen$parentId === void 0 ? null : _screen$parentId,
2474
2869
  _screen$group = screen.group,
2475
2870
  group = _screen$group === void 0 ? {} : _screen$group;
2476
2871
 
2477
- var _ref8 = group || {},
2478
- _ref8$collapsed = _ref8.collapsed,
2479
- collapsed = _ref8$collapsed === void 0 ? true : _ref8$collapsed;
2872
+ var _ref6 = group || {},
2873
+ _ref6$collapsed = _ref6.collapsed,
2874
+ collapsed = _ref6$collapsed === void 0 ? true : _ref6$collapsed;
2480
2875
 
2481
- return _objectSpread({
2876
+ return {
2482
2877
  id: id,
2483
2878
  parentId: parentId,
2484
2879
  collapsed: collapsed,
2485
- value: {
2880
+ value: _objectSpread({
2486
2881
  id: id,
2487
- screen: screen
2488
- }
2489
- }, props);
2490
- }, []) : items.map(function (_ref9) {
2491
- var id = _ref9.id;
2882
+ screen: screen,
2883
+ href: href
2884
+ }, props)
2885
+ };
2886
+ }, []) : items.map(function (_ref7) {
2887
+ var id = _ref7.id;
2492
2888
  return {
2493
2889
  id: id
2494
2890
  };
2495
2891
  });
2496
- }, [items, isTree]);
2892
+ }, [items, isTree, items.length]);
2497
2893
  return /*#__PURE__*/React.createElement("div", {
2498
- className: classNames([styles$8.container, (_ref10 = {}, _defineProperty(_ref10, styles$8.noWrap, noWrap), _defineProperty(_ref10, styles$8.isVertical, isVertical), _defineProperty(_ref10, styles$8.isTree, isTree), _defineProperty(_ref10, styles$8.withPlaceholder, withPlaceholder), _defineProperty(_ref10, className, className), _ref10)]),
2499
- ref: columnRef
2894
+ className: classNames([styles$6.container, (_ref8 = {}, _defineProperty(_ref8, styles$6.noWrap, noWrap), _defineProperty(_ref8, styles$6.isVertical, isVertical), _defineProperty(_ref8, styles$6.isTree, isTree), _defineProperty(_ref8, styles$6.withPlaceholder, withPlaceholder), _defineProperty(_ref8, className, className), _ref8)])
2500
2895
  }, isTree && !sortable ? /*#__PURE__*/React.createElement(SortableTree, {
2501
2896
  items: sortableItems,
2502
2897
  component: ScreenWithPreview,
2503
- itemStyle: treeStyle,
2504
2898
  onClickItem: onClickItem,
2505
2899
  onChange: onOrderChange
2506
2900
  }) : null, !isTree && sortable && items.length > 1 ? /*#__PURE__*/React.createElement(ReactSortable, {
@@ -2510,16 +2904,16 @@ var ScreensMenu = function ScreensMenu(_ref) {
2510
2904
  delayOnTouchStart: true,
2511
2905
  delay: 2,
2512
2906
  tag: "ul",
2513
- className: styles$8.items
2907
+ className: styles$6.items
2514
2908
  }, itemsElements) : null, !isTree && (!sortable || items.length < 1) ? /*#__PURE__*/React.createElement("ul", {
2515
- className: styles$8.items
2909
+ className: styles$6.items
2516
2910
  }, itemsElements) : null);
2517
2911
  };
2518
2912
 
2519
2913
  ScreensMenu.propTypes = propTypes$7;
2520
2914
  ScreensMenu.defaultProps = defaultProps$7;
2521
2915
 
2522
- var styles$2 = {"container":"micromag-editor-menus-screen-types-container","row":"micromag-editor-menus-screen-types-row","title":"micromag-editor-menus-screen-types-title"};
2916
+ 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"};
2523
2917
 
2524
2918
  var propTypes$6 = {
2525
2919
  screens: PropTypes$1.screenDefinitions,
@@ -2615,13 +3009,12 @@ var ScreenTypes = function ScreenTypes(_ref) {
2615
3009
  }, /*#__PURE__*/React.createElement(ScreensMenu, {
2616
3010
  items: items,
2617
3011
  withPlaceholder: true,
2618
- itemClassName: classNames(['border', 'rounded', {
3012
+ itemClassName: classNames([styles$2.screen, 'border', 'rounded', {
2619
3013
  'border-secondary': selectedTypes === null,
2620
3014
  'border-dark': selectedTypes !== null,
2621
3015
  'bg-secondary': selectedTypes === null,
2622
3016
  'text-secondary': selectedTypes !== null
2623
3017
  }]),
2624
- previewMinWidth: 100,
2625
3018
  onClickItem: onClickItem
2626
3019
  })));
2627
3020
  })));
@@ -2765,54 +3158,62 @@ var EditorScreens = function EditorScreens(_ref) {
2765
3158
  return newScreen;
2766
3159
  }, [value, onChange, isTheme, screens, currentScreenId, setCreateModalOpened]);
2767
3160
  var onOrderChange = useCallback(function (listItems) {
2768
- // const ids = listItems.map(({ id }) => id);
2769
- var screenProps = listItems.map(function (_ref7) {
2770
- var id = _ref7.id,
2771
- _ref7$props = _ref7.props,
2772
- props = _ref7$props === void 0 ? null : _ref7$props;
3161
+ var ids = listItems.map(function (_ref7) {
3162
+ var id = _ref7.id;
3163
+ return id;
3164
+ });
3165
+ var screenProps = listItems.map(function (_ref8) {
3166
+ var id = _ref8.id,
3167
+ _ref8$props = _ref8.props,
3168
+ props = _ref8$props === void 0 ? null : _ref8$props;
2773
3169
  return {
2774
3170
  id: id,
2775
3171
  props: props
2776
3172
  };
2777
3173
  });
2778
- var hasScreenProps = (screenProps.filter(function (_ref8) {
2779
- var props = _ref8.props;
3174
+ var hasScreenProps = (screenProps.filter(function (_ref9) {
3175
+ var props = _ref9.props;
2780
3176
  return props !== null;
2781
3177
  }) || []).length > 0;
2782
3178
 
2783
- var _ref9 = value || {},
2784
- _ref9$components = _ref9.components,
2785
- currentScreens = _ref9$components === void 0 ? [] : _ref9$components;
3179
+ var _ref10 = value || {},
3180
+ _ref10$components = _ref10.components,
3181
+ currentScreens = _ref10$components === void 0 ? [] : _ref10$components;
2786
3182
 
2787
- var currentIds = currentScreens.map(function (_ref10) {
2788
- var id = _ref10.id;
3183
+ var currentIds = currentScreens.map(function (_ref11) {
3184
+ var id = _ref11.id;
2789
3185
  return id;
2790
3186
  });
2791
- var sameOrder = listItems.reduce(function (same, _ref11, index) {
2792
- var id = _ref11.id;
3187
+ var sameOrder = listItems.reduce(function (same, _ref12, index) {
3188
+ var id = _ref12.id;
2793
3189
  return same && id === currentIds[index];
2794
3190
  }, true);
2795
3191
 
2796
3192
  if (!sameOrder || hasScreenProps) {
3193
+ console.log('order', ids);
3194
+
2797
3195
  var newValue = _objectSpread(_objectSpread({}, value), {}, {
2798
- components: _toConsumableArray(currentScreens) // .sort(({ id: idA }, { id: idB }) => {
2799
- // const indexA = ids.indexOf(idA);
2800
- // const indexB = ids.indexOf(idB);
2801
- // if (indexA === indexB) {
2802
- // return 0;
2803
- // }
2804
- // return indexA > indexB ? 1 : -1;
2805
- // })
2806
- .map(function (_ref12) {
3196
+ components: _toConsumableArray(currentScreens).sort(function (_ref13, _ref14) {
3197
+ var idA = _ref13.id;
3198
+ var idB = _ref14.id;
3199
+ var indexA = ids.indexOf(idA);
3200
+ var indexB = ids.indexOf(idB);
3201
+
3202
+ if (indexA === indexB) {
3203
+ return 0;
3204
+ }
3205
+
3206
+ return indexA > indexB ? 1 : -1;
3207
+ }).map(function (_ref15) {
2807
3208
  var _screenProps$find;
2808
3209
 
2809
- var id = _ref12.id,
2810
- props = _objectWithoutProperties(_ref12, _excluded$1);
3210
+ var id = _ref15.id,
3211
+ props = _objectWithoutProperties(_ref15, _excluded$1);
2811
3212
 
2812
3213
  return _objectSpread(_objectSpread({
2813
3214
  id: id
2814
- }, props), (_screenProps$find = screenProps.find(function (_ref13) {
2815
- var propsId = _ref13.id;
3215
+ }, props), (_screenProps$find = screenProps.find(function (_ref16) {
3216
+ var propsId = _ref16.id;
2816
3217
  return propsId === id;
2817
3218
  })) === null || _screenProps$find === void 0 ? void 0 : _screenProps$find.props);
2818
3219
  })
@@ -2825,8 +3226,8 @@ var EditorScreens = function EditorScreens(_ref) {
2825
3226
  }, [value, onChange]);
2826
3227
  var onClickScreenType = useCallback(function (definition) {
2827
3228
  setCreateModalOpened(false);
2828
- var currentScreen = isTheme ? screens.find(function (_ref14) {
2829
- var type = _ref14.type;
3229
+ var currentScreen = isTheme ? screens.find(function (_ref17) {
3230
+ var type = _ref17.type;
2830
3231
  return type === definition.id;
2831
3232
  }) || null : null;
2832
3233
 
@@ -2844,16 +3245,17 @@ var EditorScreens = function EditorScreens(_ref) {
2844
3245
  }, [setCreateModalOpened]);
2845
3246
  var onCreateModalRequestClose = useCallback(function () {
2846
3247
  return setCreateModalOpened(false);
2847
- }, [setCreateModalOpened]);
3248
+ }, [setCreateModalOpened]); // console.log(screens);
3249
+
2848
3250
  return /*#__PURE__*/React.createElement("div", {
2849
- className: classNames(['d-flex', 'flex-column', styles$9.container, className])
3251
+ className: classNames(['d-flex', 'flex-column', styles$7.container, className])
2850
3252
  }, /*#__PURE__*/React.createElement(Navbar, {
2851
3253
  compact: true,
2852
3254
  noWrap: true,
2853
3255
  withoutCollapse: true,
2854
- className: classNames(['sticky-top', styles$9.navbar])
3256
+ className: classNames(['sticky-top', styles$7.navbar])
2855
3257
  }, /*#__PURE__*/React.createElement("strong", {
2856
- className: "mb-0 mr-auto"
3258
+ className: "mb-0 me-auto"
2857
3259
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
2858
3260
  id: "jf+4Hq",
2859
3261
  defaultMessage: [{
@@ -2871,9 +3273,9 @@ var EditorScreens = function EditorScreens(_ref) {
2871
3273
  className: "flex-grow-1 d-flex w-100 p-2"
2872
3274
  }, /*#__PURE__*/React.createElement(Route, {
2873
3275
  path: [routes.screen, routes.home],
2874
- render: function render(_ref15) {
2875
- var _ref15$match$params$s = _ref15.match.params.screen,
2876
- screenId = _ref15$match$params$s === void 0 ? null : _ref15$match$params$s;
3276
+ render: function render(_ref18) {
3277
+ var _ref18$match$params$s = _ref18.match.params.screen,
3278
+ screenId = _ref18$match$params$s === void 0 ? null : _ref18$match$params$s;
2877
3279
  return screens.length > 0 ? /*#__PURE__*/React.createElement(ScreensMenu, {
2878
3280
  items: screens.map(function (it) {
2879
3281
  return {
@@ -2906,8 +3308,8 @@ var EditorScreens = function EditorScreens(_ref) {
2906
3308
  })));
2907
3309
  }
2908
3310
  })), createModalOpened ? /*#__PURE__*/React.createElement(ScreenTypesModal, {
2909
- selectedTypes: isTheme ? screens.map(function (_ref16) {
2910
- var type = _ref16.type;
3311
+ selectedTypes: isTheme ? screens.map(function (_ref19) {
3312
+ var type = _ref19.type;
2911
3313
  return type;
2912
3314
  }) : [],
2913
3315
  onClickScreenType: onClickScreenType,
@@ -3053,21 +3455,21 @@ var Editor = function Editor(_ref) {
3053
3455
  return /*#__PURE__*/React.createElement(ModalsProvider, null, /*#__PURE__*/React.createElement(PanelsProvider, null, /*#__PURE__*/React.createElement(ScreenSizeProvider, {
3054
3456
  size: screenSize
3055
3457
  }, /*#__PURE__*/React.createElement("div", {
3056
- className: classNames([styles$h.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3057
- return styles$h["screen-".concat(screenName)];
3058
- }) : null, (_ref5 = {}, _defineProperty(_ref5, styles$h.fullscreen, fullscreen), _defineProperty(_ref5, className, className), _ref5)]),
3458
+ className: classNames([styles$i.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3459
+ return styles$i["screen-".concat(screenName)];
3460
+ }) : null, (_ref5 = {}, _defineProperty(_ref5, styles$i.fullscreen, fullscreen), _defineProperty(_ref5, className, className), _ref5)]),
3059
3461
  ref: refContainer
3060
3462
  }, /*#__PURE__*/React.createElement(Navbar, {
3061
3463
  theme: "light",
3062
3464
  compact: true,
3063
3465
  noWrap: true,
3064
3466
  withoutCollapse: true,
3065
- className: styles$h.top
3467
+ className: styles$i.top
3066
3468
  }, mobileView !== 'screens' ? /*#__PURE__*/React.createElement(Button, {
3067
3469
  size: "sm",
3068
3470
  theme: "secondary",
3069
3471
  onClick: onClickScreens,
3070
- className: "mr-auto"
3472
+ className: "me-auto"
3071
3473
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
3072
3474
  id: "wkysUu",
3073
3475
  defaultMessage: [{
@@ -3095,9 +3497,9 @@ var Editor = function Editor(_ref) {
3095
3497
  "value": "View screen"
3096
3498
  }]
3097
3499
  })) : null), /*#__PURE__*/React.createElement("div", {
3098
- className: styles$h.inner
3500
+ className: styles$i.inner
3099
3501
  }, /*#__PURE__*/React.createElement("div", {
3100
- className: classNames([styles$h.left, _defineProperty({}, styles$h.visible, !isMobile || mobileView === 'screens')]),
3502
+ className: classNames([styles$i.left, _defineProperty({}, styles$i.visible, !isMobile || mobileView === 'screens')]),
3101
3503
  ref: refScreensContainer
3102
3504
  }, /*#__PURE__*/React.createElement(EditorScreens, {
3103
3505
  value: story,
@@ -3107,24 +3509,25 @@ var Editor = function Editor(_ref) {
3107
3509
  onChange: onStoryChange,
3108
3510
  onClickScreen: onClickScreen,
3109
3511
  isVertical: !isMobile,
3110
- className: styles$h.inner,
3512
+ className: styles$i.inner,
3111
3513
  isTree: true
3112
3514
  })), /*#__PURE__*/React.createElement("div", {
3113
- className: classNames([styles$h.center, _defineProperty({}, styles$h.visible, !isMobile || mobileView === 'preview')])
3515
+ className: classNames([styles$i.center, _defineProperty({}, styles$i.visible, !isMobile || mobileView === 'preview')])
3114
3516
  }, /*#__PURE__*/React.createElement(EditorPreview, {
3115
3517
  value: story,
3116
3518
  isTheme: isTheme,
3117
3519
  viewerTheme: viewerTheme,
3118
- className: styles$h.preview,
3119
- onScreenChange: onPreviewScreenChange
3520
+ className: styles$i.preview,
3521
+ onScreenChange: onPreviewScreenChange,
3522
+ onChange: onStoryChange
3120
3523
  })), /*#__PURE__*/React.createElement("div", {
3121
- className: classNames([styles$h.right, _defineProperty({}, styles$h.visible, !isMobile || mobileView === 'form')])
3524
+ className: classNames([styles$i.right, _defineProperty({}, styles$i.visible, !isMobile || mobileView === 'form')])
3122
3525
  }, /*#__PURE__*/React.createElement(EditForm, {
3123
3526
  key: screenId,
3124
3527
  value: story,
3125
3528
  isTheme: isTheme,
3126
3529
  onChange: onStoryChange,
3127
- className: styles$h.inner
3530
+ className: styles$i.inner
3128
3531
  }))), /*#__PURE__*/React.createElement(Modals, null)))));
3129
3532
  };
3130
3533