@atlaskit/editor-plugin-media 9.1.1 → 9.3.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 (29) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/mediaPlugin.js +7 -5
  3. package/dist/cjs/nodeviews/mediaSingleNext.js +46 -0
  4. package/dist/cjs/pm-plugins/alt-text/ui/AltTextEdit.js +1 -1
  5. package/dist/cjs/pm-plugins/commands.js +7 -1
  6. package/dist/cjs/pm-plugins/utils/media-single.js +103 -4
  7. package/dist/cjs/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +15 -5
  8. package/dist/cjs/ui/ResizableMediaSingle/index.js +6 -0
  9. package/dist/es2019/mediaPlugin.js +8 -6
  10. package/dist/es2019/nodeviews/mediaSingleNext.js +46 -0
  11. package/dist/es2019/pm-plugins/alt-text/ui/AltTextEdit.js +1 -1
  12. package/dist/es2019/pm-plugins/commands.js +3 -1
  13. package/dist/es2019/pm-plugins/utils/media-single.js +105 -1
  14. package/dist/es2019/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +15 -5
  15. package/dist/es2019/ui/ResizableMediaSingle/index.js +6 -0
  16. package/dist/esm/mediaPlugin.js +8 -6
  17. package/dist/esm/nodeviews/mediaSingleNext.js +46 -0
  18. package/dist/esm/pm-plugins/alt-text/ui/AltTextEdit.js +1 -1
  19. package/dist/esm/pm-plugins/commands.js +6 -0
  20. package/dist/esm/pm-plugins/utils/media-single.js +103 -4
  21. package/dist/esm/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +15 -5
  22. package/dist/esm/ui/ResizableMediaSingle/index.js +6 -0
  23. package/dist/types/mediaPluginType.d.ts +15 -0
  24. package/dist/types/pm-plugins/commands.d.ts +2 -0
  25. package/dist/types/pm-plugins/utils/media-single.d.ts +3 -1
  26. package/dist/types-ts4.5/mediaPluginType.d.ts +15 -0
  27. package/dist/types-ts4.5/pm-plugins/commands.d.ts +2 -0
  28. package/dist/types-ts4.5/pm-plugins/utils/media-single.d.ts +3 -1
  29. package/package.json +9 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/editor-plugin-media
2
2
 
3
+ ## 9.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`12da6b7aac3a9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/12da6b7aac3a9) -
8
+ add support of disable resize handles in resizable media single
9
+
10
+ ## 9.2.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [`ca937489954b8`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ca937489954b8) -
15
+ Introduce new insertMediaSingle on media plugin and deprecate old action version.
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies
20
+
3
21
  ## 9.1.1
4
22
 
5
23
  ### Patch Changes
@@ -105,6 +105,7 @@ var MediaViewerFunctionalComponent = function MediaViewerFunctionalComponent(_re
105
105
  });
106
106
  };
