@atlaskit/editor-common 111.12.2 → 111.12.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 (31) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cjs/ai-messages/ai-suggestions.js +79 -0
  3. package/dist/cjs/ai-messages/index.js +8 -1
  4. package/dist/cjs/extensibility/extensionNodeView.js +22 -3
  5. package/dist/cjs/monitoring/error.js +1 -1
  6. package/dist/cjs/node-anchor/node-anchor-provider.js +14 -0
  7. package/dist/cjs/preset/core-plugin/index.js +40 -8
  8. package/dist/cjs/ui/DropList/index.js +1 -1
  9. package/dist/es2019/ai-messages/ai-suggestions.js +73 -0
  10. package/dist/es2019/ai-messages/index.js +2 -1
  11. package/dist/es2019/extensibility/extensionNodeView.js +22 -3
  12. package/dist/es2019/monitoring/error.js +1 -1
  13. package/dist/es2019/node-anchor/node-anchor-provider.js +12 -0
  14. package/dist/es2019/preset/core-plugin/index.js +40 -8
  15. package/dist/es2019/ui/DropList/index.js +1 -1
  16. package/dist/esm/ai-messages/ai-suggestions.js +73 -0
  17. package/dist/esm/ai-messages/index.js +2 -1
  18. package/dist/esm/extensibility/extensionNodeView.js +22 -3
  19. package/dist/esm/monitoring/error.js +1 -1
  20. package/dist/esm/node-anchor/node-anchor-provider.js +14 -0
  21. package/dist/esm/preset/core-plugin/index.js +40 -8
  22. package/dist/esm/ui/DropList/index.js +1 -1
  23. package/dist/types/ai-messages/ai-suggestions.d.ts +72 -0
  24. package/dist/types/ai-messages/index.d.ts +1 -0
  25. package/dist/types/extensibility/extensionNodeView.d.ts +4 -0
  26. package/dist/types/node-anchor/node-anchor-provider.d.ts +1 -0
  27. package/dist/types-ts4.5/ai-messages/ai-suggestions.d.ts +72 -0
  28. package/dist/types-ts4.5/ai-messages/index.d.ts +1 -0
  29. package/dist/types-ts4.5/extensibility/extensionNodeView.d.ts +4 -0
  30. package/dist/types-ts4.5/node-anchor/node-anchor-provider.d.ts +1 -0
  31. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 111.12.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`27ceb3789dbe8`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/27ceb3789dbe8) -
8
+ [ux] Fix initial drag handle / create position incorrect bug
9
+ - [`bb6a1522425ff`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bb6a1522425ff) -
10
+ [ux] Fix layoutshift in bodiedExtension layout shift
11
+ - Updated dependencies
12
+
3
13
  ## 111.12.2
4
14
 
5
15
  ### Patch Changes
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.aiSuggestionsMessages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var aiSuggestionsMessages = exports.aiSuggestionsMessages = (0, _reactIntlNext.defineMessages)({
9
+ suggestionsToolbarButtonLabel: {
10
+ id: 'fabric.editor.ai.suggestions.toolbarButton.label.non-final',
11
+ defaultMessage: 'Suggestions',
12
+ description: 'Label for the suggestions toolbar button'
13
+ },
14
+ suggestionsToolbarButtonLoadingLabel: {
15
+ id: 'fabric.editor.ai.suggestions.toolbarButton.loadingLabel.non-final',
16
+ defaultMessage: 'Loading',
17
+ description: 'Label for the suggestions toolbar button when loading'
18
+ },
19
+ suggestionsToolbarButtonReadyLabel: {
20
+ id: 'fabric.editor.ai.suggestions.toolbarButton.readyLabel.non-final',
21
+ defaultMessage: 'View',
22
+ description: 'Label for the suggestions toolbar button when ready'
23
+ },
24
+ suggestionsToolbarButtonErrorLabel: {
25
+ id: 'fabric.editor.ai.suggestions.toolbarButton.errorLabel.non-final',
26
+ defaultMessage: 'Retry',
27
+ description: 'Label for the suggestions toolbar button when error'
28
+ },
29
+ previewLabel: {
30
+ id: 'fabric.editor.ai.suggestions.stagingArea.previewLabel.non-final',
31
+ defaultMessage: 'Preview',
32
+ description: 'The section title displayed for the AI suggestions staging area'
33
+ },
34
+ viewLabel: {
35
+ id: 'fabric.editor.ai.suggestions.stagingArea.viewLabel.non-final',
36
+ defaultMessage: 'View',
37
+ description: 'The section title displayed for the view switcher in the AI suggestions staging area'
38
+ },
39
+ titleLabel: {
40
+ id: 'fabric.editor.ai.suggestions.stagingArea.titleLabel.non-final',
41
+ defaultMessage: 'Title',
42
+ description: 'The section title displayed for the title in the AI suggestions staging area'
43
+ },
44
+ reviewNote: {
45
+ id: 'fabric.editor.ai.suggestions.stagingArea.reviewNote.non-final',
46
+ defaultMessage: 'Review • Only visible to you',
47
+ description: 'A note displayed within the title'
48
+ },
49
+ applyChangesButtonLabel: {
50
+ id: 'fabric.editor.ai.suggestions.stagingArea.applyChangesButtonLabel.non-final',
51
+ defaultMessage: 'Apply changes',
52
+ description: 'Label for the apply changes button in the AI suggestions staging area'
53
+ },
54
+ fetchSuggestionsButtonLabel: {
55
+ id: 'fabric.editor.ai.suggestions.stagingArea.fetchSuggestionsButtonLabel.non-final',
56
+ defaultMessage: 'Fetch suggestions',
57
+ description: 'Label for the fetch suggestions button in the AI suggestions staging area'
58
+ },
59
+ fetchSuggestionsButtonLoadingLabel: {
60
+ id: 'fabric.editor.ai.suggestions.stagingArea.fetchSuggestionsButtonLoadingLabel.non-final',
61
+ defaultMessage: 'Loading…',
62
+ description: 'Label for the fetch suggestions button when loading'
63
+ },
64
+ originalViewLabel: {
65
+ id: 'fabric.editor.ai.suggestions.stagingArea.originalViewLabel.non-final',
66
+ defaultMessage: 'Original • View only',
67
+ description: 'Label for the original view in the AI suggestions staging area'
68
+ },
69
+ suggestedLabel: {
70
+ id: 'fabric.editor.ai.suggestions.stagingArea.suggestedLabel.non-final',
71
+ defaultMessage: 'Suggested',
72
+ description: 'Suggestion text displayed under the original view title'
73
+ },
74
+ suggestionsLabel: {
75
+ id: 'fabric.editor.ai.suggestions.stagingArea.suggestionsLabel.non-final',
76
+ defaultMessage: 'Suggestions',
77
+ description: 'Label for the suggestions section in the AI suggestions staging area'
78
+ }
79
+ });
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "aiProactiveTransformMessages", {
57
57
  return _aiProactiveTransform.aiProactiveTransformMessages;
58
58
  }
