@atlaskit/editor-common 112.13.4 → 112.13.7

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 +27 -0
  2. package/dist/cjs/ai-messages/ai.js +46 -0
  3. package/dist/cjs/extensibility/Extension/Extension/index.js +6 -5
  4. package/dist/cjs/extensibility/Extension/InlineExtension/index.js +6 -5
  5. package/dist/cjs/extensibility/Extension/Lozenge/EditToggle.js +5 -4
  6. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionLabel.js +6 -4
  7. package/dist/cjs/extensibility/MultiBodiedExtension/index.js +6 -5
  8. package/dist/cjs/monitoring/error.js +1 -1
  9. package/dist/cjs/ui/DropList/index.js +1 -1
  10. package/dist/cjs/user-intent/UserIntentPopupWrapper.js +7 -13
  11. package/dist/es2019/ai-messages/ai.js +46 -0
  12. package/dist/es2019/extensibility/Extension/Extension/index.js +6 -5
  13. package/dist/es2019/extensibility/Extension/InlineExtension/index.js +6 -5
  14. package/dist/es2019/extensibility/Extension/Lozenge/EditToggle.js +5 -4
  15. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionLabel.js +6 -4
  16. package/dist/es2019/extensibility/MultiBodiedExtension/index.js +6 -5
  17. package/dist/es2019/monitoring/error.js +1 -1
  18. package/dist/es2019/ui/DropList/index.js +1 -1
  19. package/dist/es2019/user-intent/UserIntentPopupWrapper.js +7 -13
  20. package/dist/esm/ai-messages/ai.js +46 -0
  21. package/dist/esm/extensibility/Extension/Extension/index.js +6 -5
  22. package/dist/esm/extensibility/Extension/InlineExtension/index.js +6 -5
  23. package/dist/esm/extensibility/Extension/Lozenge/EditToggle.js +5 -4
  24. package/dist/esm/extensibility/Extension/Lozenge/ExtensionLabel.js +6 -4
  25. package/dist/esm/extensibility/MultiBodiedExtension/index.js +6 -5
  26. package/dist/esm/monitoring/error.js +1 -1
  27. package/dist/esm/ui/DropList/index.js +1 -1
  28. package/dist/esm/user-intent/UserIntentPopupWrapper.js +7 -13
  29. package/dist/types/ai-messages/ai.d.ts +128 -83
  30. package/dist/types-ts4.5/ai-messages/ai.d.ts +128 -83
  31. package/package.json +3 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 112.13.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [`3ab437cd78576`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/3ab437cd78576) -