107
107
  var mediaPlugin = exports.mediaPlugin = function mediaPlugin(_ref3) {
108
+ var _api$analytics3;
108
109
  var _ref3$config = _ref3.config,
109
110
  options = _ref3$config === void 0 ? {} : _ref3$config,
110
111
  api = _ref3.api;
@@ -159,7 +160,8 @@ var mediaPlugin = exports.mediaPlugin = function mediaPlugin(_ref3) {
159
160
  commands: {
160
161
  showMediaViewer: _commands.showMediaViewer,
161
162
  hideMediaViewer: _commands.hideMediaViewer,
162
- trackMediaPaste: _commands.trackMediaPaste
163
+ trackMediaPaste: _commands.trackMediaPaste,
164
+ insertMediaSingle: (0, _commands.insertMediaAsMediaSingleCommand)(api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions, options.allowPixelResizing)
163
165
  },
164
166
  nodes: function nodes() {
165
167
  var _ref5 = options || {},
@@ -234,9 +236,9 @@ var mediaPlugin = exports.mediaPlugin = function mediaPlugin(_ref3) {
234
236
  }, {
235
237
  name: 'mediaKeymap',
236
238
  plugin: function plugin(_ref7) {
237
- var _api$analytics3, _api$selection;
239
+ var _api$analytics4, _api$selection;
238
240
  var getIntl = _ref7.getIntl;
239
- return (0, _keymap2.default)(options, api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions, api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : _api$selection.actions, api === null || api === void 0 ? void 0 : api.width, getIntl);
241
+ return (0, _keymap2.default)(options, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : _api$selection.actions, api === null || api === void 0 ? void 0 : api.width, getIntl);
240
242
  }
241
243
  }];
242
244
  if (options && options.allowMediaSingle) {
@@ -256,9 +258,9 @@ var mediaPlugin = exports.mediaPlugin = function mediaPlugin(_ref3) {
256
258
  pmPlugins.push({
257
259
  name: 'mediaAltTextKeymap',
258
260
  plugin: function plugin(_ref9) {
259
- var _api$analytics4;
261
+ var _api$analytics5;
260
262
  var schema = _ref9.schema;
261
- return (0, _keymap.default)(schema, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions);
263
+ return (0, _keymap.default)(schema, api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions);
262
264
  }
263
265
  });
264
266
  }
@@ -498,6 +498,52 @@ var MediaSingleNodeNext = exports.MediaSingleNodeNext = function MediaSingleNode
498
498
  onClick: clickPlaceholder,
499
499
  placeholderMessage: mediaOptions.allowImagePreview ? _media.captionMessages.placeholderWithDoubleClickPrompt : _media.captionMessages.placeholder
500
500
  })));
