@atlaskit/editor-common 125.2.1 → 125.3.0

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 (35) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/element-browser/components/ElementBrowserLoader.js +8 -31
  3. package/dist/cjs/extensions/extension-handlers.js +17 -96
  4. package/dist/cjs/floating-toolbar/DropdownMenuExtensionItems.js +4 -25
  5. package/dist/cjs/icons/index.js +10 -33
  6. package/dist/cjs/monitoring/error.js +1 -1
  7. package/dist/cjs/quick-insert/assets/index.js +257 -888
  8. package/dist/cjs/toolbar-flag-check.js +2 -2
  9. package/dist/cjs/ui/DropList/index.js +1 -1
  10. package/dist/cjs/ui/Mention/mention-with-profilecard.js +11 -30
  11. package/dist/cjs/ui/Popup/index.js +101 -17
  12. package/dist/es2019/element-browser/components/ElementBrowserLoader.js +2 -16
  13. package/dist/es2019/extensions/extension-handlers.js +15 -70
  14. package/dist/es2019/floating-toolbar/DropdownMenuExtensionItems.js +2 -16
  15. package/dist/es2019/icons/index.js +3 -17
  16. package/dist/es2019/monitoring/error.js +1 -1
  17. package/dist/es2019/quick-insert/assets/index.js +66 -386
  18. package/dist/es2019/toolbar-flag-check.js +2 -2
  19. package/dist/es2019/ui/DropList/index.js +1 -1
  20. package/dist/es2019/ui/Mention/mention-with-profilecard.js +4 -15
  21. package/dist/es2019/ui/Popup/index.js +89 -7
  22. package/dist/esm/element-browser/components/ElementBrowserLoader.js +6 -28
  23. package/dist/esm/extensions/extension-handlers.js +17 -97
  24. package/dist/esm/floating-toolbar/DropdownMenuExtensionItems.js +4 -24
  25. package/dist/esm/icons/index.js +7 -29
  26. package/dist/esm/monitoring/error.js +1 -1
  27. package/dist/esm/quick-insert/assets/index.js +194 -764
  28. package/dist/esm/toolbar-flag-check.js +2 -2
  29. package/dist/esm/ui/DropList/index.js +1 -1
  30. package/dist/esm/ui/Mention/mention-with-profilecard.js +8 -25
  31. package/dist/esm/ui/Popup/index.js +101 -17
  32. package/dist/types/icons/index.d.ts +3 -5
  33. package/dist/types/quick-insert/assets/index.d.ts +32 -34
  34. package/dist/types/ui/Popup/index.d.ts +11 -0
  35. package/package.json +3 -4
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.areToolbarFlagsEnabled = void 0;
7
- var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure");
7
+ var _editorExperiment = require("@atlaskit/tmp-editor-statsig/editor-experiment");
8
8
  var areToolbarFlagsEnabled = exports.areToolbarFlagsEnabled = function areToolbarFlagsEnabled(isNewToolbarEnabled) {
9
- return Boolean((0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_controls', 'cohort', 'variant1') || isNewToolbarEnabled);
9
+ return Boolean((0, _editorExperiment.editorExperiment)('platform_editor_controls', 'variant1') || isNewToolbarEnabled);
10
10
  };
@@ -24,7 +24,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
24
24
  * @jsx jsx
25
25
  */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
26
26
  var packageName = "@atlaskit/editor-common";
27
- var packageVersion = "125.2.0";
27
+ var packageVersion = "125.2.1";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -8,7 +8,6 @@ exports.default = MentionWithProfileCard;
8
8
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _reactLoadable = _interopRequireDefault(require("react-loadable"));
11
- var _reactLooselyLazy = require("react-loosely-lazy");
12
11
  var _resourcedMention = _interopRequireDefault(require("@atlaskit/mention/resourced-mention"));
13
12
  var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
14
13
  var _fg = require("@atlaskit/platform-feature-flags/fg");
@@ -16,42 +15,24 @@ var _anchor = require("@atlaskit/primitives/anchor");
16
15
  var _profileCardTrigger = _interopRequireDefault(require("@atlaskit/profilecard/profile-card-trigger"));
17
16
  var _navigateToTeamsApp2 = require("@atlaskit/teams-app-config/utils/teams-app-navigation/navigate-to-teams-app");
18
17
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
19
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } // oxlint-disable-next-line @atlassian/no-restricted-imports
20
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- TODO: migrate to @atlaskit/primitives/compiled
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- TODO: migrate to @atlaskit/primitives/compiled
21
19
  // Lazy-loaded so the agent profile card chunk (and its `@atlaskit/rovo-agent-components`
22
20
  // dependency) stays off the critical path — it is only fetched when an agent mention
23
21
  // (`userType === 'APP'`) actually renders, never for person mentions.
24
- var loadAgentProfileCardTrigger = function loadAgentProfileCardTrigger() {
25
- return Promise.resolve().then(function () {
26
- return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_profilecard/agent-profile-card-trigger" */
27
- '@atlaskit/profilecard/agent-profile-card-trigger'));
28
- }).then(function (mod) {
29
- return mod.AgentProfileCardTrigger;
30
- });
31
- };
32
- var AgentProfileCardTriggerLazy = (0, _reactLooselyLazy.lazy)(function () {
33
- return Promise.resolve().then(function () {
34
- return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_profilecard/agent-profile-card-trigger" */
35
- '@atlaskit/profilecard/agent-profile-card-trigger'));
36
- }).then(function (mod) {
37
- return mod.AgentProfileCardTrigger;
38
- });
39
- });
40
- AgentProfileCardTriggerLazy.displayName = 'lazy(AgentProfileCardTrigger)';
41
- var AgentProfileCardTriggerLoadable = (0, _reactLoadable.default)({
42
- loader: loadAgentProfileCardTrigger,
22
+ // Uses react-loadable to match editor-common's code-splitting factory (see src/icons/index.ts).
23
+ var AgentProfileCardTrigger = (0, _reactLoadable.default)({
24
+ loader: function loader() {
25
+ return Promise.resolve().then(function () {
26
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_profilecard/agent-profile-card-trigger" */
27
+ '@atlaskit/profilecard/agent-profile-card-trigger'));
28
+ }).then(function (mod) {
29
+ return mod.AgentProfileCardTrigger;
30
+ });
31
+ },
43
32
  loading: function loading() {
44
33
  return null;
45
34
  }
46
35
  });
