@atlaskit/editor-common 116.24.3 → 116.24.5

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 (38) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionLabel.js +11 -17
  3. package/dist/cjs/extensibility/Extension/Lozenge/LozengeComponent.js +6 -2
  4. package/dist/cjs/extensibility/Extension/Lozenge/index.js +4 -2
  5. package/dist/cjs/extensibility/Extension.js +2 -0
  6. package/dist/cjs/extensibility/ExtensionComponent.js +6 -2
  7. package/dist/cjs/extensibility/MultiBodiedExtension/index.js +75 -9
  8. package/dist/cjs/extensibility/extensionNodeView.js +3 -1
  9. package/dist/cjs/extensions/extension-handlers.js +3 -0
  10. package/dist/cjs/monitoring/error.js +1 -1
  11. package/dist/cjs/ui/DropList/index.js +1 -1
  12. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionLabel.js +10 -16
  13. package/dist/es2019/extensibility/Extension/Lozenge/LozengeComponent.js +6 -2
  14. package/dist/es2019/extensibility/Extension/Lozenge/index.js +4 -2
  15. package/dist/es2019/extensibility/Extension.js +2 -0
  16. package/dist/es2019/extensibility/ExtensionComponent.js +7 -3
  17. package/dist/es2019/extensibility/MultiBodiedExtension/index.js +66 -5
  18. package/dist/es2019/extensibility/extensionNodeView.js +3 -1
  19. package/dist/es2019/extensions/extension-handlers.js +3 -0
  20. package/dist/es2019/monitoring/error.js +1 -1
  21. package/dist/es2019/ui/DropList/index.js +1 -1
  22. package/dist/esm/extensibility/Extension/Lozenge/ExtensionLabel.js +10 -16
  23. package/dist/esm/extensibility/Extension/Lozenge/LozengeComponent.js +6 -2
  24. package/dist/esm/extensibility/Extension/Lozenge/index.js +4 -2
  25. package/dist/esm/extensibility/Extension.js +2 -0
  26. package/dist/esm/extensibility/ExtensionComponent.js +6 -2
  27. package/dist/esm/extensibility/MultiBodiedExtension/index.js +76 -10
  28. package/dist/esm/extensibility/extensionNodeView.js +3 -1
  29. package/dist/esm/extensions/extension-handlers.js +3 -0
  30. package/dist/esm/monitoring/error.js +1 -1
  31. package/dist/esm/ui/DropList/index.js +1 -1
  32. package/dist/types/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +3 -2
  33. package/dist/types/extensibility/Extension/Lozenge/LozengeComponent.d.ts +2 -1
  34. package/dist/types/extensibility/Extension/Lozenge/index.d.ts +1 -0
  35. package/dist/types/extensibility/Extension.d.ts +1 -0
  36. package/dist/types/extensibility/ExtensionComponent.d.ts +1 -0
  37. package/dist/types/extensibility/extensionNodeView.d.ts +3 -1
  38. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 116.24.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`07226ab3fad50`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/07226ab3fad50) -
8
+ [ux] Reserve native embed first-paint layout
9
+
10
+ ## 116.24.4
11
+
12
+ ### Patch Changes
13
+
14
+ - [`f813190f05f57`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f813190f05f57) -
15
+ Update multi bodied extension chrome to match extension presentation.
16
+ - Updated dependencies
17
+
3
18
  ## 116.24.3
4
19
 
5
20
  ### Patch Changes
@@ -4,13 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getShouldShowBodiedMacroLabel = exports.ExtensionLabel = void 0;
7
+ exports.ExtensionLabel = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _react = require("react");
10
10
  var _react2 = require("@emotion/react");
11
11
  var _classnames = _interopRequireDefault(require("classnames"));
12
12
  var _reactIntl = require("react-intl");
13
13
  var _customize = _interopRequireDefault(require("@atlaskit/icon/core/customize"));
14
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
15
  var _primitives = require("@atlaskit/primitives");
15
16
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
16
17
  var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
@@ -117,32 +118,25 @@ var i18n = (0, _reactIntl.defineMessages)({
117
118
  description: 'Text in tooltip that tells user they can configure the specific macro.'
118
119
  }
119
120
  });
