@atlaskit/renderer 126.2.2 → 126.2.4

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 (36) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/react/index.js +12 -4
  3. package/dist/cjs/react/nodes/emoji.js +4 -8
  4. package/dist/cjs/react/nodes/heading.js +3 -1
  5. package/dist/cjs/react/nodes/paragraph.js +4 -2
  6. package/dist/cjs/react/utils/{merge-inlined-extension.js → markBlockAsInline.js} +29 -53
  7. package/dist/cjs/ui/Renderer/RendererStyleContainer.js +21 -19
  8. package/dist/cjs/ui/Renderer/index.js +1 -1
  9. package/dist/es2019/react/index.js +10 -2
  10. package/dist/es2019/react/nodes/emoji.js +3 -7
  11. package/dist/es2019/react/nodes/heading.js +3 -1
  12. package/dist/es2019/react/nodes/paragraph.js +4 -2
  13. package/dist/es2019/react/utils/markBlockAsInline.js +47 -0
  14. package/dist/es2019/ui/Renderer/RendererStyleContainer.js +14 -5
  15. package/dist/es2019/ui/Renderer/index.js +1 -1
  16. package/dist/esm/react/index.js +12 -4
  17. package/dist/esm/react/nodes/emoji.js +3 -7
  18. package/dist/esm/react/nodes/heading.js +3 -1
  19. package/dist/esm/react/nodes/paragraph.js +4 -2
  20. package/dist/esm/react/utils/{merge-inlined-extension.js → markBlockAsInline.js} +27 -52
  21. package/dist/esm/ui/Renderer/RendererStyleContainer.js +21 -19
  22. package/dist/esm/ui/Renderer/index.js +1 -1
  23. package/dist/types/react/index.d.ts +1 -0
  24. package/dist/types/react/nodes/emoji.d.ts +3 -10
  25. package/dist/types/react/nodes/paragraph.d.ts +1 -1
  26. package/dist/types/react/types.d.ts +1 -0
  27. package/dist/types/react/utils/markBlockAsInline.d.ts +10 -0
  28. package/dist/types-ts4.5/react/index.d.ts +1 -0
  29. package/dist/types-ts4.5/react/nodes/emoji.d.ts +3 -10
  30. package/dist/types-ts4.5/react/nodes/paragraph.d.ts +1 -1
  31. package/dist/types-ts4.5/react/types.d.ts +1 -0
  32. package/dist/types-ts4.5/react/utils/markBlockAsInline.d.ts +10 -0
  33. package/package.json +7 -3
  34. package/dist/es2019/react/utils/merge-inlined-extension.js +0 -75
  35. package/dist/types/react/utils/merge-inlined-extension.d.ts +0 -25
  36. package/dist/types-ts4.5/react/utils/merge-inlined-extension.d.ts +0 -25
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 126.2.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`16e318bcceb16`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/16e318bcceb16) -
8
+ [ux] EDITOR-4603 - Inline Bodied Extension: Can not create inline comments on merged text nodes
9
+
10
+ ## 126.2.3
11
+
12
+ ### Patch Changes
13
+
14
+ - [`dac15aa628811`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/dac15aa628811) -
15
+ [ux] fix wrapped media/embed link is displayed out of border in synced block
16
+ - Updated dependencies
17
+
3
18
  ## 126.2.2
4
19
 
5
20
  ### Patch Changes
@@ -29,7 +29,7 @@ var _rendererNode = require("./renderer-node");
29
29
  var _renderTextSegments = require("./utils/render-text-segments");
30
30
  var _segmentText = require("./utils/segment-text");
31
31
  var _getStandaloneBackgroundColorMarks = require("./utils/getStandaloneBackgroundColorMarks");
32
- var _mergeInlinedExtension = require("./utils/merge-inlined-extension");
32
+ var _markBlockAsInline = require("./utils/markBlockAsInline");
33
33
  var _excluded = ["key"];
34
34
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
35
35
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -65,6 +65,7 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
65
65
  (0, _defineProperty2.default)(this, "surroundTextNodesWithTextWrapper", false);
66
66
  (0, _defineProperty2.default)(this, "allowAnnotations", false);
67
67
  (0, _defineProperty2.default)(this, "standaloneBackgroundColorMarks", []);
