@micromag/editor 0.3.480 → 0.3.482

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.
Files changed (3) hide show
  1. package/es/index.js +169 -99
  2. package/lib/index.js +700 -106
  3. package/package.json +11 -10
package/lib/index.js CHANGED
@@ -14,68 +14,599 @@ var components = require('@micromag/core/components');
14
14
  var contexts = require('@micromag/core/contexts');
15
15
  var hooks = require('@micromag/core/hooks');
16
16
  var utils = require('@micromag/core/utils');
17
- var reactRouter = require('react-router');
17
+ var _toArray = require('@babel/runtime/helpers/toArray');
18
+ var _createForOfIteratorHelper = require('@babel/runtime/helpers/createForOfIteratorHelper');
19
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
18
20
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
21
+ var regexparam = require('regexparam');
22
+ var index_js = require('use-sync-external-store/shim/index.js');
23
+ var pathToRegexp = require('path-to-regexp');
24
+ var mitt = require('mitt');
19
25
  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
26
  var faCogs = require('@fortawesome/free-solid-svg-icons/faCogs');
27
27
  var faEllipsisV = require('@fortawesome/free-solid-svg-icons/faEllipsisV');
28
28
  var reactFontawesome = require('@fortawesome/react-fontawesome');
29
29
  var fields = require('@micromag/fields');
30
+ var uuid = require('uuid');
30
31
  var size = require('@folklore/size');
31
32
  var viewer = require('@micromag/viewer');
32
- var _toArray = require('@babel/runtime/helpers/toArray');
33
33
  var faPlus = require('@fortawesome/free-solid-svg-icons/faPlus');
34
34
  var faTimesCircle = require('@fortawesome/free-solid-svg-icons/faTimesCircle');
35
+ var isString = require('lodash/isString');
35
36
  var isFunction = require('lodash/isFunction');
36
37
  var reactSortablejs = require('react-sortablejs');
37
38
  var core$1 = require('@dnd-kit/core');
38
39
  var sortable = require('@dnd-kit/sortable');
39
40
  var reactDom = require('react-dom');
40
- var _createForOfIteratorHelper = require('@babel/runtime/helpers/createForOfIteratorHelper');
41
41
  var utilities = require('@dnd-kit/utilities');
42
42
  var faAngleDown = require('@fortawesome/free-solid-svg-icons/faAngleDown');
43
43
  var faGripLines = require('@fortawesome/free-solid-svg-icons/faGripLines');
44
44
  var faTimes = require('@fortawesome/free-solid-svg-icons/faTimes');
45
45
  var orderBy = require('lodash/orderBy');
46
- var reactRouterDom = require('react-router-dom');
47
46
  var screens = require('@micromag/screens');
48
47
 
