@atlaskit/editor-plugin-media 1.10.1 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/nodeviews/mediaInline.js +27 -15
  3. package/dist/cjs/nodeviews/mediaSingle.js +21 -8
  4. package/dist/cjs/toolbar/comments.js +7 -4
  5. package/dist/cjs/toolbar/filePreviewItem.js +5 -26
  6. package/dist/cjs/toolbar/utils.js +4 -2
  7. package/dist/cjs/ui/MediaViewer/MediaViewerContainer.js +66 -0
  8. package/dist/cjs/ui/MediaViewer/PortalWrapper.js +30 -0
  9. package/dist/es2019/nodeviews/mediaInline.js +27 -11
  10. package/dist/es2019/nodeviews/mediaSingle.js +21 -8
  11. package/dist/es2019/toolbar/comments.js +7 -4
  12. package/dist/es2019/toolbar/filePreviewItem.js +1 -24
  13. package/dist/es2019/toolbar/utils.js +4 -2
  14. package/dist/es2019/ui/MediaViewer/MediaViewerContainer.js +49 -0
  15. package/dist/es2019/ui/MediaViewer/PortalWrapper.js +25 -0
  16. package/dist/esm/nodeviews/mediaInline.js +27 -11
  17. package/dist/esm/nodeviews/mediaSingle.js +21 -8
  18. package/dist/esm/toolbar/comments.js +7 -4
  19. package/dist/esm/toolbar/filePreviewItem.js +4 -25
  20. package/dist/esm/toolbar/utils.js +4 -2
  21. package/dist/esm/ui/MediaViewer/MediaViewerContainer.js +55 -0
  22. package/dist/esm/ui/MediaViewer/PortalWrapper.js +23 -0
  23. package/dist/types/next-plugin-type.d.ts +2 -0
  24. package/dist/types/nodeviews/mediaInline.d.ts +4 -3
  25. package/dist/types/nodeviews/mediaSingle.d.ts +1 -2
  26. package/dist/types/nodeviews/types.d.ts +2 -0
  27. package/dist/types/toolbar/comments.d.ts +1 -1
  28. package/dist/types/ui/MediaViewer/MediaViewerContainer.d.ts +16 -0
  29. package/dist/types/ui/MediaViewer/PortalWrapper.d.ts +10 -0
  30. package/dist/types/ui/ResizableMediaSingle/types.d.ts +1 -0
  31. package/dist/types-ts4.5/next-plugin-type.d.ts +2 -0
  32. package/dist/types-ts4.5/nodeviews/mediaInline.d.ts +4 -3
  33. package/dist/types-ts4.5/nodeviews/mediaSingle.d.ts +1 -2
  34. package/dist/types-ts4.5/nodeviews/types.d.ts +2 -0
  35. package/dist/types-ts4.5/toolbar/comments.d.ts +1 -1
  36. package/dist/types-ts4.5/ui/MediaViewer/MediaViewerContainer.d.ts +16 -0
  37. package/dist/types-ts4.5/ui/MediaViewer/PortalWrapper.d.ts +10 -0
  38. package/dist/types-ts4.5/ui/ResizableMediaSingle/types.d.ts +1 -0
  39. package/package.json +7 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/editor-plugin-media
2
2
 
