@atlaskit/editor-core 187.8.13 → 187.9.2

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 (89) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/plugins/emoji/commands/insert-emoji.js +31 -28
  3. package/dist/cjs/plugins/emoji/index.js +4 -3
  4. package/dist/cjs/plugins/emoji/pm-plugins/ascii-input-rules.js +23 -18
  5. package/dist/cjs/plugins/extension/pm-plugins/main.js +54 -9
  6. package/dist/cjs/plugins/floating-toolbar/index.js +1 -3
  7. package/dist/cjs/plugins/insert-block/ui/ToolbarInsertBlock/index.js +1 -1
  8. package/dist/cjs/plugins/media/nodeviews/mediaSingle.js +33 -23
  9. package/dist/cjs/plugins/media/toolbar/index.js +16 -2
  10. package/dist/cjs/plugins/media/toolbar/utils.js +7 -2
  11. package/dist/cjs/plugins/media/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +574 -0
  12. package/dist/cjs/plugins/media/ui/ResizableMediaSingle/guidelines.js +117 -0
  13. package/dist/cjs/plugins/media/ui/ResizableMediaSingle/resizable-media-single-messages.js +15 -0
  14. package/dist/cjs/plugins/selection/pm-plugins/events/keydown.js +61 -25
  15. package/dist/cjs/ui/Resizer/ResizeLabel/index.js +20 -0
  16. package/dist/cjs/ui/Resizer/ResizeLabel/styles.js +17 -0
  17. package/dist/cjs/version-wrapper.js +1 -1
  18. package/dist/cjs/version.json +1 -1
  19. package/dist/es2019/plugins/emoji/commands/insert-emoji.js +5 -5
  20. package/dist/es2019/plugins/emoji/index.js +6 -3
  21. package/dist/es2019/plugins/emoji/pm-plugins/ascii-input-rules.js +14 -11
  22. package/dist/es2019/plugins/extension/pm-plugins/main.js +50 -0
  23. package/dist/es2019/plugins/floating-toolbar/index.js +1 -1
  24. package/dist/es2019/plugins/insert-block/ui/ToolbarInsertBlock/index.js +1 -1
  25. package/dist/es2019/plugins/media/nodeviews/mediaSingle.js +34 -23
  26. package/dist/es2019/plugins/media/toolbar/index.js +19 -3
  27. package/dist/es2019/plugins/media/toolbar/utils.js +7 -1
  28. package/dist/es2019/plugins/media/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +493 -0
  29. package/dist/es2019/plugins/media/ui/ResizableMediaSingle/guidelines.js +108 -0
  30. package/dist/es2019/plugins/media/ui/ResizableMediaSingle/resizable-media-single-messages.js +8 -0
  31. package/dist/es2019/plugins/selection/pm-plugins/events/keydown.js +60 -24
  32. package/dist/es2019/ui/Resizer/ResizeLabel/index.js +12 -0
  33. package/dist/es2019/ui/Resizer/ResizeLabel/styles.js +25 -0
  34. package/dist/es2019/version-wrapper.js +1 -1
  35. package/dist/es2019/version.json +1 -1
  36. package/dist/esm/plugins/emoji/commands/insert-emoji.js +29 -27
  37. package/dist/esm/plugins/emoji/index.js +4 -3
  38. package/dist/esm/plugins/emoji/pm-plugins/ascii-input-rules.js +23 -18
  39. package/dist/esm/plugins/extension/pm-plugins/main.js +45 -0
  40. package/dist/esm/plugins/floating-toolbar/index.js +1 -3
  41. package/dist/esm/plugins/insert-block/ui/ToolbarInsertBlock/index.js +1 -1
  42. package/dist/esm/plugins/media/nodeviews/mediaSingle.js +33 -23
  43. package/dist/esm/plugins/media/toolbar/index.js +17 -3
  44. package/dist/esm/plugins/media/toolbar/utils.js +5 -1
  45. package/dist/esm/plugins/media/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +564 -0
  46. package/dist/esm/plugins/media/ui/ResizableMediaSingle/guidelines.js +108 -0
  47. package/dist/esm/plugins/media/ui/ResizableMediaSingle/resizable-media-single-messages.js +8 -0
  48. package/dist/esm/plugins/selection/pm-plugins/events/keydown.js +62 -25
  49. package/dist/esm/ui/Resizer/ResizeLabel/index.js +12 -0
  50. package/dist/esm/ui/Resizer/ResizeLabel/styles.js +7 -0
  51. package/dist/esm/version-wrapper.js +1 -1
  52. package/dist/esm/version.json +1 -1
  53. package/dist/types/labs/next/presets/universal.d.ts +1 -2
  54. package/dist/types/plugins/emoji/commands/insert-emoji.d.ts +2 -2
  55. package/dist/types/plugins/emoji/pm-plugins/ascii-input-rules.d.ts +3 -2
  56. package/dist/types/plugins/extension/pm-plugins/main.d.ts +1 -1
  57. package/dist/types/plugins/floating-toolbar/index.d.ts +3 -1
  58. package/dist/types/plugins/insert-block/ui/ToolbarInsertBlock/index.d.ts +1 -0
  59. package/dist/types/plugins/media/index.d.ts +2 -0
  60. package/dist/types/plugins/media/nodeviews/styles.d.ts +1 -1
  61. package/dist/types/plugins/media/pm-plugins/main.d.ts +1 -1
  62. package/dist/types/plugins/media/toolbar/utils.d.ts +1 -0
  63. package/dist/types/plugins/media/types.d.ts +1 -0
  64. package/dist/types/plugins/media/ui/ResizableMediaSingle/ResizableMediaSingleNext.d.ts +61 -0
  65. package/dist/types/plugins/media/ui/ResizableMediaSingle/guidelines.d.ts +4 -0
  66. package/dist/types/plugins/media/ui/ResizableMediaSingle/resizable-media-single-messages.d.ts +7 -0
  67. package/dist/types/plugins/media/ui/ResizableMediaSingle/types.d.ts +1 -0
  68. package/dist/types/ui/Resizer/ResizeLabel/index.d.ts +8 -0
  69. package/dist/types/ui/Resizer/ResizeLabel/styles.d.ts +3 -0
  70. package/dist/types-ts4.5/labs/next/presets/universal.d.ts +1 -2
  71. package/dist/types-ts4.5/plugins/emoji/commands/insert-emoji.d.ts +2 -2
  72. package/dist/types-ts4.5/plugins/emoji/pm-plugins/ascii-input-rules.d.ts +3 -2
  73. package/dist/types-ts4.5/plugins/extension/pm-plugins/main.d.ts +1 -1
  74. package/dist/types-ts4.5/plugins/floating-toolbar/index.d.ts +3 -1
  75. package/dist/types-ts4.5/plugins/insert-block/ui/ToolbarInsertBlock/index.d.ts +1 -0
  76. package/dist/types-ts4.5/plugins/media/index.d.ts +2 -0
  77. package/dist/types-ts4.5/plugins/media/nodeviews/styles.d.ts +1 -1
  78. package/dist/types-ts4.5/plugins/media/pm-plugins/main.d.ts +1 -1
  79. package/dist/types-ts4.5/plugins/media/toolbar/utils.d.ts +1 -0
  80. package/dist/types-ts4.5/plugins/media/types.d.ts +1 -0
  81. package/dist/types-ts4.5/plugins/media/ui/ResizableMediaSingle/ResizableMediaSingleNext.d.ts +61 -0
  82. package/dist/types-ts4.5/plugins/media/ui/ResizableMediaSingle/guidelines.d.ts +4 -0
  83. package/dist/types-ts4.5/plugins/media/ui/ResizableMediaSingle/resizable-media-single-messages.d.ts +7 -0
  84. package/dist/types-ts4.5/plugins/media/ui/ResizableMediaSingle/types.d.ts +1 -0
  85. package/dist/types-ts4.5/ui/Resizer/ResizeLabel/index.d.ts +8 -0
  86. package/dist/types-ts4.5/ui/Resizer/ResizeLabel/styles.d.ts +3 -0
  87. package/package.json +2 -2
  88. package/report.api.md +7 -4
  89. package/tmp/api-report-tmp.d.ts +5 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/editor-core