47
- var AgentProfileCardTrigger = function AgentProfileCardTrigger(props) {
48
- return (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_loosely_lazy_migration') ? /*#__PURE__*/_react.default.createElement(_reactLooselyLazy.LazySuspense, {
49
- fallback: null
50
- }, /*#__PURE__*/_react.default.createElement(AgentProfileCardTriggerLazy, props)) :
51
- /*#__PURE__*/
52
- // eslint-disable-next-line react/jsx-props-no-spreading
53
- _react.default.createElement(AgentProfileCardTriggerLoadable, props);
54
- };
55
36
 
56
37
  // Ignored via go/ees005
57
38
  // eslint-disable-next-line require-unicode-regexp
@@ -17,6 +17,7 @@ var _bindEventListener = require("bind-event-listener");
17
17
  var _focusTrap = _interopRequireDefault(require("focus-trap"));
18
18
  var _rafSchd = _interopRequireDefault(require("raf-schd"));
19
19
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
20
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
20
21
  var _utils = require("./utils");
21
22
  var _validatePosition = require("./validatePosition");
22
23
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -36,10 +37,45 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
36
37
  _this = _callSuper(this, Popup, [].concat(args));
37
38
  (0, _defineProperty2.default)(_this, "rafIds", new Set());
38
39
  (0, _defineProperty2.default)(_this, "state", {
40
+ targetVisible: true,
39
41
  validPosition: true
40
42
  });
41
43
  (0, _defineProperty2.default)(_this, "popupRef", /*#__PURE__*/_react.default.createRef());