120
- var getShouldShowBodiedMacroLabel = exports.getShouldShowBodiedMacroLabel = function getShouldShowBodiedMacroLabel(isBodiedMacro, isNodeHovered, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView, showUpdatedLivePages1PBodiedExtensionUI) {
121
- // Bodied macros show the label by default except for the new live pages 1P bodied macro experience where we only show it on hover
122
- if (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI) {
123
- return isNodeHovered;
124
- }
125
- if (!showLivePagesBodiedMacrosRendererView) {
126
- return true;
127
- } // Keep showing labels as usual for default experience for bodied macros
128
- return !!(isNodeHovered && !showBodiedExtensionRendererView); // For the new live pages bodied macro experience, we only show the label on hover in the "edit" view
129
- };
130
121
  // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
131
122
  var ExtensionLabel = exports.ExtensionLabel = function ExtensionLabel(_ref) {
132
123
  var text = _ref.text,
133
124
  extensionName = _ref.extensionName,
134
125
  customContainerStyles = _ref.customContainerStyles,
135
126
  isNodeNested = _ref.isNodeNested,
127
+ isNodeSelected = _ref.isNodeSelected,
136
128
  setIsNodeHovered = _ref.setIsNodeHovered,
137
129
  isBodiedMacro = _ref.isBodiedMacro,
138
130
  showUpdatedLivePages1PBodiedExtensionUI = _ref.showUpdatedLivePages1PBodiedExtensionUI,
139
131
  showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
140
132
  showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
141
- _pluginInjectionApi = _ref.pluginInjectionApi;
133
+ _pluginInjectionApi = _ref.pluginInjectionApi,
134
+ isMultiBodiedMacro = _ref.isMultiBodiedMacro;
142
135
  var isInlineExtension = extensionName === 'inlineExtension';
143
136
  var showDefaultBodiedStyles = isBodiedMacro;
137
+ var shouldUseMultiBodiedMacroPresentation = isMultiBodiedMacro && (0, _platformFeatureFlags.fg)('confluence_frontend_native_tabs_extension');
144
138
  var containerClassNames = (0, _classnames.default)({
145
- bodied: isBodiedMacro
139
+ bodied: isBodiedMacro && !shouldUseMultiBodiedMacroPresentation
146
140
  });
147
141
  var labelClassNames = (0, _classnames.default)('extension-label', {
148
142
  nested: isNodeNested,
@@ -153,8 +147,8 @@ var ExtensionLabel = exports.ExtensionLabel = function ExtensionLabel(_ref) {
153
147
  'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView,
154
148
  'always-hide-label': isBodiedMacro && showBodiedExtensionRendererView,
155
149
  // Need this separate class since we don't ever want to show the label during view mode
156
- 'remove-left-margin': !isBodiedMacro && !isInlineExtension && !isNodeNested,
157
- 'remove-nested-left-margin': isNodeNested && !isBodiedMacro && !isInlineExtension
150
+ 'remove-left-margin': (!isBodiedMacro || shouldUseMultiBodiedMacroPresentation) && !isInlineExtension && !isNodeNested,
151
+ 'remove-nested-left-margin': isNodeNested && (!isBodiedMacro || shouldUseMultiBodiedMacroPresentation) && !isInlineExtension
158
152
  });
159
153
  var iconClassNames = (0, _classnames.default)({
160
154
  'extension-icon': true
@@ -206,12 +200,12 @@ var ExtensionLabel = exports.ExtensionLabel = function ExtensionLabel(_ref) {
206
200
  // Ignored via go/ees005
207
201
  // eslint-disable-next-line react/jsx-props-no-spreading
208
202
  }, tooltipProps, {
209
- css: [labelStyles, !showLivePagesBodiedMacrosRendererView && showLabelStyles, (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI) && hideLabelStyles]
203
+ css: [labelStyles, !showLivePagesBodiedMacrosRendererView && showLabelStyles, (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI || shouldUseMultiBodiedMacroPresentation && !isNodeSelected) && hideLabelStyles]
210
204
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
211
205
  ,
212
206
  className: labelClassNames
213
207
  }), text, (0, _react2.jsx)("span", {
214
- css: [iconStyles, isBodiedMacro && bodiedMacroIconStyles]
208
+ css: [iconStyles, isBodiedMacro && !shouldUseMultiBodiedMacroPresentation && bodiedMacroIconStyles]
215
209
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
216
210
  ,
217
211
  className: iconClassNames,
@@ -32,13 +32,15 @@ var LozengeComponent = exports.LozengeComponent = function LozengeComponent(_ref
32
32
  customContainerStyles = _ref.customContainerStyles,
33
33
  isNodeHovered = _ref.isNodeHovered,
34
34
  isNodeNested = _ref.isNodeNested,
35
+ isNodeSelected = _ref.isNodeSelected,
35
36
  setIsNodeHovered = _ref.setIsNodeHovered,
36
37
  isBodiedMacro = _ref.isBodiedMacro,
37
38
  showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
38
39
  showUpdatedLivePages1PBodiedExtensionUI = _ref.showUpdatedLivePages1PBodiedExtensionUI,
39
40
  showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
40
41
  setShowBodiedExtensionRendererView = _ref.setShowBodiedExtensionRendererView,
41
- pluginInjectionApi = _ref.pluginInjectionApi;
42
+ pluginInjectionApi = _ref.pluginInjectionApi,
43
+ isMultiBodiedMacro = _ref.isMultiBodiedMacro;
42
44
  var capitalizedTitle = capitalizeFirstLetter(title);
43
45
  if (showMacroInteractionDesignUpdates) {
44
46
  return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_ExtensionLabel.ExtensionLabel, {
@@ -46,13 +48,15 @@ var LozengeComponent = exports.LozengeComponent = function LozengeComponent(_ref
46
48
  extensionName: extensionName,
47
49
  isNodeHovered: isNodeHovered,
48
50
  isNodeNested: isNodeNested,
51
+ isNodeSelected: isNodeSelected,
49
52
  customContainerStyles: customContainerStyles,
50
53
  setIsNodeHovered: setIsNodeHovered,
51
54
  isBodiedMacro: isBodiedMacro,
52
55
  showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
53
56
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
54
57
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
55
- pluginInjectionApi: pluginInjectionApi
58
+ pluginInjectionApi: pluginInjectionApi,
59
+ isMultiBodiedMacro: isMultiBodiedMacro
56
60
  }), showLivePagesBodiedMacrosRendererView && isBodiedMacro && (0, _react2.jsx)(_EditToggle.EditToggle, {
57
61
  isNodeHovered: isNodeHovered,
58
62
  setIsNodeHovered: setIsNodeHovered,
@@ -59,7 +59,8 @@ var ExtensionLozenge = exports.default = /*#__PURE__*/function (_Component) {
59
59
  showUpdatedLivePages1PBodiedExtensionUI = _this$props.showUpdatedLivePages1PBodiedExtensionUI,
60
60
  showBodiedExtensionRendererView = _this$props.showBodiedExtensionRendererView,
61
61
  setShowBodiedExtensionRendererView = _this$props.setShowBodiedExtensionRendererView,
62
- pluginInjectionApi = _this$props.pluginInjectionApi;
62
+ pluginInjectionApi = _this$props.pluginInjectionApi,
63
+ isMultiBodiedMacro = _this$props.isMultiBodiedMacro;
63
64
  var _this$props$node$attr = _this.props.node.attrs,
64
65
  parameters = _this$props$node$attr.parameters,
65
66
  extensionKey = _this$props$node$attr.extensionKey;
@@ -83,7 +84,8 @@ var ExtensionLozenge = exports.default = /*#__PURE__*/function (_Component) {
83
84
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
84
85
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
85
86
  setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView,
86
- pluginInjectionApi: pluginInjectionApi
87
+ pluginInjectionApi: pluginInjectionApi,
88
+ isMultiBodiedMacro: isMultiBodiedMacro
87
89
  });
88
90
  });
89
91
  return _this;
@@ -34,6 +34,7 @@ var Extension = exports.Extension = /*#__PURE__*/function (_Component) {
34
34
  editorView = _this$props.editorView,
35
35
  handleContentDOMRef = _this$props.handleContentDOMRef,
36
36
  extensionHandlers = _this$props.extensionHandlers,
37
+ extensionLoadingHandlers = _this$props.extensionLoadingHandlers,
37
38
  references = _this$props.references,
38
39
  editorAppearance = _this$props.editorAppearance,
39
40
  pluginInjectionApi = _this$props.pluginInjectionApi,
@@ -59,6 +60,7 @@ var Extension = exports.Extension = /*#__PURE__*/function (_Component) {
59
60
  extensionProvider: extensionProvider,
60
61
  handleContentDOMRef: handleContentDOMRef,
61
62
  extensionHandlers: extensionHandlers,
63
+ extensionLoadingHandlers: extensionLoadingHandlers,
62
64
  editorAppearance: editorAppearance,
63
65
  pluginInjectionApi: pluginInjectionApi,
64
66
  eventDispatcher: eventDispatcher,
@@ -149,6 +149,7 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
149
149
  var _pmNode$marks;
150
150
  var _this$props = _this.props,
151
151
  extensionHandlers = _this$props.extensionHandlers,
152
+ extensionLoadingHandlers = _this$props.extensionLoadingHandlers,
152
153
  editorView = _this$props.editorView,
153
154
  showBodiedExtensionRendererView = _this$props.showBodiedExtensionRendererView,
154
155
  rendererExtensionHandlers = _this$props.rendererExtensionHandlers;
@@ -184,6 +185,7 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
184
185
  }
185
186
  }
186
187
  var result;
188
+ var loadingFallback = extensionLoadingHandlers !== null && extensionLoadingHandlers !== void 0 && extensionLoadingHandlers[extensionType] ? (0, _utils.getExtensionRenderer)(extensionLoadingHandlers[extensionType])(node, editorView.state.doc, actions) : undefined;
187
189
  if (extensionHandlers && extensionHandlers[extensionType]) {
188
190
  var render = (0, _utils.getExtensionRenderer)(extensionHandlers[extensionType]);
189
191
  result = render(node, editorView.state.doc, actions);
@@ -196,18 +198,20 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
196
198
  return /*#__PURE__*/_react.default.createElement(NodeRenderer, {
197
199
  node: node,
198
200
  references: _this.props.references,
199
- actions: actions
201
+ actions: actions,
202
+ loadingFallback: loadingFallback
200
203
  });
201
204
  }
202
205
  return /*#__PURE__*/_react.default.createElement(NodeRenderer, {
203
206
  node: node,
204
207
  references: _this.props.references,
205
208
  isSelected: isSelected,
209
+ loadingFallback: loadingFallback,
206
210
  showUnknownMacroPlaceholder: (0, _platformFeatureFlags.fg)('tinymce_display_unknown_macro_body_content')
207
211
  });
208
212
  }
209
213
  }
210
- return result;
214
+ return result !== null && result !== void 0 ? result : loadingFallback;
211
215
  });
212
216
  return _this;
213
217
  }
@@ -7,12 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
  var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/helpers/objectDestructuringEmpty"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
  var _react2 = require("@emotion/react");
16
+ var _bindEventListener = require("bind-event-listener");
16
17
  var _classnames = _interopRequireDefault(require("classnames"));
17
18
  var _file = _interopRequireDefault(require("@atlaskit/icon/core/file"));
18
19
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
@@ -63,6 +64,67 @@ var MultiBodiedExtensionFrames = function MultiBodiedExtensionFrames(_ref) {
63
64
  ref: articleRef
64
65
  });
65
66
  };