2
2
 
3
+ ## 187.9.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`6190030df97`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6190030df97) - Migrate `emoji` plugin to the new Analytics API
8
+ - [`78068814a36`](https://bitbucket.org/atlassian/atlassian-frontend/commits/78068814a36) - [ux] Fix user selection via arrow keys getting stuck inside nested body macro if it's not empty or cannot shift + arrow into the macro
9
+
10
+ ## 187.9.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [`936c30f8dc9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/936c30f8dc9) - support new image resize experience under feature flag
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies
19
+
3
20
  ## 187.8.13
4
21
 
5
22
  ### Patch Changes
@@ -4,40 +4,43 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.insertEmoji = insertEmoji;
7
+ exports.insertEmoji = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _utils = require("@atlaskit/editor-prosemirror/utils");
10
10
  var _model = require("@atlaskit/editor-prosemirror/model");
11
11
  var _state = require("@atlaskit/editor-prosemirror/state");
12
- var _analytics = require("../../analytics");
12
+ var _analytics = require("@atlaskit/editor-common/analytics");
13
13
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
14
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
- function insertEmoji(emojiId, inputMethod) {
16
- return function (state, dispatch) {
17
- var emoji = state.schema.nodes.emoji;
18
- if (emoji && emojiId) {
19
- var node = emoji.createChecked(_objectSpread(_objectSpread({}, emojiId), {}, {
20
- text: emojiId.fallback || emojiId.shortName
21
- }));
22
- var textNode = state.schema.text(' ');
23
- if (dispatch) {
24
- var fragment = _model.Fragment.fromArray([node, textNode]);
25
- var tr = (0, _utils.safeInsert)(fragment)(state.tr);
26
- if (inputMethod) {
27
- (0, _analytics.addAnalytics)(state, tr, {
28
- action: _analytics.ACTION.INSERTED,
29
- actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
30
- actionSubjectId: _analytics.ACTION_SUBJECT_ID.EMOJI,
31
- attributes: {
32
- inputMethod: inputMethod
33
- },
34
- eventType: _analytics.EVENT_TYPE.TRACK
35
- });
15
+ var insertEmoji = function insertEmoji(editorAnalyticsAPI) {
16
+ return function (emojiId, inputMethod) {
17
+ return function (state, dispatch) {
18
+ var emoji = state.schema.nodes.emoji;
19
+ if (emoji && emojiId) {
20
+ var node = emoji.createChecked(_objectSpread(_objectSpread({}, emojiId), {}, {
21
+ text: emojiId.fallback || emojiId.shortName
22
+ }));
23
+ var textNode = state.schema.text(' ');
24
+ if (dispatch) {
25
+ var fragment = _model.Fragment.fromArray([node, textNode]);
26
+ var tr = (0, _utils.safeInsert)(fragment)(state.tr);
27
+ if (inputMethod) {
28
+ editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
29
+ action: _analytics.ACTION.INSERTED,
30
+ actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
31
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.EMOJI,
32
+ attributes: {
33
+ inputMethod: inputMethod
34
+ },
35
+ eventType: _analytics.EVENT_TYPE.TRACK
36
+ })(tr);
37
+ }
38
+ dispatch(tr.setSelection(_state.Selection.near(tr.doc.resolve(state.selection.$from.pos + fragment.size))));
36
39
  }
37
- dispatch(tr.setSelection(_state.Selection.near(tr.doc.resolve(state.selection.$from.pos + fragment.size))));
40
+ return true;
38
41
  }
39
- return true;
40
- }
41
- return false;
42
+ return false;
43
+ };
42
44
  };
43
- }
45
+ };
46
+ exports.insertEmoji = insertEmoji;
@@ -188,10 +188,11 @@ var emojiPlugin = function emojiPlugin(options, api) {
188
188
  }, {
189
189
  name: 'emojiAsciiInputRule',
190
190
  plugin: function plugin(_ref6) {
191
+ var _api$dependencies$ana8;
191
192
  var schema = _ref6.schema,
192
193
  providerFactory = _ref6.providerFactory,
193
194
  featureFlags = _ref6.featureFlags;
194
- return (0, _asciiInputRules.inputRulePlugin)(schema, providerFactory, featureFlags);
195
+ return (0, _asciiInputRules.inputRulePlugin)(schema, providerFactory, featureFlags, api === null || api === void 0 ? void 0 : (_api$dependencies$ana8 = api.dependencies.analytics) === null || _api$dependencies$ana8 === void 0 ? void 0 : _api$dependencies$ana8.actions);
195
196
  }
196
197
  }];
197
198
  },