68
+ (0, _defineProperty2.default)(this, "inlinePositions", new Set());
68
69
  (0, _defineProperty2.default)(this, "serializeFragmentChild", function (node, _ref) {
69
70
  var index = _ref.index,
70
71
  parentInfo = _ref.parentInfo;
@@ -642,6 +643,7 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
642
643
  var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
643
644
  var startPos = this.startPos + path.length;
644
645
  return _objectSpread({
646
+ asInline: this.inlinePositions.has(startPos) ? 'on' : undefined,
645
647
  text: node.text,
646
648
  providers: this.providers,
647
649
  eventHandlers: this.eventHandlers,
@@ -768,14 +770,20 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
768
770
  }, {
769
771
  key: "getChildNodes",
770
772
  value: function getChildNodes(fragment) {
773
+ var _this8 = this;
771
774
  var children = [];
772
775
  fragment.forEach(function (node) {
773
776
  children.push(node);
774
777
  });
775
778
  children = (0, _nodes.mergeTextNodes)(children);
776
779
  if (!!this.shouldDisplayExtensionAsInline && (0, _expValEquals.expValEquals)('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true)) {
777
- children = (0, _mergeInlinedExtension.mergeInlinedExtension)({
780
+ (0, _markBlockAsInline.markBlockAsInline)({
778
781
  nodes: children,
782
+ onMark: function onMark(_ref5) {
783
+ var pos = _ref5.pos;
784
+ _this8.inlinePositions.add(pos);
785
+ },
786
+ parentPos: this.startPos,
779
787
  shouldDisplayExtensionAsInline: this.shouldDisplayExtensionAsInline
780
788
  });
781
789
  }
@@ -792,9 +800,9 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
792
800
  }, {
793
801
  key: "buildMarkStructure",
794
802
  value: function buildMarkStructure(content) {
795
- var _this8 = this;
803
+ var _this9 = this;
796
804
  return mergeMarks(content.map(function (node) {
797
- var nodeMarks = _this8.getMarks(node);
805
+ var nodeMarks = _this9.getMarks(node);
798
806
  if (nodeMarks.length === 0) {
799
807
  return node;
800
808
  }
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.default = exports.EmojiItemComponent = void 0;
8
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
@@ -96,7 +96,7 @@ var EmojiNode = /*#__PURE__*/function (_PureComponent) {
96
96
  (0, _defineProperty2.default)(EmojiNode, "defaultProps", {
97
97
  showTooltip: true
98
98
  });
99
- function EmojiItem(props) {
99
+ var EmojiItemComponent = exports.EmojiItemComponent = function EmojiItemComponent(props) {
100
100
  var id = props.id,
101
101
  providers = props.providers,
102
102
  shortName = props.shortName,
@@ -128,9 +128,5 @@ function EmojiItem(props) {
128
128
  fitToHeight: fitToHeight,
129
129
  resourceConfig: resourceConfig
130
130
  });
131
- }
132
-
133
- // Working around an issue with pre existing tests using react-test-renderer
134
- // https://github.com/facebook/react/issues/17301#issuecomment-557765213
135
- EmojiItem.defaultProps = {};
136
- var _default = exports.default = /*#__PURE__*/(0, _react2.memo)(EmojiItem);
131
+ };
132
+ var _default = exports.default = /*#__PURE__*/(0, _react2.memo)(EmojiItemComponent);
@@ -57,7 +57,8 @@ function Heading(props) {
57
57
  allowHeadingAnchorLinks = props.allowHeadingAnchorLinks,
58
58
  marks = props.marks,
59
59
  invisible = props.invisible,
60
- localId = props.localId;
60
+ localId = props.localId,
61
+ asInline = props.asInline;
61
62
  var HX = "h".concat(props.level);
62
63
  var mouseEntered = _react.default.useRef(false);
63
64
  var showAnchorLink = !!props.showAnchorLink;
@@ -77,6 +78,7 @@ function Heading(props) {
77
78
  id: headingIdToUse,
78
79
  "data-local-id": localId,
79
80
  "data-renderer-start-pos": dataAttributes['data-renderer-start-pos'],
81
+ "data-as-inline": asInline,
80
82
  onMouseEnter: mouseEnterHandler
81
83
  }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showAnchorLink && headingId && isRightAligned && /*#__PURE__*/_react.default.createElement(WrappedHeadingAnchor, {
82
84
  level: props.level,
@@ -11,7 +11,8 @@ var _inline = _interopRequireDefault(require("./inline"));
11
11
  function Paragraph(_ref) {
12
12
  var children = _ref.children,
13
13
  dataAttributes = _ref.dataAttributes,
14
- localId = _ref.localId;
14
+ localId = _ref.localId,
15
+ asInline = _ref.asInline;
15
16
  return (
16
17
  /*#__PURE__*/
17
18
  // ignore the eslint warning Text primitive does not support dataAttributes
@@ -19,7 +20,8 @@ function Paragraph(_ref) {
19
20
  // Ignored via go/ees005
20
21
  // eslint-disable-next-line react/jsx-props-no-spreading, @atlaskit/design-system/use-primitives-text
21
22
  _react.default.createElement("p", (0, _extends2.default)({}, dataAttributes, {
22
- "data-local-id": localId
23
+ "data-local-id": localId,
24
+ "data-as-inline": asInline
23
25
  }), /*#__PURE__*/_react.default.createElement(_inline.default, null, children))
24
26
  );
25
27
  }
@@ -1,34 +1,22 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
- exports.mergeInlinedExtension = mergeInlinedExtension;
7
+ exports.markBlockAsInline = markBlockAsInline;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
7
9
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
8
10
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
9
11
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
10
- /**
11
- * Merges extensions (displayed as inline) with adjacent textblocks
12
- *
13
- * Input:
14
- * [
15
- * { type: 'paragraph', content: [ { type: 'text', text: 'Hello' } ] },
16
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
17
- * { type: 'paragraph', content: [ { type: 'text', text: '!' } ] },
18
- * ]
19
- *
20
- * Output:
21
- * [
22
- * { type: 'paragraph', content: [
23
- * { type: 'text', text: 'Hello' },
24
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
25
- * { type: 'text', text: '!' }
26
- * ] },
27
- * ]
28
- */
29
- function mergeInlinedExtension(_ref) {
12
+ function markBlockAsInline(_ref) {
30
13
  var nodes = _ref.nodes,
14
+ onMark = _ref.onMark,
15
+ parentPos = _ref.parentPos,
31
16
  shouldDisplayExtensionAsInline = _ref.shouldDisplayExtensionAsInline;
17
+ if (!nodes || nodes.length === 0 || nodes[0].isInline) {
18
+ return;
19
+ }
32
20
  function isInlineBodiedExtension(node) {
33
21
  var _node$attrs, _node$attrs2, _node$attrs3, _node$attrs4;
34
22
  return Boolean((node === null || node === void 0 ? void 0 : node.type.name) === 'bodiedExtension' && shouldDisplayExtensionAsInline({
@@ -41,52 +29,40 @@ function mergeInlinedExtension(_ref) {
41
29
  }));
42
30
  }
43
31
  try {
44
- // if it's [inlinedBodiedExtension], wrap it in a textblock
45
- if (nodes.length === 1 && isInlineBodiedExtension(nodes[0])) {
46
- return [nodes[0].type.schema.nodes.paragraph.create(null, nodes[0])];
47
- }
48
- var newNodes = [];
49
- var _iterator = _createForOfIteratorHelper(nodes),
32
+ var prevPos = parentPos;
33
+ var pos = parentPos;
34
+ var prevTextBlockType;
35
+ var _iterator = _createForOfIteratorHelper(nodes.entries()),
50
36
  _step;
51
37
  try {
52
38
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
53
- var node = _step.value;
54
- var previousNode = newNodes[newNodes.length - 1];
55
-
56
- // first node
57
- if (!previousNode) {
58
- newNodes.push(node);
59
- continue;
60
- }
39
+ var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
40
+ index = _step$value[0],
41
+ node = _step$value[1];
42
+ var prevNode = nodes[index - 1];
61
43
 
62
44
  // textblock + inlinedBodiedExtension
63
- if (isInlineBodiedExtension(node) && previousNode.isTextblock) {
64
- newNodes[newNodes.length - 1] = previousNode.copy(previousNode.content.addToEnd(node));
65
- }
66
- // textblock(..., inlinedBodiedExtension) + textblock
67
- else if (node.isTextblock && previousNode.isTextblock && isInlineBodiedExtension(previousNode.content.lastChild)) {
68
- newNodes[newNodes.length - 1] = previousNode.copy(previousNode.content.append(node.content));
45
+ if (prevNode !== null && prevNode !== void 0 && prevNode.isTextblock && isInlineBodiedExtension(node)) {
46
+ onMark({
47
+ pos: prevPos
48
+ });
69
49
  }
70
50
  // inlinedBodiedExtension + textblock
71
- else if (isInlineBodiedExtension(previousNode) && node.isTextblock) {
72
- newNodes[newNodes.length - 1] = node.copy(node.content.addToStart(previousNode));
73
- }
74
- // inlinedBodiedExtension + non-textblock
75
- else if (isInlineBodiedExtension(previousNode) && !node.isTextblock) {
76
- newNodes[newNodes.length - 1] = node.type.schema.nodes.paragraph.create(null, previousNode);
77
- newNodes.push(node);
51
+ else if (isInlineBodiedExtension(prevNode) && node.isTextblock && (!prevTextBlockType || node.type === prevTextBlockType)) {
52
+ onMark({
53
+ pos: pos
54
+ });
78
55
  }
79
- // default case
80
- else {
81
- newNodes.push(node);
56
+ if (!isInlineBodiedExtension(node)) {
57
+ prevTextBlockType = node.isTextblock ? node.type : undefined;
82
58
  }
59
+ prevPos = pos;
60
+ pos += node.nodeSize;
83
61
  }
84
62
  } catch (err) {
85
63
  _iterator.e(err);
86
64
  } finally {
87
65
  _iterator.f();
88
66
  }
89
- return newNodes;
90
67
  } catch (_unused) {}
91
- return nodes;
92
68
  }
@@ -30,7 +30,7 @@ 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
32
  var _css, _css7;
33
- /* eslint-disable @atlaskit/ui-styling-standard/no-important-styles */
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 */
36
36
  /**
@@ -709,23 +709,21 @@ var extensionStyle = (0, _react.css)({
709
709
  fontSize: 'var(--ak-renderer-base-font-size)'
710
710
  }
711
711
  });
712
- var extensionAsInlineStyle = (0, _react.css)({
713
- '.ak-renderer-document .ak-renderer-extension-as-inline': {
714
- display: 'inline-block',
715
- // use !important here because the current width has !important applied to it and it's not working when used in React style prop
716
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
717
- width: 'auto !important',
718
- marginTop: 0
719
- },
720
- '.ak-renderer-extension-as-inline .ak-renderer-extension-overflow-container': {
721
- display: 'inline-block',
722
- overflowX: 'visible',
723
- containerType: 'normal'
724
- },
725
- '.ak-renderer-extension-as-inline div, .ak-renderer-extension-as-inline p': {
726
- display: 'inline-block'
727
- }
728
- });
712
+ var extensionAsInlineStyle = (0, _react.css)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, ".".concat(_consts.RendererCssClassName.DOCUMENT, " [data-as-inline=\"on\"]"), {
713
+ display: 'inline-block'
714
+ }), ".".concat(_consts.RendererCssClassName.DOCUMENT, " .").concat(_consts.RendererCssClassName.EXTENSION_AS_INLINE), {
715
+ display: 'inline-block',
716
+ // use !important here because the current width has !important applied to it and it's not working when used in React style prop
717
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
718
+ width: 'auto !important',
719
+ marginTop: 0
720
+ }), ".".concat(_consts.RendererCssClassName.EXTENSION_AS_INLINE, " .").concat(_consts.RendererCssClassName.EXTENSION_OVERFLOW_CONTAINER), {
721
+ display: 'inline-block',
722
+ overflowX: 'visible',
723
+ containerType: 'normal'
724
+ }), ".".concat(_consts.RendererCssClassName.EXTENSION_AS_INLINE, " div, .").concat(_consts.RendererCssClassName.EXTENSION_AS_INLINE, " p"), {
725
+ display: 'inline-block'
726
+ }));
729
727
  var shadowSharedStyle = (0, _react.css)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "& .".concat(_ui.shadowClassNames.RIGHT_SHADOW, "::before, .").concat(_ui.shadowClassNames.RIGHT_SHADOW, "::after, .").concat(_ui.shadowClassNames.LEFT_SHADOW, "::before, .").concat(_ui.shadowClassNames.LEFT_SHADOW, "::after"), {
730
728
  display: 'none',
731
729
  position: 'absolute',
@@ -1631,6 +1629,10 @@ var syncBlockStyles = (0, _react.css)((0, _defineProperty2.default)((0, _defineP
1631
1629
  }), ".".concat(_syncBlock.SyncBlockSharedCssClassName.loading), {
1632
1630
  boxShadow: "0 0 0 1px ".concat("var(--ds-border, #0B120E24)")
1633
1631
  }));
1632
+ var syncBlockOverflowStyles = (0, _react.css)((0, _defineProperty2.default)({}, ".".concat(_syncBlock.SyncBlockSharedCssClassName.renderer, ", .").concat(_syncBlock.BodiedSyncBlockSharedCssClassName.renderer, ", .").concat(_syncBlock.SyncBlockSharedCssClassName.error, ", .").concat(_syncBlock.SyncBlockSharedCssClassName.loading), {
1633
+ // Contain floated elements (wrap-left/wrap-right) within synced block borders
1634
+ overflow: 'hidden'
1635
+ }));
1634
1636
  var RendererStyleContainer = exports.RendererStyleContainer = function RendererStyleContainer(props) {
1635
1637
  var onClick = props.onClick,
1636
1638
  onMouseDown = props.onMouseDown,
@@ -1677,7 +1679,7 @@ var RendererStyleContainer = exports.RendererStyleContainer = function RendererS
1677
1679
  // this should be placed after baseOtherStyles
1678
1680
  (0, _expValEquals.expValEquals)('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true) && extensionAsInlineStyle, allowNestedHeaderLinks && alignedHeadingAnchorStyle, mediaSingleSharedStyle,
1679
1681
  // merge firstWrappedMediaStyles with mediaSingleSharedStyle when clean up platform_editor_fix_media_in_renderer
1680
- (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 && rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks, 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, _expValEquals.expValEquals)('platform_synced_block', 'isEnabled', true) && syncBlockStyles],
1682
+ (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 && rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks, 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, _expValEquals.expValEquals)('platform_synced_block', 'isEnabled', true) && syncBlockStyles, (0, _expValEquals.expValEquals)('platform_synced_block', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') && syncBlockOverflowStyles],
1681
1683
  "data-testid": testId
1682
1684
  }, children)
1683
1685
  );
@@ -70,7 +70,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
70
70
  var TABLE_INFO_TIMEOUT = 10000;
71
71
  var RENDER_EVENT_SAMPLE_RATE = 0.2;
72
72
  var packageName = "@atlaskit/renderer";
73
- var packageVersion = "126.2.1";
73
+ var packageVersion = "126.2.3";
74
74
  var setAsQueryContainerStyles = (0, _react2.css)({
75
75
  containerName: 'ak-renderer-wrapper',
76
76
  containerType: 'inline-size'
@@ -18,7 +18,7 @@ import { insideBlockNode, insideBreakoutExpand, insideBreakoutLayout, insideMult
18
18
  import { renderTextSegments } from './utils/render-text-segments';
19
19
  import { segmentText } from './utils/segment-text';
20
20
  import { getStandaloneBackgroundColorMarks } from './utils/getStandaloneBackgroundColorMarks';
21
- import { mergeInlinedExtension } from './utils/merge-inlined-extension';
21
+ import { markBlockAsInline } from './utils/markBlockAsInline';
22
22
  function mergeMarks(marksAndNodes) {
23
23
  return marksAndNodes.reduce((acc, markOrNode) => {
24
24
  const prev = acc.length && acc[acc.length - 1] || null;
@@ -49,6 +49,7 @@ export default class ReactSerializer {
49
49
  _defineProperty(this, "surroundTextNodesWithTextWrapper", false);
50
50
  _defineProperty(this, "allowAnnotations", false);
51
51
  _defineProperty(this, "standaloneBackgroundColorMarks", []);
52
+ _defineProperty(this, "inlinePositions", new Set());
52
53
  _defineProperty(this, "serializeFragmentChild", (node, {
53
54
  index,
54
55
  parentInfo
@@ -573,6 +574,7 @@ export default class ReactSerializer {
573
574
  getProps(node, path = []) {
574
575
  const startPos = this.startPos + path.length;
575
576
  return {
577
+ asInline: this.inlinePositions.has(startPos) ? 'on' : undefined,
576
578
  text: node.text,
577
579
  providers: this.providers,
578
580
  eventHandlers: this.eventHandlers,
@@ -687,8 +689,14 @@ export default class ReactSerializer {
687
689
  });
688
690
  children = mergeTextNodes(children);
689
691
  if (!!this.shouldDisplayExtensionAsInline && expValEquals('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true)) {
690
- children = mergeInlinedExtension({
692
+ markBlockAsInline({
691
693
  nodes: children,
694
+ onMark: ({
695
+ pos
696
+ }) => {
697
+ this.inlinePositions.add(pos);
698
+ },
699
+ parentPos: this.startPos,
692
700
  shouldDisplayExtensionAsInline: this.shouldDisplayExtensionAsInline
693
701
  });
694
702
  }
@@ -76,7 +76,7 @@ _defineProperty(EmojiNode, "displayName", 'EmojiNode');
76
76
  _defineProperty(EmojiNode, "defaultProps", {
77
77
  showTooltip: true
78
78
  });
79
- function EmojiItem(props) {
79
+ export const EmojiItemComponent = props => {
80
80
  const {
81
81
  id,
82
82
  providers,
@@ -110,9 +110,5 @@ function EmojiItem(props) {
110
110
  fitToHeight: fitToHeight,
111
111
  resourceConfig: resourceConfig
112
112
  });
113
- }
114
-
115
- // Working around an issue with pre existing tests using react-test-renderer
116
- // https://github.com/facebook/react/issues/17301#issuecomment-557765213
117
- EmojiItem.defaultProps = {};
118
- export default /*#__PURE__*/memo(EmojiItem);
113
+ };
114
+ export default /*#__PURE__*/memo(EmojiItemComponent);
@@ -48,7 +48,8 @@ function Heading(props) {
48
48
  allowHeadingAnchorLinks,
49
49
  marks,
50
50
  invisible,
51
- localId
51
+ localId,
52
+ asInline
52
53
  } = props;
53
54
  const HX = `h${props.level}`;
54
55
  const mouseEntered = React.useRef(false);
@@ -69,6 +70,7 @@ function Heading(props) {
69
70
  id: headingIdToUse,
70
71
  "data-local-id": localId,
71
72
  "data-renderer-start-pos": dataAttributes['data-renderer-start-pos'],
73
+ "data-as-inline": asInline,
72
74
  onMouseEnter: mouseEnterHandler
73
75
  }, /*#__PURE__*/React.createElement(React.Fragment, null, showAnchorLink && headingId && isRightAligned && /*#__PURE__*/React.createElement(WrappedHeadingAnchor, {
74
76
  level: props.level,
@@ -4,7 +4,8 @@ import Inline from './inline';
4
4
  export default function Paragraph({
5
5
  children,
6
6
  dataAttributes,
7
- localId
7
+ localId,
8
+ asInline
8
9
  }) {
9
10
  return (
10
11
  /*#__PURE__*/
@@ -13,7 +14,8 @@ export default function Paragraph({
13
14
  // Ignored via go/ees005
14
15
  // eslint-disable-next-line react/jsx-props-no-spreading, @atlaskit/design-system/use-primitives-text
15
16
  React.createElement("p", _extends({}, dataAttributes, {
16
- "data-local-id": localId
17
+ "data-local-id": localId,
18
+ "data-as-inline": asInline
17
19
  }), /*#__PURE__*/React.createElement(Inline, null, children))
18
20
  );
19
21
  }
@@ -0,0 +1,47 @@
1
+ export function markBlockAsInline({
2
+ nodes,
3
+ onMark,
4
+ parentPos,
5
+ shouldDisplayExtensionAsInline
6
+ }) {
7
+ if (!nodes || nodes.length === 0 || nodes[0].isInline) {
8
+ return;
9
+ }
10
+ function isInlineBodiedExtension(node) {
11
+ var _node$attrs, _node$attrs2, _node$attrs3, _node$attrs4;
12
+ return Boolean((node === null || node === void 0 ? void 0 : node.type.name) === 'bodiedExtension' && shouldDisplayExtensionAsInline({
13
+ type: node.type.name,
14
+ extensionKey: (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.extensionKey,
15
+ extensionType: (_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.extensionType,
16
+ parameters: (_node$attrs3 = node.attrs) === null || _node$attrs3 === void 0 ? void 0 : _node$attrs3.parameters,
17
+ content: node.content,
18
+ localId: (_node$attrs4 = node.attrs) === null || _node$attrs4 === void 0 ? void 0 : _node$attrs4.localId
19
+ }));
20
+ }
21
+ try {
22
+ let prevPos = parentPos;
23
+ let pos = parentPos;
24
+ let prevTextBlockType;
25
+ for (const [index, node] of nodes.entries()) {
26
+ const prevNode = nodes[index - 1];
27
+
28
+ // textblock + inlinedBodiedExtension
29
+ if (prevNode !== null && prevNode !== void 0 && prevNode.isTextblock && isInlineBodiedExtension(node)) {
30
+ onMark({
31
+ pos: prevPos
32
+ });
33
+ }
34
+ // inlinedBodiedExtension + textblock
35
+ else if (isInlineBodiedExtension(prevNode) && node.isTextblock && (!prevTextBlockType || node.type === prevTextBlockType)) {
36
+ onMark({
37
+ pos
38
+ });
39
+ }
40
+ if (!isInlineBodiedExtension(node)) {
41
+ prevTextBlockType = node.isTextblock ? node.type : undefined;
42
+ }
43
+ prevPos = pos;
44
+ pos += node.nodeSize;
45
+ }
46
+ } catch {}
47
+ }
@@ -1,4 +1,4 @@
1
- /* eslint-disable @atlaskit/ui-styling-standard/no-important-styles */
1
+ /* eslint-disable @atlaskit/ui-styling-standard/no-important-styles, @atlaskit/ui-styling-standard/no-unsafe-selectors */
2
2
  /* eslint-disable @atlaskit/ui-styling-standard/no-imported-style-values */
3
3
  /* eslint-disable @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-values */
4
4
  /**
@@ -817,19 +817,22 @@ const extensionStyle = css({
817
817
  }
818
818
  });
819
819
  const extensionAsInlineStyle = css({
820
- '.ak-renderer-document .ak-renderer-extension-as-inline': {
820
+ [`.${RendererCssClassName.DOCUMENT} [data-as-inline="on"]`]: {
821
+ display: 'inline-block'
822
+ },
823
+ [`.${RendererCssClassName.DOCUMENT} .${RendererCssClassName.EXTENSION_AS_INLINE}`]: {
821
824
  display: 'inline-block',
822
825
  // use !important here because the current width has !important applied to it and it's not working when used in React style prop
823
826
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
824
827
  width: 'auto !important',
825
828
  marginTop: 0
826
829
  },
827
- '.ak-renderer-extension-as-inline .ak-renderer-extension-overflow-container': {
830
+ [`.${RendererCssClassName.EXTENSION_AS_INLINE} .${RendererCssClassName.EXTENSION_OVERFLOW_CONTAINER}`]: {
828
831
  display: 'inline-block',
829
832
  overflowX: 'visible',
830
833
  containerType: 'normal'
831
834
  },
832
- '.ak-renderer-extension-as-inline div, .ak-renderer-extension-as-inline p': {
835
+ [`.${RendererCssClassName.EXTENSION_AS_INLINE} div, .${RendererCssClassName.EXTENSION_AS_INLINE} p`]: {
833
836
  display: 'inline-block'
834
837
  }
835
838
  });
@@ -2058,6 +2061,12 @@ const syncBlockStyles = css({
2058
2061
  boxShadow: `0 0 0 1px ${"var(--ds-border, #0B120E24)"}`
2059
2062
  }
2060
2063
  });
2064
+ const syncBlockOverflowStyles = css({
2065
+ [`.${SyncBlockSharedCssClassName.renderer}, .${BodiedSyncBlockSharedCssClassName.renderer}, .${SyncBlockSharedCssClassName.error}, .${SyncBlockSharedCssClassName.loading}`]: {
2066
+ // Contain floated elements (wrap-left/wrap-right) within synced block borders
2067
+ overflow: 'hidden'
2068
+ }
2069
+ });
2061
2070
  export const RendererStyleContainer = props => {
2062
2071
  const {
2063
2072
  onClick,
@@ -2106,7 +2115,7 @@ export const RendererStyleContainer = props => {
2106
2115
  // this should be placed after baseOtherStyles
2107
2116
  expValEquals('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true) && extensionAsInlineStyle, allowNestedHeaderLinks && alignedHeadingAnchorStyle, mediaSingleSharedStyle,
2108
2117
  // merge firstWrappedMediaStyles with mediaSingleSharedStyle when clean up platform_editor_fix_media_in_renderer
2109
- fg('platform_editor_fix_media_in_renderer') && firstWrappedMediaStyles, tableSharedStyle, tableRendererHeaderStylesForTableCellOnly, fg('platform_editor_bordered_panel_nested_in_table') && tableRendererNestedPanelStyles, isBackgroundClipBrowserFixNeeded() && tableStylesBackGroundClipForGeckoForTableCellOnly, fg('platform_editor_nested_dnd_styles_changes') ? firstNodeWithNotMarginTopWithNestedDnD : firstNodeWithNotMarginTop, rendererTableStyles, isStickyScrollbarEnabled(appearance) && stickyScrollbarStyles, rendererTableHeaderEqualHeightStylesForTableCellOnly, allowColumnSorting && rendererTableSortableColumnStyles, allowColumnSorting && allowNestedHeaderLinks && rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks, 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' && (expValEquals('editor_tinymce_full_width_mode', 'isEnabled', true) || expValEquals('confluence_max_width_content_appearance', 'isEnabled', true))) && responsiveBreakoutWidthFullWidth, expValEquals('platform_editor_lovability_emoji_scaling', 'isEnabled', true) ? isCompactModeEnabled ? scaledDenseEmojiStyles : scaledEmojiStyles : isCompactModeEnabled ? denseStyles : undefined, expValEquals('platform_synced_block', 'isEnabled', true) && syncBlockStyles],
2118
+ fg('platform_editor_fix_media_in_renderer') && firstWrappedMediaStyles, tableSharedStyle, tableRendererHeaderStylesForTableCellOnly, fg('platform_editor_bordered_panel_nested_in_table') && tableRendererNestedPanelStyles, isBackgroundClipBrowserFixNeeded() && tableStylesBackGroundClipForGeckoForTableCellOnly, fg('platform_editor_nested_dnd_styles_changes') ? firstNodeWithNotMarginTopWithNestedDnD : firstNodeWithNotMarginTop, rendererTableStyles, isStickyScrollbarEnabled(appearance) && stickyScrollbarStyles, rendererTableHeaderEqualHeightStylesForTableCellOnly, allowColumnSorting && rendererTableSortableColumnStyles, allowColumnSorting && allowNestedHeaderLinks && rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks, 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' && (expValEquals('editor_tinymce_full_width_mode', 'isEnabled', true) || expValEquals('confluence_max_width_content_appearance', 'isEnabled', true))) && responsiveBreakoutWidthFullWidth, expValEquals('platform_editor_lovability_emoji_scaling', 'isEnabled', true) ? isCompactModeEnabled ? scaledDenseEmojiStyles : scaledEmojiStyles : isCompactModeEnabled ? denseStyles : undefined, expValEquals('platform_synced_block', 'isEnabled', true) && syncBlockStyles, expValEquals('platform_synced_block', 'isEnabled', true) && fg('platform_synced_block_dogfooding') && syncBlockOverflowStyles],
2110
2119
  "data-testid": testId
2111
2120
  }, children)
2112
2121
  );
@@ -56,7 +56,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
56
56
  const TABLE_INFO_TIMEOUT = 10000;
57
57
  const RENDER_EVENT_SAMPLE_RATE = 0.2;
58
58
  const packageName = "@atlaskit/renderer";
59
- const packageVersion = "126.2.1";
59
+ const packageVersion = "126.2.3";
60
60
  const setAsQueryContainerStyles = css({
61
61
  containerName: 'ak-renderer-wrapper',
62
62
  containerType: 'inline-size'
@@ -25,7 +25,7 @@ import { insideBlockNode, insideBreakoutExpand, insideBreakoutLayout, insideMult
25
25
  import { renderTextSegments } from './utils/render-text-segments';
26
26
  import { segmentText } from './utils/segment-text';
27
27
  import { getStandaloneBackgroundColorMarks } from './utils/getStandaloneBackgroundColorMarks';
28
- import { mergeInlinedExtension } from './utils/merge-inlined-extension';
28
+ import { markBlockAsInline } from './utils/markBlockAsInline';
29
29
  function mergeMarks(marksAndNodes) {
30
30
  return marksAndNodes.reduce(function (acc, markOrNode) {
31
31
  var prev = acc.length && acc[acc.length - 1] || null;
@@ -58,6 +58,7 @@ var ReactSerializer = /*#__PURE__*/function () {
58
58
  _defineProperty(this, "surroundTextNodesWithTextWrapper", false);
59
59
  _defineProperty(this, "allowAnnotations", false);
60
60
  _defineProperty(this, "standaloneBackgroundColorMarks", []);
61
+ _defineProperty(this, "inlinePositions", new Set());
61
62
  _defineProperty(this, "serializeFragmentChild", function (node, _ref) {
62
63
  var index = _ref.index,
63
64
  parentInfo = _ref.parentInfo;
@@ -635,6 +636,7 @@ var ReactSerializer = /*#__PURE__*/function () {
635
636
  var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
636
637
  var startPos = this.startPos + path.length;
637
638
  return _objectSpread({
639
+ asInline: this.inlinePositions.has(startPos) ? 'on' : undefined,
638
640
  text: node.text,
639
641
  providers: this.providers,
640
642
  eventHandlers: this.eventHandlers,
@@ -761,14 +763,20 @@ var ReactSerializer = /*#__PURE__*/function () {
761
763
  }, {
762
764
  key: "getChildNodes",
763
765
  value: function getChildNodes(fragment) {
766
+ var _this8 = this;
764
767
  var children = [];
765
768
  fragment.forEach(function (node) {
766
769
  children.push(node);
767
770
  });
768
771
  children = mergeTextNodes(children);
769
772
  if (!!this.shouldDisplayExtensionAsInline && expValEquals('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true)) {
770
- children = mergeInlinedExtension({
773
+ markBlockAsInline({
771
774
  nodes: children,
775
+ onMark: function onMark(_ref5) {
776
+ var pos = _ref5.pos;
777
+ _this8.inlinePositions.add(pos);
778
+ },
779
+ parentPos: this.startPos,
772
780
  shouldDisplayExtensionAsInline: this.shouldDisplayExtensionAsInline
773
781
  });
774
782
  }
@@ -785,9 +793,9 @@ var ReactSerializer = /*#__PURE__*/function () {
785
793
  }, {
786
794
  key: "buildMarkStructure",
787
795
  value: function buildMarkStructure(content) {
788
- var _this8 = this;
796
+ var _this9 = this;
789
797
  return mergeMarks(content.map(function (node) {
790
- var nodeMarks = _this8.getMarks(node);
798
+ var nodeMarks = _this9.getMarks(node);
791
799
  if (nodeMarks.length === 0) {
792
800
  return node;
793
801
  }
@@ -91,7 +91,7 @@ _defineProperty(EmojiNode, "displayName", 'EmojiNode');
91
91
  _defineProperty(EmojiNode, "defaultProps", {
92
92
  showTooltip: true
93
93
  });
94
- function EmojiItem(props) {
94
+ export var EmojiItemComponent = function EmojiItemComponent(props) {
95
95
  var id = props.id,
96
96
  providers = props.providers,
97
97
  shortName = props.shortName,
@@ -123,9 +123,5 @@ function EmojiItem(props) {
123
123
  fitToHeight: fitToHeight,
124
124
  resourceConfig: resourceConfig
125
125
  });
126
- }
127
-
128
- // Working around an issue with pre existing tests using react-test-renderer
129
- // https://github.com/facebook/react/issues/17301#issuecomment-557765213
130
- EmojiItem.defaultProps = {};
131
- export default /*#__PURE__*/memo(EmojiItem);
126
+ };
127
+ export default /*#__PURE__*/memo(EmojiItemComponent);
@@ -50,7 +50,8 @@ function Heading(props) {
50
50
  allowHeadingAnchorLinks = props.allowHeadingAnchorLinks,
51
51
  marks = props.marks,
52
52
  invisible = props.invisible,
53
- localId = props.localId;
53
+ localId = props.localId,
54
+ asInline = props.asInline;
54
55
  var HX = "h".concat(props.level);
55
56
  var mouseEntered = React.useRef(false);
56
57
  var showAnchorLink = !!props.showAnchorLink;
@@ -70,6 +71,7 @@ function Heading(props) {
70
71
  id: headingIdToUse,
71
72
  "data-local-id": localId,
72
73
  "data-renderer-start-pos": dataAttributes['data-renderer-start-pos'],
74
+ "data-as-inline": asInline,
73
75
  onMouseEnter: mouseEnterHandler
74
76
  }, /*#__PURE__*/React.createElement(React.Fragment, null, showAnchorLink && headingId && isRightAligned && /*#__PURE__*/React.createElement(WrappedHeadingAnchor, {
75
77
  level: props.level,
@@ -4,7 +4,8 @@ import Inline from './inline';
4
4
  export default function Paragraph(_ref) {
5
5
  var children = _ref.children,
6
6
  dataAttributes = _ref.dataAttributes,
7
- localId = _ref.localId;
7
+ localId = _ref.localId,
8
+ asInline = _ref.asInline;
8
9
  return (
9
10
  /*#__PURE__*/
10
11
  // ignore the eslint warning Text primitive does not support dataAttributes
@@ -12,7 +13,8 @@ export default function Paragraph(_ref) {
12
13
  // Ignored via go/ees005
13
14
  // eslint-disable-next-line react/jsx-props-no-spreading, @atlaskit/design-system/use-primitives-text
14
15
  React.createElement("p", _extends({}, dataAttributes, {
15
- "data-local-id": localId
16
+ "data-local-id": localId,
17
+ "data-as-inline": asInline
16
18
  }), /*#__PURE__*/React.createElement(Inline, null, children))
17
19
  );
18
20
  }
@@ -1,28 +1,15 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
2
3
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
3
4
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4
- /**
5
- * Merges extensions (displayed as inline) with adjacent textblocks
6
- *
7
- * Input:
8
- * [
9
- * { type: 'paragraph', content: [ { type: 'text', text: 'Hello' } ] },
10
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
11
- * { type: 'paragraph', content: [ { type: 'text', text: '!' } ] },
12
- * ]
13
- *
14
- * Output:
15
- * [
16
- * { type: 'paragraph', content: [
17
- * { type: 'text', text: 'Hello' },
18
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
19
- * { type: 'text', text: '!' }
20
- * ] },
21
- * ]
22
- */
23
- export function mergeInlinedExtension(_ref) {
5
+ export function markBlockAsInline(_ref) {
24
6
  var nodes = _ref.nodes,
7
+ onMark = _ref.onMark,
8
+ parentPos = _ref.parentPos,
25
9
  shouldDisplayExtensionAsInline = _ref.shouldDisplayExtensionAsInline;
10
+ if (!nodes || nodes.length === 0 || nodes[0].isInline) {
11
+ return;
12
+ }
26
13
  function isInlineBodiedExtension(node) {
27
14
  var _node$attrs, _node$attrs2, _node$attrs3, _node$attrs4;
28
15
  return Boolean((node === null || node === void 0 ? void 0 : node.type.name) === 'bodiedExtension' && shouldDisplayExtensionAsInline({
@@ -35,52 +22,40 @@ export function mergeInlinedExtension(_ref) {
35
22
  }));
36
23
  }
37
24
  try {
38
- // if it's [inlinedBodiedExtension], wrap it in a textblock
39
- if (nodes.length === 1 && isInlineBodiedExtension(nodes[0])) {
40
- return [nodes[0].type.schema.nodes.paragraph.create(null, nodes[0])];
41
- }
42
- var newNodes = [];
43
- var _iterator = _createForOfIteratorHelper(nodes),
25
+ var prevPos = parentPos;
26
+ var pos = parentPos;
27
+ var prevTextBlockType;
28
+ var _iterator = _createForOfIteratorHelper(nodes.entries()),
44
29
  _step;
45
30
  try {
46
31
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
47
- var node = _step.value;
48
- var previousNode = newNodes[newNodes.length - 1];
49
-
50
- // first node
51
- if (!previousNode) {
52
- newNodes.push(node);
53
- continue;
54
- }
32
+ var _step$value = _slicedToArray(_step.value, 2),
33
+ index = _step$value[0],
34
+ node = _step$value[1];
35
+ var prevNode = nodes[index - 1];
55
36
 
56
37
  // textblock + inlinedBodiedExtension
57
- if (isInlineBodiedExtension(node) && previousNode.isTextblock) {
58
- newNodes[newNodes.length - 1] = previousNode.copy(previousNode.content.addToEnd(node));
59
- }
60
- // textblock(..., inlinedBodiedExtension) + textblock
61
- else if (node.isTextblock && previousNode.isTextblock && isInlineBodiedExtension(previousNode.content.lastChild)) {
62
- newNodes[newNodes.length - 1] = previousNode.copy(previousNode.content.append(node.content));
38
+ if (prevNode !== null && prevNode !== void 0 && prevNode.isTextblock && isInlineBodiedExtension(node)) {
39
+ onMark({
40
+ pos: prevPos
41
+ });
63
42
  }
64
43
  // inlinedBodiedExtension + textblock
65
- else if (isInlineBodiedExtension(previousNode) && node.isTextblock) {
66
- newNodes[newNodes.length - 1] = node.copy(node.content.addToStart(previousNode));
67
- }
68
- // inlinedBodiedExtension + non-textblock
69
- else if (isInlineBodiedExtension(previousNode) && !node.isTextblock) {
70
- newNodes[newNodes.length - 1] = node.type.schema.nodes.paragraph.create(null, previousNode);
71
- newNodes.push(node);
44
+ else if (isInlineBodiedExtension(prevNode) && node.isTextblock && (!prevTextBlockType || node.type === prevTextBlockType)) {
45
+ onMark({
46
+ pos: pos
47
+ });
72
48
  }
73
- // default case
74
- else {
75
- newNodes.push(node);
49
+ if (!isInlineBodiedExtension(node)) {
50
+ prevTextBlockType = node.isTextblock ? node.type : undefined;
76
51
  }
52
+ prevPos = pos;
53
+ pos += node.nodeSize;
77
54
  }
78
55
  } catch (err) {
79
56
  _iterator.e(err);
80
57
  } finally {
81
58
  _iterator.f();
82
59
  }
83
- return newNodes;
84
60
  } catch (_unused) {}
85
- return nodes;
86
61
  }
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  var _css, _css7;
3
- /* eslint-disable @atlaskit/ui-styling-standard/no-important-styles */
3
+ /* eslint-disable @atlaskit/ui-styling-standard/no-important-styles, @atlaskit/ui-styling-standard/no-unsafe-selectors */
4
4
  /* eslint-disable @atlaskit/ui-styling-standard/no-imported-style-values */
5
5
  /* eslint-disable @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-values */
6
6
  /**
@@ -702,23 +702,21 @@ var extensionStyle = css({
702
702
  fontSize: 'var(--ak-renderer-base-font-size)'
703
703
  }
704
704
  });
705
- var extensionAsInlineStyle = css({
706
- '.ak-renderer-document .ak-renderer-extension-as-inline': {
707
- display: 'inline-block',
708
- // use !important here because the current width has !important applied to it and it's not working when used in React style prop
709
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
710
- width: 'auto !important',
711
- marginTop: 0
712
- },
713
- '.ak-renderer-extension-as-inline .ak-renderer-extension-overflow-container': {
714
- display: 'inline-block',
715
- overflowX: 'visible',
716
- containerType: 'normal'
717
- },
718
- '.ak-renderer-extension-as-inline div, .ak-renderer-extension-as-inline p': {
719
- display: 'inline-block'
720
- }
721
- });
705
+ var extensionAsInlineStyle = css(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, ".".concat(RendererCssClassName.DOCUMENT, " [data-as-inline=\"on\"]"), {
706
+ display: 'inline-block'
707
+ }), ".".concat(RendererCssClassName.DOCUMENT, " .").concat(RendererCssClassName.EXTENSION_AS_INLINE), {
708
+ display: 'inline-block',
709
+ // use !important here because the current width has !important applied to it and it's not working when used in React style prop
710
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
711
+ width: 'auto !important',
712
+ marginTop: 0
713
+ }), ".".concat(RendererCssClassName.EXTENSION_AS_INLINE, " .").concat(RendererCssClassName.EXTENSION_OVERFLOW_CONTAINER), {
714
+ display: 'inline-block',
715
+ overflowX: 'visible',
716
+ containerType: 'normal'
717
+ }), ".".concat(RendererCssClassName.EXTENSION_AS_INLINE, " div, .").concat(RendererCssClassName.EXTENSION_AS_INLINE, " p"), {
718
+ display: 'inline-block'
719
+ }));
722
720
  var shadowSharedStyle = css(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "& .".concat(shadowClassNames.RIGHT_SHADOW, "::before, .").concat(shadowClassNames.RIGHT_SHADOW, "::after, .").concat(shadowClassNames.LEFT_SHADOW, "::before, .").concat(shadowClassNames.LEFT_SHADOW, "::after"), {
723
721
  display: 'none',
724
722
  position: 'absolute',
@@ -1624,6 +1622,10 @@ var syncBlockStyles = css(_defineProperty(_defineProperty(_defineProperty(_defin
1624
1622
  }), ".".concat(SyncBlockSharedCssClassName.loading), {
1625
1623
  boxShadow: "0 0 0 1px ".concat("var(--ds-border, #0B120E24)")
1626
1624
  }));
1625
+ var syncBlockOverflowStyles = css(_defineProperty({}, ".".concat(SyncBlockSharedCssClassName.renderer, ", .").concat(BodiedSyncBlockSharedCssClassName.renderer, ", .").concat(SyncBlockSharedCssClassName.error, ", .").concat(SyncBlockSharedCssClassName.loading), {
1626
+ // Contain floated elements (wrap-left/wrap-right) within synced block borders
1627
+ overflow: 'hidden'
1628
+ }));
1627
1629
  export var RendererStyleContainer = function RendererStyleContainer(props) {
1628
1630
  var onClick = props.onClick,
1629
1631
  onMouseDown = props.onMouseDown,
@@ -1670,7 +1672,7 @@ export var RendererStyleContainer = function RendererStyleContainer(props) {
1670
1672
  // this should be placed after baseOtherStyles
1671
1673
  expValEquals('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true) && extensionAsInlineStyle, allowNestedHeaderLinks && alignedHeadingAnchorStyle, mediaSingleSharedStyle,
1672
1674
  // merge firstWrappedMediaStyles with mediaSingleSharedStyle when clean up platform_editor_fix_media_in_renderer
1673
- fg('platform_editor_fix_media_in_renderer') && firstWrappedMediaStyles, tableSharedStyle, tableRendererHeaderStylesForTableCellOnly, fg('platform_editor_bordered_panel_nested_in_table') && tableRendererNestedPanelStyles, isBackgroundClipBrowserFixNeeded() && tableStylesBackGroundClipForGeckoForTableCellOnly, fg('platform_editor_nested_dnd_styles_changes') ? firstNodeWithNotMarginTopWithNestedDnD : firstNodeWithNotMarginTop, rendererTableStyles, isStickyScrollbarEnabled(appearance) && stickyScrollbarStyles, rendererTableHeaderEqualHeightStylesForTableCellOnly, allowColumnSorting && rendererTableSortableColumnStyles, allowColumnSorting && allowNestedHeaderLinks && rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks, 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' && (expValEquals('editor_tinymce_full_width_mode', 'isEnabled', true) || expValEquals('confluence_max_width_content_appearance', 'isEnabled', true))) && responsiveBreakoutWidthFullWidth, expValEquals('platform_editor_lovability_emoji_scaling', 'isEnabled', true) ? isCompactModeEnabled ? scaledDenseEmojiStyles : scaledEmojiStyles : isCompactModeEnabled ? denseStyles : undefined, expValEquals('platform_synced_block', 'isEnabled', true) && syncBlockStyles],
1675
+ fg('platform_editor_fix_media_in_renderer') && firstWrappedMediaStyles, tableSharedStyle, tableRendererHeaderStylesForTableCellOnly, fg('platform_editor_bordered_panel_nested_in_table') && tableRendererNestedPanelStyles, isBackgroundClipBrowserFixNeeded() && tableStylesBackGroundClipForGeckoForTableCellOnly, fg('platform_editor_nested_dnd_styles_changes') ? firstNodeWithNotMarginTopWithNestedDnD : firstNodeWithNotMarginTop, rendererTableStyles, isStickyScrollbarEnabled(appearance) && stickyScrollbarStyles, rendererTableHeaderEqualHeightStylesForTableCellOnly, allowColumnSorting && rendererTableSortableColumnStyles, allowColumnSorting && allowNestedHeaderLinks && rendererTableHeaderEqualHeightStylesAllowNestedHeaderLinks, 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' && (expValEquals('editor_tinymce_full_width_mode', 'isEnabled', true) || expValEquals('confluence_max_width_content_appearance', 'isEnabled', true))) && responsiveBreakoutWidthFullWidth, expValEquals('platform_editor_lovability_emoji_scaling', 'isEnabled', true) ? isCompactModeEnabled ? scaledDenseEmojiStyles : scaledEmojiStyles : isCompactModeEnabled ? denseStyles : undefined, expValEquals('platform_synced_block', 'isEnabled', true) && syncBlockStyles, expValEquals('platform_synced_block', 'isEnabled', true) && fg('platform_synced_block_dogfooding') && syncBlockOverflowStyles],
1674
1676
  "data-testid": testId
1675
1677
  }, children)
1676
1678
  );
@@ -61,7 +61,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
61
61
  var TABLE_INFO_TIMEOUT = 10000;
62
62
  var RENDER_EVENT_SAMPLE_RATE = 0.2;
63
63
  var packageName = "@atlaskit/renderer";
64
- var packageVersion = "126.2.1";
64
+ var packageVersion = "126.2.3";
65
65
  var setAsQueryContainerStyles = css({
66
66
  containerName: 'ak-renderer-wrapper',
67
67
  containerType: 'inline-size'
@@ -115,6 +115,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
115
115
  private standaloneBackgroundColorMarks;
116
116
  private onSetLinkTarget?;
117
117
  private shouldDisplayExtensionAsInline?;
118
+ private inlinePositions;
118
119
  constructor(init: ReactSerializerInit);
119
120
  private resetState;
120
121
  private getNodeProps;
@@ -1,9 +1,5 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx jsx
4
- */
5
- import { jsx } from '@emotion/react';
6
1
  import { type EmojiResourceConfig } from '@atlaskit/emoji/resource';
2
+ import { type FC } from 'react';
7
3
  import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
8
4
  import type { EmojiId } from '@atlaskit/emoji/types';
9
5
  import { type MarkDataAttributes } from '../../ui/annotations/element/useInlineAnnotationProps';
@@ -15,9 +11,6 @@ export interface EmojiProps extends EmojiId, EmojiAttributes, MarkDataAttributes
15
11
  resourceConfig?: EmojiResourceConfig;
16
12
  showTooltip?: boolean;
17
13
  }
18
- declare function EmojiItem(props: EmojiProps): jsx.JSX.Element;
19
- declare namespace EmojiItem {
20
- var defaultProps: {};
21
- }
22
- declare const _default: import("react").MemoExoticComponent<typeof EmojiItem>;
14
+ export declare const EmojiItemComponent: FC<EmojiProps>;
15
+ declare const _default: import("react").NamedExoticComponent<EmojiProps>;
23
16
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { type NodeProps } from '../types';
3
- export default function Paragraph({ children, dataAttributes, localId, }: NodeProps): React.JSX.Element;
3
+ export default function Paragraph({ children, dataAttributes, localId, asInline, }: NodeProps): React.JSX.Element;
@@ -20,6 +20,7 @@ export interface NodeMeta {
20
20
  allowHeadingAnchorLinks?: HeadingAnchorLinksProps;
21
21
  allowPlaceholderText?: boolean;
22
22
  allowWrapCodeBlock?: boolean;
23
+ asInline?: 'on' | undefined;
23
24
  content?: {
24
25
  [key: string]: any;
25
26
  } | null;
@@ -0,0 +1,10 @@
1
+ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
+ import type { ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
3
+ export declare function markBlockAsInline({ nodes, onMark, parentPos, shouldDisplayExtensionAsInline, }: {
4
+ nodes: PMNode[];
5
+ onMark: ({ pos }: {
6
+ pos: number;
7
+ }) => void;
8
+ parentPos: number;
9
+ shouldDisplayExtensionAsInline: (extensionParams: ExtensionParams<Parameters>) => boolean;
10
+ }): void;
@@ -115,6 +115,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
115
115
  private standaloneBackgroundColorMarks;
116
116
  private onSetLinkTarget?;
117
117
  private shouldDisplayExtensionAsInline?;
118
+ private inlinePositions;
118
119
  constructor(init: ReactSerializerInit);
119
120
  private resetState;
120
121
  private getNodeProps;
@@ -1,9 +1,5 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx jsx
4
- */
5
- import { jsx } from '@emotion/react';
6
1
  import { type EmojiResourceConfig } from '@atlaskit/emoji/resource';
2
+ import { type FC } from 'react';
7
3
  import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
8
4
  import type { EmojiId } from '@atlaskit/emoji/types';
9
5
  import { type MarkDataAttributes } from '../../ui/annotations/element/useInlineAnnotationProps';
@@ -15,9 +11,6 @@ export interface EmojiProps extends EmojiId, EmojiAttributes, MarkDataAttributes
15
11
  resourceConfig?: EmojiResourceConfig;
16
12
  showTooltip?: boolean;
17
13
  }
18
- declare function EmojiItem(props: EmojiProps): jsx.JSX.Element;
19
- declare namespace EmojiItem {
20
- var defaultProps: {};
21
- }
22
- declare const _default: import("react").MemoExoticComponent<typeof EmojiItem>;
14
+ export declare const EmojiItemComponent: FC<EmojiProps>;
15
+ declare const _default: import("react").NamedExoticComponent<EmojiProps>;
23
16
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { type NodeProps } from '../types';
3
- export default function Paragraph({ children, dataAttributes, localId, }: NodeProps): React.JSX.Element;
3
+ export default function Paragraph({ children, dataAttributes, localId, asInline, }: NodeProps): React.JSX.Element;
@@ -20,6 +20,7 @@ export interface NodeMeta {
20
20
  allowHeadingAnchorLinks?: HeadingAnchorLinksProps;
21
21
  allowPlaceholderText?: boolean;
22
22
  allowWrapCodeBlock?: boolean;
23
+ asInline?: 'on' | undefined;
23
24
  content?: {
24
25
  [key: string]: any;
25
26
  } | null;
@@ -0,0 +1,10 @@
1
+ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
+ import type { ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
3
+ export declare function markBlockAsInline({ nodes, onMark, parentPos, shouldDisplayExtensionAsInline, }: {
4
+ nodes: PMNode[];
5
+ onMark: ({ pos }: {
6
+ pos: number;
7
+ }) => void;
8
+ parentPos: number;
9
+ shouldDisplayExtensionAsInline: (extensionParams: ExtensionParams<Parameters>) => boolean;
10
+ }): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "126.2.2",
3
+ "version": "126.2.4",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -57,7 +57,7 @@
57
57
  "@atlaskit/status": "^3.1.0",
58
58
  "@atlaskit/task-decision": "^19.2.0",
59
59
  "@atlaskit/theme": "^21.0.0",
60
- "@atlaskit/tmp-editor-statsig": "^16.35.0",
60
+ "@atlaskit/tmp-editor-statsig": "^17.1.0",
61
61
  "@atlaskit/tokens": "^10.1.0",
62
62
  "@atlaskit/tooltip": "^20.14.0",
63
63
  "@atlaskit/visually-hidden": "^3.0.0",
@@ -90,10 +90,11 @@
90
90
  "@atlaskit/mention": "^24.4.0",
91
91
  "@atlaskit/modal-dialog": "^14.10.0",
92
92
  "@atlaskit/navigation-next": "patch:@atlaskit/navigation-next@npm%3A9.0.17#~/.yarn/patches/@atlaskit-navigation-next-npm-9.0.17-958ca0ab9d.patch",
93
- "@atlaskit/profilecard": "^24.33.0",
93
+ "@atlaskit/profilecard": "^24.34.0",
94
94
  "@atlaskit/util-data-test": "^18.5.0",
95
95
  "@atlassian/a11y-jest-testing": "^0.8.0",
96
96
  "@atlassian/feature-flags-test-utils": "^1.0.0",
97
+ "@atlassian/testing-library": "^0.4.0",
97
98
  "@testing-library/react": "^16.3.0",
98
99
  "@testing-library/user-event": "^14.4.3",
99
100
  "@types/react-loadable": "^5.4.1",
@@ -248,6 +249,9 @@
248
249
  },
249
250
  "confluence_inline_insert_excerpt_width_bugfix": {
250
251
  "type": "boolean"
252
+ },
253
+ "platform_synced_block_dogfooding": {
254
+ "type": "boolean"
251
255
  }
252
256
  }
253
257
  }
@@ -1,75 +0,0 @@
1
- /**
2
- * Merges extensions (displayed as inline) with adjacent textblocks
3
- *
4
- * Input:
5
- * [
6
- * { type: 'paragraph', content: [ { type: 'text', text: 'Hello' } ] },
7
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
8
- * { type: 'paragraph', content: [ { type: 'text', text: '!' } ] },
9
- * ]
10
- *
11
- * Output:
12
- * [
13
- * { type: 'paragraph', content: [
14
- * { type: 'text', text: 'Hello' },
15
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
16
- * { type: 'text', text: '!' }
17
- * ] },
18
- * ]
19
- */
20
- export function mergeInlinedExtension({
21
- nodes,
22
- shouldDisplayExtensionAsInline
23
- }) {
24
- function isInlineBodiedExtension(node) {
25
- var _node$attrs, _node$attrs2, _node$attrs3, _node$attrs4;
26
- return Boolean((node === null || node === void 0 ? void 0 : node.type.name) === 'bodiedExtension' && shouldDisplayExtensionAsInline({
27
- type: node.type.name,
28
- extensionKey: (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.extensionKey,
29
- extensionType: (_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.extensionType,
30
- parameters: (_node$attrs3 = node.attrs) === null || _node$attrs3 === void 0 ? void 0 : _node$attrs3.parameters,
31
- content: node.content,
32
- localId: (_node$attrs4 = node.attrs) === null || _node$attrs4 === void 0 ? void 0 : _node$attrs4.localId
33
- }));
34
- }
35
- try {
36
- // if it's [inlinedBodiedExtension], wrap it in a textblock
37
- if (nodes.length === 1 && isInlineBodiedExtension(nodes[0])) {
38
- return [nodes[0].type.schema.nodes.paragraph.create(null, nodes[0])];
39
- }
40
- const newNodes = [];
41
- for (const node of nodes) {
42
- const previousNode = newNodes[newNodes.length - 1];
43
-
44
- // first node
45
- if (!previousNode) {
46
- newNodes.push(node);
47
- continue;
48
- }
49
-
50
- // textblock + inlinedBodiedExtension
51
- if (isInlineBodiedExtension(node) && previousNode.isTextblock) {
52
- newNodes[newNodes.length - 1] = previousNode.copy(previousNode.content.addToEnd(node));
53
- }
54
- // textblock(..., inlinedBodiedExtension) + textblock
55
- else if (node.isTextblock && previousNode.isTextblock && isInlineBodiedExtension(previousNode.content.lastChild)) {
56
- newNodes[newNodes.length - 1] = previousNode.copy(previousNode.content.append(node.content));
57
- }
58
- // inlinedBodiedExtension + textblock
59
- else if (isInlineBodiedExtension(previousNode) && node.isTextblock) {
60
- newNodes[newNodes.length - 1] = node.copy(node.content.addToStart(previousNode));
61
- }
62
- // inlinedBodiedExtension + non-textblock
63
- else if (isInlineBodiedExtension(previousNode) && !node.isTextblock) {
64
- newNodes[newNodes.length - 1] = node.type.schema.nodes.paragraph.create(null, previousNode);
65
- newNodes.push(node);
66
- }
67
- // default case
68
- else {
69
- newNodes.push(node);
70
- }
71
- }
72
- return newNodes;
73
- } catch {}
74
- return nodes;
75
- }
@@ -1,25 +0,0 @@
1
- import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
- import type { ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
3
- /**
4
- * Merges extensions (displayed as inline) with adjacent textblocks
5
- *
6
- * Input:
7
- * [
8
- * { type: 'paragraph', content: [ { type: 'text', text: 'Hello' } ] },
9
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
10
- * { type: 'paragraph', content: [ { type: 'text', text: '!' } ] },
11
- * ]
12
- *
13
- * Output:
14
- * [
15
- * { type: 'paragraph', content: [
16
- * { type: 'text', text: 'Hello' },
17
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
18
- * { type: 'text', text: '!' }
19
- * ] },
20
- * ]
21
- */
22
- export declare function mergeInlinedExtension({ nodes, shouldDisplayExtensionAsInline, }: {
23
- nodes: PMNode[];
24
- shouldDisplayExtensionAsInline: (extensionParams: ExtensionParams<Parameters>) => boolean;
25
- }): PMNode[];
@@ -1,25 +0,0 @@
1
- import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
- import type { ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
3
- /**
4
- * Merges extensions (displayed as inline) with adjacent textblocks
5
- *
6
- * Input:
7
- * [
8
- * { type: 'paragraph', content: [ { type: 'text', text: 'Hello' } ] },
9
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
10
- * { type: 'paragraph', content: [ { type: 'text', text: '!' } ] },
11
- * ]
12
- *
13
- * Output:
14
- * [
15
- * { type: 'paragraph', content: [
16
- * { type: 'text', text: 'Hello' },
17
- * { type: 'bodiedExtension', content: [ { type: 'text', text: 'World' } ] },
18
- * { type: 'text', text: '!' }
19
- * ] },
20
- * ]
21
- */
22
- export declare function mergeInlinedExtension({ nodes, shouldDisplayExtensionAsInline, }: {
23
- nodes: PMNode[];
24
- shouldDisplayExtensionAsInline: (extensionParams: ExtensionParams<Parameters>) => boolean;
25
- }): PMNode[];