42
44
  (0, _defineProperty2.default)(_this, "placement", ['', '']);
45
+ (0, _defineProperty2.default)(_this, "setTargetVisibility", function (targetVisible) {
46
+ if (targetVisible !== _this.state.targetVisible) {
47
+ if (!targetVisible) {
48
+ var _this$focusTrap;
49
+ // Let consumers preserve focus before the popup becomes hidden.
50
+ _this.reportTargetVisibility(targetVisible);
51
+ (_this$focusTrap = _this.focusTrap) === null || _this$focusTrap === void 0 || _this$focusTrap.pause();
52
+ _this.setState({
53
+ targetVisible: targetVisible
54
+ });
55
+ return;
56
+ }
57
+
58
+ // Reveal the popup before consumers restore focus to its contents.
59
+ _this.setState({
60
+ targetVisible: targetVisible
61
+ }, function () {
62
+ if (_this.props.focusTrap) {
63
+ var _this$focusTrap2;
64
+ (_this$focusTrap2 = _this.focusTrap) === null || _this$focusTrap2 === void 0 || _this$focusTrap2.unpause();
65
+ }
66
+ _this.reportTargetVisibility(targetVisible);
67
+ });
68
+ return;
69
+ }
70
+ _this.reportTargetVisibility(targetVisible);
71
+ });
72
+ (0, _defineProperty2.default)(_this, "reportTargetVisibility", function (targetVisible) {
73
+ if (targetVisible !== _this.reportedTargetVisibility) {
74
+ var _this$props$onTargetV, _this$props;
75
+ _this.reportedTargetVisibility = targetVisible;
76
+ (_this$props$onTargetV = (_this$props = _this.props).onTargetVisibilityChanged) === null || _this$props$onTargetV === void 0 || _this$props$onTargetV.call(_this$props, targetVisible);
77
+ }
78
+ });
43
79
  (0, _defineProperty2.default)(_this, "handleRef", function (popup) {
44
80
  if (!popup) {
45
81
  return;
@@ -162,6 +198,41 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
162
198
  });
163
199
  }
164
200
  }
