@micromag/editor 0.3.21 → 0.3.22

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