59
59
  });
60
+ Object.defineProperty(exports, "aiSuggestionsMessages", {
61
+ enumerable: true,
62
+ get: function get() {
63
+ return _aiSuggestions.aiSuggestionsMessages;
64
+ }
65
+ });
60
66
  var _aiConfigItems = require("./ai-config-items");
61
67
  var _aiDefinitions = require("./ai-definitions");
62
68
  var _aiExperienceApplication = require("./ai-experience-application");
@@ -65,4 +71,5 @@ var _aiLanguages = require("./ai-languages");
65
71
  var _aiProactive = require("./ai-proactive");
66
72
  var _ai = require("./ai");
67
73
  var _aiProactiveSetting = require("./ai-proactive-setting");
68
- var _aiProactiveTransform = require("./ai-proactive-transform");
74
+ var _aiProactiveTransform = require("./ai-proactive-transform");
75
+ var _aiSuggestions = require("./ai-suggestions");
@@ -14,6 +14,7 @@ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
14
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
15
  var _react = _interopRequireDefault(require("react"));
16
16
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
17
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
17
18
  var _reactNodeView = _interopRequireDefault(require("../react-node-view"));
18
19
  var _Extension = require("./Extension");
19
20
  var _ExtensionNodeWrapper = require("./ExtensionNodeWrapper");
@@ -80,13 +81,31 @@ var ExtensionNode = exports.ExtensionNode = /*#__PURE__*/function (_ReactNodeVie
80
81
  }, {
81
82
  key: "getContentDOM",
82
83
  value: function getContentDOM() {
84
+ var _this$reactComponentP3;
83
85
  if (this.node.isInline) {
84
86
  return;
85
87
  }
86
- var dom = document.createElement('div');
87
- dom.className = "".concat(this.node.type.name, "-content-dom-wrapper");
88
+ var contentDomWrapper = document.createElement('div');
89
+ contentDomWrapper.className = "".concat(this.node.type.name, "-content-dom-wrapper");
90
+ var isBodiedExtension = this.node.type.name === 'bodiedExtension';
91
+ var showMacroInteractionDesignUpdates = (_this$reactComponentP3 = this.reactComponentProps) === null || _this$reactComponentP3 === void 0 || (_this$reactComponentP3 = _this$reactComponentP3.macroInteractionDesignFeatureFlags) === null || _this$reactComponentP3 === void 0 ? void 0 : _this$reactComponentP3.showMacroInteractionDesignUpdates;
92
+ if (isBodiedExtension && showMacroInteractionDesignUpdates && (0, _expValEquals.expValEquals)('platform_editor_bodiedextension_layoutshift_fix', 'isEnabled', true)) {
93
+ // Create outer wrapper to hold space for the lozenge
94
+ var outerWrapper = document.createElement('div');
95
+ outerWrapper.className = "".concat(this.node.type.name, "-content-outer-wrapper");
96
+
97
+ // Create inner wrapper to position inner content
98
+ var innerWrapper = document.createElement('div');
99
+ innerWrapper.className = "".concat(this.node.type.name, "-content-inner-wrapper");
100
+ innerWrapper.appendChild(contentDomWrapper);
101
+ outerWrapper.appendChild(innerWrapper);
102
+ return {
103
+ dom: outerWrapper,
104
+ contentDOM: contentDomWrapper
105
+ };
106
+ }
88
107
  return {
89
- dom: dom
108
+ dom: contentDomWrapper
90
109
  };
91
110
  }
92
111
  }, {
@@ -19,7 +19,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
19
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" != _typeof(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); }
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 = "111.12.1";
22
+ var packageVersion = "0.0.0-development";
23
23
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
24
24
  // Remove URL as it has UGC
25
25
  // Ignored via go/ees007
@@ -89,6 +89,20 @@ var NodeAnchorProvider = exports.NodeAnchorProvider = /*#__PURE__*/function () {
89
89
  }
90
90
  return this.cache.get(node);
91
91
  }