8
+ Tidy feature flag `platform_editor_fix_popup_user_intent` which fixes a race condition in popup
9
+ user intent cleanup by deferring the reset with setTimeout
10
+ - Updated dependencies
11
+
12
+ ## 112.13.6
13
+
14
+ ### Patch Changes
15
+
16
+ - [`9ac8f29c7ac94`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9ac8f29c7ac94) -
17
+ Fix @atlassian/a11y/mouse-events-have-key-events violations in editor-common extensibility
18
+ components by adding no-op onFocus/onBlur handlers gated behind the
19
+ editor_a11y\_\_enghealth-46814_fy26 experiment. Affected files: EditToggle, ExtensionLabel,
20
+ Extension, InlineExtension, MultiBodiedExtension.
21
+ - Updated dependencies
22
+
23
+ ## 112.13.5
24
+
25
+ ### Patch Changes
26
+
27
+ - [`546c399f5932a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/546c399f5932a) -
28
+ smartlink toolbar - added action items for links
29
+
3
30
  ## 112.13.4
4
31
 
5
32
  ### Patch Changes
@@ -257,5 +257,51 @@ var aiMessages = exports.aiMessages = (0, _reactIntlNext.defineMessages)({
257
257
  id: 'fabric.editor.ai.config.item.blockMenuNestedMenu.title',
258
258
  defaultMessage: 'View more actions',
259
259
  description: 'Title for the nested menu in the block menu'
260
+ },
261
+ // Smartlink action messages
262
+ smartlinkListKeyTopics: {
263
+ id: 'fabric.editor.ai.smartlink.action.listKeyTopics',
264
+ defaultMessage: 'List key topics',
265
+ description: 'Action to list key topics from the linked content'
266
+ },
267
+ smartlinkListKeyThemes: {
268
+ id: 'fabric.editor.ai.smartlink.action.listKeyThemes',
269
+ defaultMessage: 'List key themes',
270
+ description: 'Action to list key themes from the linked content'
271
+ },
272
+ smartlinkExtractInsights: {
273
+ id: 'fabric.editor.ai.smartlink.action.extractInsights',
274
+ defaultMessage: 'Extract insights',
275
+ description: 'Action to extract insights from the linked content'
276
+ },
277
+ smartlinkExtractUserQuotes: {
278
+ id: 'fabric.editor.ai.smartlink.action.extractUserQuotes',
279
+ defaultMessage: 'Extract user quotes',
280
+ description: 'Action to extract user quotes from the linked content'
281
+ },
282
+ smartlinkAddDecisions: {
283
+ id: 'fabric.editor.ai.smartlink.action.addDecisions',
284
+ defaultMessage: 'Add decisions',
285
+ description: 'Action to add decisions from the linked content'
286
+ },
287
+ smartlinkDefineActionItems: {
288
+ id: 'fabric.editor.ai.smartlink.action.defineActionItems',
289
+ defaultMessage: 'Define action items',
290
+ description: 'Action to define action items from the linked content'
291
+ },
292
+ smartlinkSummarizeChanges: {
293
+ id: 'fabric.editor.ai.smartlink.action.summarizeChanges',
294
+ defaultMessage: 'Summarize changes',
295
+ description: 'Action to summarize changes in the linked content'
296
+ },
297
+ smartlinkAddRelatedWorkItems: {
298
+ id: 'fabric.editor.ai.smartlink.action.addRelatedWorkItems',
299
+ defaultMessage: 'Add related work items',
300
+ description: 'Action to add related work items from the linked content'
301
+ },
302
+ smartlinkListTodos: {
303
+ id: 'fabric.editor.ai.smartlink.action.listTodos',
304
+ defaultMessage: 'List to-dos',
305
+ description: 'Action to list to-dos from the linked content'
260
306
  }
261
307
  });
@@ -170,17 +170,18 @@ function ExtensionWithPluginState(props) {
170
170
  _styles2.wrapperStyleInheritedCursor, showMacroInteractionDesignUpdates && !isLivePageViewMode && (0, _expValEquals.expValEquals)('cc_editor_ttvc_release_bundle_one', 'extensionHoverRefactor', true) && hoverStyles]
171
171
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
172
172
  ,
173
- style: customContainerStyles
174
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
175
- ,
173
+ style: customContainerStyles,
176
174
  onMouseEnter: function onMouseEnter() {
177
175
  return handleMouseEvent(true);
178
176
  }
179
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
177
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also applied via .ak-editor-selected-node
178
+ // CSS on keyboard selection. No-ops here satisfy the rule without duplicating state updates.
180
179
  ,
180
+ onFocus: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
181
181
  onMouseLeave: function onMouseLeave() {
182
182
  return handleMouseEvent(false);
183
- }
183
+ },
184
+ onBlur: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
184
185
  }, (0, _react2.jsx)("div", {
185
186
  "data-testid": "extension-overflow-wrapper"
186
187
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
@@ -96,17 +96,18 @@ var InlineExtension = function InlineExtension(props) {
96
96
  _styles2.wrapperStyle, inlineWrapperStyles, showMacroInteractionDesignUpdates && !isLivePageViewMode && (0, _expValEquals.expValEquals)('cc_editor_ttvc_release_bundle_one', 'extensionHoverRefactor', true) && hoverStyles]
97
97
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
98
98
  ,
99
- className: classNames
100
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
101
- ,
99
+ className: classNames,
102
100
  onMouseEnter: function onMouseEnter() {
103
101
  return handleMouseEvent(true);
104
102
  }
105
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
103
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also accessible via keyboard selection.
104
+ // No-ops here satisfy the rule without duplicating state updates.
106
105
  ,
106
+ onFocus: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
107
107
  onMouseLeave: function onMouseLeave() {
108
108
  return handleMouseEvent(false);
109
- }
109
+ },
110
+ onBlur: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
110
111
  }, (0, _react2.jsx)("div", {
111
112
  css: _styles.overlay,
112
113
  className: "extension-overlay"
@@ -103,17 +103,18 @@ var EditToggle = exports.EditToggle = function EditToggle(_ref) {
103
103
  style: customContainerStyles
104
104
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
105
105
  ,
106
- className: "extension-edit-toggle-container"
107
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
108
- ,
106
+ className: "extension-edit-toggle-container",
109
107
  onMouseOver: function onMouseOver() {
110
108
  return setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(true);
111
109
  }
112
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
110
+ // @atlassian/a11y/mouse-events-have-key-events: keyboard focus is already handled by the
111
+ // inner <button>'s onFocus/onBlur. No-ops here satisfy the rule without duplicating state updates.
113
112
  ,
113
+ onFocus: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
114
114
  onMouseLeave: function onMouseLeave() {
115
115
  return setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(false);
116
116
  },
117
+ onBlur: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
117
118
  tabIndex: -1
118
119
  }, (0, _react2.jsx)("button", {
119
120
  type: "button",
@@ -172,17 +172,19 @@ var ExtensionLabel = exports.ExtensionLabel = function ExtensionLabel(_ref) {
172
172
  className: containerClassNames
173
173
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
174
174
  ,
175
- style: customContainerStyles
176
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
177
- ,
175
+ style: customContainerStyles,
178
176
  onMouseOver: function onMouseOver() {
179
177
  setIsNodeHovered === null || setIsNodeHovered === void 0 || setIsNodeHovered(true);
180
178
  }
181
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
179
+ // @atlassian/a11y/mouse-events-have-key-events: label visibility on keyboard focus is already
180
+ // handled via the .ak-editor-selected-node CSS class applied by ProseMirror on node selection.
181
+ // No-ops here satisfy the rule.
182
182
  ,
183
+ onFocus: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
183
184
  onMouseLeave: function onMouseLeave() {
184
185
  setIsNodeHovered === null || setIsNodeHovered === void 0 || setIsNodeHovered(false);
185
186
  },
187
+ onBlur: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
186
188
  "data-testid": "new-lozenge-container",
187
189
  contentEditable: false
188
190
  }, (0, _react.jsx)(_tooltip.default, {
@@ -216,17 +216,18 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
216
216
  "data-layout": node.attrs.layout
217
217
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
218
218
  ,
219
- style: mbeWrapperStyles
220
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
221
- ,
219
+ style: mbeWrapperStyles,
222
220
  onMouseEnter: function onMouseEnter() {
223
221
  return handleMouseEvent(true);
224
222
  }
225
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
223
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also applied via .ak-editor-selected-node
224
+ // CSS on keyboard selection. No-ops here satisfy the rule without duplicating state updates.
226
225
  ,
226
+ onFocus: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
227
227
  onMouseLeave: function onMouseLeave() {
228
228
  return handleMouseEvent(false);
229
- }
229
+ },
230
+ onBlur: (0, _expValEquals.expValEquals)('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
230
231
  }, (0, _react2.jsx)("div", {
231
232
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
232
233
  css: _styles.overlayStyles
@@ -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 = "112.13.3";
22
+ var packageVersion = "112.13.6";
23
23
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
24
24
  // Remove URL as it has UGC
25
25
  // 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 = "112.13.3";
27
+ var packageVersion = "112.13.6";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.UserIntentPopupWrapper = void 0;
7
7
  var _react = require("react");
8
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
8
  /**
10
9
  *
11
10
  * A wrapper for popups to signal popupOpen user intent
@@ -21,18 +20,13 @@ var UserIntentPopupWrapper = exports.UserIntentPopupWrapper = function UserInten
21
20
  return function () {
22
21
  var _api$userIntent2;
23
22
  if (userIntent === (api === null || api === void 0 || (_api$userIntent2 = api.userIntent) === null || _api$userIntent2 === void 0 || (_api$userIntent2 = _api$userIntent2.sharedState.currentState()) === null || _api$userIntent2 === void 0 ? void 0 : _api$userIntent2.currentUserIntent)) {
24
- if ((0, _platformFeatureFlags.fg)('platform_editor_fix_popup_user_intent')) {
25
- // Defer the reset to avoid interfering with ongoing ProseMirror transactions
26
- // This fixes a race condition where cleanup happens during a transaction
27
- // (e.g., during drag handle mouse over -> unmountDecorations -> flushSync)
28
- setTimeout(function () {
29
- var _api$userIntent3;
30
- api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$userIntent3 = api.userIntent) === null || _api$userIntent3 === void 0 ? void 0 : _api$userIntent3.commands.setCurrentUserIntent('default'));
31
- }, 0);
32
- } else {
33
- var _api$userIntent4;
34
- api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$userIntent4 = api.userIntent) === null || _api$userIntent4 === void 0 ? void 0 : _api$userIntent4.commands.setCurrentUserIntent('default'));
35
- }
23
+ // Defer the reset to avoid interfering with ongoing ProseMirror transactions
24
+ // This fixes a race condition where cleanup happens during a transaction
25
+ // (e.g., during drag handle mouse over -> unmountDecorations -> flushSync)
26
+ setTimeout(function () {
27
+ var _api$userIntent3;
28
+ api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$userIntent3 = api.userIntent) === null || _api$userIntent3 === void 0 ? void 0 : _api$userIntent3.commands.setCurrentUserIntent('default'));
29
+ }, 0);
36
30
  }
37
31
  };
38
32
 
@@ -251,5 +251,51 @@ export const aiMessages = defineMessages({
251
251
  id: 'fabric.editor.ai.config.item.blockMenuNestedMenu.title',
252
252
  defaultMessage: 'View more actions',
253
253
  description: 'Title for the nested menu in the block menu'
254
+ },
255
+ // Smartlink action messages
256
+ smartlinkListKeyTopics: {
257
+ id: 'fabric.editor.ai.smartlink.action.listKeyTopics',
258
+ defaultMessage: 'List key topics',
259
+ description: 'Action to list key topics from the linked content'
260
+ },
261
+ smartlinkListKeyThemes: {
262
+ id: 'fabric.editor.ai.smartlink.action.listKeyThemes',
263
+ defaultMessage: 'List key themes',
264
+ description: 'Action to list key themes from the linked content'
265
+ },
266
+ smartlinkExtractInsights: {
267
+ id: 'fabric.editor.ai.smartlink.action.extractInsights',
268
+ defaultMessage: 'Extract insights',
269
+ description: 'Action to extract insights from the linked content'
270
+ },
271
+ smartlinkExtractUserQuotes: {
272
+ id: 'fabric.editor.ai.smartlink.action.extractUserQuotes',
273
+ defaultMessage: 'Extract user quotes',
274
+ description: 'Action to extract user quotes from the linked content'
275
+ },
276
+ smartlinkAddDecisions: {
277
+ id: 'fabric.editor.ai.smartlink.action.addDecisions',
278
+ defaultMessage: 'Add decisions',
279
+ description: 'Action to add decisions from the linked content'
280
+ },
281
+ smartlinkDefineActionItems: {
282
+ id: 'fabric.editor.ai.smartlink.action.defineActionItems',
283
+ defaultMessage: 'Define action items',
284
+ description: 'Action to define action items from the linked content'
285
+ },
286
+ smartlinkSummarizeChanges: {
287
+ id: 'fabric.editor.ai.smartlink.action.summarizeChanges',
288
+ defaultMessage: 'Summarize changes',
289
+ description: 'Action to summarize changes in the linked content'
290
+ },
291
+ smartlinkAddRelatedWorkItems: {
292
+ id: 'fabric.editor.ai.smartlink.action.addRelatedWorkItems',
293
+ defaultMessage: 'Add related work items',
294
+ description: 'Action to add related work items from the linked content'
295
+ },
296
+ smartlinkListTodos: {
297
+ id: 'fabric.editor.ai.smartlink.action.listTodos',
298
+ defaultMessage: 'List to-dos',
299
+ description: 'Action to list to-dos from the linked content'
254
300
  }
255
301
  });
@@ -170,13 +170,14 @@ function ExtensionWithPluginState(props) {
170
170
  wrapperStyleInheritedCursor, showMacroInteractionDesignUpdates && !isLivePageViewMode && expValEquals('cc_editor_ttvc_release_bundle_one', 'extensionHoverRefactor', true) && hoverStyles]
171
171
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
172
172
  ,
173
- style: customContainerStyles
174
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
175
- ,
173
+ style: customContainerStyles,
176
174
  onMouseEnter: () => handleMouseEvent(true)
177
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
175
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also applied via .ak-editor-selected-node
176
+ // CSS on keyboard selection. No-ops here satisfy the rule without duplicating state updates.
178
177
  ,
179
- onMouseLeave: () => handleMouseEvent(false)
178
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
179
+ onMouseLeave: () => handleMouseEvent(false),
180
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined
180
181
  }, jsx("div", {
181
182
  "data-testid": "extension-overflow-wrapper"
182
183
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
@@ -90,13 +90,14 @@ const InlineExtension = props => {
90
90
  wrapperStyle, inlineWrapperStyles, showMacroInteractionDesignUpdates && !isLivePageViewMode && expValEquals('cc_editor_ttvc_release_bundle_one', 'extensionHoverRefactor', true) && hoverStyles]
91
91
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
92
92
  ,
93
- className: classNames
94
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
95
- ,
93
+ className: classNames,
96
94
  onMouseEnter: () => handleMouseEvent(true)
97
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
95
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also accessible via keyboard selection.
96
+ // No-ops here satisfy the rule without duplicating state updates.
98
97
  ,
99
- onMouseLeave: () => handleMouseEvent(false)
98
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
99
+ onMouseLeave: () => handleMouseEvent(false),
100
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined
100
101
  }, jsx("div", {
101
102
  css: overlay,
102
103
  className: "extension-overlay"
@@ -96,13 +96,14 @@ export const EditToggle = ({
96
96
  style: customContainerStyles
97
97
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
98
98
  ,
99
- className: "extension-edit-toggle-container"
100
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
101
- ,
99
+ className: "extension-edit-toggle-container",
102
100
  onMouseOver: () => setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(true)
103
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
101
+ // @atlassian/a11y/mouse-events-have-key-events: keyboard focus is already handled by the
102
+ // inner <button>'s onFocus/onBlur. No-ops here satisfy the rule without duplicating state updates.
104
103
  ,
104
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
105
105
  onMouseLeave: () => setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(false),
106
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
106
107
  tabIndex: -1
107
108
  }, jsx("button", {
108
109
  type: "button",
@@ -163,17 +163,19 @@ export const ExtensionLabel = ({
163
163
  className: containerClassNames
164
164
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
165
165
  ,
166
- style: customContainerStyles
167
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
168
- ,
166
+ style: customContainerStyles,
169
167
  onMouseOver: () => {
170
168
  setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(true);
171
169
  }
172
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
170
+ // @atlassian/a11y/mouse-events-have-key-events: label visibility on keyboard focus is already
171
+ // handled via the .ak-editor-selected-node CSS class applied by ProseMirror on node selection.
172
+ // No-ops here satisfy the rule.
173
173
  ,
174
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
174
175
  onMouseLeave: () => {
175
176
  setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(false);
176
177
  },
178
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
177
179
  "data-testid": "new-lozenge-container",
178
180
  contentEditable: false
179
181
  }, jsx(Tooltip, {
@@ -207,13 +207,14 @@ const MultiBodiedExtensionWithWidth = ({
207
207
  "data-layout": node.attrs.layout
208
208
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
209
209
  ,
210
- style: mbeWrapperStyles
211
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
212
- ,
210
+ style: mbeWrapperStyles,
213
211
  onMouseEnter: () => handleMouseEvent(true)
214
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
212
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also applied via .ak-editor-selected-node
213
+ // CSS on keyboard selection. No-ops here satisfy the rule without duplicating state updates.
215
214
  ,
216
- onMouseLeave: () => handleMouseEvent(false)
215
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
216
+ onMouseLeave: () => handleMouseEvent(false),
217
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined
217
218
  }, jsx("div", {
218
219
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
219
220
  css: overlayStyles
@@ -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 = "112.13.3";
7
+ const packageVersion = "112.13.6";
8
8
  const sanitiseSentryEvents = (data, _hint) => {
9
9
  // Remove URL as it has UGC
10
10
  // Ignored via go/ees007
@@ -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 = "112.13.3";
17
+ const packageVersion = "112.13.6";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -1,5 +1,4 @@
1
1
  import { useEffect } from 'react';
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
2
  /**
4
3
  *
5
4
  * A wrapper for popups to signal popupOpen user intent
@@ -15,18 +14,13 @@ export const UserIntentPopupWrapper = ({
15
14
  return () => {
16
15
  var _api$userIntent2, _api$userIntent2$shar;
17
16
  if (userIntent === (api === null || api === void 0 ? void 0 : (_api$userIntent2 = api.userIntent) === null || _api$userIntent2 === void 0 ? void 0 : (_api$userIntent2$shar = _api$userIntent2.sharedState.currentState()) === null || _api$userIntent2$shar === void 0 ? void 0 : _api$userIntent2$shar.currentUserIntent)) {
18
- if (fg('platform_editor_fix_popup_user_intent')) {
19
- // Defer the reset to avoid interfering with ongoing ProseMirror transactions
20
- // This fixes a race condition where cleanup happens during a transaction
21
- // (e.g., during drag handle mouse over -> unmountDecorations -> flushSync)
22
- setTimeout(() => {
23
- var _api$userIntent3;
24
- api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : (_api$userIntent3 = api.userIntent) === null || _api$userIntent3 === void 0 ? void 0 : _api$userIntent3.commands.setCurrentUserIntent('default'));
25
- }, 0);
26
- } else {
27
- var _api$userIntent4;
28
- api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : (_api$userIntent4 = api.userIntent) === null || _api$userIntent4 === void 0 ? void 0 : _api$userIntent4.commands.setCurrentUserIntent('default'));
29
- }
17
+ // Defer the reset to avoid interfering with ongoing ProseMirror transactions
18
+ // This fixes a race condition where cleanup happens during a transaction
19
+ // (e.g., during drag handle mouse over -> unmountDecorations -> flushSync)
20
+ setTimeout(() => {
21
+ var _api$userIntent3;
22
+ api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : (_api$userIntent3 = api.userIntent) === null || _api$userIntent3 === void 0 ? void 0 : _api$userIntent3.commands.setCurrentUserIntent('default'));
23
+ }, 0);
30
24
  }
31
25
  };
32
26
 
@@ -251,5 +251,51 @@ export var aiMessages = defineMessages({
251
251
  id: 'fabric.editor.ai.config.item.blockMenuNestedMenu.title',
252
252
  defaultMessage: 'View more actions',
253
253
  description: 'Title for the nested menu in the block menu'
254
+ },
255
+ // Smartlink action messages
256
+ smartlinkListKeyTopics: {
257
+ id: 'fabric.editor.ai.smartlink.action.listKeyTopics',
258
+ defaultMessage: 'List key topics',
259
+ description: 'Action to list key topics from the linked content'
260
+ },
261
+ smartlinkListKeyThemes: {
262
+ id: 'fabric.editor.ai.smartlink.action.listKeyThemes',
263
+ defaultMessage: 'List key themes',
264
+ description: 'Action to list key themes from the linked content'
265
+ },
266
+ smartlinkExtractInsights: {
267
+ id: 'fabric.editor.ai.smartlink.action.extractInsights',
268
+ defaultMessage: 'Extract insights',
269
+ description: 'Action to extract insights from the linked content'
270
+ },
271
+ smartlinkExtractUserQuotes: {
272
+ id: 'fabric.editor.ai.smartlink.action.extractUserQuotes',
273
+ defaultMessage: 'Extract user quotes',
274
+ description: 'Action to extract user quotes from the linked content'
275
+ },
276
+ smartlinkAddDecisions: {
277
+ id: 'fabric.editor.ai.smartlink.action.addDecisions',
278
+ defaultMessage: 'Add decisions',
279
+ description: 'Action to add decisions from the linked content'
280
+ },
281
+ smartlinkDefineActionItems: {
282
+ id: 'fabric.editor.ai.smartlink.action.defineActionItems',
283
+ defaultMessage: 'Define action items',
284
+ description: 'Action to define action items from the linked content'
285
+ },
286
+ smartlinkSummarizeChanges: {
287
+ id: 'fabric.editor.ai.smartlink.action.summarizeChanges',
288
+ defaultMessage: 'Summarize changes',
289
+ description: 'Action to summarize changes in the linked content'
290
+ },
291
+ smartlinkAddRelatedWorkItems: {
292
+ id: 'fabric.editor.ai.smartlink.action.addRelatedWorkItems',
293
+ defaultMessage: 'Add related work items',
294
+ description: 'Action to add related work items from the linked content'
295
+ },
296
+ smartlinkListTodos: {
297
+ id: 'fabric.editor.ai.smartlink.action.listTodos',
298
+ defaultMessage: 'List to-dos',
299
+ description: 'Action to list to-dos from the linked content'
254
300
  }
255
301
  });
@@ -163,17 +163,18 @@ function ExtensionWithPluginState(props) {
163
163
  wrapperStyleInheritedCursor, showMacroInteractionDesignUpdates && !isLivePageViewMode && expValEquals('cc_editor_ttvc_release_bundle_one', 'extensionHoverRefactor', true) && hoverStyles]
164
164
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
165
165
  ,
166
- style: customContainerStyles
167
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
168
- ,
166
+ style: customContainerStyles,
169
167
  onMouseEnter: function onMouseEnter() {
170
168
  return handleMouseEvent(true);
171
169
  }
172
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
170
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also applied via .ak-editor-selected-node
171
+ // CSS on keyboard selection. No-ops here satisfy the rule without duplicating state updates.
173
172
  ,
173
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
174
174
  onMouseLeave: function onMouseLeave() {
175
175
  return handleMouseEvent(false);
176
- }
176
+ },
177
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
177
178
  }, jsx("div", {
178
179
  "data-testid": "extension-overflow-wrapper"
179
180
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
@@ -86,17 +86,18 @@ var InlineExtension = function InlineExtension(props) {
86
86
  wrapperStyle, inlineWrapperStyles, showMacroInteractionDesignUpdates && !isLivePageViewMode && expValEquals('cc_editor_ttvc_release_bundle_one', 'extensionHoverRefactor', true) && hoverStyles]
87
87
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
88
88
  ,
89
- className: classNames
90
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
91
- ,
89
+ className: classNames,
92
90
  onMouseEnter: function onMouseEnter() {
93
91
  return handleMouseEvent(true);
94
92
  }
95
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
93
+ // @atlassian/a11y/mouse-events-have-key-events: hover border is also accessible via keyboard selection.
94
+ // No-ops here satisfy the rule without duplicating state updates.
96
95
  ,
96
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
97
97
  onMouseLeave: function onMouseLeave() {
98
98
  return handleMouseEvent(false);
99
- }
99
+ },
100
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
100
101
  }, jsx("div", {
101
102
  css: overlay,
102
103
  className: "extension-overlay"
@@ -95,17 +95,18 @@ export var EditToggle = function EditToggle(_ref) {
95
95
  style: customContainerStyles
96
96
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
97
97
  ,
98
- className: "extension-edit-toggle-container"
99
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
100
- ,
98
+ className: "extension-edit-toggle-container",
101
99
  onMouseOver: function onMouseOver() {
102
100
  return setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(true);
103
101
  }
104
- // eslint-disable-next-line @atlassian/a11y/mouse-events-have-key-events
102
+ // @atlassian/a11y/mouse-events-have-key-events: keyboard focus is already handled by the
103
+ // inner <button>'s onFocus/onBlur. No-ops here satisfy the rule without duplicating state updates.
105
104
  ,
105
+ onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
106
106
  onMouseLeave: function onMouseLeave() {
107
107
  return setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(false);
108
108
  },
109
+ onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined,
109
110
  tabIndex: -1
110
111
  }, jsx("button", {
111
112
  type: "button",