201
+ }, {
202
+ key: "initTargetVisibilityObserver",
203
+ value: function initTargetVisibilityObserver() {
204
+ var _this$targetVisibilit,
205
+ _observedTarget$owner,
206
+ _this3 = this;
207
+ var _this$props2 = this.props,
208
+ hideWhenTargetOutOfView = _this$props2.hideWhenTargetOutOfView,
209
+ target = _this$props2.target,
210
+ visibilityTarget = _this$props2.visibilityTarget;
211
+ var observedTarget = visibilityTarget !== null && visibilityTarget !== void 0 ? visibilityTarget : target;
212
+ (_this$targetVisibilit = this.targetVisibilityObserver) === null || _this$targetVisibilit === void 0 || _this$targetVisibilit.disconnect();
213
+ this.targetVisibilityObserver = undefined;
214
+ if (!hideWhenTargetOutOfView || !(0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_popup_target_visibility')) {
215
+ if (!this.state.targetVisible) {
216
+ this.setTargetVisibility(true);
217
+ }
218
+ return;
219
+ }
220
+ this.reportedTargetVisibility = undefined;
221
+ var IntersectionObserverConstructor = observedTarget === null || observedTarget === void 0 || (_observedTarget$owner = observedTarget.ownerDocument.defaultView) === null || _observedTarget$owner === void 0 ? void 0 : _observedTarget$owner.IntersectionObserver;
222
+ if (!IntersectionObserverConstructor || !observedTarget) {
223
+ this.setTargetVisibility(true);
224
+ return;
225
+ }
226
+ this.targetVisibilityObserver = new IntersectionObserverConstructor(function (entries) {
227
+ var _entry$isIntersecting;
228
+ var entry = entries[entries.length - 1];
229
+ _this3.setTargetVisibility((_entry$isIntersecting = entry === null || entry === void 0 ? void 0 : entry.isIntersecting) !== null && _entry$isIntersecting !== void 0 ? _entry$isIntersecting : true);
230
+ }, {
231
+ root: null
232
+ });
233
+ this.targetVisibilityObserver.observe(observedTarget);
234
+ this.setTargetVisibility(true);
235
+ }
165
236
  }, {
166
237
  key: "cannotSetPopup",
167
238
  value: function cannotSetPopup(popup, target, overflowScrollParent) {
@@ -229,9 +300,9 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
229
300
  * Deactivates the focus trap if it exists
230
301
  */
231
302
  function destroyFocusTrap() {
232
- var _this$focusTrap;
303
+ var _this$focusTrap3;
233
304
  this.initFocusTrap.cancel();
234
- (_this$focusTrap = this.focusTrap) === null || _this$focusTrap === void 0 || _this$focusTrap.deactivate();
305
+ (_this$focusTrap3 = this.focusTrap) === null || _this$focusTrap3 === void 0 || _this$focusTrap3.deactivate();
235
306
  }
236
307
 
237
308
  /**
@@ -243,8 +314,8 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
243
314
  if (prevProps.focusTrap !== this.props.focusTrap) {
244
315
  // If currently set to disable, then pause the trap if it exists
245
316
  if (!this.props.focusTrap) {
246
- var _this$focusTrap2;
247
- return (_this$focusTrap2 = this.focusTrap) === null || _this$focusTrap2 === void 0 ? void 0 : _this$focusTrap2.pause();
317
+ var _this$focusTrap4;
318
+ return (_this$focusTrap4 = this.focusTrap) === null || _this$focusTrap4 === void 0 ? void 0 : _this$focusTrap4.pause();
248
319
  }
249
320
 
250
321
  // If set to enabled and trap already exists, unpause
@@ -265,10 +336,10 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
265
336
  key: "initScrollElement",
266
337
  value: function initScrollElement() {
267
338
  var _this$unbindScroll;
268
- var _this$props = this.props,
269
- stick = _this$props.stick,
270
- target = _this$props.target,
271
- scrollableElement = _this$props.scrollableElement;
339
+ var _this$props3 = this.props,
340
+ stick = _this$props3.stick,
341
+ target = _this$props3.target,
342
+ scrollableElement = _this$props3.scrollableElement;
272
343
  (_this$unbindScroll = this.unbindScroll) === null || _this$unbindScroll === void 0 || _this$unbindScroll.call(this);
273
344
  if (this.scrollElement && this.resizeObserver) {
274
345
  this.resizeObserver.unobserve(this.scrollElement);
@@ -294,6 +365,11 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
294
365
  if (prevProps.scrollableElement !== this.props.scrollableElement) {
295
366
  this.initScrollElement();
296
367
  }
368
+ // Reconfigure while enabled, or once after disabling to clean up the existing observer.
369
+ // A different target must be observed again.
370
+ if ((prevProps.hideWhenTargetOutOfView || this.props.hideWhenTargetOutOfView) && (prevProps.hideWhenTargetOutOfView !== this.props.hideWhenTargetOutOfView || prevProps.target !== this.props.target || prevProps.visibilityTarget !== this.props.visibilityTarget)) {
371
+ this.initTargetVisibilityObserver();
372
+ }
297
373
  if (this.props !== prevProps) {
298
374
  this.scheduledUpdatePosition(prevProps);
299
375
  }
@@ -305,14 +381,18 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
305
381
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
306
382
  window.addEventListener('resize', this.onResize);
307
383
  this.initScrollElement();
384
+ if (this.props.hideWhenTargetOutOfView) {
385
+ this.initTargetVisibilityObserver();
386
+ }
308
387
  }
309
388
  }, {
310
389
  key: "componentWillUnmount",
311
390
  value: function componentWillUnmount() {
312
- var _this$unbindScroll2, _this$resizeObserver3;
391
+ var _this$targetVisibilit2, _this$unbindScroll2, _this$resizeObserver3;
313
392
  // Ignored via go/ees005
314
393
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
315
394
  window.removeEventListener('resize', this.onResize);
395
+ (_this$targetVisibilit2 = this.targetVisibilityObserver) === null || _this$targetVisibilit2 === void 0 || _this$targetVisibilit2.disconnect();
316
396
  (_this$unbindScroll2 = this.unbindScroll) === null || _this$unbindScroll2 === void 0 || _this$unbindScroll2.call(this);
317
397
  if (this.scrollElement) {
318
398
  // Ignored via go/ees005
@@ -331,8 +411,10 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
331
411
  key: "renderPopup",
332
412
  value: function renderPopup() {
333
413
  var _this$props$ariaLabel,
334
- _this3 = this;
335
- var position = this.state.position;
414
+ _this4 = this;
415
+ var _this$state = this.state,
416
+ position = _this$state.position,
417
+ targetVisible = _this$state.targetVisible;
336
418
  var shouldRenderPopup = this.props.shouldRenderPopup;
337
419
  if (shouldRenderPopup && !shouldRenderPopup(position || {})) {
338
420
  return null;
@@ -349,18 +431,20 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
349
431
  // use role = dialog as default role, as dialog role itself is not a parent role that requires specific children to function as some other ARIA roles(menu) do
350
432
  // if set default role to menu, tons of integration tests will fail as many of our popup usages do not have children that satisfy menu role requirements
351
433
  if (ariaLabel) {
352
- return _this3.props.role || 'dialog';
434
+ return _this4.props.role || 'dialog';
353
435
  }
354
436
  return undefined;
355
437
  };
356
438
  return /*#__PURE__*/_react.default.createElement("div", {
357
439
  ref: this.handleRef,
358
- style: _objectSpread(_objectSpread({
440
+ style: _objectSpread(_objectSpread(_objectSpread({
359
441
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
360
442
  position: 'absolute',
361
443
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766
362
444
  zIndex: this.props.zIndex || _editorSharedStyles.akEditorFloatingPanelZIndex
363
- }, position), this.props.style),
445
+ }, position), this.props.style), this.props.hideWhenTargetOutOfView && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_popup_target_visibility') && !targetVisible && {
446
+ visibility: 'hidden'
447
+ }),
364
448
  role: getRole(),
365
449
  "aria-label": ariaLabel,
366
450
  "data-testid": "popup-wrapper"
@@ -372,9 +456,9 @@ var Popup = exports.default = /*#__PURE__*/function (_React$Component) {
372
456
  }, {
373
457
  key: "render",
374
458
  value: function render() {
375
- var _this$props2 = this.props,
376
- target = _this$props2.target,
377
- mountTo = _this$props2.mountTo;
459
+ var _this$props4 = this.props,
460
+ target = _this$props4.target,
461
+ mountTo = _this$props4.mountTo;
378
462
  var validPosition = this.state.validPosition;
379
463
  if (!target || !validPosition) {
380
464
  return null;
@@ -7,11 +7,6 @@ import React from 'react';
7
7
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
8
8
  import { css, jsx } from '@emotion/react';
9
9
  import Loadable from 'react-loadable';
10
- // oxlint-disable-next-line @atlassian/no-restricted-imports
11
- import { lazy, LazySuspense } from 'react-loosely-lazy';
12
-
13
- // oxlint-disable-next-line @atlassian/no-restricted-imports
14
- import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
15
10
  import Spinner from '@atlaskit/spinner/spinner';
16
11
  const spinnerContainer = css({
17
12
  display: 'flex',
@@ -20,11 +15,8 @@ const spinnerContainer = css({
20
15
  height: '100%',
21
16
  width: '100%'
22
17
  });
23
- const loadElementBrowser = () => import( /* webpackChunkName: "@atlaskit-internal_editor-element-browser" */'../ElementBrowser').then(module => module.default);
24
- const ElementBrowserLazy = lazy(() => import( /* webpackChunkName: "@atlaskit-internal_editor-element-browser" */'../ElementBrowser').then(module => module.default));
25
- ElementBrowserLazy.displayName = 'lazy(ElementBrowser)';
26
- const ElementBrowserLoadable = Loadable({
27
- loader: loadElementBrowser,
18
+ const ElementBrowserLoader = Loadable({
19
+ loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-element-browser" */'../ElementBrowser').then(module => module.default),
28
20
  loading: () => jsx("div", {
29
21
  css: spinnerContainer
30
22
  }, jsx(Spinner, {
@@ -32,10 +24,4 @@ const ElementBrowserLoadable = Loadable({
32
24
  interactionName: "element-browser-spinner"
33
25
  }))
34
26
  });
35
- const ElementBrowserLoader = props => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? jsx(LazySuspense, {
36
- fallback: null
37
- }, jsx(ElementBrowserLazy, props)) :
38
- // eslint-disable-next-line react/jsx-props-no-spreading
39
- jsx(ElementBrowserLoadable, props);
40
- ElementBrowserLoader.preload = () => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? ElementBrowserLazy.preload() : ElementBrowserLoadable.preload();
41
27
  export default ElementBrowserLoader;
@@ -1,11 +1,6 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
1
  import React from 'react';
4
2
  import { useIntl } from 'react-intl';
5
3
  import Loadable from 'react-loadable';
6
- // oxlint-disable-next-line @atlassian/no-restricted-imports
7
- import { lazy, LazySuspense } from 'react-loosely-lazy';
8
- import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
9
4
  import { getExtensionKeyAndNodeKey, resolveImport } from './manifest-helpers';
10
5
  import { messages } from './messages';
11
6
  import { resolveImportSync } from './resolveImportSync';
@@ -64,38 +59,6 @@ function isUnknownConfluenceMacroWithBody(extensionNode) {
64
59
  var _extensionNode$parame, _extensionNode$parame2, _extensionNode$parame3;
65
60
  return extensionNode !== null && extensionNode.type === 'extension' && extensionNode.extensionType === 'com.atlassian.confluence.macro.core' && !!((_extensionNode$parame = extensionNode.parameters) !== null && _extensionNode$parame !== void 0 && (_extensionNode$parame2 = _extensionNode$parame.macroParams) !== null && _extensionNode$parame2 !== void 0 && (_extensionNode$parame3 = _extensionNode$parame2.__bodyContent) !== null && _extensionNode$parame3 !== void 0 && _extensionNode$parame3.value);
66
61
  }
67
- // eslint-disable-next-line @repo/internal/react/no-class-components -- error boundaries require a class component
68
- class ExtensionRendererErrorBoundary extends React.Component {
69
- constructor(...args) {
70
- super(...args);
71
- _defineProperty(this, "state", {});
72
- }
73
- static getDerivedStateFromError(error) {
74
- return {
75
- error
76
- };
77
- }
78
- componentDidCatch(error) {
79
- // eslint-disable-next-line no-console
80
- console.error('Error rendering extension', error);
81
- }
82
- render() {
83
- return this.state.error ? renderExtensionLoadingError(this.state.error, this.props.fallbackProps) : this.props.children;
84
- }
85
- }
86
- const noop = () => {};
87
- function renderExtensionLoadingError(error, props) {
88
- // Needed because the old react-loadable (older code-splitting library) error handling behaviour might be relied on by extensions.
89
- // https://unpkg.com/react-loadable@5.2.2/lib/index.js
90
- return /*#__PURE__*/React.createElement(ExtensionLoading, _extends({
91
- isLoading: false,
92
- pastDelay: true,
93
- timedOut: false,
94
- error: error,
95
- retry: noop
96
- // eslint-disable-next-line react/jsx-props-no-spreading
97
- }, props));
98
- }
99
62
  function ExtensionLoading(props) {
100
63
  const intl = useIntl();
101
64
  const extensionNode = props.node;
@@ -118,45 +81,27 @@ function ExtensionLoading(props) {
118
81
 
119
82
  // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
120
83
  export function getNodeRenderer(extensionProvider, extensionType, extensionKey) {
121
- const loadNodeRenderer = () => {
122
- var _renderSync, _ref;
123
- const maybePromise = getExtensionModuleNodeMaybePreloaded(extensionProvider, extensionType, extensionKey);
124
- if (maybePromise instanceof Promise) {
125
- return maybePromise.then(node => resolveImport(node.render()));
126
- }
127
- const preloaded = maybePromise === null || maybePromise === void 0 ? void 0 : (_renderSync = (_ref = maybePromise).renderSync) === null || _renderSync === void 0 ? void 0 : _renderSync.call(_ref);
128
- // Only product implemented preloading will return sync result
129
- // However the out-of-box won't handle this. Confluence uses a custom implementation
130
- return preloaded ?
131
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
- resolveImportSync(preloaded) : resolveImport(maybePromise.render());
133
- };
134
- const LazyNodeRenderer = lazy(() => loadNodeRenderer());
135
- LazyNodeRenderer.displayName = 'lazy(NodeRenderer)';
136
- // Ignored via go/ees005
137
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
138
- const LoadableNodeRenderer = Loadable({
139
- loader: loadNodeRenderer,
84
+ return Loadable({
85
+ loader: () => {
86
+ const maybePromise = getExtensionModuleNodeMaybePreloaded(extensionProvider, extensionType, extensionKey);
87
+ if (maybePromise instanceof Promise) {
88
+ return maybePromise.then(node => resolveImport(node.render()));
89
+ } else {
90
+ var _renderSync, _ref;
91
+ const preloaded = maybePromise === null || maybePromise === void 0 ? void 0 : (_renderSync = (_ref = maybePromise).renderSync) === null || _renderSync === void 0 ? void 0 : _renderSync.call(_ref);
92
+ // Only product implemented preloading will return sync result
93
+ // However the out-of-box won't handle this. Confluence uses a custom implementation
94
+ return preloaded ?
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ resolveImportSync(preloaded) : resolveImport(maybePromise.render());
97
+ }
98
+ },
140
99
  // react-loadable passes all props from <NodeRenderer> to the loading component at runtime,
141
100
  // but its TypeScript types only expect LoadingComponentProps. We cast here because
142
101
  // ExtensionLoading accepts additional props (node, showUnknownMacroPlaceholder) that
143
102
  // react-loadable will pass through but doesn't know about in its type definitions.
144
103
  loading: ExtensionLoading
145
104
  });
146
- const NodeRenderer = props => {
147
- var _props$loadingFallbac;
148
- if (!isExperimentEnabled('platform_editor_loosely_lazy_migration')) {
149
- // eslint-disable-next-line react/jsx-props-no-spreading
150
- return /*#__PURE__*/React.createElement(LoadableNodeRenderer, props);
151
- }
152
- return /*#__PURE__*/React.createElement(ExtensionRendererErrorBoundary, {
153
- fallbackProps: props
154
- }, /*#__PURE__*/React.createElement(LazySuspense, {
155
- fallback: (_props$loadingFallbac = props.loadingFallback) !== null && _props$loadingFallbac !== void 0 ? _props$loadingFallbac : null
156
- }, /*#__PURE__*/React.createElement(LazyNodeRenderer, props)));
157
- };
158
- NodeRenderer.preload = () => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? LazyNodeRenderer.preload() : LoadableNodeRenderer.preload();
159
- return NodeRenderer;
160
105
  }
161
106
  // eslint-disable-next-line @atlaskit/editor/no-re-export
162
107
  export { getExtensionManifest } from './getExtensionManifest';
@@ -1,8 +1,5 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import Loadable from 'react-loadable';
3
- // oxlint-disable-next-line @atlassian/no-restricted-imports
4
- import { lazy, LazySuspense } from 'react-loosely-lazy';
5
- import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
6
3
  import { getContextualToolbarItemsFromModule } from '../extensions';
7
4
  import { nodeToJSON } from '../utils';
8
5
  import { DropdownMenuItem } from './DropdownMenuItem';
@@ -65,21 +62,10 @@ const DropdownMenuExtensionItem = ({
65
62
  // Use ref to keep icon component stable across renders
66
63
  const iconRef = useRef(null);
67
64
  if (!iconRef.current && item.icon) {
68
- const loadIcon = () => resolveExtensionIcon(item.icon);
69
- const IconLazy = lazy(() => resolveExtensionIcon(item.icon));
70
- IconLazy.displayName = 'lazy(ExtensionIcon)';
71
- const IconLoadable = Loadable({
72
- loader: loadIcon,
65
+ iconRef.current = Loadable({
66
+ loader: () => resolveExtensionIcon(item.icon),
73
67
  loading: noop
74
68
  });
75
- const Icon = props => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? /*#__PURE__*/React.createElement(LazySuspense, {
76
- fallback: null
77
- }, /*#__PURE__*/React.createElement(IconLazy, props)) :
78
- /*#__PURE__*/
79
- // eslint-disable-next-line react/jsx-props-no-spreading -- pass icon props to the legacy component
80
- React.createElement(IconLoadable, props);
81
- Icon.preload = () => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? IconLazy.preload() : IconLoadable.preload();
82
- iconRef.current = Icon;
83
69
  }
84
70
  const dropdownItem = convertExtensionToDropdownMenuItem({
85
71
  item,
@@ -1,11 +1,7 @@
1
1
  // Disable no-re-export rule for entry point files
2
2
  /* eslint-disable @atlaskit/editor/no-re-export */
3
3
 
4
- import React from 'react';
5
4
  import Loadable from 'react-loadable';
6
- // oxlint-disable-next-line @atlassian/no-restricted-imports
7
- import { lazy, LazySuspense } from 'react-loosely-lazy';
8
- import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
9
5
  export { PanelInfoIcon } from './shared/PanelInfoIcon';
10
6
  export { PanelWarningIcon } from './shared/PanelWarningIcon';
11
7
  export { PanelErrorIcon } from './shared/PanelErrorIcon';
@@ -14,17 +10,7 @@ export { PanelNoteIcon } from './shared/PanelNoteIcon';
14
10
  export { BorderIcon } from './shared/BorderIcon';
15
11
  export { SteppedRainbowIconDecoration, rainbow, disabledRainbow } from './shared/SteppedRainbowIconDecoration';
16
12
  export { DynamicStrokeIconDecoration } from './shared/DynamicStrokeIconDecoration';
17
- const loadIconTable = () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-table" */'../icons/shared/table').then(module => module.default);
18
- const IconTableLazy = lazy(() => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-table" */'../icons/shared/table').then(module => module.default));
19
- IconTableLazy.displayName = 'lazy(IconTable)';
20
- const IconTableLoadable = Loadable({
21
- loader: loadIconTable,
13
+ export const IconTable = Loadable({
14
+ loader: () => import( /* webpackChunkName: "@atlaskit-internal_editor-icon-table" */'../icons/shared/table').then(module => module.default),
22
15
  loading: () => null
23
- });
24
- export const IconTable = props => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? /*#__PURE__*/React.createElement(LazySuspense, {
25
- fallback: null
26
- }, /*#__PURE__*/React.createElement(IconTableLazy, props)) :
27
- /*#__PURE__*/
28
- // eslint-disable-next-line react/jsx-props-no-spreading -- pass icon props to the legacy component
29
- React.createElement(IconTableLoadable, props);
30
- IconTable.preload = () => isExperimentEnabled('platform_editor_loosely_lazy_migration') ? IconTableLazy.preload() : IconTableLoadable.preload();
16
+ });
@@ -13,7 +13,7 @@ const NETWORK_FAILURE_REGEX = /^network failure/i;
13
13
  const RESIZE_OBSERVER_LOOP_REGEX = /ResizeObserver loop completed with undelivered notifications/;
14
14
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
15
15
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
16
- const packageVersion = "125.2.0";
16
+ const packageVersion = "125.2.1";
17
17
  const sanitiseSentryEvents = (data, _hint) => {
18
18
  // Remove URL as it has UGC
19
19
  // Ignored via go/ees007