92
+ }, {
93
+ key: "setIdForNode",
94
+ value: function setIdForNode(node, id) {
95
+ // [FEATURE FLAG: platform_editor_fix_node_anchor_dom_cache]
96
+ // This method is part of the fix to prevent drag handle misalignment.
97
+ // To clean up: remove the feature flag check, keep the method body
98
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_fix_node_anchor_dom_cache')) {
99
+ return;
100
+ }
101
+ if (this.limitedMode) {
102
+ return;
103
+ }
104
+ this.cache.set(node, id);
105
+ }
92
106
 
93
107
  // After set to limited mode, we clear the cache to free up memory
94
108
  // and prevent further ids from being generated
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.corePlugin = void 0;
7
7
  var _model = require("@atlaskit/editor-prosemirror/model");
8
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
8
9
  var _nodeAnchorProvider = require("../../node-anchor/node-anchor-provider");
9
10
  var _processRawValue = require("../../utils/processRawValue");
10
11
  var _editorCommands = require("../editor-commands");
@@ -151,15 +152,46 @@ var corePlugin = exports.corePlugin = function corePlugin(_ref) {
151
152
  if (pos < 0) {
152
153
  return undefined;
153
154
  }
154
- var generatedId = nodeIdProvider.getOrGenerateId(node, pos);
155
- if (generatedId) {
156
- return generatedId;
157
- }
158
- var nodeDOM = view.nodeDOM(pos);
159
- if (nodeDOM instanceof HTMLElement) {
160
- return nodeDOM.getAttribute('data-node-anchor') || undefined;
155
+
156
+ // [FEATURE FLAG: platform_editor_fix_node_anchor_dom_cache]
157
+ // Fixes drag handle misalignment on first focus after clicking from title
158
+ // by checking DOM for existing anchor before generating a new ID with collision suffix.
159
+ // To clean up: remove if-else block, keep only flag-on behavior (lines 217-229), remove old behavior (lines 231-238)
160
+ if ((0, _platformFeatureFlags.fg)('platform_editor_fix_node_anchor_dom_cache')) {
161
+ // Check DOM first to avoid generating a new ID with a collision suffix
162
+ // when the DOM already has a valid anchor. This prevents misalignment
163
+ // of drag handles on first focus after clicking from the title.
164
+ var nodeDOM = view.nodeDOM(pos);
165
+ if (nodeDOM instanceof HTMLElement) {
166
+ var domAnchor = nodeDOM.getAttribute('data-node-anchor');
167
+ if (domAnchor) {
168
+ // Cache the DOM anchor for this node to maintain consistency
169
+ // This ensures subsequent calls return the same anchor
170
+ nodeIdProvider.setIdForNode(node, domAnchor);
171
+ return domAnchor;
172
+ }
173
+ }
174
+
175
+ // Only generate a new ID if DOM doesn't have one
176
+ var generatedId = nodeIdProvider.getOrGenerateId(node, pos);
177
+ if (generatedId) {
178
+ return generatedId;
179
+ }
180
+ return undefined;
181
+ } else {
182
+ // OLD BEHAVIOR (to be removed when flag is cleaned up)
183
+ // This approach can generate incorrect IDs with collision suffixes when
184
+ // the DOM already has a valid anchor, causing drag handle misalignment
185
+ var _generatedId = nodeIdProvider.getOrGenerateId(node, pos);
186
+ if (_generatedId) {
187
+ return _generatedId;
188
+ }
189
+ var _nodeDOM = view.nodeDOM(pos);
190
+ if (_nodeDOM instanceof HTMLElement) {
191
+ return _nodeDOM.getAttribute('data-node-anchor') || undefined;
192
+ }
193
+ return undefined;
161
194
  }
162
- return undefined;
163
195
  }
164
196
  }
165
197
  };
