@atlaskit/editor-common 116.32.4 → 116.33.1

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 (50) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/cjs/ai-messages/ai-suggestions.js +10 -0
  3. package/dist/cjs/extensibility/Extension/Extension/index.js +0 -3
  4. package/dist/cjs/extensibility/Extension/InlineExtension/index.js +0 -3
  5. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionFloatingLabel.compiled.css +20 -0
  6. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionFloatingLabel.js +31 -0
  7. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionLabel.js +6 -9
  8. package/dist/cjs/extensibility/Extension/Lozenge/LozengeComponent.js +2 -6
  9. package/dist/cjs/extensibility/Extension/Lozenge/index.js +2 -6
  10. package/dist/cjs/extensibility/ExtensionComponent.js +2 -0
  11. package/dist/cjs/extensibility/MultiBodiedExtension/index.js +23 -10
  12. package/dist/cjs/extensibility/MultiBodiedExtension/styles.js +4 -0
  13. package/dist/cjs/lists/flatten-list.js +4 -0
  14. package/dist/cjs/monitoring/error.js +1 -1
  15. package/dist/cjs/ui/DropList/index.js +1 -1
  16. package/dist/es2019/ai-messages/ai-suggestions.js +10 -0
  17. package/dist/es2019/extensibility/Extension/Extension/index.js +0 -3
  18. package/dist/es2019/extensibility/Extension/InlineExtension/index.js +0 -3
  19. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionFloatingLabel.compiled.css +20 -0
  20. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionFloatingLabel.js +22 -0
  21. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionLabel.js +6 -9
  22. package/dist/es2019/extensibility/Extension/Lozenge/LozengeComponent.js +2 -6
  23. package/dist/es2019/extensibility/Extension/Lozenge/index.js +2 -6
  24. package/dist/es2019/extensibility/ExtensionComponent.js +2 -0
  25. package/dist/es2019/extensibility/MultiBodiedExtension/index.js +23 -10
  26. package/dist/es2019/extensibility/MultiBodiedExtension/styles.js +4 -0
  27. package/dist/es2019/lists/flatten-list.js +4 -0
  28. package/dist/es2019/monitoring/error.js +1 -1
  29. package/dist/es2019/ui/DropList/index.js +1 -1
  30. package/dist/esm/ai-messages/ai-suggestions.js +10 -0
  31. package/dist/esm/extensibility/Extension/Extension/index.js +0 -3
  32. package/dist/esm/extensibility/Extension/InlineExtension/index.js +0 -3
  33. package/dist/esm/extensibility/Extension/Lozenge/ExtensionFloatingLabel.compiled.css +20 -0
  34. package/dist/esm/extensibility/Extension/Lozenge/ExtensionFloatingLabel.js +23 -0
  35. package/dist/esm/extensibility/Extension/Lozenge/ExtensionLabel.js +6 -9
  36. package/dist/esm/extensibility/Extension/Lozenge/LozengeComponent.js +2 -6
  37. package/dist/esm/extensibility/Extension/Lozenge/index.js +2 -6
  38. package/dist/esm/extensibility/ExtensionComponent.js +2 -0
  39. package/dist/esm/extensibility/MultiBodiedExtension/index.js +23 -10
  40. package/dist/esm/extensibility/MultiBodiedExtension/styles.js +4 -0
  41. package/dist/esm/lists/flatten-list.js +4 -0
  42. package/dist/esm/monitoring/error.js +1 -1
  43. package/dist/esm/ui/DropList/index.js +1 -1
  44. package/dist/types/ai-messages/ai-suggestions.d.ts +10 -0
  45. package/dist/types/extensibility/Extension/Lozenge/ExtensionFloatingLabel.d.ts +12 -0
  46. package/dist/types/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +1 -3
  47. package/dist/types/extensibility/Extension/Lozenge/LozengeComponent.d.ts +1 -3
  48. package/dist/types/extensibility/Extension/Lozenge/index.d.ts +0 -2
  49. package/dist/types/lists/flatten-list.d.ts +11 -7
  50. package/package.json +2 -2
@@ -215,7 +215,9 @@ class ExtensionComponentInner extends Component {
215
215
  editorAppearance: editorAppearance,
216
216
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
217
217
  isNodeSelected: selectedNode === node,
218
+ isNodeHovered: this.state.isNodeHovered,
218
219
  isNodeNested: isNodeNested,
220
+ setIsNodeHovered: this.setIsNodeHovered,
219
221
  isLivePageViewMode: isLivePageViewMode,
220
222
  allowBodiedOverride: allowBodiedOverride
221
223
  });
@@ -17,6 +17,7 @@ import { useSharedPluginStateWithSelector } from '../../hooks';
17
17
  import { removeMarginsAndBorder, sharedMultiBodiedExtensionStyles } from '../../ui/MultiBodiedExtension';
18
18
  import { calculateBreakoutStyles, getExtensionLozengeData } from '../../utils';
19
19
  import ExtensionLozenge from '../Extension/Lozenge';
20
+ import { ExtensionFloatingLabel } from '../Extension/Lozenge/ExtensionFloatingLabel';
20
21
  import { shouldExtensionBreakout } from '../utils/should-extension-breakout';