48
+ function _interopNamespaceDefault(e) {
49
+ var n = Object.create(null);
50
+ if (e) {
51
+ Object.keys(e).forEach(function (k) {
52
+ if (k !== 'default') {
53
+ var d = Object.getOwnPropertyDescriptor(e, k);
54
+ Object.defineProperty(n, k, d.get ? d : {
55
+ enumerable: true,
56
+ get: function () { return e[k]; }
57
+ });
58
+ }
59
+ });
60
+ }
61
+ n.default = e;
62
+ return Object.freeze(n);
63
+ }
64
+
65
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
66
+
67
+ // React.useInsertionEffect is not available in React <18
68
+ var useEffect = React__namespace.useEffect,
69
+ useLayoutEffect = React__namespace.useLayoutEffect,
70
+ useRef = React__namespace.useRef,
71
+ useBuiltinInsertionEffect = React__namespace.useInsertionEffect;
72
+
73
+ // Copied from:
74
+ // https://github.com/facebook/react/blob/main/packages/shared/ExecutionEnvironment.js
75
+ var canUseDOM = !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
76
+
77
+ // Copied from:
78
+ // https://github.com/reduxjs/react-redux/blob/master/src/utils/useIsomorphicLayoutEffect.ts
79
+ // "React currently throws a warning when using useLayoutEffect on the server.
80
+ // To get around it, we can conditionally useEffect on the server (no-op) and
81
+ // useLayoutEffect in the browser."
82
+ var useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;
83
+
84
+ // useInsertionEffect is already a noop on the server.
85
+ // See: https://github.com/facebook/react/blob/main/packages/react-server/src/ReactFizzHooks.js
86
+ var useInsertionEffect = useBuiltinInsertionEffect || useIsomorphicLayoutEffect;
87
+
88
+ // Userland polyfill while we wait for the forthcoming
89
+ // https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md
90
+ // Note: "A high-fidelity polyfill for useEvent is not possible because
91
+ // there is no lifecycle or Hook in React that we can use to switch
92
+ // .current at the right timing."
93
+ // So we will have to make do with this "close enough" approach for now.
94
+ var useEvent = function useEvent(fn) {
95
+ var ref = useRef([fn, function () {
96
+ return ref[0].apply(ref, arguments);
97
+ }]).current;
98
+ // Per Dan Abramov: useInsertionEffect executes marginally closer to the
99
+ // correct timing for ref synchronization than useLayoutEffect on React 18.
100
+ // See: https://github.com/facebook/react/pull/25881#issuecomment-1356244360
101
+ useInsertionEffect(function () {
102
+ ref[0] = fn;
103
+ });
104
+ return ref[1];
105
+ };
106
+
107
+ /**
108
+ * History API docs @see https://developer.mozilla.org/en-US/docs/Web/API/History
109
+ */
110
+ var eventPopstate = "popstate";
111
+ var eventPushState = "pushState";
112
+ var eventReplaceState = "replaceState";
113
+ var eventHashchange = "hashchange";
114
+ var events = [eventPopstate, eventPushState, eventReplaceState, eventHashchange];
115
+ var subscribeToLocationUpdates = function subscribeToLocationUpdates(callback) {
116
+ for (var _i = 0, _events = events; _i < _events.length; _i++) {
117
+ var event = _events[_i];
118
+ addEventListener(event, callback);
119
+ }
120
+ return function () {
121
+ for (var _i2 = 0, _events2 = events; _i2 < _events2.length; _i2++) {
122
+ var _event = _events2[_i2];
123
+ removeEventListener(_event, callback);
124
+ }
125
+ };
126
+ };
127
+ var useLocationProperty = function useLocationProperty(fn, ssrFn) {
128
+ return index_js.useSyncExternalStore(subscribeToLocationUpdates, fn, ssrFn);
129
+ };
130
+ var currentSearch = function currentSearch() {
131
+ return location.search;
132
+ };
133
+ var useSearch = function useSearch() {
134
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
135
+ _ref$ssrSearch = _ref.ssrSearch,
136
+ ssrSearch = _ref$ssrSearch === void 0 ? "" : _ref$ssrSearch;
137
+ return useLocationProperty(currentSearch, function () {
138
+ return ssrSearch;
139
+ });
140
+ };
141
+ var currentPathname = function currentPathname() {
142
+ return location.pathname;
143
+ };
144
+ var usePathname = function usePathname() {
145
+ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
146
+ ssrPath = _ref2.ssrPath;
147
+ return useLocationProperty(currentPathname, ssrPath ? function () {
148
+ return ssrPath;
149
+ } : currentPathname);
150
+ };
151
+ var navigate = function navigate(to) {
152
+ var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
153
+ _ref3$replace = _ref3.replace,
154
+ replace = _ref3$replace === void 0 ? false : _ref3$replace,
155
+ _ref3$state = _ref3.state,
156
+ state = _ref3$state === void 0 ? null : _ref3$state;
157
+ return history[replace ? eventReplaceState : eventPushState](state, "", to);
158
+ };
159
+
160
+ // the 2nd argument of the `useBrowserLocation` return value is a function
161
+ // that allows to perform a navigation.
162
+ var useBrowserLocation = function useBrowserLocation() {
163
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
164
+ return [usePathname(opts), navigate];
165
+ };
166
+ var patchKey = Symbol["for"]("wouter_v3");
167
+
168
+ // While History API does have `popstate` event, the only
169
+ // proper way to listen to changes via `push/replaceState`
170
+ // is to monkey-patch these methods.
171
+ //
172
+ // See https://stackoverflow.com/a/4585031
173
+ if (typeof history !== "undefined" && typeof window[patchKey] === "undefined") {
174
+ var _loop = function _loop() {
175
+ var type = _arr[_i3];
176
+ var original = history[type];
177
+ // TODO: we should be using unstable_batchedUpdates to avoid multiple re-renders,
178
+ // however that will require an additional peer dependency on react-dom.
179
+ // See: https://github.com/reactwg/react-18/discussions/86#discussioncomment-1567149
180
+ history[type] = function () {
181
+ var result = original.apply(this, arguments);
182
+ var event = new Event(type);
183
+ event.arguments = arguments;
184
+ dispatchEvent(event);
185
+ return result;
186
+ };
187
+ };
188
+ for (var _i3 = 0, _arr = [eventPushState, eventReplaceState]; _i3 < _arr.length; _i3++) {
189
+ _loop();
190
+ }
191
+
192
+ // patch history object only once
193
+ // See: https://github.com/molefrog/wouter/issues/167
194
+ Object.defineProperty(window, patchKey, {
195
+ value: true
196
+ });
197
+ }
198
+
199
+ var _excluded$d = ["children"],
200
+ _excluded2$1 = ["path", "nest", "match"],
201
+ _excluded3 = ["to", "href", "onClick", "asChild", "children", "replace", "state"];
202
+
203
+ /*
204
+ * Transforms `path` into its relative `base` version
205
+ * If base isn't part of the path provided returns absolute path e.g. `~/app`
206
+ */
207
+ var relativePath = function relativePath() {
208
+ var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
209
+ var path = arguments.length > 1 ? arguments[1] : undefined;
210
+ return !path.toLowerCase().indexOf(base.toLowerCase()) ? path.slice(base.length) || "/" : "~" + path;
211
+ };
212
+ var absolutePath = function absolutePath(to) {
213
+ var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
214
+ return to[0] === "~" ? to.slice(1) : base + to;
215
+ };
216
+
217
+ /*
218
+ * decodes escape sequences such as %20
219
+ */
220
+ var unescape = function unescape(str) {
221
+ try {
222
+ return decodeURI(str);
223
+ } catch (_e) {
224
+ // fail-safe mode: if string can't be decoded do nothing
225
+ return str;
226
+ }
227
+ };
228
+
229
+ /*
230
+ * Router and router context. Router is a lightweight object that represents the current
231
+ * routing options: how location is managed, base path etc.
232
+ *
233
+ * There is a default router present for most of the use cases, however it can be overridden
234
+ * via the <Router /> component.
235
+ */
236
+
237
+ var defaultRouter = {
238
+ hook: useBrowserLocation,
239
+ searchHook: useSearch,
240
+ parser: regexparam.parse,
241
+ base: "",
242
+ // this option is used to override the current location during SSR
243
+ ssrPath: undefined,
244
+ ssrSearch: undefined
245
+ };
246
+ var RouterCtx = React.createContext(defaultRouter);
247
+
248
+ // gets the closest parent router from the context
249
+ var useRouter = function useRouter() {
250
+ return React.useContext(RouterCtx);
251
+ };
252
+
253
+ /**
254
+ * Parameters context. Used by `useParams()` to get the
255
+ * matched params from the innermost `Route` component.
256
+ */
257
+
258
+ var ParamsCtx = React.createContext({});
259
+
260
+ /*
261
+ * Part 1, Hooks API: useRoute and useLocation
262
+ */
263
+
264
+ // Internal version of useLocation to avoid redundant useRouter calls
265
+
266
+ var useLocationFromRouter = function useLocationFromRouter(router) {
267
+ var _router$hook = router.hook(router),
268
+ _router$hook2 = _slicedToArray(_router$hook, 2),
269
+ location = _router$hook2[0],
270
+ navigate = _router$hook2[1];
271
+
272
+ // the function reference should stay the same between re-renders, so that
273
+ // it can be passed down as an element prop without any performance concerns.
274
+ // (This is achieved via `useEvent`.)
275
+ return [unescape(relativePath(router.base, location)), useEvent(function (to, navOpts) {
276
+ return navigate(absolutePath(to, router.base), navOpts);
277
+ })];
278
+ };
279
+ var useLocation = function useLocation() {
280
+ return useLocationFromRouter(useRouter());
281
+ };
282
+ var matchRoute = function matchRoute(parser, route, path, loose) {
283
+ // when parser is in "loose" mode, `$base` is equal to the
284
+ // first part of the route that matches the pattern
285
+ // (e.g. for pattern `/a/:b` and path `/a/1/2/3` the `$base` is `a/1`)
286
+ // we use this for route nesting
287
+ var _parser = parser(route || "*", loose),
288
+ pattern = _parser.pattern,
289
+ keys = _parser.keys;
290
+ var _ref = pattern.exec(path) || [],
291
+ _ref2 = _toArray(_ref),
292
+ $base = _ref2[0],
293
+ matches = _ref2.slice(1);
294
+ return $base !== undefined ? [true,
295
+ // an object with parameters matched, e.g. { foo: "bar" } for "/:foo"
296
+ // we "zip" two arrays here to construct the object
297
+ // ["foo"], ["bar"] → { foo: "bar" }
298
+ Object.fromEntries(keys.map(function (key, i) {
299
+ return [key, matches[i]];
300
+ }))].concat(_toConsumableArray(loose ? [$base] : [])) : [false, null];
301
+ };
302
+
303
+ /*
304
+ * Part 2, Low Carb Router API: Router, Route, Link, Switch
305
+ */
306
+
307
+ var Router = function Router(_ref3) {
308
+ var children = _ref3.children,
309
+ props = _objectWithoutProperties(_ref3, _excluded$d);
310
+ // the router we will inherit from - it is the closest router in the tree,
311
+ // unless the custom `hook` is provided (in that case it's the default one)
312
+ var parent_ = useRouter();
313
+ var parent = props.hook ? defaultRouter : parent_;
314
+
315
+ // holds to the context value: the router object
316
+ var value = parent;
317
+
318
+ // what is happening below: to avoid unnecessary rerenders in child components,
319
+ // we ensure that the router object reference is stable, unless there are any
320
+ // changes that require reload (e.g. `base` prop changes -> all components that
321
+ // get the router from the context should rerender, even if the component is memoized).
322
+ // the expected behaviour is:
323
+ //
324
+ // 1) when the resulted router is no different from the parent, use parent
325
+ // 2) if the custom `hook` prop is provided, we always inherit from the
326
+ // default router instead. this resets all previously overridden options.
327
+ // 3) when the router is customized here, it should stay stable between renders
328
+ var ref = React.useRef({}),
329
+ prev = ref.current,
330
+ next = prev;
331
+ for (var k in parent) {
332
+ var option = k === "base" ? /* base is special case, it is appended to the parent's base */
333
+ parent[k] + (props[k] || "") : props[k] || parent[k];
334
+ if (prev === next && option !== next[k]) {
335
+ ref.current = next = _objectSpread({}, next);
336
+ }
337
+ next[k] = option;
338
+
339
+ // the new router is no different from the parent, use parent
340
+ if (option !== parent[k]) value = next;
341
+ }
342
+ return React.createElement(RouterCtx.Provider, {
343
+ value: value,
344
+ children: children
345
+ });
346
+ };
347
+ var h_route = function h_route(_ref4, params) {
348
+ var children = _ref4.children,
349
+ component = _ref4.component;
350
+ // React-Router style `component` prop
351
+ if (component) return React.createElement(component, {
352
+ params: params
353
+ });
354
+
355
+ // support render prop or plain children
356
+ return typeof children === "function" ? children(params) : children;
357
+ };
358
+ var Route = function Route(_ref5) {
359
+ var path = _ref5.path,
360
+ nest = _ref5.nest,
361
+ match = _ref5.match,
362
+ renderProps = _objectWithoutProperties(_ref5, _excluded2$1);
363
+ var router = useRouter();
364
+ var _useLocationFromRoute = useLocationFromRouter(router),
365
+ _useLocationFromRoute2 = _slicedToArray(_useLocationFromRoute, 1),
366
+ location = _useLocationFromRoute2[0];
367
+ var _ref6 = // `match` is a special prop to give up control to the parent,
368
+ // it is used by the `Switch` to avoid double matching
369
+ match !== null && match !== void 0 ? match : matchRoute(router.parser, path, location, nest),
370
+ _ref7 = _slicedToArray(_ref6, 3),
371
+ matches = _ref7[0],
372
+ params = _ref7[1],
373
+ base = _ref7[2];
374
+ if (!matches) return null;
375
+ var children = base ? React.createElement(Router, {
376
+ base: base
377
+ }, h_route(renderProps, params)) : h_route(renderProps, params);
378
+ return React.createElement(ParamsCtx.Provider, {
379
+ value: params,
380
+ children: children
381
+ });
382
+ };
383
+ React.forwardRef(function (props, ref) {
384
+ var router = useRouter();
385
+ var _useLocationFromRoute3 = useLocationFromRouter(router),
386
+ _useLocationFromRoute4 = _slicedToArray(_useLocationFromRoute3, 2),
387
+ navigate = _useLocationFromRoute4[1];
388
+ var to = props.to,
389
+ _props$href = props.href,
390
+ _href = _props$href === void 0 ? to : _props$href,
391
+ _onClick = props.onClick,
392
+ asChild = props.asChild,
393
+ children = props.children;
394
+ props.replace;
395
+ props.state;
396
+ var restProps = _objectWithoutProperties(props, _excluded3);
397
+ var onClick = useEvent(function (event) {
398
+ // ignores the navigation when clicked using right mouse button or
399
+ // by holding a special modifier key: ctrl, command, win, alt, shift
400
+ if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey || event.button !== 0) return;
401
+ _onClick && _onClick(event); // TODO: is it safe to use _onClick?.(event)
402
+ if (!event.defaultPrevented) {
403
+ event.preventDefault();
404
+ navigate(_href, props);
405
+ }
406
+ });
407
+
408
+ // handle nested routers and absolute paths
409
+ var href = _href[0] === "~" ? _href.slice(1) : router.base + _href;
410
+ return asChild && React.isValidElement(children) ? React.cloneElement(children, {
411
+ href: href,
412
+ onClick: onClick
413
+ }) : React.createElement("a", _objectSpread(_objectSpread({}, restProps), {}, {
414
+ href: href,
415
+ onClick: onClick,
416
+ children: children,
417
+ ref: ref
418
+ }));
419
+ });
420
+ var flattenChildren = function flattenChildren(children) {
421
+ var _ref8;
422
+ return Array.isArray(children) ? (_ref8 = []).concat.apply(_ref8, _toConsumableArray(children.map(function (c) {
423
+ return c && c.type === React.Fragment ? flattenChildren(c.props.children) : flattenChildren(c);
424
+ }))) : [children];
425
+ };
426
+ var Switch = function Switch(_ref9) {
427
+ var children = _ref9.children,
428
+ location = _ref9.location;
429
+ var router = useRouter();
430
+ var _useLocationFromRoute5 = useLocationFromRouter(router),
431
+ _useLocationFromRoute6 = _slicedToArray(_useLocationFromRoute5, 1),
432
+ originalLocation = _useLocationFromRoute6[0];
433
+ var _iterator = _createForOfIteratorHelper(flattenChildren(children)),
434
+ _step;
435
+ try {
436
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
437
+ var element = _step.value;
438
+ var match = 0;
439
+ if (React.isValidElement(element) &&
440
+ // we don't require an element to be of type Route,
441
+ // but we do require it to contain a truthy `path` prop.
442
+ // this allows to use different components that wrap Route
443
+ // inside of a switch, for example <AnimatedRoute />.
444
+ (match = matchRoute(router.parser, element.props.path, location || originalLocation, element.props.nest))[0]) return React.cloneElement(element, {
445
+ match: match
446
+ });
447
+ }
448
+ } catch (err) {
449
+ _iterator.e(err);
450
+ } finally {
451
+ _iterator.f();
452
+ }
453
+ return null;
454
+ };
455
+
456
+ ({
457
+ children: PropTypes.node.isRequired,
458
+ routes: PropTypes.objectOf(PropTypes.string).isRequired,
459
+ basePath: PropTypes.string
460
+ });
461
+ function parseLocation(location) {
462
+ var search = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
463
+ var hash = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
464
+ var _split = (location || '').split('?', 2),
465
+ _split2 = _slicedToArray(_split, 2),
466
+ pathname = _split2[0],
467
+ _split2$ = _split2[1],
468
+ searchFromPath = _split2$ === void 0 ? null : _split2$;
469
+ var _split3 = (searchFromPath || '').split('#', 2),
470
+ _split4 = _slicedToArray(_split3, 2),
471
+ searchWithoutHash = _split4[0],
472
+ _split4$ = _split4[1],
473
+ hashFromPath = _split4$ === void 0 ? null : _split4$;
474
+ return {
475
+ pathname: pathname !== '' ? pathname : '/',
476
+ search: search || searchWithoutHash || null,
477
+ hash: hash || hashFromPath || null
478
+ };
479
+ }
480
+ function useMemoryRouter() {
481
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
482
+ _ref3$path = _ref3.path,
483
+ path = _ref3$path === void 0 ? '/' : _ref3$path,
484
+ _ref3$static = _ref3["static"],
485
+ staticLocation = _ref3$static === void 0 ? false : _ref3$static;
486
+ _ref3.record;
487
+ var currentPath = parseLocation(path);
488
+ var emitter = mitt();
489
+ var navigateImplementation = function navigateImplementation(newPath) {
490
+ var newParsedPath = parseLocation(newPath);
491
+ currentPath = newParsedPath;
492
+ emitter.emit('navigate', path);
493
+ };
494
+ var navigate = !staticLocation ? navigateImplementation : function () {
495
+ return null;
496
+ };
497
+ var subscribe = function subscribe(cb) {
498
+ emitter.on('navigate', cb);
499
+ return function () {
500
+ return emitter.off('navigate', cb);
501
+ };
502
+ };
503
+ function reset() {
504
+ navigateImplementation(path);
505
+ }
506
+ var locationHook = function locationHook() {
507
+ return [React.useSyncExternalStore(subscribe, function () {
508
+ return currentPath.pathname;
509
+ }), navigate];
510
+ };
511
+ var searchHook = function searchHook() {
512
+ return React.useSyncExternalStore(subscribe, function () {
513
+ return currentPath.search || '';
514
+ });
515
+ };
516
+ return {
517
+ hook: locationHook,
518
+ searchHook: searchHook,
519
+ reset: reset,
520
+ navigate: navigate
521
+ };
522
+ }
523
+ function useRouteMatcher() {
524
+ var router = useRouter();
525
+ var _useLocation3 = useLocation(),
526
+ _useLocation4 = _slicedToArray(_useLocation3, 1),
527
+ location = _useLocation4[0];
528
+ var matcher = React.useCallback(function (route) {
529
+ var specificLocation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
530
+ var path = specificLocation || location;
531
+ // when parser is in "loose" mode, `$base` is equal to the
532
+ // first part of the route that matches the pattern
533
+ // (e.g. for pattern `/a/:b` and path `/a/1/2/3` the `$base` is `a/1`)
534
+ // we use this for route nesting
535
+ var _router$parser = router.parser(route || '*'),
536
+ pattern = _router$parser.pattern,
537
+ keys = _router$parser.keys;
538
+ var _ref4 = pattern.exec(path) || [],
539
+ _ref5 = _toArray(_ref4),
540
+ $base = _ref5[0],
541
+ matches = _ref5.slice(1);
542
+ return $base !== undefined ? [true,
543
+ // an object with parameters matched, e.g. { foo: "bar" } for "/:foo"
544
+ // we "zip" two arrays here to construct the object
545
+ // ["foo"], ["bar"] → { foo: "bar" }
546
+ Object.fromEntries(keys.map(function (key, i) {
547
+ return [key, matches[i]];
548
+ }))] : [false];
549
+ }, [router, location]);
550
+ return matcher;
551
+ }
552
+ function createPathToRegexpParser(opts) {
553
+ return function (path, loose) {
554
+ var keys = [];
555
+ var isWildcard = path.match(/(\/|^)\*$/) !== null;
556
+ var pattern = pathToRegexp.pathToRegexp(isWildcard ? path.replace(/(\/|^)\*$/, '$1(.*)') : path, keys, _objectSpread({
557
+ end: !loose && !isWildcard
558
+ }, opts));
559
+ return {
560
+ pattern: pattern,
561
+ // `pathToRegexp` returns some metadata about the keys,
562
+ // we want to strip it to just an array of keys
563
+ keys: keys.map(function (k) {
564
+ return k.name;
565
+ })
566
+ };
567
+ };
568
+ }
569
+
49
570
  var useRouteParams = function useRouteParams() {
50
571
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
51
572
  _ref$screenOnly = _ref.screenOnly,
52
573
  screenOnly = _ref$screenOnly === void 0 ? false : _ref$screenOnly;
53
574
  var routes = contexts.useRoutes();
54
- var path = React.useMemo(function () {
55
- return screenOnly ? [routes.screen, '*'] : [routes['screen.field.form'], routes['screen.field'], routes.screen, '*'];
56
- }, [routes, screenOnly]);
57
- var _useRouteMatch = reactRouter.useRouteMatch({
58
- path: path
59
- }),
60
- url = _useRouteMatch.url,
61
- _useRouteMatch$params = _useRouteMatch.params,
62
- _useRouteMatch$params2 = _useRouteMatch$params.screen,
63
- screen = _useRouteMatch$params2 === void 0 ? null : _useRouteMatch$params2,
64
- _useRouteMatch$params3 = _useRouteMatch$params.field,
65
- field = _useRouteMatch$params3 === void 0 ? null : _useRouteMatch$params3,
66
- _useRouteMatch$params4 = _useRouteMatch$params.form,
67
- form = _useRouteMatch$params4 === void 0 ? null : _useRouteMatch$params4;
575
+ var _useLocation = useLocation(),
576
+ _useLocation2 = _slicedToArray(_useLocation, 1),
577
+ location = _useLocation2[0];
578
+ var matcher = useRouteMatcher();
579
+ var _useMemo = React.useMemo(function () {
580
+ var paths = screenOnly ? [routes.screen] : [routes['screen.field.form'], routes['screen.field'], routes.screen, '*'];
581
+ return paths.reduce(function (currentParams, path) {
582
+ if (currentParams !== null) {
583
+ return currentParams;
584
+ }
585
+ var _matcher = matcher(path),
586
+ _matcher2 = _slicedToArray(_matcher, 2),
587
+ _matcher2$ = _matcher2[0],
588
+ match = _matcher2$ === void 0 ? false : _matcher2$,
589
+ params = _matcher2[1];
590
+ return match ? params : currentParams;
591
+ }, null) || {};
592
+ }, [routes, screenOnly, location, matcher]),
593
+ _useMemo$screen = _useMemo.screen,
594
+ screen = _useMemo$screen === void 0 ? null : _useMemo$screen,
595
+ _useMemo$field = _useMemo.field,
596
+ field = _useMemo$field === void 0 ? null : _useMemo$field,
597
+ _useMemo$form = _useMemo.form,
598
+ form = _useMemo$form === void 0 ? null : _useMemo$form;
68
599
  var routeParams = React.useMemo(function () {
69
600
  return screenOnly ? {
70
- url: url,
601
+ url: location,
71
602
  screen: screen
72
603
  } : {
73
- url: url,
604
+ url: location,
74
605
  screen: screen,
75
606
  field: field,
76
607
  form: form
77
608
  };
78
- }, [screenOnly, url, screen, field, form]);
609
+ }, [screenOnly, location, screen, field, form]);
79
610
  return routeParams;