67
+ var isSelectionInsideNode = function isSelectionInsideNode(selection, node, getPos) {
68
+ var nodeStartPosition = getPos();
69
+ if (typeof nodeStartPosition !== 'number' || !selection) {
70
+ return false;
71
+ }
72
+ var nodeEndPosition = nodeStartPosition + node.nodeSize;
73
+
74
+ /*
75
+ selection starts within MBE ||
76
+ selection ends within MBE ||
77
+ selection includes MBE
78
+ */
79
+ return nodeStartPosition < selection.from && selection.from < nodeEndPosition || nodeStartPosition < selection.to && selection.to < nodeEndPosition || nodeStartPosition >= selection.from && selection.to >= nodeEndPosition;
80
+ };
81
+ var useIsSelectionInsideNode = function useIsSelectionInsideNode(editorView, node, getPos, enabled) {
82
+ var nodeRef = (0, _react.useRef)(node);
83
+ var _useState = (0, _react.useState)(function () {
84
+ return enabled && isSelectionInsideNode(editorView.state.selection, node, getPos);
85
+ }),
86
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
87
+ isSelectionInside = _useState2[0],
88
+ setIsSelectionInside = _useState2[1];
89
+ nodeRef.current = node;
90
+ (0, _react.useEffect)(function () {
91
+ if (!enabled) {
92
+ return;
93
+ }
94
+ var animationFrameId;
95
+ var updateSelectionInsideNode = function updateSelectionInsideNode() {
96
+ setIsSelectionInside(isSelectionInsideNode(editorView.state.selection, nodeRef.current, getPos));
97
+ };
98
+ var scheduleUpdateSelectionInsideNode = function scheduleUpdateSelectionInsideNode() {
99
+ if (animationFrameId !== undefined) {
100
+ cancelAnimationFrame(animationFrameId);
101
+ }
102
+ animationFrameId = requestAnimationFrame(updateSelectionInsideNode);
103
+ };
104
+ var ownerDocument = editorView.dom.ownerDocument;
105
+ var unbindSelectionChange = (0, _bindEventListener.bind)(ownerDocument, {
106
+ listener: scheduleUpdateSelectionInsideNode,
107
+ type: 'selectionchange'
108
+ });
109
+ var unbindKeyUp = (0, _bindEventListener.bind)(editorView.dom, {
110
+ listener: scheduleUpdateSelectionInsideNode,
111
+ type: 'keyup'
112
+ });
113
+ var unbindMouseUp = (0, _bindEventListener.bind)(editorView.dom, {
114
+ listener: scheduleUpdateSelectionInsideNode,
115
+ type: 'mouseup'
116
+ });
117
+ return function () {
118
+ if (animationFrameId !== undefined) {
119
+ cancelAnimationFrame(animationFrameId);
120
+ }
121
+ unbindSelectionChange();
122
+ unbindKeyUp();
123
+ unbindMouseUp();
124
+ };
125
+ }, [editorView, getPos, enabled]);
126
+ return enabled && isSelectionInside;
127
+ };
66
128
 