21
22
  import { useMultiBodiedExtensionActions } from './action-api';
22
23
  import { mbeExtensionWrapperCSSStyles, mbeExtensionWrapperCSSStylesOld, overlayStyles, overlayStylesOld } from './styles';
@@ -37,6 +38,11 @@ const imageStyles = css({
37
38
  maxWidth: '24px'
38
39
  });
39
40
  const hoverStyles = css({
41
+ '&:hover': {
42
+ boxShadow: `0 0 0 1px ${"var(--ds-border, #0B120E24)"}`
43
+ }
44
+ });
45
+ const hoverStylesOld = css({
40
46
  '&:hover': {
41
47
  boxShadow: `0 0 0 1px ${"var(--ds-border-input, #8C8F97)"}`
42
48
  }
@@ -222,11 +228,14 @@ const MultiBodiedExtensionWithWidth = ({
222
228
  });
223
229
  mbeWrapperStyles = breakoutStyles;
224
230
  }
225
- const shouldUseNativeTabsPresentation = expValEquals('confluence_native_tabs_experiment', 'isEnabled', true);
226
- const isSelectionInsideMultiBodiedExtension = useIsSelectionInsideNode(editorView, node, getPos, shouldUseNativeTabsPresentation);
231
+ const shouldUseUpdatedChrome = expValEquals('confluence_native_tabs_experiment', 'isEnabled', true);
232
+ const isSelectionInsideMultiBodiedExtension = useIsSelectionInsideNode(editorView, node, getPos, shouldUseUpdatedChrome && !isLivePageViewMode);
227
233
  const isMultiBodiedExtensionActive = isNodeSelected || isSelectionInsideMultiBodiedExtension;
234
+ const shouldShowChromeOnInteraction = isNodeHovered || isMultiBodiedExtensionActive;
235
+ const shouldShowMultiBodiedExtensionChrome = shouldUseUpdatedChrome ? !isLivePageViewMode && shouldShowChromeOnInteraction : true;
228
236
  const wrapperClassNames = classnames('multiBodiedExtension--wrapper', 'extension-container', 'block', {
229
- 'with-border': showMacroInteractionDesignUpdates && (shouldUseNativeTabsPresentation ? isMultiBodiedExtensionActive : true),
237
+ 'with-border': showMacroInteractionDesignUpdates && shouldShowMultiBodiedExtensionChrome,
238
+ 'with-selected-border': showMacroInteractionDesignUpdates && shouldUseUpdatedChrome && !isLivePageViewMode && isNodeSelected,
230
239
  'with-danger-overlay': showMacroInteractionDesignUpdates,
231
240
  'with-padding-background-styles': showMacroInteractionDesignUpdates,
232
241
  'with-margin-styles': showMacroInteractionDesignUpdates && !isNodeNested
@@ -247,8 +256,9 @@ const MultiBodiedExtensionWithWidth = ({
247
256
  setIsNodeHovered(didHover);
248
257
  }
249
258
  };
250
- return jsx(Fragment, null, showMacroInteractionDesignUpdates && !isLivePageViewMode && jsx(ExtensionLozenge, {
251
- isNodeSelected: shouldUseNativeTabsPresentation ? isMultiBodiedExtensionActive : isNodeSelected,
259
+ const shouldRenderExtensionLozenge = showMacroInteractionDesignUpdates && !isLivePageViewMode && !shouldUseUpdatedChrome;
260
+ const shouldRenderFloatingLabel = showMacroInteractionDesignUpdates && !isLivePageViewMode && shouldUseUpdatedChrome && shouldShowChromeOnInteraction;
261
+ return jsx(Fragment, null, shouldRenderExtensionLozenge && jsx(ExtensionLozenge, {
252
262
  node: node,
253
263
  showMacroInteractionDesignUpdates: true,
254
264
  customContainerStyles: mbeWrapperStyles,
@@ -256,14 +266,13 @@ const MultiBodiedExtensionWithWidth = ({
256
266
  isNodeNested: isNodeNested,
257
267
  setIsNodeHovered: setIsNodeHovered,
258
268
  isBodiedMacro: true,
259
- isMultiBodiedMacro: shouldUseNativeTabsPresentation,
260
269
  pluginInjectionApi: pluginInjectionApi
261
270
  }), jsx("div", {
262
271
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
263
272
  className: wrapperClassNames,
264
273
  css: [/* eslint-disable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766 */
265
- shouldUseNativeTabsPresentation ? mbeExtensionWrapperCSSStyles : mbeExtensionWrapperCSSStylesOld, /* eslint-enable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage */
266
- showMacroInteractionDesignUpdates && !isLivePageViewMode && hoverStyles],
274
+ shouldUseUpdatedChrome ? mbeExtensionWrapperCSSStyles : mbeExtensionWrapperCSSStylesOld, /* eslint-enable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage */
275
+ showMacroInteractionDesignUpdates && !isLivePageViewMode && (shouldUseUpdatedChrome ? hoverStyles : hoverStylesOld)],
267
276
  "data-testid": "multiBodiedExtension--wrapper-editor",
268
277
  "data-layout": node.attrs.layout
269
278
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
@@ -276,9 +285,13 @@ const MultiBodiedExtensionWithWidth = ({
276
285
  onFocus: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined,
277
286
  onMouseLeave: () => handleMouseEvent(false),
278
287
  onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? () => {} : undefined
279
- }, jsx("div", {
288
+ }, shouldRenderFloatingLabel && jsx(ExtensionFloatingLabel, {
289
+ title: title,
290
+ isSelected: isNodeSelected,
291
+ testId: "multiBodiedExtension-floating-label"
292
+ }), jsx("div", {
280
293
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
281
- css: shouldUseNativeTabsPresentation ? overlayStyles : overlayStylesOld
294
+ css: shouldUseUpdatedChrome ? overlayStyles : overlayStylesOld
282
295
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
283
296
  ,
284
297
  className: overlayClassNames,
@@ -34,6 +34,10 @@ export const mbeExtensionWrapperCSSStyles = css(wrapperDefault, {
34
34
  boxShadow: `0 0 0 1px ${"var(--ds-border, #0B120E24)"}`
35
35
  },
36
36
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
37
+ '&.with-selected-border': {
38
+ boxShadow: `0 0 0 1px ${"var(--ds-border-focused, #4688EC)"}`
39
+ },
40
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
37
41
  '&.with-hover-border': {
38
42
  boxShadow: `0 0 0 1px ${"var(--ds-border-input, #8C8F97)"}`
39
43
  },
@@ -9,6 +9,10 @@
9
9
  * Uses `doc.nodesBetween` to walk the tree and delegates type-specific
10
10
  * decisions to the provided predicates. The core algorithm — selection
11
11
  * intersection, depth adjustment, index tracking — is shared.
12
+ *
13
+ * @private
14
+ * @deprecated Cannot represent content placed between an item's sub-lists
15
+ * (e.g. `li(p, ul, p, ul)`). Callers provide their own flatten that handles this.
12
16
  */
13
17
  export function flattenList(options, predicates) {
14
18
  const {
@@ -14,7 +14,7 @@ const NETWORK_FAILURE_REGEX = /^network failure/i;
14
14
  const RESIZE_OBSERVER_LOOP_REGEX = /ResizeObserver loop completed with undelivered notifications/;
15
15
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
16
16
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
17
- const packageVersion = "116.32.3";
17
+ const packageVersion = "116.33.0";
18
18
  const sanitiseSentryEvents = (data, _hint) => {
19
19
  // Remove URL as it has UGC
20
20
  // 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 = "116.32.3";
17
+ const packageVersion = "116.33.0";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -175,6 +175,16 @@ export var aiSuggestionsMessages = defineMessages({
175
175
  defaultMessage: 'Compare with original',
176
176
  description: 'Label for the dropdown action to compare suggestion with original content'
177
177
  },
178
+ cardHideDeletedDiffsLabel: {
179
+ id: 'fabric.editor.ai.suggestions.card.hideDeletedDiffsLabel.non-final',
180
+ defaultMessage: 'Hide comparison',
181
+ description: 'Tooltip label for the eye icon button on the AI suggestions card when deleted diffs are visible'
182
+ },
183
+ cardShowDeletedDiffsLabel: {
184
+ id: 'fabric.editor.ai.suggestions.card.showDeletedDiffsLabel.non-final',
185
+ defaultMessage: 'Show comparison',
186
+ description: 'Tooltip label for the eye icon button on the AI suggestions card when deleted diffs are hidden'
187
+ },
178
188
  cardScrollBackToSuggestionLabel: {
179
189
  id: 'fabric.editor.ai.suggestions.card.scrollBackToSuggestionLabel.non-final',
180
190
  defaultMessage: 'Back to suggestion',
@@ -44,7 +44,6 @@ function ExtensionWithPluginState(props) {
44
44
  hideFrame = props.hideFrame,
45
45
  editorAppearance = props.editorAppearance,
46
46
  macroInteractionDesignFeatureFlags = props.macroInteractionDesignFeatureFlags,
47
- isNodeSelected = props.isNodeSelected,
48
47
  isNodeHovered = props.isNodeHovered,
49
48
  isNodeNested = props.isNodeNested,
50
49
  setIsNodeHovered = props.setIsNodeHovered,
@@ -137,7 +136,6 @@ function ExtensionWithPluginState(props) {
137
136
  }
138
137
  };
139
138
  return jsx(Fragment, null, !showLegacyContentHeader && showMacroInteractionDesignUpdates && !isLivePageViewMode && jsx(ExtensionLozenge, {
140
- isNodeSelected: isNodeSelected,
141
139
  isNodeHovered: isNodeHovered,
142
140
  isNodeNested: isNodeNested,
143
141
  node: node,
@@ -193,7 +191,6 @@ function ExtensionWithPluginState(props) {
193
191
  ,
194
192
  className: headerClassNames
195
193
  }, !removeBorder && jsx(ExtensionLozenge, {
196
- isNodeSelected: isNodeSelected,
197
194
  node: node,
198
195
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
199
196
  pluginInjectionApi: pluginInjectionApi
@@ -52,7 +52,6 @@ var InlineExtension = function InlineExtension(props) {
52
52
  var node = props.node,
53
53
  pluginInjectionApi = props.pluginInjectionApi,
54
54
  macroInteractionDesignFeatureFlags = props.macroInteractionDesignFeatureFlags,
55
- isNodeSelected = props.isNodeSelected,
56
55
  children = props.children,
57
56
  isNodeHovered = props.isNodeHovered,
58
57
  setIsNodeHovered = props.setIsNodeHovered,
@@ -90,7 +89,6 @@ var InlineExtension = function InlineExtension(props) {
90
89
  };
91
90
  var inlineExtensionInternal = jsx(Fragment, null, showMacroInteractionDesignUpdates && !isLivePageViewMode && jsx(ExtensionLozenge, {
92
91
  node: node,
93
- isNodeSelected: isNodeSelected,
94
92
  isNodeHovered: isNodeHovered,
95
93
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
96
94
  setIsNodeHovered: setIsNodeHovered,
@@ -119,7 +117,6 @@ var InlineExtension = function InlineExtension(props) {
119
117
  className: "extension-overlay"
120
118
  }), children ? children : jsx(ExtensionLozenge, {
121
119
  node: node,
122
- isNodeSelected: isNodeSelected,
123
120
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
124
121
  pluginInjectionApi: pluginInjectionApi
125
122
  })));
@@ -0,0 +1,20 @@
1
+
2
+ ._2rkofajl{border-radius:var(--ds-radius-small,3px)}
3
+ ._zulp1b66{gap:var(--ds-space-050,4px)}._154i14id{top:-10px}
4
+ ._154id439{top:-14px}
5
+ ._16qsglyw{box-shadow:none}
6
+ ._19bvu2gc{padding-left:var(--ds-space-100,8px)}
7
+ ._1bah1h6o{justify-content:center}
8
+ ._1e0c1txw{display:flex}
9
+ ._1pbycs5v{z-index:2}
10
+ ._1xi2utpp{right:var(--ds-space-150,9pt)}
11
+ ._3um0ewfl{visibility:visible}
12
+ ._4cvr1h6o{align-items:center}
13
+ ._bfhk15s3{background-color:var(--ds-background-selected,#e9f2fe)}
14
+ ._bfhkvuon{background-color:var(--ds-surface,#fff)}
15
+ ._ca0q1b66{padding-top:var(--ds-space-050,4px)}
16
+ ._kqswstnw{position:absolute}
17
+ ._n3td1b66{padding-bottom:var(--ds-space-050,4px)}
18
+ ._p12f11ux{max-width:140px}
19
+ ._tzy4kb7n{opacity:1}
20
+ ._u5f3u2gc{padding-right:var(--ds-space-100,8px)}
@@ -0,0 +1,23 @@
1
+ /* ExtensionFloatingLabel.tsx generated by @compiled/babel-plugin v0.39.1 */
2
+ import "./ExtensionFloatingLabel.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ import { Text } from '@atlaskit/primitives/compiled';
6
+ var floatingLabelStyles = {
7
+ base: "_2rkofajl _zulp1b66 _4cvr1h6o _bfhkvuon _16qsglyw _1e0c1txw _1bah1h6o _p12f11ux _tzy4kb7n _19bvu2gc _u5f3u2gc _kqswstnw _1xi2utpp _154i14id _3um0ewfl _1pbycs5v",
8
+ selected: "_bfhk15s3 _n3td1b66 _ca0q1b66 _154id439"
9
+ };
10
+ export var ExtensionFloatingLabel = function ExtensionFloatingLabel(_ref) {
11
+ var isSelected = _ref.isSelected,
12
+ testId = _ref.testId,
13
+ title = _ref.title;
14
+ return /*#__PURE__*/React.createElement("div", {
15
+ contentEditable: false,
16
+ "data-testid": testId,
17
+ className: ax([floatingLabelStyles.base, isSelected && floatingLabelStyles.selected])
18
+ }, /*#__PURE__*/React.createElement(Text, {
19
+ maxLines: 1,
20
+ size: "small",
21
+ color: isSelected ? 'color.text.selected' : 'color.text.subtle'
22
+ }, title));
23
+ };
@@ -114,19 +114,16 @@ export var ExtensionLabel = function ExtensionLabel(_ref) {
114
114
  extensionName = _ref.extensionName,
115
115
  customContainerStyles = _ref.customContainerStyles,
116
116
  isNodeNested = _ref.isNodeNested,
117
- isNodeSelected = _ref.isNodeSelected,
118
117
  setIsNodeHovered = _ref.setIsNodeHovered,
119
118
  isBodiedMacro = _ref.isBodiedMacro,
120
119
  showUpdatedLivePages1PBodiedExtensionUI = _ref.showUpdatedLivePages1PBodiedExtensionUI,
121
120
  showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
122
121
  showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
123
- _pluginInjectionApi = _ref.pluginInjectionApi,
124
- isMultiBodiedMacro = _ref.isMultiBodiedMacro;
122
+ _pluginInjectionApi = _ref.pluginInjectionApi;
125
123
  var isInlineExtension = extensionName === 'inlineExtension';
126
124
  var showDefaultBodiedStyles = isBodiedMacro;
127
- var shouldUseMultiBodiedMacroPresentation = isMultiBodiedMacro && expValEquals('confluence_native_tabs_experiment', 'isEnabled', true);
128
125
  var containerClassNames = classnames({
129
- bodied: isBodiedMacro && !shouldUseMultiBodiedMacroPresentation
126
+ bodied: isBodiedMacro
130
127
  });
131
128
  var labelClassNames = classnames('extension-label', {
132
129
  nested: isNodeNested,
@@ -137,8 +134,8 @@ export var ExtensionLabel = function ExtensionLabel(_ref) {
137
134
  'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView,
138
135
  'always-hide-label': isBodiedMacro && showBodiedExtensionRendererView,
139
136
  // Need this separate class since we don't ever want to show the label during view mode
140
- 'remove-left-margin': (!isBodiedMacro || shouldUseMultiBodiedMacroPresentation) && !isInlineExtension && !isNodeNested,
141
- 'remove-nested-left-margin': isNodeNested && (!isBodiedMacro || shouldUseMultiBodiedMacroPresentation) && !isInlineExtension
137
+ 'remove-left-margin': !isBodiedMacro && !isInlineExtension && !isNodeNested,
138
+ 'remove-nested-left-margin': isNodeNested && !isBodiedMacro && !isInlineExtension
142
139
  });
143
140
  var iconClassNames = classnames({
144
141
  'extension-icon': true
@@ -190,12 +187,12 @@ export var ExtensionLabel = function ExtensionLabel(_ref) {
190
187
  // Ignored via go/ees005
191
188
  // eslint-disable-next-line react/jsx-props-no-spreading
192
189
  }, tooltipProps, {
193
- css: [labelStyles, !showLivePagesBodiedMacrosRendererView && showLabelStyles, (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI || shouldUseMultiBodiedMacroPresentation && !isNodeSelected) && hideLabelStyles]
190
+ css: [labelStyles, !showLivePagesBodiedMacrosRendererView && showLabelStyles, (!isBodiedMacro || showUpdatedLivePages1PBodiedExtensionUI) && hideLabelStyles]
194
191
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
195
192
  ,
196
193
  className: labelClassNames
197
194
  }), text, jsx("span", {
198
- css: [iconStyles, isBodiedMacro && !shouldUseMultiBodiedMacroPresentation && bodiedMacroIconStyles]
195
+ css: [iconStyles, isBodiedMacro && bodiedMacroIconStyles]
199
196
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
200
197
  ,
201
198
  className: iconClassNames,
@@ -29,15 +29,13 @@ export var LozengeComponent = function LozengeComponent(_ref) {
29
29
  customContainerStyles = _ref.customContainerStyles,
30
30
  isNodeHovered = _ref.isNodeHovered,
31
31
  isNodeNested = _ref.isNodeNested,
32
- isNodeSelected = _ref.isNodeSelected,
33
32
  setIsNodeHovered = _ref.setIsNodeHovered,
34
33
  isBodiedMacro = _ref.isBodiedMacro,
35
34
  showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
36
35
  showUpdatedLivePages1PBodiedExtensionUI = _ref.showUpdatedLivePages1PBodiedExtensionUI,
37
36
  showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
38
37
  setShowBodiedExtensionRendererView = _ref.setShowBodiedExtensionRendererView,
39
- pluginInjectionApi = _ref.pluginInjectionApi,
40
- isMultiBodiedMacro = _ref.isMultiBodiedMacro;
38
+ pluginInjectionApi = _ref.pluginInjectionApi;
41
39
  var capitalizedTitle = capitalizeFirstLetter(title);
42
40
  if (showMacroInteractionDesignUpdates) {
43
41
  return jsx(Fragment, null, jsx(ExtensionLabel, {
@@ -45,15 +43,13 @@ export var LozengeComponent = function LozengeComponent(_ref) {
45
43
  extensionName: extensionName,
46
44
  isNodeHovered: isNodeHovered,
47
45
  isNodeNested: isNodeNested,
48
- isNodeSelected: isNodeSelected,
49
46
  customContainerStyles: customContainerStyles,
50
47
  setIsNodeHovered: setIsNodeHovered,
51
48
  isBodiedMacro: isBodiedMacro,
52
49
  showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
53
50
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
54
51
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
55
- pluginInjectionApi: pluginInjectionApi,
56
- isMultiBodiedMacro: isMultiBodiedMacro
52
+ pluginInjectionApi: pluginInjectionApi
57
53
  }), showLivePagesBodiedMacrosRendererView && isBodiedMacro && jsx(EditToggle, {
58
54
  isNodeHovered: isNodeHovered,
59
55
  setIsNodeHovered: setIsNodeHovered,
@@ -44,7 +44,6 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
44
44
  _defineProperty(_this, "renderFallback", function (lozengeData) {
45
45
  var _this$props = _this.props,
46
46
  showMacroInteractionDesignUpdates = _this$props.showMacroInteractionDesignUpdates,
47
- isNodeSelected = _this$props.isNodeSelected,
48
47
  isNodeHovered = _this$props.isNodeHovered,
49
48
  isNodeNested = _this$props.isNodeNested,
50
49
  customContainerStyles = _this$props.customContainerStyles,
@@ -54,8 +53,7 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
54
53
  showUpdatedLivePages1PBodiedExtensionUI = _this$props.showUpdatedLivePages1PBodiedExtensionUI,
55
54
  showBodiedExtensionRendererView = _this$props.showBodiedExtensionRendererView,
56
55
  setShowBodiedExtensionRendererView = _this$props.setShowBodiedExtensionRendererView,
57
- pluginInjectionApi = _this$props.pluginInjectionApi,
58
- isMultiBodiedMacro = _this$props.isMultiBodiedMacro;
56
+ pluginInjectionApi = _this$props.pluginInjectionApi;
59
57
  var _this$props$node$attr = _this.props.node.attrs,
60
58
  parameters = _this$props$node$attr.parameters,
61
59
  extensionKey = _this$props$node$attr.extensionKey;
@@ -64,7 +62,6 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
64
62
  var title = parameters && parameters.extensionTitle || parameters && parameters.macroMetadata && parameters.macroMetadata.title || extensionKey;
65
63
  return jsx(LozengeComponent, {
66
64
  isNodeHovered: isNodeHovered,
67
- isNodeSelected: isNodeSelected,
68
65
  isNodeNested: isNodeNested,
69
66
  showMacroInteractionDesignUpdates: showMacroInteractionDesignUpdates,
70
67
  extensionName: name,
@@ -79,8 +76,7 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
79
76
  showUpdatedLivePages1PBodiedExtensionUI: showUpdatedLivePages1PBodiedExtensionUI,
80
77
  showBodiedExtensionRendererView: showBodiedExtensionRendererView,
81
78
  setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView,
82
- pluginInjectionApi: pluginInjectionApi,
83
- isMultiBodiedMacro: isMultiBodiedMacro
79
+ pluginInjectionApi: pluginInjectionApi
84
80
  });
85
81
  });
86
82
  return _this;
@@ -251,7 +251,9 @@ var ExtensionComponentInner = /*#__PURE__*/function (_Component) {
251
251
  editorAppearance: editorAppearance,
252
252
  macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
253
253
  isNodeSelected: selectedNode === node,
254
+ isNodeHovered: this.state.isNodeHovered,
254
255
  isNodeNested: isNodeNested,
256
+ setIsNodeHovered: this.setIsNodeHovered,
255
257
  isLivePageViewMode: isLivePageViewMode,
256
258
  allowBodiedOverride: allowBodiedOverride
257
259
  });
@@ -22,6 +22,7 @@ import { useSharedPluginStateWithSelector } from '../../hooks';
22
22
  import { removeMarginsAndBorder, sharedMultiBodiedExtensionStyles } from '../../ui/MultiBodiedExtension';
23
23
  import { calculateBreakoutStyles, getExtensionLozengeData } from '../../utils';
24
24
  import ExtensionLozenge from '../Extension/Lozenge';
25
+ import { ExtensionFloatingLabel } from '../Extension/Lozenge/ExtensionFloatingLabel';
25
26
  import { shouldExtensionBreakout } from '../utils/should-extension-breakout';
26
27
  import { useMultiBodiedExtensionActions } from './action-api';
27
28
  import { mbeExtensionWrapperCSSStyles, mbeExtensionWrapperCSSStylesOld, overlayStyles, overlayStylesOld } from './styles';
@@ -42,6 +43,11 @@ var imageStyles = css({
42
43
  maxWidth: '24px'
43
44
  });
44
45
  var hoverStyles = css({
46
+ '&:hover': {
47
+ boxShadow: "0 0 0 1px ".concat("var(--ds-border, #0B120E24)")
48
+ }
49
+ });
50
+ var hoverStylesOld = css({
45
51
  '&:hover': {
46
52
  boxShadow: "0 0 0 1px ".concat("var(--ds-border-input, #8C8F97)")
47
53
  }
@@ -229,11 +235,14 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
229
235
  breakoutStyles = _extends({}, (_objectDestructuringEmpty(_calculateBreakoutSty), _calculateBreakoutSty));
230
236
  mbeWrapperStyles = breakoutStyles;
231
237
  }
232
- var shouldUseNativeTabsPresentation = expValEquals('confluence_native_tabs_experiment', 'isEnabled', true);
233
- var isSelectionInsideMultiBodiedExtension = useIsSelectionInsideNode(editorView, node, getPos, shouldUseNativeTabsPresentation);
238
+ var shouldUseUpdatedChrome = expValEquals('confluence_native_tabs_experiment', 'isEnabled', true);
239
+ var isSelectionInsideMultiBodiedExtension = useIsSelectionInsideNode(editorView, node, getPos, shouldUseUpdatedChrome && !isLivePageViewMode);
234
240
  var isMultiBodiedExtensionActive = isNodeSelected || isSelectionInsideMultiBodiedExtension;
241
+ var shouldShowChromeOnInteraction = isNodeHovered || isMultiBodiedExtensionActive;
242
+ var shouldShowMultiBodiedExtensionChrome = shouldUseUpdatedChrome ? !isLivePageViewMode && shouldShowChromeOnInteraction : true;
235
243
  var wrapperClassNames = classnames('multiBodiedExtension--wrapper', 'extension-container', 'block', {
236
- 'with-border': showMacroInteractionDesignUpdates && (shouldUseNativeTabsPresentation ? isMultiBodiedExtensionActive : true),
244
+ 'with-border': showMacroInteractionDesignUpdates && shouldShowMultiBodiedExtensionChrome,
245
+ 'with-selected-border': showMacroInteractionDesignUpdates && shouldUseUpdatedChrome && !isLivePageViewMode && isNodeSelected,
237
246
  'with-danger-overlay': showMacroInteractionDesignUpdates,
238
247
  'with-padding-background-styles': showMacroInteractionDesignUpdates,
239
248
  'with-margin-styles': showMacroInteractionDesignUpdates && !isNodeNested
@@ -254,8 +263,9 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
254
263
  setIsNodeHovered(didHover);
255
264
  }
256
265
  };
257
- return jsx(Fragment, null, showMacroInteractionDesignUpdates && !isLivePageViewMode && jsx(ExtensionLozenge, {
258
- isNodeSelected: shouldUseNativeTabsPresentation ? isMultiBodiedExtensionActive : isNodeSelected,
266
+ var shouldRenderExtensionLozenge = showMacroInteractionDesignUpdates && !isLivePageViewMode && !shouldUseUpdatedChrome;
267
+ var shouldRenderFloatingLabel = showMacroInteractionDesignUpdates && !isLivePageViewMode && shouldUseUpdatedChrome && shouldShowChromeOnInteraction;
268
+ return jsx(Fragment, null, shouldRenderExtensionLozenge && jsx(ExtensionLozenge, {
259
269
  node: node,
260
270
  showMacroInteractionDesignUpdates: true,
261
271
  customContainerStyles: mbeWrapperStyles,
@@ -263,14 +273,13 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
263
273
  isNodeNested: isNodeNested,
264
274
  setIsNodeHovered: setIsNodeHovered,
265
275
  isBodiedMacro: true,
266
- isMultiBodiedMacro: shouldUseNativeTabsPresentation,
267
276
  pluginInjectionApi: pluginInjectionApi
268
277
  }), jsx("div", {
269
278
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
270
279
  className: wrapperClassNames,
271
280
  css: [/* eslint-disable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766 */
272
- shouldUseNativeTabsPresentation ? mbeExtensionWrapperCSSStyles : mbeExtensionWrapperCSSStylesOld, /* eslint-enable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage */
273
- showMacroInteractionDesignUpdates && !isLivePageViewMode && hoverStyles],
281
+ shouldUseUpdatedChrome ? mbeExtensionWrapperCSSStyles : mbeExtensionWrapperCSSStylesOld, /* eslint-enable @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage */
282
+ showMacroInteractionDesignUpdates && !isLivePageViewMode && (shouldUseUpdatedChrome ? hoverStyles : hoverStylesOld)],
274
283
  "data-testid": "multiBodiedExtension--wrapper-editor",
275
284
  "data-layout": node.attrs.layout
276
285
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
@@ -287,9 +296,13 @@ var MultiBodiedExtensionWithWidth = function MultiBodiedExtensionWithWidth(_ref2
287
296
  return handleMouseEvent(false);
288
297
  },
289
298
  onBlur: expValEquals('editor_a11y__enghealth-46814_fy26', 'isEnabled', true) ? function () {} : undefined
290
- }, jsx("div", {
299
+ }, shouldRenderFloatingLabel && jsx(ExtensionFloatingLabel, {
300
+ title: title,
301
+ isSelected: isNodeSelected,
302
+ testId: "multiBodiedExtension-floating-label"
303
+ }), jsx("div", {
291
304
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
292
- css: shouldUseNativeTabsPresentation ? overlayStyles : overlayStylesOld
305
+ css: shouldUseUpdatedChrome ? overlayStyles : overlayStylesOld
293
306
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
294
307
  ,
295
308
  className: overlayClassNames,
@@ -34,6 +34,10 @@ export var mbeExtensionWrapperCSSStyles = css(wrapperDefault, {
34
34
  boxShadow: "0 0 0 1px ".concat("var(--ds-border, #0B120E24)")
35
35
  },
36
36
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
37
+ '&.with-selected-border': {
38
+ boxShadow: "0 0 0 1px ".concat("var(--ds-border-focused, #4688EC)")
39
+ },
40
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
37
41
  '&.with-hover-border': {
38
42
  boxShadow: "0 0 0 1px ".concat("var(--ds-border-input, #8C8F97)")
39
43
  },
@@ -9,6 +9,10 @@
9
9
  * Uses `doc.nodesBetween` to walk the tree and delegates type-specific
10
10
  * decisions to the provided predicates. The core algorithm — selection
11
11
  * intersection, depth adjustment, index tracking — is shared.
12
+ *
13
+ * @private
14
+ * @deprecated Cannot represent content placed between an item's sub-lists
15
+ * (e.g. `li(p, ul, p, ul)`). Callers provide their own flatten that handles this.
12
16
  */
13
17
  export function flattenList(options, predicates) {
14
18
  var doc = options.doc,
@@ -20,7 +20,7 @@ var NETWORK_FAILURE_REGEX = /^network failure/i;
20
20
  var RESIZE_OBSERVER_LOOP_REGEX = /ResizeObserver loop completed with undelivered notifications/;
21
21
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
22
22
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
23
- var packageVersion = "116.32.3";
23
+ var packageVersion = "116.33.0";
24
24
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
25
25
  // Remove URL as it has UGC
26
26
  // Ignored via go/ees007
@@ -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 = "116.32.3";
24
+ var packageVersion = "116.33.0";
25
25
  var halfFocusRing = 1;
26
26
  var dropOffset = '0, 8';
27
27
  var fadeIn = keyframes({
@@ -44,6 +44,11 @@ export declare const aiSuggestionsMessages: {
44
44
  description: string;
45
45
  id: string;
46
46
  };
47
+ cardHideDeletedDiffsLabel: {
48
+ defaultMessage: string;
49
+ description: string;
50
+ id: string;
51
+ };
47
52
  cardMoreOptionsButtonLabel: {
48
53
  defaultMessage: string;
49
54
  description: string;
@@ -74,6 +79,11 @@ export declare const aiSuggestionsMessages: {
74
79
  description: string;
75
80
  id: string;
76
81
  };
82
+ cardShowDeletedDiffsLabel: {
83
+ defaultMessage: string;
84
+ description: string;
85
+ id: string;
86
+ };
77
87
  cardShowSidebarButtonLabel: {
78
88
  defaultMessage: string;
79
89
  description: string;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import type { ReactElement } from 'react';
6
+ type Props = {
7
+ isSelected?: boolean;
8
+ testId?: string;
9
+ title: string;
10
+ };
11
+ export declare const ExtensionFloatingLabel: ({ isSelected, testId, title }: Props) => ReactElement;
12
+ export {};
@@ -9,10 +9,8 @@ type ExtensionLabelProps = {
9
9
  customContainerStyles?: CSSProperties;
10
10
  extensionName: string;
11
11
  isBodiedMacro?: boolean;
12
- isMultiBodiedMacro?: boolean;
13
12
  isNodeHovered?: boolean;
14
13
  isNodeNested?: boolean;
15
- isNodeSelected?: boolean;
16
14
  pluginInjectionApi?: ExtensionsPluginInjectionAPI;
17
15
  setIsNodeHovered?: (isHovered: boolean) => void;
18
16
  showBodiedExtensionRendererView?: boolean;
@@ -20,5 +18,5 @@ type ExtensionLabelProps = {
20
18
  showUpdatedLivePages1PBodiedExtensionUI?: boolean;
21
19
  text: string;
22
20
  };
23
- export declare const ExtensionLabel: ({ text, extensionName, customContainerStyles, isNodeNested, isNodeSelected, setIsNodeHovered, isBodiedMacro, showUpdatedLivePages1PBodiedExtensionUI, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView, pluginInjectionApi: _pluginInjectionApi, isMultiBodiedMacro, }: ExtensionLabelProps) => jsx.JSX.Element;
21
+ export declare const ExtensionLabel: ({ text, extensionName, customContainerStyles, isNodeNested, setIsNodeHovered, isBodiedMacro, showUpdatedLivePages1PBodiedExtensionUI, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView, pluginInjectionApi: _pluginInjectionApi, }: ExtensionLabelProps) => jsx.JSX.Element;
24
22
  export {};
@@ -11,10 +11,8 @@ type LozengeComponentProps = {
11
11
  customContainerStyles?: CSSProperties;
12
12
  extensionName: string;
13
13
  isBodiedMacro?: boolean;
14
- isMultiBodiedMacro?: boolean;
15
14
  isNodeHovered?: boolean;
16
15
  isNodeNested?: boolean;
17
- isNodeSelected?: boolean;
18
16
  lozengeData?: LozengeData;
19
17
  params: any;
20
18
  pluginInjectionApi?: ExtensionsPluginInjectionAPI;
@@ -27,5 +25,5 @@ type LozengeComponentProps = {
27
25
  showUpdatedLivePages1PBodiedExtensionUI?: boolean;
28
26
  title: string;
29
27
  };
30
- export declare const LozengeComponent: ({ lozengeData, extensionName, title, params, renderImage, showMacroInteractionDesignUpdates, customContainerStyles, isNodeHovered, isNodeNested, isNodeSelected, setIsNodeHovered, isBodiedMacro, showLivePagesBodiedMacrosRendererView, showUpdatedLivePages1PBodiedExtensionUI, showBodiedExtensionRendererView, setShowBodiedExtensionRendererView, pluginInjectionApi, isMultiBodiedMacro, }: LozengeComponentProps) => jsx.JSX.Element;
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;
31
29
  export {};
@@ -10,10 +10,8 @@ import type { ExtensionsPluginInjectionAPI } from '../../types';
10
10
  export interface Props {
11
11
  customContainerStyles?: CSSProperties;
12
12
  isBodiedMacro?: boolean;
13
- isMultiBodiedMacro?: boolean;
14
13
  isNodeHovered?: boolean;
15
14
  isNodeNested?: boolean;
16
- isNodeSelected?: boolean;
17
15
  node: PmNode;
18
16
  pluginInjectionApi?: ExtensionsPluginInjectionAPI;
19
17
  setIsNodeHovered?: (isHovered: boolean) => void;