@atlaskit/editor-plugin-block-controls 3.1.3 → 3.1.5

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,22 @@
1
1
  # @atlaskit/editor-plugin-block-controls
2
2
 
3
+ ## 3.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#119444](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/119444)
8
+ [`853538e68d556`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/853538e68d556) -
9
+ Fix cancelled drag causing layout duplication and locked handle
10
+ - Updated dependencies
11
+
12
+ ## 3.1.4
13
+
14
+ ### Patch Changes
15
+
16
+ - [#120000](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/120000)
17
+ [`a021079ba8f13`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a021079ba8f13) -
18
+ [ux] Remove copy/delete button from block menu
19
+
3
20
  ## 3.1.3
4
21
 
5
22
  ### Patch Changes
@@ -142,7 +142,7 @@ var blockControlsPlugin = exports.blockControlsPlugin = function blockControlsPl
142
142
  }
143
143
  },
144
144
  getSharedState: function getSharedState(editorState) {
145
- var _key$getState$isMenuO, _key$getState, _key$getState$menuTri, _key$getState2, _key$getState$activeN, _key$getState3, _key$getState$isDragg, _key$getState4, _key$getState$isPMDra, _key$getState5, _key$getState$multiSe, _key$getState6, _key$getState$isShift, _key$getState7;
145
+ var _key$getState$isMenuO, _key$getState, _key$getState$menuTri, _key$getState2, _key$getState$activeN, _key$getState3, _key$getState$isDragg, _key$getState4, _key$getState$isPMDra, _key$getState5, _key$getState$multiSe, _key$getState6, _key$getState$isShift, _key$getState7, _key$getState$lastDra, _key$getState8;
146
146
  if (!editorState) {
147
147
  return undefined;
148
148
  }
@@ -153,7 +153,8 @@ var blockControlsPlugin = exports.blockControlsPlugin = function blockControlsPl
153
153
  isDragging: (_key$getState$isDragg = (_key$getState4 = _main.key.getState(editorState)) === null || _key$getState4 === void 0 ? void 0 : _key$getState4.isDragging) !== null && _key$getState$isDragg !== void 0 ? _key$getState$isDragg : false,
154
154
  isPMDragging: (_key$getState$isPMDra = (_key$getState5 = _main.key.getState(editorState)) === null || _key$getState5 === void 0 ? void 0 : _key$getState5.isPMDragging) !== null && _key$getState$isPMDra !== void 0 ? _key$getState$isPMDra : false,
155
155
  multiSelectDnD: (_key$getState$multiSe = (_key$getState6 = _main.key.getState(editorState)) === null || _key$getState6 === void 0 ? void 0 : _key$getState6.multiSelectDnD) !== null && _key$getState$multiSe !== void 0 ? _key$getState$multiSe : undefined,
156
- isShiftDown: (_key$getState$isShift = (_key$getState7 = _main.key.getState(editorState)) === null || _key$getState7 === void 0 ? void 0 : _key$getState7.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined
156
+ isShiftDown: (_key$getState$isShift = (_key$getState7 = _main.key.getState(editorState)) === null || _key$getState7 === void 0 ? void 0 : _key$getState7.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined,
157
+ lastDragCancelled: (_key$getState$lastDra = (_key$getState8 = _main.key.getState(editorState)) === null || _key$getState8 === void 0 ? void 0 : _key$getState8.lastDragCancelled) !== null && _key$getState$lastDra !== void 0 ? _key$getState$lastDra : false
157
158
  };
158
159
  },
159
160
  contentComponent: function contentComponent(_ref7) {
@@ -13,11 +13,9 @@ var _analytics = require("@atlaskit/editor-common/analytics");
13
13
  var _browser = require("@atlaskit/editor-common/browser");
14
14
  var _performanceMeasures = require("@atlaskit/editor-common/performance-measures");
15
15
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
16
- var _selection2 = require("@atlaskit/editor-common/selection");
17
16
  var _utils = require("@atlaskit/editor-common/utils");
18
17
  var _state = require("@atlaskit/editor-prosemirror/state");
19
18
  var _view2 = require("@atlaskit/editor-prosemirror/view");
20
- var _editorTables = require("@atlaskit/editor-tables");
21
19
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
22
20
  var _element = require("@atlaskit/pragmatic-drag-and-drop-auto-scroll/element");
23
21
  var _combine = require("@atlaskit/pragmatic-drag-and-drop/combine");
@@ -32,7 +30,8 @@ var _keymap = require("./keymap");
32
30
  var _activeAnchorTracker = require("./utils/active-anchor-tracker");
33
31
  var _analytics2 = require("./utils/analytics");
34
32
  var _anchorUtils = require("./utils/anchor-utils");
35
- var _selection3 = require("./utils/selection");
33
+ var _getSelection = require("./utils/getSelection");
34
+ var _selection2 = require("./utils/selection");
36
35
  var _transactions = require("./utils/transactions");
37
36
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
38
37
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -96,7 +95,14 @@ var destroyFn = function destroyFn(api, editorView) {
96
95
  // If the TextSelection between the drag start and end has changed, the document has changed, and we should not reapply the last selection
97
96
  var expandedSelectionUnchanged = multiSelectDnD.textAnchor === tr.selection.anchor && multiSelectDnD.textHead === tr.selection.head;
98
97
  if (expandedSelectionUnchanged) {
99
- tr.setSelection(_state.TextSelection.create(tr.doc, multiSelectDnD.userAnchor, multiSelectDnD.userHead));
98
+ var $anchor = tr.doc.resolve(multiSelectDnD.userAnchor);
99
+ var $head = tr.doc.resolve(multiSelectDnD.userHead);
100
+ if ($head.node() === $anchor.node()) {
101
+ var $from = $anchor.min($head);
102
+ (0, _getSelection.selectNode)(tr, $from.pos, $from.node().type.name);
103
+ } else {
104
+ tr.setSelection(_state.TextSelection.create(tr.doc, multiSelectDnD.userAnchor, multiSelectDnD.userHead));
105
+ }
100
106
  }
101
107
  }
102
108
  api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || _api$selection.commands.clearManualSelection()({
@@ -106,11 +112,12 @@ var destroyFn = function destroyFn(api, editorView) {
106
112
  var _ref5 = source.data,
107
113
  start = _ref5.start;
108
114
  // if no drop targets are rendered, assume that drop is invalid
109
- if (location.current.dropTargets.length === 0) {
115
+ var lastDragCancelled = location.current.dropTargets.length === 0;
116
+ if (lastDragCancelled) {
110
117
  var _api$analytics2;
111
118
  var nodeTypes, hasSelectedMultipleNodes;
112
119
  if (isMultiSelect && api) {
113
- var position = (0, _selection3.getSelectedSlicePosition)(start, tr, api);
120
+ var position = (0, _selection2.getSelectedSlicePosition)(start, tr, api);
114
121
  var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, position.from, position.to);
115
122
  nodeTypes = attributes.nodeTypes;
116
123
  hasSelectedMultipleNodes = attributes.hasSelectedMultipleNodes;
@@ -133,7 +140,8 @@ var destroyFn = function destroyFn(api, editorView) {
133
140
  }
134
141
  return tr.setMeta(key, _objectSpread(_objectSpread({}, tr.getMeta(key)), {}, {
135
142
  isDragging: false,
136
- isPMDragging: false
143
+ isPMDragging: false,
144
+ lastDragCancelled: lastDragCancelled
137
145
  }));
138
146
  });
139
147
  }
@@ -151,14 +159,15 @@ var initialState = {
151
159
  isResizerResizing: false,
152
160
  isDocSizeLimitEnabled: null,
153
161
  isPMDragging: false,
154
- multiSelectDnD: undefined
162
+ multiSelectDnD: undefined,
163
+ lastDragCancelled: false
155
164
  };
156
165
  var getDecorations = exports.getDecorations = function getDecorations(state) {
157
166
  var _key$getState;
158
167
  return (_key$getState = key.getState(state)) === null || _key$getState === void 0 ? void 0 : _key$getState.decorations;
159
168
  };
160
169
  var newApply = exports.newApply = function newApply(api, formatMessage, tr, currentState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) {
161
- var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$toggleMenu, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown;
170
+ var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$toggleMenu, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown, _meta$lastDragCancell;
162
171
  var activeNode = currentState.activeNode,
163
172
  decorations = currentState.decorations,
164
173
  isResizerResizing = currentState.isResizerResizing,
@@ -170,7 +179,8 @@ var newApply = exports.newApply = function newApply(api, formatMessage, tr, curr
170
179
  isMenuOpen = currentState.isMenuOpen,
171
180
  menuTriggerBy = currentState.menuTriggerBy,
172
181
  isPMDragging = currentState.isPMDragging,
173
- isShiftDown = currentState.isShiftDown;
182
+ isShiftDown = currentState.isShiftDown,
183
+ lastDragCancelled = currentState.lastDragCancelled;
174
184
  var isActiveNodeDeleted = false;
175
185
 
176
186
  // When steps exist, remap existing decorations, activeNode and multi select positions
@@ -326,11 +336,12 @@ var newApply = exports.newApply = function newApply(api, formatMessage, tr, curr
326
336
  isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
327
337
  isPMDragging: (_meta$isPMDragging = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging !== void 0 ? _meta$isPMDragging : isPMDragging,
328
338
  multiSelectDnD: multiSelectDnD,
329
- isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown
339
+ isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown,
340
+ lastDragCancelled: (_meta$lastDragCancell = meta === null || meta === void 0 ? void 0 : meta.lastDragCancelled) !== null && _meta$lastDragCancell !== void 0 ? _meta$lastDragCancell : lastDragCancelled
330
341
  };
331
342
  };
332
343
  var oldApply = exports.oldApply = function oldApply(api, formatMessage, tr, currentState, oldState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) {
333
- var _meta$activeNode2, _meta$activeNode$hand2, _meta$activeNode8, _meta$isDragging4, _meta$editorHeight2, _meta$editorWidthLeft2, _meta$editorWidthRigh2, _meta$isPMDragging2;
344
+ var _meta$activeNode2, _meta$activeNode$hand2, _meta$activeNode8, _meta$isDragging4, _meta$editorHeight2, _meta$editorWidthLeft2, _meta$editorWidthRigh2, _meta$isPMDragging2, _meta$lastDragCancell2;
334
345
  var isNestedEnabled = flags.isNestedEnabled;
335
346
  var activeNode = currentState.activeNode,
336
347
  isMenuOpen = currentState.isMenuOpen,
@@ -338,7 +349,8 @@ var oldApply = exports.oldApply = function oldApply(api, formatMessage, tr, curr
338
349
  editorWidthLeft = currentState.editorWidthLeft,
339
350
  editorWidthRight = currentState.editorWidthRight,
340
351
  isDragging = currentState.isDragging,
341
- isPMDragging = currentState.isPMDragging;
352
+ isPMDragging = currentState.isPMDragging,
353
+ lastDragCancelled = currentState.lastDragCancelled;
342
354
  var decorations = currentState.decorations,
343
355
  isResizerResizing = currentState.isResizerResizing;
344
356
 
@@ -488,7 +500,8 @@ var oldApply = exports.oldApply = function oldApply(api, formatMessage, tr, curr
488
500
  editorWidthRight: (_meta$editorWidthRigh2 = meta === null || meta === void 0 ? void 0 : meta.editorWidthRight) !== null && _meta$editorWidthRigh2 !== void 0 ? _meta$editorWidthRigh2 : currentState.editorWidthRight,
489
501
  isResizerResizing: isResizerResizing,
490
502
  isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
491
- isPMDragging: (_meta$isPMDragging2 = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging2 !== void 0 ? _meta$isPMDragging2 : isPMDragging
503
+ isPMDragging: (_meta$isPMDragging2 = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging2 !== void 0 ? _meta$isPMDragging2 : isPMDragging,
504
+ lastDragCancelled: (_meta$lastDragCancell2 = meta === null || meta === void 0 ? void 0 : meta.lastDragCancelled) !== null && _meta$lastDragCancell2 !== void 0 ? _meta$lastDragCancell2 : lastDragCancelled
492
505
  };
493
506
  };
494
507
  var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, nodeViewPortalProviderAPI) {
@@ -533,26 +546,28 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
533
546
  },
534
547
  handleDOMEvents: {
535
548
  drop: function drop(view, event) {
536
- var _event$target;
537
- // prosemirror has sends a default transaction on drop (meta where uiEvent is 'drop'),
538
- // this duplicates an empty version of the node it was dropping,
539
- // Adding some check here to prevent that if drop position is within activeNode
540
- var state = view.state,
541
- dispatch = view.dispatch,
542
- dragging = view.dragging;
549
+ var _pluginState, _pluginState2, _pluginState3, _event$target;
550
+ // Prevent native DnD from triggering if we are in drag
551
+ var dispatch = view.dispatch,
552
+ dragging = view.dragging,
553
+ state = view.state;
554
+ var tr = state.tr;
543
555
  var pluginState = key.getState(state);
544
- if (pluginState !== null && pluginState !== void 0 && pluginState.isPMDragging) {
545
- dispatch(state.tr.setMeta(key, _objectSpread(_objectSpread({}, state.tr.getMeta(key)), {}, {
546
- isPMDragging: false
556
+ var dndDragCancelled = (_pluginState = pluginState) === null || _pluginState === void 0 ? void 0 : _pluginState.lastDragCancelled;
557
+ if ((_pluginState2 = pluginState) !== null && _pluginState2 !== void 0 && _pluginState2.isPMDragging || dndDragCancelled && isMultiSelectEnabled) {
558
+ dispatch(tr.setMeta(key, _objectSpread(_objectSpread({}, tr.getMeta(key)), {}, {
559
+ isPMDragging: false,
560
+ lastDragCancelled: false
547
561
  })));
548
562
  }
549
- if (!(event.target instanceof HTMLElement) || !(pluginState !== null && pluginState !== void 0 && pluginState.activeNode)) {
563
+ pluginState = key.getState(view.state);
564
+ if (!(event.target instanceof HTMLElement) || !((_pluginState3 = pluginState) !== null && _pluginState3 !== void 0 && _pluginState3.activeNode)) {
550
565
  return false;
551
566
  }
552
567
  // Currently we can only drag one node at a time
553
568
  // so we only need to check first child
554
569
  var draggable = dragging === null || dragging === void 0 ? void 0 : dragging.slice.content.firstChild;
555
- if ((draggable === null || draggable === void 0 ? void 0 : draggable.type.name) === 'layoutColumn' && (0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_1')) {
570
+ if (dndDragCancelled && isMultiSelectEnabled || (draggable === null || draggable === void 0 ? void 0 : draggable.type.name) === 'layoutColumn' && (0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_1')) {
556
571
  // we prevent native DnD for layoutColumn to prevent single column layout.
557
572
  event.preventDefault();
558
573
  return false;
@@ -566,26 +581,7 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
566
581
  var domPos = Math.max(view.posAtDOM(nodeElement, 0) - 1, 0);
567
582
  var nodeTarget = state.doc.nodeAt(domPos);
568
583
  var isSameNode = !!(nodeTarget && draggable !== null && draggable !== void 0 && draggable.eq(nodeTarget));
569
-
570
- // CellSelection doesn't expose true from/to positions, we need to query the ranges
571
- var selectionRange = state.selection instanceof _editorTables.CellSelection ? state.selection.ranges.reduce(function (previousValue, currentValue, _currentIndex, _array) {
572
- return {
573
- $from: currentValue.$from.min(previousValue.$from),
574
- $to: currentValue.$to.max(previousValue.$to)
575
- };
576
- }) : {
577
- $from: state.selection.$from,
578
- $to: state.selection.$to
579
- };
580
- var expandedSelection = (0, _selection2.expandSelectionBounds)(selectionRange.$from, selectionRange.$to);
581
- var expandedAnchor = expandedSelection.$anchor;
582
- var expandedHead = expandedSelection.$head;
583
- var expandedSelectionFrom = Math.min(expandedAnchor.pos, expandedHead.pos);
584
- var expandedSelectionTo = Math.max(expandedAnchor.pos, expandedHead.pos);
585
- var isInExpandedSelection = domPos >= expandedSelectionFrom && domPos < expandedSelectionTo;
586
-
587
- // Prevent the default drop behavior if the position is within the activeNode or within the expanded selection when multiselect is on
588
- if (isSameNode || isInExpandedSelection && isMultiSelectEnabled) {
584
+ if (isSameNode) {
589
585
  event.preventDefault();
590
586
  return true;
591
587
  }
@@ -658,7 +654,6 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
658
654
  view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
659
655
  isShiftDown: true
660
656
  })));
661
- return true;
662
657
  }
663
658
  return false;
664
659
  } else {
@@ -1,23 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.menuItemsCallback = exports.getBlockMenuItems = void 0;
9
8
  var _react = require("@emotion/react");
10
9
  var _keymaps = require("@atlaskit/editor-common/keymaps");
11
- var _messages = _interopRequireWildcard(require("@atlaskit/editor-common/messages"));
10
+ var _messages = require("@atlaskit/editor-common/messages");
12
11
  var _shortcut = require("@atlaskit/editor-shared-styles/shortcut");
13
12
  var _arrowDown = _interopRequireDefault(require("@atlaskit/icon/core/arrow-down"));
14
13
  var _arrowUp = _interopRequireDefault(require("@atlaskit/icon/core/arrow-up"));
15
- var _copy = _interopRequireDefault(require("@atlaskit/icon/core/copy"));
16
- var _delete2 = _interopRequireDefault(require("@atlaskit/icon/core/delete"));
17
14
  var _moveNode = require("../editor-commands/move-node");
18
15
  var _consts = require("../pm-plugins/utils/consts");
19
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
16
  /* eslint-disable @atlaskit/design-system/prefer-primitives */
22
17
  /**
23
18
  * @jsxRuntime classic
@@ -55,34 +50,6 @@ var getBlockMenuItems = exports.getBlockMenuItems = function getBlockMenuItems(f
55
50
  css: _shortcut.shortcutStyle
56
51
  }, (0, _keymaps.tooltip)(_keymaps.dragToMoveDown))
57
52
  }]
58
- }, {
59
- items: [{
60
- content: formatMessage(_messages.default.copyToClipboard),
61
- value: {
62
- name: 'copy'
63
- },
64
- elemBefore: (0, _react.jsx)(_copy.default, {
65
- label: ""
66
- }),
67
- key: 'copy',
68
- // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values
69
- elemAfter: (0, _react.jsx)("div", {
70
- css: _shortcut.shortcutStyle
71
- }, (0, _keymaps.tooltip)(_keymaps.copy))
72
- }, {
73
- content: formatMessage(_messages.blockControlsMessages.delete),
74
- value: {
75
- name: 'delete'
76
- },
77
- elemBefore: (0, _react.jsx)(_delete2.default, {
78
- label: ""
79
- }),
80
- key: 'delete',
81
- // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values
82
- elemAfter: (0, _react.jsx)("div", {
83
- css: _shortcut.shortcutStyle
84
- }, (0, _keymaps.tooltip)(_keymaps.deleteKey))
85
- }]
86
53
  }];
87
54
  };
88
55
  var menuItemsCallback = exports.menuItemsCallback = {
@@ -91,13 +58,5 @@ var menuItemsCallback = exports.menuItemsCallback = {
91
58
  },
92
59
  moveDown: function moveDown(api, formatMessage) {
93
60
  return (0, _moveNode.moveNodeViaShortcut)(api, _consts.DIRECTION.DOWN, formatMessage);
94
- },
95
- copy: function copy() {
96
- // TODO: implement copy
97
- // console.log('copy');
98
- },
99
- delete: function _delete() {
100
- // TODO: implement delete
101
- // console.log('delete');
102
61
  }
103
62
  };
@@ -133,7 +133,7 @@ export const blockControlsPlugin = ({
133
133
  }
134
134
  },
135
135
  getSharedState(editorState) {
136
- var _key$getState$isMenuO, _key$getState, _key$getState$menuTri, _key$getState2, _key$getState$activeN, _key$getState3, _key$getState$isDragg, _key$getState4, _key$getState$isPMDra, _key$getState5, _key$getState$multiSe, _key$getState6, _key$getState$isShift, _key$getState7;
136
+ var _key$getState$isMenuO, _key$getState, _key$getState$menuTri, _key$getState2, _key$getState$activeN, _key$getState3, _key$getState$isDragg, _key$getState4, _key$getState$isPMDra, _key$getState5, _key$getState$multiSe, _key$getState6, _key$getState$isShift, _key$getState7, _key$getState$lastDra, _key$getState8;
137
137
  if (!editorState) {
138
138
  return undefined;
139
139
  }
@@ -144,7 +144,8 @@ export const blockControlsPlugin = ({
144
144
  isDragging: (_key$getState$isDragg = (_key$getState4 = key.getState(editorState)) === null || _key$getState4 === void 0 ? void 0 : _key$getState4.isDragging) !== null && _key$getState$isDragg !== void 0 ? _key$getState$isDragg : false,
145
145
  isPMDragging: (_key$getState$isPMDra = (_key$getState5 = key.getState(editorState)) === null || _key$getState5 === void 0 ? void 0 : _key$getState5.isPMDragging) !== null && _key$getState$isPMDra !== void 0 ? _key$getState$isPMDra : false,
146
146
  multiSelectDnD: (_key$getState$multiSe = (_key$getState6 = key.getState(editorState)) === null || _key$getState6 === void 0 ? void 0 : _key$getState6.multiSelectDnD) !== null && _key$getState$multiSe !== void 0 ? _key$getState$multiSe : undefined,
147
- isShiftDown: (_key$getState$isShift = (_key$getState7 = key.getState(editorState)) === null || _key$getState7 === void 0 ? void 0 : _key$getState7.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined
147
+ isShiftDown: (_key$getState$isShift = (_key$getState7 = key.getState(editorState)) === null || _key$getState7 === void 0 ? void 0 : _key$getState7.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined,
148
+ lastDragCancelled: (_key$getState$lastDra = (_key$getState8 = key.getState(editorState)) === null || _key$getState8 === void 0 ? void 0 : _key$getState8.lastDragCancelled) !== null && _key$getState$lastDra !== void 0 ? _key$getState$lastDra : false
148
149
  };
149
150
  },
150
151
  contentComponent({
@@ -4,11 +4,9 @@ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit
4
4
  import { browser } from '@atlaskit/editor-common/browser';
5
5
  import { isMeasuring, startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
6
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
7
- import { expandSelectionBounds } from '@atlaskit/editor-common/selection';
8
7
  import { isEmptyDocument, isTextInput } from '@atlaskit/editor-common/utils';
9
8
  import { NodeSelection, PluginKey, TextSelection } from '@atlaskit/editor-prosemirror/state';
10
9
  import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
11
- import { CellSelection } from '@atlaskit/editor-tables';
12
10
  import { fg } from '@atlaskit/platform-feature-flags';
13
11
  import { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';
14
12
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
@@ -23,6 +21,7 @@ import { boundKeydownHandler } from './keymap';
23
21
  import { defaultActiveAnchorTracker } from './utils/active-anchor-tracker';
24
22
  import { getMultiSelectAnalyticsAttributes } from './utils/analytics';
25
23
  import { AnchorRectCache, isAnchorSupported } from './utils/anchor-utils';
24
+ import { selectNode } from './utils/getSelection';
26
25
  import { getSelectedSlicePosition } from './utils/selection';
27
26
  import { getTrMetadata } from './utils/transactions';
28
27
  export const key = new PluginKey('blockControls');
@@ -89,7 +88,14 @@ const destroyFn = (api, editorView) => {
89
88
  // If the TextSelection between the drag start and end has changed, the document has changed, and we should not reapply the last selection
90
89
  const expandedSelectionUnchanged = multiSelectDnD.textAnchor === tr.selection.anchor && multiSelectDnD.textHead === tr.selection.head;
91
90
  if (expandedSelectionUnchanged) {
92
- tr.setSelection(TextSelection.create(tr.doc, multiSelectDnD.userAnchor, multiSelectDnD.userHead));
91
+ const $anchor = tr.doc.resolve(multiSelectDnD.userAnchor);
92
+ const $head = tr.doc.resolve(multiSelectDnD.userHead);
93
+ if ($head.node() === $anchor.node()) {
94
+ const $from = $anchor.min($head);
95
+ selectNode(tr, $from.pos, $from.node().type.name);
96
+ } else {
97
+ tr.setSelection(TextSelection.create(tr.doc, multiSelectDnD.userAnchor, multiSelectDnD.userHead));
98
+ }
93
99
  }
94
100
  }
95
101
  api === null || api === void 0 ? void 0 : (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : _api$selection.commands.clearManualSelection()({
@@ -100,7 +106,8 @@ const destroyFn = (api, editorView) => {
100
106
  start
101
107
  } = source.data;
102
108
  // if no drop targets are rendered, assume that drop is invalid
103
- if (location.current.dropTargets.length === 0) {
109
+ const lastDragCancelled = location.current.dropTargets.length === 0;
110
+ if (lastDragCancelled) {
104
111
  var _api$analytics2;
105
112
  let nodeTypes, hasSelectedMultipleNodes;
106
113
  if (isMultiSelect && api) {
@@ -129,7 +136,8 @@ const destroyFn = (api, editorView) => {
129
136
  return tr.setMeta(key, {
130
137
  ...tr.getMeta(key),
131
138
  isDragging: false,
132
- isPMDragging: false
139
+ isPMDragging: false,
140
+ lastDragCancelled
133
141
  });
134
142
  });
135
143
  }
@@ -147,14 +155,15 @@ const initialState = {
147
155
  isResizerResizing: false,
148
156
  isDocSizeLimitEnabled: null,
149
157
  isPMDragging: false,
150
- multiSelectDnD: undefined
158
+ multiSelectDnD: undefined,
159
+ lastDragCancelled: false
151
160
  };
152
161
  export const getDecorations = state => {
153
162
  var _key$getState;
154
163
  return (_key$getState = key.getState(state)) === null || _key$getState === void 0 ? void 0 : _key$getState.decorations;
155
164
  };
156
165
  export const newApply = (api, formatMessage, tr, currentState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) => {
157
- var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$toggleMenu, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown;
166
+ var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$toggleMenu, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown, _meta$lastDragCancell;
158
167
  let {
159
168
  activeNode,
160
169
  decorations,
@@ -169,7 +178,8 @@ export const newApply = (api, formatMessage, tr, currentState, newState, flags,
169
178
  isMenuOpen,
170
179
  menuTriggerBy,
171
180
  isPMDragging,
172
- isShiftDown
181
+ isShiftDown,
182
+ lastDragCancelled
173
183
  } = currentState;
174
184
  let isActiveNodeDeleted = false;
175
185
 
@@ -325,11 +335,12 @@ export const newApply = (api, formatMessage, tr, currentState, newState, flags,
325
335
  isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
326
336
  isPMDragging: (_meta$isPMDragging = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging !== void 0 ? _meta$isPMDragging : isPMDragging,
327
337
  multiSelectDnD,
328
- isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown
338
+ isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown,
339
+ lastDragCancelled: (_meta$lastDragCancell = meta === null || meta === void 0 ? void 0 : meta.lastDragCancelled) !== null && _meta$lastDragCancell !== void 0 ? _meta$lastDragCancell : lastDragCancelled
329
340
  };
330
341
  };
331
342
  export const oldApply = (api, formatMessage, tr, currentState, oldState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) => {
332
- var _meta$activeNode2, _meta$activeNode$hand2, _meta$activeNode8, _meta$isDragging4, _meta$editorHeight2, _meta$editorWidthLeft2, _meta$editorWidthRigh2, _meta$isPMDragging2;
343
+ var _meta$activeNode2, _meta$activeNode$hand2, _meta$activeNode8, _meta$isDragging4, _meta$editorHeight2, _meta$editorWidthLeft2, _meta$editorWidthRigh2, _meta$isPMDragging2, _meta$lastDragCancell2;
333
344
  const {
334
345
  isNestedEnabled
335
346
  } = flags;
@@ -340,7 +351,8 @@ export const oldApply = (api, formatMessage, tr, currentState, oldState, newStat
340
351
  editorWidthLeft,
341
352
  editorWidthRight,
342
353
  isDragging,
343
- isPMDragging
354
+ isPMDragging,
355
+ lastDragCancelled
344
356
  } = currentState;
345
357
  let {
346
358
  decorations,
@@ -468,7 +480,8 @@ export const oldApply = (api, formatMessage, tr, currentState, oldState, newStat
468
480
  editorWidthRight: (_meta$editorWidthRigh2 = meta === null || meta === void 0 ? void 0 : meta.editorWidthRight) !== null && _meta$editorWidthRigh2 !== void 0 ? _meta$editorWidthRigh2 : currentState.editorWidthRight,
469
481
  isResizerResizing: isResizerResizing,
470
482
  isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
471
- isPMDragging: (_meta$isPMDragging2 = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging2 !== void 0 ? _meta$isPMDragging2 : isPMDragging
483
+ isPMDragging: (_meta$isPMDragging2 = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging2 !== void 0 ? _meta$isPMDragging2 : isPMDragging,
484
+ lastDragCancelled: (_meta$lastDragCancell2 = meta === null || meta === void 0 ? void 0 : meta.lastDragCancelled) !== null && _meta$lastDragCancell2 !== void 0 ? _meta$lastDragCancell2 : lastDragCancelled
472
485
  };
473
486
  };
474
487
  export const createPlugin = (api, getIntl, nodeViewPortalProviderAPI) => {
@@ -514,29 +527,31 @@ export const createPlugin = (api, getIntl, nodeViewPortalProviderAPI) => {
514
527
  },
515
528
  handleDOMEvents: {
516
529
  drop(view, event) {
517
- var _event$target;
518
- // prosemirror has sends a default transaction on drop (meta where uiEvent is 'drop'),
519
- // this duplicates an empty version of the node it was dropping,
520
- // Adding some check here to prevent that if drop position is within activeNode
530
+ var _pluginState, _pluginState2, _pluginState3, _event$target;
531
+ // Prevent native DnD from triggering if we are in drag
521
532
  const {
522
- state,
523
533
  dispatch,
524
- dragging
534
+ dragging,
535
+ state
525
536
  } = view;
526
- const pluginState = key.getState(state);
527
- if (pluginState !== null && pluginState !== void 0 && pluginState.isPMDragging) {
528
- dispatch(state.tr.setMeta(key, {
529
- ...state.tr.getMeta(key),
530
- isPMDragging: false
537
+ const tr = state.tr;
538
+ let pluginState = key.getState(state);
539
+ const dndDragCancelled = (_pluginState = pluginState) === null || _pluginState === void 0 ? void 0 : _pluginState.lastDragCancelled;
540
+ if ((_pluginState2 = pluginState) !== null && _pluginState2 !== void 0 && _pluginState2.isPMDragging || dndDragCancelled && isMultiSelectEnabled) {
541
+ dispatch(tr.setMeta(key, {
542
+ ...tr.getMeta(key),
543
+ isPMDragging: false,
544
+ lastDragCancelled: false
531
545
  }));
532
546
  }
533
- if (!(event.target instanceof HTMLElement) || !(pluginState !== null && pluginState !== void 0 && pluginState.activeNode)) {
547
+ pluginState = key.getState(view.state);
548
+ if (!(event.target instanceof HTMLElement) || !((_pluginState3 = pluginState) !== null && _pluginState3 !== void 0 && _pluginState3.activeNode)) {
534
549
  return false;
535
550
  }
536
551
  // Currently we can only drag one node at a time
537
552
  // so we only need to check first child
538
553
  const draggable = dragging === null || dragging === void 0 ? void 0 : dragging.slice.content.firstChild;
539
- if ((draggable === null || draggable === void 0 ? void 0 : draggable.type.name) === 'layoutColumn' && fg('platform_editor_advanced_layouts_post_fix_patch_1')) {
554
+ if (dndDragCancelled && isMultiSelectEnabled || (draggable === null || draggable === void 0 ? void 0 : draggable.type.name) === 'layoutColumn' && fg('platform_editor_advanced_layouts_post_fix_patch_1')) {
540
555
  // we prevent native DnD for layoutColumn to prevent single column layout.
541
556
  event.preventDefault();
542
557
  return false;
@@ -550,26 +565,7 @@ export const createPlugin = (api, getIntl, nodeViewPortalProviderAPI) => {
550
565
  const domPos = Math.max(view.posAtDOM(nodeElement, 0) - 1, 0);
551
566
  const nodeTarget = state.doc.nodeAt(domPos);
552
567
  const isSameNode = !!(nodeTarget && draggable !== null && draggable !== void 0 && draggable.eq(nodeTarget));
553
-
554
- // CellSelection doesn't expose true from/to positions, we need to query the ranges
555
- const selectionRange = state.selection instanceof CellSelection ? state.selection.ranges.reduce((previousValue, currentValue, _currentIndex, _array) => {
556
- return {
557
- $from: currentValue.$from.min(previousValue.$from),
558
- $to: currentValue.$to.max(previousValue.$to)
559
- };
560
- }) : {
561
- $from: state.selection.$from,
562
- $to: state.selection.$to
563
- };
564
- const expandedSelection = expandSelectionBounds(selectionRange.$from, selectionRange.$to);
565
- const expandedAnchor = expandedSelection.$anchor;
566
- const expandedHead = expandedSelection.$head;
567
- const expandedSelectionFrom = Math.min(expandedAnchor.pos, expandedHead.pos);
568
- const expandedSelectionTo = Math.max(expandedAnchor.pos, expandedHead.pos);
569
- const isInExpandedSelection = domPos >= expandedSelectionFrom && domPos < expandedSelectionTo;
570
-
571
- // Prevent the default drop behavior if the position is within the activeNode or within the expanded selection when multiselect is on
572
- if (isSameNode || isInExpandedSelection && isMultiSelectEnabled) {
568
+ if (isSameNode) {
573
569
  event.preventDefault();
574
570
  return true;
575
571
  }
@@ -648,7 +644,6 @@ export const createPlugin = (api, getIntl, nodeViewPortalProviderAPI) => {
648
644
  ...view.state.tr.getMeta(key),
649
645
  isShiftDown: true
650
646
  }));
651
- return true;
652
647
  }
653
648
  return false;
654
649
  } else {
@@ -6,13 +6,11 @@
6
6
 
7
7
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
8
8
  import { jsx } from '@emotion/react';
9
- import { copy, deleteKey, dragToMoveDown, dragToMoveUp, tooltip } from '@atlaskit/editor-common/keymaps';
10
- import commonMessages, { blockControlsMessages } from '@atlaskit/editor-common/messages';
9
+ import { dragToMoveDown, dragToMoveUp, tooltip } from '@atlaskit/editor-common/keymaps';
10
+ import { blockControlsMessages } from '@atlaskit/editor-common/messages';
11
11
  import { shortcutStyle } from '@atlaskit/editor-shared-styles/shortcut';
12
12
  import ArrowDownIcon from '@atlaskit/icon/core/arrow-down';
13
13
  import ArrowUpIcon from '@atlaskit/icon/core/arrow-up';
14
- import CopyIcon from '@atlaskit/icon/core/copy';
15
- import DeleteIcon from '@atlaskit/icon/core/delete';
16
14
  import { moveNodeViaShortcut } from '../editor-commands/move-node';
17
15
  import { DIRECTION } from '../pm-plugins/utils/consts';
18
16
  export const getBlockMenuItems = formatMessage => {
@@ -44,34 +42,6 @@ export const getBlockMenuItems = formatMessage => {
44
42
  css: shortcutStyle
45
43
  }, tooltip(dragToMoveDown))
46
44
  }]
47
- }, {
48
- items: [{
49
- content: formatMessage(commonMessages.copyToClipboard),
50
- value: {
51
- name: 'copy'
52
- },
53
- elemBefore: jsx(CopyIcon, {
54
- label: ""
55
- }),
56
- key: 'copy',
57
- // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values
58
- elemAfter: jsx("div", {
59
- css: shortcutStyle
60
- }, tooltip(copy))
61
- }, {
62
- content: formatMessage(blockControlsMessages.delete),
63
- value: {
64
- name: 'delete'
65
- },
66
- elemBefore: jsx(DeleteIcon, {
67
- label: ""
68
- }),
69
- key: 'delete',
70
- // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values
71
- elemAfter: jsx("div", {
72
- css: shortcutStyle
73
- }, tooltip(deleteKey))
74
- }]
75
45
  }];
76
46
  };
77
47
  export const menuItemsCallback = {
@@ -80,13 +50,5 @@ export const menuItemsCallback = {
80
50
  },
81
51
  moveDown: (api, formatMessage) => {
82
52
  return moveNodeViaShortcut(api, DIRECTION.DOWN, formatMessage);
83
- },
84
- copy: () => {
85
- // TODO: implement copy
86
- // console.log('copy');
87
- },
88
- delete: () => {
89
- // TODO: implement delete
90
- // console.log('delete');
91
53
  }
92
54
  };
@@ -135,7 +135,7 @@ export var blockControlsPlugin = function blockControlsPlugin(_ref) {
135
135
  }
136
136
  },
137
137
  getSharedState: function getSharedState(editorState) {
138
- var _key$getState$isMenuO, _key$getState, _key$getState$menuTri, _key$getState2, _key$getState$activeN, _key$getState3, _key$getState$isDragg, _key$getState4, _key$getState$isPMDra, _key$getState5, _key$getState$multiSe, _key$getState6, _key$getState$isShift, _key$getState7;
138
+ var _key$getState$isMenuO, _key$getState, _key$getState$menuTri, _key$getState2, _key$getState$activeN, _key$getState3, _key$getState$isDragg, _key$getState4, _key$getState$isPMDra, _key$getState5, _key$getState$multiSe, _key$getState6, _key$getState$isShift, _key$getState7, _key$getState$lastDra, _key$getState8;
139
139
  if (!editorState) {
140
140
  return undefined;
141
141
  }
@@ -146,7 +146,8 @@ export var blockControlsPlugin = function blockControlsPlugin(_ref) {
146
146
  isDragging: (_key$getState$isDragg = (_key$getState4 = key.getState(editorState)) === null || _key$getState4 === void 0 ? void 0 : _key$getState4.isDragging) !== null && _key$getState$isDragg !== void 0 ? _key$getState$isDragg : false,
147
147
  isPMDragging: (_key$getState$isPMDra = (_key$getState5 = key.getState(editorState)) === null || _key$getState5 === void 0 ? void 0 : _key$getState5.isPMDragging) !== null && _key$getState$isPMDra !== void 0 ? _key$getState$isPMDra : false,
148
148
  multiSelectDnD: (_key$getState$multiSe = (_key$getState6 = key.getState(editorState)) === null || _key$getState6 === void 0 ? void 0 : _key$getState6.multiSelectDnD) !== null && _key$getState$multiSe !== void 0 ? _key$getState$multiSe : undefined,
149
- isShiftDown: (_key$getState$isShift = (_key$getState7 = key.getState(editorState)) === null || _key$getState7 === void 0 ? void 0 : _key$getState7.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined
149
+ isShiftDown: (_key$getState$isShift = (_key$getState7 = key.getState(editorState)) === null || _key$getState7 === void 0 ? void 0 : _key$getState7.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined,
150
+ lastDragCancelled: (_key$getState$lastDra = (_key$getState8 = key.getState(editorState)) === null || _key$getState8 === void 0 ? void 0 : _key$getState8.lastDragCancelled) !== null && _key$getState$lastDra !== void 0 ? _key$getState$lastDra : false
150
151
  };
151
152
  },
152
153
  contentComponent: function contentComponent(_ref7) {
@@ -8,11 +8,9 @@ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit
8
8
  import { browser } from '@atlaskit/editor-common/browser';
9
9
  import { isMeasuring, startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
10
10
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
11
- import { expandSelectionBounds } from '@atlaskit/editor-common/selection';
12
11
  import { isEmptyDocument, isTextInput } from '@atlaskit/editor-common/utils';
13
12
  import { NodeSelection, PluginKey, TextSelection } from '@atlaskit/editor-prosemirror/state';
14
13
  import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
15
- import { CellSelection } from '@atlaskit/editor-tables';
16
14
  import { fg } from '@atlaskit/platform-feature-flags';
17
15
  import { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';
18
16
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
@@ -27,6 +25,7 @@ import { boundKeydownHandler } from './keymap';
27
25
  import { defaultActiveAnchorTracker } from './utils/active-anchor-tracker';
28
26
  import { getMultiSelectAnalyticsAttributes } from './utils/analytics';
29
27
  import { AnchorRectCache, isAnchorSupported } from './utils/anchor-utils';
28
+ import { selectNode } from './utils/getSelection';
30
29
  import { getSelectedSlicePosition } from './utils/selection';
31
30
  import { getTrMetadata } from './utils/transactions';
32
31
  export var key = new PluginKey('blockControls');
@@ -89,7 +88,14 @@ var destroyFn = function destroyFn(api, editorView) {
89
88
  // If the TextSelection between the drag start and end has changed, the document has changed, and we should not reapply the last selection
90
89
  var expandedSelectionUnchanged = multiSelectDnD.textAnchor === tr.selection.anchor && multiSelectDnD.textHead === tr.selection.head;
91
90
  if (expandedSelectionUnchanged) {
92
- tr.setSelection(TextSelection.create(tr.doc, multiSelectDnD.userAnchor, multiSelectDnD.userHead));
91
+ var $anchor = tr.doc.resolve(multiSelectDnD.userAnchor);
92
+ var $head = tr.doc.resolve(multiSelectDnD.userHead);
93
+ if ($head.node() === $anchor.node()) {
94
+ var $from = $anchor.min($head);
95
+ selectNode(tr, $from.pos, $from.node().type.name);
96
+ } else {
97
+ tr.setSelection(TextSelection.create(tr.doc, multiSelectDnD.userAnchor, multiSelectDnD.userHead));
98
+ }
93
99
  }
94
100
  }
95
101
  api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || _api$selection.commands.clearManualSelection()({
@@ -99,7 +105,8 @@ var destroyFn = function destroyFn(api, editorView) {
99
105
  var _ref5 = source.data,
100
106
  start = _ref5.start;
101
107
  // if no drop targets are rendered, assume that drop is invalid
102
- if (location.current.dropTargets.length === 0) {
108
+ var lastDragCancelled = location.current.dropTargets.length === 0;
109
+ if (lastDragCancelled) {
103
110
  var _api$analytics2;
104
111
  var nodeTypes, hasSelectedMultipleNodes;
105
112
  if (isMultiSelect && api) {
@@ -126,7 +133,8 @@ var destroyFn = function destroyFn(api, editorView) {
126
133
  }
127
134
  return tr.setMeta(key, _objectSpread(_objectSpread({}, tr.getMeta(key)), {}, {
128
135
  isDragging: false,
129
- isPMDragging: false
136
+ isPMDragging: false,
137
+ lastDragCancelled: lastDragCancelled
130
138
  }));
131
139
  });
132
140
  }
@@ -144,14 +152,15 @@ var initialState = {
144
152
  isResizerResizing: false,
145
153
  isDocSizeLimitEnabled: null,
146
154
  isPMDragging: false,
147
- multiSelectDnD: undefined
155
+ multiSelectDnD: undefined,
156
+ lastDragCancelled: false
148
157
  };
149
158
  export var getDecorations = function getDecorations(state) {
150
159
  var _key$getState;
151
160
  return (_key$getState = key.getState(state)) === null || _key$getState === void 0 ? void 0 : _key$getState.decorations;
152
161
  };
153
162
  export var newApply = function newApply(api, formatMessage, tr, currentState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) {
154
- var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$toggleMenu, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown;
163
+ var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$toggleMenu, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown, _meta$lastDragCancell;
155
164
  var activeNode = currentState.activeNode,
156
165
  decorations = currentState.decorations,
157
166
  isResizerResizing = currentState.isResizerResizing,
@@ -163,7 +172,8 @@ export var newApply = function newApply(api, formatMessage, tr, currentState, ne
163
172
  isMenuOpen = currentState.isMenuOpen,
164
173
  menuTriggerBy = currentState.menuTriggerBy,
165
174
  isPMDragging = currentState.isPMDragging,
166
- isShiftDown = currentState.isShiftDown;
175
+ isShiftDown = currentState.isShiftDown,
176
+ lastDragCancelled = currentState.lastDragCancelled;
167
177
  var isActiveNodeDeleted = false;
168
178
 
169
179
  // When steps exist, remap existing decorations, activeNode and multi select positions
@@ -319,11 +329,12 @@ export var newApply = function newApply(api, formatMessage, tr, currentState, ne
319
329
  isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
320
330
  isPMDragging: (_meta$isPMDragging = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging !== void 0 ? _meta$isPMDragging : isPMDragging,
321
331
  multiSelectDnD: multiSelectDnD,
322
- isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown
332
+ isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown,
333
+ lastDragCancelled: (_meta$lastDragCancell = meta === null || meta === void 0 ? void 0 : meta.lastDragCancelled) !== null && _meta$lastDragCancell !== void 0 ? _meta$lastDragCancell : lastDragCancelled
323
334
  };
324
335
  };
325
336
  export var oldApply = function oldApply(api, formatMessage, tr, currentState, oldState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) {
326
- var _meta$activeNode2, _meta$activeNode$hand2, _meta$activeNode8, _meta$isDragging4, _meta$editorHeight2, _meta$editorWidthLeft2, _meta$editorWidthRigh2, _meta$isPMDragging2;
337
+ var _meta$activeNode2, _meta$activeNode$hand2, _meta$activeNode8, _meta$isDragging4, _meta$editorHeight2, _meta$editorWidthLeft2, _meta$editorWidthRigh2, _meta$isPMDragging2, _meta$lastDragCancell2;
327
338
  var isNestedEnabled = flags.isNestedEnabled;
328
339
  var activeNode = currentState.activeNode,
329
340
  isMenuOpen = currentState.isMenuOpen,
@@ -331,7 +342,8 @@ export var oldApply = function oldApply(api, formatMessage, tr, currentState, ol
331
342
  editorWidthLeft = currentState.editorWidthLeft,
332
343
  editorWidthRight = currentState.editorWidthRight,
333
344
  isDragging = currentState.isDragging,
334
- isPMDragging = currentState.isPMDragging;
345
+ isPMDragging = currentState.isPMDragging,
346
+ lastDragCancelled = currentState.lastDragCancelled;
335
347
  var decorations = currentState.decorations,
336
348
  isResizerResizing = currentState.isResizerResizing;
337
349
 
@@ -481,7 +493,8 @@ export var oldApply = function oldApply(api, formatMessage, tr, currentState, ol
481
493
  editorWidthRight: (_meta$editorWidthRigh2 = meta === null || meta === void 0 ? void 0 : meta.editorWidthRight) !== null && _meta$editorWidthRigh2 !== void 0 ? _meta$editorWidthRigh2 : currentState.editorWidthRight,
482
494
  isResizerResizing: isResizerResizing,
483
495
  isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
484
- isPMDragging: (_meta$isPMDragging2 = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging2 !== void 0 ? _meta$isPMDragging2 : isPMDragging
496
+ isPMDragging: (_meta$isPMDragging2 = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging2 !== void 0 ? _meta$isPMDragging2 : isPMDragging,
497
+ lastDragCancelled: (_meta$lastDragCancell2 = meta === null || meta === void 0 ? void 0 : meta.lastDragCancelled) !== null && _meta$lastDragCancell2 !== void 0 ? _meta$lastDragCancell2 : lastDragCancelled
485
498
  };
486
499
  };
487
500
  export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProviderAPI) {
@@ -526,26 +539,28 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
526
539
  },
527
540
  handleDOMEvents: {
528
541
  drop: function drop(view, event) {
529
- var _event$target;
530
- // prosemirror has sends a default transaction on drop (meta where uiEvent is 'drop'),
531
- // this duplicates an empty version of the node it was dropping,
532
- // Adding some check here to prevent that if drop position is within activeNode
533
- var state = view.state,
534
- dispatch = view.dispatch,
535
- dragging = view.dragging;
542
+ var _pluginState, _pluginState2, _pluginState3, _event$target;
543
+ // Prevent native DnD from triggering if we are in drag
544
+ var dispatch = view.dispatch,
545
+ dragging = view.dragging,
546
+ state = view.state;
547
+ var tr = state.tr;
536
548
  var pluginState = key.getState(state);
537
- if (pluginState !== null && pluginState !== void 0 && pluginState.isPMDragging) {
538
- dispatch(state.tr.setMeta(key, _objectSpread(_objectSpread({}, state.tr.getMeta(key)), {}, {
539
- isPMDragging: false
549
+ var dndDragCancelled = (_pluginState = pluginState) === null || _pluginState === void 0 ? void 0 : _pluginState.lastDragCancelled;
550
+ if ((_pluginState2 = pluginState) !== null && _pluginState2 !== void 0 && _pluginState2.isPMDragging || dndDragCancelled && isMultiSelectEnabled) {
551
+ dispatch(tr.setMeta(key, _objectSpread(_objectSpread({}, tr.getMeta(key)), {}, {
552
+ isPMDragging: false,
553
+ lastDragCancelled: false
540
554
  })));
541
555
  }
542
- if (!(event.target instanceof HTMLElement) || !(pluginState !== null && pluginState !== void 0 && pluginState.activeNode)) {
556
+ pluginState = key.getState(view.state);
557
+ if (!(event.target instanceof HTMLElement) || !((_pluginState3 = pluginState) !== null && _pluginState3 !== void 0 && _pluginState3.activeNode)) {
543
558
  return false;
544
559
  }
545
560
  // Currently we can only drag one node at a time
546
561
  // so we only need to check first child
547
562
  var draggable = dragging === null || dragging === void 0 ? void 0 : dragging.slice.content.firstChild;
548
- if ((draggable === null || draggable === void 0 ? void 0 : draggable.type.name) === 'layoutColumn' && fg('platform_editor_advanced_layouts_post_fix_patch_1')) {
563
+ if (dndDragCancelled && isMultiSelectEnabled || (draggable === null || draggable === void 0 ? void 0 : draggable.type.name) === 'layoutColumn' && fg('platform_editor_advanced_layouts_post_fix_patch_1')) {
549
564
  // we prevent native DnD for layoutColumn to prevent single column layout.
550
565
  event.preventDefault();
551
566
  return false;
@@ -559,26 +574,7 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
559
574
  var domPos = Math.max(view.posAtDOM(nodeElement, 0) - 1, 0);
560
575
  var nodeTarget = state.doc.nodeAt(domPos);
561
576
  var isSameNode = !!(nodeTarget && draggable !== null && draggable !== void 0 && draggable.eq(nodeTarget));
562
-
563
- // CellSelection doesn't expose true from/to positions, we need to query the ranges
564
- var selectionRange = state.selection instanceof CellSelection ? state.selection.ranges.reduce(function (previousValue, currentValue, _currentIndex, _array) {
565
- return {
566
- $from: currentValue.$from.min(previousValue.$from),
567
- $to: currentValue.$to.max(previousValue.$to)
568
- };
569
- }) : {
570
- $from: state.selection.$from,
571
- $to: state.selection.$to
572
- };
573
- var expandedSelection = expandSelectionBounds(selectionRange.$from, selectionRange.$to);
574
- var expandedAnchor = expandedSelection.$anchor;
575
- var expandedHead = expandedSelection.$head;
576
- var expandedSelectionFrom = Math.min(expandedAnchor.pos, expandedHead.pos);
577
- var expandedSelectionTo = Math.max(expandedAnchor.pos, expandedHead.pos);
578
- var isInExpandedSelection = domPos >= expandedSelectionFrom && domPos < expandedSelectionTo;
579
-
580
- // Prevent the default drop behavior if the position is within the activeNode or within the expanded selection when multiselect is on
581
- if (isSameNode || isInExpandedSelection && isMultiSelectEnabled) {
577
+ if (isSameNode) {
582
578
  event.preventDefault();
583
579
  return true;
584
580
  }
@@ -651,7 +647,6 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
651
647
  view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
652
648
  isShiftDown: true
653
649
  })));
654
- return true;
655
650
  }
656
651
  return false;
657
652
  } else {
@@ -6,13 +6,11 @@
6
6
 
7
7
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
8
8
  import { jsx } from '@emotion/react';
9
- import { copy, deleteKey, dragToMoveDown, dragToMoveUp, tooltip } from '@atlaskit/editor-common/keymaps';
10
- import commonMessages, { blockControlsMessages } from '@atlaskit/editor-common/messages';
9
+ import { dragToMoveDown, dragToMoveUp, tooltip } from '@atlaskit/editor-common/keymaps';
10
+ import { blockControlsMessages } from '@atlaskit/editor-common/messages';
11
11
  import { shortcutStyle } from '@atlaskit/editor-shared-styles/shortcut';
12
12
  import ArrowDownIcon from '@atlaskit/icon/core/arrow-down';
13
13
  import ArrowUpIcon from '@atlaskit/icon/core/arrow-up';
14
- import CopyIcon from '@atlaskit/icon/core/copy';
15
- import DeleteIcon from '@atlaskit/icon/core/delete';
16
14
  import { moveNodeViaShortcut } from '../editor-commands/move-node';
17
15
  import { DIRECTION } from '../pm-plugins/utils/consts';
18
16
  export var getBlockMenuItems = function getBlockMenuItems(formatMessage) {
@@ -44,34 +42,6 @@ export var getBlockMenuItems = function getBlockMenuItems(formatMessage) {
44
42
  css: shortcutStyle
45
43
  }, tooltip(dragToMoveDown))
46
44
  }]
47
- }, {
48
- items: [{
49
- content: formatMessage(commonMessages.copyToClipboard),
50
- value: {
51
- name: 'copy'
52
- },
53
- elemBefore: jsx(CopyIcon, {
54
- label: ""
55
- }),
56
- key: 'copy',
57
- // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values
58
- elemAfter: jsx("div", {
59
- css: shortcutStyle
60
- }, tooltip(copy))
61
- }, {
62
- content: formatMessage(blockControlsMessages.delete),
63
- value: {
64
- name: 'delete'
65
- },
66
- elemBefore: jsx(DeleteIcon, {
67
- label: ""
68
- }),
69
- key: 'delete',
70
- // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values
71
- elemAfter: jsx("div", {
72
- css: shortcutStyle
73
- }, tooltip(deleteKey))
74
- }]
75
45
  }];
76
46
  };
77
47
  export var menuItemsCallback = {
@@ -80,13 +50,5 @@ export var menuItemsCallback = {
80
50
  },
81
51
  moveDown: function moveDown(api, formatMessage) {
82
52
  return moveNodeViaShortcut(api, DIRECTION.DOWN, formatMessage);
83
- },
84
- copy: function copy() {
85
- // TODO: implement copy
86
- // console.log('copy');
87
- },
88
- delete: function _delete() {
89
- // TODO: implement delete
90
- // console.log('delete');
91
53
  }
92
54
  };
@@ -47,6 +47,7 @@ export interface PluginState {
47
47
  isPMDragging: boolean;
48
48
  multiSelectDnD?: MultiSelectDnD;
49
49
  isShiftDown?: boolean;
50
+ lastDragCancelled: boolean;
50
51
  }
51
52
  export type ReleaseHiddenDecoration = () => boolean | undefined;
52
53
  export type BlockControlsSharedState = {
@@ -27,6 +27,7 @@ export declare const newApply: (api: ExtractInjectionAPI<BlockControlsPlugin> |
27
27
  isPMDragging: any;
28
28
  multiSelectDnD: import("../blockControlsPluginType").MultiSelectDnD | undefined;
29
29
  isShiftDown: any;
30
+ lastDragCancelled: any;
30
31
  };
31
32
  export declare const oldApply: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, formatMessage: IntlShape['formatMessage'], tr: ReadonlyTransaction, currentState: PluginState, oldState: EditorState, newState: EditorState, flags: FlagType, nodeViewPortalProviderAPI: PortalProviderAPI, anchorRectCache?: AnchorRectCache) => {
32
33
  decorations: DecorationSet;
@@ -39,5 +40,6 @@ export declare const oldApply: (api: ExtractInjectionAPI<BlockControlsPlugin> |
39
40
  isResizerResizing: boolean;
40
41
  isDocSizeLimitEnabled: boolean | null;
41
42
  isPMDragging: any;
43
+ lastDragCancelled: any;
42
44
  };
43
45
  export declare const createPlugin: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, getIntl: () => IntlShape, nodeViewPortalProviderAPI: PortalProviderAPI) => SafePlugin<PluginState>;
@@ -12,6 +12,4 @@ export declare const getBlockMenuItems: (formatMessage: IntlShape['formatMessage
12
12
  export declare const menuItemsCallback: {
13
13
  moveUp: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, formatMessage: IntlShape['formatMessage']) => import("@atlaskit/editor-common/types").Command;
14
14
  moveDown: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, formatMessage: IntlShape['formatMessage']) => import("@atlaskit/editor-common/types").Command;
15
- copy: () => void;
16
- delete: () => void;
17
15
  };
@@ -47,6 +47,7 @@ export interface PluginState {
47
47
  isPMDragging: boolean;
48
48
  multiSelectDnD?: MultiSelectDnD;
49
49
  isShiftDown?: boolean;
50
+ lastDragCancelled: boolean;
50
51
  }
51
52
  export type ReleaseHiddenDecoration = () => boolean | undefined;
52
53
  export type BlockControlsSharedState = {
@@ -27,6 +27,7 @@ export declare const newApply: (api: ExtractInjectionAPI<BlockControlsPlugin> |
27
27
  isPMDragging: any;
28
28
  multiSelectDnD: import("../blockControlsPluginType").MultiSelectDnD | undefined;
29
29
  isShiftDown: any;
30
+ lastDragCancelled: any;
30
31
  };
31
32
  export declare const oldApply: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, formatMessage: IntlShape['formatMessage'], tr: ReadonlyTransaction, currentState: PluginState, oldState: EditorState, newState: EditorState, flags: FlagType, nodeViewPortalProviderAPI: PortalProviderAPI, anchorRectCache?: AnchorRectCache) => {
32
33
  decorations: DecorationSet;
@@ -39,5 +40,6 @@ export declare const oldApply: (api: ExtractInjectionAPI<BlockControlsPlugin> |
39
40
  isResizerResizing: boolean;
40
41
  isDocSizeLimitEnabled: boolean | null;
41
42
  isPMDragging: any;
43
+ lastDragCancelled: any;
42
44
  };
43
45
  export declare const createPlugin: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, getIntl: () => IntlShape, nodeViewPortalProviderAPI: PortalProviderAPI) => SafePlugin<PluginState>;
@@ -12,6 +12,4 @@ export declare const getBlockMenuItems: (formatMessage: IntlShape['formatMessage
12
12
  export declare const menuItemsCallback: {
13
13
  moveUp: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, formatMessage: IntlShape['formatMessage']) => import("@atlaskit/editor-common/types").Command;
14
14
  moveDown: (api: ExtractInjectionAPI<BlockControlsPlugin> | undefined, formatMessage: IntlShape['formatMessage']) => import("@atlaskit/editor-common/types").Command;
15
- copy: () => void;
16
- delete: () => void;
17
15
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-controls",
3
- "version": "3.1.3",
3
+ "version": "3.1.5",
4
4
  "description": "Block controls plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -40,7 +40,7 @@
40
40
  "@atlaskit/editor-plugin-selection": "^2.0.0",
41
41
  "@atlaskit/editor-plugin-width": "^3.0.0",
42
42
  "@atlaskit/editor-prosemirror": "7.0.0",
43
- "@atlaskit/editor-shared-styles": "^3.3.0",
43
+ "@atlaskit/editor-shared-styles": "^3.4.0",
44
44
  "@atlaskit/editor-tables": "^2.9.0",
45
45
  "@atlaskit/icon": "^24.1.0",
46
46
  "@atlaskit/platform-feature-flags": "^1.1.0",
@@ -49,7 +49,7 @@
49
49
  "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^2.0.0",
50
50
  "@atlaskit/primitives": "^14.1.0",
51
51
  "@atlaskit/theme": "^17.0.0",
52
- "@atlaskit/tmp-editor-statsig": "^3.2.0",
52
+ "@atlaskit/tmp-editor-statsig": "^3.3.0",
53
53
  "@atlaskit/tokens": "^4.2.0",
54
54
  "@atlaskit/tooltip": "^20.0.0",
55
55
  "@babel/runtime": "^7.0.0",