@atlaskit/editor-plugin-media 9.3.2 → 9.4.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @atlaskit/editor-plugin-media
2
2
 
3
+ ## 9.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`f552961081787`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f552961081787) -
8
+ Removed the editing button from the toolbar for external media Introduced cropping for image
9
+ editing
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
15
+ ## 9.3.3
16
+
17
+ ### Patch Changes
18
+
19
+ - [`0457795b04c62`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0457795b04c62) -
20
+ EDITOR-4396 Media toolbar button doesn't when missing the mediaInsert Plugin
21
+
3
22
  ## 9.3.2
4
23
 
5
24
  ### Patch Changes
@@ -9,6 +9,8 @@ exports.mediaPlugin = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _analytics = require("@atlaskit/editor-common/analytics");
11
11
  var _hooks = require("@atlaskit/editor-common/hooks");
12
+ var _messages = require("@atlaskit/editor-common/messages");
13
+ var _quickInsert = require("@atlaskit/editor-common/quick-insert");
12
14
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
13
15
  var _toolbarFlagCheck = require("@atlaskit/editor-common/toolbar-flag-check");
14
16
  var _state = require("@atlaskit/editor-prosemirror/state");
@@ -341,8 +343,35 @@ var mediaPlugin = exports.mediaPlugin = function mediaPlugin(_ref3) {
341
343
  });
342
344
  },
