@atlaskit/editor-common 121.2.2 → 121.2.3

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 (42) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/analytics/types/enums.js +1 -0
  3. package/dist/cjs/extensibility/Extension/Extension/index.js +6 -3
  4. package/dist/cjs/extensibility/Extension/InlineExtension/index.js +6 -3
  5. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionLabel.js +2 -1
  6. package/dist/cjs/extensibility/Extension/Lozenge/LozengeComponent.js +3 -1
  7. package/dist/cjs/extensibility/Extension/Lozenge/index.js +1 -0
  8. package/dist/cjs/extensibility/ExtensionComponent.js +129 -26
  9. package/dist/cjs/extensibility/MultiBodiedExtension/index.js +4 -2
  10. package/dist/cjs/monitoring/error.js +1 -1
  11. package/dist/cjs/ui/DropList/index.js +1 -1
  12. package/dist/es2019/analytics/types/enums.js +1 -0
  13. package/dist/es2019/extensibility/Extension/Extension/index.js +6 -3
  14. package/dist/es2019/extensibility/Extension/InlineExtension/index.js +6 -3
  15. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionLabel.js +2 -1
  16. package/dist/es2019/extensibility/Extension/Lozenge/LozengeComponent.js +3 -1
  17. package/dist/es2019/extensibility/Extension/Lozenge/index.js +1 -0
  18. package/dist/es2019/extensibility/ExtensionComponent.js +85 -3
  19. package/dist/es2019/extensibility/MultiBodiedExtension/index.js +4 -2
  20. package/dist/es2019/monitoring/error.js +1 -1
  21. package/dist/es2019/ui/DropList/index.js +1 -1
  22. package/dist/esm/analytics/types/enums.js +1 -0
  23. package/dist/esm/extensibility/Extension/Extension/index.js +6 -3
  24. package/dist/esm/extensibility/Extension/InlineExtension/index.js +6 -3
  25. package/dist/esm/extensibility/Extension/Lozenge/ExtensionLabel.js +2 -1
  26. package/dist/esm/extensibility/Extension/Lozenge/LozengeComponent.js +3 -1
  27. package/dist/esm/extensibility/Extension/Lozenge/index.js +1 -0
  28. package/dist/esm/extensibility/ExtensionComponent.js +128 -25
  29. package/dist/esm/extensibility/MultiBodiedExtension/index.js +4 -2
  30. package/dist/esm/monitoring/error.js +1 -1
  31. package/dist/esm/ui/DropList/index.js +1 -1
  32. package/dist/types/analytics/types/enums.d.ts +1 -0
  33. package/dist/types/analytics/types/node-events.d.ts +1 -1
  34. package/dist/types/extensibility/Extension/Extension/index.d.ts +1 -0
  35. package/dist/types/extensibility/Extension/InlineExtension/index.d.ts +1 -0
  36. package/dist/types/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +2 -1
  37. package/dist/types/extensibility/Extension/Lozenge/LozengeComponent.d.ts +2 -1
  38. package/dist/types/extensibility/Extension/Lozenge/index.d.ts +1 -0
  39. package/dist/types/extensibility/ExtensionComponent.d.ts +1 -0
  40. package/dist/types/extensibility/MultiBodiedExtension/index.d.ts +1 -0
  41. package/package.json +6 -3
  42. package/afm-cc/tsconfig.json +0 -206
@@ -5,7 +5,7 @@ import React, { Component, useEffect, useLayoutEffect, useRef, useState } from '
5
5
  import memoizeOne from 'memoize-one';
6
6
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
7
7
  import { fg } from '@atlaskit/platform-feature-flags/fg';
