@atlaskit/editor-plugin-block-controls 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/blockControlsPlugin.js +27 -14
- package/dist/cjs/editor-commands/move-node.js +15 -18
- package/dist/cjs/pm-plugins/main.js +73 -34
- package/dist/cjs/pm-plugins/utils/getSelection.js +1 -1
- package/dist/cjs/pm-plugins/utils/selection.js +34 -4
- package/dist/cjs/ui/consts.js +9 -1
- package/dist/cjs/ui/drag-handle.js +68 -35
- package/dist/es2019/blockControlsPlugin.js +27 -14
- package/dist/es2019/editor-commands/move-node.js +17 -20
- package/dist/es2019/pm-plugins/main.js +70 -23
- package/dist/es2019/pm-plugins/utils/getSelection.js +1 -1
- package/dist/es2019/pm-plugins/utils/selection.js +33 -3
- package/dist/es2019/ui/consts.js +8 -0
- package/dist/es2019/ui/drag-handle.js +58 -29
- package/dist/esm/blockControlsPlugin.js +27 -14
- package/dist/esm/editor-commands/move-node.js +16 -19
- package/dist/esm/pm-plugins/main.js +71 -32
- package/dist/esm/pm-plugins/utils/getSelection.js +1 -1
- package/dist/esm/pm-plugins/utils/selection.js +33 -3
- package/dist/esm/ui/consts.js +8 -0
- package/dist/esm/ui/drag-handle.js +69 -36
- package/dist/types/blockControlsPluginType.d.ts +2 -0
- package/dist/types/pm-plugins/main.d.ts +2 -1
- package/dist/types/pm-plugins/utils/selection.d.ts +13 -1
- package/dist/types/ui/consts.d.ts +7 -0
- package/dist/types-ts4.5/blockControlsPluginType.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +2 -1
- package/dist/types-ts4.5/pm-plugins/utils/selection.d.ts +13 -1
- package/dist/types-ts4.5/ui/consts.d.ts +7 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-controls
|
|
2
2
|
|
|
3
|
+
## 3.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#117917](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/117917)
|
|
8
|
+
[`9d7669d4f5295`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9d7669d4f5295) -
|
|
9
|
+
[ux] Add shift-select functionality to DnD
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
|
|
3
15
|
## 3.0.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -13,6 +13,7 @@ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
|
13
13
|
var _moveNode = require("./editor-commands/move-node");
|
|
14
14
|
var _moveToLayout = require("./editor-commands/move-to-layout");
|
|
15
15
|
var _main = require("./pm-plugins/main");
|
|
16
|
+
var _getSelection = require("./pm-plugins/utils/getSelection");
|
|
16
17
|
var _blockMenu = _interopRequireDefault(require("./ui/block-menu"));
|
|
17
18
|
var _dragHandleMenu = require("./ui/drag-handle-menu");
|
|
18
19
|
var _globalStyles = require("./ui/global-styles");
|
|
@@ -88,29 +89,40 @@ var blockControlsPlugin = exports.blockControlsPlugin = function blockControlsPl
|
|
|
88
89
|
},
|
|
89
90
|
setMultiSelectPositions: function setMultiSelectPositions(anchor, head) {
|
|
90
91
|
return function (_ref6) {
|
|
91
|
-
var _api$selection;
|
|
92
|
+
var _api$selection, _$to$nodeBefore, _$from$nodeAfter;
|
|
92
93
|
var tr = _ref6.tr;
|
|
93
94
|
var _tr$selection = tr.selection,
|
|
94
95
|
userAnchor = _tr$selection.anchor,
|
|
95
96
|
userHead = _tr$selection.head;
|
|
96
|
-
var expandedAnchor, expandedHead;
|
|
97
|
+
var $expandedAnchor, $expandedHead;
|
|
97
98
|
if (anchor !== undefined && head !== undefined) {
|
|
98
|
-
expandedAnchor = tr.doc.resolve(anchor);
|
|
99
|
-
expandedHead = tr.doc.resolve(head);
|
|
99
|
+
$expandedAnchor = tr.doc.resolve(anchor);
|
|
100
|
+
$expandedHead = tr.doc.resolve(head);
|
|
100
101
|
} else {
|
|
101
102
|
var expandedSelection = (0, _selection.expandSelectionBounds)(tr.selection.$anchor, tr.selection.$head);
|
|
102
|
-
expandedAnchor = expandedSelection.$anchor;
|
|
103
|
-
expandedHead = expandedSelection.$head;
|
|
103
|
+
$expandedAnchor = expandedSelection.$anchor;
|
|
104
|
+
$expandedHead = expandedSelection.$head;
|
|
104
105
|
}
|
|
105
|
-
api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || _api$selection.commands.setManualSelection(expandedAnchor.pos, expandedHead.pos)({
|
|
106
|
+
api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || _api$selection.commands.setManualSelection($expandedAnchor.pos, $expandedHead.pos)({
|
|
106
107
|
tr: tr
|
|
107
108
|
});
|
|
108
|
-
|
|
109
|
-
var
|
|
110
|
-
|
|
109
|
+
var $from = $expandedAnchor.min($expandedHead);
|
|
110
|
+
var $to = $expandedAnchor.max($expandedHead);
|
|
111
|
+
var expandedNormalisedSel;
|
|
112
|
+
if ($from.nodeAfter === $to.nodeBefore) {
|
|
113
|
+
(0, _getSelection.selectNode)(tr, $from.pos, $expandedAnchor.node().type.name);
|
|
114
|
+
expandedNormalisedSel = tr.selection;
|
|
115
|
+
} else if (((_$to$nodeBefore = $to.nodeBefore) === null || _$to$nodeBefore === void 0 ? void 0 : _$to$nodeBefore.type.name) === 'mediaSingle' || ((_$from$nodeAfter = $from.nodeAfter) === null || _$from$nodeAfter === void 0 ? void 0 : _$from$nodeAfter.type.name) === 'mediaSingle') {
|
|
116
|
+
expandedNormalisedSel = new _state.TextSelection($expandedAnchor, $expandedHead);
|
|
117
|
+
tr.setSelection(expandedNormalisedSel);
|
|
118
|
+
} else {
|
|
119
|
+
// this is to normalise the selection's boundaries to inline positions, preventing it from collapsing
|
|
120
|
+
expandedNormalisedSel = _state.TextSelection.between($expandedAnchor, $expandedHead);
|
|
121
|
+
tr.setSelection(expandedNormalisedSel);
|
|
122
|
+
}
|
|
111
123
|
var multiSelectDnD = {
|
|
112
|
-
anchor: expandedAnchor.pos,
|
|
113
|
-
head: expandedHead.pos,
|
|
124
|
+
anchor: $expandedAnchor.pos,
|
|
125
|
+
head: $expandedHead.pos,
|
|
114
126
|
textAnchor: expandedNormalisedSel.anchor,
|
|
115
127
|
textHead: expandedNormalisedSel.head,
|
|
116
128
|
userAnchor: userAnchor,
|
|
@@ -125,7 +137,7 @@ var blockControlsPlugin = exports.blockControlsPlugin = function blockControlsPl
|
|
|
125
137
|
}
|
|
126
138
|
},
|
|
127
139
|
getSharedState: function getSharedState(editorState) {
|
|
128
|
-
var _key$getState$isMenuO, _key$getState, _key$getState$activeN, _key$getState2, _key$getState$isDragg, _key$getState3, _key$getState$isPMDra, _key$getState4, _key$getState$multiSe, _key$getState5;
|
|
140
|
+
var _key$getState$isMenuO, _key$getState, _key$getState$activeN, _key$getState2, _key$getState$isDragg, _key$getState3, _key$getState$isPMDra, _key$getState4, _key$getState$multiSe, _key$getState5, _key$getState$isShift, _key$getState6;
|
|
129
141
|
if (!editorState) {
|
|
130
142
|
return undefined;
|
|
131
143
|
}
|
|
@@ -134,7 +146,8 @@ var blockControlsPlugin = exports.blockControlsPlugin = function blockControlsPl
|
|
|
134
146
|
activeNode: (_key$getState$activeN = (_key$getState2 = _main.key.getState(editorState)) === null || _key$getState2 === void 0 ? void 0 : _key$getState2.activeNode) !== null && _key$getState$activeN !== void 0 ? _key$getState$activeN : undefined,
|
|
135
147
|
isDragging: (_key$getState$isDragg = (_key$getState3 = _main.key.getState(editorState)) === null || _key$getState3 === void 0 ? void 0 : _key$getState3.isDragging) !== null && _key$getState$isDragg !== void 0 ? _key$getState$isDragg : false,
|
|
136
148
|
isPMDragging: (_key$getState$isPMDra = (_key$getState4 = _main.key.getState(editorState)) === null || _key$getState4 === void 0 ? void 0 : _key$getState4.isPMDragging) !== null && _key$getState$isPMDra !== void 0 ? _key$getState$isPMDra : false,
|
|
137
|
-
multiSelectDnD: (_key$getState$multiSe = (_key$getState5 = _main.key.getState(editorState)) === null || _key$getState5 === void 0 ? void 0 : _key$getState5.multiSelectDnD) !== null && _key$getState$multiSe !== void 0 ? _key$getState$multiSe : undefined
|
|
149
|
+
multiSelectDnD: (_key$getState$multiSe = (_key$getState5 = _main.key.getState(editorState)) === null || _key$getState5 === void 0 ? void 0 : _key$getState5.multiSelectDnD) !== null && _key$getState$multiSe !== void 0 ? _key$getState$multiSe : undefined,
|
|
150
|
+
isShiftDown: (_key$getState$isShift = (_key$getState6 = _main.key.getState(editorState)) === null || _key$getState6 === void 0 ? void 0 : _key$getState6.isShiftDown) !== null && _key$getState$isShift !== void 0 ? _key$getState$isShift : undefined
|
|
138
151
|
};
|
|
139
152
|
},
|
|
140
153
|
contentComponent: function contentComponent(_ref7) {
|
|
@@ -60,16 +60,14 @@ var isDragLayoutColumnToTopLevel = function isDragLayoutColumnToTopLevel($from,
|
|
|
60
60
|
* @returns the start position of a node if the node can be moved, otherwise -1
|
|
61
61
|
*/
|
|
62
62
|
var getCurrentNodePos = function getCurrentNodePos(state) {
|
|
63
|
-
var _activeNode$handleOpt;
|
|
64
63
|
var selection = state.selection;
|
|
65
|
-
var _ref = _main.key.getState(state) || {},
|
|
66
|
-
activeNode = _ref.activeNode;
|
|
67
64
|
var currentNodePos = -1;
|
|
68
65
|
|
|
69
66
|
// There are 3 cases when a node can be moved
|
|
70
|
-
|
|
67
|
+
var focusedHandle = getFocusedHandle(state);
|
|
68
|
+
if (focusedHandle) {
|
|
71
69
|
// 1. drag handle of the node is focused
|
|
72
|
-
currentNodePos =
|
|
70
|
+
currentNodePos = focusedHandle.pos;
|
|
73
71
|
} else if ((0, _utils3.isInTable)(state)) {
|
|
74
72
|
if ((0, _utils3.isTableSelected)(selection)) {
|
|
75
73
|
var _findTable$pos, _findTable;
|
|
@@ -87,6 +85,12 @@ var getCurrentNodePos = function getCurrentNodePos(state) {
|
|
|
87
85
|
}
|
|
88
86
|
return currentNodePos;
|
|
89
87
|
};
|
|
88
|
+
var getFocusedHandle = function getFocusedHandle(state) {
|
|
89
|
+
var _activeNode$handleOpt;
|
|
90
|
+
var _ref = _main.key.getState(state) || {},
|
|
91
|
+
activeNode = _ref.activeNode;
|
|
92
|
+
return activeNode && (_activeNode$handleOpt = activeNode.handleOptions) !== null && _activeNode$handleOpt !== void 0 && _activeNode$handleOpt.isFocused ? activeNode : undefined;
|
|
93
|
+
};
|
|
90
94
|
var moveNodeViaShortcut = exports.moveNodeViaShortcut = function moveNodeViaShortcut(api, direction, formatMessage) {
|
|
91
95
|
return function (state) {
|
|
92
96
|
var isParentNodeOfTypeLayout;
|
|
@@ -96,20 +100,14 @@ var moveNodeViaShortcut = exports.moveNodeViaShortcut = function moveNodeViaShor
|
|
|
96
100
|
isParentNodeOfTypeLayout = !!(0, _utils2.findParentNodeOfType)([state.schema.nodes.layoutSection])(state.selection);
|
|
97
101
|
}
|
|
98
102
|
var isMultiSelectEnabled = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true);
|
|
99
|
-
var
|
|
100
|
-
var
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
expandedHead = pluginState.multiSelectDnD.head;
|
|
104
|
-
} else {
|
|
105
|
-
var expandedSelection = (0, _selection.expandSelectionBounds)(selection.$anchor, selection.$head);
|
|
106
|
-
expandedAnchor = expandedSelection.$anchor.pos;
|
|
107
|
-
expandedHead = expandedSelection.$head.pos;
|
|
108
|
-
}
|
|
109
|
-
var currentNodePos = isMultiSelectEnabled ? Math.min(expandedAnchor, expandedHead) : getCurrentNodePos(state);
|
|
103
|
+
var expandedSelection = (0, _selection.expandSelectionBounds)(selection.$anchor, selection.$head);
|
|
104
|
+
var expandedAnchor = expandedSelection.$anchor.pos;
|
|
105
|
+
var expandedHead = expandedSelection.$head.pos;
|
|
106
|
+
var currentNodePos = isMultiSelectEnabled && !getFocusedHandle(state) ? Math.min(expandedAnchor, expandedHead) : getCurrentNodePos(state);
|
|
110
107
|
if (currentNodePos > -1) {
|
|
111
108
|
var _state$doc$nodeAt;
|
|
112
109
|
var $pos = state.doc.resolve(currentNodePos);
|
|
110
|
+
var nodeAfterPos = isMultiSelectEnabled && !getFocusedHandle(state) ? Math.max(expandedAnchor, expandedHead) : $pos.posAtIndex($pos.index() + 1);
|
|
113
111
|
var isTopLevelNode = $pos.depth === 0;
|
|
114
112
|
var moveToPos = -1;
|
|
115
113
|
var nodeIndex = $pos.index();
|
|
@@ -217,7 +215,6 @@ var moveNodeViaShortcut = exports.moveNodeViaShortcut = function moveNodeViaShor
|
|
|
217
215
|
}
|
|
218
216
|
} else {
|
|
219
217
|
var _endOfDoc = $pos.end();
|
|
220
|
-
var nodeAfterPos = isMultiSelectEnabled ? Math.max(expandedAnchor, expandedHead) : $pos.posAtIndex($pos.index() + 1);
|
|
221
218
|
if (nodeAfterPos > _endOfDoc) {
|
|
222
219
|
return false;
|
|
223
220
|
}
|
|
@@ -296,8 +293,8 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
296
293
|
var isMultiSelect = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true, {
|
|
297
294
|
exposure: true
|
|
298
295
|
});
|
|
296
|
+
var slicePosition = (0, _selection2.getSelectedSlicePosition)(start, tr, api);
|
|
299
297
|
if (isMultiSelect) {
|
|
300
|
-
var slicePosition = (0, _selection2.getSelectedSlicePosition)(start, tr, api);
|
|
301
298
|
sliceFrom = slicePosition.from;
|
|
302
299
|
sliceTo = slicePosition.to;
|
|
303
300
|
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, sliceFrom, sliceTo);
|
|
@@ -29,7 +29,7 @@ var _keymap = require("./keymap");
|
|
|
29
29
|
var _activeAnchorTracker = require("./utils/active-anchor-tracker");
|
|
30
30
|
var _analytics2 = require("./utils/analytics");
|
|
31
31
|
var _anchorUtils = require("./utils/anchor-utils");
|
|
32
|
-
var
|
|
32
|
+
var _selection2 = require("./utils/selection");
|
|
33
33
|
var _transactions = require("./utils/transactions");
|
|
34
34
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
35
35
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -107,7 +107,7 @@ var destroyFn = function destroyFn(api, editorView) {
|
|
|
107
107
|
var _api$analytics2;
|
|
108
108
|
var nodeTypes, hasSelectedMultipleNodes;
|
|
109
109
|
if (isMultiSelect && api) {
|
|
110
|
-
var position = (0,
|
|
110
|
+
var position = (0, _selection2.getSelectedSlicePosition)(start, tr, api);
|
|
111
111
|
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, position.from, position.to);
|
|
112
112
|
nodeTypes = attributes.nodeTypes;
|
|
113
113
|
hasSelectedMultipleNodes = attributes.hasSelectedMultipleNodes;
|
|
@@ -128,10 +128,10 @@ var destroyFn = function destroyFn(api, editorView) {
|
|
|
128
128
|
})
|
|
129
129
|
})(tr);
|
|
130
130
|
}
|
|
131
|
-
return tr.setMeta(key, {
|
|
131
|
+
return tr.setMeta(key, _objectSpread(_objectSpread({}, tr.getMeta(key)), {}, {
|
|
132
132
|
isDragging: false,
|
|
133
133
|
isPMDragging: false
|
|
134
|
-
});
|
|
134
|
+
}));
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
}));
|
|
@@ -155,7 +155,7 @@ var getDecorations = exports.getDecorations = function getDecorations(state) {
|
|
|
155
155
|
return (_key$getState = key.getState(state)) === null || _key$getState === void 0 ? void 0 : _key$getState.decorations;
|
|
156
156
|
};
|
|
157
157
|
var newApply = exports.newApply = function newApply(api, formatMessage, tr, currentState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) {
|
|
158
|
-
var _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$
|
|
158
|
+
var _meta$multiSelectDnD, _meta$activeNode, _activeNode, _activeNode2, _meta$activeNode$hand, _meta$isDragging, _meta$isDragging2, _meta$editorHeight, _meta$editorWidthLeft, _meta$editorWidthRigh, _meta$isPMDragging, _meta$isShiftDown;
|
|
159
159
|
var activeNode = currentState.activeNode,
|
|
160
160
|
decorations = currentState.decorations,
|
|
161
161
|
isResizerResizing = currentState.isResizerResizing,
|
|
@@ -165,7 +165,8 @@ var newApply = exports.newApply = function newApply(api, formatMessage, tr, curr
|
|
|
165
165
|
editorWidthRight = currentState.editorWidthRight,
|
|
166
166
|
isDragging = currentState.isDragging,
|
|
167
167
|
isMenuOpen = currentState.isMenuOpen,
|
|
168
|
-
isPMDragging = currentState.isPMDragging
|
|
168
|
+
isPMDragging = currentState.isPMDragging,
|
|
169
|
+
isShiftDown = currentState.isShiftDown;
|
|
169
170
|
var isActiveNodeDeleted = false;
|
|
170
171
|
|
|
171
172
|
// When steps exist, remap existing decorations, activeNode and multi select positions
|
|
@@ -188,10 +189,9 @@ var newApply = exports.newApply = function newApply(api, formatMessage, tr, curr
|
|
|
188
189
|
var meta = tr.getMeta(key);
|
|
189
190
|
var resizerMeta = tr.getMeta('is-resizer-resizing');
|
|
190
191
|
isResizerResizing = resizerMeta !== null && resizerMeta !== void 0 ? resizerMeta : isResizerResizing;
|
|
192
|
+
multiSelectDnD = (_meta$multiSelectDnD = meta === null || meta === void 0 ? void 0 : meta.multiSelectDnD) !== null && _meta$multiSelectDnD !== void 0 ? _meta$multiSelectDnD : multiSelectDnD;
|
|
191
193
|
if (multiSelectDnD && flags.isMultiSelectEnabled) {
|
|
192
|
-
multiSelectDnD = (meta === null || meta === void 0 ? void 0 : meta.isDragging) === false ||
|
|
193
|
-
// For move node with shortcut, only reset when the selection changes
|
|
194
|
-
tr.selection.anchor !== multiSelectDnD.textAnchor || tr.selection.head !== multiSelectDnD.textHead ? undefined : multiSelectDnD;
|
|
194
|
+
multiSelectDnD = (meta === null || meta === void 0 ? void 0 : meta.isDragging) === false || tr.selection.empty ? undefined : multiSelectDnD;
|
|
195
195
|
}
|
|
196
196
|
var _getTrMetadata = (0, _transactions.getTrMetadata)(tr),
|
|
197
197
|
from = _getTrMetadata.from,
|
|
@@ -294,7 +294,8 @@ var newApply = exports.newApply = function newApply(api, formatMessage, tr, curr
|
|
|
294
294
|
isResizerResizing: isResizerResizing,
|
|
295
295
|
isDocSizeLimitEnabled: initialState.isDocSizeLimitEnabled,
|
|
296
296
|
isPMDragging: (_meta$isPMDragging = meta === null || meta === void 0 ? void 0 : meta.isPMDragging) !== null && _meta$isPMDragging !== void 0 ? _meta$isPMDragging : isPMDragging,
|
|
297
|
-
multiSelectDnD:
|
|
297
|
+
multiSelectDnD: multiSelectDnD,
|
|
298
|
+
isShiftDown: (_meta$isShiftDown = meta === null || meta === void 0 ? void 0 : meta.isShiftDown) !== null && _meta$isShiftDown !== void 0 ? _meta$isShiftDown : isShiftDown
|
|
298
299
|
};
|
|
299
300
|
};
|
|
300
301
|
var oldApply = exports.oldApply = function oldApply(api, formatMessage, tr, currentState, oldState, newState, flags, nodeViewPortalProviderAPI, anchorRectCache) {
|
|
@@ -510,9 +511,9 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
|
|
|
510
511
|
dragging = view.dragging;
|
|
511
512
|
var pluginState = key.getState(state);
|
|
512
513
|
if (pluginState !== null && pluginState !== void 0 && pluginState.isPMDragging) {
|
|
513
|
-
dispatch(state.tr.setMeta(key, {
|
|
514
|
+
dispatch(state.tr.setMeta(key, _objectSpread(_objectSpread({}, state.tr.getMeta(key)), {}, {
|
|
514
515
|
isPMDragging: false
|
|
515
|
-
}));
|
|
516
|
+
})));
|
|
516
517
|
}
|
|
517
518
|
if (!(event.target instanceof HTMLElement) || !(pluginState !== null && pluginState !== void 0 && pluginState.activeNode)) {
|
|
518
519
|
return false;
|
|
@@ -565,18 +566,18 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
|
|
|
565
566
|
_activeAnchorTracker.defaultActiveAnchorTracker.reset();
|
|
566
567
|
}
|
|
567
568
|
(_anchorRectCache = anchorRectCache) === null || _anchorRectCache === void 0 || _anchorRectCache.setEditorView(view);
|
|
568
|
-
view.dispatch(view.state.tr.setMeta(key, {
|
|
569
|
+
view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
|
|
569
570
|
isPMDragging: true
|
|
570
|
-
}));
|
|
571
|
+
})));
|
|
571
572
|
},
|
|
572
573
|
dragend: function dragend(view) {
|
|
573
574
|
var _key$getState3;
|
|
574
575
|
var state = view.state,
|
|
575
576
|
dispatch = view.dispatch;
|
|
576
577
|
if ((_key$getState3 = key.getState(state)) !== null && _key$getState3 !== void 0 && _key$getState3.isPMDragging) {
|
|
577
|
-
dispatch(state.tr.setMeta(key, {
|
|
578
|
+
dispatch(state.tr.setMeta(key, _objectSpread(_objectSpread({}, state.tr.getMeta(key)), {}, {
|
|
578
579
|
isPMDragging: false
|
|
579
|
-
}));
|
|
580
|
+
})));
|
|
580
581
|
}
|
|
581
582
|
},
|
|
582
583
|
mouseover: function mouseover(view, event) {
|
|
@@ -584,27 +585,65 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
|
|
|
584
585
|
return false;
|
|
585
586
|
},
|
|
586
587
|
keydown: function keydown(view, event) {
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
if (selection instanceof _state.TextSelection || selection instanceof _state.NodeSelection) {
|
|
595
|
-
var newSelection = _state.TextSelection.create(doc, selection.head, 1);
|
|
596
|
-
view.dispatch(tr.setSelection(newSelection));
|
|
597
|
-
return true;
|
|
588
|
+
if (isMultiSelectEnabled) {
|
|
589
|
+
if (event.shiftKey && event.ctrlKey) {
|
|
590
|
+
//prevent holding down key combo from firing repeatedly
|
|
591
|
+
if (!event.repeat && (0, _keymap.boundKeydownHandler)(api, formatMessage)(view, event)) {
|
|
592
|
+
event.preventDefault();
|
|
593
|
+
return true;
|
|
594
|
+
}
|
|
598
595
|
}
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
596
|
+
|
|
597
|
+
// Command + Shift + ArrowUp to select was broken with the plugin enabled so this manually sets the selection
|
|
598
|
+
var _view$state = view.state,
|
|
599
|
+
selection = _view$state.selection,
|
|
600
|
+
doc = _view$state.doc,
|
|
601
|
+
tr = _view$state.tr;
|
|
602
|
+
var metaKey = _browser.browser.mac ? event.metaKey : event.ctrlKey;
|
|
603
|
+
if (event.key === 'ArrowUp' && event.shiftKey && metaKey) {
|
|
604
|
+
if (selection instanceof _state.TextSelection || selection instanceof _state.NodeSelection) {
|
|
605
|
+
var newSelection = _state.TextSelection.create(doc, selection.head, 1);
|
|
606
|
+
view.dispatch(tr.setSelection(newSelection));
|
|
607
|
+
return true;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
if (!event.repeat && event.shiftKey) {
|
|
611
|
+
view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
|
|
612
|
+
isShiftDown: true
|
|
613
|
+
})));
|
|
604
614
|
return true;
|
|
605
615
|
}
|
|
616
|
+
return false;
|
|
617
|
+
} else {
|
|
618
|
+
// Command + Shift + ArrowUp to select was broken with the plugin enabled so this manually sets the selection
|
|
619
|
+
var _view$state2 = view.state,
|
|
620
|
+
_selection = _view$state2.selection,
|
|
621
|
+
_doc = _view$state2.doc,
|
|
622
|
+
_tr = _view$state2.tr;
|
|
623
|
+
var _metaKey = _browser.browser.mac ? event.metaKey : event.ctrlKey;
|
|
624
|
+
if (event.key === 'ArrowUp' && event.shiftKey && _metaKey) {
|
|
625
|
+
if (_selection instanceof _state.TextSelection || _selection instanceof _state.NodeSelection) {
|
|
626
|
+
var _newSelection = _state.TextSelection.create(_doc, _selection.head, 1);
|
|
627
|
+
view.dispatch(_tr.setSelection(_newSelection));
|
|
628
|
+
return true;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
if (event.shiftKey && event.ctrlKey) {
|
|
632
|
+
//prevent holding down key combo from firing repeatedly
|
|
633
|
+
if (!event.repeat && (0, _keymap.boundKeydownHandler)(api, formatMessage)(view, event)) {
|
|
634
|
+
event.preventDefault();
|
|
635
|
+
return true;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
606
638
|
}
|
|
607
639
|
return false;
|
|
640
|
+
},
|
|
641
|
+
keyup: function keyup(view, event) {
|
|
642
|
+
if (!event.repeat && event.key === 'Shift') {
|
|
643
|
+
view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
|
|
644
|
+
isShiftDown: false
|
|
645
|
+
})));
|
|
646
|
+
}
|
|
608
647
|
}
|
|
609
648
|
}
|
|
610
649
|
},
|
|
@@ -629,10 +668,10 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
|
|
|
629
668
|
// Ignored via go/ees005
|
|
630
669
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
631
670
|
var editorWidthLeft = _editorContentArea.getBoundingClientRect().left;
|
|
632
|
-
transaction.setMeta(key, {
|
|
671
|
+
transaction.setMeta(key, _objectSpread(_objectSpread({}, transaction.getMeta(key)), {}, {
|
|
633
672
|
editorWidthLeft: editorWidthLeft,
|
|
634
673
|
editorWidthRight: editorWidthRight
|
|
635
|
-
});
|
|
674
|
+
}));
|
|
636
675
|
}
|
|
637
676
|
editorView.dispatch(transaction);
|
|
638
677
|
}
|
|
@@ -63,7 +63,7 @@ var getSelection = exports.getSelection = function getSelection(tr, start) {
|
|
|
63
63
|
var _getInlineNodePos = getInlineNodePos(tr, start, nodeSize),
|
|
64
64
|
inlineNodePos = _getInlineNodePos.inlineNodePos,
|
|
65
65
|
inlineNodeEndPos = _getInlineNodePos.inlineNodeEndPos;
|
|
66
|
-
return new _state.TextSelection(tr.doc.resolve(
|
|
66
|
+
return new _state.TextSelection(tr.doc.resolve(inlineNodePos), tr.doc.resolve(inlineNodeEndPos));
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
69
|
var selectNode = exports.selectNode = function selectNode(tr, start, nodeType) {
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getSelectedSlicePosition = exports.getMultiSelectionIfPosInside = void 0;
|
|
6
|
+
exports.getSelectedSlicePosition = exports.getMultiSelectionIfPosInside = exports.expandSelectionHeadToNodeAtPos = exports.alignAnchorHeadInDirectionOfPos = void 0;
|
|
7
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
7
8
|
var _main = require("../main");
|
|
8
9
|
var getMultiSelectionIfPosInside = exports.getMultiSelectionIfPosInside = function getMultiSelectionIfPosInside(api, pos, tr) {
|
|
9
10
|
var _api$blockControls, _pluginState$multiSel, _tr$getMeta;
|
|
@@ -16,7 +17,7 @@ var getMultiSelectionIfPosInside = exports.getMultiSelectionIfPosInside = functi
|
|
|
16
17
|
var multiTo = Math.max(multiSelectDnD.anchor, multiSelectDnD.head);
|
|
17
18
|
|
|
18
19
|
// We subtract one as the handle position is before the node
|
|
19
|
-
return pos >= multiFrom - 1 && pos
|
|
20
|
+
return pos >= multiFrom - 1 && pos < multiTo ? {
|
|
20
21
|
anchor: multiSelectDnD.anchor,
|
|
21
22
|
head: multiSelectDnD.head
|
|
22
23
|
} : {};
|
|
@@ -34,12 +35,41 @@ var getSelectedSlicePosition = exports.getSelectedSlicePosition = function getSe
|
|
|
34
35
|
anchor = _getMultiSelectionIfP.anchor,
|
|
35
36
|
head = _getMultiSelectionIfP.head;
|
|
36
37
|
var inSelection = anchor !== undefined && head !== undefined;
|
|
37
|
-
var from = inSelection ? Math.min(anchor, head) : handlePos;
|
|
38
|
+
var from = inSelection ? Math.min(anchor || 0, head || 0) : handlePos;
|
|
38
39
|
var activeNode = tr.doc.nodeAt(handlePos);
|
|
39
40
|
var activeNodeEndPos = handlePos + ((_activeNode$nodeSize = activeNode === null || activeNode === void 0 ? void 0 : activeNode.nodeSize) !== null && _activeNode$nodeSize !== void 0 ? _activeNode$nodeSize : 1);
|
|
40
|
-
var to = inSelection ? Math.max(anchor, head) : activeNodeEndPos;
|
|
41
|
+
var to = inSelection ? Math.max(anchor || 0, head || 0) : activeNodeEndPos;
|
|
41
42
|
return {
|
|
42
43
|
from: from,
|
|
43
44
|
to: to
|
|
44
45
|
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Takes a position and expands the selection to encompass the node at that position. Ignores empty or out of range selections.
|
|
50
|
+
* Ignores positions that are in text blocks (i.e. not start of a node)
|
|
51
|
+
* @returns TextSelection if expanded, otherwise returns Selection that was passed in.
|
|
52
|
+
*/
|
|
53
|
+
var expandSelectionHeadToNodeAtPos = exports.expandSelectionHeadToNodeAtPos = function expandSelectionHeadToNodeAtPos(selection, nodePos) {
|
|
54
|
+
var doc = selection.$anchor.doc;
|
|
55
|
+
if (nodePos < 0 || nodePos > doc.nodeSize - 2 || selection.empty) {
|
|
56
|
+
return selection;
|
|
57
|
+
}
|
|
58
|
+
var $pos = doc.resolve(nodePos);
|
|
59
|
+
var node = $pos.nodeAfter;
|
|
60
|
+
if ($pos.node().isTextblock || !node) {
|
|
61
|
+
return selection;
|
|
62
|
+
}
|
|
63
|
+
var $newHead = nodePos < selection.anchor ? $pos : doc.resolve(node.nodeSize + nodePos);
|
|
64
|
+
var textSelection = new _state.TextSelection(selection.$anchor, $newHead);
|
|
65
|
+
return textSelection;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* This swaps the anchor/head for NodeSelections when its anchor > pos.
|
|
70
|
+
* This is because NodeSelection always has an anchor at the start of the node,
|
|
71
|
+
* which may not align with the existing selection.
|
|
72
|
+
*/
|
|
73
|
+
var alignAnchorHeadInDirectionOfPos = exports.alignAnchorHeadInDirectionOfPos = function alignAnchorHeadInDirectionOfPos(selection, pos) {
|
|
74
|
+
return selection instanceof _state.NodeSelection && Math.max(pos, selection.anchor) === selection.anchor ? new _state.TextSelection(selection.$head, selection.$anchor) : selection;
|
|
45
75
|
};
|
package/dist/cjs/ui/consts.js
CHANGED
|
@@ -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.topPositionAdjustment = exports.spacingBetweenNodesForPreview = exports.spaceLookupMap = exports.nodeMargins = exports.getNestedNodeLeftPaddingMargin = exports.dropTargetMarginMap = exports.dragHandleGap = exports.DRAG_HANDLE_ZINDEX = exports.DRAG_HANDLE_WIDTH = exports.DRAG_HANDLE_PARAGRAPH_TOP_ADJUSTMENT = exports.DRAG_HANDLE_NARROW_GAP = exports.DRAG_HANDLE_MAX_WIDTH_PLUS_GAP = exports.DRAG_HANDLE_MAX_GAP = exports.DRAG_HANDLE_LAYOUT_SECTION_TOP_ADJUSTMENT = exports.DRAG_HANDLE_HEIGHT = exports.DRAG_HANDLE_H6_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H5_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H4_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H3_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H2_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H1_TOP_ADJUSTMENT = exports.DRAG_HANDLE_DIVIDER_TOP_ADJUSTMENT = exports.DRAG_HANDLE_DEFAULT_GAP = exports.DRAG_HANDLE_BORDER_RADIUS = exports.DEFAULT_COLUMN_DISTRIBUTIONS = exports.BLOCK_MENU_WIDTH = void 0;
|
|
7
|
+
exports.topPositionAdjustment = exports.spacingBetweenNodesForPreview = exports.spaceLookupMap = exports.nodeMargins = exports.getNestedNodeLeftPaddingMargin = exports.dropTargetMarginMap = exports.dragHandleGap = exports.DRAG_HANDLE_ZINDEX = exports.DRAG_HANDLE_WIDTH = exports.DRAG_HANDLE_PARAGRAPH_TOP_ADJUSTMENT = exports.DRAG_HANDLE_NARROW_GAP = exports.DRAG_HANDLE_MAX_WIDTH_PLUS_GAP = exports.DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH = exports.DRAG_HANDLE_MAX_GAP = exports.DRAG_HANDLE_LAYOUT_SECTION_TOP_ADJUSTMENT = exports.DRAG_HANDLE_HEIGHT = exports.DRAG_HANDLE_H6_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H5_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H4_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H3_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H2_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H1_TOP_ADJUSTMENT = exports.DRAG_HANDLE_DIVIDER_TOP_ADJUSTMENT = exports.DRAG_HANDLE_DEFAULT_GAP = exports.DRAG_HANDLE_BORDER_RADIUS = exports.DEFAULT_COLUMN_DISTRIBUTIONS = exports.BLOCK_MENU_WIDTH = void 0;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
10
10
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
@@ -27,6 +27,14 @@ var DRAG_HANDLE_H5_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H5_TOP_ADJUSTMENT = 3;
|
|
|
27
27
|
var DRAG_HANDLE_H6_TOP_ADJUSTMENT = exports.DRAG_HANDLE_H6_TOP_ADJUSTMENT = 3;
|
|
28
28
|
var DRAG_HANDLE_LAYOUT_SECTION_TOP_ADJUSTMENT = exports.DRAG_HANDLE_LAYOUT_SECTION_TOP_ADJUSTMENT = 8;
|
|
29
29
|
var DRAG_HANDLE_PARAGRAPH_TOP_ADJUSTMENT = exports.DRAG_HANDLE_PARAGRAPH_TOP_ADJUSTMENT = 2;
|
|
30
|
+
|
|
31
|
+
/** We only want to shift-select nodes that are at the top level of a document.
|
|
32
|
+
* This is because funky things happen when selecting inside of tableCells, but we
|
|
33
|
+
* also want to avoid heavily nested cases to descope potential corner cases.
|
|
34
|
+
* Various top level nodes have their selection 'from' at depths other than 0,
|
|
35
|
+
* so we allow for some leniency to capture them all. e.g. Table is depth 3.
|
|
36
|
+
*/
|
|
37
|
+
var DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH = exports.DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH = 3;
|
|
30
38
|
var nodeTypeExcludeList = ['embedCard', 'mediaSingle', 'table'];
|
|
31
39
|
var dragHandleGap = exports.dragHandleGap = function dragHandleGap(nodeType, parentNodeType) {
|
|
32
40
|
if (nodeType === 'layoutSection' && (0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_2')) {
|