@@ -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 = "111.12.1";
27
+ var packageVersion = "0.0.0-development";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -0,0 +1,73 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const aiSuggestionsMessages = defineMessages({
3
+ suggestionsToolbarButtonLabel: {
4
+ id: 'fabric.editor.ai.suggestions.toolbarButton.label.non-final',
5
+ defaultMessage: 'Suggestions',
6
+ description: 'Label for the suggestions toolbar button'
7
+ },
8
+ suggestionsToolbarButtonLoadingLabel: {
9
+ id: 'fabric.editor.ai.suggestions.toolbarButton.loadingLabel.non-final',
10
+ defaultMessage: 'Loading',
11
+ description: 'Label for the suggestions toolbar button when loading'
12
+ },
13
+ suggestionsToolbarButtonReadyLabel: {
14
+ id: 'fabric.editor.ai.suggestions.toolbarButton.readyLabel.non-final',
15
+ defaultMessage: 'View',
16
+ description: 'Label for the suggestions toolbar button when ready'
17
+ },
18
+ suggestionsToolbarButtonErrorLabel: {
19
+ id: 'fabric.editor.ai.suggestions.toolbarButton.errorLabel.non-final',
20
+ defaultMessage: 'Retry',
21
+ description: 'Label for the suggestions toolbar button when error'
22
+ },
23
+ previewLabel: {
24
+ id: 'fabric.editor.ai.suggestions.stagingArea.previewLabel.non-final',
25
+ defaultMessage: 'Preview',
26
+ description: 'The section title displayed for the AI suggestions staging area'
27
+ },
28
+ viewLabel: {
29
+ id: 'fabric.editor.ai.suggestions.stagingArea.viewLabel.non-final',
30
+ defaultMessage: 'View',
31
+ description: 'The section title displayed for the view switcher in the AI suggestions staging area'
32
+ },
33
+ titleLabel: {
34
+ id: 'fabric.editor.ai.suggestions.stagingArea.titleLabel.non-final',
35
+ defaultMessage: 'Title',
36
+ description: 'The section title displayed for the title in the AI suggestions staging area'
37
+ },
38
+ reviewNote: {
39
+ id: 'fabric.editor.ai.suggestions.stagingArea.reviewNote.non-final',
40
+ defaultMessage: 'Review • Only visible to you',
41
+ description: 'A note displayed within the title'
42
+ },
43
+ applyChangesButtonLabel: {
44
+ id: 'fabric.editor.ai.suggestions.stagingArea.applyChangesButtonLabel.non-final',
45
+ defaultMessage: 'Apply changes',
46
+ description: 'Label for the apply changes button in the AI suggestions staging area'
47
+ },
48
+ fetchSuggestionsButtonLabel: {
49
+ id: 'fabric.editor.ai.suggestions.stagingArea.fetchSuggestionsButtonLabel.non-final',
50
+ defaultMessage: 'Fetch suggestions',
51
+ description: 'Label for the fetch suggestions button in the AI suggestions staging area'
52
+ },
53
+ fetchSuggestionsButtonLoadingLabel: {
54
+ id: 'fabric.editor.ai.suggestions.stagingArea.fetchSuggestionsButtonLoadingLabel.non-final',
55
+ defaultMessage: 'Loading…',
56
+ description: 'Label for the fetch suggestions button when loading'
57
+ },
58
+ originalViewLabel: {
59
+ id: 'fabric.editor.ai.suggestions.stagingArea.originalViewLabel.non-final',
60
+ defaultMessage: 'Original • View only',
61
+ description: 'Label for the original view in the AI suggestions staging area'
62
+ },
63
+ suggestedLabel: {
64
+ id: 'fabric.editor.ai.suggestions.stagingArea.suggestedLabel.non-final',
65
+ defaultMessage: 'Suggested',
66
+ description: 'Suggestion text displayed under the original view title'
67
+ },
68
+ suggestionsLabel: {
69
+ id: 'fabric.editor.ai.suggestions.stagingArea.suggestionsLabel.non-final',
70
+ defaultMessage: 'Suggestions',
71
+ description: 'Label for the suggestions section in the AI suggestions staging area'
72
+ }
73
+ });
@@ -9,4 +9,5 @@ export { aiLanguageMessages } from './ai-languages';
9
9
  export { aiProactiveMessages } from './ai-proactive';
10
10
  export { aiMessages } from './ai';
11
11
  export { aiProactiveSettingMessages } from './ai-proactive-setting';
12
- export { aiProactiveTransformMessages } from './ai-proactive-transform';
12
+ export { aiProactiveTransformMessages } from './ai-proactive-transform';
13
+ export { aiSuggestionsMessages } from './ai-suggestions';
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
4
  import ReactNodeView from '../react-node-view';
4
5
  import { Extension } from './Extension';
5
6
  import { ExtensionNodeWrapper } from './ExtensionNodeWrapper';
@@ -50,13 +51,31 @@ export class ExtensionNode extends ReactNodeView {
50
51
  return event.target instanceof HTMLInputElement;
51
52
  }
52
53
  getContentDOM() {
54
+ var _this$reactComponentP4, _this$reactComponentP5;
53
55
  if (this.node.isInline) {
54
56
  return;
55
57
  }
56
- const dom = document.createElement('div');
57
- dom.className = `${this.node.type.name}-content-dom-wrapper`;
58
+ const contentDomWrapper = document.createElement('div');
59
+ contentDomWrapper.className = `${this.node.type.name}-content-dom-wrapper`;
60
+ const isBodiedExtension = this.node.type.name === 'bodiedExtension';
61
+ const showMacroInteractionDesignUpdates = (_this$reactComponentP4 = this.reactComponentProps) === null || _this$reactComponentP4 === void 0 ? void 0 : (_this$reactComponentP5 = _this$reactComponentP4.macroInteractionDesignFeatureFlags) === null || _this$reactComponentP5 === void 0 ? void 0 : _this$reactComponentP5.showMacroInteractionDesignUpdates;
62
+ if (isBodiedExtension && showMacroInteractionDesignUpdates && expValEquals('platform_editor_bodiedextension_layoutshift_fix', 'isEnabled', true)) {
63
+ // Create outer wrapper to hold space for the lozenge
64
+ const outerWrapper = document.createElement('div');
65
+ outerWrapper.className = `${this.node.type.name}-content-outer-wrapper`;
66
+
67
+ // Create inner wrapper to position inner content
68
+ const innerWrapper = document.createElement('div');
69
+ innerWrapper.className = `${this.node.type.name}-content-inner-wrapper`;
70
+ innerWrapper.appendChild(contentDomWrapper);
71
+ outerWrapper.appendChild(innerWrapper);
72
+ return {
73
+ dom: outerWrapper,
74
+ contentDOM: contentDomWrapper
75
+ };
76
+ }
58
77
  return {
59
- dom
78
+ dom: contentDomWrapper
60
79
  };
61
80
  }