80
611
  };
81
612
 
@@ -190,6 +721,7 @@ var createScreen = function createScreen(definition) {
190
721
  id: uuid.v1()
191
722
  });
192
723
  };
724
+ var createScreen$1 = createScreen;
193
725
 
194
726
  var _excluded$c = ["components"];
195
727
  var deleteScreen = function deleteScreen(story, screenId) {
@@ -279,6 +811,7 @@ var SettingsButton = function SettingsButton(_ref) {
279
811
  };
280
812
  SettingsButton.propTypes = propTypes$o;
281
813
  SettingsButton.defaultProps = defaultProps$o;
814
+ var SettingsButton$1 = SettingsButton;
282
815
 
283
816
  var _excluded$8 = ["name", "form"];
284
817
  var propTypes$n = {
@@ -339,6 +872,7 @@ var FieldWithContexts = function FieldWithContexts(_ref) {
339
872
  };
340
873
  FieldWithContexts.propTypes = propTypes$n;
341
874
  FieldWithContexts.defaultProps = defaultProps$n;
875
+ var FieldWithContexts$1 = FieldWithContexts;
342
876
 
343
877
  var styles$i = {"container":"micromag-editor-forms-screen-container","inner":"micromag-editor-forms-screen-inner"};
344
878
 
@@ -393,6 +927,7 @@ var ScreenForm = function ScreenForm(_ref) {
393
927
  };
394
928
  ScreenForm.propTypes = propTypes$m;
395
929
  ScreenForm.defaultProps = defaultProps$m;
930
+ var ScreenForm$1 = ScreenForm;
396
931
 
397
932
  var styles$h = {"container":"micromag-editor-menus-breadcrumb-container"};
398
933
 
@@ -422,7 +957,9 @@ var Breadcrumb = function Breadcrumb(_ref) {
422
957
  var _ref2 = story || {},
423
958
  _ref2$components = _ref2.components,
424
959
  screens = _ref2$components === void 0 ? [] : _ref2$components;
425
- var history = reactRouter.useHistory();
960
+ var _useLocation = useLocation(),
961
+ _useLocation2 = _slicedToArray(_useLocation, 2),
962
+ setLocation = _useLocation2[1];
426
963
  var screensManager = contexts.useScreensManager();
427
964
  var fieldsManager = contexts.useFieldsManager();
428
965
  var fieldsComponentManager = contexts.useFieldsComponentsManager();
@@ -607,8 +1144,8 @@ var Breadcrumb = function Breadcrumb(_ref) {
607
1144
  }, [intl, route, screenId, field, form, url, screenFields, screenStates, screenTitle, fieldsManager]);
608
1145
  var itemsLength = items.length;
609
1146
  var onClickBack = React.useCallback(function () {
610
- history.push(items[itemsLength - 2].url);
611
- }, [items]);
1147
+ setLocation(items[itemsLength - 2].url);
1148
+ }, [items, setLocation]);
612
1149
  var withBack = itemsLength > 1;
