@atlaskit/renderer 109.15.0 → 109.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 109.15.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#88742](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/88742) [`6771cedeadd3`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/6771cedeadd3) - Add UI for comment badge in Renderer, clean up props
8
+
9
+ ## 109.15.2
10
+
11
+ ### Patch Changes
12
+
13
+ - [#88323](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/88323) [`b56b60b50087`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/b56b60b50087) - Support nested annotation marks for media nodes in renderer
14
+ - Updated dependencies
15
+
16
+ ## 109.15.1
17
+
18
+ ### Patch Changes
19
+
20
+ - [#87575](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/87575) [`d528eb09243a`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/d528eb09243a) - Update renderer to force skip context media client
21
+
3
22
  ## 109.15.0
4
23
 
5
24
  ### Minor Changes
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
11
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
@@ -14,6 +13,8 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
14
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
14
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
17
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
18
  var _react = _interopRequireWildcard(require("react"));
18
19
  var _react2 = require("@emotion/react");
19
20
  var _analyticsNext = require("@atlaskit/analytics-next");
@@ -21,16 +22,22 @@ var _analyticsNamespacedContext = require("@atlaskit/analytics-namespaced-contex
21
22
  var _providerFactory = require("@atlaskit/editor-common/provider-factory");
22
23
  var _ui = require("@atlaskit/editor-common/ui");
23
24
  var _MediaCard = require("../../../ui/MediaCard");
25
+ var _adfSchema = require("@atlaskit/adf-schema");
24
26
  var _editorPalette = require("@atlaskit/editor-palette");
25
27
  var _utils = require("../../../utils");
26
28
  var _analytics = require("@atlaskit/editor-common/analytics");
27
29
  var _events = require("../../../analytics/events");
28
30
  var _annotation = _interopRequireDefault(require("../../marks/annotation"));
29
31
  var _styles = require("./styles");
32
+ var _mediaSingle = require("@atlaskit/editor-common/media-single");
33
+ var _reactIntlNext = require("react-intl-next");
34
+ var _hooks = require("../../../ui/annotations/hooks");
35
+ var _excluded = ["marks"];
36
+ /** @jsx jsx */
30
37
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
31
38
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
32
39
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
33
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /** @jsx jsx */
40
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
34
41
  var MediaBorder = function MediaBorder(_ref) {
35
42
  var _mark$attrs$color, _mark$attrs$size;
36
43
  var mark = _ref.mark,
@@ -85,6 +92,47 @@ var MediaAnnotation = function MediaAnnotation(_ref3) {
85
92
  useBlockLevel: true
86
93
  }, children);
87
94
  };
95
+ var MediaAnnotations = function MediaAnnotations(_ref4) {
96
+ var _ref4$marks = _ref4.marks,
97
+ marks = _ref4$marks === void 0 ? [] : _ref4$marks,
98
+ children = _ref4.children;
99
+ // Early Exit
100
+ if (marks.length === 0) {
101
+ return (0, _react2.jsx)(_react.Fragment, null, children);
102
+ }
103
+
104
+ // Recursive marks
105
+ var currentMark = marks[0];
106
+ var otherMarks = marks.slice(1);
107
+ return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(MediaAnnotation, {
108
+ key: currentMark.attrs.id,
109
+ mark: currentMark
110
+ }, otherMarks.length ? (0, _react2.jsx)(MediaAnnotations, {
111
+ marks: otherMarks
112
+ }, children) : (0, _react2.jsx)(_react.Fragment, null, children)));
113
+ };
114
+ var CommentBadge = (0, _reactIntlNext.injectIntl)(_mediaSingle.CommentBadge);
115
+ var CommentBadgeWrapper = function CommentBadgeWrapper(_ref5) {
116
+ var _marks$map;
117
+ var marks = _ref5.marks,
118
+ rest = (0, _objectWithoutProperties2.default)(_ref5, _excluded);
119
+ var activeParentIds = (0, _hooks.useInlineCommentsFilter)({
120
+ annotationIds: (_marks$map = marks === null || marks === void 0 ? void 0 : marks.map(function (mark) {
121
+ return mark.attrs.id;
122
+ })) !== null && _marks$map !== void 0 ? _marks$map : [''],
123
+ filter: {
124
+ state: _adfSchema.AnnotationMarkStates.ACTIVE
125
+ }
126
+ });
127
+ if (!activeParentIds.length) {
128
+ return null;
129
+ }
130
+
131
+ // todo: handle onClick
132
+ return (0, _react2.jsx)(CommentBadge, (0, _extends2.default)({
133
+ onClick: function onClick() {}
134
+ }, rest));
135
+ };
88
136
  var Media = exports.default = /*#__PURE__*/function (_PureComponent) {
89
137
  (0, _inherits2.default)(Media, _PureComponent);
90
138
  var _super = _createSuper(Media);
@@ -101,8 +149,11 @@ var Media = exports.default = /*#__PURE__*/function (_PureComponent) {
101
149
  featureFlags = _this$props.featureFlags,
102
150
  allowMediaViewer = _this$props.shouldOpenMediaViewer,
103
151
  enableDownloadButton = _this$props.enableDownloadButton,
104
- ssr = _this$props.ssr;
105
- var annotationMark = _this.props.isAnnotationMark ? _this.props.marks.find(_this.props.isAnnotationMark) : undefined;
152
+ ssr = _this$props.ssr,
153
+ width = _this$props.width,
154
+ height = _this$props.height,
155
+ mediaSingleElement = _this$props.mediaSingleElement;
156
+ var annotationMarks = _this.props.isAnnotationMark ? _this.props.marks.filter(_this.props.isAnnotationMark) : undefined;
106
157
  var borderMark = _this.props.marks.find(_this.props.isBorderMark);
107
158
  var linkMark = _this.props.marks.find(_this.props.isLinkMark);
108
159
  var linkHref = linkMark === null || linkMark === void 0 ? void 0 : linkMark.attrs.href;
@@ -111,15 +162,20 @@ var Media = exports.default = /*#__PURE__*/function (_PureComponent) {
111
162
  return (0, _react2.jsx)(MediaLink, {
112
163
  mark: linkMark,
113
164
  onClick: _this.handleMediaLinkClickFn
114
- }, (0, _react2.jsx)(MediaAnnotation, {
115
- mark: annotationMark
165
+ }, (0, _react2.jsx)(MediaAnnotations, {
166
+ marks: annotationMarks
116
167
  }, (0, _react2.jsx)(MediaBorder, {
117
168
  mark: borderMark
118
169
  }, (0, _react2.jsx)(_analyticsNext.AnalyticsContext, {
119
170
  data: (0, _defineProperty2.default)({}, _analyticsNamespacedContext.MEDIA_CONTEXT, {
120
171
  border: !!borderMark
121
172
  })
122
- }, (0, _react2.jsx)(_MediaCard.MediaCard, (0, _extends2.default)({
173
+ }, !!annotationMarks && (0, _react2.jsx)(CommentBadgeWrapper, {
174
+ marks: annotationMarks,
175
+ mediaElement: mediaSingleElement,
176
+ width: width,
177
+ height: height
178
+ }), (0, _react2.jsx)(_MediaCard.MediaCard, (0, _extends2.default)({
123
179
  contextIdentifierProvider: contextIdentifierProvider
124
180
  }, _this.props, {
125
181
  shouldOpenMediaViewer: shouldOpenMediaViewer,
@@ -165,7 +165,8 @@ var MediaSingle = function MediaSingle(props) {
165
165
  originalDimensions: originalDimensions,
166
166
  onExternalImageLoaded: onExternalImageLoaded,
167
167
  disableOverlay: true,
168
- featureFlags: featureFlags
168
+ featureFlags: featureFlags,
169
+ mediaSingleElement: ref.current
169
170
  });
170
171
  var uiMediaSingleStyles = layout === 'full-width' || layout === 'wide' ? [_styles.uiMediaSingleBaseStyles, _styles.uiMediaSingleLayoutStyles] : [_styles.uiMediaSingleBaseStyles];
171
172
  return (0, _react2.jsx)(_ui.MediaSingle, {
@@ -20,6 +20,12 @@ var EditorMediaClientProvider = exports.EditorMediaClientProvider = function Edi
20
20
  mediaClientConfig = _useState2[0],
21
21
  setMediaClientConfig = _useState2[1];
22
22
  var mediaProvider = (0, _providerFactory.useProvider)('mediaProvider');
23
+
24
+ /**
25
+ * If a mediaClientConfig is provided then we will force
26
+ * skip the mediaClient from context
27
+ */
28
+ var shouldSkipContext = Boolean((ssr === null || ssr === void 0 ? void 0 : ssr.config) || mediaProvider);
23
29
  var contextMediaClient = (0, _react.useContext)(_mediaClientReact.MediaClientContext);
24
30
 
25
31
  // MediaClientProvider currently requires a mediaClientConfig
@@ -43,6 +49,6 @@ var EditorMediaClientProvider = exports.EditorMediaClientProvider = function Edi
43
49
  }
44
50
  }, [mediaProvider, ssr]);
45
51
  return /*#__PURE__*/_react.default.createElement(_mediaClientReact.MediaClientContext.Provider, {
46
- value: mediaClient || contextMediaClient
52
+ value: shouldSkipContext ? mediaClient : contextMediaClient
47
53
  }, children);
48
54
  };
@@ -55,7 +55,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
55
55
  var NORMAL_SEVERITY_THRESHOLD = exports.NORMAL_SEVERITY_THRESHOLD = 2000;
56
56
  var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
57
57
  var packageName = "@atlaskit/renderer";
58
- var packageVersion = "109.15.0";
58
+ var packageVersion = "109.15.3";
59
59
  var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
60
60
  (0, _inherits2.default)(Renderer, _PureComponent);
61
61
  var _super = _createSuper(Renderer);
@@ -1,5 +1,5 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _extends from "@babel/runtime/helpers/extends";
3
3
  /** @jsx jsx */
4
4
 
5
5
  import React, { PureComponent, Fragment } from 'react';
@@ -9,12 +9,16 @@ import { MEDIA_CONTEXT } from '@atlaskit/analytics-namespaced-context';
9
9
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
10
10
  import { MediaBorderGapFiller } from '@atlaskit/editor-common/ui';
11
11
  import { MediaCard } from '../../../ui/MediaCard';
12
+ import { AnnotationMarkStates } from '@atlaskit/adf-schema';
12
13
  import { hexToEditorBorderPaletteColor } from '@atlaskit/editor-palette';
13
14
  import { getEventHandler } from '../../../utils';
14
15
  import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
15
16
  import { MODE, PLATFORM } from '../../../analytics/events';
16
17
  import AnnotationComponent from '../../marks/annotation';
17
18
  import { linkStyle, borderStyle } from './styles';
19
+ import { CommentBadge as CommentBadgeComponent } from '@atlaskit/editor-common/media-single';
20
+ import { injectIntl } from 'react-intl-next';
21
+ import { useInlineCommentsFilter } from '../../../ui/annotations/hooks';
18
22
  const MediaBorder = ({
19
23
  mark,
20
24
  children
@@ -72,6 +76,46 @@ const MediaAnnotation = ({
72
76
  useBlockLevel: true
73
77
  }, children);
74
78
  };
79
+ const MediaAnnotations = ({
80
+ marks = [],
81
+ children
82
+ }) => {
83
+ // Early Exit
84
+ if (marks.length === 0) {
85
+ return jsx(Fragment, null, children);
86
+ }
87
+
88
+ // Recursive marks
89
+ const currentMark = marks[0];
90
+ const otherMarks = marks.slice(1);
91
+ return jsx(Fragment, null, jsx(MediaAnnotation, {
92
+ key: currentMark.attrs.id,
93
+ mark: currentMark
94
+ }, otherMarks.length ? jsx(MediaAnnotations, {
95
+ marks: otherMarks
96
+ }, children) : jsx(Fragment, null, children)));
97
+ };
98
+ const CommentBadge = injectIntl(CommentBadgeComponent);
99
+ const CommentBadgeWrapper = ({
100
+ marks,
101
+ ...rest
102
+ }) => {
103
+ var _marks$map;
104
+ const activeParentIds = useInlineCommentsFilter({
105
+ annotationIds: (_marks$map = marks === null || marks === void 0 ? void 0 : marks.map(mark => mark.attrs.id)) !== null && _marks$map !== void 0 ? _marks$map : [''],
106
+ filter: {
107
+ state: AnnotationMarkStates.ACTIVE
108
+ }
109
+ });
110
+ if (!activeParentIds.length) {
111
+ return null;
112
+ }
113
+
114
+ // todo: handle onClick
115
+ return jsx(CommentBadge, _extends({
116
+ onClick: () => {}
117
+ }, rest));
118
+ };
75
119
  export default class Media extends PureComponent {
76
120
  constructor(props) {
77
121
  super(props);
@@ -85,9 +129,12 @@ export default class Media extends PureComponent {
85
129
  featureFlags,
86
130
  shouldOpenMediaViewer: allowMediaViewer,
87
131
  enableDownloadButton,
88
- ssr
132
+ ssr,
133
+ width,
134
+ height,
135
+ mediaSingleElement
89
136
  } = this.props;
90
- const annotationMark = this.props.isAnnotationMark ? this.props.marks.find(this.props.isAnnotationMark) : undefined;
137
+ const annotationMarks = this.props.isAnnotationMark ? this.props.marks.filter(this.props.isAnnotationMark) : undefined;
91
138
  const borderMark = this.props.marks.find(this.props.isBorderMark);
92
139
  const linkMark = this.props.marks.find(this.props.isLinkMark);
93
140
  const linkHref = linkMark === null || linkMark === void 0 ? void 0 : linkMark.attrs.href;
@@ -96,8 +143,8 @@ export default class Media extends PureComponent {
96
143
  return jsx(MediaLink, {
97
144
  mark: linkMark,
98
145
  onClick: this.handleMediaLinkClickFn
99
- }, jsx(MediaAnnotation, {
100
- mark: annotationMark
146
+ }, jsx(MediaAnnotations, {
147
+ marks: annotationMarks
101
148
  }, jsx(MediaBorder, {
102
149
  mark: borderMark
103
150
  }, jsx(AnalyticsContext, {
@@ -106,7 +153,12 @@ export default class Media extends PureComponent {
106
153
  border: !!borderMark
107
154
  }
108
155
  }
109
- }, jsx(MediaCard, _extends({
156
+ }, !!annotationMarks && jsx(CommentBadgeWrapper, {
157
+ marks: annotationMarks,
158
+ mediaElement: mediaSingleElement,
159
+ width: width,
160
+ height: height
161
+ }), jsx(MediaCard, _extends({
110
162
  contextIdentifierProvider: contextIdentifierProvider
111
163
  }, this.props, {
112
164
  shouldOpenMediaViewer: shouldOpenMediaViewer,
@@ -150,7 +150,8 @@ const MediaSingle = props => {
150
150
  originalDimensions,
151
151
  onExternalImageLoaded,
152
152
  disableOverlay: true,
153
- featureFlags
153
+ featureFlags,
154
+ mediaSingleElement: ref.current
154
155
  });
155
156
  const uiMediaSingleStyles = layout === 'full-width' || layout === 'wide' ? [uiMediaSingleBaseStyles, uiMediaSingleLayoutStyles] : [uiMediaSingleBaseStyles];
156
157
  return jsx(UIMediaSingle, {
@@ -7,6 +7,12 @@ export const EditorMediaClientProvider = ({
7
7
  }) => {
8
8
  const [mediaClientConfig, setMediaClientConfig] = useState();
9
9
  const mediaProvider = useProvider('mediaProvider');
10
+
11
+ /**
12
+ * If a mediaClientConfig is provided then we will force
13
+ * skip the mediaClient from context
14
+ */
15
+ const shouldSkipContext = Boolean((ssr === null || ssr === void 0 ? void 0 : ssr.config) || mediaProvider);
10
16
  const contextMediaClient = useContext(MediaClientContext);
11
17
 
12
18
  // MediaClientProvider currently requires a mediaClientConfig
@@ -28,6 +34,6 @@ export const EditorMediaClientProvider = ({
28
34
  }
29
35
  }, [mediaProvider, ssr]);
30
36
  return /*#__PURE__*/React.createElement(MediaClientContext.Provider, {
31
- value: mediaClient || contextMediaClient
37
+ value: shouldSkipContext ? mediaClient : contextMediaClient
32
38
  }, children);
33
39
  };
@@ -36,7 +36,7 @@ import { EditorMediaClientProvider } from '../../react/utils/EditorMediaClientPr
36
36
  export const NORMAL_SEVERITY_THRESHOLD = 2000;
37
37
  export const DEGRADED_SEVERITY_THRESHOLD = 3000;
38
38
  const packageName = "@atlaskit/renderer";
39
- const packageVersion = "109.15.0";
39
+ const packageVersion = "109.15.3";
40
40
  export class Renderer extends PureComponent {
41
41
  constructor(props) {
42
42
  super(props);
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
2
  import _createClass from "@babel/runtime/helpers/createClass";
4
3
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
@@ -6,6 +5,9 @@ import _inherits from "@babel/runtime/helpers/inherits";
6
5
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
7
6
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
8
7
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
+ import _extends from "@babel/runtime/helpers/extends";
9
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
10
+ var _excluded = ["marks"];
9
11
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
10
12
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
13
  /** @jsx jsx */
@@ -17,12 +19,16 @@ import { MEDIA_CONTEXT } from '@atlaskit/analytics-namespaced-context';
17
19
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
18
20
  import { MediaBorderGapFiller } from '@atlaskit/editor-common/ui';
19
21
  import { MediaCard } from '../../../ui/MediaCard';
22
+ import { AnnotationMarkStates } from '@atlaskit/adf-schema';
20
23
  import { hexToEditorBorderPaletteColor } from '@atlaskit/editor-palette';
21
24
  import { getEventHandler } from '../../../utils';
22
25
  import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
23
26
  import { MODE, PLATFORM } from '../../../analytics/events';
24
27
  import AnnotationComponent from '../../marks/annotation';
25
28
  import { linkStyle, borderStyle } from './styles';
29
+ import { CommentBadge as CommentBadgeComponent } from '@atlaskit/editor-common/media-single';
30
+ import { injectIntl } from 'react-intl-next';
31
+ import { useInlineCommentsFilter } from '../../../ui/annotations/hooks';
26
32
  var MediaBorder = function MediaBorder(_ref) {
27
33
  var _mark$attrs$color, _mark$attrs$size;
28
34
  var mark = _ref.mark,
@@ -77,6 +83,47 @@ var MediaAnnotation = function MediaAnnotation(_ref3) {
77
83
  useBlockLevel: true
78
84
  }, children);
79
85
  };
86
+ var MediaAnnotations = function MediaAnnotations(_ref4) {
87
+ var _ref4$marks = _ref4.marks,
88
+ marks = _ref4$marks === void 0 ? [] : _ref4$marks,
89
+ children = _ref4.children;
90
+ // Early Exit
91
+ if (marks.length === 0) {
92
+ return jsx(Fragment, null, children);
93
+ }
94
+
95
+ // Recursive marks
96
+ var currentMark = marks[0];
97
+ var otherMarks = marks.slice(1);
98
+ return jsx(Fragment, null, jsx(MediaAnnotation, {
99
+ key: currentMark.attrs.id,
100
+ mark: currentMark
101
+ }, otherMarks.length ? jsx(MediaAnnotations, {
102
+ marks: otherMarks
103
+ }, children) : jsx(Fragment, null, children)));
104
+ };
105
+ var CommentBadge = injectIntl(CommentBadgeComponent);
106
+ var CommentBadgeWrapper = function CommentBadgeWrapper(_ref5) {
107
+ var _marks$map;
108
+ var marks = _ref5.marks,
109
+ rest = _objectWithoutProperties(_ref5, _excluded);
110
+ var activeParentIds = useInlineCommentsFilter({
111
+ annotationIds: (_marks$map = marks === null || marks === void 0 ? void 0 : marks.map(function (mark) {
112
+ return mark.attrs.id;
113
+ })) !== null && _marks$map !== void 0 ? _marks$map : [''],
114
+ filter: {
115
+ state: AnnotationMarkStates.ACTIVE
116
+ }
117
+ });
118
+ if (!activeParentIds.length) {
119
+ return null;
120
+ }
121
+
122
+ // todo: handle onClick
123
+ return jsx(CommentBadge, _extends({
124
+ onClick: function onClick() {}
125
+ }, rest));
126
+ };
80
127
  var Media = /*#__PURE__*/function (_PureComponent) {
81
128
  _inherits(Media, _PureComponent);
82
129
  var _super = _createSuper(Media);
@@ -93,8 +140,11 @@ var Media = /*#__PURE__*/function (_PureComponent) {
93
140
  featureFlags = _this$props.featureFlags,
94
141
  allowMediaViewer = _this$props.shouldOpenMediaViewer,
95
142
  enableDownloadButton = _this$props.enableDownloadButton,
96
- ssr = _this$props.ssr;
97
- var annotationMark = _this.props.isAnnotationMark ? _this.props.marks.find(_this.props.isAnnotationMark) : undefined;
143
+ ssr = _this$props.ssr,
144
+ width = _this$props.width,
145
+ height = _this$props.height,
146
+ mediaSingleElement = _this$props.mediaSingleElement;
147
+ var annotationMarks = _this.props.isAnnotationMark ? _this.props.marks.filter(_this.props.isAnnotationMark) : undefined;
98
148
  var borderMark = _this.props.marks.find(_this.props.isBorderMark);
99
149
  var linkMark = _this.props.marks.find(_this.props.isLinkMark);
100
150
  var linkHref = linkMark === null || linkMark === void 0 ? void 0 : linkMark.attrs.href;
@@ -103,15 +153,20 @@ var Media = /*#__PURE__*/function (_PureComponent) {
103
153
  return jsx(MediaLink, {
104
154
  mark: linkMark,
105
155
  onClick: _this.handleMediaLinkClickFn
106
- }, jsx(MediaAnnotation, {
107
- mark: annotationMark
156
+ }, jsx(MediaAnnotations, {
157
+ marks: annotationMarks
108
158
  }, jsx(MediaBorder, {
109
159
  mark: borderMark
110
160
  }, jsx(AnalyticsContext, {
111
161
  data: _defineProperty({}, MEDIA_CONTEXT, {
112
162
  border: !!borderMark
113
163
  })
114
- }, jsx(MediaCard, _extends({
164
+ }, !!annotationMarks && jsx(CommentBadgeWrapper, {
165
+ marks: annotationMarks,
166
+ mediaElement: mediaSingleElement,
167
+ width: width,
168
+ height: height
169
+ }), jsx(MediaCard, _extends({
115
170
  contextIdentifierProvider: contextIdentifierProvider
116
171
  }, _this.props, {
117
172
  shouldOpenMediaViewer: shouldOpenMediaViewer,
@@ -155,7 +155,8 @@ var MediaSingle = function MediaSingle(props) {
155
155
  originalDimensions: originalDimensions,
156
156
  onExternalImageLoaded: onExternalImageLoaded,
157
157
  disableOverlay: true,
158
- featureFlags: featureFlags
158
+ featureFlags: featureFlags,
159
+ mediaSingleElement: ref.current
159
160
  });
160
161
  var uiMediaSingleStyles = layout === 'full-width' || layout === 'wide' ? [uiMediaSingleBaseStyles, uiMediaSingleLayoutStyles] : [uiMediaSingleBaseStyles];
161
162
  return jsx(UIMediaSingle, {
@@ -10,6 +10,12 @@ export var EditorMediaClientProvider = function EditorMediaClientProvider(_ref)
10
10
  mediaClientConfig = _useState2[0],
11
11
  setMediaClientConfig = _useState2[1];
12
12
  var mediaProvider = useProvider('mediaProvider');
13
+
14
+ /**
15
+ * If a mediaClientConfig is provided then we will force
16
+ * skip the mediaClient from context
17
+ */
18
+ var shouldSkipContext = Boolean((ssr === null || ssr === void 0 ? void 0 : ssr.config) || mediaProvider);
13
19
  var contextMediaClient = useContext(MediaClientContext);
14
20
 
15
21
  // MediaClientProvider currently requires a mediaClientConfig
@@ -33,6 +39,6 @@ export var EditorMediaClientProvider = function EditorMediaClientProvider(_ref)
33
39
  }
34
40
  }, [mediaProvider, ssr]);
35
41
  return /*#__PURE__*/React.createElement(MediaClientContext.Provider, {
36
- value: mediaClient || contextMediaClient
42
+ value: shouldSkipContext ? mediaClient : contextMediaClient
37
43
  }, children);
38
44
  };
@@ -46,7 +46,7 @@ import { EditorMediaClientProvider } from '../../react/utils/EditorMediaClientPr
46
46
  export var NORMAL_SEVERITY_THRESHOLD = 2000;
47
47
  export var DEGRADED_SEVERITY_THRESHOLD = 3000;
48
48
  var packageName = "@atlaskit/renderer";
49
- var packageVersion = "109.15.0";
49
+ var packageVersion = "109.15.3";
50
50
  export var Renderer = /*#__PURE__*/function (_PureComponent) {
51
51
  _inherits(Renderer, _PureComponent);
52
52
  var _super = _createSuper(Renderer);
@@ -19,6 +19,9 @@ export type MediaProps = MediaCardProps & {
19
19
  featureFlags?: MediaFeatureFlags;
20
20
  eventHandlers?: EventHandlers;
21
21
  enableDownloadButton?: boolean;
22
+ mediaSingleElement?: HTMLElement | null;
23
+ width?: number;
24
+ height?: number;
22
25
  };
23
26
  export default class Media extends PureComponent<MediaProps, {}> {
24
27
  constructor(props: MediaProps);
@@ -19,6 +19,9 @@ export type MediaProps = MediaCardProps & {
19
19
  featureFlags?: MediaFeatureFlags;
20
20
  eventHandlers?: EventHandlers;
21
21
  enableDownloadButton?: boolean;
22
+ mediaSingleElement?: HTMLElement | null;
23
+ width?: number;
24
+ height?: number;
22
25
  };
23
26
  export default class Media extends PureComponent<MediaProps, {}> {
24
27
  constructor(props: MediaProps);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "109.15.0",
3
+ "version": "109.15.3",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -29,22 +29,22 @@
29
29
  "@atlaskit/analytics-listeners": "^8.9.0",
30
30
  "@atlaskit/analytics-namespaced-context": "^6.9.0",
31
31
  "@atlaskit/analytics-next": "^9.2.0",
32
- "@atlaskit/button": "^17.10.0",
32
+ "@atlaskit/button": "^17.11.0",
33
33
  "@atlaskit/code": "^15.1.0",
34
- "@atlaskit/editor-common": "^78.23.0",
34
+ "@atlaskit/editor-common": "^78.24.0",
35
35
  "@atlaskit/editor-json-transformer": "^8.10.0",
36
36
  "@atlaskit/editor-palette": "1.5.3",
37
37
  "@atlaskit/editor-prosemirror": "3.0.0",
38
38
  "@atlaskit/editor-shared-styles": "^2.9.0",
39
39
  "@atlaskit/emoji": "^67.6.0",
40
40
  "@atlaskit/icon": "^22.1.0",
41
- "@atlaskit/link-datasource": "^1.25.0",
41
+ "@atlaskit/link-datasource": "^1.26.0",
42
42
  "@atlaskit/media-card": "^77.10.0",
43
43
  "@atlaskit/media-client": "^26.2.0",
44
44
  "@atlaskit/media-client-react": "^2.0.0",
45
45
  "@atlaskit/media-common": "^11.1.0",
46
46
  "@atlaskit/media-filmstrip": "^47.0.0",
47
- "@atlaskit/media-ui": "^25.5.0",
47
+ "@atlaskit/media-ui": "^25.6.0",
48
48
  "@atlaskit/media-viewer": "^48.4.0",
49
49
  "@atlaskit/platform-feature-flags": "^0.2.0",
50
50
  "@atlaskit/smart-card": "^26.52.0",
@@ -71,7 +71,7 @@
71
71
  "@af/integration-testing": "*",
72
72
  "@af/visual-regression": "*",
73
73
  "@atlaskit/analytics-gas-types": "^5.1.0",
74
- "@atlaskit/css-reset": "^6.7.0",
74
+ "@atlaskit/css-reset": "^6.8.0",
75
75
  "@atlaskit/editor-test-helpers": "^18.20.0",
76
76
  "@atlaskit/link-provider": "^1.9.0",
77
77
  "@atlaskit/link-test-helpers": "^7.0.0",
@@ -98,6 +98,7 @@
98
98
  "react": "^16.8.0",
99
99
  "react-dom": "^16.8.0",
100
100
  "react-live-clock": "^5.0.0",
101
+ "react-magnetic-di": "^2.2.6",
101
102
  "react-moment": "^1.1.2",
102
103
  "react-test-renderer": "^16.8.0",
103
104
  "rxjs": "^5.5.0",