343
345
  pluginsOptions: {
344
- quickInsert: function quickInsert() {
345
- return [];
346
+ quickInsert: function quickInsert(_ref12) {
347
+ var formatMessage = _ref12.formatMessage;
348
+ return !(api !== null && api !== void 0 && api.mediaInsert) && (0, _platformFeatureFlags.fg)('platform_editor_media_insert_check') ? [{
349
+ id: 'media',
350
+ title: formatMessage(_messages.toolbarInsertBlockMessages.mediaFiles),
351
+ description: formatMessage(_messages.toolbarInsertBlockMessages.mediaFilesDescription),
352
+ priority: 400,
353
+ keywords: ['attachment', 'gif', 'media', 'picture', 'image', 'video', 'file'],
354
+ icon: function icon() {
355
+ return /*#__PURE__*/_react.default.createElement(_quickInsert.IconImages, null);
356
+ },
357
+ isDisabledOffline: true,
358
+ action: function action(insert, state) {
359
+ var _api$analytics6;
360
+ var pluginState = _pluginKey.stateKey.getState(state);
361
+ pluginState === null || pluginState === void 0 || pluginState.showMediaPicker();
362
+ var tr = insert('');
363
+ api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 || _api$analytics6.actions.attachAnalyticsEvent({
364
+ action: _analytics.ACTION.OPENED,
365
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
366
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_CLOUD,
367
+ attributes: {
368
+ inputMethod: _analytics.INPUT_METHOD.QUICK_INSERT
369
+ },
370
+ eventType: _analytics.EVENT_TYPE.UI
371
+ })(tr);
372
+ return tr;
373
+ }
374
+ }] : [];
346
375
  },
347
376
  floatingToolbar: function floatingToolbar(state, intl, providerFactory) {
348
377
  var _api$editorViewMode;
@@ -46,8 +46,7 @@ var IconWrapperComponent = function IconWrapperComponent(props) {
46
46
  return (0, _react.jsx)("div", {
47
47
  css: iconWrapperStyles
48
48
  }, (0, _react.jsx)(_file.default, {
49
- label: intl.formatMessage(dropPlaceholderLabel),
50
- LEGACY_size: "medium"
49
+ label: intl.formatMessage(dropPlaceholderLabel)
51
50
  }));
52
51
  };
53
52
  var IntlIconWrapper = (0, _reactIntlNext.injectIntl)(IconWrapperComponent);
@@ -565,10 +565,12 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
565
565
  }
566
566
  // Image Editing Support
567
567
  if (!!(pluginInjectionApi !== null && pluginInjectionApi !== void 0 && pluginInjectionApi.mediaEditing) && allowImageEditing && (0, _expValEquals.expValEquals)('platform_editor_add_image_editing', 'isEnabled', true)) {
568
- var _mediaNode$attrs;
568
+ var _mediaNode$attrs, _mediaNode$attrs2;
569
569
  var _selectedMediaSingleNode = (0, _utils2.getSelectedMediaSingle)(state);
570
570
  var mediaNode = _selectedMediaSingleNode === null || _selectedMediaSingleNode === void 0 ? void 0 : _selectedMediaSingleNode.node.content.firstChild;
571
- if (!(0, _mediaSingle.isVideo)(mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.__fileMimeType)) {
571
+ // Disable image editing for external media, as we cannot save changes to external images per CORS policy
572
+ var isExternal = (mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.type) === 'external';
573
+ if (!(0, _mediaSingle.isVideo)(mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs2 = mediaNode.attrs) === null || _mediaNode$attrs2 === void 0 ? void 0 : _mediaNode$attrs2.__fileMimeType) && !isExternal) {
572
574
  toolbarButtons.push({
573
575
  id: 'editor.media.edit',
574
576
  testId: 'image-edit-toolbar-button',
@@ -591,10 +593,10 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
591
593
  }
592
594
  // Preview Support
593
595
  if (allowImagePreview) {
594
- var _mediaNode$attrs2;
596
+ var _mediaNode$attrs3;
595
597
  var _selectedMediaSingleNode2 = (0, _utils2.getSelectedMediaSingle)(state);
596
598
  var _mediaNode = _selectedMediaSingleNode2 === null || _selectedMediaSingleNode2 === void 0 ? void 0 : _selectedMediaSingleNode2.node.content.firstChild;
597
- if (!(0, _mediaSingle.isVideo)(_mediaNode === null || _mediaNode === void 0 || (_mediaNode$attrs2 = _mediaNode.attrs) === null || _mediaNode$attrs2 === void 0 ? void 0 : _mediaNode$attrs2.__fileMimeType)) {
599
+ if (!(0, _mediaSingle.isVideo)(_mediaNode === null || _mediaNode === void 0 || (_mediaNode$attrs3 = _mediaNode.attrs) === null || _mediaNode$attrs3 === void 0 ? void 0 : _mediaNode$attrs3.__fileMimeType)) {
598
600
  var _pluginInjectionApi$c2;
599
601
  toolbarButtons.push({
600
602
  id: 'editor.media.viewer',
@@ -728,10 +730,12 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
728
730
  toolbarButtons.push((0, _comments.commentButton)(intl, state, pluginInjectionApi, onCommentButtonMount));
729
731
  }
730
732
  if (allowAdvancedToolBarOptions && allowImageEditing && (0, _expValEquals.expValEquals)('platform_editor_add_image_editing', 'isEnabled', true)) {
731
- var _mediaNode3$attrs;
733
+ var _mediaNode3$attrs, _mediaNode3$attrs2;
732
734
  var _selectedMediaSingleNode4 = (0, _utils2.getSelectedMediaSingle)(state);
733
735
  var _mediaNode3 = _selectedMediaSingleNode4 === null || _selectedMediaSingleNode4 === void 0 ? void 0 : _selectedMediaSingleNode4.node.content.firstChild;
734
- if (!(0, _mediaSingle.isVideo)(_mediaNode3 === null || _mediaNode3 === void 0 || (_mediaNode3$attrs = _mediaNode3.attrs) === null || _mediaNode3$attrs === void 0 ? void 0 : _mediaNode3$attrs.__fileMimeType)) {
736
+ // Disable image editing for external media, as we cannot save changes to external images per CORS policy
737
+ var _isExternal = (_mediaNode3 === null || _mediaNode3 === void 0 || (_mediaNode3$attrs = _mediaNode3.attrs) === null || _mediaNode3$attrs === void 0 ? void 0 : _mediaNode3$attrs.type) === 'external';
738
+ if (!(0, _mediaSingle.isVideo)(_mediaNode3 === null || _mediaNode3 === void 0 || (_mediaNode3$attrs2 = _mediaNode3.attrs) === null || _mediaNode3$attrs2 === void 0 ? void 0 : _mediaNode3$attrs2.__fileMimeType) && !_isExternal) {
735
739
  toolbarButtons.push({
736
740
  id: 'editor.media.edit',
737
741
  testId: 'image-edit-toolbar-button',
@@ -1,6 +1,8 @@
1
1
  import React, { useMemo } from 'react';
2
- import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
2
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
3
3
  import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
4
+ import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
5
+ import { IconImages } from '@atlaskit/editor-common/quick-insert';
4
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
7
  import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
6
8
  import { NodeSelection, PluginKey } from '@atlaskit/editor-prosemirror/state';
@@ -340,7 +342,33 @@ export const mediaPlugin = ({
340
342
  });
341
343
  },
342
344
  pluginsOptions: {
343
- quickInsert: () => [],
345
+ quickInsert: ({
346
+ formatMessage
347
+ }) => !(api !== null && api !== void 0 && api.mediaInsert) && fg('platform_editor_media_insert_check') ? [{
348
+ id: 'media',
349
+ title: formatMessage(messages.mediaFiles),
350
+ description: formatMessage(messages.mediaFilesDescription),
351
+ priority: 400,
352
+ keywords: ['attachment', 'gif', 'media', 'picture', 'image', 'video', 'file'],
353
+ icon: () => /*#__PURE__*/React.createElement(IconImages, null),
354
+ isDisabledOffline: true,
355
+ action(insert, state) {
356
+ var _api$analytics6;
357
+ const pluginState = stateKey.getState(state);
358
+ pluginState === null || pluginState === void 0 ? void 0 : pluginState.showMediaPicker();
359
+ const tr = insert('');
360
+ api === null || api === void 0 ? void 0 : (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions.attachAnalyticsEvent({
361
+ action: ACTION.OPENED,
362
+ actionSubject: ACTION_SUBJECT.PICKER,
363
+ actionSubjectId: ACTION_SUBJECT_ID.PICKER_CLOUD,
364
+ attributes: {
365
+ inputMethod: INPUT_METHOD.QUICK_INSERT
366
+ },
367
+ eventType: EVENT_TYPE.UI
368
+ })(tr);
369
+ return tr;
370
+ }
371
+ }] : [],
344
372
  floatingToolbar: (state, intl, providerFactory) => {
345
373
  var _api$editorViewMode, _api$editorViewMode$s;
346
374
  return floatingToolbar(state, intl, {
@@ -42,8 +42,7 @@ const IconWrapperComponent = props => {
42
42
  return jsx("div", {
43
43
  css: iconWrapperStyles
44
44
  }, jsx(DocumentFilledIcon, {
45
- label: intl.formatMessage(dropPlaceholderLabel),
46
- LEGACY_size: "medium"
45
+ label: intl.formatMessage(dropPlaceholderLabel)
47
46
  }));
48
47
  };
49
48
  const IntlIconWrapper = injectIntl(IconWrapperComponent);
@@ -564,10 +564,12 @@ const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, m
564
564
  }
565
565
  // Image Editing Support
566
566
  if (!!(pluginInjectionApi !== null && pluginInjectionApi !== void 0 && pluginInjectionApi.mediaEditing) && allowImageEditing && expValEquals('platform_editor_add_image_editing', 'isEnabled', true)) {
567
- var _mediaNode$attrs;
567
+ var _mediaNode$attrs, _mediaNode$attrs2;
568
568
  const selectedMediaSingleNode = getSelectedMediaSingle(state);
569
569
  const mediaNode = selectedMediaSingleNode === null || selectedMediaSingleNode === void 0 ? void 0 : selectedMediaSingleNode.node.content.firstChild;
570
- if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.__fileMimeType)) {
570
+ // Disable image editing for external media, as we cannot save changes to external images per CORS policy
571
+ const isExternal = (mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.type) === 'external';
572
+ if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs2 = mediaNode.attrs) === null || _mediaNode$attrs2 === void 0 ? void 0 : _mediaNode$attrs2.__fileMimeType) && !isExternal) {
571
573
  toolbarButtons.push({
572
574
  id: 'editor.media.edit',
573
575
  testId: 'image-edit-toolbar-button',
@@ -590,10 +592,10 @@ const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, m
590
592
  }
591
593
  // Preview Support
592
594
  if (allowImagePreview) {
593
- var _mediaNode$attrs2;
595
+ var _mediaNode$attrs3;
594
596
  const selectedMediaSingleNode = getSelectedMediaSingle(state);
595
597
  const mediaNode = selectedMediaSingleNode === null || selectedMediaSingleNode === void 0 ? void 0 : selectedMediaSingleNode.node.content.firstChild;
596
- if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs2 = mediaNode.attrs) === null || _mediaNode$attrs2 === void 0 ? void 0 : _mediaNode$attrs2.__fileMimeType)) {
598
+ if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs3 = mediaNode.attrs) === null || _mediaNode$attrs3 === void 0 ? void 0 : _mediaNode$attrs3.__fileMimeType)) {
597
599
  var _pluginInjectionApi$c4, _pluginInjectionApi$c5, _pluginInjectionApi$c6;
598
600
  toolbarButtons.push({
599
601
  id: 'editor.media.viewer',
@@ -676,10 +678,10 @@ const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, m
676
678
  } else {
677
679
  // Preview Support
678
680
  if (allowAdvancedToolBarOptions && allowImagePreview) {
679
- var _mediaNode$attrs3;
681
+ var _mediaNode$attrs4;
680
682
  const selectedMediaSingleNode = getSelectedMediaSingle(state);
681
683
  const mediaNode = selectedMediaSingleNode === null || selectedMediaSingleNode === void 0 ? void 0 : selectedMediaSingleNode.node.content.firstChild;
682
- if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs3 = mediaNode.attrs) === null || _mediaNode$attrs3 === void 0 ? void 0 : _mediaNode$attrs3.__fileMimeType)) {
684
+ if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs4 = mediaNode.attrs) === null || _mediaNode$attrs4 === void 0 ? void 0 : _mediaNode$attrs4.__fileMimeType)) {
683
685
  var _pluginInjectionApi$c7, _pluginInjectionApi$c8, _pluginInjectionApi$c9;
684
686
  toolbarButtons.push({
685
687
  id: 'editor.media.viewer',
@@ -727,10 +729,12 @@ const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, m
727
729
  toolbarButtons.push(commentButton(intl, state, pluginInjectionApi, onCommentButtonMount));
728
730
  }
729
731
  if (allowAdvancedToolBarOptions && allowImageEditing && expValEquals('platform_editor_add_image_editing', 'isEnabled', true)) {
730
- var _mediaNode$attrs4;
732
+ var _mediaNode$attrs5, _mediaNode$attrs6;
731
733
  const selectedMediaSingleNode = getSelectedMediaSingle(state);
732
734
  const mediaNode = selectedMediaSingleNode === null || selectedMediaSingleNode === void 0 ? void 0 : selectedMediaSingleNode.node.content.firstChild;
733
- if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs4 = mediaNode.attrs) === null || _mediaNode$attrs4 === void 0 ? void 0 : _mediaNode$attrs4.__fileMimeType)) {
735
+ // Disable image editing for external media, as we cannot save changes to external images per CORS policy
736
+ const isExternal = (mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs5 = mediaNode.attrs) === null || _mediaNode$attrs5 === void 0 ? void 0 : _mediaNode$attrs5.type) === 'external';
737
+ if (!isVideo(mediaNode === null || mediaNode === void 0 ? void 0 : (_mediaNode$attrs6 = mediaNode.attrs) === null || _mediaNode$attrs6 === void 0 ? void 0 : _mediaNode$attrs6.__fileMimeType) && !isExternal) {
734
738
  toolbarButtons.push({
735
739
  id: 'editor.media.edit',
736
740
  testId: 'image-edit-toolbar-button',
@@ -1,6 +1,8 @@
1
1
  import React, { useMemo } from 'react';
2
- import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
2
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
3
3
  import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
4
+ import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
5
+ import { IconImages } from '@atlaskit/editor-common/quick-insert';
4
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
7
  import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
6
8
  import { NodeSelection, PluginKey } from '@atlaskit/editor-prosemirror/state';
@@ -332,8 +334,35 @@ export var mediaPlugin = function mediaPlugin(_ref3) {
332
334
  });
333
335
  },
334
336
  pluginsOptions: {
335
- quickInsert: function quickInsert() {
336
- return [];
337
+ quickInsert: function quickInsert(_ref12) {
338
+ var formatMessage = _ref12.formatMessage;
339
+ return !(api !== null && api !== void 0 && api.mediaInsert) && fg('platform_editor_media_insert_check') ? [{
340
+ id: 'media',
341
+ title: formatMessage(messages.mediaFiles),
342
+ description: formatMessage(messages.mediaFilesDescription),
343
+ priority: 400,
344
+ keywords: ['attachment', 'gif', 'media', 'picture', 'image', 'video', 'file'],
345
+ icon: function icon() {
346
+ return /*#__PURE__*/React.createElement(IconImages, null);
347
+ },
348
+ isDisabledOffline: true,
349
+ action: function action(insert, state) {
350
+ var _api$analytics6;
351
+ var pluginState = stateKey.getState(state);
352
+ pluginState === null || pluginState === void 0 || pluginState.showMediaPicker();
353
+ var tr = insert('');
354
+ api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 || _api$analytics6.actions.attachAnalyticsEvent({
355
+ action: ACTION.OPENED,
356
+ actionSubject: ACTION_SUBJECT.PICKER,
357
+ actionSubjectId: ACTION_SUBJECT_ID.PICKER_CLOUD,
358
+ attributes: {
359
+ inputMethod: INPUT_METHOD.QUICK_INSERT
360
+ },
361
+ eventType: EVENT_TYPE.UI
362
+ })(tr);
363
+ return tr;
364
+ }
365
+ }] : [];
337
366
  },
338
367
  floatingToolbar: function floatingToolbar(state, intl, providerFactory) {
339
368
  var _api$editorViewMode;
@@ -38,8 +38,7 @@ var IconWrapperComponent = function IconWrapperComponent(props) {
38
38
  return jsx("div", {
39
39
  css: iconWrapperStyles
40
40
  }, jsx(DocumentFilledIcon, {
41
- label: intl.formatMessage(dropPlaceholderLabel),
42
- LEGACY_size: "medium"
41
+ label: intl.formatMessage(dropPlaceholderLabel)
43
42
  }));
44
43
  };
45
44
  var IntlIconWrapper = injectIntl(IconWrapperComponent);
@@ -556,10 +556,12 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
556
556
  }
557
557
  // Image Editing Support
558
558
  if (!!(pluginInjectionApi !== null && pluginInjectionApi !== void 0 && pluginInjectionApi.mediaEditing) && allowImageEditing && expValEquals('platform_editor_add_image_editing', 'isEnabled', true)) {
559
- var _mediaNode$attrs;
559
+ var _mediaNode$attrs, _mediaNode$attrs2;
560
560
  var _selectedMediaSingleNode = getSelectedMediaSingle(state);
561
561
  var mediaNode = _selectedMediaSingleNode === null || _selectedMediaSingleNode === void 0 ? void 0 : _selectedMediaSingleNode.node.content.firstChild;
562
- if (!isVideo(mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.__fileMimeType)) {
562
+ // Disable image editing for external media, as we cannot save changes to external images per CORS policy
563
+ var isExternal = (mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.type) === 'external';
564
+ if (!isVideo(mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs2 = mediaNode.attrs) === null || _mediaNode$attrs2 === void 0 ? void 0 : _mediaNode$attrs2.__fileMimeType) && !isExternal) {
563
565
  toolbarButtons.push({
564
566
  id: 'editor.media.edit',
565
567
  testId: 'image-edit-toolbar-button',
@@ -582,10 +584,10 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
582
584
  }
583
585
  // Preview Support
584
586
  if (allowImagePreview) {
585
- var _mediaNode$attrs2;
587
+ var _mediaNode$attrs3;
586
588
  var _selectedMediaSingleNode2 = getSelectedMediaSingle(state);
587
589
  var _mediaNode = _selectedMediaSingleNode2 === null || _selectedMediaSingleNode2 === void 0 ? void 0 : _selectedMediaSingleNode2.node.content.firstChild;
588
- if (!isVideo(_mediaNode === null || _mediaNode === void 0 || (_mediaNode$attrs2 = _mediaNode.attrs) === null || _mediaNode$attrs2 === void 0 ? void 0 : _mediaNode$attrs2.__fileMimeType)) {
590
+ if (!isVideo(_mediaNode === null || _mediaNode === void 0 || (_mediaNode$attrs3 = _mediaNode.attrs) === null || _mediaNode$attrs3 === void 0 ? void 0 : _mediaNode$attrs3.__fileMimeType)) {
589
591
  var _pluginInjectionApi$c2;
590
592
  toolbarButtons.push({
591
593
  id: 'editor.media.viewer',
@@ -719,10 +721,12 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
719
721
  toolbarButtons.push(commentButton(intl, state, pluginInjectionApi, onCommentButtonMount));
720
722
  }
721
723
  if (allowAdvancedToolBarOptions && allowImageEditing && expValEquals('platform_editor_add_image_editing', 'isEnabled', true)) {
722
- var _mediaNode3$attrs;
724
+ var _mediaNode3$attrs, _mediaNode3$attrs2;
723
725
  var _selectedMediaSingleNode4 = getSelectedMediaSingle(state);
724
726
  var _mediaNode3 = _selectedMediaSingleNode4 === null || _selectedMediaSingleNode4 === void 0 ? void 0 : _selectedMediaSingleNode4.node.content.firstChild;
725
- if (!isVideo(_mediaNode3 === null || _mediaNode3 === void 0 || (_mediaNode3$attrs = _mediaNode3.attrs) === null || _mediaNode3$attrs === void 0 ? void 0 : _mediaNode3$attrs.__fileMimeType)) {
727
+ // Disable image editing for external media, as we cannot save changes to external images per CORS policy
728
+ var _isExternal = (_mediaNode3 === null || _mediaNode3 === void 0 || (_mediaNode3$attrs = _mediaNode3.attrs) === null || _mediaNode3$attrs === void 0 ? void 0 : _mediaNode3$attrs.type) === 'external';
729
+ if (!isVideo(_mediaNode3 === null || _mediaNode3 === void 0 || (_mediaNode3$attrs2 = _mediaNode3.attrs) === null || _mediaNode3$attrs2 === void 0 ? void 0 : _mediaNode3$attrs2.__fileMimeType) && !_isExternal) {
726
730
  toolbarButtons.push({
727
731
  id: 'editor.media.edit',
728
732
  testId: 'image-edit-toolbar-button',
@@ -23,6 +23,7 @@ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
23
23
  import type { MediaPluginState } from './pm-plugins/types';
24
24
  import type { InsertMediaAsMediaSingle } from './pm-plugins/utils/media-single';
25
25
  import type { MediaOptions } from './types';
26
+ type MediaInsertPlugin = NextEditorPlugin<'mediaInsert', any>;
26
27
  export type MediaPluginDependencies = [
27
28
  OptionalPlugin<AnalyticsPlugin>,
28
29
  OptionalPlugin<ContextIdentifierPlugin>,
@@ -34,6 +35,7 @@ export type MediaPluginDependencies = [
34
35
  FloatingToolbarPlugin,
35
36
  EditorDisabledPlugin,
36
37
  FocusPlugin,
38
+ OptionalPlugin<MediaInsertPlugin>,
37
39
  OptionalPlugin<InteractionPlugin>,
38
40
  SelectionPlugin,
39
41
  OptionalPlugin<AnnotationPlugin>,
@@ -84,3 +86,4 @@ export type MediaNextEditorPluginType = NextEditorPlugin<'media', {
84
86
  pluginConfiguration: MediaOptions | undefined;
85
87
  sharedState: MediaPluginState | null;
86
88
  }>;
89
+ export {};
@@ -23,6 +23,7 @@ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
23
23
  import type { MediaPluginState } from './pm-plugins/types';
24
24
  import type { InsertMediaAsMediaSingle } from './pm-plugins/utils/media-single';
25
25
  import type { MediaOptions } from './types';
26
+ type MediaInsertPlugin = NextEditorPlugin<'mediaInsert', any>;
26
27
  export type MediaPluginDependencies = [
27
28
  OptionalPlugin<AnalyticsPlugin>,
28
29
  OptionalPlugin<ContextIdentifierPlugin>,
@@ -34,6 +35,7 @@ export type MediaPluginDependencies = [
34
35
  FloatingToolbarPlugin,
35
36
  EditorDisabledPlugin,
36
37
  FocusPlugin,
38
+ OptionalPlugin<MediaInsertPlugin>,
37
39
  OptionalPlugin<InteractionPlugin>,
38
40
  SelectionPlugin,
39
41
  OptionalPlugin<AnnotationPlugin>,
@@ -84,3 +86,4 @@ export type MediaNextEditorPluginType = NextEditorPlugin<'media', {
84
86
  pluginConfiguration: MediaOptions | undefined;
85
87
  sharedState: MediaPluginState | null;
86
88
  }>;
89
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-media",
3
- "version": "9.3.2",
3
+ "version": "9.4.0",
4
4
  "description": "Media plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -63,12 +63,12 @@
63
63
  "@atlaskit/media-ui": "^28.7.0",
64
64
  "@atlaskit/media-viewer": "^52.6.0",
65
65
  "@atlaskit/platform-feature-flags": "^1.1.0",
66
- "@atlaskit/primitives": "^17.0.0",
66
+ "@atlaskit/primitives": "^17.1.0",
67
67
  "@atlaskit/textfield": "^8.2.0",
68
68
  "@atlaskit/theme": "^21.0.0",
69
- "@atlaskit/tmp-editor-statsig": "^16.11.0",
69
+ "@atlaskit/tmp-editor-statsig": "^16.23.0",
70
70
  "@atlaskit/tokens": "^9.1.0",
71
- "@atlaskit/tooltip": "^20.12.0",
71
+ "@atlaskit/tooltip": "^20.14.0",
72
72
  "@babel/runtime": "^7.0.0",
73
73
  "@emotion/react": "^11.7.1",
74
74
  "bind-event-listener": "^3.0.0",
@@ -78,7 +78,7 @@
78
78
  "uuid": "^3.1.0"
79
79
  },
80
80
  "peerDependencies": {
81
- "@atlaskit/editor-common": "^111.7.0",
81
+ "@atlaskit/editor-common": "^111.8.0",
82
82
  "@atlaskit/media-core": "^37.0.0",
83
83
  "react": "^18.2.0",
84
84
  "react-dom": "^18.2.0",
@@ -159,6 +159,9 @@
159
159
  },
160
160
  "jira_kuro-jjj_disable_auto_focus_after_img_upload": {
161
161
  "type": "boolean"
162
+ },
163
+ "platform_editor_media_insert_check": {
164
+ "type": "boolean"
162
165
  }
163
166
  },
164
167
  "stricter": {