613
1150
  return /*#__PURE__*/React.createElement(React.Fragment, null, withBack ? /*#__PURE__*/React.createElement(components.BackButton, {
614
1151
  onClick: onClickBack,
@@ -623,6 +1160,7 @@ var Breadcrumb = function Breadcrumb(_ref) {
623
1160
  };
624
1161
  Breadcrumb.propTypes = propTypes$l;
625
1162
  Breadcrumb.defaultProps = defaultProps$l;
1163
+ var Breadcrumb$1 = Breadcrumb;
626
1164
 
627
1165
  var styles$g = {"container":"micromag-editor-modals-delete-screen-container","description":"micromag-editor-modals-delete-screen-description","actions":"micromag-editor-modals-delete-screen-actions"};
628
1166
 
@@ -683,6 +1221,7 @@ var DeleteScreenModal = function DeleteScreenModal(_ref) {
683
1221
  };
684
1222
  DeleteScreenModal.propTypes = propTypes$k;
685
1223
  DeleteScreenModal.defaultProps = defaultProps$k;
1224
+ var DeleteScreenModal$1 = DeleteScreenModal;
686
1225
 
687
1226
  var styles$f = {"panel":"micromag-editor-form-panel","exit":"micromag-editor-form-exit","content":"micromag-editor-form-content","navbar":"micromag-editor-form-navbar","enterRight":"micromag-editor-form-enterRight","enterLeft":"micromag-editor-form-enterLeft","enterTop":"micromag-editor-form-enterTop","enterBottom":"micromag-editor-form-enterBottom","enterActiveHorizontal":"micromag-editor-form-enterActiveHorizontal","enterActiveVertical":"micromag-editor-form-enterActiveVertical","exitActiveRight":"micromag-editor-form-exitActiveRight","exitActiveLeft":"micromag-editor-form-exitActiveLeft","exitActiveTop":"micromag-editor-form-exitActiveTop","exitActiveBottom":"micromag-editor-form-exitActiveBottom"};
688
1227
 
@@ -704,7 +1243,9 @@ var EditForm = function EditForm(_ref) {
704
1243
  className = _ref.className,
705
1244
  onChange = _ref.onChange;
706
1245
  // Match routes
707
- var history = reactRouter.useHistory();
1246
+ var _useLocation = useLocation(),
1247
+ _useLocation2 = _slicedToArray(_useLocation, 2),
1248
+ setLocation = _useLocation2[1];
708
1249
  var routePush = contexts.useRoutePush();
709
1250
  var _useRouteParams = useRouteParams(),
710
1251
  url = _useRouteParams.url,
@@ -789,12 +1330,12 @@ var EditForm = function EditForm(_ref) {
789
1330
  var fieldKey = "".concat(field).concat(formName !== null ? ":".concat(formName) : '');
790
1331
  var pastUrl = fieldForms[fieldKey] || null;
791
1332
  if (pastUrl !== null) {
792
- history.push(pastUrl);
1333
+ setLocation(pastUrl);
793
1334
  }
794
1335
  setFieldForms(Object.keys(fieldForms).reduce(function (map, key) {
795
1336
  return key !== fieldKey ? _objectSpread(_objectSpread({}, map), {}, _defineProperty({}, key, fieldForms[key])) : map;
796
1337
  }, {}));
797
- }, [history, screenId, fieldForms, setFieldForms]);
1338
+ }, [setLocation, screenId, fieldForms, setFieldForms]);
798
1339
  var triggerOnChange = React.useCallback(function (newValue) {
799
1340
  if (onChange !== null) {
800
1341
  onChange(newValue);
@@ -874,7 +1415,7 @@ var EditForm = function EditForm(_ref) {
874
1415
  noWrap: true,
875
1416
  withoutCollapse: true,
876
1417
  className: classNames(['sticky-top', 'border-bottom', 'border-dark', styles$f.navbar])
877
- }, /*#__PURE__*/React.createElement(Breadcrumb, {
1418
+ }, /*#__PURE__*/React.createElement(Breadcrumb$1, {
878
1419
  story: value,
879
1420
  url: url,
880
1421
  screenId: screenId,
@@ -883,7 +1424,7 @@ var EditForm = function EditForm(_ref) {
883
1424
  className: "me-auto"
884
1425
  }), fieldParams === null ? /*#__PURE__*/React.createElement("div", {
885
1426
  className: "dropdown"
886
- }, /*#__PURE__*/React.createElement(SettingsButton, {
1427
+ }, /*#__PURE__*/React.createElement(SettingsButton$1, {
887
1428
  onClick: onSettingsClick,
888
1429
  dots: true,
889
1430
  className: "py-0",
@@ -909,7 +1450,7 @@ var EditForm = function EditForm(_ref) {
909
1450
  className: classNames(['w-100', styles$f.panel])
910
1451
  }, /*#__PURE__*/React.createElement(contexts.ScreenProvider, {
911
1452
  data: screen
912
- }, /*#__PURE__*/React.createElement(FieldWithContexts, {
1453
+ }, /*#__PURE__*/React.createElement(FieldWithContexts$1, {
913
1454
  name: fieldParams.replace(/\//g, '.'),
914
1455
  value: screen,
915
1456
  form: formParams,
@@ -927,7 +1468,7 @@ var EditForm = function EditForm(_ref) {
927
1468
  key: "screen-".concat(screen.id)
928
1469
  }, /*#__PURE__*/React.createElement(contexts.ScreenProvider, {
929
1470
  data: screen
930
- }, /*#__PURE__*/React.createElement(ScreenForm, {
1471
+ }, /*#__PURE__*/React.createElement(ScreenForm$1, {
931
1472
  value: screen,
932
1473
  className: styles$f.form,
933
1474
  onChange: onScreenFormChange,
@@ -942,13 +1483,14 @@ var EditForm = function EditForm(_ref) {
942
1483
  "value": "Select a screen..."
943
1484
  }],
944
1485
  decription: "Indication to select a screen to view the form"
945
- }))), deleteScreenModalOpened ? /*#__PURE__*/React.createElement(DeleteScreenModal, {
1486
+ }))), deleteScreenModalOpened ? /*#__PURE__*/React.createElement(DeleteScreenModal$1, {
946
1487
  onConfirm: onDeleteScreenConfirm,
947
1488
  onCancel: onDeleteScreenCancel
948
1489
  }) : null);
949
1490
  };
950
1491
  EditForm.propTypes = propTypes$j;
951
1492
  EditForm.defaultProps = defaultProps$j;
1493
+ var EditorForm = EditForm;
952
1494
 
953
1495
  function useScreenStates(screen) {
954
1496
  var _ref = screen || {},
@@ -1013,6 +1555,7 @@ var DesktopIcon = function DesktopIcon(_ref) {
1013
1555
  };
1014
1556
  DesktopIcon.propTypes = propTypes$i;
1015
1557
  DesktopIcon.defaultProps = defaultProps$i;
1558
+ var DesktopIcon$1 = DesktopIcon;
1016
1559
 
1017
1560
  /* eslint-disable react/button-has-type, react/jsx-props-no-spreading */
1018
1561
  var propTypes$h = {
@@ -1044,11 +1587,12 @@ var MobileIcon = function MobileIcon(_ref) {
1044
1587
  };
1045
1588
  MobileIcon.propTypes = propTypes$h;
1046
1589
  MobileIcon.defaultProps = defaultProps$h;
1590
+ var MobileIcon$1 = MobileIcon;
1047
1591
 
1048
1592
  var DeviceIcons = /*#__PURE__*/Object.freeze({
1049
- __proto__: null,
1050
- Desktop: DesktopIcon,
1051
- Mobile: MobileIcon
1593
+ __proto__: null,
1594
+ Desktop: DesktopIcon$1,
1595
+ Mobile: MobileIcon$1
1052
1596
  });
1053
1597
 
1054
1598
  var styles$d = {"container":"micromag-editor-buttons-device-container","icon":"micromag-editor-buttons-device-icon"};
@@ -1068,7 +1612,7 @@ var DeviceButton = function DeviceButton(_ref) {
1068
1612
  className = _ref.className,
1069
1613
  iconComponents = _ref.iconComponents,
1070
1614
  props = _objectWithoutProperties(_ref, _excluded$6);
1071
- var DeviceIcon = utils.getComponentFromName(device, iconComponents, DesktopIcon);
1615
+ var DeviceIcon = utils.getComponentFromName(device, iconComponents, DesktopIcon$1);
1072
1616
  return /*#__PURE__*/React.createElement(components.Button, Object.assign({
1073
1617
  className: classNames([styles$d.container, _defineProperty({}, className, className !== null)])
1074
1618
  }, props), /*#__PURE__*/React.createElement(DeviceIcon, {
@@ -1077,6 +1621,7 @@ var DeviceButton = function DeviceButton(_ref) {
1077
1621
  };
1078
1622
  DeviceButton.propTypes = propTypes$g;
1079
1623
  DeviceButton.defaultProps = defaultProps$g;
1624
+ var DeviceButton$1 = DeviceButton;
1080
1625
 
1081
1626
  var _excluded$5 = ["id"];
1082
1627
  var propTypes$f = {
@@ -1100,7 +1645,7 @@ var DevicesMenu = function DevicesMenu(_ref) {
1100
1645
  renderItemButton: function renderItemButton(item, index, props) {
1101
1646
  var id = item.id,
1102
1647
  itemProps = _objectWithoutProperties(item, _excluded$5);
1103
- return /*#__PURE__*/React.createElement(DeviceButton, Object.assign({
1648
+ return /*#__PURE__*/React.createElement(DeviceButton$1, Object.assign({
1104
1649
  device: id
1105
1650
  }, props, itemProps, {
1106
1651
  className: styles$e.button,
@@ -1113,6 +1658,7 @@ var DevicesMenu = function DevicesMenu(_ref) {
1113
1658
  };
1114
1659
  DevicesMenu.propTypes = propTypes$f;
1115
1660
  DevicesMenu.defaultProps = defaultProps$f;
1661
+ var DevicesMenu$1 = DevicesMenu;
1116
1662
 
1117
1663
  var styles$c = {"container":"micromag-editor-buttons-screen-container","button":"micromag-editor-buttons-screen-button","screen":"micromag-editor-buttons-screen-screen","inner":"micromag-editor-buttons-screen-inner","border":"micromag-editor-buttons-screen-border","icon":"micromag-editor-buttons-screen-icon","label":"micromag-editor-buttons-screen-label","active":"micromag-editor-buttons-screen-active"};
1118
1664
 
@@ -1273,6 +1819,7 @@ var ScreenWithPreview = function ScreenWithPreview(_ref) {
1273
1819
  };
1274
1820
  ScreenWithPreview.propTypes = propTypes$d;
1275
1821
  ScreenWithPreview.defaultProps = defaultProps$d;
1822
+ var ScreenWithPreview$1 = ScreenWithPreview;
1276
1823
 
1277
1824
  var styles$a = {"container":"micromag-editor-partials-screen-states-container","button":"micromag-editor-partials-screen-states-button","addButton":"micromag-editor-partials-screen-states-addButton","title":"micromag-editor-partials-screen-states-title"};
1278
1825
 
@@ -1395,7 +1942,7 @@ function ScreenStates(_ref) {
1395
1942
  }, repeatableItems.map(function (item, index) {
1396
1943
  return /*#__PURE__*/React.createElement("li", {
1397
1944
  className: "p-1"
1398
- }, /*#__PURE__*/React.createElement(ScreenWithPreview, {
1945
+ }, /*#__PURE__*/React.createElement(ScreenWithPreview$1, {
1399
1946
  index: index,
1400
1947
  withIndexIndicator: true,
1401
1948
  withDeleteButtonOnRepeatables: true,
@@ -1422,7 +1969,7 @@ function ScreenStates(_ref) {
1422
1969
  icon: faPlus.faPlus
1423
1970
  }),
1424
1971
  onClick: onClickAdd
1425
- })) : null) : /*#__PURE__*/React.createElement(ScreenWithPreview, {
1972
+ })) : null) : /*#__PURE__*/React.createElement(ScreenWithPreview$1, {
1426
1973
  screen: screen,
1427
1974
  screenState: id,
1428
1975
  className: styles$a.button,
@@ -1603,7 +2150,7 @@ var EditorPreview = function EditorPreview(_ref) {
1603
2150
  withoutMenu: true
1604
2151
  })))))), !withoutDevicesSizes ? /*#__PURE__*/React.createElement("div", {
1605
2152
  className: styles$9.deviceMenu
1606
- }, /*#__PURE__*/React.createElement(DevicesMenu, {
2153
+ }, /*#__PURE__*/React.createElement(DevicesMenu$1, {
1607
2154
  items: devices.map(function (it) {
1608
2155
  return _objectSpread(_objectSpread({}, it), {}, {
1609
2156
  active: it.id === deviceId
@@ -1615,6 +2162,7 @@ var EditorPreview = function EditorPreview(_ref) {
1615
2162
  };
1616
2163
  EditorPreview.propTypes = propTypes$b;
1617
2164
  EditorPreview.defaultProps = defaultProps$b;
2165
+ var EditorPreview$1 = EditorPreview;
1618
2166
 
1619
2167
  var iOS = /iPad|iPhone|iPod/.test(navigator.platform);
1620
2168
  function getDragDepth(offset, indentationWidth) {
@@ -2071,6 +2619,7 @@ var SortableTreeItemActions = /*#__PURE__*/React.forwardRef(function (_ref, ref)
2071
2619
  });
2072
2620
  SortableTreeItemActions.propTypes = propTypes$a;
2073
2621
  SortableTreeItemActions.defaultProps = defaultProps$a;
2622
+ var SortableTreeItemActions$1 = SortableTreeItemActions;
2074
2623
 
2075
2624
  var styles$7 = {"container":"micromag-editor-sortable-sortable-tree-item-container","parent":"micromag-editor-sortable-sortable-tree-item-parent","child":"micromag-editor-sortable-sortable-tree-item-child"};
2076
2625
 
@@ -2174,7 +2723,7 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
2174
2723
  }, [onPointerUp]);
2175
2724
  return /*#__PURE__*/React.createElement("div", {
2176
2725
  className: classNames([styles$7.container])
2177
- }, /*#__PURE__*/React.createElement(SortableTreeItemActions, Object.assign({
2726
+ }, /*#__PURE__*/React.createElement(SortableTreeItemActions$1, Object.assign({
2178
2727
  ref: setDraggableNodeRef,
2179
2728
  wrapperRef: setDroppableNodeRef,
2180
2729
  style: actionsStyle,
@@ -2196,6 +2745,7 @@ var SortableTreeItem = function SortableTreeItem(_ref2) {
2196
2745
  };
2197
2746
  SortableTreeItem.propTypes = propTypes$9;
2198
2747
  SortableTreeItem.defaultProps = defaultProps$9;
2748
+ var SortableTreeItem$1 = SortableTreeItem;
2199
2749
 
2200
2750
  var styles$6 = {"item":"micromag-editor-sortable-sortable-tree-item","parent":"micromag-editor-sortable-sortable-tree-parent","group":"micromag-editor-sortable-sortable-tree-group","isLastChild":"micromag-editor-sortable-sortable-tree-isLastChild"};
2201
2751
 
@@ -2575,7 +3125,7 @@ var SortableTree = function SortableTree(_ref2) {
2575
3125
  return /*#__PURE__*/React.createElement("div", {
2576
3126
  className: classNames([styles$6.item, _defineProperty(_defineProperty(_defineProperty({}, styles$6.parent, onCollapse !== null && !collapsed), styles$6.group, depth === 1), styles$6.isLastChild, next === null)]),
2577
3127
  key: id
2578
- }, /*#__PURE__*/React.createElement(SortableTreeItem, {
3128
+ }, /*#__PURE__*/React.createElement(SortableTreeItem$1, {
2579
3129
  key: id,
2580
3130
  id: id,
2581
3131
  depth: currentDepth,
@@ -2599,7 +3149,7 @@ var SortableTree = function SortableTree(_ref2) {
2599
3149
  }, activeId && activeItem ? /*#__PURE__*/React.createElement("div", {
2600
3150
  className: styles$6.item,
2601
3151
  key: activeId
2602
- }, /*#__PURE__*/React.createElement(SortableTreeItem, {
3152
+ }, /*#__PURE__*/React.createElement(SortableTreeItem$1, {
2603
3153
  id: activeId,
2604
3154
  depth: activeItem.depth,
2605
3155
  clone: true,
@@ -2616,6 +3166,7 @@ var SortableTree = function SortableTree(_ref2) {
2616
3166
  };
2617
3167
  SortableTree.propTypes = propTypes$8;
2618
3168
  SortableTree.defaultProps = defaultProps$8;
3169
+ var SortableTree$1 = SortableTree;
2619
3170
 
2620
3171
  var styles$5 = {"container":"micromag-editor-menus-screens-container","screen":"micromag-editor-menus-screens-screen","preview":"micromag-editor-menus-screens-preview","placeholder":"micromag-editor-menus-screens-placeholder","items":"micromag-editor-menus-screens-items","item":"micromag-editor-menus-screens-item","button":"micromag-editor-menus-screens-button","settings":"micromag-editor-menus-screens-settings","noWrap":"micromag-editor-menus-screens-noWrap","isVertical":"micromag-editor-menus-screens-isVertical","withPlaceholder":"micromag-editor-menus-screens-withPlaceholder"};
2621
3172
 
@@ -2686,7 +3237,7 @@ var ScreensMenu = function ScreensMenu(_ref) {
2686
3237
  key: item.id,
2687
3238
  className: classNames([styles$5.item, _defineProperty(_defineProperty({}, itemClassName, itemClassName !== null), itemCustomClassName, itemCustomClassName !== null)]),
2688
3239
  "data-screen-id": item.id
2689
- }, /*#__PURE__*/React.createElement(ScreenWithPreview, {
3240
+ }, /*#__PURE__*/React.createElement(ScreenWithPreview$1, {
2690
3241
  index: index,
2691
3242
  screen: withPlaceholder ? _objectSpread(_objectSpread({}, screen), {}, {
2692
3243
  type: type
@@ -2737,9 +3288,9 @@ var ScreensMenu = function ScreensMenu(_ref) {
2737
3288
  }, [items, isTree, items.length]);
2738
3289
  return /*#__PURE__*/React.createElement("div", {
2739
3290
  className: classNames([styles$5.container, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles$5.noWrap, noWrap), styles$5.isVertical, isVertical), styles$5.isTree, isTree), styles$5.withPlaceholder, withPlaceholder), className, className)])
2740
- }, isTree && !sortable ? /*#__PURE__*/React.createElement(SortableTree, {
3291
+ }, isTree && !sortable ? /*#__PURE__*/React.createElement(SortableTree$1, {
2741
3292
  items: sortableItems,
2742
- component: ScreenWithPreview,
3293
+ component: ScreenWithPreview$1,
2743
3294
  onClickItem: onClickItem,
2744
3295
  onChange: onOrderChange
2745
3296
  }) : null, !isTree && sortable && items.length > 1 ? /*#__PURE__*/React.createElement(reactSortablejs.ReactSortable, {
@@ -2756,6 +3307,7 @@ var ScreensMenu = function ScreensMenu(_ref) {
2756
3307
  };
2757
3308
  ScreensMenu.propTypes = propTypes$7;
2758
3309
  ScreensMenu.defaultProps = defaultProps$7;
3310
+ var ScreensMenu$1 = ScreensMenu;
2759
3311
 
2760
3312
  var styles$4 = {"container":"micromag-editor-menus-screen-types-container","row":"micromag-editor-menus-screen-types-row","title":"micromag-editor-menus-screen-types-title","screen":"micromag-editor-menus-screen-types-screen","button":"micromag-editor-menus-screen-types-button"};
2761
3313
 
@@ -2848,7 +3400,7 @@ var ScreenTypes = function ScreenTypes(_ref) {
2848
3400
  className: styles$4.row
2849
3401
  }, /*#__PURE__*/React.createElement(components.Label, null, name), /*#__PURE__*/React.createElement("div", {
2850
3402
  className: styles$4.layouts
2851
- }, /*#__PURE__*/React.createElement(ScreensMenu, {
3403
+ }, /*#__PURE__*/React.createElement(ScreensMenu$1, {
2852
3404
  items: items,
2853
3405
  withPlaceholder: true,
2854
3406
  withName: true,
@@ -2865,6 +3417,7 @@ var ScreenTypes = function ScreenTypes(_ref) {
2865
3417
  };
2866
3418
  ScreenTypes.propTypes = propTypes$6;
2867
3419
  ScreenTypes.defaultProps = defaultProps$6;
3420
+ var ScreenTypesMenu = ScreenTypes;
2868
3421
 
2869
3422
  var styles$3 = {"container":"micromag-editor-modals-screen-types-container","selected":"micromag-editor-modals-screen-types-selected"};
2870
3423
 
@@ -2895,7 +3448,7 @@ var ScreenTypesModal = function ScreenTypesModal(_ref) {
2895
3448
  }),
2896
3449
  className: classNames([styles$3.container, _defineProperty({}, className, className)]),
2897
3450
  onClickClose: onRequestClose
2898
- }, /*#__PURE__*/React.createElement(ScreenTypes, {
3451
+ }, /*#__PURE__*/React.createElement(ScreenTypesMenu, {
2899
3452
  selectedTypes: selectedTypes,
2900
3453
  className: styles$3.menu,
2901
3454
  onClickItem: onClickScreenType
@@ -2903,6 +3456,7 @@ var ScreenTypesModal = function ScreenTypesModal(_ref) {
2903
3456
  };
2904
3457
  ScreenTypesModal.propTypes = propTypes$5;
2905
3458
  ScreenTypesModal.defaultProps = defaultProps$5;
3459
+ var ScreenTypesModal$1 = ScreenTypesModal;
2906
3460
 
2907
3461
  var styles$2 = {"container":"micromag-editor-screens-container","navbar":"micromag-editor-screens-navbar"};
2908
3462
 
@@ -2974,7 +3528,7 @@ var EditorScreens = function EditorScreens(_ref) {
2974
3528
  var themeScreen = themeComponents !== null ? themeComponents.find(function (it) {
2975
3529
  return it.type === newScreenType;
2976
3530
  }) || null : null;
2977
- var newScreen = createScreen(definition, themeScreen);
3531
+ var newScreen = createScreen$1(definition, themeScreen);
2978
3532
  var foundIndex = screens.findIndex(function (_ref6) {
2979
3533
  var id = _ref6.id;
2980
3534
  return id === currentScreenId;
@@ -3090,43 +3644,71 @@ var EditorScreens = function EditorScreens(_ref) {
3090
3644
  })
3091
3645
  })), /*#__PURE__*/React.createElement("div", {
3092
3646
  className: "flex-grow-1 d-flex w-100 p-2"
3093
- }, /*#__PURE__*/React.createElement(reactRouter.Route, {
3094
- path: [routes.screen, routes.home],
3095
- render: function render(_ref18) {
3096
- var _ref18$match$params$s = _ref18.match.params.screen,
3097
- screenId = _ref18$match$params$s === void 0 ? null : _ref18$match$params$s;
3098
- return screens.length > 0 ? /*#__PURE__*/React.createElement(ScreensMenu, {
3099
- items: screens.map(function (it) {
3100
- return {
3101
- id: it.id,
3102
- screen: it,
3103
- href: url('screen', {
3104
- screen: it.id
3105
- }),
3106
- active: it.id === screenId
3107
- };
3647
+ }, /*#__PURE__*/React.createElement(Switch, null, /*#__PURE__*/React.createElement(Route, {
3648
+ path: "".concat(routes.screen, "/(.*)?")
3649
+ }, function (_ref18) {
3650
+ var _ref18$screen = _ref18.screen,
3651
+ screenId = _ref18$screen === void 0 ? null : _ref18$screen;
3652
+ return screens.length > 0 ? /*#__PURE__*/React.createElement(ScreensMenu$1, {
3653
+ items: screens.map(function (it) {
3654
+ return {
3655
+ id: it.id,
3656
+ screen: it,
3657
+ href: url('screen', {
3658
+ screen: it.id
3659
+ }),
3660
+ active: it.id === screenId
3661
+ };
3662
+ }),
3663
+ isVertical: isVertical,
3664
+ withPreview: true,
3665
+ sortable: !isTree,
3666
+ className: "w-100",
3667
+ onClickItem: onClickScreen,
3668
+ onOrderChange: onOrderChange,
3669
+ isTree: isTree
3670
+ }) : /*#__PURE__*/React.createElement(components.Empty, {
3671
+ className: "flex-grow-1 p-2"
3672
+ }, /*#__PURE__*/React.createElement(components.Button, {
3673
+ theme: "primary",
3674
+ onClick: onClickAdd
3675
+ }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
3676
+ id: "JoWKee",
3677
+ defaultMessage: [{
3678
+ "type": 0,
3679
+ "value": "Create your first screen"
3680
+ }]
3681
+ })));
3682
+ }), /*#__PURE__*/React.createElement(Route, null, screens.length > 0 ? /*#__PURE__*/React.createElement(ScreensMenu$1, {
3683
+ items: screens.map(function (it) {
3684
+ return {
3685
+ id: it.id,
3686
+ screen: it,
3687
+ href: url('screen', {
3688
+ screen: it.id
3108
3689
  }),
3109
- isVertical: isVertical,
3110
- withPreview: true,
3111
- sortable: !isTree,
3112
- className: "w-100",
3113
- onClickItem: onClickScreen,
3114
- onOrderChange: onOrderChange,
3115
- isTree: isTree
3116
- }) : /*#__PURE__*/React.createElement(components.Empty, {
3117
- className: "flex-grow-1 p-2"
3118
- }, /*#__PURE__*/React.createElement(components.Button, {
3119
- theme: "primary",
3120
- onClick: onClickAdd
3121
- }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
3122
- id: "JoWKee",
3123
- defaultMessage: [{
3124
- "type": 0,
3125
- "value": "Create your first screen"
3126
- }]
3127
- })));
3128
- }
3129
- })), createModalOpened ? /*#__PURE__*/React.createElement(ScreenTypesModal, {
3690
+ active: false
3691
+ };
3692
+ }),
3693
+ isVertical: isVertical,
3694
+ withPreview: true,
3695
+ sortable: !isTree,
3696
+ className: "w-100",
3697
+ onClickItem: onClickScreen,
3698
+ onOrderChange: onOrderChange,
3699
+ isTree: isTree
3700
+ }) : /*#__PURE__*/React.createElement(components.Empty, {
3701
+ className: "flex-grow-1 p-2"
3702
+ }, /*#__PURE__*/React.createElement(components.Button, {
3703
+ theme: "primary",
3704
+ onClick: onClickAdd
3705
+ }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
3706
+ id: "JoWKee",
3707
+ defaultMessage: [{
3708
+ "type": 0,
3709
+ "value": "Create your first screen"
3710
+ }]
3711
+ })))))), createModalOpened ? /*#__PURE__*/React.createElement(ScreenTypesModal$1, {
3130
3712
  selectedTypes: isTheme ? screens.map(function (_ref19) {
3131
3713
  var type = _ref19.type;
3132
3714
  return type;
@@ -3137,6 +3719,7 @@ var EditorScreens = function EditorScreens(_ref) {
3137
3719
  };
3138
3720
  EditorScreens.propTypes = propTypes$4;
3139
3721
  EditorScreens.defaultProps = defaultProps$4;
3722
+ var Screens = EditorScreens;
3140
3723
 
3141
3724
  var styles$1 = {"container":"micromag-editor-container","left":"micromag-editor-left","right":"micromag-editor-right","fullscreen":"micromag-editor-fullscreen","preview":"micromag-editor-preview","center":"micromag-editor-center","inner":"micromag-editor-inner","visible":"micromag-editor-visible","screen-medium":"micromag-editor-screen-medium","top":"micromag-editor-top"};
3142
3725
 
@@ -3312,7 +3895,7 @@ var Editor = function Editor(_ref) {
3312
3895
  }, /*#__PURE__*/React.createElement("div", {
3313
3896
  className: classNames([styles$1.left, _defineProperty({}, styles$1.visible, !isMobile || mobileView === 'screens')]),
3314
3897
  ref: refScreensContainer
3315
- }, /*#__PURE__*/React.createElement(EditorScreens, {
3898
+ }, /*#__PURE__*/React.createElement(Screens, {
3316
3899
  value: story,
3317
3900
  isTheme: isTheme,
3318
3901
  isCreateOpened: isCreateOpened,
@@ -3324,7 +3907,7 @@ var Editor = function Editor(_ref) {
3324
3907
  isTree: true
3325
3908
  })), /*#__PURE__*/React.createElement("div", {
3326
3909
  className: classNames([styles$1.center, _defineProperty({}, styles$1.visible, !isMobile || mobileView === 'preview')])
3327
- }, /*#__PURE__*/React.createElement(EditorPreview, {
3910
+ }, /*#__PURE__*/React.createElement(EditorPreview$1, {
3328
3911
  value: story,
3329
3912
  isTheme: isTheme,
3330
3913
  viewerTheme: viewerTheme,
@@ -3333,7 +3916,7 @@ var Editor = function Editor(_ref) {
3333
3916
  onChange: onStoryChange
3334
3917
  })), /*#__PURE__*/React.createElement("div", {
3335
3918
  className: classNames([styles$1.right, _defineProperty({}, styles$1.visible, !isMobile || mobileView === 'form')])
3336
- }, /*#__PURE__*/React.createElement(EditForm, {
3919
+ }, /*#__PURE__*/React.createElement(EditorForm, {
3337
3920
  key: screenId,
3338
3921
  value: story,
3339
3922
  isTheme: isTheme,
@@ -3343,6 +3926,7 @@ var Editor = function Editor(_ref) {
3343
3926
  };
3344
3927
  Editor.propTypes = propTypes$3;
3345
3928
  Editor.defaultProps = defaultProps$3;
3929
+ var Editor$1 = Editor;
3346
3930
 
3347
3931
  // eslint-disable-next-line import/prefer-default-export
3348
3932
  var routes = PropTypes.shape({
@@ -3415,12 +3999,13 @@ var SettingsForm = function SettingsForm(_ref) {
3415
3999
  };
3416
4000
  SettingsForm.propTypes = propTypes$2;
3417
4001
  SettingsForm.defaultProps = defaultProps$2;
4002
+ var SettingsForm$1 = SettingsForm;
3418
4003
 
3419
4004
  // eslint-disable-next-line import/prefer-default-export
3420
4005
 
3421
4006
  var FormsComponents = /*#__PURE__*/Object.freeze({
3422
- __proto__: null,
3423
- Settings: SettingsForm
4007
+ __proto__: null,
4008
+ Settings: SettingsForm$1
3424
4009
  });
3425
4010
 
3426
4011
  /* eslint-disable react/jsx-props-no-spreading */
@@ -3438,17 +4023,21 @@ var FormsProvider = function FormsProvider(props) {
3438
4023
  };
3439
4024
  FormsProvider.propTypes = propTypes$1;
3440
4025
  FormsProvider.defaultProps = defaultProps$1;
4026
+ var FormsProvider$1 = FormsProvider;
3441
4027
 
3442
4028
  var home = "/";
4029
+ var screen_wildcard = "/:screen/(.*)?";
3443
4030
  var screen = "/:screen";
3444
4031
  var defaultRoutes = {
3445
4032
  home: home,
4033
+ screen_wildcard: screen_wildcard,
3446
4034
  screen: screen,
3447
4035
  "screen.field": "/:screen/:field+",
3448
4036
  "screen.field.form": "/:screen/:field+/:form"
3449
4037
  };
3450
4038
 
3451
4039
  var _excluded = ["value", "memoryRouter", "routes", "basePath", "uppy", "googleApiKey", "googleMapsLibraries", "screenNamespaces"];
4040
+ var pathToRegexpParser = createPathToRegexpParser();
3452
4041
  var propTypes = {
3453
4042
  value: PropTypes.oneOfType([core.PropTypes.story, core.PropTypes.theme]),
3454
4043
  routes: routes,
@@ -3481,15 +4070,19 @@ var EditorContainer = function EditorContainer(_ref) {
3481
4070
  googleMapsLibraries = _ref.googleMapsLibraries,
3482
4071
  screenNamespaces = _ref.screenNamespaces,
3483
4072
  props = _objectWithoutProperties(_ref, _excluded);
3484
- var Router = memoryRouter ? reactRouter.MemoryRouter : reactRouterDom.BrowserRouter;
3485
4073
  var _useIntl = reactIntl.useIntl(),
3486
4074
  locale = _useIntl.locale;
3487
4075
 
3488
4076
  // const { metadata } = value || {};
3489
4077
  // const { language:finalLocale = locale } = metadata || {};
3490
-
4078
+ var _useMemoryRouter = useMemoryRouter(),
4079
+ memoryLocationHook = _useMemoryRouter.hook,
4080
+ memorySearchHook = _useMemoryRouter.searchHook;
3491
4081
  return /*#__PURE__*/React.createElement(Router, {
3492
- basename: !memoryRouter ? basePath : null
4082
+ hook: memoryRouter ? memoryLocationHook : null,
4083
+ searchHook: memoryRouter ? memorySearchHook : null,
4084
+ parser: pathToRegexpParser,
4085
+ base: !memoryRouter ? basePath : null
3493
4086
  }, /*#__PURE__*/React.createElement(contexts.UppyProvider, uppy, /*#__PURE__*/React.createElement(contexts.StoryProvider, {
3494
4087
  story: value
3495
4088
  }, /*#__PURE__*/React.createElement(screens.ScreensProvider, {
@@ -3500,7 +4093,7 @@ var EditorContainer = function EditorContainer(_ref) {
3500
4093
  }, /*#__PURE__*/React.createElement(contexts.GoogleMapsClientProvider, {
3501
4094
  locale: locale,
3502
4095
  libraries: googleMapsLibraries
3503
- }, /*#__PURE__*/React.createElement(contexts.FontsProvider, null, /*#__PURE__*/React.createElement(fields.FieldsProvider, null, /*#__PURE__*/React.createElement(FormsProvider, null, /*#__PURE__*/React.createElement(contexts.EditorProvider, null, /*#__PURE__*/React.createElement(contexts.VisitorProvider, {
4096
+ }, /*#__PURE__*/React.createElement(contexts.FontsProvider, null, /*#__PURE__*/React.createElement(fields.FieldsProvider, null, /*#__PURE__*/React.createElement(FormsProvider$1, null, /*#__PURE__*/React.createElement(contexts.EditorProvider, null, /*#__PURE__*/React.createElement(contexts.VisitorProvider, {
3504
4097
  visitor: "editor"
3505
4098
  }, /*#__PURE__*/React.createElement(contexts.ComponentsContext.Consumer, null, function (manager) {
3506
4099
  var formComponents = manager.getComponents(contexts.FORMS_NAMESPACE);
@@ -3511,16 +4104,17 @@ var EditorContainer = function EditorContainer(_ref) {
3511
4104
  routes: _objectSpread(_objectSpread({}, routes), {}, {
3512
4105
  'screen.field.form': routes['screen.field.form'].replace(/:form$/, ":form(".concat(formRegEx, ")"))
3513
4106
  })
3514
- }, /*#__PURE__*/React.createElement(Editor, Object.assign({
4107
+ }, /*#__PURE__*/React.createElement(Editor$1, Object.assign({
3515
4108
  value: value
3516
4109
  }, props)));
3517
4110
  }))))))))))));
3518
4111
  };
3519
4112
  EditorContainer.propTypes = propTypes;
3520
4113
  EditorContainer.defaultProps = defaultProps;
4114
+ var EditorContainer$1 = EditorContainer;
3521
4115
 
3522
- exports.Editor = Editor;
3523
- exports.ScreenTypes = ScreenTypes;
3524
- exports.Screens = ScreensMenu;
3525
- exports.createScreen = createScreen;
3526
- exports.default = EditorContainer;
4116
+ exports.Editor = Editor$1;
4117
+ exports.ScreenTypes = ScreenTypesMenu;
4118
+ exports.Screens = ScreensMenu$1;
4119
+ exports.createScreen = createScreen$1;
4120
+ exports.default = EditorContainer$1;