3
+ ## 1.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#82581](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/82581) [`c1be75ae15b6`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c1be75ae15b6) - ED-22606 add toggle inline comment action
8
+
9
+ ### Patch Changes
10
+
11
+ - [#81777](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/81777) [`c6d7a5378751`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c6d7a5378751) - Bump adf-schema to 35.7.0
12
+ - Updated dependencies
13
+
14
+ ## 1.11.0
15
+
16
+ ### Minor Changes
17
+
18
+ - [#80438](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/80438) [`cf8860dbf719`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/cf8860dbf719) - [ux] Add media viewer previews to inline media and media single images when Editor is in view mode
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies
23
+
3
24
  ## 1.10.1
4
25
 
5
26
  ### Patch Changes
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -16,7 +15,8 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
16
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
16
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
18
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
- var _react = _interopRequireWildcard(require("react"));
18
+ var _react = require("react");
19
+ var _react2 = require("@emotion/react");
20
20
  var _hooks = require("@atlaskit/editor-common/hooks");
21
21
  var _mediaInline = require("@atlaskit/editor-common/media-inline");
22
22
  var _providerFactory = require("@atlaskit/editor-common/provider-factory");
@@ -24,15 +24,14 @@ var _selectionBasedNodeView = require("@atlaskit/editor-common/selection-based-n
24
24
  var _mediaCard = require("@atlaskit/media-card");
25
25
  var _mediaClientReact = require("@atlaskit/media-client-react");
26
26
  var _mediaUi = require("@atlaskit/media-ui");
27
+ var _MediaViewerContainer = require("../ui/MediaViewer/MediaViewerContainer");
27
28
  var _isType = require("../utils/is-type");
28
29
  var _mediaNodeUpdater = require("./mediaNodeUpdater");
29
30
  var _styles = require("./styles");
30
- 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
- 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
31
  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
32
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
34
33
  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
- 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; }
34
+ 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; } /** @jsx jsx */
36
35
  var createMediaNodeUpdater = exports.createMediaNodeUpdater = function createMediaNodeUpdater(props) {
37
36
  var node = props.node;
38
37
  return new _mediaNodeUpdater.MediaNodeUpdater(_objectSpread(_objectSpread({}, props), {}, {
@@ -180,7 +179,7 @@ var MediaInline = exports.MediaInline = function MediaInline(props) {
180
179
  * before the prerequisites meet
181
180
  */
182
181
  if (!viewMediaClientConfig || isContextIdUnsync) {
183
- return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardLoadingView, {
182
+ return (0, _react2.jsx)(_mediaUi.MediaInlineCardLoadingView, {
184
183
  message: "",
185
184
  isSelected: false
186
185
  });
@@ -190,7 +189,13 @@ var MediaInline = exports.MediaInline = function MediaInline(props) {
190
189
  return mark.type.name === 'border';
191
190
  });
192
191
  if (allowInlineImages && (0, _isType.isImage)(type)) {
193
- return /*#__PURE__*/_react.default.createElement(_mediaInline.MediaInlineImageCard, {
192
+ return (0, _react2.jsx)(_MediaViewerContainer.MediaViewerContainer, {
193
+ mediaNode: props.node,
194
+ mediaPluginState: props.mediaPluginState,
195
+ isEditorViewMode: props.editorViewMode,
196
+ isSelected: props.isSelected,
197
+ isInline: true
198
+ }, (0, _react2.jsx)(_mediaInline.MediaInlineImageCard, {
194
199
  mediaClient: (0, _mediaClientReact.getMediaClient)(viewMediaClientConfig),
195
200
  identifier: identifier,
196
201
  isSelected: props.isSelected,
@@ -201,13 +206,18 @@ var MediaInline = exports.MediaInline = function MediaInline(props) {
201
206
  borderSize: borderMark === null || borderMark === void 0 ? void 0 : borderMark.attrs.size,
202
207
  borderColor: borderMark === null || borderMark === void 0 ? void 0 : borderMark.attrs.color
203
208
  }
204
- });
209
+ }));
205
210
  }
206
- return /*#__PURE__*/_react.default.createElement(_mediaCard.MediaInlineCard, {
211
+ return (0, _react2.jsx)(_MediaViewerContainer.MediaViewerContainer, {
212
+ mediaNode: props.node,
213
+ mediaPluginState: props.mediaPluginState,
214
+ isEditorViewMode: props.editorViewMode,
215
+ isSelected: props.isSelected
216
+ }, (0, _react2.jsx)(_mediaCard.MediaInlineCard, {
207
217
  isSelected: props.isSelected,
208
218
  identifier: identifier,
209
219
  mediaClientConfig: viewMediaClientConfig
210
- });
220
+ }));
211
221
  };
212
222
  var MediaInlineSharedState = function MediaInlineSharedState(_ref3) {
213
223
  var identifier = _ref3.identifier,
@@ -218,12 +228,13 @@ var MediaInlineSharedState = function MediaInlineSharedState(_ref3) {
218
228
  contextIdentifierProvider = _ref3.contextIdentifierProvider,
219
229
  api = _ref3.api,
220
230
  view = _ref3.view;
221
- var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['media']),
231
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['editorViewMode', 'media']),
232
+ editorViewModeState = _useSharedPluginState.editorViewModeState,
222
233
  mediaState = _useSharedPluginState.mediaState;
223
234
  if (!mediaState) {
224
235
  return null;
225
236
  }
226
- return /*#__PURE__*/_react.default.createElement(MediaInline, {
237
+ return (0, _react2.jsx)(MediaInline, {
227
238
  identifier: identifier,
228
239
  mediaProvider: mediaProvider,
229
240
  mediaPluginState: mediaState,
@@ -231,7 +242,8 @@ var MediaInlineSharedState = function MediaInlineSharedState(_ref3) {
231
242
  isSelected: isSelected,
232
243
  view: view,
233
244
  getPos: getPos,
234
- contextIdentifierProvider: contextIdentifierProvider
245
+ contextIdentifierProvider: contextIdentifierProvider,
246
+ editorViewMode: (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view'
235
247
  });
236
248
  };
237
249
  var MediaInlineNodeView = exports.MediaInlineNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
@@ -278,7 +290,7 @@ var MediaInlineNodeView = exports.MediaInlineNodeView = /*#__PURE__*/function (_
278
290
  api = props.api;
279
291
  var view = this.view;
280
292
  var getPos = this.getPos;
281
- return /*#__PURE__*/_react.default.createElement(_providerFactory.WithProviders, {
293
+ return (0, _react2.jsx)(_providerFactory.WithProviders, {
282
294
  providers: ['mediaProvider', 'contextIdentifierProvider'],
283
295
  providerFactory: providerFactory,
284
296
  renderNode: function renderNode(_ref4) {
@@ -287,7 +299,7 @@ var MediaInlineNodeView = exports.MediaInlineNodeView = /*#__PURE__*/function (_
287
299
  if (!mediaProvider) {
288
300
  return null;
289
301
  }
290
- return /*#__PURE__*/_react.default.createElement(MediaInlineSharedState, {
302
+ return (0, _react2.jsx)(MediaInlineSharedState, {
291
303
  identifier: _this.node.attrs.id,
292
304
  mediaProvider: mediaProvider,
293
305
  node: _this.node,
@@ -33,6 +33,7 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
33
33
  var _captions = require("../commands/captions");
34
34
  var _main = require("../pm-plugins/main");
35
35
  var _CaptionPlaceholder = _interopRequireDefault(require("../ui/CaptionPlaceholder"));
36
+ var _MediaViewerContainer = require("../ui/MediaViewer/MediaViewerContainer");
36
37
  var _ResizableMediaSingle = _interopRequireDefault(require("../ui/ResizableMediaSingle"));
37
38
  var _ResizableMediaSingleNext = _interopRequireDefault(require("../ui/ResizableMediaSingle/ResizableMediaSingleNext"));
38
39
  var _mediaCommon = require("../utils/media-common");
@@ -237,10 +238,10 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
237
238
  tr.setSelection(_state.NodeSelection.create(tr.doc, pos));
238
239
  return dispatch(tr);
239
240
  });
240
- // Workaround for iOS 16 Caption selection issue
241
- // @see https://product-fabric.atlassian.net/browse/MEX-2012
242
241
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onMediaSingleClicked", function (event) {
243
242
  var _this$captionPlaceHol;
243
+ // Workaround for iOS 16 Caption selection issue
244
+ // @see https://product-fabric.atlassian.net/browse/MEX-2012
244
245
  if (!_utils.browser.ios) {
245
246
  return;
246
247
  }
@@ -339,7 +340,9 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
339
340
  pluginInjectionApi = _this$props2.pluginInjectionApi,
340
341
  containerWidth = _this$props2.width,
341
342
  lineLength = _this$props2.lineLength,
342
- dispatchAnalyticsEvent = _this$props2.dispatchAnalyticsEvent;
343
+ dispatchAnalyticsEvent = _this$props2.dispatchAnalyticsEvent,
344
+ editorViewMode = _this$props2.editorViewMode,
345
+ mediaPluginState = _this$props2.mediaPluginState;
343
346
  var _ref4 = node.attrs,
344
347
  layout = _ref4.layout,
345
348
  widthType = _ref4.widthType,
@@ -433,14 +436,20 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
433
436
  ref: this.captionPlaceHolderRef,
434
437
  onClick: this.clickPlaceholder
435
438
  }));
436
- return canResize ? (0, _platformFeatureFlags.getBooleanFF)('platform.editor.media.extended-resize-experience') ? (0, _react2.jsx)(_ResizableMediaSingleNext.default, (0, _extends2.default)({}, resizableMediaSingleProps, {
439
+ return (0, _react2.jsx)(_MediaViewerContainer.MediaViewerContainer, {
440
+ mediaPluginState: mediaPluginState,
441
+ isEditorViewMode: editorViewMode,
442
+ mediaNode: node,
443
+ isSelected: isSelected,
444
+ isInline: false
445
+ }, canResize ? (0, _platformFeatureFlags.getBooleanFF)('platform.editor.media.extended-resize-experience') ? (0, _react2.jsx)(_ResizableMediaSingleNext.default, (0, _extends2.default)({}, resizableMediaSingleProps, {
437
446
  showLegacyNotification: widthType !== 'pixel'
438
447
  }), MediaChildren) : (0, _react2.jsx)(_ResizableMediaSingle.default, (0, _extends2.default)({}, resizableMediaSingleProps, {
439
448
  lineLength: contentWidthForLegacyExperience,
440
449
  pctWidth: mediaSingleWidthAttribute
441
450
  }), MediaChildren) : (0, _react2.jsx)(_ui.MediaSingle, (0, _extends2.default)({}, mediaSingleProps, {
442
451
  pctWidth: mediaSingleWidthAttribute
443
- }), MediaChildren);
452
+ }), MediaChildren));
444
453
  }
445
454
  }]);
446
455
  return MediaSingleNode;
@@ -462,10 +471,12 @@ var MediaSingleNodeWrapper = function MediaSingleNodeWrapper(_ref5) {
462
471
  eventDispatcher = _ref5.eventDispatcher,
463
472
  dispatchAnalyticsEvent = _ref5.dispatchAnalyticsEvent,
464
473
  forwardRef = _ref5.forwardRef;
465
- var _useSharedPluginState = (0, _hooks.useSharedPluginState)(pluginInjectionApi, ['width', 'media', 'annotation']),
474
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(pluginInjectionApi, ['width', 'media', 'annotation', 'editorDisabled', 'editorViewMode']),
466
475
  widthState = _useSharedPluginState.widthState,
467
476
  mediaState = _useSharedPluginState.mediaState,
468
- annotationState = _useSharedPluginState.annotationState;
477
+ annotationState = _useSharedPluginState.annotationState,
478
+ editorDisabledState = _useSharedPluginState.editorDisabledState,
479
+ editorViewModeState = _useSharedPluginState.editorViewModeState;
469
480
  return (0, _react2.jsx)(MediaSingleNode, {
470
481
  width: widthState.width,
471
482
  lineLength: widthState.lineLength,
@@ -482,7 +493,9 @@ var MediaSingleNodeWrapper = function MediaSingleNodeWrapper(_ref5) {
482
493
  annotationPluginState: annotationState !== null && annotationState !== void 0 ? annotationState : undefined,
483
494
  dispatchAnalyticsEvent: dispatchAnalyticsEvent,
484
495
  forwardRef: forwardRef,
485
- pluginInjectionApi: pluginInjectionApi
496
+ pluginInjectionApi: pluginInjectionApi,
497
+ editorDisabled: editorDisabledState === null || editorDisabledState === void 0 ? void 0 : editorDisabledState.editorDisabled,
498
+ editorViewMode: (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view'
486
499
  });
487
500
  };
488
501
  var MediaSingleNodeView = /*#__PURE__*/function (_ReactNodeView) {
@@ -9,14 +9,17 @@ var _react = _interopRequireDefault(require("react"));
9
9
  var _analytics = require("@atlaskit/editor-common/analytics");
10
10
  var _keymaps = require("@atlaskit/editor-common/keymaps");
11
11
  var _media = require("@atlaskit/editor-common/media");
12
+ var _state2 = require("@atlaskit/editor-prosemirror/state");
12
13
  var _comment = _interopRequireDefault(require("@atlaskit/icon/glyph/comment"));
13
- var commentButton = exports.commentButton = function commentButton(intl, state, api) {
14
+ var commentButton = exports.commentButton = function commentButton(intl, _state, api) {
14
15
  var title = intl.formatMessage(_media.commentMessages.addCommentOnMedia);
15
16
  var onClickHandler = function onClickHandler(state, dispatch) {
16
- if (api && api.annotation) {
17
- api.annotation.actions.setInlineCommentDraftState(true,
17
+ if (api !== null && api !== void 0 && api.annotation && state.selection instanceof _state2.NodeSelection) {
18
+ var mediaNode = state.selection.node.firstChild;
19
+ var command = api.annotation.actions.showCommentForBlockNode(mediaNode) || api.annotation.actions.setInlineCommentDraftState(true,
18
20
  // TODO: might need to update to reflect it's from media floating toolbar
19
- _analytics.INPUT_METHOD.FLOATING_TB, 'block', true)(state, dispatch);
21
+ _analytics.INPUT_METHOD.FLOATING_TB, 'block', true);
22
+ command(state, dispatch);
20
23
  }
21
24
  return true;
22
25
  };
@@ -8,37 +8,16 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.FilePreviewItem = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
- var _reactDom = _interopRequireDefault(require("react-dom"));
12
11
  var _ui = require("@atlaskit/editor-common/ui");
13
12
  var _filePreview = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/file-preview"));
14
13
  var _mediaUi = require("@atlaskit/media-ui");
15
- var _mediaViewer = require("@atlaskit/media-viewer");
14
+ var _PortalWrapper = require("../ui/MediaViewer/PortalWrapper");
16
15
  var _utils = require("./utils");
17
16
  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); }
18
17
  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; }
19
- var RenderMediaViewer = function RenderMediaViewer(_ref) {
20
- var mediaClientConfig = _ref.mediaClientConfig,
21
- onClose = _ref.onClose,
22
- selectedNodeAttrs = _ref.selectedNodeAttrs;
23
- var id = selectedNodeAttrs.id,
24
- _selectedNodeAttrs$co = selectedNodeAttrs.collection,
25
- collection = _selectedNodeAttrs$co === void 0 ? '' : _selectedNodeAttrs$co;
26
- var identifier = {
27
- id: id,
28
- mediaItemType: 'file',
29
- collectionName: collection
30
- };
31
- return /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_mediaViewer.MediaViewer, {
32
- collectionName: collection,
33
- items: [],
34
- mediaClientConfig: mediaClientConfig,
35
- selectedItem: identifier,
36
- onClose: onClose
37
- }), document.body);
38
- };
39
- var FilePreviewItem = exports.FilePreviewItem = function FilePreviewItem(_ref2) {
40
- var mediaPluginState = _ref2.mediaPluginState,
41
- intl = _ref2.intl;
18
+ var FilePreviewItem = exports.FilePreviewItem = function FilePreviewItem(_ref) {
19
+ var mediaPluginState = _ref.mediaPluginState,
20
+ intl = _ref.intl;
42
21
  var _useState = (0, _react.useState)(false),
43
22
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
44
23
  isMediaViewerVisible = _useState2[0],
@@ -60,7 +39,7 @@ var FilePreviewItem = exports.FilePreviewItem = function FilePreviewItem(_ref2)
60
39
  label: "file preview"
61
40
  }),
62
41
  tooltipContent: tooltipContent
63
- }), shouldRenderMediaViewer && /*#__PURE__*/_react.default.createElement(RenderMediaViewer, {
42
+ }), shouldRenderMediaViewer && /*#__PURE__*/_react.default.createElement(_PortalWrapper.RenderMediaViewer, {
64
43
  mediaClientConfig: mediaPluginState.mediaClientConfig,
65
44
  onClose: onMediaViewerClose,
66
45
  selectedNodeAttrs: selectedNodeAttrs
@@ -15,14 +15,16 @@ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
15
15
  var _mediaClientReact = require("@atlaskit/media-client-react");
16
16
  var _mediaSingle2 = require("../utils/media-single");
17
17
  var getSelectedMediaContainerNodeAttrs = exports.getSelectedMediaContainerNodeAttrs = function getSelectedMediaContainerNodeAttrs(mediaPluginState) {
18
- var selectedNode = mediaPluginState.selectedMediaContainerNode();
18
+ var _mediaPluginState$sel;
19
+ var selectedNode = (_mediaPluginState$sel = mediaPluginState.selectedMediaContainerNode) === null || _mediaPluginState$sel === void 0 ? void 0 : _mediaPluginState$sel.call(mediaPluginState);
19
20
  if (selectedNode && selectedNode.attrs) {
20
21
  return selectedNode.attrs;
21
22
  }
22
23
  return null;
23
24
  };
24
25
  var getSelectedNearestMediaContainerNodeAttrs = exports.getSelectedNearestMediaContainerNodeAttrs = function getSelectedNearestMediaContainerNodeAttrs(mediaPluginState) {
25
- var selectedNode = mediaPluginState.selectedMediaContainerNode();
26
+ var _mediaPluginState$sel2;
27
+ var selectedNode = (_mediaPluginState$sel2 = mediaPluginState.selectedMediaContainerNode) === null || _mediaPluginState$sel2 === void 0 ? void 0 : _mediaPluginState$sel2.call(mediaPluginState);
26
28
  if (selectedNode) {
27
29
  switch (selectedNode.type.name) {
28
30
  case 'mediaSingle':
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.mediaViewerContainerTestID = exports.MediaViewerContainer = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _react2 = require("@emotion/react");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
+ var _utils = require("../../toolbar/utils");
14
+ var _isType = require("../../utils/is-type");
15
+ var _PortalWrapper = require("./PortalWrapper");
16
+ 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); }
17
+ 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; }
18
+ /** @jsx jsx */
19
+
20
+ var interactiveStyles = (0, _react2.css)({
21
+ cursor: 'pointer'
22
+ });
23
+ var mediaViewerContainerTestID = exports.mediaViewerContainerTestID = 'media-viewer-container-test';
24
+ var MediaViewerContainer = exports.MediaViewerContainer = function MediaViewerContainer(_ref) {
25
+ var _mediaNode$firstChild;
26
+ var mediaNode = _ref.mediaNode,
27
+ mediaPluginState = _ref.mediaPluginState,
28
+ _ref$isEditorViewMode = _ref.isEditorViewMode,
29
+ isEditorViewMode = _ref$isEditorViewMode === void 0 ? false : _ref$isEditorViewMode,
30
+ _ref$isSelected = _ref.isSelected,
31
+ isSelected = _ref$isSelected === void 0 ? true : _ref$isSelected,
32
+ _ref$isInline = _ref.isInline,
33
+ isInline = _ref$isInline === void 0 ? false : _ref$isInline,
34
+ children = _ref.children;
35
+ var _useState = (0, _react.useState)(false),
36
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
37
+ showViewer = _useState2[0],
38
+ setShowMediaViewer = _useState2[1];
39
+ (0, _react.useEffect)(function () {
40
+ setShowMediaViewer(isSelected);
41
+ }, [isSelected]);
42
+ var selectedNodeAttrs = (0, _utils.getSelectedNearestMediaContainerNodeAttrs)(mediaPluginState);
43
+ var mediaClientConfig = mediaPluginState.mediaClientConfig;
44
+ var showMediaViewer = function showMediaViewer() {
45
+ setShowMediaViewer(true);
46
+ };
47
+ var closeMediaViewer = function closeMediaViewer() {
48
+ setShowMediaViewer(false);
49
+ };
50
+ var isVideoMedia = (0, _isType.isVideo)((_mediaNode$firstChild = mediaNode.firstChild) === null || _mediaNode$firstChild === void 0 ? void 0 : _mediaNode$firstChild.attrs.__fileMimeType);
51
+ var enableMediaViewer = (0, _platformFeatureFlags.getBooleanFF)('platform.editor.media.preview-in-full-page') && isEditorViewMode;
52
+ var shouldShowViewer = enableMediaViewer && showViewer && selectedNodeAttrs && mediaClientConfig && !isVideoMedia;
53
+ return (0, _react2.jsx)(_react.Fragment, null, enableMediaViewer ? (0, _react2.jsx)(_react.Fragment, null, isInline ? (0, _react2.jsx)("span", {
54
+ onClick: showMediaViewer,
55
+ css: interactiveStyles,
56
+ "data-testid": mediaViewerContainerTestID
57
+ }, children) : (0, _react2.jsx)("div", {
58
+ onClick: showMediaViewer,
59
+ css: interactiveStyles,
60
+ "data-testid": mediaViewerContainerTestID
61
+ }, children), shouldShowViewer && (0, _react2.jsx)(_PortalWrapper.RenderMediaViewer, {
62
+ selectedNodeAttrs: selectedNodeAttrs,
63
+ mediaClientConfig: mediaClientConfig,
64
+ onClose: closeMediaViewer
65
+ })) : children);
66
+ };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RenderMediaViewer = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactDom = _interopRequireDefault(require("react-dom"));
10
+ var _mediaViewer = require("@atlaskit/media-viewer");
11
+ var RenderMediaViewer = exports.RenderMediaViewer = function RenderMediaViewer(_ref) {
12
+ var mediaClientConfig = _ref.mediaClientConfig,
13
+ onClose = _ref.onClose,
14
+ selectedNodeAttrs = _ref.selectedNodeAttrs;
15
+ var id = selectedNodeAttrs.id,
16
+ _selectedNodeAttrs$co = selectedNodeAttrs.collection,
17
+ collection = _selectedNodeAttrs$co === void 0 ? '' : _selectedNodeAttrs$co;
18
+ var identifier = {
19
+ id: id,
20
+ mediaItemType: 'file',
21
+ collectionName: collection
22
+ };
23
+ return /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_mediaViewer.MediaViewer, {
24
+ collectionName: collection,
25
+ items: [],
26
+ mediaClientConfig: mediaClientConfig,
27
+ selectedItem: identifier,
28
+ onClose: onClose
29
+ }), document.body);
30
+ };
@@ -1,4 +1,6 @@
1
- import React, { useEffect, useState } from 'react';
1
+ /** @jsx jsx */
2
+ import { useEffect, useState } from 'react';
3
+ import { jsx } from '@emotion/react';
2
4
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
3
5
  import { MediaInlineImageCard } from '@atlaskit/editor-common/media-inline';
4
6
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
@@ -6,6 +8,7 @@ import { SelectionBasedNodeView } from '@atlaskit/editor-common/selection-based-
6
8
  import { MediaInlineCard } from '@atlaskit/media-card';
7
9
  import { getMediaClient } from '@atlaskit/media-client-react';
8
10
  import { MediaInlineCardLoadingView } from '@atlaskit/media-ui';
11
+ import { MediaViewerContainer } from '../ui/MediaViewer/MediaViewerContainer';
9
12
  import { isImage } from '../utils/is-type';
10
13
  import { MediaNodeUpdater } from './mediaNodeUpdater';
11
14
  import { MediaInlineNodeSelector } from './styles';
@@ -107,7 +110,7 @@ export const MediaInline = props => {
107
110
  * before the prerequisites meet
108
111
  */
109
112
  if (!viewMediaClientConfig || isContextIdUnsync) {
110
- return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
113
+ return jsx(MediaInlineCardLoadingView, {
111
114
  message: "",
112
115
  isSelected: false
113
116
  });
@@ -117,7 +120,13 @@ export const MediaInline = props => {
117
120
  } = props.mediaPluginState;
118
121
  const borderMark = (_props$node = props.node) === null || _props$node === void 0 ? void 0 : (_props$node$marks = _props$node.marks) === null || _props$node$marks === void 0 ? void 0 : _props$node$marks.find(mark => mark.type.name === 'border');
119
122
  if (allowInlineImages && isImage(type)) {
120
- return /*#__PURE__*/React.createElement(MediaInlineImageCard, {
123
+ return jsx(MediaViewerContainer, {
124
+ mediaNode: props.node,
125
+ mediaPluginState: props.mediaPluginState,
126
+ isEditorViewMode: props.editorViewMode,
127
+ isSelected: props.isSelected,
128
+ isInline: true
129
+ }, jsx(MediaInlineImageCard, {
121
130
  mediaClient: getMediaClient(viewMediaClientConfig),
122
131
  identifier: identifier,
123
132
  isSelected: props.isSelected,
@@ -128,13 +137,18 @@ export const MediaInline = props => {
128
137
  borderSize: borderMark === null || borderMark === void 0 ? void 0 : borderMark.attrs.size,
129
138
  borderColor: borderMark === null || borderMark === void 0 ? void 0 : borderMark.attrs.color
130
139
  }
131
- });
140
+ }));
132
141
  }
133
- return /*#__PURE__*/React.createElement(MediaInlineCard, {
142
+ return jsx(MediaViewerContainer, {
143
+ mediaNode: props.node,
144
+ mediaPluginState: props.mediaPluginState,
145
+ isEditorViewMode: props.editorViewMode,
146
+ isSelected: props.isSelected
147
+ }, jsx(MediaInlineCard, {
134
148
  isSelected: props.isSelected,
135
149
  identifier: identifier,
136
150
  mediaClientConfig: viewMediaClientConfig
137
- });
151
+ }));
138
152
  };
139
153
  const MediaInlineSharedState = ({
140
154
  identifier,
@@ -147,12 +161,13 @@ const MediaInlineSharedState = ({
147
161
  view
148
162
  }) => {
149
163
  const {
164
+ editorViewModeState,
150
165
  mediaState
151
- } = useSharedPluginState(api, ['media']);
166
+ } = useSharedPluginState(api, ['editorViewMode', 'media']);
152
167
  if (!mediaState) {
153
168
  return null;
154
169
  }
155
- return /*#__PURE__*/React.createElement(MediaInline, {
170
+ return jsx(MediaInline, {
156
171
  identifier: identifier,
157
172
  mediaProvider: mediaProvider,
158
173
  mediaPluginState: mediaState,
@@ -160,7 +175,8 @@ const MediaInlineSharedState = ({
160
175
  isSelected: isSelected,
161
176
  view: view,
162
177
  getPos: getPos,
163
- contextIdentifierProvider: contextIdentifierProvider
178
+ contextIdentifierProvider: contextIdentifierProvider,
179
+ editorViewMode: (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view'
164
180
  });
165
181
  };
166
182
  export class MediaInlineNodeView extends SelectionBasedNodeView {
@@ -194,7 +210,7 @@ export class MediaInlineNodeView extends SelectionBasedNodeView {
194
210
  view
195
211
  } = this;
196
212
  const getPos = this.getPos;
197
- return /*#__PURE__*/React.createElement(WithProviders, {
213
+ return jsx(WithProviders, {
198
214
  providers: ['mediaProvider', 'contextIdentifierProvider'],
199
215
  providerFactory: providerFactory,
200
216
  renderNode: ({
@@ -204,7 +220,7 @@ export class MediaInlineNodeView extends SelectionBasedNodeView {
204
220
  if (!mediaProvider) {
205
221
  return null;
206
222
  }
207
- return /*#__PURE__*/React.createElement(MediaInlineSharedState, {
223
+ return jsx(MediaInlineSharedState, {
208
224
  identifier: this.node.attrs.id,
209
225
  mediaProvider: mediaProvider,
210
226
  node: this.node,
@@ -18,6 +18,7 @@ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
18
18
  import { insertAndSelectCaptionFromMediaSinglePos } from '../commands/captions';
19
19
  import { MEDIA_CONTENT_WRAP_CLASS_NAME } from '../pm-plugins/main';
20
20
  import CaptionPlaceholder from '../ui/CaptionPlaceholder';
21
+ import { MediaViewerContainer } from '../ui/MediaViewer/MediaViewerContainer';
21
22
  import ResizableMediaSingle from '../ui/ResizableMediaSingle';
22
23
  import ResizableMediaSingleNext from '../ui/ResizableMediaSingle/ResizableMediaSingleNext';
23
24
  import { isMediaBlobUrlFromAttrs } from '../utils/media-common';
@@ -165,10 +166,10 @@ export default class MediaSingleNode extends Component {
165
166
  tr.setSelection(NodeSelection.create(tr.doc, pos));
166
167
  return dispatch(tr);
167
168
  });
168
- // Workaround for iOS 16 Caption selection issue
169
- // @see https://product-fabric.atlassian.net/browse/MEX-2012
170
169
  _defineProperty(this, "onMediaSingleClicked", event => {
171
170
  var _this$captionPlaceHol;
171
+ // Workaround for iOS 16 Caption selection issue
172
+ // @see https://product-fabric.atlassian.net/browse/MEX-2012
172
173
  if (!browser.ios) {
173
174
  return;
174
175
  }
@@ -242,7 +243,9 @@ export default class MediaSingleNode extends Component {
242
243
  pluginInjectionApi,
243
244
  width: containerWidth,
244
245
  lineLength,
245
- dispatchAnalyticsEvent
246
+ dispatchAnalyticsEvent,
247
+ editorViewMode,
248
+ mediaPluginState
246
249
  } = this.props;
247
250
  const {
248
251
  layout,
@@ -346,14 +349,20 @@ export default class MediaSingleNode extends Component {
346
349
  ref: this.captionPlaceHolderRef,
347
350
  onClick: this.clickPlaceholder
348
351
  }));
349
- return canResize ? getBooleanFF('platform.editor.media.extended-resize-experience') ? jsx(ResizableMediaSingleNext, _extends({}, resizableMediaSingleProps, {
352
+ return jsx(MediaViewerContainer, {
353
+ mediaPluginState: mediaPluginState,
354
+ isEditorViewMode: editorViewMode,
355
+ mediaNode: node,
356
+ isSelected: isSelected,
357
+ isInline: false
358
+ }, canResize ? getBooleanFF('platform.editor.media.extended-resize-experience') ? jsx(ResizableMediaSingleNext, _extends({}, resizableMediaSingleProps, {
350
359
  showLegacyNotification: widthType !== 'pixel'
351
360
  }), MediaChildren) : jsx(ResizableMediaSingle, _extends({}, resizableMediaSingleProps, {
352
361
  lineLength: contentWidthForLegacyExperience,
353
362
  pctWidth: mediaSingleWidthAttribute
354
363
  }), MediaChildren) : jsx(MediaSingle, _extends({}, mediaSingleProps, {
355
364
  pctWidth: mediaSingleWidthAttribute
356
- }), MediaChildren);
365
+ }), MediaChildren));
357
366
  }
358
367
  }
359
368
  _defineProperty(MediaSingleNode, "defaultProps", {
@@ -377,8 +386,10 @@ const MediaSingleNodeWrapper = ({
377
386
  const {
378
387
  widthState,
379
388
  mediaState,
380
- annotationState
381
- } = useSharedPluginState(pluginInjectionApi, ['width', 'media', 'annotation']);
389
+ annotationState,
390
+ editorDisabledState,
391
+ editorViewModeState
392
+ } = useSharedPluginState(pluginInjectionApi, ['width', 'media', 'annotation', 'editorDisabled', 'editorViewMode']);
382
393
  return jsx(MediaSingleNode, {
383
394
  width: widthState.width,
384
395
  lineLength: widthState.lineLength,
@@ -395,7 +406,9 @@ const MediaSingleNodeWrapper = ({
395
406
  annotationPluginState: annotationState !== null && annotationState !== void 0 ? annotationState : undefined,
396
407
  dispatchAnalyticsEvent: dispatchAnalyticsEvent,
397
408
  forwardRef: forwardRef,
398
- pluginInjectionApi: pluginInjectionApi
409
+ pluginInjectionApi: pluginInjectionApi,
410
+ editorDisabled: editorDisabledState === null || editorDisabledState === void 0 ? void 0 : editorDisabledState.editorDisabled,
411
+ editorViewMode: (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view'
399
412
  });
400
413
  };
401
414
  class MediaSingleNodeView extends ReactNodeView {
@@ -2,14 +2,17 @@ import React from 'react';
2
2
  import { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
3
3
  import { ToolTipContent } from '@atlaskit/editor-common/keymaps';
4
4
  import { commentMessages as messages } from '@atlaskit/editor-common/media';
5
+ import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
5
6
  import CommentIcon from '@atlaskit/icon/glyph/comment';
6
- export const commentButton = (intl, state, api) => {
7
+ export const commentButton = (intl, _state, api) => {
7
8
  const title = intl.formatMessage(messages.addCommentOnMedia);
8
9
  const onClickHandler = (state, dispatch) => {
9
- if (api && api.annotation) {
10
- api.annotation.actions.setInlineCommentDraftState(true,
10
+ if (api !== null && api !== void 0 && api.annotation && state.selection instanceof NodeSelection) {
11
+ const mediaNode = state.selection.node.firstChild;
12
+ const command = api.annotation.actions.showCommentForBlockNode(mediaNode) || api.annotation.actions.setInlineCommentDraftState(true,
11
13
  // TODO: might need to update to reflect it's from media floating toolbar
12
- INPUT_METHOD.FLOATING_TB, 'block', true)(state, dispatch);
14
+ INPUT_METHOD.FLOATING_TB, 'block', true);
15
+ command(state, dispatch);
13
16
  }
14
17
  return true;
15
18
  };