67
129
  // Similar to the one in platform/packages/editor/editor-common/src/extensibility/Extension/Lozenge.tsx
68
130
  var getWrapperTitleContent = function getWrapperTitleContent(imageData, title, showMacroInteractionDesignUpdates) {
@@ -122,10 +184,10 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
122
184
  node: node,
123
185
  type: 'image'
124
186
  });
125
- var _useState = (0, _react.useState)(0),
126
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
127
- activeChildIndex = _useState2[0],
128
- setActiveChildIndex = _useState2[1];
187
+ var _useState3 = (0, _react.useState)(0),
188
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
189
+ activeChildIndex = _useState4[0],
190
+ setActiveChildIndex = _useState4[1];
129
191
  // Adding to avoid aliasing `this` for the callbacks
130
192
  var updateActiveChild = _react.default.useCallback(function (index) {
131
193
  if (typeof index !== 'number') {
@@ -175,8 +237,11 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
175
237
  breakoutStyles = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(_calculateBreakoutSty), _calculateBreakoutSty));
176
238
  mbeWrapperStyles = breakoutStyles;
177
239
  }
240
+ var shouldUseNativeTabsPresentation = (0, _platformFeatureFlags.fg)('confluence_frontend_native_tabs_extension');
241
+ var isSelectionInsideMultiBodiedExtension = useIsSelectionInsideNode(editorView, node, getPos, shouldUseNativeTabsPresentation);
242
+ var isMultiBodiedExtensionActive = isNodeSelected || isSelectionInsideMultiBodiedExtension;
178
243
  var wrapperClassNames = (0, _classnames.default)('multiBodiedExtension--wrapper', 'extension-container', 'block', {
179
- 'with-border': showMacroInteractionDesignUpdates,
244
+ 'with-border': showMacroInteractionDesignUpdates && (shouldUseNativeTabsPresentation ? isMultiBodiedExtensionActive : true),
180
245
  'with-danger-overlay': showMacroInteractionDesignUpdates,
181
246
  'with-padding-background-styles': showMacroInteractionDesignUpdates,
182
247
  'with-margin-styles': showMacroInteractionDesignUpdates && !isNodeNested
@@ -198,7 +263,7 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
198
263
  }
199
264
  };