501
+ if ((0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
502
+ return mediaOptions.allowPixelResizing ? (0, _react2.jsx)(_ResizableMediaSingleNext.default, {
503
+ view: view,
504
+ getPos: getPos,
505
+ updateSize: updateSize,
506
+ gridSize: 12,
507
+ viewMediaClientConfig: viewMediaClientConfig,
508
+ allowBreakoutSnapPoints: mediaOptions && mediaOptions.allowBreakoutSnapPoints,
509
+ selected: isSelected,
510
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
511
+ pluginInjectionApi: pluginInjectionApi,
512
+ layout: layout,
513
+ width: width,
514
+ height: height,
515
+ containerWidth: containerWidth,
516
+ lineLength: contentWidth || FALLBACK_MOST_COMMON_WIDTH,
517
+ fullWidthMode: fullWidthMode,
518
+ hasFallbackContainer: false,
519
+ mediaSingleWidth: mediaSingleWidth,
520
+ editorAppearance: editorAppearance,
521
+ showLegacyNotification: widthType !== 'pixel',
522
+ forceHandlePositioning: mediaOptions === null || mediaOptions === void 0 ? void 0 : mediaOptions.forceHandlePositioning,
523
+ disableHandles: !canResize
524
+ }, MediaChildren) : (0, _react2.jsx)(_ResizableMediaSingle.default, {
525
+ view: view,
526
+ getPos: getPos,
527
+ updateSize: updateSize,
528
+ gridSize: 12,
529
+ viewMediaClientConfig: viewMediaClientConfig,
530
+ allowBreakoutSnapPoints: mediaOptions && mediaOptions.allowBreakoutSnapPoints,
531
+ selected: isSelected,
532
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
533
+ pluginInjectionApi: pluginInjectionApi,
534
+ layout: layout,
535
+ width: width,
536
+ height: height,
537
+ containerWidth: containerWidth,
538
+ fullWidthMode: fullWidthMode,
539
+ hasFallbackContainer: false,
540
+ mediaSingleWidth: mediaSingleWidth,
541
+ editorAppearance: editorAppearance,
542
+ lineLength: contentWidthForLegacyExperience || FALLBACK_MOST_COMMON_WIDTH,
543
+ pctWidth: mediaSingleWidthAttribute,
544
+ disableHandles: !canResize
545
+ }, MediaChildren);
546
+ }
501
547
  return (0, _react2.jsx)(_react.Fragment, null, canResize ? mediaOptions.allowPixelResizing ? (0, _react2.jsx)(_ResizableMediaSingleNext.default, {
502
548
  view: view,
503
549
  getPos: getPos,
@@ -22,7 +22,7 @@ var _toolbarFlagCheck = require("@atlaskit/editor-common/toolbar-flag-check");
22
22
  var _ui = require("@atlaskit/editor-common/ui");
23
23
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
24
24
  var _chevronLeft = _interopRequireDefault(require("@atlaskit/icon/core/chevron-left"));
25
- var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/core/migration/cross-circle"));
25
+ var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/core/cross-circle"));
26
26
  var _colors = require("@atlaskit/theme/colors");
27
27
  var _commands = require("../commands");
28
28
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
@@ -3,10 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.trackMediaPaste = exports.showMediaViewer = exports.hideMediaViewer = void 0;
6
+ exports.trackMediaPaste = exports.showMediaViewer = exports.insertMediaAsMediaSingleCommand = exports.hideMediaViewer = void 0;
7
7
  var _actions = require("../pm-plugins/actions");
8
8
  var _pluginKey = require("../pm-plugins/plugin-key");
9
9
  var _mediaCommon = require("../pm-plugins/utils/media-common");
10
+ var _mediaSingle = require("./utils/media-single");
10
11
  var showMediaViewer = exports.showMediaViewer = function showMediaViewer(media) {
11
12
  return function (_ref) {
12
13
  var tr = _ref.tr;
@@ -37,4 +38,9 @@ var trackMediaPaste = exports.trackMediaPaste = function trackMediaPaste(attrs)
37
38
  });
38
39
  return tr;
39
40
  };
41
+ };
42
+ var insertMediaAsMediaSingleCommand = exports.insertMediaAsMediaSingleCommand = function insertMediaAsMediaSingleCommand(editorAnalyticsAPI, allowPixelResizing) {
43
+ return function (mediaAttrs, inputMethod, insertMediaVia) {
44
+ return (0, _mediaSingle.createInsertMediaAsMediaSingleCommand)(mediaAttrs, inputMethod, editorAnalyticsAPI, insertMediaVia, allowPixelResizing);
45
+ };
40
46
  };
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.isVideo = exports.isMediaSingle = exports.insertMediaSingleNode = exports.insertMediaAsMediaSingle = exports.changeFromMediaInlineToMediaSingleNode = void 0;
7
+ exports.isVideo = exports.isMediaSingle = exports.insertMediaSingleNode = exports.insertMediaAsMediaSingle = exports.createInsertMediaAsMediaSingleCommand = exports.changeFromMediaInlineToMediaSingleNode = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _memoizeOne = _interopRequireDefault(require("memoize-one"));
10
10
  var _analytics = require("@atlaskit/editor-common/analytics");
@@ -14,6 +14,7 @@ var _selection = require("@atlaskit/editor-common/selection");
14
14
  var _utils = require("@atlaskit/editor-common/utils");
15
15
  var _model = require("@atlaskit/editor-prosemirror/model");
16
16
  var _utils2 = require("@atlaskit/editor-prosemirror/utils");
17
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
17
18
  var _mediaCommon = require("../utils/media-common");
18
19
  var _analytics2 = require("./analytics");
19
20
  var _isType = require("./is-type");
@@ -44,6 +45,21 @@ function insertNodesWithOptionalParagraph(_ref) {
44
45
  insertMediaVia = _ref.insertMediaVia;
45
46
  return function (state, dispatch) {
46
47
  var tr = state.tr;
48
+ if ((0, _platformFeatureFlags.fg)('platform_editor_introduce_insert_media_command')) {
49
+ var _updatedTr = insertNodesWithOptionalParagraphCommand({
50
+ nodes: nodes,
51
+ analyticsAttributes: analyticsAttributes,
52
+ editorAnalyticsAPI: editorAnalyticsAPI,
53
+ insertMediaVia: insertMediaVia
54
+ })({
55
+ tr: tr
56
+ });
57
+ if (_updatedTr && dispatch) {
58
+ dispatch === null || dispatch === void 0 || dispatch(_updatedTr);
59
+ return true;
60
+ }
61
+ return false;
62
+ }
47
63
  var inputMethod = analyticsAttributes.inputMethod,
48
64
  fileExtension = analyticsAttributes.fileExtension,
49
65
  newType = analyticsAttributes.newType,
@@ -76,6 +92,43 @@ function insertNodesWithOptionalParagraph(_ref) {
76
92
  return true;
77
93
  };
78
94
  }
95
+ function insertNodesWithOptionalParagraphCommand(_ref2) {
96
+ var nodes = _ref2.nodes,
97
+ _ref2$analyticsAttrib = _ref2.analyticsAttributes,
98
+ analyticsAttributes = _ref2$analyticsAttrib === void 0 ? {} : _ref2$analyticsAttrib,
99
+ editorAnalyticsAPI = _ref2.editorAnalyticsAPI,
100
+ insertMediaVia = _ref2.insertMediaVia;
101
+ return function (_ref3) {
102
+ var tr = _ref3.tr;
103
+ var inputMethod = analyticsAttributes.inputMethod,
104
+ fileExtension = analyticsAttributes.fileExtension,
105
+ newType = analyticsAttributes.newType,
106
+ previousType = analyticsAttributes.previousType;
107
+ var updatedTr = tr;
108
+ var openEnd = 0;
109
+ if (tr.selection.empty) {
110
+ var insertFrom = (0, _selection.selectionIsAtTheBeginningOfBlock)(tr.selection) ? tr.selection.$from.before() : tr.selection.from;
111
+
112
+ // the use of pmSafeInsert causes the node selection to media single node.
113
+ // It leads to discrepancy between the full-page and comment editor - not sure why :shrug:
114
+ // When multiple images are uploaded, the node selection is set to the previous node
115
+ // and got overridden by the next node inserted.
116
+ // It also causes the images position shifted when the images are uploaded.
117
+ // E.g the images are uploaded after a table, the images will be inserted inside the table.
118
+ // so we revert to use tr.insert instead. No extra paragraph is added.
119
+ updatedTr = updatedTr.insert(insertFrom, nodes);
120
+ } else {
121
+ updatedTr.replaceSelection(new _model.Slice(_model.Fragment.from(nodes), 0, openEnd));
122
+ }
123
+ if (inputMethod) {
124
+ editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent(getInsertMediaAnalytics(inputMethod, fileExtension, insertMediaVia))(updatedTr);
125
+ }
126
+ if (newType && previousType) {
127
+ editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent((0, _analytics2.getChangeMediaAnalytics)(previousType, newType, (0, _analytics2.findChangeFromLocation)(tr.selection)))(updatedTr);
128
+ }
129
+ return updatedTr;
130
+ };
131
+ }
79
132
  var isMediaSingle = exports.isMediaSingle = function isMediaSingle(schema, fileMimeType) {
80
133
  return !!schema.nodes.mediaSingle && (0, _isType.isImage)(fileMimeType);
81
134
  };
@@ -94,6 +147,16 @@ var insertMediaAsMediaSingle = exports.insertMediaAsMediaSingle = function inser
94
147
  if (node.type !== media || !(0, _isType.isImage)(node.attrs.__fileMimeType) && node.attrs.type !== 'external') {
95
148
  return false;
96
149
  }
150
+ if ((0, _platformFeatureFlags.fg)('platform_editor_introduce_insert_media_command')) {
151
+ var updatedTr = createInsertMediaAsMediaSingleCommand(node.attrs, inputMethod, editorAnalyticsAPI, insertMediaVia, allowPixelResizing)({
152
+ tr: state.tr
153
+ });
154
+ if (updatedTr && dispatch) {
155
+ dispatch === null || dispatch === void 0 || dispatch(updatedTr);
156
+ return true;
157
+ }
158
+ return false;
159
+ }
97
160
  var mediaSingleAttrs = allowPixelResizing ? {
98
161
  widthType: 'pixel',
99
162
  width: (0, _mediaSingle.getMediaSingleInitialWidth)((_node$attrs$width = node.attrs.width) !== null && _node$attrs$width !== void 0 ? _node$attrs$width : _mediaSingle.DEFAULT_IMAGE_WIDTH),
@@ -112,6 +175,42 @@ var insertMediaAsMediaSingle = exports.insertMediaAsMediaSingle = function inser
112
175
  insertMediaVia: insertMediaVia
113
176
  })(state, dispatch);
114
177
  };
178
+ var createInsertMediaAsMediaSingleCommand = exports.createInsertMediaAsMediaSingleCommand = function createInsertMediaAsMediaSingleCommand(mediaAttrs, inputMethod, editorAnalyticsAPI, insertMediaVia, allowPixelResizing) {
179
+ return function (_ref4) {
180
+ var _mediaAttrs$__fileMim, _mediaAttrs$width, _mediaAttrs$__fileMim2;
181
+ var tr = _ref4.tr;
182
+ var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
183
+ mediaSingle = _tr$doc$type$schema$n.mediaSingle,
184
+ media = _tr$doc$type$schema$n.media;
185
+ if (!mediaSingle || !media) {
186
+ return null;
187
+ }
188
+ if (mediaAttrs.type !== 'external' && !(0, _isType.isImage)((_mediaAttrs$__fileMim = mediaAttrs.__fileMimeType) !== null && _mediaAttrs$__fileMim !== void 0 ? _mediaAttrs$__fileMim : undefined)) {
189
+ return null;
190
+ }
191
+ var mediaSingleAttrs = allowPixelResizing ? {
192
+ widthType: 'pixel',
193
+ width: (0, _mediaSingle.getMediaSingleInitialWidth)((_mediaAttrs$width = mediaAttrs.width) !== null && _mediaAttrs$width !== void 0 ? _mediaAttrs$width : _mediaSingle.DEFAULT_IMAGE_WIDTH),
194
+ layout: 'center'
195
+ } : {};
196
+ var mediaNode = media.create(mediaAttrs);
197
+ var mediaSingleNode = mediaSingle.create(mediaSingleAttrs, mediaNode);
198
+ var nodes = [mediaSingleNode];
199
+ var analyticsAttributes = {
200
+ inputMethod: inputMethod,
201
+ // External images have no file extension
202
+ fileExtension: mediaAttrs.type !== 'external' && mediaAttrs.__fileMimeType ? (_mediaAttrs$__fileMim2 = mediaAttrs.__fileMimeType) !== null && _mediaAttrs$__fileMim2 !== void 0 ? _mediaAttrs$__fileMim2 : undefined : undefined
203
+ };
204
+ return insertNodesWithOptionalParagraphCommand({
205
+ nodes: nodes,
206
+ analyticsAttributes: analyticsAttributes,
207
+ editorAnalyticsAPI: editorAnalyticsAPI,
208
+ insertMediaVia: insertMediaVia
209
+ })({
210
+ tr: tr
211
+ });
212
+ };
213
+ };
115
214
  var getFileExtension = function getFileExtension(fileName) {
116
215
  if (fileName) {
117
216
  var extensionIdx = fileName.lastIndexOf('.');
@@ -225,12 +324,12 @@ var createMediaSingleNode = function createMediaSingleNode(schema, collection, m
225
324
  _mediaState$scaleFact = mediaState.scaleFactor,
226
325
  scaleFactor = _mediaState$scaleFact === void 0 ? 1 : _mediaState$scaleFact,
227
326
  fileName = mediaState.fileName;
228
- var _ref2 = dimensions || {
327
+ var _ref5 = dimensions || {
229
328
  height: undefined,
230
329
  width: undefined
231
330
  },
232
- width = _ref2.width,
233
- height = _ref2.height;
331
+ width = _ref5.width,
332
+ height = _ref5.height;
234
333
  var _schema$nodes = schema.nodes,
235
334
  media = _schema$nodes.media,
236
335
  mediaSingle = _schema$nodes.mediaSingle;
@@ -170,7 +170,8 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
170
170
  updateSize = props.updateSize,
171
171
  view = props.view,
172
172
  viewMediaClientConfig = props.viewMediaClientConfig,
173
- forceHandlePositioning = props.forceHandlePositioning;
173
+ forceHandlePositioning = props.forceHandlePositioning,
174
+ disableHandles = props.disableHandles;
174
175
  var initialWidth = (0, _react.useMemo)(function () {
175
176
  return mediaSingleWidth || _mediaSingle.DEFAULT_IMAGE_WIDTH;
176
177
  }, [mediaSingleWidth]);
@@ -247,6 +248,9 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
247
248
  if (isAdjacentMode || fullWidthMode) {
248
249
  return lineLength;
249
250
  }
251
+ if (!isResizing && (0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
252
+ return "var(--ak-editor-max-container-width)";
253
+ }
250
254
  return calcMaxWidth({
251
255
  containerWidth: containerWidth,
252
256
  editorAppearance: editorAppearance
@@ -262,7 +266,7 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
262
266
  var resizerNextClassName = (0, _react.useMemo)(function () {
263
267
  if ((0, _expValEquals.expValEquals)('platform_editor_resizer_styles_cleanup', 'isEnabled', true)) {
264
268
  var _classNameNext = (0, _classnames.default)(_styles.richMediaClassName, "image-".concat(layout), isResizing ? 'is-resizing' : 'not-resizing', className, _styles.resizerItemClassName, {
265
- 'display-handle': selected,
269
+ 'display-handle': (0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true) ? selected && !disableHandles : selected,
266
270
  'richMedia-selected': selected,
267
271
  'rich-media-wrapped': layout === 'wrap-left' || layout === 'wrap-right'
268
272
  });
@@ -274,7 +278,7 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
274
278
  'rich-media-wrapped': layout === 'wrap-left' || layout === 'wrap-right'
275
279
  });
276
280
  return (0, _classnames.default)(classNameNext, _styles.resizerStyles);
277
- }, [className, isResizing, layout, selected]);
281
+ }, [className, disableHandles, isResizing, layout, selected]);
278
282
  var isInsideInlineLike = (0, _react.useMemo)(function () {
279
283
  if (nodePosition === null) {
280
284
  return false;
@@ -284,6 +288,12 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
284
288
  return !!(0, _utils2.findParentNodeOfTypeClosestToPos)($pos, [listItem]);
285
289
  }, [nodePosition, view]);
286
290
  var enable = (0, _react.useMemo)(function () {
291
+ if (disableHandles && (0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
292
+ return {
293
+ left: false,
294
+ right: false
295
+ };
296
+ }
287
297
  return _ui.handleSides.reduce(function (acc, side) {
288
298
  var oppositeSide = side === 'left' ? 'right' : 'left';
289
299
  acc[side] = _utils.nonWrappedLayouts.concat("wrap-".concat(oppositeSide)).concat("align-".concat(_ui.imageAlignmentMap[oppositeSide])).indexOf(layout) > -1;
@@ -292,7 +302,7 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
292
302
  }
293
303
  return acc;
294
304
  }, {});
295
- }, [layout, isInsideInlineLike]);
305
+ }, [disableHandles, layout, isInsideInlineLike]);
296
306
  var defaultGuidelines = (0, _react.useMemo)(function () {
297
307
  if (isAdjacentMode) {
298
308
  return [];
@@ -520,7 +530,7 @@ var ResizableMediaSingleNextFunctional = exports.ResizableMediaSingleNextFunctio
520
530
  snap: snaps,
521
531
  resizeRatio: _utils.nonWrappedLayouts.includes(layout) ? 2 : 1,
522
532
  "data-testid": resizerNextTestId,
523
- isHandleVisible: selected,
533
+ isHandleVisible: (0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true) ? selected && !disableHandles : selected,
524
534
  handlePositioning: handlePositioning,
525
535
  handleHighlight: "full-height"
526
536
  }, children, showLegacyNotification && (0, _react2.jsx)(_ResizableMediaMigrationNotification.ResizableMediaMigrationNotification, null)));
@@ -366,6 +366,12 @@ var ResizableMediaSingle = exports.default = /*#__PURE__*/function (_React$Compo
366
366
  var enable = {};
367
367
  _ui.handleSides.forEach(function (side) {
368
368
  var oppositeSide = side === 'left' ? 'right' : 'left';
369
+ if ((0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
370
+ if (_this2.props.disableHandles) {
371
+ enable[side] = false;
372
+ return;
373
+ }
374
+ }
369
375
  enable[side] = ['full-width', 'wide', 'center'].concat("wrap-".concat(oppositeSide)).concat("align-".concat(_ui.imageAlignmentMap[oppositeSide])).indexOf(layout) > -1;
370
376
  if (side === 'left' && _this2.insideInlineLike) {
371
377
  enable[side] = false;
@@ -16,7 +16,7 @@ import { mediaInlineSpecWithFixedToDOM } from './nodeviews/toDOM-fixes/mediaInli
16
16
  import { mediaSingleSpecWithFixedToDOM } from './nodeviews/toDOM-fixes/mediaSingle';
17
17
  import { createPlugin as createMediaAltTextPlugin } from './pm-plugins/alt-text';
18
18
  import keymapMediaAltTextPlugin from './pm-plugins/alt-text/keymap';
19
- import { hideMediaViewer, showMediaViewer, trackMediaPaste } from './pm-plugins/commands';
19
+ import { hideMediaViewer, insertMediaAsMediaSingleCommand, showMediaViewer, trackMediaPaste } from './pm-plugins/commands';
20
20
  import keymapPlugin from './pm-plugins/keymap';
21
21
  import keymapMediaSinglePlugin from './pm-plugins/keymap-media';
22
22
  import linkingPlugin from './pm-plugins/linking';
@@ -103,6 +103,7 @@ export const mediaPlugin = ({
103
103
  config: options = {},
104
104
  api
105
105
  }) => {
106
+ var _api$analytics3;
106
107
  let previousMediaProvider;
107
108
  const mediaErrorLocalIds = new Set();
108
109
  return {
@@ -153,7 +154,8 @@ export const mediaPlugin = ({
153
154
  commands: {
154
155
  showMediaViewer,
155
156
  hideMediaViewer,
156
- trackMediaPaste
157
+ trackMediaPaste,
158
+ insertMediaSingle: insertMediaAsMediaSingleCommand(api === null || api === void 0 ? void 0 : (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions, options.allowPixelResizing)
157
159
  },
158
160
  nodes() {
159
161
  const {
@@ -229,8 +231,8 @@ export const mediaPlugin = ({
229
231
  plugin: ({
230
232
  getIntl
231
233
  }) => {
232
- var _api$analytics3, _api$selection;
233
- return keymapPlugin(options, api === null || api === void 0 ? void 0 : (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions, api === null || api === void 0 ? void 0 : (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : _api$selection.actions, api === null || api === void 0 ? void 0 : api.width, getIntl);
234
+ var _api$analytics4, _api$selection;
235
+ return keymapPlugin(options, api === null || api === void 0 ? void 0 : (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, api === null || api === void 0 ? void 0 : (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : _api$selection.actions, api === null || api === void 0 ? void 0 : api.width, getIntl);
234
236
  }
235
237
  }];
236
238
  if (options && options.allowMediaSingle) {
@@ -251,8 +253,8 @@ export const mediaPlugin = ({
251
253
  plugin: ({
252
254
  schema
253
255
  }) => {
254
- var _api$analytics4;
255
- return keymapMediaAltTextPlugin(schema, api === null || api === void 0 ? void 0 : (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions);
256
+ var _api$analytics5;
257
+ return keymapMediaAltTextPlugin(schema, api === null || api === void 0 ? void 0 : (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions);
256
258
  }
257
259
  });
258
260
  }
@@ -457,6 +457,52 @@ export const MediaSingleNodeNext = mediaSingleNodeNextProps => {
457
457
  onClick: clickPlaceholder,
458
458
  placeholderMessage: mediaOptions.allowImagePreview ? captionMessages.placeholderWithDoubleClickPrompt : captionMessages.placeholder
459
459
  })));
460
+ if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
461
+ return mediaOptions.allowPixelResizing ? jsx(ResizableMediaSingleNext, {
462
+ view: view,
463
+ getPos: getPos,
464
+ updateSize: updateSize,
465
+ gridSize: 12,
466
+ viewMediaClientConfig: viewMediaClientConfig,
467
+ allowBreakoutSnapPoints: mediaOptions && mediaOptions.allowBreakoutSnapPoints,
468
+ selected: isSelected,
469
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
470
+ pluginInjectionApi: pluginInjectionApi,
471
+ layout: layout,
472
+ width: width,
473
+ height: height,
474
+ containerWidth: containerWidth,
475
+ lineLength: contentWidth || FALLBACK_MOST_COMMON_WIDTH,
476
+ fullWidthMode: fullWidthMode,
477
+ hasFallbackContainer: false,
478
+ mediaSingleWidth: mediaSingleWidth,
479
+ editorAppearance: editorAppearance,
480
+ showLegacyNotification: widthType !== 'pixel',
481
+ forceHandlePositioning: mediaOptions === null || mediaOptions === void 0 ? void 0 : mediaOptions.forceHandlePositioning,
482
+ disableHandles: !canResize
483
+ }, MediaChildren) : jsx(ResizableMediaSingle, {
484
+ view: view,
485
+ getPos: getPos,
486
+ updateSize: updateSize,
487
+ gridSize: 12,
488
+ viewMediaClientConfig: viewMediaClientConfig,
489
+ allowBreakoutSnapPoints: mediaOptions && mediaOptions.allowBreakoutSnapPoints,
490
+ selected: isSelected,
491
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
492
+ pluginInjectionApi: pluginInjectionApi,
493
+ layout: layout,
494
+ width: width,
495
+ height: height,
496
+ containerWidth: containerWidth,
497
+ fullWidthMode: fullWidthMode,
498
+ hasFallbackContainer: false,
499
+ mediaSingleWidth: mediaSingleWidth,
500
+ editorAppearance: editorAppearance,
501
+ lineLength: contentWidthForLegacyExperience || FALLBACK_MOST_COMMON_WIDTH,
502
+ pctWidth: mediaSingleWidthAttribute,
503
+ disableHandles: !canResize
504
+ }, MediaChildren);
505
+ }
460
506
  return jsx(Fragment, null, canResize ? mediaOptions.allowPixelResizing ? jsx(ResizableMediaSingleNext, {
461
507
  view: view,
462
508
  getPos: getPos,
@@ -17,7 +17,7 @@ import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-che
17
17
  import { RECENT_SEARCH_WIDTH_IN_PX as CONTAINER_WIDTH_IN_PX, FloatingToolbarButton as Button, ErrorMessage, PanelTextInput } from '@atlaskit/editor-common/ui';
18
18
  import { relativeFontSizeToBase16 } from '@atlaskit/editor-shared-styles';
19
19
  import ChevronLeftLargeIcon from '@atlaskit/icon/core/chevron-left';
20
- import CrossCircleIcon from '@atlaskit/icon/core/migration/cross-circle';
20
+ import CrossCircleIcon from '@atlaskit/icon/core/cross-circle';
21
21
  import { N200, N30, N80, R400 } from '@atlaskit/theme/colors';
22
22
  import { closeMediaAltTextMenu, closeMediaAltTextMenuAndSave } from '../commands';
23
23
  export const MAX_ALT_TEXT_LENGTH = 510; // double tweet length
@@ -1,6 +1,7 @@
1
1
  import { ACTIONS } from '../pm-plugins/actions';
2
2
  import { stateKey } from '../pm-plugins/plugin-key';
3
3
  import { getIdentifier } from '../pm-plugins/utils/media-common';
4
+ import { createInsertMediaAsMediaSingleCommand } from './utils/media-single';
4
5
  export const showMediaViewer = media => ({
5
6
  tr
6
7
  }) => {
@@ -30,4 +31,5 @@ export const trackMediaPaste = attrs => ({
30
31
  identifier
31
32
  });
32
33
  return tr;
33
- };
34
+ };
35
+ export const insertMediaAsMediaSingleCommand = (editorAnalyticsAPI, allowPixelResizing) => (mediaAttrs, inputMethod, insertMediaVia) => createInsertMediaAsMediaSingleCommand(mediaAttrs, inputMethod, editorAnalyticsAPI, insertMediaVia, allowPixelResizing);