8
- import { getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
8
+ import { getExtensionModuleNode, getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
9
9
  import { getExtensionRenderer, nodeToJSON, toJSON } from '../utils';
10
10
  import Extension from './Extension/Extension';
11
11
  import { isEmptyBodiedMacro } from './Extension/Extension/extension-utils';
@@ -56,6 +56,8 @@ class ExtensionComponentInner extends Component {
56
56
  constructor(...args) {
57
57
  super(...args);
58
58
  _defineProperty(this, "privatePropsParsed", false);
59
+ _defineProperty(this, "configureAffordanceResolved", false);
60
+ _defineProperty(this, "isUnmounted", false);
59
61
  _defineProperty(this, "state", {});
60
62
  // memoized to avoid rerender on extension state changes
61
63
  _defineProperty(this, "getNodeRenderer", memoizeOne(getNodeRenderer));
@@ -101,6 +103,76 @@ class ExtensionComponentInner extends Component {
101
103
  /** We keep rendering the default content */
102
104
  }
103
105
  });
106
+ /**
107
+ * Decides whether the "Configure {name}" lozenge label should be hidden for this node.
108
+ *
109
+ * Mirrors how the floating toolbar decides to show its edit button (see
110
+ * `shouldShowEditButton` and `updateEditButton` in `editor-plugin-extension`):
111
+ * - a legacy function handler is configurable via the macro browser;
112
+ * - an object handler is configurable only if it defines `update`;
113
+ * - otherwise the node module from the extension provider decides via its optional `update`.
114
+ * Nodes with no way to be configured get no Configure affordance. Anything we cannot
115
+ * resolve keeps the label, which is the pre-existing behaviour.
116
+ *
117
+ * The result is resolved once per node and held in state rather than derived on each render
118
+ * because the provider path is asynchronous: `getExtensionModuleNode` goes through
119
+ * `extensionProvider.getExtension`, which returns a Promise. Deriving the synchronous handler
120
+ * branches in render while the provider branch stays async would let the same node flip
121
+ * between answers, and would re-run the manifest lookup on every hover re-render. One
122
+ * resolution keeps the label stable and cheap.
123
+ */
124
+ _defineProperty(this, "resolveConfigureAffordanceIfNeeded", async () => {
125
+ if (this.configureAffordanceResolved || !fg('platform_editor_hide_configure_lozenge_non_configurable')) {
126
+ return;
127
+ }
128
+ const {
129
+ extensionHandlers,
130
+ extensionProvider,
131
+ node
132
+ } = this.props;
133
+ const {
134
+ extensionType,
135
+ extensionKey
136
+ } = node.attrs;
137
+ const extensionHandler = extensionHandlers === null || extensionHandlers === void 0 ? void 0 : extensionHandlers[extensionType];
138
+ if (typeof extensionHandler === 'function') {
139
+ // Legacy macro browser: configurable, keep the label.
140
+ this.configureAffordanceResolved = true;
141
+ return;
142
+ }
143
+ if (extensionHandler && typeof extensionHandler === 'object') {
144
+ this.configureAffordanceResolved = true;
145
+ if (typeof extensionHandler.update !== 'function') {
146
+ this.setState({
147
+ hideConfigureLabel: true
148
+ });
149
+ }
150
+ return;
151
+ }
152
+ if (!extensionProvider) {
153
+ // No handler and no provider yet. The provider usually arrives asynchronously, so try
154
+ // again from componentDidUpdate. If none ever arrives this is the legacy macro browser
155
+ // path, which is configurable, so leaving the label is correct.
156
+ return;
157
+ }
158
+ this.configureAffordanceResolved = true;
159
+ try {
160
+ const extensionModuleNode = await getExtensionModuleNode(extensionProvider, extensionType, extensionKey);
161
+ if (this.isUnmounted) {
162
+ return;
163
+ }
164
+ if (typeof (extensionModuleNode === null || extensionModuleNode === void 0 ? void 0 : extensionModuleNode.update) !== 'function') {
165
+ this.setState({
166
+ hideConfigureLabel: true
167
+ });
168
+ }
169
+ } catch (e) {
170
+ // Manifest lookups can throw (unknown extension, malformed manifest). Keep the label,
171
+ // which matches the toolbar failing silently and keeping its default. Not logged here on
172
+ // purpose: parsePrivateNodePropsIfNeeded runs the same lookup for the same node and already
173
+ // console.errors the failure, so a second log would double up per unknown extension.
174
+ }
175
+ });
104
176
  _defineProperty(this, "handleExtension", (pmNode, actions) => {
105
177
  var _pmNode$marks, _pmNode$marks$find, _pmNode$marks$find$at, _result;
106
178
  const {
@@ -172,8 +244,15 @@ class ExtensionComponentInner extends Component {
172
244
  return (_result = result) !== null && _result !== void 0 ? _result : loadingFallback;
173
245
  });
174
246
  }
247
+ componentDidMount() {
248
+ this.resolveConfigureAffordanceIfNeeded();
249
+ }
175
250
  componentDidUpdate() {
176
251
  this.parsePrivateNodePropsIfNeeded();
252
+ this.resolveConfigureAffordanceIfNeeded();
253
+ }
254
+ componentWillUnmount() {
255
+ this.isUnmounted = true;
177
256
  }
178
257
  render() {
179
258
  var _this$state$_privateP2;
@@ -219,7 +298,8 @@ class ExtensionComponentInner extends Component {
219
298
  isNodeNested: isNodeNested,
220
299
  setIsNodeHovered: this.setIsNodeHovered,
221
300
  isLivePageViewMode: isLivePageViewMode,
222
- allowBodiedOverride: allowBodiedOverride
301
+ allowBodiedOverride: allowBodiedOverride,
302
+ hideConfigureLabel: this.state.hideConfigureLabel
223
303
  });
224
304
  }
225
305
  const extensionHandlerResult = this.tryExtensionHandler(undefined);
@@ -234,6 +314,7 @@ class ExtensionComponentInner extends Component {
234
314
  handleContentDOMRef: handleContentDOMRef,
235
315
  view: editorView,
236
316
  editorAppearance: editorAppearance,
317
+ hideConfigureLabel: this.state.hideConfigureLabel,
237
318
  hideFrame: (_this$state$_privateP2 = this.state._privateProps) === null || _this$state$_privateP2 === void 0 ? void 0 : _this$state$_privateP2.__hideFrame,
238
319
  pluginInjectionApi: pluginInjectionApi,
239
320
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
@@ -251,7 +332,8 @@ class ExtensionComponentInner extends Component {
251
332
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
252
333
  isNodeSelected: selectedNode === node,
253
334
  pluginInjectionApi: pluginInjectionApi,
254
- isLivePageViewMode: isLivePageViewMode
335
+ isLivePageViewMode: isLivePageViewMode,
336
+ hideConfigureLabel: this.state.hideConfigureLabel
255
337
  }, extensionHandlerResult);
256
338
  default:
257
339
  return null;
@@ -208,7 +208,8 @@ const MultiBodiedExtensionWithWidth = ({
208
208
  setIsNodeHovered,
209
209
  pluginInjectionApi,
210
210
  isLivePageViewMode,
211
- allowBodiedOverride = false
211
+ allowBodiedOverride = false,
212
+ hideConfigureLabel
212
213
  }) => {
213
214
  const {
214
215
  showMacroInteractionDesignUpdates
@@ -319,7 +320,8 @@ const MultiBodiedExtensionWithWidth = ({
319
320
  isNodeNested: isNodeNested,
320
321
  setIsNodeHovered: setIsNodeHovered,
321
322
  isBodiedMacro: true,
322
- pluginInjectionApi: pluginInjectionApi
323
+ pluginInjectionApi: pluginInjectionApi,
324
+ hideConfigureLabel: hideConfigureLabel
323
325
  }), jsx("div", {
324
326
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
325
327
  className: wrapperClassNames,
@@ -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 = "121.2.1";
16
+ const packageVersion = "121.2.3";
17
17
  const sanitiseSentryEvents = (data, _hint) => {
18
18
  // Remove URL as it has UGC
19
19
  // Ignored via go/ees007
@@ -14,7 +14,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
14
14
  import { fg } from '@atlaskit/platform-feature-flags/fg';
15
15
  import Layer from '../Layer';
16
16
  const packageName = "@atlaskit/editor-common";
17
- const packageVersion = "121.2.1";
17
+ const packageVersion = "121.2.3";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -333,6 +333,7 @@ export var ACTION_SUBJECT = /*#__PURE__*/function (ACTION_SUBJECT) {
333
333
  ACTION_SUBJECT["CONTENT_COMPONENT"] = "contentComponent";
334
334
  ACTION_SUBJECT["DATE"] = "date";
335
335
  ACTION_SUBJECT["DATE_SEGMENT"] = "dateSegment";
336
+ ACTION_SUBJECT["DIVIDER"] = "divider";
336
337
  ACTION_SUBJECT["DOCUMENT"] = "document";
337
338
  ACTION_SUBJECT["EDITOR"] = "editor";
338
339
  ACTION_SUBJECT["ACTIVITY_SESSION"] = "activitySession";
@@ -53,7 +53,8 @@ function ExtensionWithPluginState(props) {
53
53
  showBodiedExtensionRendererView = props.showBodiedExtensionRendererView,
54
54
  setShowBodiedExtensionRendererView = props.setShowBodiedExtensionRendererView,
55
55
  pluginInjectionApi = props.pluginInjectionApi,
56
- isLivePageViewMode = props.isLivePageViewMode;
56
+ isLivePageViewMode = props.isLivePageViewMode,
57
+ hideConfigureLabel = props.hideConfigureLabel;
57
58
  var _ref = macroInteractionDesignFeatureFlags || {},
58
59
  showMacroInteractionDesignUpdates = _ref.showMacroInteractionDesignUpdates;
59
60
  var isLegacyContentMacroExtension = function isLegacyContentMacroExtension(extensionNode) {
@@ -146,7 +147,8 @@ function ExtensionWithPluginState(props) {
146
147
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
147
148
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
148
149
  setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView,
149
- pluginInjectionApi: pluginInjectionApi
150
+ pluginInjectionApi: pluginInjectionApi,
151
+ hideConfigureLabel: hideConfigureLabel
150
152
  }), jsx("div", {
151
153
  "data-testid": "extension-container",
152
154
  ref: handleRef,
@@ -192,7 +194,8 @@ function ExtensionWithPluginState(props) {
192
194
  }, !removeBorder && jsx(ExtensionLozenge, {
193
195
  node: node,
194
196
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
195
- pluginInjectionApi: pluginInjectionApi
197
+ pluginInjectionApi: pluginInjectionApi,
198
+ hideConfigureLabel: hideConfigureLabel
196
199
  }), children), hasBody &&
197
200
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
198
201
  jsx("div", {
@@ -74,7 +74,8 @@ var InlineExtension = function InlineExtension(props) {
74
74
  children = props.children,
75
75
  isNodeHovered = props.isNodeHovered,
76
76
  setIsNodeHovered = props.setIsNodeHovered,
77
- isLivePageViewMode = props.isLivePageViewMode;
77
+ isLivePageViewMode = props.isLivePageViewMode,
78
+ hideConfigureLabel = props.hideConfigureLabel;
78
79
  var _ref3 = macroInteractionDesignFeatureFlags || {},
79
80
  showMacroInteractionDesignUpdates = _ref3.showMacroInteractionDesignUpdates;
80
81
  var shouldUseFlowingInlineWrapper = fg('rovo_skill_tag_label_wrapping');
@@ -112,7 +113,8 @@ var InlineExtension = function InlineExtension(props) {
112
113
  isNodeHovered: isNodeHovered,
113
114
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
114
115
  setIsNodeHovered: setIsNodeHovered,
115
- pluginInjectionApi: pluginInjectionApi
116
+ pluginInjectionApi: pluginInjectionApi,
117
+ hideConfigureLabel: hideConfigureLabel
116
118
  }), jsx("div", {
117
119
  "data-testid": "inline-extension-wrapper",
118
120
  css: [
@@ -138,7 +140,8 @@ var InlineExtension = function InlineExtension(props) {
138
140
  }), children ? children : jsx(ExtensionLozenge, {
139
141
  node: node,
140
142
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
141
- pluginInjectionApi: pluginInjectionApi
143
+ pluginInjectionApi: pluginInjectionApi,
144
+ hideConfigureLabel: hideConfigureLabel
142
145
  })));
143
146
  return expValEquals('enghealth-53346_fix_redaction_marker_editor', 'isEnabled', true) ? jsx(MemoizedWidthContextProvider, {
144
147
  rendererContainerWidth: rendererContainerWidth
@@ -117,6 +117,7 @@ export var ExtensionLabel = function ExtensionLabel(_ref) {
117
117
  isNodeNested = _ref.isNodeNested,
118
118
  setIsNodeHovered = _ref.setIsNodeHovered,
119
119
  isBodiedMacro = _ref.isBodiedMacro,
120
+ hideConfigureLabel = _ref.hideConfigureLabel,
120
121
  showUpdatedLivePages1PBodiedExtensionUI = _ref.showUpdatedLivePages1PBodiedExtensionUI,
121
122
  showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
122
123
  showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
@@ -174,7 +175,7 @@ export var ExtensionLabel = function ExtensionLabel(_ref) {
174
175
  onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
175
176
  "data-testid": "new-lozenge-container",
176
177
  contentEditable: false
177
- }, jsx(Tooltip, {
178
+ }, !hideConfigureLabel && jsx(Tooltip, {
178
179
  content: jsx(FormattedMessage
179
180
  // Ignored via go/ees005
180
181
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -35,12 +35,14 @@ export var LozengeComponent = function LozengeComponent(_ref) {
35
35
  showUpdatedLivePages1PBodiedExtensionUI = _ref.showUpdatedLivePages1PBodiedExtensionUI,
36
36
  showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
37
37
  setShowBodiedExtensionRendererView = _ref.setShowBodiedExtensionRendererView,
38
- pluginInjectionApi = _ref.pluginInjectionApi;
38
+ pluginInjectionApi = _ref.pluginInjectionApi,
39
+ hideConfigureLabel = _ref.hideConfigureLabel;
39
40
  var capitalizedTitle = capitalizeFirstLetter(title);
40
41
  if (showMacroInteractionDesignUpdates) {
41
42
  return jsx(Fragment, null, jsx(ExtensionLabel, {
42
43
  text: capitalizedTitle,
43
44
  extensionName: extensionName,
45
+ hideConfigureLabel: hideConfigureLabel,
44
46
  isNodeHovered: isNodeHovered,
45
47
  isNodeNested: isNodeNested,
46
48
  customContainerStyles: customContainerStyles,
@@ -65,6 +65,7 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
65
65
  isNodeNested: isNodeNested,
66
66
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
67
67
  extensionName: name,
68
+ hideConfigureLabel: _this.props.hideConfigureLabel,
68
69
  lozengeData: lozengeData,
69
70
  params: params,
70
71
  title: title,
@@ -1,3 +1,4 @@
1
+ import _typeof from "@babel/runtime/helpers/typeof";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
4
  import _createClass from "@babel/runtime/helpers/createClass";
@@ -17,7 +18,7 @@ import React, { Component, useEffect, useLayoutEffect, useRef, useState } from '
17
18
  import memoizeOne from 'memoize-one';
18
19
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
19
20
  import { fg } from '@atlaskit/platform-feature-flags/fg';
20
- import { getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
21
+ import { getExtensionModuleNode, getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
21
22
  import { getExtensionRenderer, nodeToJSON, toJSON } from '../utils';
22
23
  import Extension from './Extension/Extension';
23
24
  import { isEmptyBodiedMacro } from './Extension/Extension/extension-utils';
@@ -77,6 +78,8 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
77
78
  }
78
79
  _this = _callSuper(this, ExtensionComponentInner, [].concat(args));
79
80
  _defineProperty(_this, "privatePropsParsed", false);
81
+ _defineProperty(_this, "configureAffordanceResolved", false);
82
+ _defineProperty(_this, "isUnmounted", false);
80
83
  _defineProperty(_this, "state", {});
81
84
  // memoized to avoid rerender on extension state changes
82
85
  _defineProperty(_this, "getNodeRenderer", memoizeOne(getNodeRenderer));
@@ -136,14 +139,100 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
136
139
  }
137
140
  }, _callee, null, [[2, 4]]);
138
141
  })));
142
+ /**
143
+ * Decides whether the "Configure {name}" lozenge label should be hidden for this node.
144
+ *
145
+ * Mirrors how the floating toolbar decides to show its edit button (see
146
+ * `shouldShowEditButton` and `updateEditButton` in `editor-plugin-extension`):
147
+ * - a legacy function handler is configurable via the macro browser;
148
+ * - an object handler is configurable only if it defines `update`;
149
+ * - otherwise the node module from the extension provider decides via its optional `update`.
150
+ * Nodes with no way to be configured get no Configure affordance. Anything we cannot
151
+ * resolve keeps the label, which is the pre-existing behaviour.
152
+ *
153
+ * The result is resolved once per node and held in state rather than derived on each render
154
+ * because the provider path is asynchronous: `getExtensionModuleNode` goes through
155
+ * `extensionProvider.getExtension`, which returns a Promise. Deriving the synchronous handler
156
+ * branches in render while the provider branch stays async would let the same node flip
157
+ * between answers, and would re-run the manifest lookup on every hover re-render. One
158
+ * resolution keeps the label stable and cheap.
159
+ */
160
+ _defineProperty(_this, "resolveConfigureAffordanceIfNeeded", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
161
+ var _this$props, extensionHandlers, extensionProvider, node, _node$attrs, extensionType, extensionKey, extensionHandler, extensionModuleNode, _t2;
162
+ return _regeneratorRuntime.wrap(function (_context2) {
163
+ while (1) switch (_context2.prev = _context2.next) {
164
+ case 0:
165
+ if (!(_this.configureAffordanceResolved || !fg('platform_editor_hide_configure_lozenge_non_configurable'))) {
166
+ _context2.next = 1;
167
+ break;
168
+ }
169
+ return _context2.abrupt("return");
170
+ case 1:
171
+ _this$props = _this.props, extensionHandlers = _this$props.extensionHandlers, extensionProvider = _this$props.extensionProvider, node = _this$props.node;
172
+ _node$attrs = node.attrs, extensionType = _node$attrs.extensionType, extensionKey = _node$attrs.extensionKey;
173
+ extensionHandler = extensionHandlers === null || extensionHandlers === void 0 ? void 0 : extensionHandlers[extensionType];
174
+ if (!(typeof extensionHandler === 'function')) {
175
+ _context2.next = 2;
176
+ break;
177
+ }
178
+ // Legacy macro browser: configurable, keep the label.
179
+ _this.configureAffordanceResolved = true;
180
+ return _context2.abrupt("return");
181
+ case 2:
182
+ if (!(extensionHandler && _typeof(extensionHandler) === 'object')) {
183
+ _context2.next = 3;
184
+ break;
185
+ }
186
+ _this.configureAffordanceResolved = true;
187
+ if (typeof extensionHandler.update !== 'function') {
188
+ _this.setState({
189
+ hideConfigureLabel: true
190
+ });
191
+ }
192
+ return _context2.abrupt("return");
193
+ case 3:
194
+ if (extensionProvider) {
195
+ _context2.next = 4;
196
+ break;
197
+ }
198
+ return _context2.abrupt("return");
199
+ case 4:
200
+ _this.configureAffordanceResolved = true;
201
+ _context2.prev = 5;
202
+ _context2.next = 6;
203
+ return getExtensionModuleNode(extensionProvider, extensionType, extensionKey);
204
+ case 6:
205
+ extensionModuleNode = _context2.sent;
206
+ if (!_this.isUnmounted) {
207
+ _context2.next = 7;
208
+ break;
209
+ }
210
+ return _context2.abrupt("return");
211
+ case 7:
212
+ if (typeof (extensionModuleNode === null || extensionModuleNode === void 0 ? void 0 : extensionModuleNode.update) !== 'function') {
213
+ _this.setState({
214
+ hideConfigureLabel: true
215
+ });
216
+ }
217
+ _context2.next = 9;
218
+ break;
219
+ case 8:
220
+ _context2.prev = 8;
221
+ _t2 = _context2["catch"](5);
222
+ case 9:
223
+ case "end":
224
+ return _context2.stop();
225
+ }
226
+ }, _callee2, null, [[5, 8]]);
227
+ })));
139
228
  _defineProperty(_this, "handleExtension", function (pmNode, actions) {
140
229
  var _pmNode$marks;
141
- var _this$props = _this.props,
142
- extensionHandlers = _this$props.extensionHandlers,
143
- extensionLoadingHandlers = _this$props.extensionLoadingHandlers,
144
- editorView = _this$props.editorView,
145
- showBodiedExtensionRendererView = _this$props.showBodiedExtensionRendererView,
146
- rendererExtensionHandlers = _this$props.rendererExtensionHandlers;
230
+ var _this$props2 = _this.props,
231
+ extensionHandlers = _this$props2.extensionHandlers,
232
+ extensionLoadingHandlers = _this$props2.extensionLoadingHandlers,
233
+ editorView = _this$props2.editorView,
234
+ showBodiedExtensionRendererView = _this$props2.showBodiedExtensionRendererView,
235
+ rendererExtensionHandlers = _this$props2.rendererExtensionHandlers;
147
236
  var _pmNode$attrs = pmNode.attrs,
148
237
  extensionType = _pmNode$attrs.extensionType,
149
238
  extensionKey = _pmNode$attrs.extensionKey,
@@ -208,30 +297,41 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
208
297
  }
209
298
  _inherits(ExtensionComponentInner, _Component);
210
299
  return _createClass(ExtensionComponentInner, [{
300
+ key: "componentDidMount",
301
+ value: function componentDidMount() {
302
+ this.resolveConfigureAffordanceIfNeeded();
303
+ }
304
+ }, {
211
305
  key: "componentDidUpdate",
212
306
  value: function componentDidUpdate() {
213
307
  this.parsePrivateNodePropsIfNeeded();
308
+ this.resolveConfigureAffordanceIfNeeded();
309
+ }
310
+ }, {
311
+ key: "componentWillUnmount",
312
+ value: function componentWillUnmount() {
313
+ this.isUnmounted = true;
214
314
  }
215
315
  }, {
216
316
  key: "render",
217
317
  value: function render() {
218
318
  var _this$state$_privateP2;
219
- var _this$props2 = this.props,
220
- node = _this$props2.node,
221
- handleContentDOMRef = _this$props2.handleContentDOMRef,
222
- editorView = _this$props2.editorView,
223
- references = _this$props2.references,
224
- editorAppearance = _this$props2.editorAppearance,
225
- pluginInjectionApi = _this$props2.pluginInjectionApi,
226
- getPos = _this$props2.getPos,
227
- eventDispatcher = _this$props2.eventDispatcher,
228
- macroInteractionDesignFeatureFlags = _this$props2.macroInteractionDesignFeatureFlags,
229
- extensionProvider = _this$props2.extensionProvider,
230
- showLivePagesBodiedMacrosRendererView = _this$props2.showLivePagesBodiedMacrosRendererView,
231
- showUpdatedLivePages1PBodiedExtensionUI = _this$props2.showUpdatedLivePages1PBodiedExtensionUI,
232
- showBodiedExtensionRendererView = _this$props2.showBodiedExtensionRendererView,
233
- setShowBodiedExtensionRendererView = _this$props2.setShowBodiedExtensionRendererView,
234
- isLivePageViewMode = _this$props2.isLivePageViewMode;
319
+ var _this$props3 = this.props,
320
+ node = _this$props3.node,
321
+ handleContentDOMRef = _this$props3.handleContentDOMRef,
322
+ editorView = _this$props3.editorView,
323
+ references = _this$props3.references,
324
+ editorAppearance = _this$props3.editorAppearance,
325
+ pluginInjectionApi = _this$props3.pluginInjectionApi,
326
+ getPos = _this$props3.getPos,
327
+ eventDispatcher = _this$props3.eventDispatcher,
328
+ macroInteractionDesignFeatureFlags = _this$props3.macroInteractionDesignFeatureFlags,
329
+ extensionProvider = _this$props3.extensionProvider,
330
+ showLivePagesBodiedMacrosRendererView = _this$props3.showLivePagesBodiedMacrosRendererView,
331
+ showUpdatedLivePages1PBodiedExtensionUI = _this$props3.showUpdatedLivePages1PBodiedExtensionUI,
332
+ showBodiedExtensionRendererView = _this$props3.showBodiedExtensionRendererView,
333
+ setShowBodiedExtensionRendererView = _this$props3.setShowBodiedExtensionRendererView,
334
+ isLivePageViewMode = _this$props3.isLivePageViewMode;
235
335
  var selection = editorView.state.selection;
236
336
  var selectedNode = selection instanceof NodeSelection && selection.node;
237
337
  var position = typeof getPos === 'function' && getPos();
@@ -255,7 +355,8 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
255
355
  isNodeNested: isNodeNested,
256
356
  setIsNodeHovered: this.setIsNodeHovered,
257
357
  isLivePageViewMode: isLivePageViewMode,
258
- allowBodiedOverride: allowBodiedOverride
358
+ allowBodiedOverride: allowBodiedOverride,
359
+ hideConfigureLabel: this.state.hideConfigureLabel
259
360
  });
260
361
  }
261
362
  var extensionHandlerResult = this.tryExtensionHandler(undefined);
@@ -270,6 +371,7 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
270
371
  handleContentDOMRef: handleContentDOMRef,
271
372
  view: editorView,
272
373
  editorAppearance: editorAppearance,
374
+ hideConfigureLabel: this.state.hideConfigureLabel,
273
375
  hideFrame: (_this$state$_privateP2 = this.state._privateProps) === null || _this$state$_privateP2 === void 0 ? void 0 : _this$state$_privateP2.__hideFrame,
274
376
  pluginInjectionApi: pluginInjectionApi,
275
377
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
@@ -287,7 +389,8 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
287
389
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
288
390
  isNodeSelected: selectedNode === node,
289
391
  pluginInjectionApi: pluginInjectionApi,
290
- isLivePageViewMode: isLivePageViewMode
392
+ isLivePageViewMode: isLivePageViewMode,
393
+ hideConfigureLabel: this.state.hideConfigureLabel
291
394
  }, extensionHandlerResult);
292
395
  default:
293
396
  return null;
@@ -207,7 +207,8 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
207
207
  pluginInjectionApi = _ref2.pluginInjectionApi,
208
208
  isLivePageViewMode = _ref2.isLivePageViewMode,
209
209
  _ref2$allowBodiedOver = _ref2.allowBodiedOverride,
210
- allowBodiedOverride = _ref2$allowBodiedOver === void 0 ? false : _ref2$allowBodiedOver;
210
+ allowBodiedOverride = _ref2$allowBodiedOver === void 0 ? false : _ref2$allowBodiedOver,
211
+ hideConfigureLabel = _ref2.hideConfigureLabel;
211
212
  var _ref3 = macroInteractionDesignFeatureFlags || {},
212
213
  showMacroInteractionDesignUpdates = _ref3.showMacroInteractionDesignUpdates;
213
214
  var _node$attrs = node.attrs,
@@ -318,7 +319,8 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
318
319
  isNodeNested: isNodeNested,
319
320
  setIsNodeHovered: setIsNodeHovered,
320
321
  isBodiedMacro: true,
321
- pluginInjectionApi: pluginInjectionApi
322
+ pluginInjectionApi: pluginInjectionApi,
323
+ hideConfigureLabel: hideConfigureLabel
322
324
  }), jsx("div", {
323
325
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
324
326
  className: wrapperClassNames,
@@ -19,7 +19,7 @@ var NETWORK_FAILURE_REGEX = /^network failure/i;
19
19
  var RESIZE_OBSERVER_LOOP_REGEX = /ResizeObserver loop completed with undelivered notifications/;
20
20
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
21
21
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
22
- var packageVersion = "121.2.1";
22
+ var packageVersion = "121.2.3";
23
23
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
24
24
  // Remove URL as it has UGC
25
25
  // Ignored via go/ees007
@@ -21,7 +21,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
21
21
  import { fg } from '@atlaskit/platform-feature-flags/fg';
22
22
  import Layer from '../Layer';
23
23
  var packageName = "@atlaskit/editor-common";
24
- var packageVersion = "121.2.1";
24
+ var packageVersion = "121.2.3";
25
25
  var halfFocusRing = 1;
26
26
  var dropOffset = '0, 8';
27
27
  var fadeIn = keyframes({
@@ -310,6 +310,7 @@ export declare enum ACTION_SUBJECT {
310
310
  CONTENT_COMPONENT = "contentComponent",
311
311
  DATE = "date",
312
312
  DATE_SEGMENT = "dateSegment",
313
+ DIVIDER = "divider",
313
314
  DOCUMENT = "document",
314
315
  EDITOR = "editor",
315
316
  ACTIVITY_SESSION = "activitySession",
@@ -41,7 +41,7 @@ type DeletedSmartLink = TrackAEP<ACTION.DELETED, ACTION_SUBJECT.SMART_LINK, ACTI
41
41
  displayMode: ACTION_SUBJECT_ID.CARD_BLOCK | ACTION_SUBJECT_ID.CARD_INLINE;
42
42
  inputMethod: INPUT_METHOD.FLOATING_TB | INPUT_METHOD.TOOLBAR | INPUT_METHOD.CARD;
43
43
  }, undefined>;
44
- export type NodeDeletedAEP = TrackAEP<ACTION.DELETED, ACTION_SUBJECT.PANEL | ACTION_SUBJECT.LAYOUT | ACTION_SUBJECT.EXPAND | ACTION_SUBJECT.TABLE | ACTION_SUBJECT.EXTENSION | ACTION_SUBJECT.BODIED_EXTENSION | ACTION_SUBJECT.SMART_LINK | ACTION_SUBJECT.CODE_BLOCK | ACTION_SUBJECT.MEDIA_SINGLE | ACTION_SUBJECT.MEDIA_GROUP | ACTION_SUBJECT.MEDIA_INLINE | ACTION_SUBJECT.ELEMENT, undefined, {
44
+ export type NodeDeletedAEP = TrackAEP<ACTION.DELETED, ACTION_SUBJECT.PANEL | ACTION_SUBJECT.LAYOUT | ACTION_SUBJECT.EXPAND | ACTION_SUBJECT.TABLE | ACTION_SUBJECT.EXTENSION | ACTION_SUBJECT.BODIED_EXTENSION | ACTION_SUBJECT.DIVIDER | ACTION_SUBJECT.SMART_LINK | ACTION_SUBJECT.CODE_BLOCK | ACTION_SUBJECT.MEDIA_SINGLE | ACTION_SUBJECT.MEDIA_GROUP | ACTION_SUBJECT.MEDIA_INLINE | ACTION_SUBJECT.ELEMENT, undefined, {
45
45
  inputMethod: INPUT_METHOD.BLOCK_MENU | INPUT_METHOD.FLOATING_TB | INPUT_METHOD.TOOLBAR;
46
46
  nodeCount?: number;
47
47
  nodeType?: string;
@@ -12,6 +12,7 @@ export interface Props {
12
12
  extensionProvider?: ExtensionProvider;
13
13
  getPos: ProsemirrorGetPosHandler;
14
14
  handleContentDOMRef: (node: HTMLElement | null) => void;
15
+ hideConfigureLabel?: boolean;
15
16
  hideFrame?: boolean;
16
17
  isLivePageViewMode?: boolean;
17
18
  isNodeHovered?: boolean;
@@ -8,6 +8,7 @@ import type { Node as PmNode } from '@atlaskit/editor-prosemirror/model';
8
8
  import type { ExtensionsPluginInjectionAPI, MacroInteractionDesignFeatureFlags } from '../../types';
9
9
  export interface Props {
10
10
  children?: React.ReactNode;
11
+ hideConfigureLabel?: boolean;
11
12
  isLivePageViewMode?: boolean;
12
13
  isNodeHovered?: boolean;
13
14
  isNodeSelected?: boolean;
@@ -8,6 +8,7 @@ import type { ExtensionsPluginInjectionAPI } from '../../types';
8
8
  type ExtensionLabelProps = {
9
9
  customContainerStyles?: CSSProperties;
10
10
  extensionName: string;
11
+ hideConfigureLabel?: boolean;
11
12
  isBodiedMacro?: boolean;
12
13
  isNodeHovered?: boolean;
13
14
  isNodeNested?: boolean;
@@ -18,5 +19,5 @@ type ExtensionLabelProps = {
18
19
  showUpdatedLivePages1PBodiedExtensionUI?: boolean;
19
20
  text: string;
20
21
  };
21
- export declare const ExtensionLabel: ({ text, extensionName, customContainerStyles, isNodeNested, setIsNodeHovered, isBodiedMacro, showUpdatedLivePages1PBodiedExtensionUI, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView, pluginInjectionApi: _pluginInjectionApi, }: ExtensionLabelProps) => jsx.JSX.Element;
22
+ export declare const ExtensionLabel: ({ text, extensionName, customContainerStyles, isNodeNested, setIsNodeHovered, isBodiedMacro, hideConfigureLabel, showUpdatedLivePages1PBodiedExtensionUI, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView, pluginInjectionApi: _pluginInjectionApi, }: ExtensionLabelProps) => jsx.JSX.Element;
22
23
  export {};
@@ -10,6 +10,7 @@ export declare const ICON_SIZE = 24;
10
10
  type LozengeComponentProps = {
11
11
  customContainerStyles?: CSSProperties;
12
12
  extensionName: string;
13
+ hideConfigureLabel?: boolean;
13
14
  isBodiedMacro?: boolean;
14
15
  isNodeHovered?: boolean;
15
16
  isNodeNested?: boolean;
@@ -25,5 +26,5 @@ type LozengeComponentProps = {
25
26
  showUpdatedLivePages1PBodiedExtensionUI?: boolean;
26
27
  title: string;
27
28
  };
28
- export declare const LozengeComponent: ({ lozengeData, extensionName, title, params, renderImage, showMacroInteractionDesignUpdates, customContainerStyles, isNodeHovered, isNodeNested, setIsNodeHovered, isBodiedMacro, showLivePagesBodiedMacrosRendererView, showUpdatedLivePages1PBodiedExtensionUI, showBodiedExtensionRendererView, setShowBodiedExtensionRendererView, pluginInjectionApi, }: LozengeComponentProps) => jsx.JSX.Element;
29
+ export declare const LozengeComponent: ({ lozengeData, extensionName, title, params, renderImage, showMacroInteractionDesignUpdates, customContainerStyles, isNodeHovered, isNodeNested, setIsNodeHovered, isBodiedMacro, showLivePagesBodiedMacrosRendererView, showUpdatedLivePages1PBodiedExtensionUI, showBodiedExtensionRendererView, setShowBodiedExtensionRendererView, pluginInjectionApi, hideConfigureLabel, }: LozengeComponentProps) => jsx.JSX.Element;
29
30
  export {};
@@ -9,6 +9,7 @@ import type { Node as PmNode } from '@atlaskit/editor-prosemirror/model';
9
9
  import type { ExtensionsPluginInjectionAPI } from '../../types';
10
10
  export interface Props {
11
11
  customContainerStyles?: CSSProperties;
12
+ hideConfigureLabel?: boolean;
12
13
  isBodiedMacro?: boolean;
13
14
  isNodeHovered?: boolean;
14
15
  isNodeNested?: boolean;
@@ -35,6 +35,7 @@ export interface State {
35
35
  activeChildIndex?: number;
36
36
  extensionHandlersFromProvider?: ExtensionHandlers;
37
37
  extensionProvider?: ExtensionProvider;
38
+ hideConfigureLabel?: boolean;
38
39
  isNodeHovered?: boolean;
39
40
  showBodiedExtensionRendererView?: boolean;
40
41
  }
@@ -19,6 +19,7 @@ type Props = {
19
19
  eventDispatcher?: EventDispatcher;
20
20
  getPos: () => number | undefined;
21
21
  handleContentDOMRef: (node: HTMLElement | null) => void;
22
+ hideConfigureLabel?: boolean;
22
23
  isLivePageViewMode?: boolean;
23
24
  isNodeHovered?: boolean;
24
25
  isNodeNested?: boolean;