@@ -208,13 +209,13 @@ var emojiPlugin = function emojiPlugin(options, api) {
208
209
  return /*#__PURE__*/_react.default.createElement(_quickInsert.IconEmoji, null);
209
210
  },
210
211
  action: function action(insert, state) {
211
- var _api$dependencies$ana8;
212
+ var _api$dependencies$ana9;
212
213
  var tr = insert(undefined);
213
214
  (0, _openTypeaheadAtCursor.openTypeAheadAtCursor)({
214
215
  triggerHandler: typeAhead,
215
216
  inputMethod: _analytics.INPUT_METHOD.QUICK_INSERT
216
217
  })(tr);
217
- api === null || api === void 0 ? void 0 : (_api$dependencies$ana8 = api.dependencies.analytics) === null || _api$dependencies$ana8 === void 0 ? void 0 : _api$dependencies$ana8.actions.attachAnalyticsEvent({
218
+ api === null || api === void 0 ? void 0 : (_api$dependencies$ana9 = api.dependencies.analytics) === null || _api$dependencies$ana9 === void 0 ? void 0 : _api$dependencies$ana9.actions.attachAnalyticsEvent({
218
219
  action: _analytics.ACTION.INVOKED,
219
220
  actionSubject: _analytics.ACTION_SUBJECT.TYPEAHEAD,
220
221
  actionSubjectId: _analytics.ACTION_SUBJECT_ID.TYPEAHEAD_EMOJI,
@@ -16,14 +16,14 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
17
  var _state = require("@atlaskit/editor-prosemirror/state");
18
18
  var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules");
19
- var _analytics = require("../../analytics");
19
+ var _analytics = require("@atlaskit/editor-common/analytics");
20
20
  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); }; }
21
21
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
22
22
  var matcher;
23
- function inputRulePlugin(schema, providerFactory, featureFlags) {
23
+ function inputRulePlugin(schema, providerFactory, featureFlags, editorAnalyticsAPI) {
24
24
  if (schema.nodes.emoji && providerFactory) {
25
25
  initMatcher(providerFactory);
26
- var asciiEmojiRule = (0, _prosemirrorInputRules.createRule)(AsciiEmojiMatcher.REGEX, inputRuleHandler);
26
+ var asciiEmojiRule = (0, _prosemirrorInputRules.createRule)(AsciiEmojiMatcher.REGEX, inputRuleHandler(editorAnalyticsAPI));
27
27
  return (0, _prosemirrorInputRules.createPlugin)('emoji', [asciiEmojiRule]);
28
28
  }
29
29
  return;
@@ -41,17 +41,19 @@ function initMatcher(providerFactory) {
41
41
  };
42
42
  providerFactory.subscribe('emojiProvider', handleProvider);
43
43
  }
44
- function inputRuleHandler(state, matchParts, start, end) {
45
- if (!matcher) {
44
+ var inputRuleHandler = function inputRuleHandler(editorAnalyticsAPI) {
45
+ return function (state, matchParts, start, end) {
46
+ if (!matcher) {
47
+ return null;
48
+ }
49
+ var match = matcher.match(matchParts);
50
+ if (match) {
51
+ var transactionCreator = new AsciiEmojiTransactionCreator(state, match, start, end, editorAnalyticsAPI);
52
+ return transactionCreator.create();
53
+ }
46
54
  return null;
47
- }
48
- var match = matcher.match(matchParts);
49
- if (match) {
50
- var transactionCreator = new AsciiEmojiTransactionCreator(state, match, start, end);
51
- return transactionCreator.create();
52
- }
53
- return null;
54
- }
55
+ };
56
+ };
55
57
  var REGEX_LEADING_CAPTURE_INDEX = 1;
56
58
  var REGEX_EMOJI_LEADING_PARENTHESES = 2;
57
59
  var REGEX_EMOJI_ASCII_CAPTURE_INDEX = 3;
@@ -150,18 +152,20 @@ var RecordingAsciiEmojiMatcher = /*#__PURE__*/function (_AsciiEmojiMatcher) {
150
152
  return RecordingAsciiEmojiMatcher;
151
153
  }(AsciiEmojiMatcher);
152
154
  var AsciiEmojiTransactionCreator = /*#__PURE__*/function () {
153
- function AsciiEmojiTransactionCreator(state, match, start, end) {
155
+ function AsciiEmojiTransactionCreator(state, match, start, end, editorAnalyticsAPI) {
154
156
  (0, _classCallCheck2.default)(this, AsciiEmojiTransactionCreator);
155
157
  this.state = state;
156
158
  this.match = match;
157
159
  this.start = start;
158
160
  this.end = end;
161
+ this.editorAnalyticsAPI = editorAnalyticsAPI;
159
162
  }
160
163
  (0, _createClass2.default)(AsciiEmojiTransactionCreator, [{
161
164
  key: "create",
162
165
  value: function create() {
166
+ var _this$editorAnalytics;
163
167
  var tr = this.state.tr.replaceWith(this.from, this.to, this.createNodes());
164
- return (0, _analytics.addAnalytics)(this.state, tr, {
168
+ (_this$editorAnalytics = this.editorAnalyticsAPI) === null || _this$editorAnalytics === void 0 ? void 0 : _this$editorAnalytics.attachAnalyticsEvent({
165
169
  action: _analytics.ACTION.INSERTED,
166
170
  actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
167
171
  actionSubjectId: _analytics.ACTION_SUBJECT_ID.EMOJI,
@@ -169,7 +173,8 @@ var AsciiEmojiTransactionCreator = /*#__PURE__*/function () {
169
173
  inputMethod: _analytics.INPUT_METHOD.ASCII
170
174
  },
171
175
  eventType: _analytics.EVENT_TYPE.TRACK
172
- });
176
+ })(tr);
177
+ return tr;
173
178
  }
174
179
  }, {
175
180
  key: "from",
@@ -221,8 +226,8 @@ var AsciiEmojiTransactionCreator = /*#__PURE__*/function () {
221
226
  }();
222
227
  var stateKey = new _state.PluginKey('asciiEmojiPlugin');
223
228
  exports.stateKey = stateKey;
224
- var plugins = function plugins(schema, providerFactory, featureFlags) {
225
- return [inputRulePlugin(schema, providerFactory, featureFlags)].filter(function (plugin) {
229
+ var plugins = function plugins(schema, providerFactory, featureFlags, editorAnalyticsAPI) {
230
+ return [inputRulePlugin(schema, providerFactory, featureFlags, editorAnalyticsAPI)].filter(function (plugin) {
226
231
  return !!plugin;
227
232
  });
228
233
  };
@@ -27,14 +27,17 @@ Object.defineProperty(exports, "pluginKey", {
27
27
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
28
28
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
29
29
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
30
+ var _state = require("@atlaskit/editor-prosemirror/state");
31
+ var _utils = require("@atlaskit/editor-prosemirror/utils");
30
32
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
31
- var _utils = require("../../selection/utils");
33
+ var _selection = require("@atlaskit/editor-common/selection");
34
+ var _utils2 = require("../../selection/utils");
32
35
  var _extension = _interopRequireDefault(require("../nodeviews/extension"));
33
36
  var _commands = require("../commands");
34
- var _utils2 = require("../utils");
37
+ var _utils3 = require("../utils");
35
38
  var _pluginFactory = require("../plugin-factory");
36
39
  var _pluginKey = require("../plugin-key");
37
- var _utils3 = require("./utils");
40
+ var _utils4 = require("./utils");
38
41
  var shouldShowEditButton = function shouldShowEditButton(extensionHandler, extensionProvider) {
39
42
  var usesLegacyMacroBrowser = !extensionHandler && !extensionProvider || typeof extensionHandler === 'function';
40
43
  var usesModernUpdateMethod = (0, _typeof2.default)(extensionHandler) === 'object' && typeof extensionHandler.update === 'function';
@@ -60,7 +63,7 @@ var getUpdateExtensionPromise = /*#__PURE__*/function () {
60
63
  break;
61
64
  }
62
65
  _context.next = 7;
63
- return (0, _utils3.updateEditButton)(view, extensionProvider);
66
+ return (0, _utils4.updateEditButton)(view, extensionProvider);
64
67
  case 7:
65
68
  updateMethod = _context.sent;
66
69
  if (!updateMethod) {
@@ -100,7 +103,7 @@ var createExtensionProviderHandler = function createExtensionProviderHandler(vie
100
103
  extensionProvider: extensionProvider
101
104
  })(view.state, view.dispatch);
102
105
  _context2.next = 8;
103
- return (0, _utils3.updateEditButton)(view, extensionProvider);
106
+ return (0, _utils4.updateEditButton)(view, extensionProvider);
104
107
  case 8:
105
108
  _context2.next = 13;
106
109
  break;
@@ -177,7 +180,7 @@ var handleUpdate = function handleUpdate(_ref4) {
177
180
  showEditButton = _getPluginState.showEditButton;
178
181
 
179
182
  // This fetches the selected extension node, either by keyboard selection or click for all types of extensions
180
- var selectedExtension = (0, _utils2.getSelectedExtension)(state, true);
183
+ var selectedExtension = (0, _utils3.getSelectedExtension)(state, true);
181
184
  if (!selectedExtension) {
182
185
  if (showContextPanel) {
183
186
  (0, _commands.clearEditingContext)(applyChange)(state, dispatch);
@@ -185,11 +188,11 @@ var handleUpdate = function handleUpdate(_ref4) {
185
188
  return;
186
189
  }
187
190
  var node = selectedExtension.node;
188
- var newElement = (0, _utils2.getSelectedDomElement)(state.schema, domAtPos, selectedExtension);
191
+ var newElement = (0, _utils3.getSelectedDomElement)(state.schema, domAtPos, selectedExtension);
189
192
 
190
193
  // In some cases, showEditButton can be stale and the edit button doesn't show - @see ED-15285
191
194
  // To be safe, we update the showEditButton state here
192
- var shouldUpdateEditButton = !showEditButton && extensionProvider && element === newElement && !(0, _utils2.getSelectedExtension)(prevState, true);
195
+ var shouldUpdateEditButton = !showEditButton && extensionProvider && element === newElement && !(0, _utils3.getSelectedExtension)(prevState, true);
193
196
  var isNewNodeSelected = node.attrs.localId ? localId !== node.attrs.localId :
194
197
  // This is the current assumption and it's wrong but we are keeping it
195
198
  // as fallback in case we need to turn off `allowLocalIdGeneration`
@@ -263,6 +266,48 @@ var createPlugin = function createPlugin(dispatch, providerFactory, extensionHan
263
266
  },
264
267
  key: _pluginKey.pluginKey,
265
268
  props: {
269
+ handleDOMEvents: {
270
+ /**
271
+ * ED-18072 - Cannot shift + arrow past bodied extension if it is not empty.
272
+ * This code is to handle the case where the selection starts inside or on the node and the user is trying to shift + arrow.
273
+ * For other part of the solution see code in: packages/editor/editor-core/src/plugins/selection/pm-plugins/events/keydown.ts
274
+ */
275
+ keydown: function keydown(view, event) {
276
+ if (event instanceof KeyboardEvent && event.shiftKey && ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {
277
+ var _view$state = view.state,
278
+ schema = _view$state.schema,
279
+ selection = _view$state.selection,
280
+ $head = _view$state.selection.$head,
281
+ doc = _view$state.doc,
282
+ tr = _view$state.tr;
283
+ var bodiedExtension = schema.nodes.bodiedExtension;
284
+ if (selection instanceof _state.TextSelection || selection instanceof _state.NodeSelection) {
285
+ var maybeBodiedExtension = selection instanceof _state.TextSelection ? (0, _utils.findParentNodeOfTypeClosestToPos)($head, bodiedExtension) : (0, _utils.findSelectedNodeOfType)(bodiedExtension)(selection);
286
+ if (maybeBodiedExtension) {
287
+ var end = maybeBodiedExtension.pos + maybeBodiedExtension.node.nodeSize;
288
+ if (event.key === 'ArrowUp' || event.key === 'ArrowLeft' && (0, _selection.isSelectionAtStartOfNode)($head, maybeBodiedExtension)) {
289
+ var anchor = end + 1;
290
+
291
+ // an offset is used here so that left arrow selects the first character before the node (consistent with arrow right)
292
+ var headOffset = event.key === 'ArrowLeft' ? -1 : 0;
293
+ var head = maybeBodiedExtension.pos + headOffset;
294
+ var newSelection = _state.TextSelection.create(doc, Math.max(anchor, selection.anchor), head);
295
+ view.dispatch(tr.setSelection(newSelection));
296
+ return true;
297
+ }
298
+ if (event.key === 'ArrowDown' || event.key === 'ArrowRight' && (0, _selection.isSelectionAtEndOfNode)($head, maybeBodiedExtension)) {
299
+ var _anchor = maybeBodiedExtension.pos - 1;
300
+ var _head = end + 1;
301
+ var _newSelection = _state.TextSelection.create(doc, Math.min(_anchor, selection.anchor), _head);
302
+ view.dispatch(tr.setSelection(_newSelection));
303
+ return true;
304
+ }
305
+ }
306
+ }
307
+ }
308
+ return false;
309
+ }
310
+ },
266
311
  nodeViews: {
267
312
  // WARNING: referentiality-plugin also creates these nodeviews
268
313
  extension: (0, _extension.default)(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi),
@@ -271,7 +316,7 @@ var createPlugin = function createPlugin(dispatch, providerFactory, extensionHan
271
316
  // WARNING: referentiality-plugin also creates these nodeviews
272
317
  inlineExtension: (0, _extension.default)(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi)
273
318
  },
274
- handleClickOn: (0, _utils.createSelectionClickHandler)(['extension', 'bodiedExtension'], function (target) {
319
+ handleClickOn: (0, _utils2.createSelectionClickHandler)(['extension', 'bodiedExtension'], function (target) {
275
320
  return !target.closest('.extension-content');
276
321
  }, {
277
322
  useLongPressSelection: useLongPressSelection
@@ -334,9 +334,7 @@ function floatingToolbarPluginFactory(options) {
334
334
  return relevantConfig;
335
335
  };
336
336
  var apply = function apply(tr, pluginState) {
337
- var newPluginState = {
338
- getConfigWithNodeInfo: getConfigWithNodeInfo
339
- };
337
+ var newPluginState = _objectSpread({}, pluginState);
340
338
  dispatch(pluginKey, newPluginState);
341
339
  return newPluginState;
342
340
  };
@@ -288,7 +288,7 @@ var ToolbarInsertBlock = /*#__PURE__*/function (_React$PureComponent) {
288
288
  });
289
289
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleSelectedEmoji", function (emojiId) {
290
290
  _this.props.editorView.focus();
291
- (0, _insertEmoji.insertEmoji)(emojiId, _analytics.INPUT_METHOD.PICKER)(_this.props.editorView.state, _this.props.editorView.dispatch);
291
+ (0, _insertEmoji.insertEmoji)(_this.editorAnalyticsAPI)(emojiId, _analytics.INPUT_METHOD.PICKER)(_this.props.editorView.state, _this.props.editorView.dispatch);
292
292
  _this.toggleEmojiPicker();
293
293
  return true;
294
294
  });
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = exports.ReactMediaSingleNode = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
10
  var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
11
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -24,6 +23,7 @@ var _ui = require("@atlaskit/editor-common/ui");
24
23
  var _utils = require("@atlaskit/editor-common/utils");
25
24
  var _nodes = require("../../../utils/nodes");
26
25
  var _utils2 = require("../../../utils");
26
+ var _ResizableMediaSingleNext = _interopRequireDefault(require("../ui/ResizableMediaSingle/ResizableMediaSingleNext"));
27
27
  var _ResizableMediaSingle = _interopRequireDefault(require("../ui/ResizableMediaSingle"));
28
28
  var _main = require("../pm-plugins/main");
29
29
  var _mediaNodeUpdater = require("./mediaNodeUpdater");
@@ -38,6 +38,8 @@ var _CaptionPlaceholder = _interopRequireDefault(require("../ui/CaptionPlacehold
38
38
  var _state = require("@atlaskit/editor-prosemirror/state");
39
39
  var _captions = require("../commands/captions");
40
40
  var _hooks = require("@atlaskit/editor-common/hooks");
41
+ var _mediaSingle = require("@atlaskit/editor-common/media-single");
42
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
41
43
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
42
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
43
45
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -208,7 +210,8 @@ var MediaSingleNode = /*#__PURE__*/function (_Component) {
208
210
  }
209
211
  var tr = state.tr.setNodeMarkup(pos, undefined, _objectSpread(_objectSpread({}, _this.props.node.attrs), {}, {
210
212
  layout: layout,
211
- width: width
213
+ width: width,
214
+ widthType: 'pixel'
212
215
  }));
213
216
  tr.setMeta('scrollIntoView', false);
214
217
  /**
@@ -320,12 +323,19 @@ var MediaSingleNode = /*#__PURE__*/function (_Component) {
320
323
  mediaOptions = _this$props2.mediaOptions,
321
324
  fullWidthMode = _this$props2.fullWidthMode,
322
325
  state = _this$props2.view.state,
323
- view = _this$props2.view;
326
+ view = _this$props2.view,
327
+ pluginInjectionApi = _this$props2.pluginInjectionApi,
328
+ containerWidth = _this$props2.width,
329
+ lineLength = _this$props2.lineLength,
330
+ dispatchAnalyticsEvent = _this$props2.dispatchAnalyticsEvent;
324
331
  var _ref4 = node.attrs,
325
332
  layout = _ref4.layout,
326
- mediaSingleWidth = _ref4.width;
333
+ widthType = _ref4.widthType,
334
+ mediaSingleWidthAttribute = _ref4.width;
327
335
  var childNode = node.firstChild;
328
336
  var attrs = childNode.attrs;
337
+
338
+ // original width and height of child media node (scaled)
329
339
  var width = attrs.width,
330
340
  height = attrs.height;
331
341
  if (attrs.type === 'external') {
@@ -352,16 +362,29 @@ var MediaSingleNode = /*#__PURE__*/function (_Component) {
352
362
  width = _ui.DEFAULT_IMAGE_WIDTH;
353
363
  height = _ui.DEFAULT_IMAGE_HEIGHT;
354
364
  }
365
+ var isSelected = selected();
355
366
  var mediaSingleProps = {
356
367
  layout: layout,
357
368
  width: width,
358
369
  height: height,
359
- containerWidth: this.props.width,
360
- lineLength: this.props.lineLength,
361
- pctWidth: mediaSingleWidth,
370
+ containerWidth: containerWidth,
371
+ lineLength: this.getLineLength(view, getPos()) || lineLength,
372
+ pctWidth: mediaSingleWidthAttribute,
362
373
  fullWidthMode: fullWidthMode,
363
- hasFallbackContainer: false
374
+ hasFallbackContainer: false,
375
+ mediaSingleWidth: mediaSingleWidthAttribute && (0, _mediaSingle.getMediaSinglePixelWidth)(mediaSingleWidthAttribute, lineLength, widthType)
364
376
  };
377
+ var ResizableMediaSingleProps = _objectSpread({
378
+ view: view,
379
+ getPos: getPos,
380
+ updateSize: this.updateSize,
381
+ gridSize: 12,
382
+ viewMediaClientConfig: this.state.viewMediaClientConfig,
383
+ allowBreakoutSnapPoints: mediaOptions && mediaOptions.allowBreakoutSnapPoints,
384
+ selected: isSelected,
385
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
386
+ pluginInjectionApi: pluginInjectionApi
387
+ }, mediaSingleProps);
365
388
  var canResize = !!this.props.mediaOptions.allowResizing;
366
389
  if (!this.props.mediaOptions.allowResizingInTables) {
367
390
  // If resizing not allowed in tables, check parents for tables
@@ -373,12 +396,10 @@ var MediaSingleNode = /*#__PURE__*/function (_Component) {
373
396
  canResize = canResize && !disabledNode;
374
397
  }
375
398
  }
376
- var lineLength = this.getLineLength(view, getPos()) || this.props.lineLength;
377
- var isSelected = selected();
378
399
  var shouldShowPlaceholder = (0, _mediaCommon2.getMediaFeatureFlag)('captions', mediaOptions.featureFlags) && node.childCount !== 2 && isSelected && state.selection instanceof _state.NodeSelection;
379
400
  var MediaChildren = (0, _react.jsx)("figure", {
380
401
  ref: this.mediaSingleWrapperRef,
381
- css: _styles.figureWrapper,
402
+ css: [_styles.figureWrapper],
382
403
  className: _styles.MediaSingleNodeSelector,
383
404
  onClick: this.onMediaSingleClicked
384
405
  }, (0, _react.jsx)("div", {
@@ -387,18 +408,7 @@ var MediaSingleNode = /*#__PURE__*/function (_Component) {
387
408
  ref: this.captionPlaceHolderRef,
388
409
  onClick: this.clickPlaceholder
389
410
  }));
390
- return canResize ? (0, _react.jsx)(_ResizableMediaSingle.default, (0, _extends2.default)({}, mediaSingleProps, {
391
- lineLength: lineLength,
392
- view: this.props.view,
393
- getPos: getPos,
394
- updateSize: this.updateSize,
395
- gridSize: 12,
396
- viewMediaClientConfig: this.state.viewMediaClientConfig,
397
- allowBreakoutSnapPoints: mediaOptions && mediaOptions.allowBreakoutSnapPoints,
398
- selected: isSelected,
399
- dispatchAnalyticsEvent: this.props.dispatchAnalyticsEvent,
400
- pluginInjectionApi: this.props.pluginInjectionApi
401
- }), MediaChildren) : (0, _react.jsx)(_ui.MediaSingle, mediaSingleProps, MediaChildren);
411
+ return canResize ? (0, _platformFeatureFlags.getBooleanFF)('platform.editor.media.extended-resize-experience') ? (0, _react.jsx)(_ResizableMediaSingleNext.default, ResizableMediaSingleProps, MediaChildren) : (0, _react.jsx)(_ResizableMediaSingle.default, ResizableMediaSingleProps, MediaChildren) : (0, _react.jsx)(_ui.MediaSingle, mediaSingleProps, MediaChildren);
402
412
  }
403
413
  }]);
404
414
  return MediaSingleNode;
@@ -25,6 +25,7 @@ var _linkingToolbarAppearance = require("./linking-toolbar-appearance");
25
25
  var _analytics = require("@atlaskit/editor-common/analytics");
26
26
  var _mediaUi = require("@atlaskit/media-ui");
27
27
  var _messages2 = require("@atlaskit/editor-common/messages");
28
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
28
29
  var _filePreviewItem = require("./filePreviewItem");
29
30
  var _utils2 = require("./utils");
30
31
  var _commands = require("./commands");
@@ -232,7 +233,20 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
232
233
  }
233
234
  if (allowAdvancedToolBarOptions) {
234
235
  var _pluginInjectionApi$d;
235
- var layoutButtons = (0, _card.buildLayoutButtons)(state, intl, state.schema.nodes.mediaSingle, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : pluginInjectionApi.dependencies.width, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d = pluginInjectionApi.dependencies.analytics) === null || _pluginInjectionApi$d === void 0 ? void 0 : _pluginInjectionApi$d.actions, allowResizing, allowResizingInTables);
236
+ var widthPlugin = pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : pluginInjectionApi.dependencies.width;
237
+ var isChangingLayoutDisabled = false;
238
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.media.extended-resize-experience')) {
239
+ var _widthPlugin$sharedSt;
240
+ var contentWidth = widthPlugin === null || widthPlugin === void 0 ? void 0 : (_widthPlugin$sharedSt = widthPlugin.sharedState.currentState()) === null || _widthPlugin$sharedSt === void 0 ? void 0 : _widthPlugin$sharedSt.lineLength;
241
+ var selectedNode = (0, _utils2.getSelectedMediaSingle)(state);
242
+ if (selectedNode && contentWidth) {
243
+ var width = selectedNode.node.attrs.width;
244
+ if (width >= contentWidth) {
245
+ isChangingLayoutDisabled = true;
246
+ }
247
+ }
248
+ }
249
+ var layoutButtons = (0, _card.buildLayoutButtons)(state, intl, state.schema.nodes.mediaSingle, widthPlugin, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d = pluginInjectionApi.dependencies.analytics) === null || _pluginInjectionApi$d === void 0 ? void 0 : _pluginInjectionApi$d.actions, allowResizing, allowResizingInTables, true, true, isChangingLayoutDisabled);
236
250
  toolbarButtons = [].concat((0, _toConsumableArray2.default)(toolbarButtons), (0, _toConsumableArray2.default)(layoutButtons));
237
251
  if (layoutButtons.length) {
238
252
  toolbarButtons.push({
@@ -334,7 +348,7 @@ var floatingToolbar = function floatingToolbar(state, intl) {
334
348
  var mediaLinkingState = (0, _linking2.getMediaLinkingState)(state);
335
349
  var _ref2 = (_pluginInjectionApi$d4 = pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : pluginInjectionApi.dependencies.decorations.actions) !== null && _pluginInjectionApi$d4 !== void 0 ? _pluginInjectionApi$d4 : {},
336
350
  hoverDecoration = _ref2.hoverDecoration;
337
- if (!mediaPluginState) {
351
+ if (!mediaPluginState || mediaPluginState.isResizing) {
338
352
  return;
339
353
  }
340
354
  var nodeType = allowMediaInline ? [mediaInline, mediaSingle, media] : [mediaSingle];
@@ -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.removeMediaGroupNode = exports.getSelectedMediaContainerNodeAttrs = exports.downloadMedia = void 0;
7
+ exports.removeMediaGroupNode = exports.getSelectedMediaSingle = exports.getSelectedMediaContainerNodeAttrs = exports.downloadMedia = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _mediaClient = require("@atlaskit/media-client");
@@ -68,4 +68,9 @@ var removeMediaGroupNode = function removeMediaGroupNode(state) {
68
68
  }
69
69
  return tr;
70
70
  };
71
- exports.removeMediaGroupNode = removeMediaGroupNode;
71
+ exports.removeMediaGroupNode = removeMediaGroupNode;
72
+ var getSelectedMediaSingle = function getSelectedMediaSingle(state) {
73
+ var mediaSingle = state.schema.nodes.mediaSingle;
74
+ return (0, _utils.findSelectedNodeOfType)(mediaSingle)(state.selection) || (0, _utils.findParentNodeOfType)(mediaSingle)(state.selection);
75
+ };
76
+ exports.getSelectedMediaSingle = getSelectedMediaSingle;