62
81
  render(props, forwardRef) {
@@ -4,7 +4,7 @@ import { isFedRamp } from './environment';
4
4
  import { normaliseSentryBreadcrumbs, SERIALIZABLE_ATTRIBUTES } from './normalise-sentry-breadcrumbs';
5
5
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
6
6
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
7
- const packageVersion = "111.12.1";
7
+ const packageVersion = "0.0.0-development";
8
8
  const sanitiseSentryEvents = (data, _hint) => {
9
9
  // Remove URL as it has UGC
10
10
  // Ignored via go/ees007
@@ -68,6 +68,18 @@ export class NodeAnchorProvider {
68
68
  }
69
69
  return this.cache.get(node);
70
70
  }
71
+ setIdForNode(node, id) {
72
+ // [FEATURE FLAG: platform_editor_fix_node_anchor_dom_cache]
73
+ // This method is part of the fix to prevent drag handle misalignment.
74
+ // To clean up: remove the feature flag check, keep the method body
75
+ if (!fg('platform_editor_fix_node_anchor_dom_cache')) {
76
+ return;
77
+ }
78
+ if (this.limitedMode) {
79
+ return;
80
+ }
81
+ this.cache.set(node, id);
82
+ }
71
83
 
72
84
  // After set to limited mode, we clear the cache to free up memory
73
85
  // and prevent further ids from being generated
@@ -1,4 +1,5 @@
1
1
  import { Node } from '@atlaskit/editor-prosemirror/model';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { getNodeIdProvider } from '../../node-anchor/node-anchor-provider';
3
4
  import { processRawFragmentValue, processRawValue, processRawValueWithoutValidation } from '../../utils/processRawValue';
4
5
  import { editorCommandToPMCommand } from '../editor-commands';
@@ -153,15 +154,46 @@ export const corePlugin = ({
153
154
  if (pos < 0) {
154
155
  return undefined;
155
156
  }
156
- const generatedId = nodeIdProvider.getOrGenerateId(node, pos);
157
- if (generatedId) {
158
- return generatedId;
159
- }
160
- const nodeDOM = view.nodeDOM(pos);
161
- if (nodeDOM instanceof HTMLElement) {
162
- return nodeDOM.getAttribute('data-node-anchor') || undefined;
157
+
158
+ // [FEATURE FLAG: platform_editor_fix_node_anchor_dom_cache]
159
+ // Fixes drag handle misalignment on first focus after clicking from title
160
+ // by checking DOM for existing anchor before generating a new ID with collision suffix.
161
+ // To clean up: remove if-else block, keep only flag-on behavior (lines 217-229), remove old behavior (lines 231-238)
162
+ if (fg('platform_editor_fix_node_anchor_dom_cache')) {
163
+ // Check DOM first to avoid generating a new ID with a collision suffix
164
+ // when the DOM already has a valid anchor. This prevents misalignment
165
+ // of drag handles on first focus after clicking from the title.
166
+ const nodeDOM = view.nodeDOM(pos);
167
+ if (nodeDOM instanceof HTMLElement) {
168
+ const domAnchor = nodeDOM.getAttribute('data-node-anchor');
169
+ if (domAnchor) {
170
+ // Cache the DOM anchor for this node to maintain consistency
171
+ // This ensures subsequent calls return the same anchor
172
+ nodeIdProvider.setIdForNode(node, domAnchor);
173
+ return domAnchor;
174
+ }
175
+ }
176
+
177
+ // Only generate a new ID if DOM doesn't have one
178
+ const generatedId = nodeIdProvider.getOrGenerateId(node, pos);
179
+ if (generatedId) {
180
+ return generatedId;
181
+ }
182
+ return undefined;
183
+ } else {
184
+ // OLD BEHAVIOR (to be removed when flag is cleaned up)
185
+ // This approach can generate incorrect IDs with collision suffixes when
186
+ // the DOM already has a valid anchor, causing drag handle misalignment
187
+ const generatedId = nodeIdProvider.getOrGenerateId(node, pos);
188
+ if (generatedId) {
189
+ return generatedId;
190
+ }
191
+ const nodeDOM = view.nodeDOM(pos);
192
+ if (nodeDOM instanceof HTMLElement) {
193
+ return nodeDOM.getAttribute('data-node-anchor') || undefined;
194
+ }
195
+ return undefined;
163
196
  }
164
- return undefined;
165
197
  }
166
198
  }
167
199
  };
@@ -14,7 +14,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
14
14
  import { fg } from '@atlaskit/platform-feature-flags';
15
15
  import Layer from '../Layer';
16
16
  const packageName = "@atlaskit/editor-common";
17
- const packageVersion = "111.12.1";
17
+ const packageVersion = "0.0.0-development";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -0,0 +1,73 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export var aiSuggestionsMessages = defineMessages({
3
+ suggestionsToolbarButtonLabel: {
4
+ id: 'fabric.editor.ai.suggestions.toolbarButton.label.non-final',
5
+ defaultMessage: 'Suggestions',
6
+ description: 'Label for the suggestions toolbar button'
7
+ },
8
+ suggestionsToolbarButtonLoadingLabel: {
9
+ id: 'fabric.editor.ai.suggestions.toolbarButton.loadingLabel.non-final',
10
+ defaultMessage: 'Loading',
11
+ description: 'Label for the suggestions toolbar button when loading'
12
+ },
13
+ suggestionsToolbarButtonReadyLabel: {
14
+ id: 'fabric.editor.ai.suggestions.toolbarButton.readyLabel.non-final',
15
+ defaultMessage: 'View',
16
+ description: 'Label for the suggestions toolbar button when ready'
17
+ },
18
+ suggestionsToolbarButtonErrorLabel: {
19
+ id: 'fabric.editor.ai.suggestions.toolbarButton.errorLabel.non-final',
20
+ defaultMessage: 'Retry',
21
+ description: 'Label for the suggestions toolbar button when error'
22
+ },
23
+ previewLabel: {
24
+ id: 'fabric.editor.ai.suggestions.stagingArea.previewLabel.non-final',
25
+ defaultMessage: 'Preview',
26
+ description: 'The section title displayed for the AI suggestions staging area'
27
+ },
28
+ viewLabel: {
29
+ id: 'fabric.editor.ai.suggestions.stagingArea.viewLabel.non-final',
30
+ defaultMessage: 'View',
31
+ description: 'The section title displayed for the view switcher in the AI suggestions staging area'
32
+ },
33
+ titleLabel: {
34
+ id: 'fabric.editor.ai.suggestions.stagingArea.titleLabel.non-final',
35
+ defaultMessage: 'Title',
36
+ description: 'The section title displayed for the title in the AI suggestions staging area'
37
+ },
38
+ reviewNote: {
39
+ id: 'fabric.editor.ai.suggestions.stagingArea.reviewNote.non-final',
40
+ defaultMessage: 'Review • Only visible to you',
41
+ description: 'A note displayed within the title'
42
+ },
43
+ applyChangesButtonLabel: {
44
+ id: 'fabric.editor.ai.suggestions.stagingArea.applyChangesButtonLabel.non-final',
45
+ defaultMessage: 'Apply changes',
46
+ description: 'Label for the apply changes button in the AI suggestions staging area'
47
+ },
48
+ fetchSuggestionsButtonLabel: {
49
+ id: 'fabric.editor.ai.suggestions.stagingArea.fetchSuggestionsButtonLabel.non-final',
50
+ defaultMessage: 'Fetch suggestions',
51
+ description: 'Label for the fetch suggestions button in the AI suggestions staging area'
52
+ },
53
+ fetchSuggestionsButtonLoadingLabel: {
54
+ id: 'fabric.editor.ai.suggestions.stagingArea.fetchSuggestionsButtonLoadingLabel.non-final',
55
+ defaultMessage: 'Loading…',
56
+ description: 'Label for the fetch suggestions button when loading'
57
+ },
58
+ originalViewLabel: {
59
+ id: 'fabric.editor.ai.suggestions.stagingArea.originalViewLabel.non-final',
60
+ defaultMessage: 'Original • View only',
61
+ description: 'Label for the original view in the AI suggestions staging area'
62
+ },
63
+ suggestedLabel: {
64
+ id: 'fabric.editor.ai.suggestions.stagingArea.suggestedLabel.non-final',
65
+ defaultMessage: 'Suggested',
66
+ description: 'Suggestion text displayed under the original view title'
67
+ },
68
+ suggestionsLabel: {
69
+ id: 'fabric.editor.ai.suggestions.stagingArea.suggestionsLabel.non-final',
70
+ defaultMessage: 'Suggestions',
71
+ description: 'Label for the suggestions section in the AI suggestions staging area'
72
+ }
73
+ });
@@ -9,4 +9,5 @@ export { aiLanguageMessages } from './ai-languages';
9
9
  export { aiProactiveMessages } from './ai-proactive';
10
10
  export { aiMessages } from './ai';
11
11
  export { aiProactiveSettingMessages } from './ai-proactive-setting';
12
- export { aiProactiveTransformMessages } from './ai-proactive-transform';
12
+ export { aiProactiveTransformMessages } from './ai-proactive-transform';
13
+ export { aiSuggestionsMessages } from './ai-suggestions';
@@ -9,6 +9,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
9
9
  function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
10
10
  import React from 'react';
11
11
  import { fg } from '@atlaskit/platform-feature-flags';
12
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
12
13
  import ReactNodeView from '../react-node-view';
13
14
  import { Extension } from './Extension';
14
15
  import { ExtensionNodeWrapper } from './ExtensionNodeWrapper';
@@ -72,13 +73,31 @@ export var ExtensionNode = /*#__PURE__*/function (_ReactNodeView) {
72
73
  }, {
73
74
  key: "getContentDOM",
74
75
  value: function getContentDOM() {
76
+ var _this$reactComponentP3;
75
77
  if (this.node.isInline) {
76
78
  return;
77
79
  }
78
- var dom = document.createElement('div');
79
- dom.className = "".concat(this.node.type.name, "-content-dom-wrapper");
80
+ var contentDomWrapper = document.createElement('div');
81
+ contentDomWrapper.className = "".concat(this.node.type.name, "-content-dom-wrapper");
82
+ var isBodiedExtension = this.node.type.name === 'bodiedExtension';
83
+ var showMacroInteractionDesignUpdates = (_this$reactComponentP3 = this.reactComponentProps) === null || _this$reactComponentP3 === void 0 || (_this$reactComponentP3 = _this$reactComponentP3.macroInteractionDesignFeatureFlags) === null || _this$reactComponentP3 === void 0 ? void 0 : _this$reactComponentP3.showMacroInteractionDesignUpdates;
84
+ if (isBodiedExtension && showMacroInteractionDesignUpdates && expValEquals('platform_editor_bodiedextension_layoutshift_fix', 'isEnabled', true)) {
85
+ // Create outer wrapper to hold space for the lozenge
86
+ var outerWrapper = document.createElement('div');
87
+ outerWrapper.className = "".concat(this.node.type.name, "-content-outer-wrapper");
88
+
89
+ // Create inner wrapper to position inner content
90
+ var innerWrapper = document.createElement('div');
91
+ innerWrapper.className = "".concat(this.node.type.name, "-content-inner-wrapper");
92
+ innerWrapper.appendChild(contentDomWrapper);
93
+ outerWrapper.appendChild(innerWrapper);
94
+ return {
95
+ dom: outerWrapper,
96
+ contentDOM: contentDomWrapper
97
+ };
98
+ }
80
99
  return {
81
- dom: dom
100
+ dom: contentDomWrapper
82
101
  };
83
102
  }
84
103
  }, {
@@ -10,7 +10,7 @@ import { isFedRamp } from './environment';
10
10
  import { normaliseSentryBreadcrumbs, SERIALIZABLE_ATTRIBUTES } from './normalise-sentry-breadcrumbs';
11
11
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
12
12
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
13
- var packageVersion = "111.12.1";
13
+ var packageVersion = "0.0.0-development";
14
14
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
15
15
  // Remove URL as it has UGC
16
16
  // Ignored via go/ees007
@@ -83,6 +83,20 @@ export var NodeAnchorProvider = /*#__PURE__*/function () {
83
83
  }
84
84
  return this.cache.get(node);
85
85
  }
86
+ }, {
87
+ key: "setIdForNode",
88
+ value: function setIdForNode(node, id) {
89
+ // [FEATURE FLAG: platform_editor_fix_node_anchor_dom_cache]
90
+ // This method is part of the fix to prevent drag handle misalignment.
91
+ // To clean up: remove the feature flag check, keep the method body
92
+ if (!fg('platform_editor_fix_node_anchor_dom_cache')) {
93
+ return;
94
+ }
95
+ if (this.limitedMode) {
96
+ return;
97
+ }
98
+ this.cache.set(node, id);
99
+ }
86
100
 
87
101
  // After set to limited mode, we clear the cache to free up memory
88
102
  // and prevent further ids from being generated
@@ -1,4 +1,5 @@
1
1
  import { Node } from '@atlaskit/editor-prosemirror/model';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { getNodeIdProvider } from '../../node-anchor/node-anchor-provider';
3
4
  import { processRawFragmentValue, processRawValue, processRawValueWithoutValidation } from '../../utils/processRawValue';
4
5
  import { editorCommandToPMCommand } from '../editor-commands';
@@ -146,15 +147,46 @@ export var corePlugin = function corePlugin(_ref) {
146
147
  if (pos < 0) {
147
148
  return undefined;
148
149
  }
149
- var generatedId = nodeIdProvider.getOrGenerateId(node, pos);
150
- if (generatedId) {
151
- return generatedId;
152
- }
153
- var nodeDOM = view.nodeDOM(pos);
154
- if (nodeDOM instanceof HTMLElement) {
155
- return nodeDOM.getAttribute('data-node-anchor') || undefined;
150
+
151
+ // [FEATURE FLAG: platform_editor_fix_node_anchor_dom_cache]
152
+ // Fixes drag handle misalignment on first focus after clicking from title
153
+ // by checking DOM for existing anchor before generating a new ID with collision suffix.
154
+ // To clean up: remove if-else block, keep only flag-on behavior (lines 217-229), remove old behavior (lines 231-238)
155
+ if (fg('platform_editor_fix_node_anchor_dom_cache')) {
156
+ // Check DOM first to avoid generating a new ID with a collision suffix
157
+ // when the DOM already has a valid anchor. This prevents misalignment
158
+ // of drag handles on first focus after clicking from the title.
159
+ var nodeDOM = view.nodeDOM(pos);
160
+ if (nodeDOM instanceof HTMLElement) {
161
+ var domAnchor = nodeDOM.getAttribute('data-node-anchor');
162
+ if (domAnchor) {
163
+ // Cache the DOM anchor for this node to maintain consistency
164
+ // This ensures subsequent calls return the same anchor
165
+ nodeIdProvider.setIdForNode(node, domAnchor);
166
+ return domAnchor;
167
+ }
168
+ }
169
+
170
+ // Only generate a new ID if DOM doesn't have one
171
+ var generatedId = nodeIdProvider.getOrGenerateId(node, pos);
172
+ if (generatedId) {
173
+ return generatedId;
174
+ }
175
+ return undefined;
176
+ } else {
177
+ // OLD BEHAVIOR (to be removed when flag is cleaned up)
178
+ // This approach can generate incorrect IDs with collision suffixes when
179
+ // the DOM already has a valid anchor, causing drag handle misalignment
180
+ var _generatedId = nodeIdProvider.getOrGenerateId(node, pos);
181
+ if (_generatedId) {
182
+ return _generatedId;
183
+ }
184
+ var _nodeDOM = view.nodeDOM(pos);
185
+ if (_nodeDOM instanceof HTMLElement) {
186
+ return _nodeDOM.getAttribute('data-node-anchor') || undefined;
187
+ }
188
+ return undefined;
156
189
  }
157
- return undefined;
158
190
  }
159
191
  }
160
192
  };