200
265
  return (0, _react2.jsx)(_react.Fragment, null, showMacroInteractionDesignUpdates && !isLivePageViewMode && (0, _react2.jsx)(_Lozenge.default, {
201
- isNodeSelected: isNodeSelected,
266
+ isNodeSelected: shouldUseNativeTabsPresentation ? isMultiBodiedExtensionActive : isNodeSelected,
202
267
  node: node,
203
268
  showMacroInteractionDesignUpdates: true,
204
269
  customContainerStyles: mbeWrapperStyles,
@@ -206,12 +271,13 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
206
271
  isNodeNested: isNodeNested,
207
272
  setIsNodeHovered: setIsNodeHovered,
208
273
  isBodiedMacro: true,
274
+ isMultiBodiedMacro: shouldUseNativeTabsPresentation,
209
275
  pluginInjectionApi: pluginInjectionApi
210
276
  }), (0, _react2.jsx)("div", {
211
277
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
212
278
  className: wrapperClassNames,
213
279
  css: [/* eslint-disable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766 */
214
- (0, _platformFeatureFlags.fg)('confluence_frontend_native_tabs_extension') ? _styles.mbeExtensionWrapperCSSStyles : _styles.mbeExtensionWrapperCSSStylesOld, /* eslint-enable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage */
280
+ shouldUseNativeTabsPresentation ? _styles.mbeExtensionWrapperCSSStyles : _styles.mbeExtensionWrapperCSSStylesOld, /* eslint-enable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage */
215
281
  showMacroInteractionDesignUpdates && !isLivePageViewMode && hoverStyles],
216
282
  "data-testid": "multiBodiedExtension--wrapper-editor",
217
283
  "data-layout": node.attrs.layout
@@ -231,7 +297,7 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
231
297
  onBlur: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
232
298
  }, (0, _react2.jsx)("div", {
233
299
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
234
- css: (0, _platformFeatureFlags.fg)('confluence_frontend_native_tabs_extension') ? _styles.overlayStyles : _styles.overlayStylesOld
300
+ css: shouldUseNativeTabsPresentation ? _styles.overlayStyles : _styles.overlayStylesOld
235
301
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
236
302
  ,
237
303
  className: overlayClassNames,
@@ -321,6 +321,7 @@ var ExtensionNode = exports.ExtensionNode = /*#__PURE__*/function (_ReactNodeVie
321
321
  providerFactory: props.providerFactory,
322
322
  handleContentDOMRef: forwardRef,
323
323
  extensionHandlers: props.extensionHandlers,
324
+ extensionLoadingHandlers: props.extensionLoadingHandlers,
324
325
  editorAppearance: (_props$extensionNodeV = props.extensionNodeViewOptions) === null || _props$extensionNodeV === void 0 ? void 0 : _props$extensionNodeV.appearance,
325
326
  pluginInjectionApi: props.pluginInjectionApi,
326
327
  macroInteractionDesignFeatureFlags: props.macroInteractionDesignFeatureFlags,
@@ -331,11 +332,12 @@ var ExtensionNode = exports.ExtensionNode = /*#__PURE__*/function (_ReactNodeVie
331
332
  }
332
333
  }]);
333
334
  }(_reactNodeView.default); // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
334
- function ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi, macroInteractionDesignFeatureFlags, showLivePagesBodiedMacrosRendererView, showUpdatedLivePages1PBodiedExtensionUI, rendererExtensionHandlers, intl) {
335
+ function ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionLoadingHandlers, extensionNodeViewOptions, pluginInjectionApi, macroInteractionDesignFeatureFlags, showLivePagesBodiedMacrosRendererView, showUpdatedLivePages1PBodiedExtensionUI, rendererExtensionHandlers, intl) {
335
336
  return function (node, view, getPos) {
336
337
  return new ExtensionNode(node, view, getPos, portalProviderAPI, eventDispatcher, {
337
338
  providerFactory: providerFactory,
338
339
  extensionHandlers: extensionHandlers,
340
+ extensionLoadingHandlers: extensionLoadingHandlers,
339
341
  extensionNodeViewOptions: extensionNodeViewOptions,
340
342
  pluginInjectionApi: pluginInjectionApi,
341
343
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
@@ -124,6 +124,9 @@ function isUnknownConfluenceMacroWithBody(extensionNode) {
124
124
  function ExtensionLoading(props) {
125
125
  var intl = (0, _reactIntl.useIntl)();
126
126
  var extensionNode = props.node;
127
+ if (!props.error && !props.timedOut && props.loadingFallback) {
128
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.loadingFallback);
129
+ }
127
130
  if (props.error || props.timedOut) {
128
131
  // eslint-disable-next-line no-console
129
132
  console.error('Error rendering extension', props.error);
@@ -28,7 +28,7 @@ var NETWORK_FAILURE_REGEX = /^network failure/i;
28
28
  var RESIZE_OBSERVER_LOOP_REGEX = /ResizeObserver loop completed with undelivered notifications/;
29
29
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
30
30
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
31
- var packageVersion = "116.24.2";
31
+ var packageVersion = "116.24.4";
32
32
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
33
33
  // Remove URL as it has UGC
34
34
  // Ignored via go/ees007
@@ -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 = "116.24.2";
27
+ var packageVersion = "116.24.4";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -10,6 +10,7 @@ import { css, jsx } from '@emotion/react';
10
10
  import classnames from 'classnames';
11
11
  import { FormattedMessage, defineMessages } from 'react-intl';
12
12
  import CustomizeIcon from '@atlaskit/icon/core/customize';
13
+ import { fg } from '@atlaskit/platform-feature-flags';
13
14
  // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
14
15
  import { Box, xcss } from '@atlaskit/primitives';
15
16
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
@@ -108,33 +109,26 @@ const i18n = defineMessages({
108
109
  description: 'Text in tooltip that tells user they can configure the specific macro.'
109
110
  }
110
111
  });
111
- export const getShouldShowBodiedMacroLabel = (isBodiedMacro, isNodeHovered, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView, showUpdatedLivePages1PBodiedExtensionUI) => {
112
- // Bodied macros show the label by default except for the new live pages 1P bodied macro experience where we only show it on hover
113
- if (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI) {
114
- return isNodeHovered;
115
- }
116
- if (!showLivePagesBodiedMacrosRendererView) {
117
- return true;
118
- } // Keep showing labels as usual for default experience for bodied macros
119
- return !!(isNodeHovered && !showBodiedExtensionRendererView); // For the new live pages bodied macro experience, we only show the label on hover in the "edit" view
120
- };
121
112
  // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
122
113
  export const ExtensionLabel = ({
123
114
  text,
124
115
  extensionName,
125
116
  customContainerStyles,
126
117
  isNodeNested,
118
+ isNodeSelected,
127
119
  setIsNodeHovered,
128
120
  isBodiedMacro,
129
121
  showUpdatedLivePages1PBodiedExtensionUI,
130
122
  showLivePagesBodiedMacrosRendererView,
131
123
  showBodiedExtensionRendererView,
132
- pluginInjectionApi: _pluginInjectionApi
124
+ pluginInjectionApi: _pluginInjectionApi,
125
+ isMultiBodiedMacro
133
126
  }) => {
134
127
  const isInlineExtension = extensionName === 'inlineExtension';
135
128
  const showDefaultBodiedStyles = isBodiedMacro;
129
+ const shouldUseMultiBodiedMacroPresentation = isMultiBodiedMacro && fg('confluence_frontend_native_tabs_extension');
136
130
  const containerClassNames = classnames({
137
- bodied: isBodiedMacro
131
+ bodied: isBodiedMacro && !shouldUseMultiBodiedMacroPresentation
138
132
  });
139
133
  const labelClassNames = classnames('extension-label', {
140
134
  nested: isNodeNested,
@@ -145,8 +139,8 @@ export const ExtensionLabel = ({
145
139
  'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView,
146
140
  'always-hide-label': isBodiedMacro && showBodiedExtensionRendererView,
147
141
  // Need this separate class since we don't ever want to show the label during view mode
148
- 'remove-left-margin': !isBodiedMacro && !isInlineExtension && !isNodeNested,
149
- 'remove-nested-left-margin': isNodeNested && !isBodiedMacro && !isInlineExtension
142
+ 'remove-left-margin': (!isBodiedMacro || shouldUseMultiBodiedMacroPresentation) && !isInlineExtension && !isNodeNested,
143
+ 'remove-nested-left-margin': isNodeNested && (!isBodiedMacro || shouldUseMultiBodiedMacroPresentation) && !isInlineExtension
150
144
  });
151
145
  const iconClassNames = classnames({
152
146
  'extension-icon': true
@@ -195,12 +189,12 @@ export const ExtensionLabel = ({
195
189
  // Ignored via go/ees005
196
190
  // eslint-disable-next-line react/jsx-props-no-spreading
197
191
  }, tooltipProps, {
198
- css: [labelStyles, !showLivePagesBodiedMacrosRendererView && showLabelStyles, (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI) && hideLabelStyles]
192
+ css: [labelStyles, !showLivePagesBodiedMacrosRendererView && showLabelStyles, (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI || shouldUseMultiBodiedMacroPresentation && !isNodeSelected) && hideLabelStyles]
199
193
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
200
194
  ,
201
195
  className: labelClassNames
202
196
  }), text, jsx("span", {
203
- css: [iconStyles, isBodiedMacro && bodiedMacroIconStyles]
197
+ css: [iconStyles, isBodiedMacro && !shouldUseMultiBodiedMacroPresentation && bodiedMacroIconStyles]
204
198
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
205
199
  ,
206
200
  className: iconClassNames,
@@ -26,13 +26,15 @@ export const LozengeComponent = ({
26
26
  customContainerStyles,
27
27
  isNodeHovered,
28
28
  isNodeNested,
29
+ isNodeSelected,
29
30
  setIsNodeHovered,
30
31
  isBodiedMacro,
31
32
  showLivePagesBodiedMacrosRendererView,
32
33
  showUpdatedLivePages1PBodiedExtensionUI,
33
34
  showBodiedExtensionRendererView,
34
35
  setShowBodiedExtensionRendererView,
35
- pluginInjectionApi
36
+ pluginInjectionApi,
37
+ isMultiBodiedMacro
36
38
  }) => {
37
39
  const capitalizedTitle = capitalizeFirstLetter(title);
38
40
  if (showMacroInteractionDesignUpdates) {
@@ -41,13 +43,15 @@ export const LozengeComponent = ({
41
43
  extensionName: extensionName,
42
44
  isNodeHovered: isNodeHovered,
43
45
  isNodeNested: isNodeNested,
46
+ isNodeSelected: isNodeSelected,
44
47
  customContainerStyles: customContainerStyles,
45
48
  setIsNodeHovered: setIsNodeHovered,
46
49
  isBodiedMacro: isBodiedMacro,
47
50
  showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
48
51
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
49
52
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
50
- pluginInjectionApi: pluginInjectionApi
53
+ pluginInjectionApi: pluginInjectionApi,
54
+ isMultiBodiedMacro: isMultiBodiedMacro
51
55
  }), showLivePagesBodiedMacrosRendererView && isBodiedMacro && jsx(EditToggle, {
52
56
  isNodeHovered: isNodeHovered,
53
57
  setIsNodeHovered: setIsNodeHovered,
@@ -44,7 +44,8 @@ export default class ExtensionLozenge extends Component {
44
44
  showUpdatedLivePages1PBodiedExtensionUI,
45
45
  showBodiedExtensionRendererView,
46
46
  setShowBodiedExtensionRendererView,
47
- pluginInjectionApi
47
+ pluginInjectionApi,
48
+ isMultiBodiedMacro
48
49
  } = this.props;
49
50
  const {
50
51
  parameters,
@@ -72,7 +73,8 @@ export default class ExtensionLozenge extends Component {
72
73
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
73
74
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
74
75
  setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView,
75
- pluginInjectionApi: pluginInjectionApi
76
+ pluginInjectionApi: pluginInjectionApi,
77
+ isMultiBodiedMacro: isMultiBodiedMacro
76
78
  });
77
79
  });
78
80
  }
@@ -17,6 +17,7 @@ export class Extension extends Component {
17
17
  editorView,
18
18
  handleContentDOMRef,
19
19
  extensionHandlers,
20
+ extensionLoadingHandlers,
20
21
  references,
21
22
  editorAppearance,
22
23
  pluginInjectionApi,
@@ -44,6 +45,7 @@ export class Extension extends Component {
44
45
  extensionProvider: extensionProvider,
45
46
  handleContentDOMRef: handleContentDOMRef,
46
47
  extensionHandlers: extensionHandlers,
48
+ extensionLoadingHandlers: extensionLoadingHandlers,
47
49
  editorAppearance: editorAppearance,
48
50
  pluginInjectionApi: pluginInjectionApi,
49
51
  eventDispatcher: eventDispatcher,
@@ -102,9 +102,10 @@ class ExtensionComponentInner extends Component {
102
102
  }
103
103
  });
104
104
  _defineProperty(this, "handleExtension", (pmNode, actions) => {
105
- var _pmNode$marks, _pmNode$marks$find, _pmNode$marks$find$at;
105
+ var _pmNode$marks, _pmNode$marks$find, _pmNode$marks$find$at, _result;
106
106
  const {
107
107
  extensionHandlers,
108
+ extensionLoadingHandlers,
108
109
  editorView,
109
110
  showBodiedExtensionRendererView,
110
111
  rendererExtensionHandlers
@@ -142,6 +143,7 @@ class ExtensionComponentInner extends Component {
142
143
  }
143
144
  }
144
145
  let result;
146
+ const loadingFallback = extensionLoadingHandlers !== null && extensionLoadingHandlers !== void 0 && extensionLoadingHandlers[extensionType] ? getExtensionRenderer(extensionLoadingHandlers[extensionType])(node, editorView.state.doc, actions) : undefined;
145
147
  if (extensionHandlers && extensionHandlers[extensionType]) {
146
148
  const render = getExtensionRenderer(extensionHandlers[extensionType]);
147
149
  result = render(node, editorView.state.doc, actions);
@@ -154,18 +156,20 @@ class ExtensionComponentInner extends Component {
154
156
  return /*#__PURE__*/React.createElement(NodeRenderer, {
155
157
  node: node,
156
158
  references: this.props.references,
157
- actions: actions
159
+ actions: actions,
160
+ loadingFallback: loadingFallback
158
161
  });
159
162
  }
160
163
  return /*#__PURE__*/React.createElement(NodeRenderer, {
161
164
  node: node,
162
165
  references: this.props.references,
163
166
  isSelected: isSelected,
167
+ loadingFallback: loadingFallback,
164
168
  showUnknownMacroPlaceholder: fg('tinymce_display_unknown_macro_body_content')
165
169
  });
166
170
  }
167
171
  }
168
- return result;
172
+ return (_result = result) !== null && _result !== void 0 ? _result : loadingFallback;
169
173
  });
170
174
  }
171
175
  componentDidUpdate() {