@micromag/editor 0.3.538 → 0.3.540

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 ADDED
@@ -0,0 +1,3549 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
+ import { PropTypes as PropTypes$1 } from '@micromag/core';
5
+ import { Button, FieldForm, BackButton, Breadcrumb as Breadcrumb$2, Modal, ModalDialog, Label, Navbar, DropdownMenu, Empty, Tabs, ScreenPlaceholder, ScreenPreview, Modals } from '@micromag/core/components';
6
+ import { useRoutes, useScreenDefinition, useFormsComponents, useScreensManager, useFieldsManager, useFieldsComponentsManager, useUrlGenerator, useRoutePush, ScreenProvider, useScreenSize, PlaybackProvider, ModalsProvider, PanelsProvider, ScreenSizeProvider, useFieldComponent, ComponentsProvider, FORMS_NAMESPACE, StoryProvider, GoogleKeysProvider, GoogleMapsClientProvider, FontsProvider, EditorProvider, VisitorProvider, ComponentsContext, RoutesProvider } from '@micromag/core/contexts';
7
+ import { useIsVisible, useParsedStory, useDimensionObserver, useScreenSizeFromElement, useMediasParser } from '@micromag/core/hooks';
8
+ import { getScreenFieldsWithStates, getScreenExtraField, isMessage, slug, getComponentFromName, getDeviceScreens } from '@micromag/core/utils';
9
+ import classNames from 'classnames';
10
+ import PropTypes from 'prop-types';
11
+ import React, { useMemo, useRef, useCallback, useState, forwardRef, useEffect } from 'react';
12
+ import { useIntl, FormattedMessage } from 'react-intl';
13
+ import { useRouteMatcher, createPathToRegexpParser, useMemoryRouter } from '@folklore/routes';
14
+ import { useLocation, Switch, Route, Router } from 'wouter';
15
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
16
+ import { TransitionGroup, CSSTransition } from 'react-transition-group';
17
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
18
+ import { faCogs } from '@fortawesome/free-solid-svg-icons/faCogs';
19
+ import { faEllipsisV } from '@fortawesome/free-solid-svg-icons/faEllipsisV';
20
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
21
+ import { Fields, FieldsProvider } from '@micromag/fields';
22
+ import { v1 } from 'uuid';
23
+ import { getSizeWithinBounds } from '@folklore/size';
24
+ import { Viewer } from '@micromag/viewer';
25
+ import _toArray from '@babel/runtime/helpers/toArray';
26
+ import { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';
27
+ import { faTimesCircle } from '@fortawesome/free-solid-svg-icons/faTimesCircle';
28
+ import isString from 'lodash/isString';
29
+ import isFunction from 'lodash/isFunction';
30
+ import { ReactSortable } from 'react-sortablejs';
31
+ import { KeyboardCode, closestCorners, getFirstCollision, getClientRect, MeasuringStrategy, defaultDropAnimation, useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter, DragOverlay } from '@dnd-kit/core';
32
+ import { arrayMove, useSortable, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
33
+ import { createPortal } from 'react-dom';
34
+ import _createForOfIteratorHelper from '@babel/runtime/helpers/createForOfIteratorHelper';
35
+ import { CSS } from '@dnd-kit/utilities';
36
+ import { faAngleDown } from '@fortawesome/free-solid-svg-icons/faAngleDown';
37
+ import { faGripLines } from '@fortawesome/free-solid-svg-icons/faGripLines';
38
+ import { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';
39
+ import orderBy from 'lodash/orderBy';
40
+ import { UppyProvider } from '@panneau/uppy';
41
+ import { ScreensProvider } from '@micromag/screens';
42
+
43
+ var useRouteParams = function useRouteParams() {
44
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
45
+ _ref$screenOnly = _ref.screenOnly,
46
+ screenOnly = _ref$screenOnly === void 0 ? false : _ref$screenOnly;
47
+ var routes = useRoutes();
48
+ var _useLocation = useLocation(),
49
+ _useLocation2 = _slicedToArray(_useLocation, 1),
50
+ location = _useLocation2[0];
51
+ var matcher = useRouteMatcher();
52
+ var _useMemo = useMemo(function () {
53
+ var paths = screenOnly ? [routes.screen, '/:screen/*', '*'] : [routes['screen.field.form'], routes['screen.field'], routes.screen, '*'];
54
+ return paths.reduce(function (currentParams, path) {
55
+ if (currentParams !== null) {
56
+ return currentParams;
57
+ }
58
+ var _matcher = matcher(path),
59
+ _matcher2 = _slicedToArray(_matcher, 2),
60
+ _matcher2$ = _matcher2[0],
61
+ match = _matcher2$ === void 0 ? false : _matcher2$,
62
+ params = _matcher2[1];
63
+ return match ? params : currentParams;
64
+ }, null) || {};
65
+ }, [routes, screenOnly, location, matcher]),
66
+ _useMemo$screen = _useMemo.screen,
67
+ screen = _useMemo$screen === void 0 ? null : _useMemo$screen,
68
+ _useMemo$field = _useMemo.field,
69
+ field = _useMemo$field === void 0 ? null : _useMemo$field,
70
+ _useMemo$form = _useMemo.form,
71
+ form = _useMemo$form === void 0 ? null : _useMemo$form;
72
+ var routeParams = useMemo(function () {
73
+ return screenOnly ? {
74
+ url: location,
75
+ screen: screen
76
+ } : {
77
+ url: location,
78
+ screen: screen,
79
+ field: field,
80
+ form: form
81
+ };
82
+ }, [screenOnly, location, screen, field, form]);
83
+ return routeParams;
84
+ };
85
+
86
+ var useFormTransition = function useFormTransition(url, screenIndex, styles) {
87
+ var lastPageRef = useRef({
88
+ url: url,
89
+ screenIndex: screenIndex
90
+ });
91
+ var direction = useMemo(function () {
92
+ var _lastPageRef$current = lastPageRef.current,
93
+ lastScreenIndex = _lastPageRef$current.screenIndex,
94
+ lastUrl = _lastPageRef$current.url;
95
+ lastPageRef.current.url = url;
96
+ lastPageRef.current.screenIndex = screenIndex;
97
+ if (screenIndex !== lastScreenIndex) {
98
+ // return screenIndex > lastScreenIndex ? 'bottom' : 'top';
99
+ return null;
100
+ }
101
+ var urlSplit = url.split('/');
102
+ var lastUrlSplit = lastUrl.split('/');
103
+ var currentPartsCount = urlSplit.length;
104
+ var previousPartsCount = lastUrlSplit.length;
105
+ var isSettings = urlSplit[currentPartsCount - 1] === 'settings';
106
+ var wasSettings = lastUrlSplit[previousPartsCount - 1] === 'settings';
107
+ currentPartsCount -= isSettings ? 1 : 0;
108
+ previousPartsCount -= wasSettings ? 1 : 0;
109
+ return currentPartsCount >= previousPartsCount ? 'right' : 'left';
110
+ }, [url, screenIndex]);
111
+ var transitionClassNames = useMemo(function () {
112
+ return {
113
+ enter: classNames(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles.enterRight, direction === 'right'), styles.enterLeft, direction === 'left'), styles.enterTop, direction === 'top'), styles.enterBottom, direction === 'bottom')) || 'none',
114
+ enterActive: classNames(_defineProperty(_defineProperty({}, styles.enterActiveHorizontal, direction === 'left' || direction === 'right'), styles.enterActiveVertical, direction === 'top' || direction === 'bottom')) || 'none',
115
+ exit: styles.exit || 'none',
116
+ exitActive: classNames(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles.exitActiveRight, direction === 'right'), styles.exitActiveLeft, direction === 'left'), styles.exitActiveTop, direction === 'top'), styles.exitActiveBottom, direction === 'bottom')) || 'none'
117
+ };
118
+ }, [direction, screenIndex]);
119
+ return {
120
+ direction: direction,
121
+ classNames: transitionClassNames,
122
+ timeout: direction === 'left' || direction === 'right' ? 300 : 10
123
+ };
124
+ };
125
+
126
+ var createScreen = function createScreen(definition) {
127
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
128
+ var finalDefinition = isString(definition) ? {
129
+ id: definition
130
+ } : definition;
131
+ var id = finalDefinition.id;
132
+ var screenFields = getScreenFieldsWithStates(finalDefinition);
133
+ var defaultValueFields = screenFields.reduce(function (all, curr) {
134
+ var _ref = curr || {},
135
+ _ref$name = _ref.name,
136
+ name = _ref$name === void 0 ? null : _ref$name,
137
+ _ref$defaultValue = _ref.defaultValue,
138
+ defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue;
139
+ var newAll = _objectSpread({}, all);
140
+ if (name !== null && defaultValue !== null) {
141
+ newAll[name] = defaultValue;
142
+ }
143
+ return newAll;
144
+ }, {});
145
+ return _objectSpread(_objectSpread(_objectSpread({
146
+ type: id
147
+ }, defaultValueFields), data), {}, {
148
+ id: v1()
149
+ });
150
+ };
151
+ var createScreen$1 = createScreen;
152
+
153
+ var _excluded$c = ["components"];
154
+ var deleteScreen = function deleteScreen(story, screenId) {
155
+ var _ref = story || {},
156
+ _ref$components = _ref.components,
157
+ components = _ref$components === void 0 ? [] : _ref$components,
158
+ currentValue = _objectWithoutProperties(_ref, _excluded$c);
159
+ return _objectSpread(_objectSpread({}, currentValue), {}, {
160
+ components: components.filter(function (_ref2) {
161
+ var id = _ref2.id;
162
+ return id !== screenId;
163
+ })
164
+ });
165
+ };
166
+
167
+ var _excluded$b = ["components"];
168
+ var duplicateScreen = function duplicateScreen(story, screenId) {
169
+ var screenIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
170
+ var _ref = story || {},
171
+ _ref$components = _ref.components,
172
+ components = _ref$components === void 0 ? [] : _ref$components,
173
+ currentValue = _objectWithoutProperties(_ref, _excluded$b);
174
+ var screen = components.find(function (it) {
175
+ return it.id === screenId;
176
+ }) || null;
177
+ return _objectSpread(_objectSpread({}, currentValue), {}, {
178
+ components: screen !== null ? screenIndex !== null && screenIndex > -1 ? [].concat(_toConsumableArray(components.slice(0, screenIndex + 1)), [_objectSpread(_objectSpread({}, screen), {}, {
179
+ id: v1()
180
+ })], _toConsumableArray(components.slice(screenIndex + 1))) : [].concat(_toConsumableArray(components), [_objectSpread(_objectSpread({}, screen), {}, {
181
+ id: v1()
182
+ })]) : components
183
+ });
184
+ };
185
+
186
+ var _excluded$a = ["components"];
187
+ var updateScreen = function updateScreen(story, newScreenValue) {
188
+ var newScreenId = newScreenValue.id;
189
+ var _ref = story || {},
190
+ _ref$components = _ref.components,
191
+ components = _ref$components === void 0 ? [] : _ref$components,
192
+ currentValue = _objectWithoutProperties(_ref, _excluded$a);
193
+ var index = components.findIndex(function (it) {
194
+ return it.id === newScreenId;
195
+ });
196
+ return _objectSpread(_objectSpread({}, currentValue), {}, {
197
+ components: [].concat(_toConsumableArray(components.slice(0, index)), [_objectSpread(_objectSpread({}, components[index]), newScreenValue)], _toConsumableArray(components.slice(index + 1)))
198
+ });
199
+ };
200
+
201
+ var getFieldByName = function getFieldByName(fields, name) {
202
+ return fields.reduce(function (foundField, it) {
203
+ if (foundField !== null) {
204
+ return foundField;
205
+ }
206
+ var _it$name = it.name,
207
+ fieldName = _it$name === void 0 ? null : _it$name,
208
+ _it$fields = it.fields,
209
+ subFields = _it$fields === void 0 ? [] : _it$fields;
210
+ if (name !== null && fieldName === name) {
211
+ return it;
212
+ }
213
+ return getFieldByName(subFields, name);
214
+ }, null);
215
+ };
216
+
217
+ var _excluded$9 = ["className", "dots"];
218
+ var propTypes$o = {
219
+ dots: PropTypes.bool,
220
+ className: PropTypes.string
221
+ };
222
+ var defaultProps$o = {
223
+ dots: false,
224
+ className: null
225
+ };
226
+ var SettingsButton = function SettingsButton(_ref) {
227
+ var className = _ref.className,
228
+ dots = _ref.dots,
229
+ props = _objectWithoutProperties(_ref, _excluded$9);
230
+ return /*#__PURE__*/React.createElement(Button, Object.assign({
231
+ className: className,
232
+ theme: "secondary",
233
+ size: "sm",
234
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
235
+ icon: dots ? faEllipsisV : faCogs
236
+ })
237
+ }, props));
238
+ };
239
+ SettingsButton.propTypes = propTypes$o;
240
+ SettingsButton.defaultProps = defaultProps$o;
241
+ var SettingsButton$1 = SettingsButton;
242
+
243
+ var _excluded$8 = ["name", "form"];
244
+ var propTypes$n = {
245
+ name: PropTypes.string,
246
+ form: PropTypes.string,
247
+ children: PropTypes.node
248
+ };
249
+ var defaultProps$n = {
250
+ name: null,
251
+ form: null,
252
+ children: null
253
+ };
254
+ var FieldWithContexts = function FieldWithContexts(_ref) {
255
+ var name = _ref.name,
256
+ form = _ref.form,
257
+ props = _objectWithoutProperties(_ref, _excluded$8);
258
+ var definition = useScreenDefinition() || null;
259
+ var _definition$states = definition.states,
260
+ states = _definition$states === void 0 ? null : _definition$states;
261
+ var screenFields = getScreenFieldsWithStates(definition);
262
+ var nameParts = name.split('.');
263
+ var _nameParts = _slicedToArray(nameParts, 1),
264
+ _nameParts$ = _nameParts[0],
265
+ stateId = _nameParts$ === void 0 ? null : _nameParts$;
266
+ var currentState = states !== null ? states.find(function (_ref2) {
267
+ var id = _ref2.id;
268
+ return id === stateId;
269
+ }) || null : null;
270
+ var finalNameParts = nameParts;
271
+ var _ref3 = currentState || {},
272
+ _ref3$repeatable = _ref3.repeatable,
273
+ repeatable = _ref3$repeatable === void 0 ? false : _ref3$repeatable,
274
+ _ref3$fieldName = _ref3.fieldName,
275
+ fieldName = _ref3$fieldName === void 0 ? null : _ref3$fieldName,
276
+ _ref3$fields = _ref3.fields,
277
+ stateFields = _ref3$fields === void 0 ? [] : _ref3$fields;
278
+ var finalScreenFields = fieldName !== null && stateId !== null ? screenFields.filter(function (_ref4) {
279
+ var itemName = _ref4.name,
280
+ fieldStateId = _ref4.stateId;
281
+ return fieldName !== itemName || stateId === fieldStateId || fieldStateId === null;
282
+ }) : screenFields;
283
+ if (currentState !== null) {
284
+ finalNameParts = (repeatable || fieldName !== null) && nameParts.length <= (repeatable ? 2 : 1) ? [fieldName || stateId].concat(_toConsumableArray(nameParts.slice(1))) : nameParts.slice(1);
285
+ }
286
+ var formComponents = useFormsComponents();
287
+ return definition !== null ? /*#__PURE__*/React.createElement("div", {
288
+ className: classNames({
289
+ 'p-2': form === null
290
+ })
291
+ }, finalNameParts.length > 0 ? /*#__PURE__*/React.createElement(FieldForm, Object.assign({
292
+ fields: finalScreenFields,
293
+ formComponents: formComponents,
294
+ name: finalNameParts.join('.'),
295
+ form: form
296
+ }, props)) : /*#__PURE__*/React.createElement(Fields, Object.assign({
297
+ fields: stateFields
298
+ }, props))) : null;
299
+ };
300
+ FieldWithContexts.propTypes = propTypes$n;
301
+ FieldWithContexts.defaultProps = defaultProps$n;
302
+ var FieldWithContexts$1 = FieldWithContexts;
303
+
304
+ var styles$i = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
305
+
306
+ var propTypes$m = {
307
+ value: PropTypes$1.component,
308
+ className: PropTypes.string,
309
+ gotoFieldForm: PropTypes.func.isRequired,
310
+ closeFieldForm: PropTypes.func.isRequired,
311
+ onChange: PropTypes.func
312
+ // onClickDelete: PropTypes.func,
313
+ };
314
+ var defaultProps$m = {
315
+ value: null,
316
+ className: null,
317
+ onChange: null
318
+ // onClickDelete: null,
319
+ };
320
+ var ScreenForm = function ScreenForm(_ref) {
321
+ var value = _ref.value,
322
+ className = _ref.className,
323
+ gotoFieldForm = _ref.gotoFieldForm,
324
+ closeFieldForm = _ref.closeFieldForm,
325
+ onChange = _ref.onChange;
326
+ var _useScreenDefinition = useScreenDefinition(),
327
+ _useScreenDefinition$ = _useScreenDefinition.fields,
328
+ fields = _useScreenDefinition$ === void 0 ? [] : _useScreenDefinition$;
329
+ // const intl = useIntl();
330
+ // const finalOnClickDelete = useCallback(() => {
331
+ // if (
332
+ // onClickDelete !== null &&
333
+ // window.confirm(
334
+ // intl.formatMessage({
335
+ // defaultMessage: 'Are you sure you want to delete this screen?',
336
+ // description: 'Confirm message when deleting a screen',
337
+ // }),
338
+ // )
339
+ // ) {
340
+ // onClickDelete(value);
341
+ // }
342
+ // }, [intl, onClickDelete, value]);
343
+ return /*#__PURE__*/React.createElement("div", {
344
+ className: classNames([styles$i.container, _defineProperty({}, className, className)])
345
+ }, /*#__PURE__*/React.createElement("div", {
346
+ className: styles$i.inner
347
+ }, fields !== null ? /*#__PURE__*/React.createElement(Fields, {
348
+ fields: fields,
349
+ value: value,
350
+ onChange: onChange,
351
+ gotoFieldForm: gotoFieldForm,
352
+ closeFieldForm: closeFieldForm
353
+ }) : null));
354
+ };
355
+ ScreenForm.propTypes = propTypes$m;
356
+ ScreenForm.defaultProps = defaultProps$m;
357
+ var ScreenForm$1 = ScreenForm;
358
+
359
+ var styles$h = {"container":"micromag-editor-menus-breadcrumb-container"};
360
+
361
+ var propTypes$l = {
362
+ story: PropTypes$1.story,
363
+ screenId: PropTypes.string,
364
+ field: PropTypes.string,
365
+ form: PropTypes.string,
366
+ url: PropTypes.string.isRequired,
367
+ className: PropTypes.string
368
+ };
369
+ var defaultProps$l = {
370
+ story: null,
371
+ screenId: null,
372
+ field: null,
373
+ form: null,
374
+ className: null
375
+ };
376
+ var Breadcrumb = function Breadcrumb(_ref) {
377
+ var story = _ref.story,
378
+ screenId = _ref.screenId,
379
+ field = _ref.field,
380
+ form = _ref.form,
381
+ url = _ref.url,
382
+ className = _ref.className;
383
+ var intl = useIntl();
384
+ var _ref2 = story || {},
385
+ _ref2$components = _ref2.components,
386
+ screens = _ref2$components === void 0 ? [] : _ref2$components;
387
+ var _useLocation = useLocation(),
388
+ _useLocation2 = _slicedToArray(_useLocation, 2),
389
+ setLocation = _useLocation2[1];
390
+ var screensManager = useScreensManager();
391
+ var fieldsManager = useFieldsManager();
392
+ var fieldsComponentManager = useFieldsComponentsManager();
393
+ var route = useUrlGenerator();
394
+ var _useMemo = useMemo(function () {
395
+ var screenIndex = screens.findIndex(function (it) {
396
+ return it.id === screenId;
397
+ });
398
+ if (!screens[screenIndex]) {
399
+ return {};
400
+ }
401
+ var _screens$screenIndex = screens[screenIndex],
402
+ type = _screens$screenIndex.type,
403
+ _screens$screenIndex$ = _screens$screenIndex.parameters,
404
+ parameters = _screens$screenIndex$ === void 0 ? null : _screens$screenIndex$;
405
+ var definition = screensManager.getDefinition(type);
406
+ var _ref3 = definition || {},
407
+ _ref3$states = _ref3.states,
408
+ states = _ref3$states === void 0 ? null : _ref3$states,
409
+ _ref3$title = _ref3.title,
410
+ definitionTitle = _ref3$title === void 0 ? null : _ref3$title;
411
+ return {
412
+ title: definitionTitle,
413
+ fields: definition !== null ? [].concat(_toConsumableArray(getScreenFieldsWithStates(definition)), [getScreenExtraField(intl)]) : null,
414
+ states: states,
415
+ parameters: parameters
416
+ };
417
+ }, [screens, screenId, screensManager, intl]),
418
+ _useMemo$title = _useMemo.title,
419
+ screenTitle = _useMemo$title === void 0 ? null : _useMemo$title,
420
+ _useMemo$fields = _useMemo.fields,
421
+ screenFields = _useMemo$fields === void 0 ? [] : _useMemo$fields,
422
+ _useMemo$states = _useMemo.states,
423
+ screenStates = _useMemo$states === void 0 ? null : _useMemo$states,
424
+ _useMemo$parameters = _useMemo.parameters,
425
+ screenParameters = _useMemo$parameters === void 0 ? null : _useMemo$parameters;
426
+ var items = useMemo(function () {
427
+ var fieldItems = [];
428
+ var currentState = null;
429
+ if (field !== null) {
430
+ var fieldPath = field.split('/');
431
+
432
+ // Get state and remove it from path. Replace it with field name if necessary (repeatable or fieldName present)
433
+ var _fieldPath = _slicedToArray(fieldPath, 1),
434
+ _fieldPath$ = _fieldPath[0],
435
+ stateId = _fieldPath$ === void 0 ? null : _fieldPath$;
436
+ currentState = screenStates !== null ? screenStates.find(function (_ref4) {
437
+ var id = _ref4.id;
438
+ return id === stateId;
439
+ }) || null : null;
440
+ var finalFieldPath = fieldPath;
441
+ if (currentState !== null) {
442
+ var _ref5 = currentState || {},
443
+ _ref5$repeatable = _ref5.repeatable,
444
+ repeatable = _ref5$repeatable === void 0 ? false : _ref5$repeatable,
445
+ _ref5$fieldName = _ref5.fieldName,
446
+ fieldName = _ref5$fieldName === void 0 ? null : _ref5$fieldName;
447
+ finalFieldPath = (repeatable || fieldName !== null) && fieldPath.length <= (repeatable ? 2 : 1) ? [fieldName || stateId].concat(_toConsumableArray(fieldPath.slice(1))) : fieldPath.slice(1);
448
+ }
449
+ var lastKeyIndex = finalFieldPath.length - 1;
450
+ var parentItem = null;
451
+ finalFieldPath.reduce(function (currentFields, key, keyIndex) {
452
+ var _ref6 = currentFields || {},
453
+ _ref6$type = _ref6.type,
454
+ fieldType = _ref6$type === void 0 ? null : _ref6$type,
455
+ _ref6$fields = _ref6.fields,
456
+ currentSubFields = _ref6$fields === void 0 ? null : _ref6$fields,
457
+ _ref6$itemsField = _ref6.itemsField,
458
+ currentItemsField = _ref6$itemsField === void 0 ? null : _ref6$itemsField;
459
+ var fieldsDef = fieldType !== null ? fieldsManager.getDefinition(fieldType) : currentFields;
460
+ var _ref7 = fieldsDef || {},
461
+ _ref7$fields = _ref7.fields,
462
+ defSubFields = _ref7$fields === void 0 ? null : _ref7$fields,
463
+ _ref7$settings = _ref7.settings,
464
+ settings = _ref7$settings === void 0 ? null : _ref7$settings,
465
+ _ref7$itemsField = _ref7.itemsField,
466
+ defItemsField = _ref7$itemsField === void 0 ? null : _ref7$itemsField,
467
+ _ref7$component = _ref7.component,
468
+ defComponent = _ref7$component === void 0 ? null : _ref7$component;
469
+ var _ref8 = fieldsComponentManager.getComponent(defComponent) || {},
470
+ _ref8$withForm = _ref8.withForm,
471
+ withForm = _ref8$withForm === void 0 ? false : _ref8$withForm;
472
+ var itemsField = currentItemsField || defItemsField;
473
+ var subFields = currentSubFields || defSubFields;
474
+ var finalSubField = subFields !== null ? getFieldByName(subFields, key) : null;
475
+ var finalSettingsField = settings !== null ? getFieldByName(settings, key) : null;
476
+ var isCurrentSubField = finalSubField !== null;
477
+ var isCurrentSettingsField = finalSettingsField !== null;
478
+ var isListItems = itemsField !== null && !!key.match(/^[0-9]+$/);
479
+ var isLastIndex = keyIndex === lastKeyIndex;
480
+ var pathPrefix = route('screen.field', {
481
+ screen: screenId,
482
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray(finalFieldPath.slice(0, keyIndex + 1))).filter(function (it) {
483
+ return it !== null;
484
+ })
485
+ });
486
+ var pathSuffix = isLastIndex && form !== null ? "/".concat(form) : '';
487
+ var addNewItem = isLastIndex || isListItems;
488
+ var itemPath = "".concat(pathPrefix).concat(pathSuffix);
489
+ if (parentItem !== null && (withForm || isCurrentSettingsField)) {
490
+ fieldItems.push(_objectSpread(_objectSpread({}, parentItem), {}, {
491
+ url: isCurrentSettingsField ? route('screen.field.form', {
492
+ screen: screenId,
493
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray(finalFieldPath.slice(0, keyIndex))).filter(function (it) {
494
+ return it !== null;
495
+ }),
496
+ form: 'settings'
497
+ }) : route('screen.field', {
498
+ screen: screenId,
499
+ field: [currentState !== null ? currentState.id : null].concat(_toConsumableArray(finalFieldPath.slice(0, keyIndex))).filter(function (it) {
500
+ return it !== null;
501
+ })
502
+ })
503
+ }));
504
+ }
505
+ var nextField = null;
506
+ if (isCurrentSubField) {
507
+ nextField = finalSubField;
508
+ } else if (isCurrentSettingsField) {
509
+ nextField = finalSettingsField;
510
+ } else if (isListItems) {
511
+ nextField = itemsField;
512
+ }
513
+ var fieldLabel = nextField ? nextField.breadcrumbLabel || nextField.label : null;
514
+ var itemLabel = isMessage(fieldLabel) ? intl.formatMessage(fieldLabel) : fieldLabel;
515
+ var _ref9 = parentItem || {},
516
+ _ref9$label = _ref9.label,
517
+ parentItemLabel = _ref9$label === void 0 ? null : _ref9$label;
518
+ var finalItemLabel = isListItems ? "".concat(itemLabel, " #").concat(parseInt(key, 10) + 1) : itemLabel || parentItemLabel;
519
+ var item = {
520
+ url: itemPath,
521
+ label: finalItemLabel || '',
522
+ active: false
523
+ };
524
+ if (addNewItem) {
525
+ fieldItems.push(item);
526
+ }
527
+ parentItem = !addNewItem ? item : null;
528
+ return nextField;
529
+ }, {
530
+ fields: stateId === null ? screenFields : screenFields.filter(function (_ref10) {
531
+ var _ref10$stateId = _ref10.stateId,
532
+ fieldStateId = _ref10$stateId === void 0 ? null : _ref10$stateId;
533
+ return fieldStateId === null || fieldStateId === stateId;
534
+ })
535
+ });
536
+ }
537
+ var _ref11 = screenParameters || {},
538
+ _ref11$metadata = _ref11.metadata,
539
+ metadata = _ref11$metadata === void 0 ? null : _ref11$metadata;
540
+ var _ref12 = metadata || {},
541
+ _ref12$title = _ref12.title,
542
+ title = _ref12$title === void 0 ? null : _ref12$title;
543
+ var typeTitle = screenTitle !== null ? /*#__PURE__*/React.createElement(FormattedMessage, screenTitle) : null;
544
+ var parametersMessage = intl.formatMessage({
545
+ id: "AHvHaY",
546
+ defaultMessage: [{
547
+ "type": 0,
548
+ "value": "Parameters"
549
+ }]
550
+ });
551
+ var defaultLabel = (fieldItems || []).length === 0 ? title || typeTitle || parametersMessage : parametersMessage;
552
+ var finalItems = [currentState === null || (currentState.repeatable || false) === false ? {
553
+ label: currentState !== null ? currentState.label : defaultLabel,
554
+ url: currentState !== null ? route('screen.field', {
555
+ screen: screenId,
556
+ field: currentState.id
557
+ }) : route('screen', {
558
+ screen: screenId
559
+ }),
560
+ active: false
561
+ } : null].concat(fieldItems).filter(function (it) {
562
+ return it !== null;
563
+ });
564
+ var lastItemsIndex = finalItems.length - 1;
565
+ return finalItems.map(function (it, index) {
566
+ return index === lastItemsIndex ? _objectSpread(_objectSpread({}, it), {}, {
567
+ url: url,
568
+ active: true
569
+ }) : it;
570
+ });
571
+ }, [intl, route, screenId, field, form, url, screenFields, screenStates, screenTitle, fieldsManager]);
572
+ var itemsLength = items.length;
573
+ var onClickBack = useCallback(function () {
574
+ setLocation(items[itemsLength - 2].url);
575
+ }, [items, setLocation, itemsLength]);
576
+ var withBack = itemsLength > 1;
577
+ return /*#__PURE__*/React.createElement(React.Fragment, null, withBack ? /*#__PURE__*/React.createElement(BackButton, {
578
+ onClick: onClickBack,
579
+ className: "me-2 py-0"
580
+ }) : null, /*#__PURE__*/React.createElement(Breadcrumb$2, {
581
+ items: items,
582
+ theme: "secondary",
583
+ withoutBar: true,
584
+ noWrap: true,
585
+ className: classNames([styles$h.container, 'text-truncate', _defineProperty({}, className, className !== null)])
586
+ }));
587
+ };
588
+ Breadcrumb.propTypes = propTypes$l;
589
+ Breadcrumb.defaultProps = defaultProps$l;
590
+ var Breadcrumb$1 = Breadcrumb;
591
+
592
+ var styles$g = {"container":"micromag-editor-modals-delete-screen-container","description":"micromag-editor-modals-delete-screen-description","actions":"micromag-editor-modals-delete-screen-actions"};
593
+
594
+ var propTypes$k = {
595
+ className: PropTypes.string,
596
+ onConfirm: PropTypes.func,
597
+ onCancel: PropTypes.func
598
+ };
599
+ var defaultProps$k = {
600
+ className: null,
601
+ onConfirm: null,
602
+ onCancel: null
603
+ };
604
+ var DeleteScreenModal = function DeleteScreenModal(_ref) {
605
+ var className = _ref.className,
606
+ onConfirm = _ref.onConfirm,
607
+ onCancel = _ref.onCancel;
608
+ return /*#__PURE__*/React.createElement(Modal, null, /*#__PURE__*/React.createElement(ModalDialog, {
609
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
610
+ id: "p6q/+/",
611
+ defaultMessage: [{
612
+ "type": 0,
613
+ "value": "Delete screen"
614
+ }]
615
+ }),
616
+ className: classNames([styles$g.container, _defineProperty({}, className, className)]),
617
+ onClose: onCancel
618
+ }, /*#__PURE__*/React.createElement("div", {
619
+ className: styles$g.description
620
+ }, /*#__PURE__*/React.createElement(Label, null, /*#__PURE__*/React.createElement(FormattedMessage, {
621
+ id: "q/tLk0",
622
+ defaultMessage: [{
623
+ "type": 0,
624
+ "value": "Are you sure you want to delete this screen?"
625
+ }]
626
+ }))), /*#__PURE__*/React.createElement("div", {
627
+ className: styles$g.actions
628
+ }, /*#__PURE__*/React.createElement(Button, {
629
+ onClick: onCancel,
630
+ className: "btn-outline-secondary me-2"
631
+ }, /*#__PURE__*/React.createElement(Label, null, /*#__PURE__*/React.createElement(FormattedMessage, {
632
+ id: "0GT0SI",
633
+ defaultMessage: [{
634
+ "type": 0,
635
+ "value": "Cancel"
636
+ }]
637
+ }))), /*#__PURE__*/React.createElement(Button, {
638
+ onClick: onConfirm,
639
+ theme: "danger",
640
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
641
+ id: "gRxcTc",
642
+ defaultMessage: [{
643
+ "type": 0,
644
+ "value": "Delete screen"
645
+ }]
646
+ })
647
+ }))));
648
+ };
649
+ DeleteScreenModal.propTypes = propTypes$k;
650
+ DeleteScreenModal.defaultProps = defaultProps$k;
651
+ var DeleteScreenModal$1 = DeleteScreenModal;
652
+
653
+ var styles$f = {"panel":"micromag-editor-form-panel","exit":"micromag-editor-form-exit","content":"micromag-editor-form-content","navbar":"micromag-editor-form-navbar","enterRight":"micromag-editor-form-enterRight","enterLeft":"micromag-editor-form-enterLeft","enterTop":"micromag-editor-form-enterTop","enterBottom":"micromag-editor-form-enterBottom","enterActiveHorizontal":"micromag-editor-form-enterActiveHorizontal","enterActiveVertical":"micromag-editor-form-enterActiveVertical","exitActiveRight":"micromag-editor-form-exitActiveRight","exitActiveLeft":"micromag-editor-form-exitActiveLeft","exitActiveTop":"micromag-editor-form-exitActiveTop","exitActiveBottom":"micromag-editor-form-exitActiveBottom"};
654
+
655
+ var propTypes$j = {
656
+ value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
657
+ isTheme: PropTypes.bool,
658
+ className: PropTypes.string,
659
+ onChange: PropTypes.func
660
+ };
661
+ var defaultProps$j = {
662
+ value: null,
663
+ isTheme: false,
664
+ className: null,
665
+ onChange: null
666
+ };
667
+ var EditForm = function EditForm(_ref) {
668
+ var value = _ref.value,
669
+ isTheme = _ref.isTheme,
670
+ className = _ref.className,
671
+ onChange = _ref.onChange;
672
+ // Match routes
673
+ var _useLocation = useLocation(),
674
+ _useLocation2 = _slicedToArray(_useLocation, 2),
675
+ setLocation = _useLocation2[1];
676
+ var routePush = useRoutePush();
677
+ var _useRouteParams = useRouteParams(),
678
+ url = _useRouteParams.url,
679
+ _useRouteParams$scree = _useRouteParams.screen,
680
+ screenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
681
+ _useRouteParams$field = _useRouteParams.field,
682
+ fieldParams = _useRouteParams$field === void 0 ? null : _useRouteParams$field,
683
+ _useRouteParams$form = _useRouteParams.form,
684
+ formParams = _useRouteParams$form === void 0 ? null : _useRouteParams$form;
685
+
686
+ // Get screen
687
+ var _ref2 = value || {},
688
+ _ref2$components = _ref2.components,
689
+ screens = _ref2$components === void 0 ? [] : _ref2$components;
690
+ var screenIndex = screens.findIndex(function (it) {
691
+ return it.id === screenId;
692
+ });
693
+ var screen = screenIndex !== -1 ? screens[screenIndex] : null;
694
+ var screensManager = useScreensManager();
695
+ var screenFields = useMemo(function () {
696
+ var _ref3 = screen || {},
697
+ type = _ref3.type;
698
+ var definition = type !== null ? screensManager.getDefinition(type) : null;
699
+ return definition != null ? getScreenFieldsWithStates(definition) : [];
700
+ }, [screensManager, screen]);
701
+
702
+ // Get transition value
703
+ var _useFormTransition = useFormTransition(url, screenIndex, styles$f),
704
+ transitionClassNames = _useFormTransition.classNames,
705
+ transitionTimeout = _useFormTransition.timeout;
706
+ var _useState = useState(false),
707
+ _useState2 = _slicedToArray(_useState, 2),
708
+ screenSettingsOpened = _useState2[0],
709
+ setScreenSettingsOpened = _useState2[1];
710
+ var _useState3 = useState(false),
711
+ _useState4 = _slicedToArray(_useState3, 2),
712
+ deleteScreenModalOpened = _useState4[0],
713
+ setDeleteScreenModalOpened = _useState4[1];
714
+ var _useState5 = useState({}),
715
+ _useState6 = _slicedToArray(_useState5, 2),
716
+ fieldForms = _useState6[0],
717
+ setFieldForms = _useState6[1];
718
+ var _useState7 = useState(null),
719
+ _useState8 = _slicedToArray(_useState7, 2),
720
+ fieldContext = _useState8[0],
721
+ setFieldContext = _useState8[1];
722
+
723
+ // Callbacks
724
+ var gotoFieldForm = useCallback(function () {
725
+ var field = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
726
+ var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
727
+ var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
728
+ var hasField = field !== null;
729
+ var fieldRoute = formName !== null ? 'screen.field.form' : 'screen.field';
730
+ var _ref4 = field !== null ? field.split('.') : [],
731
+ _ref5 = _slicedToArray(_ref4, 1),
732
+ _ref5$ = _ref5[0],
733
+ rootFieldName = _ref5$ === void 0 ? null : _ref5$;
734
+ var _ref6 = fieldParams !== null ? fieldParams.split('/') : [],
735
+ _ref7 = _slicedToArray(_ref6, 1),
736
+ _ref7$ = _ref7[0],
737
+ currentStateId = _ref7$ === void 0 ? null : _ref7$;
738
+ var _ref8 = (rootFieldName !== null ? screenFields.find(function (_ref9) {
739
+ var name = _ref9.name,
740
+ fieldStateId = _ref9.stateId;
741
+ return name === rootFieldName && currentStateId === fieldStateId;
742
+ }) || null : null) || {},
743
+ _ref8$stateId = _ref8.stateId,
744
+ stateId = _ref8$stateId === void 0 ? null : _ref8$stateId;
745
+ routePush(hasField ? fieldRoute : 'screen', {
746
+ screen: screenId,
747
+ field: field !== null ? [stateId].concat(_toConsumableArray(field.split('.'))).filter(function (it) {
748
+ return it !== null;
749
+ }) : null,
750
+ form: formName !== null ? slug(formName) : null
751
+ });
752
+ var nextFieldForms = _objectSpread(_objectSpread({}, fieldForms), {}, _defineProperty({}, "".concat(field).concat(formName !== null ? ":".concat(formName) : ''), url));
753
+ setFieldForms(nextFieldForms);
754
+ setFieldContext(context);
755
+ }, [routePush, screenId, screenFields, fieldParams, url, fieldForms, setFieldForms, fieldContext, setFieldContext]);
756
+ var closeFieldForm = useCallback(function (field) {
757
+ var formName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
758
+ var fieldKey = "".concat(field).concat(formName !== null ? ":".concat(formName) : '');
759
+ var pastUrl = fieldForms[fieldKey] || null;
760
+ if (pastUrl !== null) {
761
+ setLocation(pastUrl);
762
+ }
763
+ setFieldForms(Object.keys(fieldForms).reduce(function (map, key) {
764
+ return key !== fieldKey ? _objectSpread(_objectSpread({}, map), {}, _defineProperty({}, key, fieldForms[key])) : map;
765
+ }, {}));
766
+ }, [setLocation, screenId, fieldForms, setFieldForms]);
767
+ var triggerOnChange = useCallback(function (newValue) {
768
+ if (onChange !== null) {
769
+ onChange(newValue);
770
+ }
771
+ }, [onChange]);
772
+ var onScreenFormChange = useCallback(function (newScreenValue) {
773
+ triggerOnChange(updateScreen(value, newScreenValue));
774
+ }, [value, triggerOnChange]);
775
+ var onClickDuplicate = useCallback(function () {
776
+ triggerOnChange(duplicateScreen(value, screenId, screenIndex));
777
+ setScreenSettingsOpened(false);
778
+ }, [value, screenId, screenIndex, triggerOnChange, setScreenSettingsOpened]);
779
+ var onClickDelete = useCallback(function () {
780
+ setDeleteScreenModalOpened(true);
781
+ setScreenSettingsOpened(false);
782
+ }, [setScreenSettingsOpened, setDeleteScreenModalOpened]);
783
+ var onSettingsClick = useCallback(function () {
784
+ setScreenSettingsOpened(!screenSettingsOpened);
785
+ }, [screenSettingsOpened, setScreenSettingsOpened]);
786
+ var onDropdownClickOutside = useCallback(function () {
787
+ setScreenSettingsOpened(false);
788
+ }, [setScreenSettingsOpened]);
789
+ var onDeleteScreenConfirm = useCallback(function () {
790
+ var current = screens.findIndex(function (_ref10) {
791
+ var _ref10$id = _ref10.id,
792
+ scrId = _ref10$id === void 0 ? null : _ref10$id;
793
+ return scrId === screenId;
794
+ }) || 0;
795
+ var previous = screens.find(function (_ref11, i) {
796
+ var _ref11$id = _ref11.id,
797
+ scrId = _ref11$id === void 0 ? null : _ref11$id;
798
+ return scrId !== screenId && (i === current - 1 || current === 0);
799
+ }) || null;
800
+ if (previous !== null) {
801
+ var _ref12 = previous || {},
802
+ _ref12$id = _ref12.id,
803
+ firstScreenId = _ref12$id === void 0 ? null : _ref12$id;
804
+ routePush('screen', {
805
+ screen: firstScreenId
806
+ });
807
+ }
808
+ triggerOnChange(deleteScreen(value, screenId));
809
+ setDeleteScreenModalOpened(false);
810
+ }, [value, triggerOnChange, screenId, setScreenSettingsOpened, routePush, screens]);
811
+ var onDeleteScreenCancel = useCallback(function () {
812
+ setDeleteScreenModalOpened(false);
813
+ }, [setDeleteScreenModalOpened]);
814
+ var dropdownItems = [!isTheme ? {
815
+ id: 'duplicate',
816
+ type: 'button',
817
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
818
+ id: "IBjY5r",
819
+ defaultMessage: [{
820
+ "type": 0,
821
+ "value": "Duplicate screen"
822
+ }]
823
+ }),
824
+ onClick: onClickDuplicate
825
+ } : null, {
826
+ id: 'delete',
827
+ type: 'button',
828
+ label: /*#__PURE__*/React.createElement(FormattedMessage, {
829
+ id: "hpiKce",
830
+ defaultMessage: [{
831
+ "type": 0,
832
+ "value": "Delete screen"
833
+ }]
834
+ }),
835
+ onClick: onClickDelete
836
+ }].filter(function (it) {
837
+ return it !== null;
838
+ });
839
+ return /*#__PURE__*/React.createElement("div", {
840
+ className: classNames(['d-flex', 'flex-column', className])
841
+ }, screenId !== null ? /*#__PURE__*/React.createElement(Navbar, {
842
+ compact: true,
843
+ noWrap: true,
844
+ withoutCollapse: true,
845
+ className: classNames(['sticky-top', 'border-bottom', 'border-dark', styles$f.navbar])
846
+ }, /*#__PURE__*/React.createElement(Breadcrumb$1, {
847
+ story: value,
848
+ url: url,
849
+ screenId: screenId,
850
+ field: fieldParams,
851
+ form: formParams,
852
+ className: "me-auto"
853
+ }), fieldParams === null ? /*#__PURE__*/React.createElement("div", {
854
+ className: "dropdown"
855
+ }, /*#__PURE__*/React.createElement(SettingsButton$1, {
856
+ onClick: onSettingsClick,
857
+ dots: true,
858
+ className: "py-0",
859
+ theme: "default"
860
+ }), /*#__PURE__*/React.createElement(DropdownMenu, {
861
+ align: "end",
862
+ items: dropdownItems,
863
+ visible: screenSettingsOpened,
864
+ onClickOutside: onDropdownClickOutside
865
+ })) : null) : null, /*#__PURE__*/React.createElement("div", {
866
+ className: classNames(['flex-grow-1', 'd-flex', 'w-100', styles$f.content])
867
+ }, screen !== null ? /*#__PURE__*/React.createElement(TransitionGroup, {
868
+ className: "w-100 flex-grow-1",
869
+ childFactory: function childFactory(child) {
870
+ return /*#__PURE__*/React.cloneElement(child, {
871
+ classNames: transitionClassNames
872
+ });
873
+ }
874
+ }, fieldParams !== null ? /*#__PURE__*/React.createElement(CSSTransition, {
875
+ timeout: transitionTimeout,
876
+ key: "field-".concat(fieldParams, "-").concat(formParams)
877
+ }, /*#__PURE__*/React.createElement("div", {
878
+ className: classNames(['w-100', styles$f.panel])
879
+ }, /*#__PURE__*/React.createElement(ScreenProvider, {
880
+ data: screen
881
+ }, /*#__PURE__*/React.createElement(FieldWithContexts$1, {
882
+ name: fieldParams.replace(/\//g, '.'),
883
+ value: screen,
884
+ form: formParams,
885
+ className: styles$f.form,
886
+ gotoFieldForm: gotoFieldForm,
887
+ closeFieldForm: closeFieldForm,
888
+ fieldContext: fieldContext,
889
+ onChange: onScreenFormChange
890
+ })))) : /*#__PURE__*/React.createElement(CSSTransition, {
891
+ classNames: transitionClassNames,
892
+ timeout: transitionTimeout,
893
+ key: "screen-".concat(screen.id)
894
+ }, /*#__PURE__*/React.createElement("div", {
895
+ className: classNames(['w-100', styles$f.panel]),
896
+ key: "screen-".concat(screen.id)
897
+ }, /*#__PURE__*/React.createElement(ScreenProvider, {
898
+ data: screen
899
+ }, /*#__PURE__*/React.createElement(ScreenForm$1, {
900
+ value: screen,
901
+ className: styles$f.form,
902
+ onChange: onScreenFormChange,
903
+ gotoFieldForm: gotoFieldForm,
904
+ closeFieldForm: closeFieldForm
905
+ }))))) : /*#__PURE__*/React.createElement(Empty, {
906
+ className: "w-100 m-2"
907
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
908
+ id: "QfpTKK",
909
+ defaultMessage: [{
910
+ "type": 0,
911
+ "value": "Select a screen..."
912
+ }],
913
+ decription: "Indication to select a screen to view the form"
914
+ }))), deleteScreenModalOpened ? /*#__PURE__*/React.createElement(DeleteScreenModal$1, {
915
+ onConfirm: onDeleteScreenConfirm,
916
+ onCancel: onDeleteScreenCancel
917
+ }) : null);
918
+ };
919
+ EditForm.propTypes = propTypes$j;
920
+ EditForm.defaultProps = defaultProps$j;
921
+ var EditorForm = EditForm;
922
+
923
+ function useScreenStates(screen) {
924
+ var _ref = screen || {},
925
+ type = _ref.type;
926
+ var screensManager = useScreensManager();
927
+ var states = useMemo(function () {
928
+ var definition = screensManager.getDefinition(type) || null;
929
+ var _ref2 = definition || {},
930
+ _ref2$states = _ref2.states,
931
+ screenStates = _ref2$states === void 0 ? null : _ref2$states;
932
+ return screenStates;
933
+ }, [screensManager, type]);
934
+ return states;
935
+ }
936
+
937
+ var _excluded$7 = ["components"];
938
+ var useThemeValue = function useThemeValue(value) {
939
+ var isTheme = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
940
+ var valueWithTheme = useMemo(function () {
941
+ if (!isTheme) {
942
+ return value;
943
+ }
944
+ var _ref = value || {};
945
+ _ref.components;
946
+ var themeValue = _objectWithoutProperties(_ref, _excluded$7);
947
+ return value !== null ? _objectSpread({
948
+ theme: themeValue
949
+ }, value) : value;
950
+ }, [value, isTheme]);
951
+ return valueWithTheme;
952
+ };
953
+
954
+ var styles$e = {"container":"micromag-editor-menus-devices-container","button":"micromag-editor-menus-devices-button"};
955
+
956
+ /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
957
+ var propTypes$i = {
958
+ color: PropTypes.string,
959
+ className: PropTypes.string
960
+ };
961
+ var defaultProps$i = {
962
+ color: 'currentColor',
963
+ className: null
964
+ };
965
+ var DesktopIcon = function DesktopIcon(_ref) {
966
+ var color = _ref.color,
967
+ className = _ref.className;
968
+ return /*#__PURE__*/React.createElement("svg", {
969
+ xmlns: "http://www.w3.org/2000/svg",
970
+ xmlnsXlink: "http://www.w3.org/1999/xlink",
971
+ version: "1.1",
972
+ x: "0px",
973
+ y: "0px",
974
+ width: "100px",
975
+ height: "100px",
976
+ viewBox: "0 0 100 100",
977
+ xmlSpace: "preserve",
978
+ className: className
979
+ }, /*#__PURE__*/React.createElement("path", {
980
+ fill: color,
981
+ d: "M84 17H16c-3.3 0-6 2.7-6 6v42c0 3.3 2.7 6 6 6h22v4.2c-.1.4-.9 1.5-1.3 2-1.1 1.4-2.2 2.8-1.4 4.4.3.7 1.1 1.4 2.7 1.4h23c1 0 3.3 0 4.1-1.8.8-1.8-.6-3.2-1.8-4.5-.4-.5-1.1-1.2-1.3-1.6V71h22c3.3 0 6-2.7 6-6V23c0-3.3-2.7-6-6-6zM40.3 79c.9-1.1 1.7-2.4 1.7-3.8V71h16v4.2c0 1.4 1 2.7 2 3.8H40.3zM86 65c0 1.1-.9 2-2 2H16c-1.1 0-2-.9-2-2v-6h72v6zm0-10H14V23c0-1.1.9-2 2-2h68c1.1 0 2 .9 2 2v32z"
982
+ }));
983
+ };
984
+ DesktopIcon.propTypes = propTypes$i;
985
+ DesktopIcon.defaultProps = defaultProps$i;
986
+ var DesktopIcon$1 = DesktopIcon;
987
+
988
+ /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
989
+ var propTypes$h = {
990
+ color: PropTypes.string,
991
+ className: PropTypes.string
992
+ };
993
+ var defaultProps$h = {
994
+ color: 'currentColor',
995
+ className: null
996
+ };
997
+ var MobileIcon = function MobileIcon(_ref) {
998
+ var color = _ref.color,
999
+ className = _ref.className;
1000
+ return /*#__PURE__*/React.createElement("svg", {
1001
+ xmlns: "http://www.w3.org/2000/svg",
1002
+ xmlnsXlink: "http://www.w3.org/1999/xlink",
1003
+ version: "1.1",
1004
+ x: "0px",
1005
+ y: "0px",
1006
+ width: "100px",
1007
+ height: "100px",
1008
+ viewBox: "0 0 100 100",
1009
+ xmlSpace: "preserve",
1010
+ className: className
1011
+ }, /*#__PURE__*/React.createElement("path", {
1012
+ fill: color,
1013
+ d: "M66 11H34c-3.3 0-6 2.7-6 6v66c0 3.3 2.7 6 6 6h32c3.3 0 6-2.7 6-6V17c0-3.3-2.7-6-6-6zm2 72c0 1.1-.9 2-2 2H34c-1.1 0-2-.9-2-2v-4h36v4zm0-8H32V25h36v50zm0-54H32v-4c0-1.1.9-2 2-2h32c1.1 0 2 .9 2 2v4z"
1014
+ }));
1015
+ };
1016
+ MobileIcon.propTypes = propTypes$h;
1017
+ MobileIcon.defaultProps = defaultProps$h;
1018
+ var MobileIcon$1 = MobileIcon;
1019
+
1020
+ var DeviceIcons = /*#__PURE__*/Object.freeze({
1021
+ __proto__: null,
1022
+ Desktop: DesktopIcon$1,
1023
+ Mobile: MobileIcon$1
1024
+ });
1025
+
1026
+ var styles$d = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
1027
+
1028
+ var _excluded$6 = ["device", "className", "iconComponents"];
1029
+ var propTypes$g = {
1030
+ device: PropTypes.string.isRequired,
1031
+ iconComponents: PropTypes$1.components,
1032
+ className: PropTypes.string
1033
+ };
1034
+ var defaultProps$g = {
1035
+ iconComponents: DeviceIcons,
1036
+ className: null
1037
+ };
1038
+ var DeviceButton = function DeviceButton(_ref) {
1039
+ var device = _ref.device,
1040
+ className = _ref.className,
1041
+ iconComponents = _ref.iconComponents,
1042
+ props = _objectWithoutProperties(_ref, _excluded$6);
1043
+ var DeviceIcon = getComponentFromName(device, iconComponents, DesktopIcon$1);
1044
+ return /*#__PURE__*/React.createElement(Button, Object.assign({
1045
+ className: classNames([styles$d.container, _defineProperty({}, className, className !== null)])
1046
+ }, props), /*#__PURE__*/React.createElement(DeviceIcon, {
1047
+ className: styles$d.icon
1048
+ }));
1049
+ };
1050
+ DeviceButton.propTypes = propTypes$g;
1051
+ DeviceButton.defaultProps = defaultProps$g;
1052
+ var DeviceButton$1 = DeviceButton;
1053
+
1054
+ var _excluded$5 = ["id"];
1055
+ var propTypes$f = {
1056
+ items: PropTypes$1.menuItems,
1057
+ className: PropTypes.string,
1058
+ onClickItem: PropTypes.func
1059
+ };
1060
+ var defaultProps$f = {
1061
+ items: [],
1062
+ className: null,
1063
+ onClickItem: null
1064
+ };
1065
+ var DevicesMenu = function DevicesMenu(_ref) {
1066
+ var items = _ref.items,
1067
+ className = _ref.className,
1068
+ onClickItem = _ref.onClickItem;
1069
+ return /*#__PURE__*/React.createElement(Tabs, {
1070
+ items: items,
1071
+ theme: "outline-secondary",
1072
+ className: classNames([styles$e.container, _defineProperty({}, className, className !== null)]),
1073
+ renderItemButton: function renderItemButton(item, index, props) {
1074
+ var id = item.id,
1075
+ itemProps = _objectWithoutProperties(item, _excluded$5);
1076
+ return /*#__PURE__*/React.createElement(DeviceButton$1, Object.assign({
1077
+ device: id
1078
+ }, props, itemProps, {
1079
+ className: styles$e.button,
1080
+ onClick: function onClick(e) {
1081
+ return onClickItem !== null ? onClickItem(e, item, index) : null;
1082
+ }
1083
+ }));
1084
+ }
1085
+ });
1086
+ };
1087
+ DevicesMenu.propTypes = propTypes$f;
1088
+ DevicesMenu.defaultProps = defaultProps$f;
1089
+ var DevicesMenu$1 = DevicesMenu;
1090
+
1091
+ var styles$c = {"container":"micromag-editor-buttons-screen-container","button":"micromag-editor-buttons-screen-button","screen":"micromag-editor-buttons-screen-screen","inner":"micromag-editor-buttons-screen-inner","border":"micromag-editor-buttons-screen-border","icon":"micromag-editor-buttons-screen-icon","label":"micromag-editor-buttons-screen-label","active":"micromag-editor-buttons-screen-active"};
1092
+
1093
+ var propTypes$e = {
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
+ className: PropTypes.string
1106
+ };
1107
+ var defaultProps$e = {
1108
+ active: false,
1109
+ id: null,
1110
+ href: null,
1111
+ label: null,
1112
+ icon: null,
1113
+ title: null,
1114
+ onClick: null,
1115
+ children: null,
1116
+ refButton: null,
1117
+ className: null
1118
+ };
1119
+ var ScreenButton = function ScreenButton(_ref) {
1120
+ var active = _ref.active,
1121
+ id = _ref.id,
1122
+ href = _ref.href,
1123
+ className = _ref.className,
1124
+ label = _ref.label,
1125
+ icon = _ref.icon,
1126
+ children = _ref.children,
1127
+ title = _ref.title,
1128
+ onClick = _ref.onClick,
1129
+ refButton = _ref.refButton;
1130
+ return /*#__PURE__*/React.createElement("div", {
1131
+ className: classNames([styles$c.container, 'rounded', _defineProperty(_defineProperty({}, styles$c.active, active), className, className !== null)])
1132
+ }, children !== null ? children : /*#__PURE__*/React.createElement("div", {
1133
+ className: styles$c.screen
1134
+ }, /*#__PURE__*/React.createElement("div", {
1135
+ className: styles$c.inner
1136
+ }, icon !== null ? /*#__PURE__*/React.createElement("div", {
1137
+ className: styles$c.icon
1138
+ }, icon) : null, label !== null ? /*#__PURE__*/React.createElement("div", {
1139
+ className: styles$c.label
1140
+ }, label) : null)), /*#__PURE__*/React.createElement(Button, {
1141
+ className: styles$c.button,
1142
+ withoutStyle: true,
1143
+ id: id,
1144
+ href: href,
1145
+ title: title,
1146
+ onClick: onClick,
1147
+ refButton: refButton
1148
+ }, /*#__PURE__*/React.createElement("span", {
1149
+ className: classNames([styles$c.border, 'rounded'])
1150
+ })));
1151
+ };
1152
+ ScreenButton.propTypes = propTypes$e;
1153
+ ScreenButton.defaultProps = defaultProps$e;
1154
+ var ScreenButton$1 = /*#__PURE__*/React.forwardRef(function (props, ref) {
1155
+ return /*#__PURE__*/React.createElement(ScreenButton, Object.assign({}, props, {
1156
+ refButton: ref
1157
+ }));
1158
+ });
1159
+
1160
+ var styles$b = {"button":"micromag-editor-buttons-screen-with-preview-button","name":"micromag-editor-buttons-screen-with-preview-name","index":"micromag-editor-buttons-screen-with-preview-index","deleteButton":"micromag-editor-buttons-screen-with-preview-deleteButton","withIndex":"micromag-editor-buttons-screen-with-preview-withIndex"};
1161
+
1162
+ var propTypes$d = {
1163
+ screen: PropTypes$1.screenComponent,
1164
+ screenState: PropTypes.string,
1165
+ index: PropTypes.number.isRequired,
1166
+ href: PropTypes.string,
1167
+ title: PropTypes.string,
1168
+ active: PropTypes.bool,
1169
+ withPlaceholder: PropTypes.bool,
1170
+ withIndexIndicator: PropTypes.bool,
1171
+ withName: PropTypes.bool,
1172
+ withDeleteButtonOnRepeatables: PropTypes.bool,
1173
+ onClick: PropTypes.func,
1174
+ onClickItem: PropTypes.func,
1175
+ onDeleteButtonClick: PropTypes.func,
1176
+ className: PropTypes.string
1177
+ };
1178
+ var defaultProps$d = {
1179
+ screen: null,
1180
+ screenState: null,
1181
+ title: null,
1182
+ href: null,
1183
+ active: false,
1184
+ withPlaceholder: false,
1185
+ withIndexIndicator: false,
1186
+ withName: false,
1187
+ withDeleteButtonOnRepeatables: false,
1188
+ onClick: null,
1189
+ onClickItem: null,
1190
+ onDeleteButtonClick: null,
1191
+ className: null
1192
+ };
1193
+ var ScreenWithPreview = function ScreenWithPreview(_ref) {
1194
+ var screen = _ref.screen,
1195
+ screenState = _ref.screenState,
1196
+ index = _ref.index,
1197
+ title = _ref.title,
1198
+ href = _ref.href,
1199
+ active = _ref.active,
1200
+ className = _ref.className,
1201
+ _onClick = _ref.onClick,
1202
+ onClickItem = _ref.onClickItem,
1203
+ withName = _ref.withName,
1204
+ withPlaceholder = _ref.withPlaceholder,
1205
+ withIndexIndicator = _ref.withIndexIndicator,
1206
+ withDeleteButtonOnRepeatables = _ref.withDeleteButtonOnRepeatables,
1207
+ onDeleteButtonClick = _ref.onDeleteButtonClick;
1208
+ var intl = useIntl();
1209
+ var _useIsVisible = useIsVisible({
1210
+ threshold: 0.1
1211
+ }),
1212
+ ref = _useIsVisible.ref,
1213
+ visible = _useIsVisible.visible;
1214
+ var ScreenComponent = withPlaceholder ? ScreenPlaceholder : ScreenPreview;
1215
+ var finalTitle = isMessage(title) ? intl.formatMessage(title) : title || null;
1216
+ return /*#__PURE__*/React.createElement("div", {
1217
+ ref: ref
1218
+ }, /*#__PURE__*/React.createElement(ScreenButton$1, {
1219
+ href: href,
1220
+ active: active,
1221
+ className: classNames([styles$b.button, _defineProperty(_defineProperty({}, className, className !== null), styles$b.withIndex, withIndexIndicator || withName)]),
1222
+ title: finalTitle,
1223
+ onClick: function onClick() {
1224
+ if (_onClick !== null) {
1225
+ _onClick(screen, index);
1226
+ }
1227
+ if (onClickItem !== null) {
1228
+ onClickItem(screen, index);
1229
+ }
1230
+ }
1231
+ }, /*#__PURE__*/React.createElement(ScreenComponent, {
1232
+ screen: screen,
1233
+ screenState: screenState,
1234
+ className: styles$b.screen,
1235
+ hidden: !visible,
1236
+ withSize: true
1237
+ }), index !== null && withIndexIndicator ? /*#__PURE__*/React.createElement("div", {
1238
+ className: styles$b.index
1239
+ }, index + 1) : null, withName && !withIndexIndicator ? /*#__PURE__*/React.createElement("div", {
1240
+ className: styles$b.name
1241
+ }, finalTitle || null) : null, withDeleteButtonOnRepeatables ? /*#__PURE__*/React.createElement("div", {
1242
+ className: styles$b.deleteButton,
1243
+ onClick: onDeleteButtonClick
1244
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1245
+ icon: faTimesCircle
1246
+ })) : null));
1247
+ };
1248
+ ScreenWithPreview.propTypes = propTypes$d;
1249
+ ScreenWithPreview.defaultProps = defaultProps$d;
1250
+ var ScreenWithPreview$1 = ScreenWithPreview;
1251
+
1252
+ var styles$a = {"container":"micromag-editor-partials-screen-states-container","button":"micromag-editor-partials-screen-states-button","addButton":"micromag-editor-partials-screen-states-addButton","title":"micromag-editor-partials-screen-states-title"};
1253
+
1254
+ var propTypes$c = {
1255
+ screen: PropTypes$1.screen.isRequired,
1256
+ screenState: PropTypes.string,
1257
+ value: PropTypes$1.story.isRequired,
1258
+ className: PropTypes.string,
1259
+ onChange: PropTypes.func
1260
+ };
1261
+ var defaultProps$c = {
1262
+ screenState: null,
1263
+ className: null,
1264
+ onChange: null
1265
+ };
1266
+ function ScreenStates(_ref) {
1267
+ var screen = _ref.screen,
1268
+ value = _ref.value,
1269
+ className = _ref.className,
1270
+ onChange = _ref.onChange;
1271
+ var url = useUrlGenerator();
1272
+ var push = useRoutePush();
1273
+ var _useRouteParams = useRouteParams(),
1274
+ _useRouteParams$scree = _useRouteParams.screen,
1275
+ screenParam = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1276
+ _useRouteParams$field = _useRouteParams.field,
1277
+ field = _useRouteParams$field === void 0 ? null : _useRouteParams$field;
1278
+ var states = useScreenStates(screen);
1279
+ var _ref2 = field !== null ? field.split('/') : [],
1280
+ _ref3 = _toArray(_ref2),
1281
+ _ref3$ = _ref3[0],
1282
+ stateParam = _ref3$ === void 0 ? null : _ref3$,
1283
+ stateIndexes = _ref3.slice(1);
1284
+ var stateIndex = stateIndexes.find(function (it) {
1285
+ return it.match(/^[0-9]+$/) !== null;
1286
+ }) || null;
1287
+ var currentState = stateParam !== null && states.findIndex(function (_ref4) {
1288
+ var id = _ref4.id;
1289
+ return id === stateParam;
1290
+ }) !== -1 ? stateParam : null;
1291
+ return /*#__PURE__*/React.createElement("div", {
1292
+ className: classNames([styles$a.container, _defineProperty({}, className, className !== null)])
1293
+ }, /*#__PURE__*/React.createElement("div", {
1294
+ className: "d-flex align-items-end m-n1"
1295
+ }, /*#__PURE__*/React.createElement("div", {
1296
+ className: "p-1 align-self-stretch d-flex flex-column"
1297
+ }, /*#__PURE__*/React.createElement("h6", {
1298
+ className: classNames(['fw-normal', 'invisible', styles$a.title])
1299
+ }, "Settings"), /*#__PURE__*/React.createElement(Button, {
1300
+ className: classNames([styles$a.button, 'p-0', 'flex-grow-1', 'justify-content-center']),
1301
+ theme: screenParam !== null && field === null ? 'primary' : 'secondary',
1302
+ outline: screenParam === null || field !== null,
1303
+ size: "lg",
1304
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1305
+ icon: faCogs
1306
+ }),
1307
+ href: url('screen', {
1308
+ screen: screen.id
1309
+ })
1310
+ })), states.map(function (state) {
1311
+ var id = state.id,
1312
+ _state$label = state.label,
1313
+ label = _state$label === void 0 ? null : _state$label,
1314
+ _state$repeatable = state.repeatable,
1315
+ repeatable = _state$repeatable === void 0 ? false : _state$repeatable,
1316
+ _state$withoutCreate = state.withoutCreate,
1317
+ withoutCreate = _state$withoutCreate === void 0 ? false : _state$withoutCreate,
1318
+ _state$fieldName = state.fieldName,
1319
+ fieldName = _state$fieldName === void 0 ? null : _state$fieldName;
1320
+ var repeatableItems = repeatable ? screen[fieldName || id] || [] : null;
1321
+ var onClickAdd = function onClickAdd() {
1322
+ var _ref6 = value || {},
1323
+ _ref6$components = _ref6.components,
1324
+ currentComponentsValue = _ref6$components === void 0 ? [] : _ref6$components;
1325
+ var currentScreenIndex = currentComponentsValue.findIndex(function (_ref7) {
1326
+ var screenId = _ref7.id;
1327
+ return screen.id === screenId;
1328
+ });
1329
+ var currentScreenValue = currentComponentsValue[currentScreenIndex] || {};
1330
+ var currentFieldValue = currentScreenValue[fieldName || id] || [];
1331
+ var newValue = _objectSpread(_objectSpread({}, value), {}, {
1332
+ components: [].concat(_toConsumableArray(currentComponentsValue.slice(0, currentScreenIndex)), [_objectSpread(_objectSpread({}, currentScreenValue), {}, _defineProperty({}, fieldName || id, [].concat(_toConsumableArray(currentFieldValue), [{}])))], _toConsumableArray(currentComponentsValue.slice(currentScreenIndex + 1)))
1333
+ });
1334
+ if (onChange !== null) {
1335
+ onChange(newValue);
1336
+ }
1337
+ push('screen.field', {
1338
+ screen: screen.id,
1339
+ field: [id, currentFieldValue.length]
1340
+ });
1341
+ };
1342
+ var onClickDelete = function onClickDelete(indexToDelete) {
1343
+ var _ref8 = value || {},
1344
+ _ref8$components = _ref8.components,
1345
+ currentComponentsValue = _ref8$components === void 0 ? [] : _ref8$components;
1346
+ var currentScreenIndex = currentComponentsValue.findIndex(function (_ref9) {
1347
+ var screenId = _ref9.id;
1348
+ return screen.id === screenId;
1349
+ });
1350
+ var currentScreenValue = currentComponentsValue[currentScreenIndex] || {};
1351
+ currentScreenValue[fieldName || id] || [];
1352
+ var newValue = _objectSpread(_objectSpread({}, value), {}, {
1353
+ components: [].concat(_toConsumableArray(currentComponentsValue.slice(0, currentScreenIndex)), [_objectSpread(_objectSpread({}, currentScreenValue), {}, _defineProperty({}, fieldName || id, (currentScreenValue[fieldName || id] || []).filter(function (_, index) {
1354
+ return index !== indexToDelete;
1355
+ })))], _toConsumableArray(currentComponentsValue.slice(currentScreenIndex + 1)))
1356
+ });
1357
+ if (onChange !== null) {
1358
+ onChange(newValue);
1359
+ }
1360
+ push('screen', {
1361
+ screen: screen.id
1362
+ });
1363
+ };
1364
+ return /*#__PURE__*/React.createElement("div", {
1365
+ className: "p-1 align-self-stretch d-flex flex-column"
1366
+ }, /*#__PURE__*/React.createElement("h6", {
1367
+ className: classNames(['fw-normal', 'text-body-secondary', styles$a.title])
1368
+ }, /*#__PURE__*/React.createElement(FormattedMessage, label)), repeatable ? /*#__PURE__*/React.createElement("ul", {
1369
+ className: "d-flex list-unstyled m-n1 flex-grow-1"
1370
+ }, repeatableItems.map(function (item, index) {
1371
+ return /*#__PURE__*/React.createElement("li", {
1372
+ className: "p-1"
1373
+ }, /*#__PURE__*/React.createElement(ScreenWithPreview$1, {
1374
+ index: index,
1375
+ withIndexIndicator: true,
1376
+ withDeleteButtonOnRepeatables: true,
1377
+ screen: screen,
1378
+ screenState: "".concat(id, ".").concat(index),
1379
+ className: styles$a.button,
1380
+ active: currentState !== null && id === currentState.split('.')[0] && stateIndex !== null && parseInt(stateIndex, 10) === index,
1381
+ href: url('screen.field', {
1382
+ screen: screen.id,
1383
+ field: [id, index]
1384
+ }),
1385
+ onDeleteButtonClick: function onDeleteButtonClick() {
1386
+ return onClickDelete(index);
1387
+ }
1388
+ }));
1389
+ }), !withoutCreate ? /*#__PURE__*/React.createElement("li", {
1390
+ className: "p-1"
1391
+ }, /*#__PURE__*/React.createElement(Button, {
1392
+ className: classNames([styles$a.button, styles$a.addButton, 'h-100', 'p-0', 'justify-content-center']),
1393
+ theme: "secondary",
1394
+ outline: true,
1395
+ size: "lg",
1396
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1397
+ icon: faPlus
1398
+ }),
1399
+ onClick: onClickAdd
1400
+ })) : null) : /*#__PURE__*/React.createElement(ScreenWithPreview$1, {
1401
+ screen: screen,
1402
+ screenState: id,
1403
+ className: styles$a.button,
1404
+ active: id === currentState,
1405
+ href: url('screen.field', {
1406
+ screen: screen.id,
1407
+ field: id
1408
+ })
1409
+ // onClick={() => {
1410
+ // if (onStateChange !== null) {
1411
+ // onStateChange(id);
1412
+ // }
1413
+ // }}
1414
+ }));
1415
+ })));
1416
+ }
1417
+ ScreenStates.propTypes = propTypes$c;
1418
+ ScreenStates.defaultProps = defaultProps$c;
1419
+
1420
+ var styles$9 = {"container":"micromag-editor-preview-container","story":"micromag-editor-preview-story","noStory":"micromag-editor-preview-noStory","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","devices":"micromag-editor-preview-devices"};
1421
+
1422
+ var propTypes$b = {
1423
+ value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
1424
+ devices: PropTypes$1.devices,
1425
+ device: PropTypes.string,
1426
+ viewerTheme: PropTypes$1.viewerTheme,
1427
+ isTheme: PropTypes.bool,
1428
+ className: PropTypes.string,
1429
+ onScreenChange: PropTypes.func,
1430
+ onChange: PropTypes.func,
1431
+ withoutDevicesSizes: PropTypes.bool
1432
+ };
1433
+ var defaultProps$b = {
1434
+ value: null,
1435
+ devices: [{
1436
+ id: 'mobile',
1437
+ width: 320,
1438
+ height: 480
1439
+ }, {
1440
+ id: 'desktop',
1441
+ width: 1200,
1442
+ height: 900
1443
+ }],
1444
+ device: 'mobile',
1445
+ viewerTheme: null,
1446
+ isTheme: false,
1447
+ className: null,
1448
+ onScreenChange: null,
1449
+ onChange: null,
1450
+ withoutDevicesSizes: true
1451
+ };
1452
+ var EditorPreview = function EditorPreview(_ref) {
1453
+ var value = _ref.value,
1454
+ viewerTheme = _ref.viewerTheme,
1455
+ isTheme = _ref.isTheme,
1456
+ devices = _ref.devices,
1457
+ initialDevice = _ref.device,
1458
+ className = _ref.className,
1459
+ onScreenChange = _ref.onScreenChange,
1460
+ onChange = _ref.onChange,
1461
+ withoutDevicesSizes = _ref.withoutDevicesSizes;
1462
+ var _useRouteParams = useRouteParams(),
1463
+ _useRouteParams$scree = _useRouteParams.screen,
1464
+ screenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree,
1465
+ _useRouteParams$field = _useRouteParams.field,
1466
+ fieldParam = _useRouteParams$field === void 0 ? null : _useRouteParams$field;
1467
+ var _useScreenSize = useScreenSize(),
1468
+ _useScreenSize$screen = _useScreenSize.screen,
1469
+ screen = _useScreenSize$screen === void 0 ? null : _useScreenSize$screen,
1470
+ _useScreenSize$screen2 = _useScreenSize.screens,
1471
+ screens = _useScreenSize$screen2 === void 0 ? [] : _useScreenSize$screen2;
1472
+ var valueWithTheme = useThemeValue(value, isTheme);
1473
+ // const valueParsed = valueWithTheme;
1474
+ var valueParsed = useParsedStory(valueWithTheme, {
1475
+ withTheme: isTheme,
1476
+ withMedias: false
1477
+ });
1478
+
1479
+ // Get device
1480
+ var _useState = useState(initialDevice || devices[0].id),
1481
+ _useState2 = _slicedToArray(_useState, 2),
1482
+ deviceId = _useState2[0],
1483
+ setDeviceId = _useState2[1];
1484
+ var onClickDeviceItem = useCallback(function (e, it) {
1485
+ return setDeviceId(it.id);
1486
+ }, [setDeviceId]);
1487
+ var device = useMemo(function () {
1488
+ return devices.find(function (it) {
1489
+ return it.id === deviceId;
1490
+ });
1491
+ }, [devices, deviceId]);
1492
+
1493
+ // Calculate preview style
1494
+ var _useDimensionObserver = useDimensionObserver(),
1495
+ bottomRef = _useDimensionObserver.ref,
1496
+ _useDimensionObserver2 = _useDimensionObserver.width,
1497
+ bottomWidth = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2,
1498
+ _useDimensionObserver3 = _useDimensionObserver.height,
1499
+ bottomHeight = _useDimensionObserver3 === void 0 ? 0 : _useDimensionObserver3;
1500
+ var previewStyle = useMemo(function () {
1501
+ if (withoutDevicesSizes && initialDevice === null) {
1502
+ return {};
1503
+ }
1504
+ var deviceWidth = device.width,
1505
+ deviceHeight = device.height;
1506
+ var maxWidth = screen === 'mobile' ? bottomWidth : deviceWidth;
1507
+ var maxHeight = screen === 'mobile' ? bottomHeight : deviceHeight;
1508
+ var _getSizeWithinBounds = getSizeWithinBounds(maxWidth, maxHeight, bottomWidth, bottomHeight),
1509
+ previewScale = _getSizeWithinBounds.scale;
1510
+ return {
1511
+ width: maxWidth * previewScale,
1512
+ height: maxHeight * previewScale
1513
+ // transform: `scale(${previewScale}, ${previewScale})`,
1514
+ };
1515
+ }, [device, bottomWidth, bottomHeight, screen, withoutDevicesSizes, initialDevice]);
1516
+ var currentScreen = useMemo(function () {
1517
+ var _ref2 = valueParsed || {},
1518
+ _ref2$components = _ref2.components,
1519
+ components = _ref2$components === void 0 ? [] : _ref2$components;
1520
+ return (screenId !== null ? components.find(function (_ref3) {
1521
+ var id = _ref3.id;
1522
+ return id === screenId;
1523
+ }) : components[0]) || null;
1524
+ }, [valueParsed, screenId]);
1525
+ var currentScreenStates = useScreenStates(currentScreen);
1526
+ var _ref4 = fieldParam !== null && currentScreenStates !== null ? fieldParam.split('/') : [],
1527
+ _ref5 = _slicedToArray(_ref4, 1),
1528
+ _ref5$ = _ref5[0],
1529
+ screenStateParam = _ref5$ === void 0 ? null : _ref5$;
1530
+ var currentScreenState = screenStateParam !== null ? currentScreenStates.find(function (_ref6) {
1531
+ var id = _ref6.id;
1532
+ return id === screenStateParam;
1533
+ }) || null : null;
1534
+ var _ref7 = currentScreenState || {},
1535
+ _ref7$id = _ref7.id,
1536
+ screenStateId = _ref7$id === void 0 ? null : _ref7$id,
1537
+ _ref7$repeatable = _ref7.repeatable,
1538
+ repeatable = _ref7$repeatable === void 0 ? false : _ref7$repeatable;
1539
+ var currentScreenStateId = currentScreenState !== null && repeatable ? "".concat(screenStateId, ".").concat(fieldParam.split('/').find(function (it) {
1540
+ return it.match(/^[0-9]+$/) !== null;
1541
+ }) || 0) : screenStateId;
1542
+ return /*#__PURE__*/React.createElement("div", {
1543
+ className: classNames([styles$9.container, screens.map(function (screenName) {
1544
+ return styles$9["screen-".concat(screenName)];
1545
+ }), _defineProperty(_defineProperty({}, className, className), styles$9.withoutDevicesSizes, withoutDevicesSizes)])
1546
+ }, /*#__PURE__*/React.createElement("div", {
1547
+ className: styles$9.inner
1548
+ }, currentScreenStates !== null && currentScreen !== null ? /*#__PURE__*/React.createElement("div", {
1549
+ className: classNames([styles$9.top, 'px-1'])
1550
+ }, /*#__PURE__*/React.createElement(ScreenStates, {
1551
+ screen: currentScreen,
1552
+ screenState: currentScreenStateId,
1553
+ value: value,
1554
+ onChange: onChange
1555
+ })) : null, /*#__PURE__*/React.createElement("div", {
1556
+ className: styles$9.bottom
1557
+ }, /*#__PURE__*/React.createElement("div", {
1558
+ className: styles$9.inner,
1559
+ ref: bottomRef
1560
+ }, /*#__PURE__*/React.createElement("div", {
1561
+ className: styles$9.preview,
1562
+ style: previewStyle
1563
+ }, /*#__PURE__*/React.createElement("div", {
1564
+ className: styles$9.viewerContainer
1565
+ }, /*#__PURE__*/React.createElement(PlaybackProvider, null, /*#__PURE__*/React.createElement(Viewer, {
1566
+ story: valueParsed,
1567
+ storyIsParsed: true,
1568
+ screen: screenId,
1569
+ screenState: currentScreenStateId,
1570
+ className: styles$9.story,
1571
+ theme: viewerTheme,
1572
+ interactions: null,
1573
+ renderContext: "edit",
1574
+ onScreenChange: onScreenChange,
1575
+ withoutNavigationArrow: true,
1576
+ withoutTransitions: true,
1577
+ withoutGestures: true,
1578
+ withoutMenu: true
1579
+ })))))), !withoutDevicesSizes ? /*#__PURE__*/React.createElement("div", {
1580
+ className: styles$9.deviceMenu
1581
+ }, /*#__PURE__*/React.createElement(DevicesMenu$1, {
1582
+ items: devices.map(function (it) {
1583
+ return _objectSpread(_objectSpread({}, it), {}, {
1584
+ active: it.id === deviceId
1585
+ });
1586
+ }),
1587
+ onClickItem: onClickDeviceItem,
1588
+ className: styles$9.devices
1589
+ })) : null));
1590
+ };
1591
+ EditorPreview.propTypes = propTypes$b;
1592
+ EditorPreview.defaultProps = defaultProps$b;
1593
+ var EditorPreview$1 = EditorPreview;
1594
+
1595
+ var iOS = /iPad|iPhone|iPod/.test(navigator.platform);
1596
+ function getDragDepth(offset, indentationWidth) {
1597
+ return Math.round(offset / indentationWidth);
1598
+ }
1599
+ function getMaxDepth(_ref) {
1600
+ var previousItem = _ref.previousItem;
1601
+ if (previousItem) {
1602
+ // return previousItem.depth + 1;
1603
+ return 1;
1604
+ }
1605
+ return 0;
1606
+ }
1607
+ function getMinDepth(_ref2) {
1608
+ var nextItem = _ref2.nextItem;
1609
+ if (nextItem) {
1610
+ // return nextItem.depth;
1611
+ return 0;
1612
+ }
1613
+ return 0;
1614
+ }
1615
+ function getProjection(items, activeId, overId, dragOffset, indentationWidth) {
1616
+ var overItemIndex = items.findIndex(function (_ref3) {
1617
+ var id = _ref3.id;
1618
+ return id === overId;
1619
+ });
1620
+ var activeItemIndex = items.findIndex(function (_ref4) {
1621
+ var id = _ref4.id;
1622
+ return id === activeId;
1623
+ });
1624
+ var activeItem = items[activeItemIndex];
1625
+ var newItems = arrayMove(items, activeItemIndex, overItemIndex);
1626
+ var previousItem = newItems[overItemIndex - 1];
1627
+ var nextItem = newItems[overItemIndex + 1];
1628
+ var dragDepth = getDragDepth(dragOffset, indentationWidth);
1629
+ var projectedDepth = activeItem.depth + dragDepth;
1630
+ var maxDepth = getMaxDepth({
1631
+ previousItem: previousItem
1632
+ });
1633
+ var minDepth = getMinDepth({
1634
+ nextItem: nextItem
1635
+ });
1636
+ var depth = projectedDepth;
1637
+ if (projectedDepth >= maxDepth) {
1638
+ depth = maxDepth;
1639
+ } else if (projectedDepth < minDepth) {
1640
+ depth = minDepth;
1641
+ }
1642
+ function getParentId() {
1643
+ var _newItems$slice$rever;
1644
+ if (depth === 0 || !previousItem) {
1645
+ return null;
1646
+ }
1647
+ if (depth === previousItem.depth) {
1648
+ return previousItem.parentId;
1649
+ }
1650
+ if (depth > previousItem.depth) {
1651
+ return previousItem.id;
1652
+ }
1653
+ var newParent = (_newItems$slice$rever = newItems.slice(0, overItemIndex).reverse().find(function (item) {
1654
+ return item.depth === depth;
1655
+ })) === null || _newItems$slice$rever === void 0 ? void 0 : _newItems$slice$rever.parentId;
1656
+ return newParent !== null && newParent !== void 0 ? newParent : null;
1657
+ }
1658
+ return {
1659
+ depth: depth,
1660
+ maxDepth: maxDepth,
1661
+ minDepth: minDepth,
1662
+ parentId: getParentId()
1663
+ };
1664
+ }
1665
+ function flatten(items) {
1666
+ var parentId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1667
+ var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1668
+ return items.reduce(function (acc, item, index) {
1669
+ return [].concat(_toConsumableArray(acc), [_objectSpread(_objectSpread({}, item), {}, {
1670
+ parentId: item.parentId || parentId,
1671
+ depth: item.parentId ? 1 : 0,
1672
+ index: index // For some reason this aint enough
1673
+ })], _toConsumableArray(flatten(item.children || [], item.id, depth + 1)));
1674
+ }, []);
1675
+ }
1676
+ function flattenTree(items) {
1677
+ return flatten(items);
1678
+ }
1679
+ function findItem(items, itemId) {
1680
+ return items.find(function (_ref5) {
1681
+ var id = _ref5.id;
1682
+ return id === itemId;
1683
+ });
1684
+ }
1685
+ function buildTree(flattenedItems) {
1686
+ var root = {
1687
+ id: 'root',
1688
+ children: []
1689
+ };
1690
+ var nodes = _defineProperty({}, root.id, root);
1691
+ var items = flattenedItems.map(function (item) {
1692
+ return _objectSpread(_objectSpread({}, item), {}, {
1693
+ children: []
1694
+ });
1695
+ });
1696
+ // console.log('BUILD');
1697
+ var indexes = {};
1698
+ // eslint-disable-next-line no-restricted-syntax
1699
+ var _iterator = _createForOfIteratorHelper(items),
1700
+ _step;
1701
+ try {
1702
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1703
+ var _item$parentId, _nodes$parentId;
1704
+ var item = _step.value;
1705
+ var id = item.id,
1706
+ children = item.children;
1707
+ var parentId = (_item$parentId = item.parentId) !== null && _item$parentId !== void 0 ? _item$parentId : root.id;
1708
+ var parent = (_nodes$parentId = nodes[parentId]) !== null && _nodes$parentId !== void 0 ? _nodes$parentId : findItem(items, parentId);
1709
+ if (typeof indexes[parentId] !== 'undefined') {
1710
+ indexes[parentId] += 1;
1711
+ } else {
1712
+ indexes[parentId] = 0;
1713
+ }
1714
+ nodes[id] = {
1715
+ id: id,
1716
+ children: children,
1717
+ index: indexes[parentId]
1718
+ };
1719
+ parent.children.push(_objectSpread(_objectSpread({}, item), {}, {
1720
+ index: indexes[parentId]
1721
+ }));
1722
+ }
1723
+ } catch (err) {
1724
+ _iterator.e(err);
1725
+ } finally {
1726
+ _iterator.f();
1727
+ }
1728
+ return root.children;
1729
+ }
1730
+ function findItemDeep(items, itemId) {
1731
+ for (var i = 0; i < items.length; i += 1) {
1732
+ var item = items[i] || {};
1733
+ var id = item.id,
1734
+ _item$children = item.children,
1735
+ children = _item$children === void 0 ? [] : _item$children;
1736
+ if (id === itemId) {
1737
+ return item;
1738
+ }
1739
+ if (children.length > 0) {
1740
+ var child = findItemDeep(children, itemId);
1741
+ if (child) {
1742
+ return child;
1743
+ }
1744
+ }
1745
+ }
1746
+ return undefined;
1747
+ }
1748
+ function removeItem(items, id) {
1749
+ var newItems = [];
1750
+
1751
+ // eslint-disable-next-line no-restricted-syntax
1752
+ var _iterator2 = _createForOfIteratorHelper(items),
1753
+ _step2;
1754
+ try {
1755
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
1756
+ var item = _step2.value;
1757
+ if (item.id === id) {
1758
+ // eslint-disable-next-line no-continue
1759
+ continue;
1760
+ }
1761
+ if (item.children.length) {
1762
+ item.children = removeItem(item.children, id);
1763
+ }
1764
+ newItems.push(item);
1765
+ }
1766
+ } catch (err) {
1767
+ _iterator2.e(err);
1768
+ } finally {
1769
+ _iterator2.f();
1770
+ }
1771
+ return newItems;
1772
+ }
1773
+ function setProperty(items, id, property, setter) {
1774
+ // eslint-disable-next-line no-restricted-syntax
1775
+ var _iterator3 = _createForOfIteratorHelper(items),
1776
+ _step3;
1777
+ try {
1778
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1779
+ var item = _step3.value;
1780
+ if (item.id === id) {
1781
+ item[property] = setter(item[property]);
1782
+ // eslint-disable-next-line no-continue
1783
+ continue;
1784
+ }
1785
+ if (item.children.length) {
1786
+ item.children = setProperty(item.children, id, property, setter);
1787
+ }
1788
+ }
1789
+ } catch (err) {
1790
+ _iterator3.e(err);
1791
+ } finally {
1792
+ _iterator3.f();
1793
+ }
1794
+ return _toConsumableArray(items);
1795
+ }
1796
+ function countChildren(items) {
1797
+ var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1798
+ return items.reduce(function (acc, _ref6) {
1799
+ var _ref6$children = _ref6.children,
1800
+ children = _ref6$children === void 0 ? [] : _ref6$children;
1801
+ if (children.length) {
1802
+ return countChildren(children, acc + 1);
1803
+ }
1804
+ return acc + 1;
1805
+ }, count);
1806
+ }
1807
+ function getChildCount(items, id) {
1808
+ if (!id) {
1809
+ return 0;
1810
+ }
1811
+ var item = findItemDeep(items, id);
1812
+ return item ? countChildren(item.children || []) : 0;
1813
+ }
1814
+ function removeChildrenOf(items, ids) {
1815
+ var excludeParentIds = _toConsumableArray(ids);
1816
+ return items.filter(function (item) {
1817
+ if (item.parentId && excludeParentIds.includes(item.parentId)) {
1818
+ var _item$children2 = item.children,
1819
+ children = _item$children2 === void 0 ? [] : _item$children2;
1820
+ if (children.length) {
1821
+ excludeParentIds.push(item.id);
1822
+ }
1823
+ return false;
1824
+ }
1825
+ return true;
1826
+ });
1827
+ }
1828
+
1829
+ var directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left];
1830
+ var horizontal = [KeyboardCode.Left, KeyboardCode.Right];
1831
+ var sortableTreeKeyboardCoordinates = function sortableTreeKeyboardCoordinates(context, indentationWidth) {
1832
+ return function (event, _ref) {
1833
+ var currentCoordinates = _ref.currentCoordinates,
1834
+ _ref$context = _ref.context,
1835
+ active = _ref$context.active,
1836
+ over = _ref$context.over,
1837
+ collisionRect = _ref$context.collisionRect,
1838
+ droppableContainers = _ref$context.droppableContainers;
1839
+ if (directions.includes(event.code)) {
1840
+ var _droppableContainers$;
1841
+ if (!active || !collisionRect) {
1842
+ return;
1843
+ }
1844
+ event.preventDefault();
1845
+ var _context$current = context.current,
1846
+ items = _context$current.items,
1847
+ offset = _context$current.offset;
1848
+ if (horizontal.includes(event.code) && over !== null && over !== void 0 && over.id) {
1849
+ var _getProjection = getProjection(items, active.id, over.id, offset, indentationWidth),
1850
+ depth = _getProjection.depth,
1851
+ maxDepth = _getProjection.maxDepth,
1852
+ minDepth = _getProjection.minDepth;
1853
+ switch (event.code) {
1854
+ case KeyboardCode.Left:
1855
+ if (depth > minDepth) {
1856
+ return _objectSpread(_objectSpread({}, currentCoordinates), {}, {
1857
+ x: currentCoordinates.x - indentationWidth
1858
+ });
1859
+ }
1860
+ break;
1861
+ case KeyboardCode.Right:
1862
+ if (depth < maxDepth) {
1863
+ return _objectSpread(_objectSpread({}, currentCoordinates), {}, {
1864
+ x: currentCoordinates.x + indentationWidth
1865
+ });
1866
+ }
1867
+ break;
1868
+ default:
1869
+ return undefined;
1870
+ }
1871
+ return undefined;
1872
+ }
1873
+ var containers = [];
1874
+ var overRect = over !== null && over !== void 0 && over.id ? (_droppableContainers$ = droppableContainers.get(over.id)) === null || _droppableContainers$ === void 0 ? void 0 : _droppableContainers$.rect.current : undefined;
1875
+ if (overRect) {
1876
+ droppableContainers.forEach(function (container) {
1877
+ if (container !== null && container !== void 0 && container.disabled) {
1878
+ return;
1879
+ }
1880
+ var rect = container === null || container === void 0 ? void 0 : container.rect.current;
1881
+ if (!rect) {
1882
+ return;
1883
+ }
1884
+ switch (event.code) {
1885
+ case KeyboardCode.Down:
1886
+ if (overRect.top < rect.top) {
1887
+ containers.push(container);
1888
+ }
1889
+ break;
1890
+ case KeyboardCode.Up:
1891
+ if (overRect.top > rect.top) {
1892
+ containers.push(container);
1893
+ }
1894
+ break;
1895
+ //
1896
+ }
1897
+ });
1898
+ }
1899
+ var collisions = closestCorners({
1900
+ active: active,
1901
+ collisionRect: collisionRect,
1902
+ pointerCoordinates: null,
1903
+ droppableContainers: containers
1904
+ });
1905
+ var closestId = getFirstCollision(collisions, 'id');
1906
+ if (closestId && over !== null && over !== void 0 && over.id) {
1907
+ var _droppableContainers$2, _droppableContainers$3;
1908
+ var newNode = (_droppableContainers$2 = droppableContainers.get(closestId)) === null || _droppableContainers$2 === void 0 ? void 0 : _droppableContainers$2.node.current;
1909
+ var activeNodeRect = (_droppableContainers$3 = droppableContainers.get(active.id)) === null || _droppableContainers$3 === void 0 ? void 0 : _droppableContainers$3.rect.current;
1910
+ if (newNode && activeNodeRect) {
1911
+ var newRect = getClientRect(newNode, {
1912
+ ignoreTransform: true
1913
+ });
1914
+ var newItem = items.find(function (_ref2) {
1915
+ var id = _ref2.id;
1916
+ return id === closestId;
1917
+ });
1918
+ var activeItem = items.find(function (_ref3) {
1919
+ var id = _ref3.id;
1920
+ return id === active.id;
1921
+ });
1922
+ if (newItem && activeItem) {
1923
+ var _getProjection2 = getProjection(items, active.id, closestId, (newItem.depth - activeItem.depth) * indentationWidth, indentationWidth),
1924
+ _depth = _getProjection2.depth;
1925
+ var topOffset = newRect.top > activeNodeRect.top ? Math.abs(activeNodeRect.height - newRect.height) : 0;
1926
+ var newCoordinates = {
1927
+ x: newRect.left + _depth * indentationWidth,
1928
+ y: newRect.top + topOffset
1929
+ };
1930
+ return newCoordinates;
1931
+ }
1932
+ }
1933
+ }
1934
+ }
1935
+ return undefined;
1936
+ };
1937
+ };
1938
+
1939
+ var styles$8 = {"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","count":"micromag-editor-sortable-sortable-tree-item-actions-count","collapsedCount":"micromag-editor-sortable-sortable-tree-item-actions-collapsedCount","disableInteraction":"micromag-editor-sortable-sortable-tree-item-actions-disableInteraction","disableSelection":"micromag-editor-sortable-sortable-tree-item-actions-disableSelection","clone":"micromag-editor-sortable-sortable-tree-item-actions-clone","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"};
1940
+
1941
+ var _excluded$4 = ["childCount", "clone", "depth", "disableSelection", "disableInteraction", "ghost", "handleProps", "indentationWidth", "indicator", "collapsed", "onCollapse", "onRemove", "onClick", "style", "value", "wrapperRef", "showId", "showCount", "showCollapsedCount", "children"];
1942
+ var propTypes$a = {
1943
+ childCount: PropTypes.number,
1944
+ clone: PropTypes.bool,
1945
+ collapsed: PropTypes.bool,
1946
+ depth: PropTypes.number.isRequired,
1947
+ disableInteraction: PropTypes.bool,
1948
+ disableSelection: PropTypes.bool,
1949
+ ghost: PropTypes.bool,
1950
+ // eslint-disable-next-line react/forbid-prop-types
1951
+ handleProps: PropTypes.any,
1952
+ indicator: PropTypes.bool,
1953
+ indentationWidth: PropTypes.number.isRequired,
1954
+ value: PropTypes.string,
1955
+ onCollapse: PropTypes.func,
1956
+ onRemove: PropTypes.func,
1957
+ onClick: PropTypes.func,
1958
+ // eslint-disable-next-line react/forbid-prop-types
1959
+ wrapperRef: PropTypes.any,
1960
+ style: PropTypes.shape({
1961
+ width: PropTypes.number.isRequired,
1962
+ height: PropTypes.number.isRequired,
1963
+ transform: PropTypes.string.isRequired
1964
+ }),
1965
+ showId: PropTypes.bool,
1966
+ showCount: PropTypes.bool,
1967
+ showCollapsedCount: PropTypes.bool,
1968
+ children: PropTypes.node
1969
+ };
1970
+ var defaultProps$a = {
1971
+ childCount: null,
1972
+ clone: false,
1973
+ collapsed: false,
1974
+ disableInteraction: false,
1975
+ disableSelection: false,
1976
+ ghost: false,
1977
+ handleProps: null,
1978
+ indicator: false,
1979
+ value: null,
1980
+ onCollapse: null,
1981
+ onRemove: null,
1982
+ onClick: null,
1983
+ wrapperRef: null,
1984
+ style: null,
1985
+ showId: false,
1986
+ showCount: false,
1987
+ showCollapsedCount: false,
1988
+ children: null
1989
+ };
1990
+ var SortableTreeItemActions = /*#__PURE__*/forwardRef(function (_ref, ref) {
1991
+ var childCount = _ref.childCount,
1992
+ clone = _ref.clone,
1993
+ depth = _ref.depth,
1994
+ disableSelection = _ref.disableSelection,
1995
+ disableInteraction = _ref.disableInteraction,
1996
+ ghost = _ref.ghost,
1997
+ handleProps = _ref.handleProps,
1998
+ indentationWidth = _ref.indentationWidth,
1999
+ indicator = _ref.indicator,
2000
+ collapsed = _ref.collapsed,
2001
+ onCollapse = _ref.onCollapse,
2002
+ onRemove = _ref.onRemove;
2003
+ _ref.onClick;
2004
+ var style = _ref.style;
2005
+ _ref.value;
2006
+ var wrapperRef = _ref.wrapperRef;
2007
+ _ref.showId;
2008
+ var showCount = _ref.showCount,
2009
+ showCollapsedCount = _ref.showCollapsedCount,
2010
+ children = _ref.children,
2011
+ props = _objectWithoutProperties(_ref, _excluded$4);
2012
+ return /*#__PURE__*/React.createElement("div", Object.assign({
2013
+ className: classNames([styles$8.wrapper, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles$8.clone, clone), styles$8.ghost, ghost), styles$8.indicator, indicator), styles$8.disableSelection, disableSelection), styles$8.disableInteraction, disableInteraction), styles$8.withChildren, onCollapse !== null)]),
2014
+ ref: wrapperRef,
2015
+ style: {
2016
+ marginLeft: "".concat(indentationWidth * depth, "px"),
2017
+ marginRight: "".concat(5 * depth, "px")
2018
+ }
2019
+ }, props), /*#__PURE__*/React.createElement("div", {
2020
+ className: styles$8.inner,
2021
+ ref: ref,
2022
+ style: style
2023
+ }, /*#__PURE__*/React.createElement("button", Object.assign({
2024
+ className: classNames([styles$8.button, styles$8.handle]),
2025
+ type: "button"
2026
+ }, handleProps), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
2027
+ className: styles$8.icon,
2028
+ icon: faGripLines
2029
+ })), !clone && onRemove ? /*#__PURE__*/React.createElement("button", {
2030
+ type: "button",
2031
+ onClick: onRemove
2032
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
2033
+ icon: faTimes
2034
+ })) : null, clone && showCount && childCount && childCount > 1 ? /*#__PURE__*/React.createElement("span", {
2035
+ className: styles$8.count
2036
+ }, childCount) : null, showCollapsedCount && onCollapse && collapsed && childCount !== null && childCount > 0 ? /*#__PURE__*/React.createElement("span", {
2037
+ className: styles$8.collapsedCount
2038
+ }, childCount) : null, onCollapse && depth === 0 ? /*#__PURE__*/React.createElement("button", {
2039
+ type: "button",
2040
+ onClick: onCollapse,
2041
+ className: classNames(styles$8.button, styles$8.collapse, collapsed && styles$8.collapsed)
2042
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
2043
+ icon: faAngleDown
2044
+ })) : null, /*#__PURE__*/React.createElement("div", {
2045
+ className: styles$8.children
2046
+ }, children)));
2047
+ });
2048
+ SortableTreeItemActions.propTypes = propTypes$a;
2049
+ SortableTreeItemActions.defaultProps = defaultProps$a;
2050
+ var SortableTreeItemActions$1 = SortableTreeItemActions;
2051
+
2052
+ var styles$7 = {"container":"micromag-editor-sortable-sortable-tree-item-container","parent":"micromag-editor-sortable-sortable-tree-item-parent","child":"micromag-editor-sortable-sortable-tree-item-child"};
2053
+
2054
+ var _excluded$3 = ["id", "index", "depth", "component", "value", "style", "smallScale", "collapsed", "onCollapse", "onClickItem", "childValue", "isLastChild"];
2055
+ var propTypes$9 = {
2056
+ id: PropTypes.string.isRequired,
2057
+ index: PropTypes.number.isRequired,
2058
+ depth: PropTypes.number.isRequired,
2059
+ component: PropTypes.func,
2060
+ // eslint-disable-next-line react/forbid-prop-types
2061
+ value: PropTypes.object,
2062
+ style: PropTypes.shape({
2063
+ width: PropTypes.number.isRequired,
2064
+ height: PropTypes.number.isRequired,
2065
+ scaledWidth: PropTypes.number.isRequired,
2066
+ scaledHeight: PropTypes.number.isRequired,
2067
+ transform: PropTypes.string.isRequired,
2068
+ scale: PropTypes.number.isRequired
2069
+ }),
2070
+ smallScale: PropTypes.number,
2071
+ collapsed: PropTypes.bool,
2072
+ onCollapse: PropTypes.func,
2073
+ onClickItem: PropTypes.func,
2074
+ // eslint-disable-next-line react/forbid-prop-types
2075
+ childValue: PropTypes.object,
2076
+ isLastChild: PropTypes.bool
2077
+ };
2078
+ var defaultProps$9 = {
2079
+ component: null,
2080
+ value: null,
2081
+ style: null,
2082
+ smallScale: 0.75,
2083
+ collapsed: false,
2084
+ onCollapse: null,
2085
+ onClickItem: null,
2086
+ childValue: null,
2087
+ isLastChild: false
2088
+ };
2089
+ var animateLayoutChanges = function animateLayoutChanges(_ref) {
2090
+ var isSorting = _ref.isSorting,
2091
+ wasDragging = _ref.wasDragging;
2092
+ return !(isSorting || wasDragging);
2093
+ };
2094
+ var SortableTreeItem = function SortableTreeItem(_ref2) {
2095
+ var id = _ref2.id,
2096
+ index = _ref2.index,
2097
+ depth = _ref2.depth,
2098
+ Component = _ref2.component,
2099
+ value = _ref2.value;
2100
+ _ref2.style;
2101
+ _ref2.smallScale;
2102
+ var collapsed = _ref2.collapsed,
2103
+ onCollapse = _ref2.onCollapse,
2104
+ onClickItem = _ref2.onClickItem,
2105
+ childValue = _ref2.childValue;
2106
+ _ref2.isLastChild;
2107
+ var props = _objectWithoutProperties(_ref2, _excluded$3);
2108
+ var _useSortable = useSortable({
2109
+ id: id,
2110
+ animateLayoutChanges: animateLayoutChanges
2111
+ }),
2112
+ attributes = _useSortable.attributes,
2113
+ isDragging = _useSortable.isDragging,
2114
+ isSorting = _useSortable.isSorting,
2115
+ listeners = _useSortable.listeners,
2116
+ setDraggableNodeRef = _useSortable.setDraggableNodeRef,
2117
+ setDroppableNodeRef = _useSortable.setDroppableNodeRef,
2118
+ transform = _useSortable.transform,
2119
+ transition = _useSortable.transition;
2120
+ var timeout = useRef(null);
2121
+ var actionsStyle = {
2122
+ transform: CSS.Translate.toString(transform),
2123
+ transition: transition
2124
+ };
2125
+ var _ref3 = listeners || {},
2126
+ _ref3$onPointerDown = _ref3.onPointerDown,
2127
+ onPointerDown = _ref3$onPointerDown === void 0 ? null : _ref3$onPointerDown,
2128
+ _ref3$onPointerUp = _ref3.onPointerUp,
2129
+ onPointerUp = _ref3$onPointerUp === void 0 ? null : _ref3$onPointerUp;
2130
+ var onClickAction = useCallback(function (e) {
2131
+ if (onClickItem !== null) {
2132
+ onClickItem(value, index);
2133
+ }
2134
+ if (onPointerDown !== null) {
2135
+ e.persist();
2136
+ timeout.current = setTimeout(function () {
2137
+ if (onPointerDown !== null) {
2138
+ onPointerDown(e);
2139
+ }
2140
+ timeout.current = null;
2141
+ }, 200);
2142
+ }
2143
+ }, [value, index, onClickItem, onPointerDown]);
2144
+ var cancellingPointerUp = useCallback(function (e) {
2145
+ if (timeout.current !== null) {
2146
+ clearTimeout(timeout.current);
2147
+ }
2148
+ if (onPointerUp !== null) {
2149
+ onPointerUp(e);
2150
+ }
2151
+ }, [onPointerUp]);
2152
+ return /*#__PURE__*/React.createElement("div", {
2153
+ className: classNames([styles$7.container])
2154
+ }, /*#__PURE__*/React.createElement(SortableTreeItemActions$1, Object.assign({
2155
+ ref: setDraggableNodeRef,
2156
+ wrapperRef: setDroppableNodeRef,
2157
+ style: actionsStyle,
2158
+ depth: depth,
2159
+ ghost: isDragging,
2160
+ disableSelection: iOS,
2161
+ disableInteraction: isSorting,
2162
+ handleProps: _objectSpread(_objectSpread(_objectSpread({}, attributes), listeners), {}, {
2163
+ onPointerDown: onClickAction,
2164
+ onPointerUp: cancellingPointerUp
2165
+ }),
2166
+ collapsed: collapsed,
2167
+ onCollapse: onCollapse
2168
+ }, props), Component !== null ? /*#__PURE__*/React.createElement("div", {
2169
+ className: styles$7.parent
2170
+ }, /*#__PURE__*/React.createElement(Component, value)) : null, childValue !== null ? /*#__PURE__*/React.createElement("div", {
2171
+ className: styles$7.child
2172
+ }, /*#__PURE__*/React.createElement(Component, childValue)) : null));
2173
+ };
2174
+ SortableTreeItem.propTypes = propTypes$9;
2175
+ SortableTreeItem.defaultProps = defaultProps$9;
2176
+ var SortableTreeItem$1 = SortableTreeItem;
2177
+
2178
+ var styles$6 = {"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"};
2179
+
2180
+ var initialItems = [{
2181
+ id: 'Home',
2182
+ children: []
2183
+ }, {
2184
+ id: 'Collections',
2185
+ children: [{
2186
+ id: 'Spring',
2187
+ children: []
2188
+ }, {
2189
+ id: 'Summer',
2190
+ children: []
2191
+ }, {
2192
+ id: 'Fall',
2193
+ children: []
2194
+ }, {
2195
+ id: 'Winter',
2196
+ children: []
2197
+ }]
2198
+ }];
2199
+ var measuring = {
2200
+ droppable: {
2201
+ strategy: MeasuringStrategy.Always
2202
+ }
2203
+ };
2204
+ var dropAnimation = _objectSpread(_objectSpread({}, defaultDropAnimation), {}, {
2205
+ dragSourceOpacity: 0.5
2206
+ });
2207
+ var adjustTranslate = function adjustTranslate(_ref) {
2208
+ var transform = _ref.transform;
2209
+ return _objectSpread(_objectSpread({}, transform), {}, {
2210
+ y: transform.y - 25
2211
+ });
2212
+ };
2213
+ var propTypes$8 = {
2214
+ collapsible: PropTypes.bool,
2215
+ // eslint-disable-next-line react/forbid-prop-types
2216
+ items: PropTypes.array,
2217
+ indentationWidth: PropTypes.number,
2218
+ indicator: PropTypes.bool,
2219
+ removable: PropTypes.bool,
2220
+ component: PropTypes.func,
2221
+ onClickItem: PropTypes.func,
2222
+ onChange: PropTypes.func
2223
+ };
2224
+ var defaultProps$8 = {
2225
+ collapsible: true,
2226
+ items: initialItems,
2227
+ indentationWidth: 30,
2228
+ indicator: false,
2229
+ removable: false,
2230
+ component: null,
2231
+ onClickItem: null,
2232
+ onChange: null
2233
+ };
2234
+ var SortableTree = function SortableTree(_ref2) {
2235
+ var collapsible = _ref2.collapsible,
2236
+ defaultItems = _ref2.items,
2237
+ indicator = _ref2.indicator,
2238
+ indentationWidth = _ref2.indentationWidth,
2239
+ removable = _ref2.removable,
2240
+ component = _ref2.component,
2241
+ onClickItem = _ref2.onClickItem,
2242
+ onChange = _ref2.onChange;
2243
+ var _useState = useState(function () {
2244
+ return buildTree(defaultItems);
2245
+ }),
2246
+ _useState2 = _slicedToArray(_useState, 2),
2247
+ items = _useState2[0],
2248
+ setItems = _useState2[1];
2249
+ var _useState3 = useState(null),
2250
+ _useState4 = _slicedToArray(_useState3, 2),
2251
+ activeId = _useState4[0],
2252
+ setActiveId = _useState4[1];
2253
+ var _useState5 = useState(null),
2254
+ _useState6 = _slicedToArray(_useState5, 2),
2255
+ overId = _useState6[0],
2256
+ setOverId = _useState6[1];
2257
+ var _useState7 = useState(0),
2258
+ _useState8 = _slicedToArray(_useState7, 2),
2259
+ offsetLeft = _useState8[0],
2260
+ setOffsetLeft = _useState8[1];
2261
+ var _useState9 = useState(null),
2262
+ _useState10 = _slicedToArray(_useState9, 2),
2263
+ currentPosition = _useState10[0],
2264
+ setCurrentPosition = _useState10[1];
2265
+
2266
+ // Tree setup from list
2267
+ useEffect(function () {
2268
+ var flat = flattenTree(items);
2269
+ var merged = defaultItems.map(function (t1) {
2270
+ return _objectSpread(_objectSpread({}, flat.find(function (t2) {
2271
+ return t2.id === t1.id;
2272
+ })), t1);
2273
+ });
2274
+ setItems(buildTree(merged));
2275
+ }, [defaultItems.length]);
2276
+ var flattenedItems = useMemo(function () {
2277
+ var flattenedTree = flattenTree(items);
2278
+ var collapsedItems = flattenedTree.reduce(function (acc, _ref3) {
2279
+ var _ref3$children = _ref3.children,
2280
+ children = _ref3$children === void 0 ? [] : _ref3$children,
2281
+ collapsed = _ref3.collapsed,
2282
+ id = _ref3.id;
2283
+ return collapsed && children.length ? [].concat(_toConsumableArray(acc), [id]) : acc;
2284
+ }, []) || null;
2285
+ return removeChildrenOf(flattenedTree, activeId ? [activeId].concat(_toConsumableArray(collapsedItems)) : collapsedItems);
2286
+ }, [activeId, items, items.length]);
2287
+ var projected = activeId && overId ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
2288
+ var sensorContext = useRef({
2289
+ items: flattenedItems,
2290
+ offset: offsetLeft
2291
+ });
2292
+ var _useState11 = useState(function () {
2293
+ return sortableTreeKeyboardCoordinates(sensorContext, indentationWidth);
2294
+ }),
2295
+ _useState12 = _slicedToArray(_useState11, 1),
2296
+ coordinateGetter = _useState12[0];
2297
+ var sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, {
2298
+ coordinateGetter: coordinateGetter
2299
+ }));
2300
+ var sortedIds = useMemo(function () {
2301
+ return flattenedItems.map(function (_ref4) {
2302
+ var id = _ref4.id;
2303
+ return id;
2304
+ });
2305
+ }, [flattenedItems]);
2306
+ var activeItem = activeId ? flattenedItems.find(function (_ref5) {
2307
+ var id = _ref5.id;
2308
+ return id === activeId;
2309
+ }) : null;
2310
+ useEffect(function () {
2311
+ sensorContext.current = {
2312
+ items: flattenedItems,
2313
+ offset: offsetLeft
2314
+ };
2315
+ }, [flattenedItems, offsetLeft]);
2316
+ function getMovementAnnouncement(eventName, currentActiveId, currentOverId) {
2317
+ if (currentOverId && projected) {
2318
+ if (eventName !== 'onDragEnd') {
2319
+ if (currentPosition && projected.parentId === currentPosition.parentId && currentOverId === currentPosition.overId) {
2320
+ return;
2321
+ }
2322
+ setCurrentPosition({
2323
+ parentId: projected.parentId,
2324
+ overId: currentOverId
2325
+ });
2326
+ }
2327
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2328
+ var overIndex = clonedItems.findIndex(function (_ref6) {
2329
+ var id = _ref6.id;
2330
+ return id === currentOverId;
2331
+ });
2332
+ var activeIndex = clonedItems.findIndex(function (_ref7) {
2333
+ var id = _ref7.id;
2334
+ return id === currentActiveId;
2335
+ });
2336
+ var sortedItems = arrayMove(clonedItems, activeIndex, overIndex);
2337
+ var previousItem = sortedItems[overIndex - 1];
2338
+ var newAnnouncement;
2339
+ var movedVerb = eventName === 'onDragEnd' ? 'dropped' : 'moved';
2340
+ var nestedVerb = eventName === 'onDragEnd' ? 'dropped' : 'nested';
2341
+ if (!previousItem) {
2342
+ var nextItem = typeof sortedItems[overIndex + 1] !== 'undefined' ? sortedItems[overIndex + 1] : null;
2343
+ if (nextItem !== null) {
2344
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " before ").concat(nextItem.id, ".");
2345
+ }
2346
+ } else if (projected.depth > previousItem.depth) {
2347
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(nestedVerb, " under ").concat(previousItem.id, ".");
2348
+ } else {
2349
+ var previousSibling = previousItem;
2350
+ var _loop = function _loop() {
2351
+ var _previousSibling = previousSibling,
2352
+ parentId = _previousSibling.parentId;
2353
+ previousSibling = sortedItems.find(function (_ref8) {
2354
+ var id = _ref8.id;
2355
+ return id === parentId;
2356
+ });
2357
+ };
2358
+ while (previousSibling && projected.depth < previousSibling.depth) {
2359
+ _loop();
2360
+ }
2361
+ if (previousSibling) {
2362
+ newAnnouncement = "".concat(currentActiveId, " was ").concat(movedVerb, " after ").concat(previousSibling.id, ".");
2363
+ }
2364
+ }
2365
+
2366
+ // eslint-disable-next-line consistent-return
2367
+ return newAnnouncement;
2368
+ }
2369
+ }
2370
+ var announcements = useMemo(function () {
2371
+ return {
2372
+ onDragStart: function onDragStart(id) {
2373
+ return "Picked up ".concat(id, ".");
2374
+ },
2375
+ onDragMove: function onDragMove(id, currentOverId) {
2376
+ return getMovementAnnouncement('onDragMove', id, currentOverId);
2377
+ },
2378
+ onDragOver: function onDragOver(id, currentOverId) {
2379
+ return getMovementAnnouncement('onDragOver', id, currentOverId);
2380
+ },
2381
+ onDragEnd: function onDragEnd(id, currentOverId) {
2382
+ return getMovementAnnouncement('onDragEnd', id, currentOverId);
2383
+ },
2384
+ onDragCancel: function onDragCancel(id) {
2385
+ return "Moving was cancelled. ".concat(id, " was dropped in its original position.");
2386
+ }
2387
+ };
2388
+ }, [getMovementAnnouncement]);
2389
+ var activeValue = defaultItems.find(function (_ref9) {
2390
+ var _ref9$id = _ref9.id,
2391
+ defaultId = _ref9$id === void 0 ? null : _ref9$id;
2392
+ return defaultId === activeId;
2393
+ });
2394
+ var handleDragStart = useCallback(function (_ref10) {
2395
+ var newActiveId = _ref10.active.id;
2396
+ setActiveId(newActiveId);
2397
+ setOverId(newActiveId);
2398
+ var newActiveItem = flattenedItems.find(function (_ref11) {
2399
+ var id = _ref11.id;
2400
+ return id === newActiveId;
2401
+ });
2402
+ if (newActiveItem) {
2403
+ setCurrentPosition({
2404
+ parentId: newActiveItem.parentId,
2405
+ overId: activeId
2406
+ });
2407
+ }
2408
+ document.body.style.setProperty('cursor', 'grabbing');
2409
+ }, [flattenedItems, setActiveId, setOverId, setCurrentPosition]);
2410
+ var handleDragMove = useCallback(function (_ref12) {
2411
+ var delta = _ref12.delta;
2412
+ setOffsetLeft(delta.x);
2413
+ }, [setOffsetLeft]);
2414
+ var handleDragOver = useCallback(function (_ref13) {
2415
+ var _over$id;
2416
+ var over = _ref13.over;
2417
+ setOverId((_over$id = over === null || over === void 0 ? void 0 : over.id) !== null && _over$id !== void 0 ? _over$id : null);
2418
+ }, [setOverId]);
2419
+ var resetState = useCallback(function () {
2420
+ setOverId(null);
2421
+ setActiveId(null);
2422
+ setOffsetLeft(0);
2423
+ setCurrentPosition(null);
2424
+ document.body.style.setProperty('cursor', '');
2425
+ }, [setOverId, setActiveId, setOffsetLeft, setCurrentPosition]);
2426
+ var handleDragEnd = useCallback(function (_ref14) {
2427
+ var active = _ref14.active,
2428
+ over = _ref14.over;
2429
+ resetState();
2430
+ if (projected && over) {
2431
+ var depth = projected.depth,
2432
+ parentId = projected.parentId;
2433
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
2434
+ var overIndex = clonedItems.findIndex(function (_ref15) {
2435
+ var id = _ref15.id;
2436
+ return id === over.id;
2437
+ });
2438
+ var activeIndex = clonedItems.findIndex(function (_ref16) {
2439
+ var id = _ref16.id;
2440
+ return id === active.id;
2441
+ });
2442
+ var activeTreeItem = clonedItems[activeIndex];
2443
+ var maxDepth = getMaxDepth(activeTreeItem);
2444
+ // Un-merge and flatten
2445
+ if (depth > 0 && depth >= maxDepth && (activeTreeItem === null || activeTreeItem === void 0 ? void 0 : activeTreeItem.children) !== null && activeTreeItem.children.length > 0) {
2446
+ var _loop2 = function _loop2() {
2447
+ var childId = activeTreeItem.children[i].id;
2448
+ var childIndex = clonedItems.findIndex(function (_ref17) {
2449
+ var id = _ref17.id;
2450
+ return id === childId;
2451
+ });
2452
+ clonedItems[childIndex].parentId = parentId;
2453
+ clonedItems[childIndex].depth = depth;
2454
+ };
2455
+ for (var i = 0; i < activeTreeItem.children.length; i += 1) {
2456
+ _loop2();
2457
+ }
2458
+ activeTreeItem.children = [];
2459
+ }
2460
+ clonedItems[activeIndex] = _objectSpread(_objectSpread({}, activeTreeItem), {}, {
2461
+ depth: depth,
2462
+ parentId: parentId
2463
+ });
2464
+ var sortedItems = arrayMove(clonedItems, activeIndex, overIndex);
2465
+ var newItems = buildTree(sortedItems);
2466
+ setItems(newItems);
2467
+ if (onChange !== null) {
2468
+ // console.log('hell is flat', sortedItems);
2469
+ // console.log('hell is tree', newItems);
2470
+ onChange((sortedItems || []).map(function (_ref18) {
2471
+ var itemId = _ref18.id,
2472
+ _ref18$children = _ref18.children,
2473
+ children = _ref18$children === void 0 ? [] : _ref18$children,
2474
+ _ref18$parentId = _ref18.parentId,
2475
+ itParentId = _ref18$parentId === void 0 ? null : _ref18$parentId,
2476
+ _ref18$collapsed = _ref18.collapsed,
2477
+ collapsed = _ref18$collapsed === void 0 ? false : _ref18$collapsed;
2478
+ return {
2479
+ id: itemId,
2480
+ props: _objectSpread(_objectSpread({}, (children || []).length > 0 ? {
2481
+ group: {
2482
+ collapsed: collapsed,
2483
+ mergeNavItems: true
2484
+ }
2485
+ } : {
2486
+ group: null
2487
+ }), itParentId !== null ? {
2488
+ parentId: itParentId
2489
+ } : {
2490
+ parentId: null
2491
+ })
2492
+ };
2493
+ }));
2494
+ }
2495
+ }
2496
+ }, [projected, items, resetState, arrayMove, buildTree, setItems]);
2497
+ var handleDragCancel = useCallback(function () {
2498
+ resetState();
2499
+ }, [resetState]);
2500
+ var handleRemove = useCallback(function (id) {
2501
+ setItems(function (newItems) {
2502
+ return removeItem(newItems, id);
2503
+ });
2504
+ }, [setItems, removeItem]);
2505
+ var handleCollapse = useCallback(function (id) {
2506
+ setItems(function (newItems) {
2507
+ return setProperty(newItems, id, 'collapsed', function (value) {
2508
+ return !value;
2509
+ });
2510
+ });
2511
+ }, [setItems, setProperty]);
2512
+ return /*#__PURE__*/React.createElement(DndContext, {
2513
+ accessibility: {
2514
+ announcements: announcements
2515
+ }
2516
+ // announcements={announcements}
2517
+ ,
2518
+ sensors: sensors,
2519
+ collisionDetection: closestCenter,
2520
+ measuring: measuring,
2521
+ onDragStart: handleDragStart,
2522
+ onDragMove: handleDragMove,
2523
+ onDragOver: handleDragOver,
2524
+ onDragEnd: handleDragEnd,
2525
+ onDragCancel: handleDragCancel
2526
+ }, /*#__PURE__*/React.createElement(SortableContext, {
2527
+ items: sortedIds,
2528
+ strategy: verticalListSortingStrategy
2529
+ }, flattenedItems.map(function (_ref19, idx) {
2530
+ var _flattenedItems;
2531
+ var id = _ref19.id,
2532
+ _ref19$children = _ref19.children,
2533
+ children = _ref19$children === void 0 ? [] : _ref19$children,
2534
+ collapsed = _ref19.collapsed,
2535
+ depth = _ref19.depth;
2536
+ var screenValue = defaultItems.find(function (_ref20) {
2537
+ var _ref20$id = _ref20.id,
2538
+ defaultId = _ref20$id === void 0 ? null : _ref20$id;
2539
+ return defaultId === id;
2540
+ });
2541
+ var next = ((_flattenedItems = flattenedItems[idx + 1]) === null || _flattenedItems === void 0 ? void 0 : _flattenedItems.parentId) || null;
2542
+ var isCollapsed = collapsed && children.length > 0;
2543
+ var onCollapse = collapsible && children.length ? function () {
2544
+ return handleCollapse(id);
2545
+ } : null;
2546
+ var currentDepth = id === activeId && projected ? projected.depth : depth;
2547
+ var childCount = getChildCount(items, id);
2548
+ var childValue = childCount > 0 && collapsed ? defaultItems.slice().reverse().find(function (_ref21) {
2549
+ var _ref21$parentId = _ref21.parentId,
2550
+ parentId = _ref21$parentId === void 0 ? null : _ref21$parentId;
2551
+ return parentId === id;
2552
+ }) : null;
2553
+ return /*#__PURE__*/React.createElement("div", {
2554
+ className: classNames([styles$6.item, _defineProperty(_defineProperty(_defineProperty({}, styles$6.parent, onCollapse !== null && !collapsed), styles$6.group, depth === 1), styles$6.isLastChild, next === null)]),
2555
+ key: id
2556
+ }, /*#__PURE__*/React.createElement(SortableTreeItem$1, {
2557
+ key: id,
2558
+ id: id,
2559
+ depth: currentDepth,
2560
+ indentationWidth: indentationWidth,
2561
+ indicator: indicator,
2562
+ collapsed: isCollapsed,
2563
+ onCollapse: onCollapse,
2564
+ onRemove: removable ? function () {
2565
+ return handleRemove(id);
2566
+ } : undefined,
2567
+ childCount: childCount,
2568
+ component: component,
2569
+ value: (screenValue === null || screenValue === void 0 ? void 0 : screenValue.value) || null,
2570
+ onClickItem: onClickItem,
2571
+ index: idx,
2572
+ childValue: (childValue === null || childValue === void 0 ? void 0 : childValue.value) || null
2573
+ }));
2574
+ }), /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(DragOverlay, {
2575
+ dropAnimation: dropAnimation,
2576
+ modifiers: indicator ? [adjustTranslate] : undefined
2577
+ }, activeId && activeItem ? /*#__PURE__*/React.createElement("div", {
2578
+ className: styles$6.item,
2579
+ key: activeId
2580
+ }, /*#__PURE__*/React.createElement(SortableTreeItem$1, {
2581
+ id: activeId,
2582
+ depth: activeItem.depth,
2583
+ clone: true,
2584
+ childCount: getChildCount(items, activeId) + 1,
2585
+ indentationWidth: indentationWidth,
2586
+ component: component,
2587
+ value: activeValue === null || activeValue === void 0 ? void 0 : activeValue.value,
2588
+ onClickItem: onClickItem,
2589
+ index: flattenedItems.findIndex(function (_ref23) {
2590
+ var id = _ref23.id;
2591
+ return activeId === id;
2592
+ })
2593
+ })) : null), document.body)));
2594
+ };
2595
+ SortableTree.propTypes = propTypes$8;
2596
+ SortableTree.defaultProps = defaultProps$8;
2597
+ var SortableTree$1 = SortableTree;
2598
+
2599
+ var styles$5 = {"container":"micromag-editor-menus-screens-container","screen":"micromag-editor-menus-screens-screen","preview":"micromag-editor-menus-screens-preview","placeholder":"micromag-editor-menus-screens-placeholder","items":"micromag-editor-menus-screens-items","item":"micromag-editor-menus-screens-item","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"};
2600
+
2601
+ var _excluded$2 = ["className", "screen", "type", "title", "onClick", "active", "href"],
2602
+ _excluded2 = ["id", "screen", "href"];
2603
+ var propTypes$7 = {
2604
+ items: PropTypes$1.menuItems,
2605
+ withPreview: PropTypes.bool,
2606
+ withPlaceholder: PropTypes.bool,
2607
+ withName: PropTypes.bool,
2608
+ settings: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
2609
+ sortable: PropTypes.bool,
2610
+ isTree: PropTypes.bool,
2611
+ isVertical: PropTypes.bool,
2612
+ noWrap: PropTypes.bool,
2613
+ className: PropTypes.string,
2614
+ itemClassName: PropTypes.string,
2615
+ buttonClassName: PropTypes.string,
2616
+ settingsClassName: PropTypes.string,
2617
+ onClickItem: PropTypes.func,
2618
+ onOrderChange: PropTypes.func
2619
+ };
2620
+ var defaultProps$7 = {
2621
+ items: [],
2622
+ withPreview: false,
2623
+ withPlaceholder: false,
2624
+ withName: false,
2625
+ settings: null,
2626
+ sortable: false,
2627
+ isTree: false,
2628
+ isVertical: false,
2629
+ noWrap: false,
2630
+ className: null,
2631
+ itemClassName: null,
2632
+ buttonClassName: null,
2633
+ settingsClassName: null,
2634
+ onClickItem: null,
2635
+ onOrderChange: null
2636
+ };
2637
+ var ScreensMenu = function ScreensMenu(_ref) {
2638
+ var items = _ref.items,
2639
+ withPreview = _ref.withPreview,
2640
+ withPlaceholder = _ref.withPlaceholder,
2641
+ withName = _ref.withName,
2642
+ settings = _ref.settings,
2643
+ isVertical = _ref.isVertical,
2644
+ noWrap = _ref.noWrap,
2645
+ className = _ref.className,
2646
+ itemClassName = _ref.itemClassName,
2647
+ buttonClassName = _ref.buttonClassName,
2648
+ settingsClassName = _ref.settingsClassName,
2649
+ sortable = _ref.sortable,
2650
+ isTree = _ref.isTree,
2651
+ onClickItem = _ref.onClickItem,
2652
+ onOrderChange = _ref.onOrderChange;
2653
+ var itemsElements = !isTree ? items.map(function (_ref2, index) {
2654
+ var _ref2$className = _ref2.className,
2655
+ itemCustomClassName = _ref2$className === void 0 ? null : _ref2$className,
2656
+ screen = _ref2.screen,
2657
+ type = _ref2.type,
2658
+ title = _ref2.title,
2659
+ _ref2$onClick = _ref2.onClick,
2660
+ onClick = _ref2$onClick === void 0 ? null : _ref2$onClick,
2661
+ active = _ref2.active,
2662
+ href = _ref2.href,
2663
+ item = _objectWithoutProperties(_ref2, _excluded$2);
2664
+ return /*#__PURE__*/React.createElement("li", {
2665
+ key: item.id,
2666
+ className: classNames([styles$5.item, _defineProperty(_defineProperty({}, itemClassName, itemClassName !== null), itemCustomClassName, itemCustomClassName !== null)]),
2667
+ "data-screen-id": item.id
2668
+ }, /*#__PURE__*/React.createElement(ScreenWithPreview$1, {
2669
+ index: index,
2670
+ screen: withPlaceholder ? _objectSpread(_objectSpread({}, screen), {}, {
2671
+ type: type
2672
+ }) : screen,
2673
+ href: href,
2674
+ className: buttonClassName,
2675
+ title: title,
2676
+ active: active,
2677
+ withPreview: withPreview,
2678
+ withPlaceholder: withPlaceholder,
2679
+ withName: withName,
2680
+ onClick: onClick,
2681
+ onClickItem: onClickItem
2682
+ }), settings !== null ? /*#__PURE__*/React.createElement("div", {
2683
+ className: classNames([_defineProperty({}, settingsClassName, settingsClassName !== null), styles$5.settings, 'p-2'])
2684
+ }, isFunction(settings) ? settings(index) : settings) : null);
2685
+ }) : [];
2686
+ var sortableItems = useMemo(function () {
2687
+ return isTree ? items.map(function (_ref5) {
2688
+ var id = _ref5.id,
2689
+ _ref5$screen = _ref5.screen,
2690
+ screen = _ref5$screen === void 0 ? {} : _ref5$screen,
2691
+ href = _ref5.href,
2692
+ props = _objectWithoutProperties(_ref5, _excluded2);
2693
+ var _screen$parentId = screen.parentId,
2694
+ parentId = _screen$parentId === void 0 ? null : _screen$parentId,
2695
+ _screen$group = screen.group,
2696
+ group = _screen$group === void 0 ? {} : _screen$group;
2697
+ var _ref6 = group || {},
2698
+ _ref6$collapsed = _ref6.collapsed,
2699
+ collapsed = _ref6$collapsed === void 0 ? true : _ref6$collapsed;
2700
+ return {
2701
+ id: id,
2702
+ parentId: parentId,
2703
+ collapsed: collapsed,
2704
+ value: _objectSpread({
2705
+ id: id,
2706
+ screen: screen,
2707
+ href: href
2708
+ }, props)
2709
+ };
2710
+ }, []) : items.map(function (_ref7) {
2711
+ var id = _ref7.id;
2712
+ return {
2713
+ id: id
2714
+ };
2715
+ });
2716
+ }, [items, isTree, items.length]);
2717
+ return /*#__PURE__*/React.createElement("div", {
2718
+ className: classNames([styles$5.container, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles$5.noWrap, noWrap), styles$5.isVertical, isVertical), styles$5.isTree, isTree), styles$5.withPlaceholder, withPlaceholder), className, className)])
2719
+ }, isTree && !sortable ? /*#__PURE__*/React.createElement(SortableTree$1, {
2720
+ items: sortableItems,
2721
+ component: ScreenWithPreview$1,
2722
+ onClickItem: onClickItem,
2723
+ onChange: onOrderChange
2724
+ }) : null, !isTree && sortable && items.length > 1 ? /*#__PURE__*/React.createElement(ReactSortable, {
2725
+ list: sortableItems,
2726
+ setList: onOrderChange,
2727
+ animation: 200,
2728
+ delayOnTouchStart: true,
2729
+ delay: 2,
2730
+ tag: "ul",
2731
+ className: styles$5.items
2732
+ }, itemsElements) : null, !isTree && (!sortable || items.length < 1) ? /*#__PURE__*/React.createElement("ul", {
2733
+ className: styles$5.items
2734
+ }, itemsElements) : null);
2735
+ };
2736
+ ScreensMenu.propTypes = propTypes$7;
2737
+ ScreensMenu.defaultProps = defaultProps$7;
2738
+ var ScreensMenu$1 = ScreensMenu;
2739
+
2740
+ var styles$4 = {"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","button":"micromag-editor-menus-screen-types-button"};
2741
+
2742
+ var propTypes$6 = {
2743
+ screens: PropTypes$1.screenDefinitions,
2744
+ selectedTypes: PropTypes.arrayOf(PropTypes.string),
2745
+ className: PropTypes.string,
2746
+ onClickItem: PropTypes.func
2747
+ };
2748
+ var defaultProps$6 = {
2749
+ screens: null,
2750
+ selectedTypes: null,
2751
+ className: null,
2752
+ onClickItem: null
2753
+ };
2754
+ var ScreenTypes = function ScreenTypes(_ref) {
2755
+ var screens = _ref.screens,
2756
+ selectedTypes = _ref.selectedTypes,
2757
+ className = _ref.className,
2758
+ onClickItem = _ref.onClickItem;
2759
+ var intl = useIntl();
2760
+ var screensManager = useScreensManager();
2761
+ var screenDefinitions = screens || screensManager.getDefinitions();
2762
+ var finalDefinitions = (screenDefinitions || []).filter(function (s) {
2763
+ return s !== null;
2764
+ });
2765
+ var groups = useMemo(function () {
2766
+ var groupItems = finalDefinitions.reduce(function (allGroups, definition) {
2767
+ var id = definition.id,
2768
+ title = definition.title,
2769
+ _definition$group = definition.group,
2770
+ group = _definition$group === void 0 ? {} : _definition$group;
2771
+ var _ref2 = group || {},
2772
+ _ref2$order = _ref2.order,
2773
+ order = _ref2$order === void 0 ? 0 : _ref2$order,
2774
+ _ref2$label = _ref2.label,
2775
+ label = _ref2$label === void 0 ? {} : _ref2$label,
2776
+ _ref2$hidden = _ref2.hidden,
2777
+ hidden = _ref2$hidden === void 0 ? false : _ref2$hidden;
2778
+ var _ref3 = label || {},
2779
+ _ref3$id = _ref3.id,
2780
+ messageId = _ref3$id === void 0 ? null : _ref3$id;
2781
+ if (hidden) {
2782
+ return allGroups;
2783
+ }
2784
+ var _ref4 = isMessage(label) ? {
2785
+ id: messageId || id,
2786
+ name: group
2787
+ } : {
2788
+ id: messageId || id,
2789
+ name: title
2790
+ },
2791
+ groupId = _ref4.id,
2792
+ groupName = _ref4.name;
2793
+ var groupIndex = allGroups.findIndex(function (it) {
2794
+ return it.id === groupId;
2795
+ });
2796
+ var selected = selectedTypes !== null && selectedTypes.indexOf(id) !== -1;
2797
+ var item = {
2798
+ id: id,
2799
+ type: id,
2800
+ screen: definition,
2801
+ title: title,
2802
+ className: classNames(_defineProperty({
2803
+ 'bg-secondary': !selected,
2804
+ 'bg-primary': selected
2805
+ }, styles$4.selected, selected))
2806
+ };
2807
+ return groupIndex !== -1 ? [].concat(_toConsumableArray(allGroups.slice(0, groupIndex)), [_objectSpread(_objectSpread({}, allGroups[groupIndex]), {}, {
2808
+ items: [].concat(_toConsumableArray(allGroups[groupIndex].items), [item])
2809
+ })], _toConsumableArray(allGroups.slice(groupIndex + 1))) : [].concat(_toConsumableArray(allGroups), [{
2810
+ id: groupId,
2811
+ name: isMessage(label) ? intl.formatMessage(label) : groupName,
2812
+ order: order,
2813
+ items: [item]
2814
+ }]);
2815
+ }, []);
2816
+ return orderBy(groupItems, ['order', 'name'], ['asc', 'asc']);
2817
+ }, [finalDefinitions, selectedTypes]);
2818
+ return /*#__PURE__*/React.createElement("div", {
2819
+ className: classNames([styles$4.container, _defineProperty({}, className, className)])
2820
+ }, /*#__PURE__*/React.createElement("div", {
2821
+ className: styles$4.rows
2822
+ }, groups.map(function (_ref6) {
2823
+ var id = _ref6.id,
2824
+ name = _ref6.name,
2825
+ items = _ref6.items;
2826
+ return /*#__PURE__*/React.createElement("div", {
2827
+ key: "group-".concat(id),
2828
+ className: styles$4.row
2829
+ }, /*#__PURE__*/React.createElement(Label, null, name), /*#__PURE__*/React.createElement("div", {
2830
+ className: styles$4.layouts
2831
+ }, /*#__PURE__*/React.createElement(ScreensMenu$1, {
2832
+ items: items,
2833
+ withPlaceholder: true,
2834
+ withName: true,
2835
+ itemClassName: classNames([styles$4.screen, 'border', 'rounded', {
2836
+ 'border-secondary': selectedTypes === null,
2837
+ 'border-dark': selectedTypes !== null,
2838
+ 'bg-secondary': selectedTypes === null,
2839
+ 'text-secondary': selectedTypes !== null
2840
+ }]),
2841
+ buttonClassName: styles$4.button,
2842
+ onClickItem: onClickItem
2843
+ })));
2844
+ })));
2845
+ };
2846
+ ScreenTypes.propTypes = propTypes$6;
2847
+ ScreenTypes.defaultProps = defaultProps$6;
2848
+ var ScreenTypesMenu = ScreenTypes;
2849
+
2850
+ var styles$3 = {"container":"micromag-editor-modals-screen-types-container","selected":"micromag-editor-modals-screen-types-selected"};
2851
+
2852
+ var propTypes$5 = {
2853
+ selectedTypes: PropTypes.arrayOf(PropTypes.string),
2854
+ className: PropTypes.string,
2855
+ onRequestClose: PropTypes.func,
2856
+ onClickScreenType: PropTypes.func
2857
+ };
2858
+ var defaultProps$5 = {
2859
+ selectedTypes: null,
2860
+ className: null,
2861
+ onRequestClose: null,
2862
+ onClickScreenType: null
2863
+ };
2864
+ var ScreenTypesModal = function ScreenTypesModal(_ref) {
2865
+ var selectedTypes = _ref.selectedTypes,
2866
+ className = _ref.className,
2867
+ onRequestClose = _ref.onRequestClose,
2868
+ onClickScreenType = _ref.onClickScreenType;
2869
+ return /*#__PURE__*/React.createElement(Modal, null, /*#__PURE__*/React.createElement(ModalDialog, {
2870
+ title: /*#__PURE__*/React.createElement(FormattedMessage, {
2871
+ id: "QBaiO0",
2872
+ defaultMessage: [{
2873
+ "type": 0,
2874
+ "value": "Add a screen"
2875
+ }]
2876
+ }),
2877
+ className: classNames([styles$3.container, _defineProperty({}, className, className)]),
2878
+ onClose: onRequestClose
2879
+ }, /*#__PURE__*/React.createElement(ScreenTypesMenu, {
2880
+ selectedTypes: selectedTypes,
2881
+ className: styles$3.menu,
2882
+ onClickItem: onClickScreenType
2883
+ })));
2884
+ };
2885
+ ScreenTypesModal.propTypes = propTypes$5;
2886
+ ScreenTypesModal.defaultProps = defaultProps$5;
2887
+ var ScreenTypesModal$1 = ScreenTypesModal;
2888
+
2889
+ var styles$2 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
2890
+
2891
+ var _excluded$1 = ["id"];
2892
+ var propTypes$4 = {
2893
+ value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
2894
+ isTheme: PropTypes.bool,
2895
+ isVertical: PropTypes.bool,
2896
+ isCreateOpened: PropTypes.bool,
2897
+ isParsed: PropTypes.bool,
2898
+ isTree: PropTypes.bool,
2899
+ onClickScreen: PropTypes.func,
2900
+ onChange: PropTypes.func,
2901
+ className: PropTypes.string
2902
+ };
2903
+ var defaultProps$4 = {
2904
+ value: null,
2905
+ isTheme: false,
2906
+ isVertical: false,
2907
+ isCreateOpened: false,
2908
+ isParsed: false,
2909
+ isTree: false,
2910
+ onClickScreen: null,
2911
+ onChange: null,
2912
+ className: null
2913
+ };
2914
+ var EditorScreens = function EditorScreens(_ref) {
2915
+ var unparsedValue = _ref.value,
2916
+ isTheme = _ref.isTheme,
2917
+ isVertical = _ref.isVertical,
2918
+ isCreateOpened = _ref.isCreateOpened,
2919
+ isParsed = _ref.isParsed,
2920
+ isTree = _ref.isTree,
2921
+ onClickScreen = _ref.onClickScreen,
2922
+ onChange = _ref.onChange,
2923
+ className = _ref.className;
2924
+ var valueWithTheme = useThemeValue(unparsedValue, isTheme);
2925
+ var value = isParsed ? unparsedValue : useParsedStory(valueWithTheme, {
2926
+ withMedias: false
2927
+ });
2928
+ var _ref2 = value || {},
2929
+ _ref2$components = _ref2.components,
2930
+ screens = _ref2$components === void 0 ? [] : _ref2$components;
2931
+ var _useState = useState(isCreateOpened),
2932
+ _useState2 = _slicedToArray(_useState, 2),
2933
+ createModalOpened = _useState2[0],
2934
+ setCreateModalOpened = _useState2[1];
2935
+ var routes = useRoutes();
2936
+ var push = useRoutePush();
2937
+ var url = useUrlGenerator();
2938
+ var _useRouteParams = useRouteParams({
2939
+ screenOnly: true
2940
+ }),
2941
+ _useRouteParams$scree = _useRouteParams.screen,
2942
+ currentScreenId = _useRouteParams$scree === void 0 ? null : _useRouteParams$scree;
2943
+ var createScreenFromDefinition = useCallback(function (definition) {
2944
+ var _ref3 = value || {},
2945
+ _ref3$components = _ref3.components,
2946
+ currentScreens = _ref3$components === void 0 ? [] : _ref3$components,
2947
+ _ref3$theme = _ref3.theme,
2948
+ theme = _ref3$theme === void 0 ? {} : _ref3$theme;
2949
+ var _ref4 = isString(definition) ? {
2950
+ id: definition
2951
+ } : definition,
2952
+ newScreenType = _ref4.id;
2953
+ var _ref5 = theme || {},
2954
+ _ref5$components = _ref5.components,
2955
+ themeComponents = _ref5$components === void 0 ? null : _ref5$components;
2956
+ var themeScreen = themeComponents !== null ? themeComponents.find(function (it) {
2957
+ return it.type === newScreenType;
2958
+ }) || null : null;
2959
+ var newScreen = createScreen$1(definition, themeScreen);
2960
+ var foundIndex = screens.findIndex(function (_ref6) {
2961
+ var id = _ref6.id;
2962
+ return id === currentScreenId;
2963
+ });
2964
+ var currentScreenIndex = !isTheme && foundIndex >= 0 ? foundIndex + 1 : null;
2965
+ var newValue = _objectSpread(_objectSpread({}, value), {}, {
2966
+ components: [].concat(_toConsumableArray(currentScreens.slice(0, currentScreenIndex)), [newScreen], _toConsumableArray(currentScreens.slice(currentScreenIndex)))
2967
+ });
2968
+ if (onChange !== null) {
2969
+ onChange(newValue);
2970
+ }
2971
+ return newScreen;
2972
+ }, [value, onChange, isTheme, screens, currentScreenId, setCreateModalOpened]);
2973
+ var onOrderChange = useCallback(function (listItems) {
2974
+ var ids = listItems.map(function (_ref7) {
2975
+ var id = _ref7.id;
2976
+ return id;
2977
+ });
2978
+ var screenProps = listItems.map(function (_ref8) {
2979
+ var id = _ref8.id,
2980
+ _ref8$props = _ref8.props,
2981
+ props = _ref8$props === void 0 ? null : _ref8$props;
2982
+ return {
2983
+ id: id,
2984
+ props: props
2985
+ };
2986
+ });
2987
+ var hasScreenProps = (screenProps.filter(function (_ref9) {
2988
+ var props = _ref9.props;
2989
+ return props !== null;
2990
+ }) || []).length > 0;
2991
+ var _ref10 = value || {},
2992
+ _ref10$components = _ref10.components,
2993
+ currentScreens = _ref10$components === void 0 ? [] : _ref10$components;
2994
+ var currentIds = currentScreens.map(function (_ref11) {
2995
+ var id = _ref11.id;
2996
+ return id;
2997
+ });
2998
+ var sameOrder = listItems.reduce(function (same, _ref12, index) {
2999
+ var id = _ref12.id;
3000
+ return same && id === currentIds[index];
3001
+ }, true);
3002
+ if (!sameOrder || hasScreenProps) {
3003
+ var newValue = _objectSpread(_objectSpread({}, value), {}, {
3004
+ components: _toConsumableArray(currentScreens).sort(function (_ref13, _ref14) {
3005
+ var idA = _ref13.id;
3006
+ var idB = _ref14.id;
3007
+ var indexA = ids.indexOf(idA);
3008
+ var indexB = ids.indexOf(idB);
3009
+ if (indexA === indexB) {
3010
+ return 0;
3011
+ }
3012
+ return indexA > indexB ? 1 : -1;
3013
+ }).map(function (_ref15) {
3014
+ var _screenProps$find;
3015
+ var id = _ref15.id,
3016
+ props = _objectWithoutProperties(_ref15, _excluded$1);
3017
+ return _objectSpread(_objectSpread({
3018
+ id: id
3019
+ }, props), (_screenProps$find = screenProps.find(function (_ref16) {
3020
+ var propsId = _ref16.id;
3021
+ return propsId === id;
3022
+ })) === null || _screenProps$find === void 0 ? void 0 : _screenProps$find.props);
3023
+ })
3024
+ });
3025
+ if (onChange !== null) {
3026
+ // console.log('og!', listItems, newValue);
3027
+ onChange(newValue);
3028
+ }
3029
+ }
3030
+ }, [value, onChange]);
3031
+ var onClickScreenType = useCallback(function (definition) {
3032
+ setCreateModalOpened(false);
3033
+ var currentScreen = isTheme ? screens.find(function (_ref17) {
3034
+ var type = _ref17.type;
3035
+ return type === definition.id;
3036
+ }) || null : null;
3037
+ if (!isTheme || currentScreen === null) {
3038
+ currentScreen = createScreenFromDefinition(definition);
3039
+ }
3040
+ push('screen', {
3041
+ screen: currentScreen.id
3042
+ });
3043
+ onClickScreen(currentScreen);
3044
+ }, [screens, isTheme, createScreenFromDefinition, push, onClickScreen]);
3045
+ var onClickAdd = useCallback(function () {
3046
+ return setCreateModalOpened(true);
3047
+ }, [setCreateModalOpened]);
3048
+ var onCreateModalRequestClose = useCallback(function () {
3049
+ return setCreateModalOpened(false);
3050
+ }, [setCreateModalOpened]);
3051
+ return /*#__PURE__*/React.createElement("div", {
3052
+ className: classNames(['d-flex', 'flex-column', styles$2.container, className])
3053
+ }, /*#__PURE__*/React.createElement(Navbar, {
3054
+ compact: true,
3055
+ noWrap: true,
3056
+ withoutCollapse: true,
3057
+ className: classNames(['sticky-top', styles$2.navbar])
3058
+ }, /*#__PURE__*/React.createElement("strong", {
3059
+ className: "mb-0 me-auto"
3060
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3061
+ id: "jf+4Hq",
3062
+ defaultMessage: [{
3063
+ "type": 0,
3064
+ "value": "Screens"
3065
+ }]
3066
+ })), /*#__PURE__*/React.createElement(Button, {
3067
+ theme: "primary",
3068
+ size: "sm",
3069
+ onClick: onClickAdd,
3070
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
3071
+ icon: faPlus
3072
+ })
3073
+ })), /*#__PURE__*/React.createElement("div", {
3074
+ className: "flex-grow-1 d-flex w-100 p-2"
3075
+ }, /*#__PURE__*/React.createElement(Switch, null, /*#__PURE__*/React.createElement(Route, {
3076
+ path: "".concat(routes.screen, "/(.*)?")
3077
+ }, function (_ref18) {
3078
+ var _ref18$screen = _ref18.screen,
3079
+ screenId = _ref18$screen === void 0 ? null : _ref18$screen;
3080
+ return screens.length > 0 ? /*#__PURE__*/React.createElement(ScreensMenu$1, {
3081
+ items: screens.map(function (it) {
3082
+ return {
3083
+ id: it.id,
3084
+ screen: it,
3085
+ href: url('screen', {
3086
+ screen: it.id
3087
+ }),
3088
+ active: it.id === screenId
3089
+ };
3090
+ }),
3091
+ isVertical: isVertical,
3092
+ withPreview: true,
3093
+ sortable: !isTree,
3094
+ className: "w-100",
3095
+ onClickItem: onClickScreen,
3096
+ onOrderChange: onOrderChange,
3097
+ isTree: isTree
3098
+ }) : /*#__PURE__*/React.createElement(Empty, {
3099
+ className: "flex-grow-1 p-2"
3100
+ }, /*#__PURE__*/React.createElement(Button, {
3101
+ theme: "primary",
3102
+ onClick: onClickAdd
3103
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3104
+ id: "JoWKee",
3105
+ defaultMessage: [{
3106
+ "type": 0,
3107
+ "value": "Create your first screen"
3108
+ }]
3109
+ })));
3110
+ }), /*#__PURE__*/React.createElement(Route, null, screens.length > 0 ? /*#__PURE__*/React.createElement(ScreensMenu$1, {
3111
+ items: screens.map(function (it) {
3112
+ return {
3113
+ id: it.id,
3114
+ screen: it,
3115
+ href: url('screen', {
3116
+ screen: it.id
3117
+ }),
3118
+ active: false
3119
+ };
3120
+ }),
3121
+ isVertical: isVertical,
3122
+ withPreview: true,
3123
+ sortable: !isTree,
3124
+ className: "w-100",
3125
+ onClickItem: onClickScreen,
3126
+ onOrderChange: onOrderChange,
3127
+ isTree: isTree
3128
+ }) : /*#__PURE__*/React.createElement(Empty, {
3129
+ className: "flex-grow-1 p-2"
3130
+ }, /*#__PURE__*/React.createElement(Button, {
3131
+ theme: "primary",
3132
+ onClick: onClickAdd
3133
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3134
+ id: "JoWKee",
3135
+ defaultMessage: [{
3136
+ "type": 0,
3137
+ "value": "Create your first screen"
3138
+ }]
3139
+ })))))), createModalOpened ? /*#__PURE__*/React.createElement(ScreenTypesModal$1, {
3140
+ selectedTypes: isTheme ? screens.map(function (_ref19) {
3141
+ var type = _ref19.type;
3142
+ return type;
3143
+ }) : [],
3144
+ onClickScreenType: onClickScreenType,
3145
+ onRequestClose: onCreateModalRequestClose
3146
+ }) : null);
3147
+ };
3148
+ EditorScreens.propTypes = propTypes$4;
3149
+ EditorScreens.defaultProps = defaultProps$4;
3150
+ var Screens = EditorScreens;
3151
+
3152
+ var styles$1 = {"container":"micromag-editor-container","left":"micromag-editor-left","right":"micromag-editor-right","fullscreen":"micromag-editor-fullscreen","preview":"micromag-editor-preview","center":"micromag-editor-center","inner":"micromag-editor-inner","visible":"micromag-editor-visible","top":"micromag-editor-top"};
3153
+
3154
+ var propTypes$3 = {
3155
+ value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
3156
+ deviceScreens: PropTypes$1.deviceScreens,
3157
+ viewerTheme: PropTypes$1.viewerTheme,
3158
+ mobileView: PropTypes.oneOf(['screens', 'preview', 'form']),
3159
+ fullscreen: PropTypes.bool,
3160
+ isTheme: PropTypes.bool,
3161
+ isCreateOpened: PropTypes.bool,
3162
+ onChange: PropTypes.func,
3163
+ className: PropTypes.string
3164
+ };
3165
+ var defaultProps$3 = {
3166
+ value: null,
3167
+ deviceScreens: getDeviceScreens(),
3168
+ viewerTheme: null,
3169
+ mobileView: 'preview',
3170
+ fullscreen: false,
3171
+ isTheme: false,
3172
+ isCreateOpened: false,
3173
+ onChange: null,
3174
+ className: null
3175
+ };
3176
+ var Editor = function Editor(_ref) {
3177
+ var value = _ref.value,
3178
+ viewerTheme = _ref.viewerTheme,
3179
+ isTheme = _ref.isTheme,
3180
+ isCreateOpened = _ref.isCreateOpened,
3181
+ deviceScreens = _ref.deviceScreens,
3182
+ initialMobileView = _ref.mobileView,
3183
+ onChange = _ref.onChange,
3184
+ fullscreen = _ref.fullscreen,
3185
+ className = _ref.className;
3186
+ var push = useRoutePush();
3187
+ var refScreensContainer = useRef(null);
3188
+ var _useRouteParams = useRouteParams({
3189
+ screenOnly: true
3190
+ }),
3191
+ screenId = _useRouteParams.screen;
3192
+
3193
+ // Screen size
3194
+ var _useScreenSizeFromEle = useScreenSizeFromElement({
3195
+ screens: deviceScreens,
3196
+ withoutMaxSize: true,
3197
+ withoutScale: true
3198
+ }),
3199
+ refContainer = _useScreenSizeFromEle.ref,
3200
+ screenSize = _useScreenSizeFromEle.screenSize;
3201
+ var isMobile = screenSize !== null && screenSize.screens.indexOf('medium') === -1;
3202
+
3203
+ // Mobile view
3204
+ var _useState = useState(initialMobileView),
3205
+ _useState2 = _slicedToArray(_useState, 2),
3206
+ mobileView = _useState2[0],
3207
+ setMobileView = _useState2[1];
3208
+ var onClickScreens = useCallback(function () {
3209
+ return setMobileView('screens');
3210
+ }, [mobileView, setMobileView]);
3211
+ var onClickEdit = useCallback(function () {
3212
+ return setMobileView('form');
3213
+ }, [setMobileView]);
3214
+ var onClickViewScreen = useCallback(function () {
3215
+ return setMobileView('preview');
3216
+ }, [setMobileView]);
3217
+
3218
+ // console.log('mobileView', screenSize, isMobile, mobileView);
3219
+
3220
+ // Apply base theme values to it's own components
3221
+ var _ref2 = value || {},
3222
+ _ref2$background = _ref2.background,
3223
+ background = _ref2$background === void 0 ? null : _ref2$background,
3224
+ _ref2$colors = _ref2.colors,
3225
+ colors = _ref2$colors === void 0 ? null : _ref2$colors,
3226
+ _ref2$textStyles = _ref2.textStyles,
3227
+ textStyles = _ref2$textStyles === void 0 ? null : _ref2$textStyles,
3228
+ _ref2$boxStyles = _ref2.boxStyles,
3229
+ boxStyles = _ref2$boxStyles === void 0 ? null : _ref2$boxStyles;
3230
+ var baseValue = isTheme ? _objectSpread(_objectSpread({}, value), {}, {
3231
+ theme: {
3232
+ background: background,
3233
+ colors: colors,
3234
+ textStyles: textStyles,
3235
+ boxStyles: boxStyles
3236
+ }
3237
+ }) : value;
3238
+ var story = useParsedStory(baseValue);
3239
+ var _useMediasParser = useMediasParser(),
3240
+ parseMediasToPath = _useMediasParser.toPath;
3241
+ var onStoryChange = useCallback(function (newStory) {
3242
+ var storyWithMedias = parseMediasToPath(newStory);
3243
+ if (onChange !== null) {
3244
+ onChange(storyWithMedias);
3245
+ }
3246
+ }, [onChange, parseMediasToPath]);
3247
+ var clickedScreenId = useRef(null);
3248
+ var onClickScreen = useCallback(function (_ref3) {
3249
+ var id = _ref3.id;
3250
+ clickedScreenId.current = id;
3251
+ if (screenSize.screen) {
3252
+ setMobileView('preview');
3253
+ }
3254
+ push('screen', {
3255
+ screen: clickedScreenId.current
3256
+ });
3257
+ }, [screenSize.screen, push]);
3258
+ var onPreviewScreenChange = useCallback(function (_ref4) {
3259
+ var newScreenId = _ref4.id;
3260
+ push('screen', {
3261
+ screen: newScreenId
3262
+ });
3263
+ }, [push]);
3264
+
3265
+ // Auto-scroll to current screen except when manually clicking one
3266
+ useEffect(function () {
3267
+ if (screenId === null || clickedScreenId.current === screenId) {
3268
+ return;
3269
+ }
3270
+ clickedScreenId.current = null;
3271
+ var screens = refScreensContainer.current;
3272
+ var items = screens.querySelectorAll("[data-screen-id=\"".concat(screenId, "\"]"));
3273
+ if (items !== null && items.length > 0) {
3274
+ var item = items[0];
3275
+ var cnt = item.parentNode.parentNode.parentNode;
3276
+ screens.scrollTop = cnt.offsetTop + item.offsetTop + item.offsetHeight / 2 - screens.clientHeight / 2;
3277
+ }
3278
+ }, [screenId]);
3279
+
3280
+ // console.log('screenId', screenId);
3281
+
3282
+ return /*#__PURE__*/React.createElement(ModalsProvider, null, /*#__PURE__*/React.createElement(PanelsProvider, null, /*#__PURE__*/React.createElement(ScreenSizeProvider, {
3283
+ size: screenSize
3284
+ }, /*#__PURE__*/React.createElement("div", {
3285
+ className: classNames([styles$1.container, screenSize !== null ? screenSize.screens.map(function (screenName) {
3286
+ return styles$1["screen-".concat(screenName)];
3287
+ }) : null, _defineProperty(_defineProperty({}, styles$1.fullscreen, fullscreen), className, className)]),
3288
+ ref: refContainer
3289
+ }, /*#__PURE__*/React.createElement(Navbar, {
3290
+ theme: "light",
3291
+ compact: true,
3292
+ noWrap: true,
3293
+ withoutCollapse: true,
3294
+ className: styles$1.top
3295
+ }, mobileView !== 'screens' ? /*#__PURE__*/React.createElement(Button, {
3296
+ size: "sm",
3297
+ theme: "secondary",
3298
+ onClick: onClickScreens,
3299
+ className: "me-auto"
3300
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3301
+ id: "wkysUu",
3302
+ defaultMessage: [{
3303
+ "type": 0,
3304
+ "value": "Screens"
3305
+ }]
3306
+ })) : /*#__PURE__*/React.createElement("span", null), mobileView !== 'form' ? /*#__PURE__*/React.createElement(Button, {
3307
+ size: "sm",
3308
+ theme: "primary",
3309
+ onClick: onClickEdit
3310
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3311
+ id: "HseFdk",
3312
+ defaultMessage: [{
3313
+ "type": 0,
3314
+ "value": "Edit"
3315
+ }]
3316
+ })) : null, mobileView === 'form' ? /*#__PURE__*/React.createElement(Button, {
3317
+ size: "sm",
3318
+ theme: "primary",
3319
+ onClick: onClickViewScreen
3320
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3321
+ id: "4POR3B",
3322
+ defaultMessage: [{
3323
+ "type": 0,
3324
+ "value": "View screen"
3325
+ }]
3326
+ })) : null), /*#__PURE__*/React.createElement("div", {
3327
+ className: styles$1.inner
3328
+ }, /*#__PURE__*/React.createElement("div", {
3329
+ className: classNames([styles$1.left, _defineProperty({}, styles$1.visible, !isMobile || mobileView === 'screens')]),
3330
+ ref: refScreensContainer
3331
+ }, /*#__PURE__*/React.createElement(Screens, {
3332
+ value: story,
3333
+ isTheme: isTheme,
3334
+ isCreateOpened: isCreateOpened,
3335
+ isParsed: true,
3336
+ onChange: onStoryChange,
3337
+ onClickScreen: onClickScreen,
3338
+ isVertical: !isMobile,
3339
+ className: styles$1.inner,
3340
+ isTree: true
3341
+ })), /*#__PURE__*/React.createElement("div", {
3342
+ className: classNames([styles$1.center, _defineProperty({}, styles$1.visible, !isMobile || mobileView === 'preview')])
3343
+ }, /*#__PURE__*/React.createElement(EditorPreview$1, {
3344
+ value: story,
3345
+ isTheme: isTheme,
3346
+ viewerTheme: viewerTheme,
3347
+ className: styles$1.preview,
3348
+ onScreenChange: onPreviewScreenChange,
3349
+ onChange: onStoryChange
3350
+ })), /*#__PURE__*/React.createElement("div", {
3351
+ className: classNames([styles$1.right, _defineProperty({}, styles$1.visible, !isMobile || mobileView === 'form')])
3352
+ }, /*#__PURE__*/React.createElement(EditorForm, {
3353
+ key: screenId,
3354
+ value: story,
3355
+ isTheme: isTheme,
3356
+ onChange: onStoryChange,
3357
+ className: styles$1.inner
3358
+ }))), /*#__PURE__*/React.createElement(Modals, null)))));
3359
+ };
3360
+ Editor.propTypes = propTypes$3;
3361
+ Editor.defaultProps = defaultProps$3;
3362
+ var Editor$1 = Editor;
3363
+
3364
+ // eslint-disable-next-line import/prefer-default-export
3365
+ var routes = PropTypes.shape({
3366
+ home: PropTypes.string.isRequired,
3367
+ screen: PropTypes.string.isRequired,
3368
+ 'screen.field': PropTypes.string.isRequired,
3369
+ 'screen.field.form': PropTypes.string.isRequired
3370
+ });
3371
+
3372
+ var styles = {"container":"micromag-editor-forms-settings-container","inner":"micromag-editor-forms-settings-inner"};
3373
+
3374
+ var propTypes$2 = {
3375
+ name: PropTypes.string,
3376
+ field: PropTypes$1.formField,
3377
+ value: PropTypes$1.component,
3378
+ className: PropTypes.string,
3379
+ gotoFieldForm: PropTypes.func.isRequired,
3380
+ closeFieldForm: PropTypes.func.isRequired,
3381
+ onChange: PropTypes.func
3382
+ };
3383
+ var defaultProps$2 = {
3384
+ name: null,
3385
+ field: null,
3386
+ value: null,
3387
+ className: null,
3388
+ onChange: null
3389
+ };
3390
+ var SettingsForm = function SettingsForm(_ref) {
3391
+ var name = _ref.name,
3392
+ field = _ref.field,
3393
+ value = _ref.value,
3394
+ className = _ref.className,
3395
+ gotoFieldForm = _ref.gotoFieldForm,
3396
+ closeFieldForm = _ref.closeFieldForm,
3397
+ onChange = _ref.onChange;
3398
+ if (field === null) return false;
3399
+ var _ref2 = field || {},
3400
+ _ref2$type = _ref2.type,
3401
+ type = _ref2$type === void 0 ? null : _ref2$type,
3402
+ _ref2$fieldsProps = _ref2.fieldsProps,
3403
+ fieldsProps = _ref2$fieldsProps === void 0 ? null : _ref2$fieldsProps;
3404
+ var fieldsManager = useFieldsManager();
3405
+ var _ref3 = type !== null ? fieldsManager.getDefinition(type) : field,
3406
+ _ref3$component = _ref3.component,
3407
+ fieldComponent = _ref3$component === void 0 ? null : _ref3$component,
3408
+ settings = _ref3.settings;
3409
+ var FieldComponent = useFieldComponent(fieldComponent);
3410
+ var FieldsComponent = useFieldComponent('fields');
3411
+ var SettingsComponent = FieldComponent !== null ? FieldComponent.settingsComponent || FieldsComponent : FieldsComponent;
3412
+ var onSettingsChange = useCallback(function (newSettingsValue) {
3413
+ var newValue = _objectSpread(_objectSpread({}, value), newSettingsValue);
3414
+ if (onChange !== null) {
3415
+ onChange(newValue);
3416
+ }
3417
+ }, [value, onChange]);
3418
+ return /*#__PURE__*/React.createElement("div", {
3419
+ className: classNames([styles.container, _defineProperty({}, className, className)])
3420
+ }, /*#__PURE__*/React.createElement("div", {
3421
+ className: styles.inner
3422
+ }, /*#__PURE__*/React.createElement(SettingsComponent, {
3423
+ name: name,
3424
+ field: field,
3425
+ fields: settings,
3426
+ value: value,
3427
+ onChange: onSettingsChange,
3428
+ gotoFieldForm: gotoFieldForm,
3429
+ closeFieldForm: closeFieldForm,
3430
+ fieldsProps: fieldsProps
3431
+ })));
3432
+ };
3433
+ SettingsForm.propTypes = propTypes$2;
3434
+ SettingsForm.defaultProps = defaultProps$2;
3435
+ var SettingsForm$1 = SettingsForm;
3436
+
3437
+ // eslint-disable-next-line import/prefer-default-export
3438
+
3439
+ var FormsComponents = /*#__PURE__*/Object.freeze({
3440
+ __proto__: null,
3441
+ Settings: SettingsForm$1
3442
+ });
3443
+
3444
+ /* eslint-disable react/jsx-props-no-spreading */
3445
+ var propTypes$1 = {
3446
+ children: PropTypes.node
3447
+ };
3448
+ var defaultProps$1 = {
3449
+ children: null
3450
+ };
3451
+ var FormsProvider = function FormsProvider(props) {
3452
+ return /*#__PURE__*/React.createElement(ComponentsProvider, Object.assign({
3453
+ namespace: FORMS_NAMESPACE,
3454
+ components: FormsComponents
3455
+ }, props));
3456
+ };
3457
+ FormsProvider.propTypes = propTypes$1;
3458
+ FormsProvider.defaultProps = defaultProps$1;
3459
+ var FormsProvider$1 = FormsProvider;
3460
+
3461
+ var home = "/";
3462
+ var screen_wildcard = "/:screen/(.*)?";
3463
+ var screen = "/:screen";
3464
+ var defaultRoutes = {
3465
+ home: home,
3466
+ screen_wildcard: screen_wildcard,
3467
+ screen: screen,
3468
+ "screen.field": "/:screen/:field+",
3469
+ "screen.field.form": "/:screen/:field+/:form"
3470
+ };
3471
+
3472
+ var _excluded = ["value", "memoryRouter", "routes", "basePath", "uppy", "googleApiKey", "googleMapsLibraries", "screenNamespaces"];
3473
+ var pathToRegexpParser = createPathToRegexpParser();
3474
+ var propTypes = {
3475
+ value: PropTypes.oneOfType([PropTypes$1.story, PropTypes$1.theme]),
3476
+ routes: routes,
3477
+ memoryRouter: PropTypes.bool,
3478
+ basePath: PropTypes.string,
3479
+ uppy: PropTypes.shape({
3480
+ transport: PropTypes.string
3481
+ }),
3482
+ googleApiKey: PropTypes.string,
3483
+ googleMapsLibraries: PropTypes.arrayOf(PropTypes.string),
3484
+ screenNamespaces: PropTypes.arrayOf(PropTypes.string)
3485
+ };
3486
+ var defaultProps = {
3487
+ value: null,
3488
+ routes: defaultRoutes,
3489
+ memoryRouter: false,
3490
+ basePath: null,
3491
+ uppy: null,
3492
+ googleApiKey: null,
3493
+ googleMapsLibraries: ['places'],
3494
+ screenNamespaces: null
3495
+ };
3496
+ var EditorContainer = function EditorContainer(_ref) {
3497
+ var value = _ref.value,
3498
+ memoryRouter = _ref.memoryRouter,
3499
+ routes = _ref.routes,
3500
+ basePath = _ref.basePath,
3501
+ uppy = _ref.uppy,
3502
+ googleApiKey = _ref.googleApiKey,
3503
+ googleMapsLibraries = _ref.googleMapsLibraries,
3504
+ screenNamespaces = _ref.screenNamespaces,
3505
+ props = _objectWithoutProperties(_ref, _excluded);
3506
+ var _useIntl = useIntl(),
3507
+ locale = _useIntl.locale;
3508
+ var _useMemoryRouter = useMemoryRouter(),
3509
+ memoryLocationHook = _useMemoryRouter.hook,
3510
+ memorySearchHook = _useMemoryRouter.searchHook;
3511
+ var routerProps = useMemo(function () {
3512
+ return {
3513
+ hook: memoryRouter ? memoryLocationHook : null,
3514
+ searchHook: memoryRouter ? memorySearchHook : null,
3515
+ parser: pathToRegexpParser,
3516
+ base: !memoryRouter ? basePath : null
3517
+ };
3518
+ }, [basePath, memoryRouter]);
3519
+ return /*#__PURE__*/React.createElement(Router, routerProps, /*#__PURE__*/React.createElement(UppyProvider, uppy, /*#__PURE__*/React.createElement(StoryProvider, {
3520
+ story: value
3521
+ }, /*#__PURE__*/React.createElement(ScreensProvider, {
3522
+ filterNamespaces: true,
3523
+ namespaces: screenNamespaces
3524
+ }, /*#__PURE__*/React.createElement(GoogleKeysProvider, {
3525
+ apiKey: googleApiKey
3526
+ }, /*#__PURE__*/React.createElement(GoogleMapsClientProvider, {
3527
+ locale: locale,
3528
+ libraries: googleMapsLibraries
3529
+ }, /*#__PURE__*/React.createElement(FontsProvider, null, /*#__PURE__*/React.createElement(FieldsProvider, null, /*#__PURE__*/React.createElement(FormsProvider$1, null, /*#__PURE__*/React.createElement(EditorProvider, null, /*#__PURE__*/React.createElement(VisitorProvider, {
3530
+ visitor: "editor"
3531
+ }, /*#__PURE__*/React.createElement(ComponentsContext.Consumer, null, function (manager) {
3532
+ var formComponents = manager.getComponents(FORMS_NAMESPACE);
3533
+ var formRegEx = formComponents !== null ? Object.keys(formComponents).map(function (name) {
3534
+ return slug(name);
3535
+ }).join('|') : null;
3536
+ return /*#__PURE__*/React.createElement(RoutesProvider, {
3537
+ routes: _objectSpread(_objectSpread({}, routes), {}, {
3538
+ 'screen.field.form': routes['screen.field.form'].replace(/:form$/, ":form(".concat(formRegEx, ")"))
3539
+ })
3540
+ }, /*#__PURE__*/React.createElement(Editor$1, Object.assign({
3541
+ value: value
3542
+ }, props)));
3543
+ }))))))))))));
3544
+ };
3545
+ EditorContainer.propTypes = propTypes;
3546
+ EditorContainer.defaultProps = defaultProps;
3547
+ var EditorContainer$1 = EditorContainer;
3548
+
3549
+ export { Editor$1 as Editor, ScreenTypesMenu as ScreenTypes, ScreensMenu$1 as Screens, createScreen$1 as createScreen, EditorContainer$1 as default };