@@ -21,7 +21,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
21
21
  import { fg } from '@atlaskit/platform-feature-flags';
22
22
  import Layer from '../Layer';
23
23
  var packageName = "@atlaskit/editor-common";
24
- var packageVersion = "111.12.1";
24
+ var packageVersion = "0.0.0-development";
25
25
  var halfFocusRing = 1;
26
26
  var dropOffset = '0, 8';
27
27
  var fadeIn = keyframes({
@@ -0,0 +1,72 @@
1
+ export declare const aiSuggestionsMessages: {
2
+ suggestionsToolbarButtonLabel: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ suggestionsToolbarButtonLoadingLabel: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ suggestionsToolbarButtonReadyLabel: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ suggestionsToolbarButtonErrorLabel: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ previewLabel: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ viewLabel: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ titleLabel: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ reviewNote: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ applyChangesButtonLabel: {
43
+ id: string;
44
+ defaultMessage: string;
45
+ description: string;
46
+ };
47
+ fetchSuggestionsButtonLabel: {
48
+ id: string;
49
+ defaultMessage: string;
50
+ description: string;
51
+ };
52
+ fetchSuggestionsButtonLoadingLabel: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ originalViewLabel: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ suggestedLabel: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ suggestionsLabel: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ };
@@ -7,3 +7,4 @@ export { aiProactiveMessages } from './ai-proactive';
7
7
  export { aiMessages } from './ai';
8
8
  export { aiProactiveSettingMessages } from './ai-proactive-setting';
9
9
  export { aiProactiveTransformMessages } from './ai-proactive-transform';
10
+ export { aiSuggestionsMessages } from './ai-suggestions';
@@ -41,6 +41,10 @@ export declare class ExtensionNode<AdditionalParams = unknown> extends ReactNode
41
41
  stopEvent(event: Event): boolean;
42
42
  getContentDOM(): {
43
43
  dom: HTMLDivElement;
44
+ contentDOM: HTMLDivElement;
45
+ } | {
46
+ dom: HTMLDivElement;
47
+ contentDOM?: undefined;
44
48
  } | undefined;
45
49
  render(props: {
46
50
  extensionHandlers: ExtensionHandlers;
@@ -12,6 +12,7 @@ export declare class NodeAnchorProvider {
12
12
  isLimitedMode(): boolean;
13
13
  getOrGenerateId(node: PMNode, pos: number): string | undefined;
14
14
  getIdForNode(node: PMNode): string | undefined;
15
+ setIdForNode(node: PMNode, id: string): void;
15
16
  setLimitedMode(): void;
16
17
  }
17
18
  export declare const getNodeIdProvider: (editorView: EditorView) => NodeAnchorProvider;
@@ -0,0 +1,72 @@
1
+ export declare const aiSuggestionsMessages: {
2
+ suggestionsToolbarButtonLabel: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ suggestionsToolbarButtonLoadingLabel: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ suggestionsToolbarButtonReadyLabel: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ suggestionsToolbarButtonErrorLabel: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ previewLabel: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ viewLabel: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ titleLabel: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ reviewNote: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ applyChangesButtonLabel: {
43
+ id: string;
44
+ defaultMessage: string;
45
+ description: string;
46
+ };
47
+ fetchSuggestionsButtonLabel: {
48
+ id: string;
49
+ defaultMessage: string;
50
+ description: string;
51
+ };
52
+ fetchSuggestionsButtonLoadingLabel: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ originalViewLabel: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ suggestedLabel: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ suggestionsLabel: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ };
@@ -7,3 +7,4 @@ export { aiProactiveMessages } from './ai-proactive';
7
7
  export { aiMessages } from './ai';
8
8
  export { aiProactiveSettingMessages } from './ai-proactive-setting';
9
9
  export { aiProactiveTransformMessages } from './ai-proactive-transform';
10
+ export { aiSuggestionsMessages } from './ai-suggestions';
@@ -41,6 +41,10 @@ export declare class ExtensionNode<AdditionalParams = unknown> extends ReactNode
41
41
  stopEvent(event: Event): boolean;
42
42
  getContentDOM(): {
43
43
  dom: HTMLDivElement;
44
+ contentDOM: HTMLDivElement;
45
+ } | {
46
+ dom: HTMLDivElement;
47
+ contentDOM?: undefined;
44
48
  } | undefined;
45
49
  render(props: {
46
50
  extensionHandlers: ExtensionHandlers;
@@ -12,6 +12,7 @@ export declare class NodeAnchorProvider {
12
12
  isLimitedMode(): boolean;
13
13
  getOrGenerateId(node: PMNode, pos: number): string | undefined;
14
14
  getIdForNode(node: PMNode): string | undefined;
15
+ setIdForNode(node: PMNode, id: string): void;
15
16
  setLimitedMode(): void;
16
17
  }
17
18
  export declare const getNodeIdProvider: (editorView: EditorView) => NodeAnchorProvider;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-common",
3
- "version": "111.12.2",
3
+ "version": "111.12.3",
4
4
  "description": "A package that contains common classes and components for editor and renderer",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -81,7 +81,7 @@
81
81
  "@atlaskit/task-decision": "^19.2.0",
82
82
  "@atlaskit/textfield": "^8.2.0",
83
83
  "@atlaskit/theme": "^21.0.0",
84
- "@atlaskit/tmp-editor-statsig": "^23.0.0",
84
+ "@atlaskit/tmp-editor-statsig": "^23.2.0",
85
85
  "@atlaskit/tokens": "^11.0.0",
86
86
  "@atlaskit/tooltip": "^20.14.0",
87
87
  "@atlaskit/width-detector": "^5.0.0",
@@ -267,6 +267,9 @@
267
267
  },
268
268
  "platform_editor_toolbar_aifc_placement_overridden": {
269
269
  "type": "boolean"
270
+ },
271
+ "platform_editor_fix_node_anchor_dom_cache": {
272
+ "type": "boolean"
270
273
  }
271
274
  }
272
275
  }