@atlaskit/renderer 126.9.5 → 126.10.0

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 +7 -0
  2. package/dist/cjs/consts.js +11 -0
  3. package/dist/cjs/react/index.js +3 -4
  4. package/dist/cjs/react/marks/breakout.js +39 -2
  5. package/dist/cjs/react/nodes/blockCard.js +29 -2
  6. package/dist/cjs/react/nodes/embedCard.js +43 -26
  7. package/dist/cjs/react/nodes/extension.js +11 -2
  8. package/dist/cjs/react/nodes/multiBodiedExtension.js +23 -6
  9. package/dist/cjs/ui/Renderer/RendererStyleContainer.js +85 -16
  10. package/dist/cjs/ui/Renderer/index.js +1 -1
  11. package/dist/es2019/consts.js +11 -0
  12. package/dist/es2019/react/index.js +3 -4
  13. package/dist/es2019/react/marks/breakout.js +40 -2
  14. package/dist/es2019/react/nodes/blockCard.js +45 -16
  15. package/dist/es2019/react/nodes/embedCard.js +43 -26
  16. package/dist/es2019/react/nodes/extension.js +33 -22
  17. package/dist/es2019/react/nodes/multiBodiedExtension.js +30 -11
  18. package/dist/es2019/ui/Renderer/RendererStyleContainer.js +121 -10
  19. package/dist/es2019/ui/Renderer/index.js +1 -1
  20. package/dist/esm/consts.js +11 -0
  21. package/dist/esm/react/index.js +3 -4
  22. package/dist/esm/react/marks/breakout.js +40 -2
  23. package/dist/esm/react/nodes/blockCard.js +29 -2
  24. package/dist/esm/react/nodes/embedCard.js +43 -26
  25. package/dist/esm/react/nodes/extension.js +11 -2
  26. package/dist/esm/react/nodes/multiBodiedExtension.js +23 -6
  27. package/dist/esm/ui/Renderer/RendererStyleContainer.js +85 -16
  28. package/dist/esm/ui/Renderer/index.js +1 -1
  29. package/dist/types/consts.d.ts +11 -0
  30. package/dist/types-ts4.5/consts.d.ts +11 -0
  31. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 126.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`cf045c04cbad9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cf045c04cbad9) -
8
+ [ux] Fix renderer nested table sticky header behaviour and reenable
9
+
3
10
  ## 126.9.5
4
11
 
5
12
  ### Patch Changes
@@ -9,11 +9,22 @@ exports.RendererCssClassName = void 0;
9
9
 
10
10
  var clPrefix = 'ak-renderer-';
11
11
  var RendererCssClassName = exports.RendererCssClassName = {
12
+ FLEX_CENTER_WRAPPER: "".concat(clPrefix, "flex-center-wrapper"),
12
13
  DOCUMENT: "".concat(clPrefix, "document"),
13
14
  EXTENSION: "".concat(clPrefix, "extension"),
14
15
  EXTENSION_AS_INLINE: "".concat(clPrefix, "extension-as-inline"),
15
16
  EXTENSION_CENTER_ALIGN: "".concat(clPrefix, "extension-center-align"),
16
17
  EXTENSION_OVERFLOW_CONTAINER: "".concat(clPrefix, "extension-overflow-container"),
18
+ /** Wrapper for center-aligned extensions/MBE; margin here so it participates in collapse */
19
+ STICKY_SAFE_CENTER_WRAPPER: "".concat(clPrefix, "sticky-safe-center-wrapper"),
20
+ /** Wrapper for center-aligned embed card (wide/full-width); margin here so it participates in collapse */
21
+ EMBED_CARD_CENTER_WRAPPER: "".concat(clPrefix, "embed-card-center-wrapper"),
22
+ /** Wrapper for center-aligned block card datasource (wide/full-width); margin here so it participates in collapse */
23
+ BLOCK_CARD_DATASOURCE_CENTER_WRAPPER: "".concat(clPrefix, "block-card-datasource-center-wrapper"),
24
+ /** Outer flex wrapper for sticky-safe breakout (has vertical margin); zero margin when first in doc */
25
+ STICKY_SAFE_BREAKOUT_WRAPPER: "".concat(clPrefix, "sticky-safe-breakout-wrapper"),
26
+ /** Flex item in sticky-safe breakout; zero first/last child margin so flex container height matches legacy */
27
+ STICKY_SAFE_BREAKOUT_INNER: "".concat(clPrefix, "sticky-safe-breakout-inner"),
17
28
  NUMBER_COLUMN: "".concat(clPrefix, "table-number-column"),
18
29
  SORTABLE_COLUMN_WRAPPER: "".concat(clPrefix, "tableHeader-sortable-column__wrapper"),
19
30
  SORTABLE_COLUMN: "".concat(clPrefix, "tableHeader-sortable-column"),
@@ -434,10 +434,9 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
434
434
  var isInsideOfBlockNode = (0, _rendererNode.insideBlockNode)(path, node.type.schema);
435
435
  var isInsideMultiBodiedExtension = (0, _rendererNode.insideMultiBodiedExtension)(path, node.type.schema);
436
436
  var isInsideOfTable = (0, _rendererNode.insideTable)(path, node.type.schema);
437
-
438
- // TODO: EDITOR-3850 - support sticky headers inside breakouts (layouts and expands)
439
- var isInsideBreakoutExpand = (0, _expValEquals.expValEquals)('platform_editor_table_sticky_header_improvements', 'cohort', 'test_with_overflow') && (0, _expValEquals.expValEquals)('platform_editor_table_sticky_header_patch_11', 'isEnabled', true) && (0, _rendererNode.insideBreakoutExpand)(path);
440
- var stickyHeaders = !isInsideOfTable && !(0, _rendererNode.insideBreakoutLayout)(path) && !isInsideBreakoutExpand ? this.stickyHeaders : undefined;
437
+ var isStickySafeCenteringEnabled = (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
438
+ var isInsideBreakoutExpand = !isStickySafeCenteringEnabled && (0, _expValEquals.expValEquals)('platform_editor_table_sticky_header_improvements', 'cohort', 'test_with_overflow') && (0, _expValEquals.expValEquals)('platform_editor_table_sticky_header_patch_11', 'isEnabled', true) && (0, _rendererNode.insideBreakoutExpand)(path);
439
+ var stickyHeaders = isStickySafeCenteringEnabled ? !isInsideOfTable ? this.stickyHeaders : undefined : !isInsideOfTable && !(0, _rendererNode.insideBreakoutLayout)(path) && !isInsideBreakoutExpand ? this.stickyHeaders : undefined;
441
440
  return _objectSpread(_objectSpread({}, this.getProps(node)), {}, {
442
441
  allowColumnSorting: this.allowColumnSorting,
443
442
  columnWidths: (0, _utils.getColumnWidths)(node),
@@ -10,19 +10,31 @@ var _react = require("@emotion/react");
10
10
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
11
11
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
12
12
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
13
+ var _consts = require("../../consts");
13
14
  /**
14
15
  * @jsxRuntime classic
15
16
  * @jsx jsx
16
17
  */
17
18
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
18
19
 
19
- var wrapperStyles = (0, _react.css)({
20
+ // Legacy centering (breaks position: sticky in nested content).
21
+ var legacyWrapperStyles = (0, _react.css)({
20
22
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
21
23
  margin: "".concat(_editorSharedStyles.blockNodesVerticalMargin, " 0"),
22
24
  // eslint-disable-next-line @atlaskit/design-system/use-tokens-space
23
25
  marginLeft: '50%',
24
26
  transform: 'translateX(-50%)'
25
27
  });
28
+ var flexWrapperStyles = (0, _react.css)({
29
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
30
+ margin: "".concat(_editorSharedStyles.blockNodesVerticalMargin, " 0")
31
+ });
32
+
33
+ // Flex item: no vertical margin so flex container height = content height (matches legacy single-wrapper height).
34
+ // flexShrink: 0 so the inner div keeps its width (matches legacy behaviour; flex items default to flex-shrink: 1).
35
+ var innerWrapperStyles = (0, _react.css)({
36
+ flexShrink: 0
37
+ });
26
38
  var getWidth = function getWidth(width, mode) {
27
39
  if ((0, _experiments.editorExperiment)('advanced_layouts', true) && width) {
28
40
  return "min(".concat(width, "px, var(--ak-editor--breakout-container-without-gutter-width))");
@@ -48,8 +60,33 @@ var getWidth = function getWidth(width, mode) {
48
60
  * @returns The rendered breakout mark as a React element.
49
61
  */
50
62
  function Breakout(props) {
63
+ var width = getWidth('width' in props ? props.width : null, props.mode);
64
+ var useStickySafeCentering = (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
65
+ if (useStickySafeCentering) {
66
+ return (0, _react.jsx)("div", {
67
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
68
+ className: _consts.RendererCssClassName.STICKY_SAFE_BREAKOUT_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER,
69
+ css: flexWrapperStyles
70
+ }, (0, _react.jsx)("div", (0, _extends2.default)({
71
+ css: innerWrapperStyles
72
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
73
+ ,
74
+ className: "".concat(_consts.RendererCssClassName.STICKY_SAFE_BREAKOUT_INNER, " fabric-editor-breakout-mark fabric-editor-block-mark"),
75
+ "data-mode": props.mode
76
+ // Ignored via go/ees005
77
+ // eslint-disable-next-line react/jsx-props-no-spreading
78
+ }, (0, _experiments.editorExperiment)('advanced_layouts', true) && {
79
+ 'data-has-width': !!props.width,
80
+ 'data-width': props.width
81
+ }, {
82
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
83
+ style: {
84
+ width: width
85
+ }
86
+ }), props.children));
87
+ }
51
88
  return (0, _react.jsx)("div", (0, _extends2.default)({
52
- css: wrapperStyles,
89
+ css: legacyWrapperStyles,
53
90
  "data-mode": props.mode
54
91
  // Ignored via go/ees005
55
92
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -16,16 +16,36 @@ var _analyticsNext = require("@atlaskit/analytics-next");
16
16
  var _linkDatasource = require("@atlaskit/link-datasource");
17
17
  var _ssr = require("@atlaskit/smart-card/ssr");
18
18
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
19
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
19
20
  var _colors = require("@atlaskit/theme/colors");
20
21
  var _utils = require("@atlaskit/editor-common/utils");
21
22
  var _PortalContext = require("../../ui/Renderer/PortalContext");
23
+ var _consts = require("../../consts");
22
24
  /**
23
25
  * @jsxRuntime classic
24
26
  * @jsx jsx
25
27
  */
26
28
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
27
29
 
30
+ var datasourceCenterWrapperStyles = (0, _react.css)({
31
+ marginTop: "var(--ds-space-150, 0.75rem)",
32
+ marginBottom: "var(--ds-space-150, 0.75rem)"
33
+ });
28
34
  var datasourceContainerStyleWithMarginTop = (0, _react.css)({
35
+ borderRadius: "var(--ds-radius-large, 8px)",
36
+ border: "var(--ds-border-width, 1px)".concat(" solid ", "var(--ds-border, ".concat(_colors.N40, ")")),
37
+ overflow: 'hidden',
38
+ marginTop: "var(--ds-space-150, 0.75rem)",
39
+ marginBottom: "var(--ds-space-150, 0.75rem)"
40
+ });
41
+
42
+ // No vertical margin when inside center wrapper (wrapper has margin so it participates in collapse). Styles from datasourceContainerStyleLegacy
43
+ var datasourceContainerStyleNoVerticalMargin = (0, _react.css)({
44
+ borderRadius: "var(--ds-radius-large, 8px)",
45
+ border: "var(--ds-border-width, 1px)".concat(" solid ", "var(--ds-border, ".concat(_colors.N40, ")")),
46
+ overflow: 'hidden'
47
+ });
48
+ var datasourceContainerStyleLegacy = (0, _react.css)({
29
49
  borderRadius: "var(--ds-radius-large, 8px)",
30
50
  border: "var(--ds-border-width, 1px)".concat(" solid ", "var(--ds-border, ".concat(_colors.N40, ")")),
31
51
  overflow: 'hidden',
@@ -108,8 +128,10 @@ function BlockCard(props) {
108
128
  // eslint-disable-next-line react/jsx-props-no-spreading
109
129
  }, cardProps), (0, _react.jsx)(_ui.WidthConsumer, null, function (_ref5) {
110
130
  var width = _ref5.width;
111
- return (0, _react.jsx)("div", {
112
- css: datasourceContainerStyleWithMarginTop,
131
+ var useStickySafeCentering = (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
132
+ var useCenterWrapper = !isNodeNested && useStickySafeCentering;
133
+ var datasourceDiv = (0, _react.jsx)("div", {
134
+ css: useCenterWrapper ? datasourceContainerStyleNoVerticalMargin : useStickySafeCentering ? datasourceContainerStyleWithMarginTop : datasourceContainerStyleLegacy,
113
135
  "data-testid": "renderer-datasource-table",
114
136
  "data-local-id": localId,
115
137
  style: {
@@ -124,6 +146,11 @@ function BlockCard(props) {
124
146
  wrappedColumnKeys: wrappedColumnKeys && wrappedColumnKeys.length > 0 ? wrappedColumnKeys : undefined,
125
147
  url: url
126
148
  }));
149
+ return useCenterWrapper ? (0, _react.jsx)("div", {
150
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
151
+ className: _consts.RendererCssClassName.BLOCK_CARD_DATASOURCE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER,
152
+ css: datasourceCenterWrapperStyles
153
+ }, datasourceDiv) : datasourceDiv;
127
154
  })));
128
155
  }
129
156
  return (0, _react.jsx)(_inlineCard.default, {
@@ -16,8 +16,10 @@ var _ui = require("@atlaskit/editor-common/ui");
16
16
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
17
17
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
18
  var _platformFeatureFlagsReact = require("@atlaskit/platform-feature-flags-react");
19
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
19
20
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
20
21
  var _fallback = require("./fallback");
22
+ var _consts = require("../../consts");
21
23
  var _style = require("../../ui/Renderer/style");
22
24
  var _getCardClickHandler = require("../utils/getCardClickHandler");
23
25
  var _analyticsNext = require("@atlaskit/analytics-next");
@@ -43,9 +45,15 @@ var embedCardWrapperStyles = (0, _react.css)({
43
45
  },
44
46
  margin: '0 auto'
45
47
  });
48
+ var embedCardCenterWrapperStyles = (0, _react.css)({
49
+ // Match MediaSingle calcMargin(layout) default for wide/full-width: 24px top/bottom (so wrapper participates in collapse)
50
+ // eslint-disable-next-line @atlaskit/design-system/use-tokens-space -- Matches editor-common MediaSingle calcMargin
51
+ margin: '24px 0'
52
+ });
46
53
 
54
+ // Legacy centering when platform_editor_flex_based_centering is off.
47
55
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
48
- var uIMediaSingleLayoutStyles = (0, _react.css)({
56
+ var uIMediaSingleLayoutStylesLegacy = (0, _react.css)({
49
57
  // eslint-disable-next-line @atlaskit/design-system/use-tokens-space
50
58
  marginLeft: '50%',
51
59
  transform: 'translateX(-50%)'
@@ -150,7 +158,8 @@ function EmbedCardInternal(props) {
150
158
  }
151
159
  }
152
160
  var lineLength = isFullWidth ? Math.min(_editorSharedStyles.akEditorFullWidthLayoutWidth, containerWidth - padding) : nonFullWidthSize;
153
- var uiMediaSingleStyles = layout === 'full-width' || layout === 'wide' ? uIMediaSingleLayoutStyles : '';
161
+ var useStickySafeCentering = (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
162
+ var uiMediaSingleStyles = layout === 'full-width' || layout === 'wide' ? useStickySafeCentering ? undefined : uIMediaSingleLayoutStylesLegacy : '';
154
163
  var onError = function onError(_ref4) {
155
164
  var err = _ref4.err;
156
165
  if (err) {
@@ -199,30 +208,38 @@ function EmbedCardInternal(props) {
199
208
  }, cardProps), (0, _react.jsx)(_smartCard.EmbedResizeMessageListener, {
200
209
  embedIframeRef: embedIframeRef,
201
210
  onHeightUpdate: setLiveHeight
202
- }, (0, _react.jsx)(_ui.MediaSingle, {
203
- css: uiMediaSingleStyles,
204
- layout: layout,
205
- width: originalWidth,
206
- containerWidth: containerWidth,
207
- pctWidth: width,
208
- height: originalHeight,
209
- fullWidthMode: isFullWidth,
210
- nodeType: "embedCard",
211
- lineLength: isInsideOfBlockNode ? containerWidth : lineLength,
212
- hasFallbackContainer: hasPreview,
213
- isInsideOfInlineExtension: isInsideOfInlineExtension
214
- }, (0, _react.jsx)("div", {
215
- css: embedCardWrapperStyles
216
- }, (0, _react.jsx)("div", {
217
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
218
- className: "embedCardView-content-wrap",
219
- "data-embed-card": true,
220
- "data-layout": layout,
221
- "data-width": width,
222
- "data-card-data": data ? JSON.stringify(data) : undefined,
223
- "data-card-url": url,
224
- "data-card-original-height": originalHeight
225
- }, cardComponent)))))
211
+ }, function () {
212
+ var useCenterWrapper = (layout === 'full-width' || layout === 'wide') && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
213
+ var mediaSingle = (0, _react.jsx)(_ui.MediaSingle, {
214
+ css: uiMediaSingleStyles,
215
+ layout: layout,
216
+ width: originalWidth,
217
+ containerWidth: containerWidth,
218
+ pctWidth: width,
219
+ height: originalHeight,
220
+ fullWidthMode: isFullWidth,
221
+ nodeType: "embedCard",
222
+ lineLength: isInsideOfBlockNode ? containerWidth : lineLength,
223
+ hasFallbackContainer: hasPreview,
224
+ isInsideOfInlineExtension: isInsideOfInlineExtension
225
+ }, (0, _react.jsx)("div", {
226
+ css: embedCardWrapperStyles
227
+ }, (0, _react.jsx)("div", {
228
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
229
+ className: "embedCardView-content-wrap",
230
+ "data-embed-card": true,
231
+ "data-layout": layout,
232
+ "data-width": width,
233
+ "data-card-data": data ? JSON.stringify(data) : undefined,
234
+ "data-card-url": url,
235
+ "data-card-original-height": originalHeight
236
+ }, cardComponent)));
237
+ return useCenterWrapper ? (0, _react.jsx)("div", {
238
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
239
+ className: _consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER,
240
+ css: embedCardCenterWrapperStyles
241
+ }, mediaSingle) : mediaSingle;
242
+ }()))
226
243
  );
227
244
  }));
228
245
  }
@@ -78,7 +78,7 @@ var renderExtension = exports.renderExtension = function renderExtension(content
78
78
  var isInline = (shouldDisplayExtensionAsInline === null || shouldDisplayExtensionAsInline === void 0 ? void 0 : shouldDisplayExtensionAsInline(node)) && (0, _expValEquals.expValEquals)('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true);
79
79
  var inlineClassName = isInline ? _consts.RendererCssClassName.EXTENSION_AS_INLINE : '';
80
80
  if ((0, _expValEquals.expValEquals)('platform_editor_renderer_extension_width_fix', 'isEnabled', true)) {
81
- return (0, _react.jsx)("div", {
81
+ var extensionDiv = (0, _react.jsx)("div", {
82
82
  ref: options.handleRef
83
83
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
84
84
  ,
@@ -101,15 +101,20 @@ var renderExtension = exports.renderExtension = function renderExtension(content
101
101
  className: overflowContainerClass,
102
102
  css: [!(isInsideOfInlineExtension && (0, _expValEquals.expValEquals)('confluence_inline_insert_excerpt_width_bugfix', 'isEnabled', true)) && (0, _platformFeatureFlags.fg)('platform_fix_macro_renders_in_layouts') && containerStyle]
103
103
  }, content));
104
+ return centerAlignClass && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true) ? (0, _react.jsx)("div", {
105
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
106
+ className: _consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER
107
+ }, extensionDiv) : extensionDiv;
104
108
  }
105
109
  return (0, _react.jsx)(_ui.WidthConsumer, null, function (_ref2) {
106
110
  var width = _ref2.width;
107
- return (0, _react.jsx)("div", {
111
+ var extensionDiv = (0, _react.jsx)("div", {
108
112
  ref: options.handleRef
109
113
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
110
114
  ,
111
115
  className: "".concat(_consts.RendererCssClassName.EXTENSION, " ").concat(inlineClassName, " ").concat(options.shadowClassNames, " ").concat(centerAlignClass),
112
116
  style: {
117
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766
113
118
  width: isInline ? undefined : ((0, _expValEquals.expValEquals)('platform_editor_remove_important_in_render_ext', 'isEnabled', true) ? isCustomLayout : isTopLevel) ?
114
119
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766
115
120
  (0, _utils.calcBreakoutWidth)(layout, width) : (0, _expValEquals.expValEquals)('platform_editor_remove_important_in_render_ext', 'isEnabled', true) ? undefined : '100%',
@@ -125,6 +130,10 @@ var renderExtension = exports.renderExtension = function renderExtension(content
125
130
  className: overflowContainerClass,
126
131
  css: [!(isInsideOfInlineExtension && (0, _expValEquals.expValEquals)('confluence_inline_insert_excerpt_width_bugfix', 'isEnabled', true)) && (0, _platformFeatureFlags.fg)('platform_fix_macro_renders_in_layouts') && containerStyle]
127
132
  }, content));
133
+ return centerAlignClass && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true) ? (0, _react.jsx)("div", {
134
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
135
+ className: _consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER
136
+ }, extensionDiv) : extensionDiv;
128
137
  });
129
138
  };
130
139
  var Extension = function Extension(props) {
@@ -31,6 +31,11 @@ var containerStyles = (0, _react.css)({
31
31
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-unsafe-selectors, @atlaskit/ui-styling-standard/no-nested-selectors
32
32
  '&:first-child > .ak-renderer-extension': {
33
33
  marginTop: 0
34
+ },
35
+ // When patch is on, direct child is center wrapper (not extension); same first-child behaviour
36
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-unsafe-selectors, @atlaskit/ui-styling-standard/no-nested-selectors
37
+ '&:first-child > .ak-renderer-sticky-safe-center-wrapper': {
38
+ marginTop: 0
34
39
  }
35
40
  });
36
41
  var MultiBodiedExtensionChildrenContainer = function MultiBodiedExtensionChildrenContainer(_ref) {
@@ -166,6 +171,13 @@ var MultiBodiedExtension = function MultiBodiedExtension(props) {
166
171
  // eslint-disable-next-line @atlaskit/design-system/no-css-tagged-template-expression
167
172
  var containerActiveFrameStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n\t\t& [data-extension-frame='true']:nth-of-type(", ") {\n\t\t\tdisplay: block;\n\t\t}\n\t"])), activeChildIndex + 1);
168
173
  if ((0, _expValEquals.expValEquals)('platform_editor_renderer_extension_width_fix', 'isEnabled', true)) {
174
+ var _isTopLevel = path.length < 1;
175
+ var _useCenterWrapper = _isTopLevel && ['wide', 'full-width'].includes(layout) && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
176
+ var wrapper = (0, _react.jsx)(MultiBodiedExtensionWrapperNext, {
177
+ layout: layout,
178
+ path: path,
179
+ rendererAppearance: rendererAppearance
180
+ }, renderContent());
169
181
  return (0, _react.jsx)("section", {
170
182
  css: [containerStyles, containerActiveFrameStyles],
171
183
  "data-testid": "multiBodiedExtension--container",
@@ -174,12 +186,13 @@ var MultiBodiedExtension = function MultiBodiedExtension(props) {
174
186
  "data-layout": layout,
175
187
  "data-local-id": localId,
176
188
  "data-node-type": "multiBodiedExtension"
177
- }, (0, _react.jsx)(MultiBodiedExtensionWrapperNext, {
178
- layout: layout,
179
- path: path,
180
- rendererAppearance: rendererAppearance
181
- }, renderContent()));
189
+ }, _useCenterWrapper ? (0, _react.jsx)("div", {
190
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
191
+ className: _consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER
192
+ }, wrapper) : wrapper);
182
193
  }
194
+ var isTopLevel = path.length < 1;
195
+ var useCenterWrapper = isTopLevel && ['wide', 'full-width'].includes(layout) && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true);
183
196
  return (0, _react.jsx)("section", {
184
197
  css: [containerStyles, containerActiveFrameStyles],
185
198
  "data-testid": "multiBodiedExtension--container",
@@ -189,12 +202,16 @@ var MultiBodiedExtension = function MultiBodiedExtension(props) {
189
202
  "data-local-id": localId
190
203
  }, (0, _react.jsx)(_ui.WidthConsumer, null, function (_ref5) {
191
204
  var width = _ref5.width;
192
- return (0, _react.jsx)(MultiBodiedExtensionWrapperLegacy, {
205
+ var wrapper = (0, _react.jsx)(MultiBodiedExtensionWrapperLegacy, {
193
206
  layout: layout,
194
207
  width: width,
195
208
  path: path,
196
209
  rendererAppearance: rendererAppearance
197
210
  }, renderContent());
211
+ return useCenterWrapper ? (0, _react.jsx)("div", {
212
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
213
+ className: _consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER
214
+ }, wrapper) : wrapper;
198
215
  }));
199
216
  };
200
217
  var _default = exports.default = MultiBodiedExtension;
@@ -29,7 +29,7 @@ var _getBaseFontSize = require("./get-base-font-size");
29
29
  var _emoji = require("@atlaskit/editor-common/emoji");
30
30
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
31
31
  var _syncBlock = require("@atlaskit/editor-common/sync-block");
32
- var _css8;
32
+ var _css8, _$concat3, _$concat6;
33
33
  /* eslint-disable @atlaskit/ui-styling-standard/no-important-styles, @atlaskit/ui-styling-standard/no-unsafe-selectors */
34
34
  /* eslint-disable @atlaskit/ui-styling-standard/no-imported-style-values */
35
35
  /* eslint-disable @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-values */
@@ -996,6 +996,22 @@ var headerSmartCardStyles = (0, _react.css)({
996
996
  }
997
997
  }
998
998
  });
999
+
1000
+ // Flex wrapper for centering without transform (platform_editor_flex_based_centering).
1001
+ // flex: 1 1 0% + minWidth: 0 so the wrapper takes full width when it's a flex item (full-width nodes otherwise render narrow).
1002
+ // flexShrink: 0 on child so the node keeps size.
1003
+ var centerWrapperStyles = (0, _react.css)((0, _defineProperty2.default)({}, ".".concat(_consts.RendererCssClassName.FLEX_CENTER_WRAPPER), {
1004
+ display: 'flex',
1005
+ justifyContent: 'center',
1006
+ alignItems: 'flex-start',
1007
+ width: '100%',
1008
+ flex: '1 1 0%',
1009
+ minWidth: 0,
1010
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors
1011
+ '& > *': {
1012
+ flexShrink: 0
1013
+ }
1014
+ }));
999
1015
  var baseOtherStylesDuplicateAnchor = (0, _react.css)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({
1000
1016
  '& .UnknownBlock': {
1001
1017
  fontFamily: "var(--ds-font-family-body, \"Atlassian Sans\", ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, \"Helvetica Neue\", sans-serif)",
@@ -1041,7 +1057,7 @@ var baseOtherStylesDuplicateAnchor = (0, _react.css)((0, _defineProperty2.defaul
1041
1057
  }), 'div[class^="image-wrap-"] + div[class^="image-wrap-"]', {
1042
1058
  marginLeft: 0,
1043
1059
  marginRight: 0
1044
- }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " >"), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "*:not([data-mark-type='fragment']) .".concat(_styles.TableSharedCssClassName.TABLE_CONTAINER), {
1060
+ }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " >"), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "*:not([data-mark-type='fragment']) .".concat(_styles.TableSharedCssClassName.TABLE_CONTAINER), {
1045
1061
  // Temporarily ignoring the below the owning team can add the ticket number for the TODO. Context: https://atlassian.slack.com/archives/CPUEVD9MY/p1741565387326829
1046
1062
  // eslint-disable-next-line @atlaskit/editor/enforce-todo-comment-format
1047
1063
  // TODO - improve inline style logic on table container so important styles aren't required here
@@ -1057,16 +1073,45 @@ var baseOtherStylesDuplicateAnchor = (0, _react.css)((0, _defineProperty2.defaul
1057
1073
  overflowX: 'auto'
1058
1074
  }), "& .".concat(_consts.RendererCssClassName.EXTENSION, ":first-child"), {
1059
1075
  marginTop: 0
1060
- })), ".".concat(_consts.RendererCssClassName.DOCUMENT), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, ".".concat(_consts.RendererCssClassName.EXTENSION), {
1076
+ }), "& .".concat(_consts.RendererCssClassName.FLEX_CENTER_WRAPPER, ":first-child"), {
1077
+ marginTop: 0
1078
+ })), ".".concat(_consts.RendererCssClassName.DOCUMENT), (_$concat3 = {}, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_$concat3, ".".concat(_consts.RendererCssClassName.EXTENSION), {
1061
1079
  marginTop: "".concat(_editorSharedStyles.blockNodesVerticalMargin)
1062
- }), ".".concat(_consts.RendererCssClassName.EXTENSION_CENTER_ALIGN), {
1063
- // eslint-disable-next-line @atlaskit/design-system/use-tokens-space
1064
- marginLeft: '50%',
1065
- transform: 'translateX(-50%)'
1080
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER), {
1081
+ marginTop: "".concat(_editorSharedStyles.blockNodesVerticalMargin)
1082
+ }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " [data-multiBodiedExtension-container]:first-child .").concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER), {
1083
+ marginTop: 0
1084
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER, " .").concat(_consts.RendererCssClassName.EXTENSION), {
1085
+ marginTop: 0,
1086
+ marginBottom: 0
1087
+ }), ".".concat(_consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER, " .mediaSingleView-content-wrap"), {
1088
+ marginTop: 0,
1089
+ marginBottom: 0
1090
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_BREAKOUT_INNER, " > *:first-child"), {
1091
+ marginTop: 0
1092
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_BREAKOUT_INNER, " > *:last-child"), {
1093
+ marginBottom: 0
1094
+ }), ".".concat(_consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER, " > .mediaSingleView-content-wrap > *:first-child"), {
1095
+ marginTop: 0
1096
+ }), ".".concat(_consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER, " > .mediaSingleView-content-wrap > *:last-child"), {
1097
+ marginBottom: 0
1098
+ }), ".".concat(_consts.RendererCssClassName.BLOCK_CARD_DATASOURCE_CENTER_WRAPPER, " > div > *:first-child"), {
1099
+ marginTop: 0
1100
+ }), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_$concat3, ".".concat(_consts.RendererCssClassName.BLOCK_CARD_DATASOURCE_CENTER_WRAPPER, " > div > *:last-child"), {
1101
+ marginBottom: 0
1102
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER, " .").concat(_consts.RendererCssClassName.EXTENSION, " > *:first-child"), {
1103
+ marginTop: 0
1104
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER, " .").concat(_consts.RendererCssClassName.EXTENSION, " > *:last-child"), {
1105
+ marginBottom: 0
1066
1106
  }), ".".concat(_styles.TableSharedCssClassName.TABLE_NODE_WRAPPER), {
1067
1107
  overflowX: 'auto'
1068
1108
  }), ".".concat(_ui.shadowObserverClassNames.SHADOW_CONTAINER, " .").concat(_styles.TableSharedCssClassName.TABLE_NODE_WRAPPER), {
1069
1109
  display: 'flex'
1110
+ }))));
1111
+ var extensionCenterAlignLegacyStyles = (0, _react.css)((0, _defineProperty2.default)({}, ".".concat(_consts.RendererCssClassName.DOCUMENT), (0, _defineProperty2.default)({}, ".".concat(_consts.RendererCssClassName.EXTENSION_CENTER_ALIGN), {
1112
+ // eslint-disable-next-line @atlaskit/design-system/use-tokens-space
1113
+ marginLeft: '50%',
1114
+ transform: 'translateX(-50%)'
1070
1115
  })));
1071
1116
  var baseOtherStyles = (0, _react.css)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({
1072
1117
  '& .UnknownBlock': {
@@ -1113,7 +1158,7 @@ var baseOtherStyles = (0, _react.css)((0, _defineProperty2.default)((0, _defineP
1113
1158
  }), 'div[class^="image-wrap-"] + div[class^="image-wrap-"]', {
1114
1159
  marginLeft: 0,
1115
1160
  marginRight: 0
1116
- }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " >"), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "*:not([data-mark-type='fragment']) .".concat(_styles.TableSharedCssClassName.TABLE_CONTAINER), {
1161
+ }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " >"), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "*:not([data-mark-type='fragment']) .".concat(_styles.TableSharedCssClassName.TABLE_CONTAINER), {
1117
1162
  // Temporarily ignoring the below the owning team can add the ticket number for the TODO. Context: https://atlassian.slack.com/archives/CPUEVD9MY/p1741565387326829
1118
1163
  // eslint-disable-next-line @atlaskit/editor/enforce-todo-comment-format
1119
1164
  // TODO - improve inline style logic on table container so important styles aren't required here
@@ -1129,17 +1174,41 @@ var baseOtherStyles = (0, _react.css)((0, _defineProperty2.default)((0, _defineP
1129
1174
  overflowX: 'auto'
1130
1175
  }), "& .".concat(_consts.RendererCssClassName.EXTENSION, ":first-child"), {
1131
1176
  marginTop: 0
1132
- })), ".".concat(_consts.RendererCssClassName.DOCUMENT), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, ".".concat(_consts.RendererCssClassName.EXTENSION), {
1177
+ }), "& .".concat(_consts.RendererCssClassName.FLEX_CENTER_WRAPPER, ":first-child"), {
1178
+ marginTop: 0
1179
+ })), ".".concat(_consts.RendererCssClassName.DOCUMENT), (_$concat6 = {}, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_$concat6, ".".concat(_consts.RendererCssClassName.EXTENSION), {
1133
1180
  marginTop: "".concat(_editorSharedStyles.blockNodesVerticalMargin)
1134
- }), ".".concat(_consts.RendererCssClassName.EXTENSION_CENTER_ALIGN), {
1135
- // eslint-disable-next-line @atlaskit/design-system/use-tokens-space
1136
- marginLeft: '50%',
1137
- transform: 'translateX(-50%)'
1181
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER), {
1182
+ marginTop: "".concat(_editorSharedStyles.blockNodesVerticalMargin)
1183
+ }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " [data-multiBodiedExtension-container]:first-child .").concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER), {
1184
+ marginTop: 0
1185
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER, " .").concat(_consts.RendererCssClassName.EXTENSION), {
1186
+ marginTop: 0,
1187
+ marginBottom: 0
1188
+ }), ".".concat(_consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER, " .mediaSingleView-content-wrap"), {
1189
+ marginTop: 0,
1190
+ marginBottom: 0
1191
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_BREAKOUT_INNER, " > *:first-child"), {
1192
+ marginTop: 0
1193
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_BREAKOUT_INNER, " > *:last-child"), {
1194
+ marginBottom: 0
1195
+ }), ".".concat(_consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER, " > .mediaSingleView-content-wrap > *:first-child"), {
1196
+ marginTop: 0
1197
+ }), ".".concat(_consts.RendererCssClassName.EMBED_CARD_CENTER_WRAPPER, " > .mediaSingleView-content-wrap > *:last-child"), {
1198
+ marginBottom: 0
1199
+ }), ".".concat(_consts.RendererCssClassName.BLOCK_CARD_DATASOURCE_CENTER_WRAPPER, " > div > *:first-child"), {
1200
+ marginTop: 0
1201
+ }), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_$concat6, ".".concat(_consts.RendererCssClassName.BLOCK_CARD_DATASOURCE_CENTER_WRAPPER, " > div > *:last-child"), {
1202
+ marginBottom: 0
1203
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER, " .").concat(_consts.RendererCssClassName.EXTENSION, " > *:first-child"), {
1204
+ marginTop: 0
1205
+ }), ".".concat(_consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER, " .").concat(_consts.RendererCssClassName.EXTENSION, " > *:last-child"), {
1206
+ marginBottom: 0
1138
1207
  }), ".".concat(_styles.TableSharedCssClassName.TABLE_NODE_WRAPPER), {
1139
1208
  overflowX: 'auto'
1140
1209
  }), ".".concat(_ui.shadowObserverClassNames.SHADOW_CONTAINER, " .").concat(_styles.TableSharedCssClassName.TABLE_NODE_WRAPPER), {
1141
1210
  display: 'flex'
1142
- })));
1211
+ }))));
1143
1212
  var alignedHeadingAnchorStyleDuplicateAnchor = (0, _react.css)({
1144
1213
  // Temporarily ignoring the below the owning team can add the ticket number for the TODO. Context: https://atlassian.slack.com/archives/CPUEVD9MY/p1741565387326829
1145
1214
  // eslint-disable-next-line @atlaskit/editor/enforce-todo-comment-format
@@ -1944,11 +2013,11 @@ var RendererStyleContainer = exports.RendererStyleContainer = function RendererS
1944
2013
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values
1945
2014
  textHighlightPaddingStyles, tasksAndDecisionsStyles, (0, _expValEquals.expValEquals)('platform_editor_copy_link_a11y_inconsistency_fix', 'isEnabled', true) && headingPanelStyles, smartCardStyles, smartCardStylesAvatarFix, (0, _experiments.editorExperiment)('platform_editor_preview_panel_linking_exp', true) && headerSmartCardStyles, smartCardStylesAvatarMarginFix, smartCardStylesAvatarListZeroMarginTop, (0, _platformFeatureFlags.fg)('editor_inline_comments_on_inline_nodes') && rendererAnnotationStyles,
1946
2015
  // eslint-disable-next-line @atlaskit/platform/no-preconditioning
1947
- (0, _platformFeatureFlags.fg)('editor_inline_comments_on_inline_nodes') && rendererAnnotationStylesCommentHeightFix, (0, _expValEquals.expValEquals)('platform_editor_copy_link_a11y_inconsistency_fix', 'isEnabled', true) ? baseOtherStyles : baseOtherStylesDuplicateAnchor,
2016
+ (0, _platformFeatureFlags.fg)('editor_inline_comments_on_inline_nodes') && rendererAnnotationStylesCommentHeightFix, (0, _expValEquals.expValEquals)('platform_editor_copy_link_a11y_inconsistency_fix', 'isEnabled', true) ? baseOtherStyles : baseOtherStylesDuplicateAnchor, !(0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true) && extensionCenterAlignLegacyStyles,
1948
2017
  // this should be placed after baseOtherStyles
1949
2018
  (0, _expValEquals.expValEquals)('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true) && ((0, _expValEquals.expValEquals)('platform_editor_remove_important_in_render_ext', 'isEnabled', true) ? extensionAsInlineStyle : oldExtensionAsInlineStyle), (0, _expValEquals.expValEquals)('confluence_insert_excerpt_inline_vertical_align', 'isEnabled', true) && inlineExtensionRendererMarginFix, allowNestedHeaderLinks && ((0, _expValEquals.expValEquals)('platform_editor_copy_link_a11y_inconsistency_fix', 'isEnabled', true) ? alignedHeadingAnchorStyle : alignedHeadingAnchorStyleDuplicateAnchor), mediaSingleSharedStyle,
1950
2019
  // merge firstWrappedMediaStyles with mediaSingleSharedStyle when clean up platform_editor_fix_media_in_renderer
1951
- (0, _platformFeatureFlags.fg)('platform_editor_fix_media_in_renderer') && firstWrappedMediaStyles, tableSharedStyle, tableRendererHeaderStylesForTableCellOnly, (0, _platformFeatureFlags.fg)('platform_editor_bordered_panel_nested_in_table') && tableRendererNestedPanelStyles, isBackgroundClipBrowserFixNeeded() && tableStylesBackGroundClipForGeckoForTableCellOnly, (0, _platformFeatureFlags.fg)('platform_editor_nested_dnd_styles_changes') ? firstNodeWithNotMarginTopWithNestedDnD : firstNodeWithNotMarginTop, rendererTableStyles, (0, _table.isStickyScrollbarEnabled)(appearance) && stickyScrollbarStyles, rendererTableHeaderEqualHeightStylesForTableCellOnly, allowColumnSorting && rendererTableSortableColumnStyles, allowColumnSorting && allowNestedHeaderLinks && ((0, _expValEquals.expValEquals)('platform_editor_copy_link_a11y_inconsistency_fix', 'isEnabled', true) ? rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks : rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinksDuplicateAnchor), rendererTableColumnStyles, stickyHeaderStyles, codeBlockAndLayoutStyles, columnLayoutSharedStyle, isAdvancedLayoutsOn && columnLayoutResponsiveSharedStyle, isAdvancedLayoutsOn && columnLayoutResponsiveRendererStyles, isAdvancedLayoutsOn && layoutSectionForAdvancedLayoutsStyles, !useBlockRenderForCodeBlock && gridRenderForCodeBlockStyles, browser.safari && codeBlockInListSafariFixStyles, appearance === 'full-page' && !isPreviewPanelResponsivenessOn && responsiveBreakoutWidth, appearance === 'full-page' && isPreviewPanelResponsivenessOn && responsiveBreakoutWidthWithReducedPadding, (appearance === 'full-width' || appearance === 'max' && ((0, _expValEquals.expValEquals)('editor_tinymce_full_width_mode', 'isEnabled', true) || (0, _expValEquals.expValEquals)('confluence_max_width_content_appearance', 'isEnabled', true))) && responsiveBreakoutWidthFullWidth, (0, _expValEquals.expValEquals)('platform_editor_lovability_emoji_scaling', 'isEnabled', true) ? isCompactModeEnabled ? scaledDenseEmojiStyles : scaledEmojiStyles : isCompactModeEnabled ? denseStyles : undefined, (0, _experiments.editorExperiment)('platform_synced_block', true) && syncBlockStyles, (0, _experiments.editorExperiment)('platform_synced_block', true) && syncBlockOverflowStyles, (0, _experiments.editorExperiment)('platform_synced_block', true) && (0, _platformFeatureFlags.fg)('platform_synced_block_patch_2') && syncBlockPatch2Styles],
2020
+ (0, _platformFeatureFlags.fg)('platform_editor_fix_media_in_renderer') && firstWrappedMediaStyles, tableSharedStyle, tableRendererHeaderStylesForTableCellOnly, (0, _platformFeatureFlags.fg)('platform_editor_bordered_panel_nested_in_table') && tableRendererNestedPanelStyles, isBackgroundClipBrowserFixNeeded() && tableStylesBackGroundClipForGeckoForTableCellOnly, (0, _platformFeatureFlags.fg)('platform_editor_nested_dnd_styles_changes') ? firstNodeWithNotMarginTopWithNestedDnD : firstNodeWithNotMarginTop, rendererTableStyles, (0, _table.isStickyScrollbarEnabled)(appearance) && stickyScrollbarStyles, rendererTableHeaderEqualHeightStylesForTableCellOnly, allowColumnSorting && rendererTableSortableColumnStyles, allowColumnSorting && allowNestedHeaderLinks && ((0, _expValEquals.expValEquals)('platform_editor_copy_link_a11y_inconsistency_fix', 'isEnabled', true) ? rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks : rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinksDuplicateAnchor), rendererTableColumnStyles, stickyHeaderStyles, codeBlockAndLayoutStyles, columnLayoutSharedStyle, isAdvancedLayoutsOn && columnLayoutResponsiveSharedStyle, isAdvancedLayoutsOn && columnLayoutResponsiveRendererStyles, isAdvancedLayoutsOn && layoutSectionForAdvancedLayoutsStyles, !useBlockRenderForCodeBlock && gridRenderForCodeBlockStyles, browser.safari && codeBlockInListSafariFixStyles, appearance === 'full-page' && !isPreviewPanelResponsivenessOn && responsiveBreakoutWidth, appearance === 'full-page' && isPreviewPanelResponsivenessOn && responsiveBreakoutWidthWithReducedPadding, (appearance === 'full-width' || appearance === 'max' && ((0, _expValEquals.expValEquals)('editor_tinymce_full_width_mode', 'isEnabled', true) || (0, _expValEquals.expValEquals)('confluence_max_width_content_appearance', 'isEnabled', true))) && responsiveBreakoutWidthFullWidth, (0, _expValEquals.expValEquals)('platform_editor_lovability_emoji_scaling', 'isEnabled', true) ? isCompactModeEnabled ? scaledDenseEmojiStyles : scaledEmojiStyles : isCompactModeEnabled ? denseStyles : undefined, (0, _experiments.editorExperiment)('platform_synced_block', true) && syncBlockStyles, (0, _experiments.editorExperiment)('platform_synced_block', true) && syncBlockOverflowStyles, (0, _experiments.editorExperiment)('platform_synced_block', true) && (0, _platformFeatureFlags.fg)('platform_synced_block_patch_2') && syncBlockPatch2Styles, centerWrapperStyles],
1952
2021
  "data-testid": testId
1953
2022
  }, children)
1954
2023
  );
@@ -71,7 +71,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
71
71
  var TABLE_INFO_TIMEOUT = 10000;
72
72
  var RENDER_EVENT_SAMPLE_RATE = 0.2;
73
73
  var packageName = "@atlaskit/renderer";
74
- var packageVersion = "126.9.4";
74
+ var packageVersion = "126.9.5";
75
75
  var setAsQueryContainerStyles = (0, _react2.css)({
76
76
  containerName: 'ak-renderer-wrapper',
77
77
  containerType: 'inline-size'
@@ -3,11 +3,22 @@
3
3
 
4
4
  const clPrefix = 'ak-renderer-';
5
5
  export const RendererCssClassName = {
6
+ FLEX_CENTER_WRAPPER: `${clPrefix}flex-center-wrapper`,
6
7
  DOCUMENT: `${clPrefix}document`,
7
8
  EXTENSION: `${clPrefix}extension`,
8
9
  EXTENSION_AS_INLINE: `${clPrefix}extension-as-inline`,
9
10
  EXTENSION_CENTER_ALIGN: `${clPrefix}extension-center-align`,
10
11
  EXTENSION_OVERFLOW_CONTAINER: `${clPrefix}extension-overflow-container`,
12
+ /** Wrapper for center-aligned extensions/MBE; margin here so it participates in collapse */
13
+ STICKY_SAFE_CENTER_WRAPPER: `${clPrefix}sticky-safe-center-wrapper`,
14
+ /** Wrapper for center-aligned embed card (wide/full-width); margin here so it participates in collapse */
15
+ EMBED_CARD_CENTER_WRAPPER: `${clPrefix}embed-card-center-wrapper`,
16
+ /** Wrapper for center-aligned block card datasource (wide/full-width); margin here so it participates in collapse */
17
+ BLOCK_CARD_DATASOURCE_CENTER_WRAPPER: `${clPrefix}block-card-datasource-center-wrapper`,
18
+ /** Outer flex wrapper for sticky-safe breakout (has vertical margin); zero margin when first in doc */
19
+ STICKY_SAFE_BREAKOUT_WRAPPER: `${clPrefix}sticky-safe-breakout-wrapper`,
20
+ /** Flex item in sticky-safe breakout; zero first/last child margin so flex container height matches legacy */
21
+ STICKY_SAFE_BREAKOUT_INNER: `${clPrefix}sticky-safe-breakout-inner`,
11
22
  NUMBER_COLUMN: `${clPrefix}table-number-column`,
12
23
  SORTABLE_COLUMN_WRAPPER: `${clPrefix}tableHeader-sortable-column__wrapper`,
13
24
  SORTABLE_COLUMN: `${clPrefix}tableHeader-sortable-column`,
@@ -400,10 +400,9 @@ export default class ReactSerializer {
400
400
  const isInsideOfBlockNode = insideBlockNode(path, node.type.schema);
401
401
  const isInsideMultiBodiedExtension = insideMultiBodiedExtension(path, node.type.schema);
402
402
  const isInsideOfTable = insideTable(path, node.type.schema);
403
-
404
- // TODO: EDITOR-3850 - support sticky headers inside breakouts (layouts and expands)
405
- const isInsideBreakoutExpand = expValEquals('platform_editor_table_sticky_header_improvements', 'cohort', 'test_with_overflow') && expValEquals('platform_editor_table_sticky_header_patch_11', 'isEnabled', true) && insideBreakoutExpand(path);
406
- const stickyHeaders = !isInsideOfTable && !insideBreakoutLayout(path) && !isInsideBreakoutExpand ? this.stickyHeaders : undefined;
403
+ const isStickySafeCenteringEnabled = expValEquals('platform_editor_flex_based_centering', 'isEnabled', true);
404
+ const isInsideBreakoutExpand = !isStickySafeCenteringEnabled && expValEquals('platform_editor_table_sticky_header_improvements', 'cohort', 'test_with_overflow') && expValEquals('platform_editor_table_sticky_header_patch_11', 'isEnabled', true) && insideBreakoutExpand(path);
405
+ const stickyHeaders = isStickySafeCenteringEnabled ? !isInsideOfTable ? this.stickyHeaders : undefined : !isInsideOfTable && !insideBreakoutLayout(path) && !isInsideBreakoutExpand ? this.stickyHeaders : undefined;
407
406
  return {
408
407
  ...this.getProps(node),
409
408
  allowColumnSorting: this.allowColumnSorting,